鱼C论坛

 找回密码
 立即注册
查看: 1855|回复: 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
要消除边缘检测结果中的噪音,可以尝试使用图像处理中的腐蚀和膨胀操作。腐蚀可以减小边缘的宽度,同时消除小的噪点,而膨胀可以恢复边缘的宽度,使其更连续。

以下是修改后的代码:
from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
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

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

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

imwrite('edge_001.tif', overlay)

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

通过这样的处理,可以消除边缘检测结果中的噪音,得到更清晰的沙脊线结果。
edge_噪音.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

以下是修改后的代码:
from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
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

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

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

imwrite('edge_001.tif', overlay)

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

通过这样的处理,可以消除边缘检测结果中的噪音,得到更清晰的沙脊线结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-7 10:48:56 | 显示全部楼层
要消除边缘检测结果中的噪音,你可以尝试以下方法:

1. 调整阈值:通过调整阈值来改变二值化的结果,可以影响噪音的数量。尝试使用不同的阈值值,找到一个能够更好地区分山脊线和噪音的值。

2. 进行形态学操作:使用形态学操作可以帮助去除噪音。尝试使用腐蚀(erosion)和膨胀(dilation)等形态学操作来平滑边缘,并消除噪音。这需要使用scikit-image库的morphology模块。

下面是改进后的代码示例,其中添加了形态学操作:
from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
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

# 进行形态学操作,开运算来去除噪音并平滑边缘
binary = morphology.opening(binary, morphology.disk(3))

# 叠加沙脊线在原始影像上
overlay = np.copy(image)
overlay[binary] = [255, 0, 0]

# 将沙脊线部分标记为红色
imwrite('edge_001.tif', overlay)

在这个示例中,通过添加morphology.opening()来进行开运算操作,使用圆形的结构元素(disk(3))来去除噪音并平滑边缘。

希望这对你有所帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 13:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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