代码修改如下:from tifffile import imread, imwriteimport matplotlib.pyplot as pltimport 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, metadata=image.metadata)
我对代码进行了以下修改:
1. 在导出结果之前,使用 metadata=image.metadata 参数将原始影像的元数据(包含坐标信息)传递给 imwrite 函数,以保留坐标信息。
2. 添加了合适的缩进和空格,以保持代码的可读性。
请尝试使用修改后的代码,并将沙脊线结果保存为带有坐标信息的 TIFF 格式的输出文件。如果还有其他问题,请随时提出。
如果回答对你有帮助,请给我一个最佳答案!
|