理想陷波滤波器

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

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

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

  • D(u,v)=[(u−u0)2+(v−v0)2]12D(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,D1(u,v)<=D0orD2(u,v)<=D01,OtherH(u, v) = \left\{\begin{aligned}&0, D_1(u, v) <= D_0 or D_2(u, v) <= D_0 \\ &1, Other \end{aligned}\right.H(u,v)={​0,D1​(u,v)<=D0​orD2​(u,v)<=D0​1,Other​

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

  • D2(u,v)=[(u−u1)2+(v+v1)2]12D_2(u, v) = [(u - u_1)^2 + (v + v_1)^2]^{\frac{1}{2}}D2​(u,v)=[(u−u1​)2+(v+v1​)2]21​

取反后得到陷波带通滤波器。

Numpy陷波滤波:

import cv2 as cv
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
img = cv.imread('./images/R-C.png')
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)

测试用例:

理想陷波带通、带阻滤波:

def 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.shapemask = np.zeros_like(dft_shift)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)u1 = m - u0v1 = n - v0dist2 = np.sqrt((x_arr - u1)**2 + (y_arr - v1)**2)mask[dist1 <= d0] = 1mask[dist2 <= d0] = 1if ftype != 'pass':mask = 1 - maskbpf_dft_shift = dft_shift * mask         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 = notch_filter(img_gray, u0=0, v0=0, d0=150, ftype='pass')
img_2, log_2 = notch_filter(img_gray, u0=0, v0=0, d0=150, ftype='stop')


img_3, log_3 = notch_filter(img_gray, u0=150, v0=250, d0=150, ftype='pass')
img_4, log_4 = notch_filter(img_gray, u0=150, v0=250, d0=150, ftype='stop')


巴特沃斯陷波带阻滤波器

H(u,v)=11+[D02D1(u,v)D2(u,v)]NH(u, v) = \frac{1}{1 + \left[\frac{{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​

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

  • D2(u,v)=[(u+u0)2+(v+v0)2]12D_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.shapex_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 - maskbpf_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[−12×D1(u,v)D2(u,v)D02]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.shapex_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 - maskbpf_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')


图像频域增强:陷波滤波器相关推荐

  1. Digital Image processing 数字图像处理最佳陷波滤波器设计(频域)

    最佳陷波滤波器(傅里叶变换,matlab实现) 1基本概念 1.1频域滤波步骤小结 在频域中的滤波是简单明了的.它包含如下步骤: (1)给定一幅大小为MN的输入图像f(x,y),选择填充参数P,Q,典 ...

  2. matlab中陷波滤波器消除,matlab – 找到合适的陷波滤波器以从图像中移除图案

    如果您查看图像的fft,您可以清楚地看到导致图像中图案的强频率. 您需要创建一个陷波滤波器,将这些高峰周围的区域归零.我尝试使用高斯陷波滤波器进行此操作,得到的频谱看起来像这样. ifft图像(对比度 ...

  3. 【OpenCV 例程200篇】90. 频率域陷波滤波器

    [OpenCV 例程200篇]90. 频率域陷波滤波器 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 5.2 陷波滤 ...

  4. 陷波滤波器——周期性降噪

    1.正弦噪声(周期噪声) 图像中的周期噪声是在图像获取期间由电力或机电干扰产生的,同时周期噪声可通过频率域滤波来显著地减少.陷波滤波器是处理此类噪声的有效工具. 一个纯正弦波的傅里叶变换是位于正弦波共 ...

  5. OpenCV 陷波滤波器消除周期性噪音 C++

    观察下面图像: 有明显的近似水平线的噪音模式,我们希望他在频率域内的成分沿垂直轴集中: 下图是该图像的谱: 将垂直轴的分量去掉,构建的陷波器如下: 原图与结果图对比: 滤掉的空间噪音模式: 代码实现: ...

  6. python实现陷波滤波器、低通滤波器、高斯滤波器、巴特沃斯滤波器

    在一幅图像中,其低频成分对应者图像变化缓慢的部分,对应着图像大致的相貌和轮廓,而其高频成分则对应着图像变化剧烈的部分,对应着图像的细节(图像的噪声也属于高频成分). 滤波器 低通滤波器 高通滤波器 陷 ...

  7. matlab 自动生成陷波滤波器算法实现

    自动扫描生成陷波滤波器 Function Code function [aOut1,aOut2,aOut3] = optimumNotchFilter(aIn,time,D0,a,b,m) %这仅仅是 ...

  8. matlab 陷波器,陷波滤波器—matlab实现

    个人在处理工程信号的时候,会遇到电信号50Hz及其倍频干扰特别强的情况,如何直接滤掉这些特定信号,而不影响周边有用信号呢,下面,就给大家推荐一个能精确剔除掉指定频率的滤波器--陷波滤波器. input ...

  9. matlab 设计带阻型陷波滤波器_Q值可调、最大增益恒定的带通滤波器

    带通滤波器(BPF)被广泛用于通带非常窄.通带以外任何其它频率被衰减的应用. 公式(1)是带通滤波器的二阶带通传输函数: 其中,K代表恒定的滤波器增益,Q代表滤波器的品质因数. 在H.Martinez ...

  10. matlab提取电压基波分量,基于复系数陷波滤波器锁相环的电网正序分量检测

    摘  要: 为满足在电网电压不平衡情况下的系统控制需求,需要快速而准确地检测出基波正负序分量的幅值和相位.采用无限脉冲响应(IIR)复杂系数陷波滤波器结合锁相环来提取基波分量中的正序分量,利用MATL ...

最新文章

  1. adv7842自定义方式
  2. python编辑svg文件_如何使用librsvg Python绑定调整svg映像文件的大小
  3. 实现AGI,强化学习就够了?Sutton:奖励机制足够实现各种目标
  4. Asp.net 用户控件和自定义控件注册
  5. eclipse显示服务器地址,eclipse怎样添加服务器地址
  6. BZOJ 4555 [Tjoi2016Heoi2016]求和
  7. centos 安装 py pyhs2
  8. 弃用MyBatis!我们最终选择了 JDBCTemplate!
  9. OpenGL绘制一个三角形的实例
  10. c语言音像图书管理系统设计,c语言--图书管理系统
  11. java 调试 工具_Java调试器–权威的工具列表
  12. 拼接符 防注入正则校验_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
  13. 在Linux下查看环境变量
  14. Mac远程控制软件哪款好用?Remote Desktop manager for mac「专业」
  15. ViewPager与Tab结合使用
  16. java 自定义异常实例分析_Java自定义异常类的实例详解
  17. 基于微博数据的人物性格分类系统
  18. VMware ESXi 安装教程
  19. 广东省计算机一级网络题分值,计算机一级考试分值分布
  20. 大数据在生活中有哪些应用举例?大数据好找工作吗?

热门文章

  1. atoi函数_linux网络编程之POSIX 消息队列 和 系列函数
  2. random随机数类
  3. oracle交叉运算符,Oracle语句优化44个规则详解
  4. .desktop 桌面快捷_两个按键:手机截屏且保存至电脑桌面
  5. Div高度自适应内容高度
  6. 关于sizeof(struct student)的问题
  7. oracle10g 数据源管理器找不到应用程序,可能是程序没有正确安装问题解决
  8. springboot 程序发布到tomcat运行
  9. IBM推出全闪存产品 加速服务器I/O性能
  10. python--multiprocessing多进程总结