import cv2
import numpy as np# 定义 Gabor 滤波器的参数
kSize = 31 # 滤波器核的大小
g_sigma = 3.0 # 高斯包络的标准差
g_theta = np.pi / 4 # Gabor 函数的方向
g_lambda = 10.0 # 正弦波的波长
g_gamma = 0.5 # 空间纵横比
g_psi = np.pi / 2 # 相位偏移# 生成 Gabor 滤波器核
kernel = cv2.getGaborKernel((kSize, kSize), g_sigma, g_theta, g_lambda, g_gamma, g_psi, ktype=cv2.CV_32F)# 读取多波段图像
image = cv2.imread('1.png', cv2.IMREAD_UNCHANGED)# 获取图像的波段数
num_bands = image.shape[2] if len(image.shape) == 3 else 1# 初始化处理后的多波段图像
filtered_image = np.zeros_like(image, dtype=np.float32)# 遍历每个波段
for band in range(num_bands):# 提取当前波段band_image = image[:, :, band] if len(image.shape) == 3 else image# 应用 Gabor 滤波器filtered_band_image = cv2.filter2D(band_image, cv2.CV_32F, kernel)# 将处理后的波段放回结果图像中if len(image.shape) == 3:filtered_image[:, :, band] = filtered_band_imageelse:filtered_image = filtered_band_image# 将处理后的图像转换为合适的数据类型
filtered_image = np.clip(filtered_image, 0, 255).astype(np.uint8)# 显示结果
if num_bands == 3:cv2.imshow('Original Image', image)cv2.imshow('Filtered Image', filtered_image)
else:for band in range(num_bands):cv2.imshow(f'Original Band {band + 1}', image[:, :, band] if len(image.shape) == 3 else image)cv2.imshow(f'Filtered Band {band + 1}', filtered_image[:, :, band] if len(image.shape) == 3 else filtered_image)# 保存结果
cv2.imwrite('filtered_multiband_image.png', filtered_image)# 等待按键,然后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()