图像频域增强:陷波滤波器

您所在的位置:网站首页 带阻滤波器和带通滤波器区别 图像频域增强:陷波滤波器

图像频域增强:陷波滤波器

2024-06-20 00:28| 来源: 网络整理| 查看: 265

理想陷波滤波器

    陷波滤波器可以阻止或允许以某个频率为中心的邻域里的频率通过,所以其在本质上仍然是带阻滤波器或带通滤波器,并且可分别称为 带阻陷波滤波器和带通陷波滤波器。

理想带阻陷波滤波器转移函数为:

H ( u , v ) = { 0 , D ( u , v ) < = D 0 1 , D ( u , v ) > D 0 H(u, v) = \left\{\begin{aligned}&0, D(u, v) D_0 \end{aligned}\right. H(u,v)={​0,D(u,v)D0​​

D ( u , v ) = [ ( u − u 0 ) 2 + ( v − v 0 ) 2 ] 1 2 D(u, v) = [(u - u_0)^2 + (v - v_0)^2]^{\frac{1}{2}} D(u,v)=[(u−u0​)2+(v−v0​)2]21​

带阻陷波滤波器一般是两两工作的,有两个频率中心:

H ( u , v ) = { 0 , D 1 ( u , v ) < = D 0 o r D 2 ( u , v ) < = D 0 1 , O t h e r H(u, v) = \left\{\begin{aligned}&0, D_1(u, v) {D_0}^2}{D_1(u, v)D_2(u, v)}\right]^N} H(u,v)=1+[D1​(u,v)D2​(u,v)D0​2​]N1​

D 1 ( u , v ) = [ ( u − u 0 ) 2 + ( v − v 0 ) 2 ] 1 2 D_1(u, v) = [(u - u_0)^2 + (v - v_0)^2]^{\frac{1}{2}} D1​(u,v)=[(u−u0​)2+(v−v0​)2]21​

D 2 ( u , v ) = [ ( u + u 0 ) 2 + ( v + v 0 ) 2 ] 1 2 D_2(u, v) = [(u + u_0)^2 + (v + v_0)^2]^{\frac{1}{2}} D2​(u,v)=[(u+u0​)2+(v+v0​)2]21​

def bw_notch_filter(img_gray, u0=0, v0=0, d0=50, N=1, ftype='pass'): # 以频谱左上角为坐标原点 dft = cv.dft(img_gray.astype('float32'),flags = cv.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) m, n, _ = dft_shift.shape x_arr = np.concatenate([np.arange(m).reshape(m, 1)], axis=1) y_arr = np.concatenate([np.arange(n).reshape(1, n)], axis=0) dist1 = np.sqrt((x_arr - u0)**2 + (y_arr - v0)**2) dist2 = np.sqrt((x_arr + u0)**2 + (y_arr + v0)**2) mask = 1 / (1. + ((d0**2)/(np.multiply(dist1, dist2)+0.00001))**N) if ftype == 'pass': mask = 1 - mask bpf_dft_shift = dft_shift * mask.reshape(m, n, 1) magnitude_spectrum = cv.magnitude(bpf_dft_shift[:,:,0], bpf_dft_shift[:,:,1]) log_magnitude_spectrum = 20*np.log(magnitude_spectrum+1) bpf_dft = np.fft.ifftshift(bpf_dft_shift) img_ = cv.idft(bpf_dft) img_bpf = cv.magnitude (img_[:,:,0],img_[:,:,1]) return img_bpf, log_magnitude_spectrum

测试效果:在这里插入图片描述

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

高斯带阻陷波滤波器 H ( u , v ) = 1 − e [ − 1 2 × D 1 ( u , v ) D 2 ( u , v ) D 0 2 ] H(u, v) = 1 - e^{\left[\frac{-1}{2}\times \frac{D_1(u,v)D_2(u,v)}{D_0^2}\right]} H(u,v)=1−e[2−1​×D02​D1​(u,v)D2​(u,v)​] def gaussian_notch_filter(img_gray, u0=0, v0=0, d0=50, ftype='pass'): # 以频谱左上角为坐标原点 dft = cv.dft(img_gray.astype('float32'),flags = cv.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) m, n, _ = dft_shift.shape x_arr = np.concatenate([np.arange(m).reshape(m, 1)], axis=1) y_arr = np.concatenate([np.arange(n).reshape(1, n)], axis=0) dist1 = np.sqrt((x_arr - u0)**2 + (y_arr - v0)**2) dist2 = np.sqrt((x_arr + u0)**2 + (y_arr + v0)**2) mask = 1 - np.exp(np.multiply(dist1, dist2)/(d0**2)*(-0.5)) if ftype == 'pass': mask = 1 - mask bpf_dft_shift = dft_shift * mask.reshape(m, n, 1) magnitude_spectrum = cv.magnitude(bpf_dft_shift[:,:,0], bpf_dft_shift[:,:,1]) log_magnitude_spectrum = 20*np.log(magnitude_spectrum+1) bpf_dft = np.fft.ifftshift(bpf_dft_shift) img_ = cv.idft(bpf_dft) img_bpf = cv.magnitude (img_[:,:,0],img_[:,:,1]) return img_bpf, log_magnitude_spectrum img_1, log_1 = gaussian_notch_filter(img_gray, u0=400, v0=400, d0=100, ftype='pass') img_2, log_2 = gaussian_notch_filter(img_gray, u0=400, v0=400, d0=100, ftype='stop')

在这里插入图片描述 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3