鱼C论坛

 找回密码
 立即注册
查看: 3115|回复: 8

求助大佬们,怎么对边缘线做进一步提取。

[复制链接]
发表于 2023-8-7 08:01:46 | 显示全部楼层
我根据你的原代码和我之前给你的建议,编写了一些可能有用的代码片段,你可以参考或者直接复制到你的代码中。这些代码片段主要是对图像进行预处理和后处理,以提高沙丘脊线的提取效果。我使用了一些常用的图像处理库,如opencv、skimage、scipy等,你可以根据你的需要安装或者替换它们。

  1. # 预处理
  2. # 对图像进行中值滤波,去除椒盐噪声
  3. median = cv2.medianBlur(gray_image, 5)

  4. # 对图像进行直方图均衡化,增强对比度
  5. equalized = cv2.equalizeHist(median)

  6. # 对图像进行高斯滤波,平滑边缘
  7. blurred = cv2.GaussianBlur(equalized, (3, 3), 0)

  8. # 后处理
  9. # 对二值化后的图像进行形态学开运算,去除小的噪声区域
  10. kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
  11. opened = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)

  12. # 对开运算后的图像进行形态学闭运算,填充小的空洞区域
  13. closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)

  14. # 对闭运算后的图像进行骨架化,得到沙丘脊线的细化结果
  15. skeleton = skimage.morphology.skeletonize(closed)

  16. # 对骨架化后的图像进行剪枝,去除多余的分支
  17. pruned = skimage.morphology.thin(skeleton, max_iter=10)

  18. # 对剪枝后的图像进行轮廓检测,得到沙丘脊线的连通区域
  19. contours, hierarchy = cv2.findContours(pruned, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

  20. # 对每个连通区域进行多边形拟合,得到沙丘脊线的近似曲线
  21. polygons = []
  22. for contour in contours:
  23.     epsilon = 0.01 * cv2.arcLength(contour, True) # 拟合精度参数,可以调整
  24.     polygon = cv2.approxPolyDP(contour, epsilon, True)
  25.     polygons.append(polygon)

  26. # 在原始图像上绘制沙丘脊线的近似曲线,并保存结果
  27. result = image.copy()
  28. cv2.drawContours(result, polygons, -1, (0, 0, 255), 2) # 红色曲线,可以修改颜色和粗细
  29. cv2.imwrite('result_image.jpg', result) # 保存结果
复制代码


希望这些代码片段能对你有所帮助。如果你还有其他问题,欢迎继续与我交流。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-23 10:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表