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滤波器相关推荐

  1. 理想低通滤波器、Butterworth滤波器和高斯滤波器

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

  2. 理想低通滤波器、Butterworth滤波器和高斯滤波器(matlab)

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

  3. MATLAB--DSP DAY2:butterworth滤波器

    1.butterworth滤波器 最基础的butterworth滤波器: 根据四个参数决定N,ωn,根据N.ωn产生有理分式的分子分母,系数再据此产生对应的传输函数 注: Wp:通带边界频率.当输入的 ...

  4. 理想低通滤波器、Butterworth滤波器和高斯滤波器(matlab)1

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/cjsh_123456/article/details/79342300 一.简介 我们知道,在一幅图 ...

  5. [就酱的新征程]数字处理仿真与应用实验二:模拟低通 Butterworth 滤波器 IIR 滤波器(Matlab)

    @数字处理仿真与应用实验二:模拟低通 Butterworth 滤波器 IIR 滤波器(Matlab) 这学期数字处理仿真与应用实验的记录 不多说,进入正题吧~ 实验要求 利用模拟滤波器原型设计 IIR ...

  6. java巴特沃斯滤波器编程_巴特沃斯(Butterworth)滤波器 (1)

    下面深入浅出讲一下Butterworth原理及其代码编写. 1. 首先考虑一个归一化的低通滤波器(截止频率是1),其幅度公式如下: 当n->∞时,得到一个理想的低通滤波反馈: ω<1时,增 ...

  7. 巴特沃斯(Butterworth)滤波器 (2) - 双线性变换

    这里接着上篇讲一下双线性变换Bilinear Transformation,它实现了模拟信号(连续域)与数字信号(离散域)之间的转换. 双线性变换公式如下: 反推可得到: 因此可以根据连续域传递函数推 ...

  8. scipy Matlab-style IIR 滤波器设计上(Butterworth\Chebyshev type I \Chebyshev type II )

    scipy Matlab-style IIR 滤波器设计上(Butterworth\Chebyshev type I \Chebyshev type II ) 各种滤波接口 滤波器接口 含义 butt ...

  9. butter滤波器是iir吗_如何快速设计一个IIR滤波器

    在文章如何快速设计一个FIR滤波器(一)以及如何快速设计一个FIR滤波器(二)等文章中,我们讨论了如何设计FIR(Finite Impulse Response Filter),FIR有很多优点,比如 ...

最新文章

  1. Sublime Text 提示[Decode error - output not utf-8]的解决方法
  2. 链接和作用域2 - C++快速入门43
  3. ABAP Pattern usage - define own custom user exit
  4. string类的各种函数用法
  5. c语言文件的读写通讯录,学C三个月了,学了文件,用C语言写了个通讯录程序
  6. python——函数 11、命名空间
  7. 爱链工具怎么使用 爱链工具详细使用图文教程
  8. MC新手入门(三十)------ 逻辑运算符和表达式
  9. CVPR 2020 | 北大Futurewei提出 GraphTER:无监督图变换共变表征学习
  10. 提高Java开发效率,Idea必装的几款插件
  11. 【js Date】时间字符串、时间戳转换成今天,明天,本月等文字日期
  12. linux使用指导-debian/archlinux/LFS
  13. 从source folder 下将其所有子文件夹的*.* 文件拷贝到 target folder (不拷贝文件夹名仅拷贝文件)...
  14. Dirichlet energy and the Laplace equation
  15. 使用Sqlserver事务发布实现数据同步(转)
  16. Widevine DRM介绍
  17. 怎么把手机字体改成繁体_手机变成繁体字怎么改回来
  18. 阿兹卡塔防 Azgard Defense 详细攻略
  19. 如何做一款有灵魂的App——关于hope的启发以及对于追梦App的思考
  20. 大学计算机应用基础知识点王爱平,北京师范大学心理学院硕导介绍:王爱平

热门文章

  1. 如何比对两个版本的Word文档
  2. LD衰减图解读(LD decay)
  3. USB1.0到USB3.0传输速率、供电电压、电流、外形、颜色、认证图标对比
  4. ocr手机号识别应用
  5. jtable.js 弹出框自适应高度
  6. TI Cortex-A8 AM335X开发板工控板
  7. MSDN I tell you下载方式
  8. 【机器学习|数学基础】Mathematics for Machine Learning系列之线性代数(3):行列式的性质
  9. 贷款行业 | 大数据精准获客 ,破除流量困局
  10. NX带边界面铣——知识点