鱼C论坛

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

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

[复制链接]
发表于 2023-8-8 12:20:11 | 显示全部楼层 |阅读模式

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

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

x
代码:
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[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色
# 导出结果
imwrite('ed1sobel_02.tif', binary)
结果:





微信截图_20230808121932.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-8 12:20:30 | 显示全部楼层
【非代码部分】

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

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

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

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

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

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

【代码部分】
from tifffile import imread, imwritefrom skimage import filters, feature, color, morphologyimport matplotlib.pyplot as pltimport numpy as npfrom scipy import ndimage# 读取TIFF格式无人机影像数据image = imread('F:\\duneline\\dune\\dune.tif')# 转换为灰度图像gray_image = color.rgb2gray(image)# 边缘检测,提取沙丘脊线edges = filters.sobel(gray_image)# 设置合适的阈值来确定沙脊线的二值化图像threshold = 0.02binary = 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[label_image]binary[remove_pixel] = 0# 叠加沙脊线在原始影像上overlay = np.copy(image)overlay[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色# 导出结果imwrite('ed1sobel_02.tif', overlay)
在上述代码中,我添加了以下改进方法:

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

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

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

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

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色
# 导出结果
imwrite('ed1sobel_02.tif', binary)

希望以上解决方案和修改的代码能够帮助您解决问题。如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-8 13:49:22 | 显示全部楼层
你这个项目是干什么的呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-8 14:05:17 | 显示全部楼层
Ewan-Ahiouy 发表于 2023-8-8 13:49
你这个项目是干什么的呀?

感兴趣吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-8 14:08:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-8 14:23:54 | 显示全部楼层

哈哈老哥 感兴趣可以加个联系方式 帮忙一起研究研究 请教请教您
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-8 17:14:33 | 显示全部楼层
Justheartyoung 发表于 2023-8-8 14:23
哈哈老哥 感兴趣可以加个联系方式 帮忙一起研究研究 请教请教您

我很拉的

不过就是想知道这是干嘛用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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