import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
def homomorphic_filter(src,d0=10,r1=0.5,rh=2,c=4,h=2.0,l=0.5):
gray=src.copy()
if len(src.shape)>2:
gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
gray=np.float64(gray)
rows,cols=gray.shape
gray_fft=np.fft.fft2(gray)
gray_fftshift=np.fft.fftshift(gray_fft)
dst_fftshift=np.zeros_like(gray_fftshift)
M, N=np.meshgrid(np.arange(-cols//2,cols//2),np.arange(-rows//2,rows//2))
D=np.sqrt(M**2+N**2)
Z=(rh-r1)*(1-np.exp(-c*(D**2/d0**2)))+r1
dst_fftshift=Z*gray_fftshift
dst_fftshift=(h-l)*dst_fftshift+l
dst_ifftshift=np.fft.ifftshift(dst_fftshift)
dst_ifft=np.fft.ifft2(dst_ifftshift)
dst=np.real(dst_ifft)
dst=np.uint8(np.clip(dst,0,255))
return dst
def put(path):
image=cv2.imread(path,1)
image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#同态滤波器
h_image=homomorphic_filter(image,d0=10,r1=0.5,rh=2,c=4,h=2.0,l=0.5)
plt.subplot(121)
plt.axis('off')
plt.title('原始图像')
plt.imshow(image,cmap='gray')
plt.subplot(122)
plt.axis('off')
plt.title('同态滤波器图像')
plt.imshow(h_image,'gray')
plt.savefig('C:/Users/xpp/Desktop/result.png')
plt.show()
put(r'C:/Users/xpp/Desktop/Lena.png')
算法:同态滤波器是一种在频域中同时能够压缩图像的亮度范围和增强图像对比度的方法,将像元灰度值看作是照度和反射率两个组份的产物。由于照度相对变化很小,可以看作是图像的低频成份,而反射率则是高频成份。通过分别处理照度和反射率对像元灰度值的影响,达到揭示阴影区细节特征的目的。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!