对彩图的 同态滤波图像增强python代码
时间: 2023-12-08 19:04:20 浏览: 74
同态滤波可以应用于彩色图像的增强,可以对每个通道分别进行同态滤波,然后将三个通道的增强结果合并成彩色图像。以下是对彩色图像进行同态滤波增强的示例代码:
```python
import cv2
import numpy as np
def homomorphic_filter(image, sigma, gamma_L, gamma_H):
# 对数变换
img_log = np.log1p(np.array(image, dtype="float") / 255)
# 傅里叶变换
img_fft = np.fft.fft2(img_log)
# 中心化
img_fft_shift = np.fft.fftshift(img_fft)
# 高斯滤波器
rows, cols, channels = image.shape
M, N = np.meshgrid(np.arange(-cols/2, cols/2), np.arange(-rows/2, rows/2))
D = np.sqrt(M**2 + N**2)
H = (gamma_H - gamma_L) * (1 - np.exp(-sigma * (D**2))) + gamma_L
# 滤波
img_fft_filtered = np.zeros_like(img_fft_shift)
for k in range(channels):
img_fft_filtered[:, :, k] = H * img_fft_shift[:, :, k]
img_fft_filtered = np.fft.ifftshift(img_fft_filtered)
# 反傅里叶变换
img_filtered = np.zeros_like(image)
for k in range(channels):
img_filtered[:, :, k] = np.real(np.fft.ifft2(img_fft_filtered[:, :, k]))
# 指数变换
img_exp = np.expm1(img_filtered)
img_output = np.uint8(255 * img_exp / np.max(img_exp))
return img_output
# 读取图像
image = cv2.imread("lena_color.jpg")
# 同态滤波增强
sigma = 10
gamma_L = 0.25
gamma_H = 2.0
image_enhanced = homomorphic_filter(image, sigma, gamma_L, gamma_H)
# 显示结果
cv2.imshow("Original Image", image)
cv2.imshow("Enhanced Image", image_enhanced)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`image`是输入的彩色图像,`sigma`、`gamma_L`和`gamma_H`是同态滤波的参数。最终的增强后的图像保存在`image_enhanced`中,使用`cv2.imshow`函数可以显示原始图像和增强后的图像。注意,在对每个通道进行同态滤波后,需要将滤波后的结果合并成一个彩色图像。
阅读全文