|
发表于 2023-8-7 21:07:20
|
显示全部楼层
代码修改如下:
- import cv2
- import numpy as np
- # 1. 分割遥感影像为多块图幅
- def split_image(image, num_rows, num_cols):
- height, width = image.shape[:2]
- row_height = height // num_rows
- col_width = width // num_cols
- images = []
- for r in range(num_rows):
- for c in range(num_cols):
- start_row = r * row_height
- end_row = start_row + row_height
- start_col = c * col_width
- end_col = start_col + col_width
- sub_image = image[start_row:end_row, start_col:end_col]
- images.append(sub_image)
- return images
- # 2. 分别对每块图幅转为灰度图像
- def convert_to_grayscale(images):
- grayscale_images = []
- for image in images:
- gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- grayscale_images.append(gray_image)
- return grayscale_images
- # 3. 使用其他边缘检测方法代替Canny算法
- def edge_detection(images):
- edges = []
- for image in images:
- # 使用其他边缘检测方法,这里以Sobel算子为例
- gradient_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
- gradient_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
- edges_image = cv2.magnitude(gradient_x, gradient_y)
- edges.append(edges_image)
- return edges
- # 4. 消除噪声干扰
- def denoise(images):
- denoised_images = []
- for image in images:
- # 使用其他滤波方法,这里以高斯滤波为例
- denoised_image = cv2.GaussianBlur(image, (5, 5), 0)
- denoised_images.append(denoised_image)
- return denoised_images
- # 5. 将各个图幅合并为一个图幅
- def merge_images(images, num_rows, num_cols):
- row_height, col_width = images[0].shape[:2]
- merged_image = np.zeros((row_height * num_rows, col_width * num_cols), dtype=np.uint8)
- i = 0
- for r in range(num_rows):
- for c in range(num_cols):
- start_row = r * row_height
- end_row = start_row + row_height
- start_col = c * col_width
- end_col = start_col + col_width
- merged_image[start_row:end_row, start_col:end_col] = images[i]
- i += 1
- return merged_image
- # 6. 导出结果
- def export_result(image, filename):
- cv2.imwrite(filename, image)
- # 加载遥感影像
- image = cv2.imread(r"C:\Users\WINDOWS\Desktop\taiyuan\python\dune\dune.tif")
- # 1. 分割遥感影像为多块图幅
- num_rows = 3
- num_cols = 7
- sub_images = split_image(image, num_rows, num_cols)
- # 2. 分别对每块图幅转为灰度图像
- gray_images = convert_to_grayscale(sub_images)
- # 3. 使用其他边缘检测方法代替Canny算法
- edges = edge_detection(gray_images)
- # 4. 消除噪声干扰
- denoised_edges = denoise(edges)
- # 5. 将各个图幅合并为一个图幅
- merged_image = merge_images(denoised_edges, num_rows, num_cols)
- # 6. 导出结果
- export_result(merged_image, 'path_to_output.jpg')
复制代码
这里使用Sobel算子作为替代的边缘检测方法,并使用高斯滤波代替了中值滤波进行噪声消除。你可以根据实际需求选择其他的边缘检测和滤波方法。
如果回答对你有帮助,请给我一个最佳答案!  
|
|