1.傅里叶变换

图像的频率滤波是基于傅里叶变换的,通过二维傅里叶变换把图像从空域转换到频域,对频域的图像的频率进行操作,比如限制某个频率范围的像素通过。

(1)傅里叶变换

其中离散傅里叶变换为:

(2)傅里叶逆变换

其中离散傅里叶逆变换为:

(3)傅里叶变换性质

上述傅里叶变换均为一维傅里叶变换,然而图像中为二维的傅里叶变换,因此我们可以分别在行方向和列方向分别做傅里叶变换,

2.频域滤波

频域滤波的基本流程如下

傅里叶变换一般要中心化,根据二维傅里叶的平移性质:

我们只需要对变换后的图像像素乘以就可以进行中心化和去中心化:

3.常用滤波器

(1)理想滤波器

理想低通滤波器


理想高通滤波器

(2)butterwoth滤波器

butterwoth低通滤波器:


butterwoth高通滤波器:

(3)指数滤波器

指数低通滤波 :


指数高通滤波: 

4.python实现

import cv2 as cv
import numpy as np
import matplotlib.pyplot as pltdef filter(img, D0, W=None, N=2, type='lp', filter='butterworth'):'''频域滤波器Args:img: 灰度图片D0: 截止频率W: 带宽N: butterworth和指数滤波器的阶数type: lp, hp, bp, bs即低通、高通、带通、带阻filter:butterworth、ideal、exponential即巴特沃斯、理想、指数滤波器Returns:imgback:滤波后的图像'''#离散傅里叶变换dft=cv.dft(np.float32(img),flags=cv.DFT_COMPLEX_OUTPUT)#中心化dtf_shift=np.fft.fftshift(dft) rows,cols=img.shape crow,ccol=int(rows/2),int(cols/2) #计算频谱中心mask=np.ones((rows,cols,2)) #生成rows行cols列的2纬矩阵for i in range(rows):for j in range(cols):D = np.sqrt((i-crow)**2+(j-ccol)**2)if(filter.lower() == 'butterworth'):if(type == 'lp'):mask[i, j] = 1/(1+(D/D0)**(2*N))elif(type == 'hp'):mask[i, j] = 1/(1+(D0/D)**(2*N))elif(type == 'bs'):mask[i, j] = 1/(1+(D*W/(D**2-D0**2))**(2*N))elif(type == 'bp'):mask[i, j] = 1/(1+((D**2-D0**2)/D*W)**(2*N))else:assert('type error')elif(filter.lower() == 'ideal'): #理想滤波器if(type == 'lp'):if(D > D0):mask[i, j] = 0elif(type == 'hp'):if(D < D0):mask[i, j] = 0elif(type == 'bs'):if(D > D0 and D < D0+W):mask[i, j] = 0elif(type == 'bp'):if(D < D0 and D > D0+W):mask[i, j] = 0else:assert('type error')elif(filter.lower() == 'exponential'): #指数滤波器if(type == 'lp'):mask[i, j] = np.exp(-(D/D0)**(2*N))elif(type == 'hp'):mask[i, j] = np.exp(-(D0/D)**(2*N))elif(type == 'bs'):mask[i, j] = np.exp(-(D*W/(D**2 - D0**2))**(2*N))elif(type == 'bp'):mask[i, j] = np.exp(-((D**2 - D0**2)/D*W)**(2*N))else:assert('type error')fshift = dtf_shift*maskf_ishift=np.fft.ifftshift(fshift) img_back=cv.idft(f_ishift) img_back=cv.magnitude(img_back[:,:,0],img_back[:,:,1]) #计算像素梯度的绝对值img_back=np.abs(img_back)img_back=(img_back-np.amin(img_back))/(np.amax(img_back)-np.amin(img_back))return img_backimg=cv.imread('lena.jpg',0)
plt.subplot(121),plt.imshow(img,cmap='gray'),plt.title('origin image')
img_back = filter(img, 30, type='hp')
plt.subplot(122),plt.imshow(img_back,cmap='gray'),plt.title('after butterworth highpass filter image')
plt.show()

