|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我想实现对沙丘脊线的提取,但是在对RGB TIFF格式的影像二值化方法以及沙脊线提取涉及的阈值问题 特别影响我最终提取结果的好坏。原来代码提取结果很差,因此我想请大佬们帮我改进代码以实现:
1.基于局部阈值法来对影像进行灰度处理
2.在提取沙脊线的时候,能否基于局部阈值方法来提取。
原来的代码:
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)
# 使用自适应阈值法确定沙脊线的二值化图像
adaptive_threshold = filters.threshold_multiotsu(edges, classes=2)
binary = edges > adaptive_threshold[0] # 使用较低的阈值
# 叠加沙脊线在原始影像上
overlay = np.copy(image)
overlay[binary] = [255, 0, 0] # 将沙脊线部分标记为红色
# 显示原始影像和叠加效果
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(image)
ax[0].set_title('Original Image')
ax[0].axis('off')
ax[1].imshow(overlay)
ax[1].set_title('Overlay')
ax[1].axis('off')
plt.show()
# 导出结果
imwrite('overlay_image.tif', overlay)
为了实现基于局部阈值法对影像进行灰度处理,并使用局部阈值法提取沙脊线,您可以尝试以下改进:
- from tifffile import imread, imwrite
- import matplotlib.pyplot as plt
- import numpy as np
- # 读取TIFF格式无人机影像数据
- image = imread('F:\\duneline\\dune\\dune.tif')
- # 灰度化处理
- gray_image = np.mean(image, axis=2)
- # 自适应阈值二值化
- binary = np.zeros_like(gray_image, dtype=np.uint8)
- window_size = 51 # 窗口大小
- k = 0.2 # 控制阈值的参数
- for i in range(window_size//2, gray_image.shape[0]-window_size//2):
- for j in range(window_size//2, gray_image.shape[1]-window_size//2):
- window = gray_image[i-window_size//2:i+window_size//2+1, j-window_size//2:j+window_size//2+1]
- threshold = np.mean(window) - k * np.std(window)
- if gray_image[i, j] > threshold:
- binary[i, j] = 255
- # 叠加沙脊线在原始影像上
- overlay = np.copy(image)
- overlay[binary != 0] = [255, 0, 0] # 将沙脊线部分标记为红色
- # 显示原始影像和叠加效果
- fig, ax = plt.subplots(1, 2, figsize=(10, 5))
- ax[0].imshow(image)
- ax[0].set_title('Original Image')
- ax[0].axis('off')
- ax[1].imshow(overlay)
- ax[1].set_title('Overlay')
- ax[1].axis('off')
- plt.show()
- # 导出结果
- imwrite('overlay_image.tif', overlay)
复制代码
在上述代码中,我首先将彩色图像转换为灰度图像,然后使用自适应阈值法对灰度图像进行二值化处理。窗口大小和阈值调整参数可以根据实际情况进行调整。最后,将沙脊线部分叠加在原始影像上并进行显示和保存。
请注意,由于我无法运行您的特定图像数据,因此无法验证代码的准确性。您可以尝试使用这个改进后的代码并根据您的实际情况进行调整。如果您遇到任何问题,请提供错误信息或具体描述,以便我能够帮助您进一步解决问题。
如果回答对你有帮助,请给我一个最佳答案! 
|
|