python实现巴特沃斯低通滤波器——数字图像处理

原理:

巴特沃斯低通滤波器(Butterworth Low-Pass Filter)是图像处理中常用的一种频率域滤波器,它相较于理想低通滤波器提供了更平滑的过渡,以减少图像处理时引入的振铃效应。

设计原理:

巴特沃斯低通滤波器的核心目标是在截止频率处提供平滑的过渡,而不是像理想低通滤波器那样的突然变化。
它通过一个数学公式定义,该公式在截止频率附近提供渐变的衰减,而不是突然的截断。

在这里插入图片描述

在这里插入图片描述
滤波器阶数:
阶数 n 决定了滤波器过渡带的陡峭程度。阶数越高,过渡带越陡峭,滤波器的频率响应越接近理想低通滤波器。但过高的阶数可能导致图像的不自然过渡和振铃效应。
应用效果:

巴特沃斯低通滤波器能有效地平滑图像,去除高频噪声,同时保留更多的图像细节,相较于理想低通滤波器,它在保持细节的同时减少了图像处理引入的失真。
实际应用:
在图像处理中,巴特沃斯低通滤波器用于图像去噪、模糊处理和图像的平滑化。
它尤其适用于需要平滑处理而又不希望丢失过多细节的场景。
巴特沃斯低通滤波器因其平滑的过渡特性在实际应用中广受欢迎,尤其在需要平衡图像平滑和细节保留的情况下。

代码实现下图

在这里插入图片描述

import cv2
import numpy as np
import matplotlib.pyplot as pltimg=cv2.imread("Fig0441.tif",0)rows,cols=img.shapeDFT=np.fft.fft2(img)
center=np.fft.fftshift(DFT)H=np.zeros((rows,cols))
img_list=[img]
img_name_list=["original"]for n in [5,15,30,80,230]:for i in range(rows):for j in range(cols):Duv=np.sqrt(np.power((i-rows/2),2)+np.power((j-cols/2),2))H[i,j]=1/(1+np.power((Duv/n),4))G=np.multiply(H,center)no_center=np.fft.fftshift(G)g=np.abs(np.fft.fft2(no_center))img_list.append(g )img_name_list.append("r="+str(n))
_,axs=plt.subplots(2,3)for i in range(2):for j in range(3):axs[i,j].imshow(img_list[i*3+j],vmin=0,vmax=255,cmap="gray")axs[i,j].set_title(img_name_list[i*3+j])axs[i,j].axis('off')plt.show()

结果展示

在这里插入图片描述

结果讨论

巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有纹波,而在阻频带则逐渐下降为零。在对数波特图上,从某一边界角频率开始,幅度随着角频率的增加而线性减少至负无穷。一阶巴特沃斯滤波器的衰减率为每倍频6 dB,每十倍频20 dB(所有一阶低通滤波器具有相同的归一化频率响应)。二阶巴特沃斯滤波器的衰减率为每倍频12 dB、 三阶巴特沃斯滤波器的衰减率为每倍频18 dB、如此类推。巴特沃斯滤波器的幅度是 ω 的一个单调函数,并且也是唯一的无论阶数,幅度对角频率曲线都保持同样的形状的滤波器。只不过滤波器阶数越高,在阻频带幅度衰减速度越快。其他滤波器高阶的幅度对角频率图和低级数的幅度对角频率有不同的形状。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/318785.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高防ip适合防御网站和游戏类的攻击吗?

​  作为站长,要学会并承受得住网站外来攻击的压力,尤其是所属为 DDoS 攻击高发行业的网站类业务及游戏行业,是很容易被竞争对手或者一些伪黑客爱好者盯上的。 加上,有些站长并没有提前了解,就盲目进军了这两个行业&…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— DevEco Studio下载与安装

一、下载DevEco Studio IDE开发工具 1. 登录鸿蒙官网 网址为: ​​​​​​​华为HarmonyOS智能终端操作系统官网 | 应用设备分布式开发者生态 页面如下: 2. 搜索“DevEco Studio IDE” 点击右上角的“请输入关键词”,在其中搜索“DevEc…

Hubery-个人项目经历记录

研究生期间很有幸的进入到了崔老师的组,从此也就进入到了分析人体生理信号的领域,充满挑战的同时也充满了乐趣。借着CSDN整理一下近几年来参与的项目,这里蕴含着我各种美好的回忆,也作为一个展示自己的平台吧。 开始之前&#xff…

初始数字孪生

文章目录 概念定义 架构框图 基本要求 功能要求 服务应用 参考文献 概念定义 数字孪生(digital twin),是指具有保证物理状态和虚拟状态之间以适当速率和精度同步的数据连接的特定目标实体的数字化表达。 架构框图 数字孪生的整体架构&a…

MATLAB逻辑与流程控制

MATLAB逻辑与流程控制 文章目录 MATLAB逻辑与流程控制1、循环结构1.1、for ...end1.2、while ... end 2、分支结构2.1、if ...else2.1、if ...else ... end2.2、switch ... case ... end 1、循环结构 1.1、for …end 格式: 其中,步长的默认值为1,可以省…

STM32H5XX和STM32H7XX选型对比

文章目录 STM32H563/H573STM32H743/753对比内核不同H5独有安全管理器H7的外设资源更丰富 STM32H563/H573 STM32H563和STM32H573微控制器扩展了STM32高性能产品组合。这两款微控制器具有增强的性能和安全性、更高的能效和更多的片内外设。 STM32H563/573产品系列提供1至2 MB的…

查询运行的java程序线程总数

(1)方法一 ps -ef|grep java pstree -p pid|wc -l 安装pstree包,yum install psmisc (2)方法二 top -H -p pid

python 学生信息管理系统

Python项目 学生信息管理系统 带sql文件,适合初学者。 使用MySQL数据库。 送运行视频导入教程视频。 实现功能大概如下: 基本功能增删改查 限制成绩在各种情况下只能为0-100 实现成绩的统计功能(柱状图显示) 筛选各个成绩区间的学生信息 实现排序…

Leecode刷题:024反转单项链表

题目: 是否没看题解:有思路但是没做出来 最初的解答思路: 定义一个pre指向头结点,cur为pre.next,定义last为cur.next,将cur.next指向pre定位到cur位置,然后cur定位至last节点。 最开始的代码: class S…

Spark---RDD算子(单值类型Value)

文章目录 1.RDD算子介绍2.转换算子2.1 Value类型2.1.1 map2.1.2 mapPartitions2.1.3 mapPartitionsWithIndex2.1.4 flatMap2.1.5 glom2.1.6 groupBy2.1.7 filter2.1.8 sample2.1.9 distinct2.1.10 coalesce2.1.11 repartition2.1.12 sortBy 1.RDD算子介绍 RDD算子是用于对RDD进…

Python基础-05(输出输入、if、if else和elif)

文章目录 前言一、输出(print())和输入(input())二、if、if else、elif1.if2.if else3.关于输入input的默认值4.elif 前言 今天复习一些非常基础的内容,以及if、if else和elif语句 一、输出(print()&…

雪花主键_在postgres的实现

一、主键的属性: 1. 全局唯一,不重复 2. 趋势有序,后面的值大于前面的值 3. 高性能, 读写效率高。qps不能太低,否则容易造成线程堵塞 4. 可用性好,业务对ID的可用性高,不存在单点故障 二、常…