代码修改如下:import cv2import 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 = 3num_cols = 7sub_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算子作为替代的边缘检测方法,并使用高斯滤波代替了中值滤波进行噪声消除。你可以根据实际需求选择其他的边缘检测和滤波方法。
如果回答对你有帮助,请给我一个最佳答案!
|