边缘检测山脊线结果中有很多噪音,怎么消除?请在原有代码基础上给予改正,感谢。
代码: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 = # 将沙脊线部分标记为红色
imwrite('edge_001.tif', overlay)
结果:
要消除边缘检测结果中的噪音,可以尝试使用图像处理中的腐蚀和膨胀操作。腐蚀可以减小边缘的宽度,同时消除小的噪点,而膨胀可以恢复边缘的宽度,使其更连续。
以下是修改后的代码:
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 = # 将沙脊线部分标记为红色
imwrite('edge_001.tif', overlay)
在代码中,我添加了 morphology.binary_erosion 和 morphology.binary_dilation 两个函数来进行腐蚀和膨胀操作。这里使用了一个半径为2的圆形结构元素,你可以根据实际情况调整结构元素的大小。
通过这样的处理,可以消除边缘检测结果中的噪音,得到更清晰的沙脊线结果。 要消除边缘检测结果中的噪音,你可以尝试以下方法:
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 =
# 将沙脊线部分标记为红色
imwrite('edge_001.tif', overlay)
在这个示例中,通过添加morphology.opening()来进行开运算操作,使用圆形的结构元素(disk(3))来去除噪音并平滑边缘。
希望这对你有所帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
页:
[1]