Justheartyoung 发表于 2023-8-7 13:45:16

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

请在原代码基础上改写:
代码:
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 = # 将沙脊线部分标记为红色
# 导出结果
imwrite('overlay_image.tif', overlay)

陶远航 发表于 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 = # 将沙脊线部分标记为红色

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


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

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

请注意,具体的阈值选取和参数设置可能需要根据你的图像特点进行调整。希望这个改进对你有所帮助!如果你有进一步的问题,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 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 = # 将沙脊线部分标记为红色

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


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

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

这样,您就可以得到具有局部自适应阈值的沙脊线二值化图像。
页: [1]
查看完整版本: 帮忙在原代码中改进,要求局部自适应的阈值来确定沙脊线的二值化图像。