Justheartyoung 发表于 2023-8-8 12:20:11

解决提取的沙脊线不连续且噪音多问题,并修改代码。

代码:
from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
import matplotlib.pyplot as plt
import numpy as np

# 读取TIFF格式无人机影像数据
image = imread('F:\\duneline\\dune\\dune.tif')
# 转换为灰度图像
gray_image = color.rgb2gray(image)
# 边缘检测,提取沙丘脊线
edges = filters.sobel(gray_image)
# 设置合适的阈值来确定沙脊线的二值化图像
threshold = 0.02
binary = edges > threshold

# 使用腐蚀和膨胀操作消除噪音
binary = morphology.binary_erosion(binary, morphology.disk(1))# 腐蚀操作
binary = morphology.binary_dilation(binary, morphology.disk(1))# 膨胀操作
# 叠加沙脊线在原始影像上
overlay = np.copy(image)
overlay = # 将沙脊线部分标记为红色
# 导出结果
imwrite('ed1sobel_02.tif', binary)
结果:





陶远航 发表于 2023-8-8 12:20:26

要解决提取的沙脊线不连续且噪音多的问题,可以尝试调整阈值以及使用形态学操作进行处理。以下是修改后的代码:

from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
import numpy as np

# 读取TIFF格式无人机影像数据
image = imread('F:\\duneline\\dune\\dune.tif')

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

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

# 设置合适的阈值来确定沙脊线的二值化图像
threshold = 0.02
binary = edges > threshold

# 使用闭运算操作填充断裂部分,消除小块噪音
binary = morphology.binary_closing(binary, morphology.disk(2))

# 导出结果
imwrite('ed1sobel_02.tif', binary)


在上述代码中,我将使用的形态学操作从腐蚀和膨胀改为了闭运算(binary_closing()),使用参数 morphology.disk(2) 来填充断裂部分并消除小块噪音。

请注意,调整阈值和使用形态学操作可能需要根据具体情况进行微调,以获得更好的结果。请确保指定的导出路径是正确的,并存储为适当的图像格式(如 .tif)。
如果问题已经解决,请设置最佳答案

学习编程中的Ben 发表于 2023-8-8 12:20:30

【非代码部分】

标题:优化沙脊线提取结果的连续性和噪声问题,并修改代码

为了优化沙脊线提取结果的连续性和减少噪声,你可以尝试以下改进方法:

1. 调整阈值:通过适当调整阈值,可以实现更好的沙脊线提取效果。可以尝试不同的阈值值,直到达到较好的连续性和噪声控制效果。

2. 使用形态学操作:除了腐蚀和膨胀操作外,可以尝试使用开运算和闭运算来进一步处理二值化图像。开运算可以消除小的噪点,闭运算可以填充断裂的沙脊线。

3. 进行后处理:可以考虑使用基于区域的方法,如连通组件分析或断裂线连接,来处理提取结果,从而增强连续性。

根据这些改进方法,下面是经过修改的代码示例:

【代码部分】

from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage

# 读取TIFF格式无人机影像数据
image = imread('F:\\duneline\\dune\\dune.tif')
# 转换为灰度图像
gray_image = color.rgb2gray(image)
# 边缘检测,提取沙丘脊线
edges = filters.sobel(gray_image)
# 设置合适的阈值来确定沙脊线的二值化图像
threshold = 0.02
binary = edges > threshold

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

# 进行闭运算填充断裂的沙脊线
binary = ndimage.binary_closing(binary)

# 标记连通区域并保留较大的区域
label_image, num_labels = ndimage.label(binary)
sizes = ndimage.sum(binary, label_image, range(num_labels + 1))
mask_sizes = sizes < 20000# 只保留面积大于20000的区域
remove_pixel = mask_sizes
binary = 0

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

# 导出结果
imwrite('ed1sobel_02.tif', overlay)


在上述代码中,我添加了以下改进方法:

