鱼C论坛

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

帮忙在原代码中改进,要求局部自适应的阈值来确定沙脊线的二值化图像。

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

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

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

x
请在原代码基础上改写:
代码:
from tifffile import imread, imwrite
from skimage import filters, feature, color
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.03
binary = edges > threshold
# 叠加沙脊线在原始影像上
overlay = np.copy(image)
overlay[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色
# 导出结果
imwrite('overlay_image.tif', overlay)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-7 13:45:32 | 显示全部楼层
以下是在原代码基础上改进以使用局部自适应阈值的示例:
from tifffile import imread, imwrite
from skimage import filters, feature, color
import matplotlib.pyplot as plt
import numpy as np

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

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

# 使用局部自适应阈值方法进行二值化
binary = filters.threshold_local(gray_image, block_size=51, method='gaussian')

# 提取沙丘脊线
edges = feature.canny(binary)

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

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

在改进的代码中,我们使用了filters.threshold_local函数(局部自适应阈值)来根据图像的局部特征确定二值化阈值。 block_size参数指定了用于计算局部阈值的邻域大小。我们选择了method='gaussian'作为局部自适应阈值选择的方法。

然后,我们使用feature.canny函数来提取沙丘脊线的边缘。最后,我们将沙脊线部分标记为红色,并导出结果图像。

请注意,具体的阈值选取和参数设置可能需要根据你的图像特点进行调整。希望这个改进对你有所帮助!如果你有进一步的问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-7 13:45:36 | 显示全部楼层
根据您的要求,我已经对原始代码进行了改进。下面是改进后的代码:
from tifffile import imread, imwrite
from skimage import filters, feature, color
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 = filters.threshold_local(edges, block_size=51, offset=0.03)

# 将阈值应用于图像,得到二值化图像
binary = edges > threshold

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

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

在改进的代码中,我使用了 filters.threshold_local 函数计算局部自适应阈值。这个函数可以根据图像的局部特征来确定每个像素点的阈值。我设置了 block_size 参数为51,表示每个像素点的阈值将根据其周围51x51的邻域计算得出。同时,我将 offset 参数设置为0.03,作为阈值的偏移量。

然后,将计算得到的阈值应用于边缘图像 edges ,得到二值化图像 binary 。最后,将二值化图像叠加在原始影像 image 上,将沙脊线部分标记为红色,并导出结果为 overlay_image.tif 。

这样,您就可以得到具有局部自适应阈值的沙脊线二值化图像。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 01:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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