帮我写一段基于python的同态滤波算法
时间: 2023-12-29 15:02:18 浏览: 69
同态滤波算法
4星 · 用户满意度95%
好的,以下是基于python的同态滤波算法的代码实现:
```python
import cv2
import numpy as np
# 定义同态滤波函数
def homomorphic_filter(img, a, b, c, d):
rows, cols = img.shape[:2]
img = np.log1p(np.float32(img))
# 中心化
M = cv2.getOptimalDFTSize(rows)
N = cv2.getOptimalDFTSize(cols)
padded = cv2.copyMakeBorder(img, 0, M - rows, 0, N - cols, cv2.BORDER_CONSTANT, value=0)
# 构造滤波器
x = cv2.getGaussianKernel(N, d)
y = cv2.getGaussianKernel(M, c)
kernel = y * x.T
kernel = np.fft.fftshift(kernel)
# 滤波
filtered = np.fft.ifft2(np.fft.fft2(padded) * kernel)
filtered = filtered[:rows, :cols]
filtered = np.exp(filtered)
filtered = cv2.normalize(filtered, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX)
return np.uint8(filtered)
# 读入图片并进行同态滤波
img = cv2.imread("img.png")
imggray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
filtered_img = homomorphic_filter(imggray, 2, 1, 20, 20)
# 显示结果
cv2.imshow("Original Image", img)
cv2.imshow("Filtered Image", filtered_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,a、b、c、d是同态滤波器的参数,可以根据需要进行调整。
阅读全文