Butterworth滤波器
Butterworth低通滤波器传递函数为:
是截至频率,n为函数的阶。一般取使H(u,v)最大值下降到最大值的一般时的D(u,v)作为截至频率。
与理想低通滤波器相比,高低频之间过渡较为平滑,因此滤波后输出的图像振铃现象不明显。n=1时,过渡最平滑,即尾部包含大量高频部分;但随着n增加,振铃现象越来越明显。
设计巴特沃斯低通滤波器计算
归一化:
这里的模拟低通滤波器的3db点,也称为截止频率,是指滤波器的输出信号相对于输入信号的幅度衰减到1/√2(约等于-3db)时的频率。
低通滤波器是一种常用的电子电路,它能够通过低于截止频率的信号,而阻断高于截止频率的信号。低通滤波器的截止频率可以用来调节滤波器的性能,比如可以调节滤波器的带宽,或者是调节滤波器的阻带衰减。
对图像进行Butterworth低通滤波
import matplotlib.pyplot as plt
from skimage import io, color# 读入图像
img = io.imread('I2.jpg')
I = color.rgb2gray(img)
f = np.fft.fft2(I)
fshift = np.fft.fftshift(f)
# 取绝对值
s1 = np.log(np.abs(fshift))
"""
butterworth低通滤波
"""def btw_filter(I, d, n):f = np.fft.fft2(I)fshift = np.fft.fftshift(f)def make_transform_matrix(d):transfor_matrix = np.zeros(I.shape)center_point = tuple(map(lambda x: (x - 1) / 2, s1.shape))for i in range(transfor_matrix.shape[0]):for j in range(transfor_matrix.shape[1]):def cal_distance(pa, pb):from math import sqrtdis = sqrt((pa[0] - pb[0]) ** 2 + (pa[1] - pb[1]) ** 2)return disdis = cal_distance(center_point, (i, j))transfor_matrix[i, j] = 1 / (1 + (dis / d) ** (2 * n))return transfor_matrixd_matrix = make_transform_matrix(d)new_I = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift * d_matrix)))return new_Iplt.subplot(221)
plt.title("Original")
plt.axis('off')
plt.imshow(I, cmap='gray')
plt.subplot(222)
I1 = btw_filter(I, 100, 1)
plt.title("Butter 100 1")
plt.axis('off')
plt.imshow(I1, cmap='gray')
plt.subplot(223)
I2 = btw_filter(I, 30, 1)
plt.axis('off')
plt.title("Butter 30 1")
plt.imshow(I2, cmap='gray')
plt.subplot(224)
I3 = btw_filter(I, 30, 5)
plt.title("Butter 30 5")
plt.axis('off')
plt.imshow(I3, cmap='gray')
plt.show()
可以使用 scikit-image 库中的
skimage.filters.butterworth
函数来实现巴特沃斯低通滤波器。
import skimage.filters
from skimage import io
import matplotlib.pyplot as plt
# 读取图像
image = io.imread('I2.jpg', as_gray=True)# 应用巴特沃斯低通滤波器
filtered_image = skimage.filters.butterworth(image,0.003,5)
plt.figure()
plt.imshow(filtered_image,cmap='gray')
plt.show()
图像巴特沃斯高通滤波
只需在低通滤波代码稍作修改即可:
import numpy as np
import matplotlib.pyplot as plt
from skimage import io, color# 读入图像
img = io.imread('I2.jpg')
I = color.rgb2gray(img)
f = np.fft.fft2(I)
fshift = np.fft.fftshift(f)
# 取绝对值
s1 = np.log(np.abs(fshift))
"""
butterworth低通滤波
"""def btw_filter(I, d, n):f = np.fft.fft2(I)fshift = np.fft.fftshift(f)def make_transform_matrix(d):transfor_matrix = np.zeros(I.shape)center_point = tuple(map(lambda x: (x - 1) / 2, s1.shape))for i in range(transfor_matrix.shape[0]):for j in range(transfor_matrix.shape[1]):def cal_distance(pa, pb):from math import sqrtdis = sqrt((pa[0] - pb[0]) ** 2 + (pa[1] - pb[1]) ** 2)return disdis = cal_distance(center_point, (i, j))transfor_matrix[i, j] = 1 / (1 + (dis / d) ** (2 * n))return transfor_matrixd_matrix = make_transform_matrix(d)d_matrix = 1 - d_matrixnew_I = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift * d_matrix)))return new_Iplt.subplot(221)
plt.title("Original")
plt.axis('off')
plt.imshow(I, cmap='gray')
plt.subplot(222)
I1 = btw_filter(I, 100, 1)
plt.title("Butter 100 1")
plt.axis('off')
plt.imshow(I1, cmap='gray')
plt.subplot(223)
I2 = btw_filter(I, 30, 1)
plt.axis('off')
plt.title("Butter 30 1")
plt.imshow(I2, cmap='gray')
plt.subplot(224)
I3 = btw_filter(I, 30, 5)
plt.title("Butter 30 5")
plt.axis('off')
plt.imshow(I3, cmap='gray')
plt.show()
Butterworth滤波器相关推荐
- 理想低通滤波器、Butterworth滤波器和高斯滤波器
一.简介 我们知道,在一幅图像中,其低频成分对应者图像变化缓慢的部分,对应着图像大致的相貌和轮廓.而其高频成分则对应着图像变化剧烈的部分,对应着图像的细节(图像的噪声也属于高频成分). 低频滤波器,顾 ...
- 理想低通滤波器、Butterworth滤波器和高斯滤波器(matlab)
一.简介 我们知道,在一幅图像中,其低频成分对应者图像变化缓慢的部分,对应着图像大致的相貌和轮廓.而其高频成分则对应着图像变化剧烈的部分,对应着图像的细节(图像的噪声也属于高频成分). 低频滤波器,顾 ...
- MATLAB--DSP DAY2:butterworth滤波器
1.butterworth滤波器 最基础的butterworth滤波器: 根据四个参数决定N,ωn,根据N.ωn产生有理分式的分子分母,系数再据此产生对应的传输函数 注: Wp:通带边界频率.当输入的 ...
- 理想低通滤波器、Butterworth滤波器和高斯滤波器(matlab)1
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/cjsh_123456/article/details/79342300 一.简介 我们知道,在一幅图 ...
- [就酱的新征程]数字处理仿真与应用实验二:模拟低通 Butterworth 滤波器 IIR 滤波器(Matlab)
@数字处理仿真与应用实验二:模拟低通 Butterworth 滤波器 IIR 滤波器(Matlab) 这学期数字处理仿真与应用实验的记录 不多说,进入正题吧~ 实验要求 利用模拟滤波器原型设计 IIR ...
- java巴特沃斯滤波器编程_巴特沃斯(Butterworth)滤波器 (1)
下面深入浅出讲一下Butterworth原理及其代码编写. 1. 首先考虑一个归一化的低通滤波器(截止频率是1),其幅度公式如下: 当n->∞时,得到一个理想的低通滤波反馈: ω<1时,增 ...
- 巴特沃斯(Butterworth)滤波器 (2) - 双线性变换
这里接着上篇讲一下双线性变换Bilinear Transformation,它实现了模拟信号(连续域)与数字信号(离散域)之间的转换. 双线性变换公式如下: 反推可得到: 因此可以根据连续域传递函数推 ...
- scipy Matlab-style IIR 滤波器设计上(Butterworth\Chebyshev type I \Chebyshev type II )
scipy Matlab-style IIR 滤波器设计上(Butterworth\Chebyshev type I \Chebyshev type II ) 各种滤波接口 滤波器接口 含义 butt ...
- butter滤波器是iir吗_如何快速设计一个IIR滤波器
在文章如何快速设计一个FIR滤波器(一)以及如何快速设计一个FIR滤波器(二)等文章中,我们讨论了如何设计FIR(Finite Impulse Response Filter),FIR有很多优点,比如 ...
最新文章
- Sublime Text 提示[Decode error - output not utf-8]的解决方法
- 链接和作用域2 - C++快速入门43
- ABAP Pattern usage - define own custom user exit
- string类的各种函数用法
- c语言文件的读写通讯录,学C三个月了,学了文件,用C语言写了个通讯录程序
- python——函数 11、命名空间
- 爱链工具怎么使用 爱链工具详细使用图文教程
- MC新手入门(三十)------ 逻辑运算符和表达式
- CVPR 2020 | 北大Futurewei提出 GraphTER:无监督图变换共变表征学习
- 提高Java开发效率,Idea必装的几款插件
- 【js Date】时间字符串、时间戳转换成今天,明天,本月等文字日期
- linux使用指导-debian/archlinux/LFS
- 从source folder 下将其所有子文件夹的*.* 文件拷贝到 target folder (不拷贝文件夹名仅拷贝文件)...
- Dirichlet energy and the Laplace equation
- 使用Sqlserver事务发布实现数据同步(转)
- Widevine DRM介绍
- 怎么把手机字体改成繁体_手机变成繁体字怎么改回来
- 阿兹卡塔防 Azgard Defense 详细攻略
- 如何做一款有灵魂的App——关于hope的启发以及对于追梦App的思考
- 大学计算机应用基础知识点王爱平,北京师范大学心理学院硕导介绍:王爱平