python实现图像的理想滤波器、butterworth滤波器、指数滤波器相关推荐

  1. python实现图像添加噪声、噪声处理、滤波器代码实现

    目录 加载图像添加噪声 图像傅里叶变换和反变换并可视化 图像处理---高通滤波.低通滤波.带通滤波 低通滤波器---Butterworth低通滤波器.理想低通滤波器.高斯低通滤波器 加载图像添加噪声 ...

  2. 数字图像处理与Python实现-图像滤波-Frangi滤波器

    Frangi滤波器 文章目录 Frangi滤波器 1.Frangi滤波器及其数学描述 2.代码实现 1.Frangi滤波器及其数学描述 Frangi滤波器是Koen L. Vinc Alejandro ...

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

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

  4. 图像算法五:【图像小波变换】多分辨率重构、Gabor滤波器、Haar小波

    matlab设计: 与单纯运用某种自适应算法相比,基于小波分解的自适应滤波算法在收敛速度和稳定性上都有了很大的提高 小波变换: 示意:尺度越大,采用越大的时间窗,尺度越小,采用越短的时间窗,即尺度与频 ...

  5. 卡尔曼滤波器_使用卡尔曼滤波器和路标实现机器人定位

    本文为 AI 研习社编译的技术博客,原标题 : Robot localization with Kalman-Filters and landmarks 作者 | Jannik Zürn 翻译 | 郭 ...

  6. Python人脸图像特征提取方法

    Python人脸图像特征提取方法 一.HOG人脸图像特征提取 1.HOG特征: 1) 主要思想: 2) 实现方法: 3) 性能提高: 4) 优点 2.HOG特征提取算法的实现过程: 二.Dlib人脸图 ...

  7. Python人脸图像特征提取(HOG、Dlib、CNN方法)

    Python人脸图像特征提取(HOG.Dlib.CNN方法) 一.HOG人脸图像特征提取 1.HOG特征: 1) 主要思想: 2) 实现方法: 3) 性能提高: 4) 优点 2.HOG特征提取算法的实 ...

  8. matlab中提供滤波器的种类有,滤波器有哪些类型?滤波器分类

    描述 电源滤波器是由电容.电感和电阻组成的滤波电路.滤波器可以对电源线中特定频率的频点或该频点以外的频率进行有效滤除,得到一个特定频率的电源信号,或消除一个特定频率后的电源信号. 滤波器主要分类: 按 ...

  9. opencv for python的图像梯度算子以及canny边缘检测

    opencv for python的图像梯度算子以及canny边缘检测 一.图像梯度算子: 二.Canny边缘检测(一个多级边缘检测算法): 一.图像梯度算子: 1.概念简介(部分引自百度百科): 图 ...

  10. 设计一个三阶巴特沃斯滤波器_巴特沃斯滤波器频率设计及增益多项式方程

    在之前的滤波器教程中,我们研究了简单的一阶型低通和高通滤波器,它们的RC滤波器电路设计中只包含一个电阻器和一个无功元件(电容器). 在使用滤波器对信号的频谱进行整形的应用中,例如在通信或控制系统中,滚 ...

最新文章

  1. 444 nginx_nginx 安全问题
  2. mysql8.0最低需要多少内存_MySQL8.0内存相关参数介绍
  3. 2020深度文本匹配最新进展:精度、速度我都要!
  4. android评论嵌套,android 嵌套的listview示例(可参照实现朋友圈评论)
  5. Spring-aop-AnnotationAwareAspectJAutoProxyCreator类
  6. 1,3-丙二硫醇行业调研报告 - 市场现状分析与发展前景预测
  7. shell脚本验证ssh连通性_ssh远程管理服务
  8. 小腹右侧突然疼了一下_腰椎间盘膨出,为什么不是脊椎柱中间疼,而是左侧疼?...
  9. iPhone UI 元素大小
  10. 【转载】移植TWRP第三方Recovery并刷入
  11. 1至10根号计算机,根号1到10分别约等于多少
  12. removeClass()
  13. 身份证复印件正确签注写法 -- 很重要!
  14. 真正的Windows XP SP2上海政府版
  15. vim 使用体会(1) Normal模式 当你启动Vim后,Vim会处于Normal模式。在Vim的Normal模式下,所有的键就是功能键,下面附上Vim快捷键分布图。 (2) Insert模
  16. 黑盒测试用例设计--题目3
  17. rcs仿真matlab,雷达截面积(Radar Cross Section,RCS)(MATLAB部分仿真+Code)
  18. Visual Studio/MFC编程入门之MFC常用类:CString类
  19. 我的世界怎么免费开一个服务器是正版,我的世界怎么开一个服务器
  20. 解决新手引导图片被导航栏遮盖住得问题

热门文章

  1. 图书整理系统(1)-创建图书分类文件夹
  2. 对三极管特性曲线的理解
  3. rda分析怎么做_PCA、PCoA、NMDS 、RDA和CCA等排序分析方法
  4. 【Paper reading】可变剪接预测ENCODEC数据集
  5. 【DIY】自动鱼缸控制系统——【一】
  6. MySQL InnoDB引擎如何保证事务特性
  7. mysql dump gtid_GTID环境下mysqldump set-gtid-purged取值
  8. 比“虚幻4”还牛逼的游戏引擎 到底有多神奇?
  9. 20幻读是什么,幻读有什么问题
  10. 快手加抖音自动刷视频脚本,引用的是python+易语言编程