鱼C论坛

 找回密码
 立即注册
查看: 3144|回复: 2

[已解决]边缘检测山脊线结果中有很多噪音,怎么消除?请在原有代码基础上给予改正,感谢。

[复制链接]
发表于 2023-8-7 10:48:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
from tifffile import imread, imwrite
from skimage import filters, feature, color
import matplotlib.pyplot as plt
import numpy as np
# 读取TIFF格式无人机影像数据
image = imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\1=quick_dom.tif')
# 转换为灰度图像
gray_image = color.rgb2gray(image)
# 边缘检测,提取沙丘脊线
edges = filters.sobel(gray_image)
# 设置合适的阈值来确定沙脊线的二值化图像
threshold = 0.001
binary = edges > threshold
# 叠加沙脊线在原始影像上
overlay = np.copy(image)
overlay[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色
imwrite('edge_001.tif', overlay)
结果:

最佳答案
2023-8-7 10:48:55
要消除边缘检测结果中的噪音,可以尝试使用图像处理中的腐蚀和膨胀操作。腐蚀可以减小边缘的宽度,同时消除小的噪点,而膨胀可以恢复边缘的宽度,使其更连续。

以下是修改后的代码:

  1. from tifffile import imread, imwrite
  2. from skimage import filters, feature, color, morphology
  3. import matplotlib.pyplot as plt
  4. import numpy as np

  5. # 读取TIFF格式无人机影像数据
  6. image = imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\1=quick_dom.tif')

  7. # 转换为灰度图像
  8. gray_image = color.rgb2gray(image)

  9. # 边缘检测,提取沙丘脊线
  10. edges = filters.sobel(gray_image)

  11. # 设置合适的阈值来确定沙脊线的二值化图像
  12. threshold = 0.001
  13. binary = edges > threshold

  14. # 使用腐蚀和膨胀操作消除噪音
  15. binary = morphology.binary_erosion(binary, morphology.disk(2))  # 腐蚀操作
  16. binary = morphology.binary_dilation(binary, morphology.disk(2))  # 膨胀操作

  17. # 叠加沙脊线在原始影像上
  18. overlay = np.copy(image)
  19. overlay[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色

  20. imwrite('edge_001.tif', overlay)
复制代码


在代码中,我添加了 morphology.binary_erosion 和 morphology.binary_dilation 两个函数来进行腐蚀和膨胀操作。这里使用了一个半径为2的圆形结构元素,你可以根据实际情况调整结构元素的大小。

通过这样的处理,可以消除边缘检测结果中的噪音,得到更清晰的沙脊线结果。
edge_噪音.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-5 02:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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