1. 调整了膨胀操作的参数,使用更大的结构元素(morphology.disk(3)),以填充断裂的沙脊线。

2. 引入了闭运算操作ndimage.binary_closing(),用于进一步填充断裂的沙脊线。

3. 使用连通组件分析(ndimage.label())和面积过滤来移除较小的噪声区域。

通过运行修改后的代码,你将得到针对连续性和噪声进行优化的沙脊线提取结果。

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-8-8 12:20:36

问题描述:提取的沙脊线不连续且噪音多,需要解决这个问题并修改代码。

解决方案:
1. 针对沙脊线不连续的问题,可以尝试使用形态学操作来连接断开的线段。可以使用morphology.binary_closing函数来闭合沙脊线上的小孔和断开的线段。将以下代码添加到现有代码中:
binary = morphology.binary_closing(binary, morphology.disk(3))# 闭合操作,连接断开的线段和填充小孔

2. 针对噪音多的问题,可以尝试调整腐蚀和膨胀操作的参数来控制噪音的消除程度。可以尝试增大腐蚀和膨胀操作的结构元素大小,以便更好地消除噪音。将以下代码修改为合适的结构元素大小:
binary = morphology.binary_erosion(binary, morphology.disk(3))# 腐蚀操作,增大结构元素大小
binary = morphology.binary_dilation(binary, morphology.disk(3))# 膨胀操作,增大结构元素大小

3. 修改完代码后,重新运行程序,查看结果是否满足要求。如果还有其他问题,可以进一步调整参数或尝试其他方法来解决。

修改后的代码如下:
from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
import matplotlib.pyplot as plt
import numpy as np

# 读取TIFF格式无人机影像数据
image = imread('F:\\duneline\\dune\\dune.tif')
# 转换为灰度图像
gray_image = color.rgb2gray(image)
# 边缘检测,提取沙丘脊线
edges = filters.sobel(gray_image)
# 设置合适的阈值来确定沙脊线的二值化图像
threshold = 0.02
binary = edges > threshold

# 使用腐蚀和膨胀操作消除噪音
binary = morphology.binary_erosion(binary, morphology.disk(3))# 腐蚀操作,增大结构元素大小
binary = morphology.binary_dilation(binary, morphology.disk(3))# 膨胀操作,增大结构元素大小
# 使用闭合操作连接断开的线段和填充小孔
binary = morphology.binary_closing(binary, morphology.disk(3))# 闭合操作,连接断开的线段和填充小孔
# 叠加沙脊线在原始影像上
overlay = np.copy(image)
overlay = # 将沙脊线部分标记为红色
# 导出结果
imwrite('ed1sobel_02.tif', binary)


希望以上解决方案和修改的代码能够帮助您解决问题。如果还有其他问题,请随时提问。

Ewan-Ahiouy 发表于 2023-8-8 13:49:22

你这个项目是干什么的呀?{:9_241:}

Justheartyoung 发表于 2023-8-8 14:05:17

Ewan-Ahiouy 发表于 2023-8-8 13:49
你这个项目是干什么的呀?

感兴趣吗?

Ewan-Ahiouy 发表于 2023-8-8 14:08:02

Justheartyoung 发表于 2023-8-8 14:05
感兴趣吗?

好奇{:5_109:}

Justheartyoung 发表于 2023-8-8 14:23:54

Ewan-Ahiouy 发表于 2023-8-8 14:08
好奇

哈哈老哥 感兴趣可以加个联系方式 帮忙一起研究研究 请教请教您

Ewan-Ahiouy 发表于 2023-8-8 17:14:33

Justheartyoung 发表于 2023-8-8 14:23
哈哈老哥 感兴趣可以加个联系方式 帮忙一起研究研究 请教请教您

我很拉的{:10_266:}

不过就是想知道这是干嘛用的{:10_256:}
页: [1]
查看完整版本: 解决提取的沙脊线不连续且噪音多问题,并修改代码。