巴特沃斯滤波原理及代码实现(matlab详细过程版)

目录

  • 一、算法原理
    • 1、原理概述
    • 2、参考文献
  • 二、代码实现
  • 三、结果展示

在这里插入图片描述

本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。

一、算法原理

1、原理概述

  巴特沃斯滤波器(Butterworth filter)是一种连续衰减的滤波器,所以也被称为最大平坦滤波器,在该滤波器不会出现太大陡峭的变化。其特点是在通频带内呈现出最大限度的平坦的频率响应曲线,没有纹波,同时在阻频带内则逐渐下降为0。其主要原理是先通过离散傅里叶变换把图像转换到频域,再进行巴特沃斯低通滤波,然后用傅里叶逆变换转换回空域,最终实现图像增强效果。其中离散傅里叶变换就是傅里叶变换在时间和频率域上均以离散的形式存在。其一维离散傅里叶变换定义为:
在这里插入图片描述
  其中 f ( x ) f(x) f(x) 为离散序列,长度为 N N N u = 0 , 1 , … , N − 1 u =0,1,…, N -1 u=0,1,,N1,则 F ( u ) F(u) F(u)的一维离散傅里叶反变换可以定义为:

在这里插入图片描述
  根据公式(3)和(4)可以推广出二维离散傅里叶变换,设离散函数 f ( x , y ) f (x,y) f(x,y) ,其中 x = 0 , 1 , … , M − 1 , y = 0 , 1 , … , N − 1 x =0,1,…, M -1, y =0,1,…, N -1 x=0,1,,M1,y=0,1,,N1
其定义为:
在这里插入图片描述
  在公式(5)中, u = 0 , 1 , … , M − 1 , v = 0 , 1 , … , N − 1 u =0,1,…, M -1,v =0,1,…, N -1 u=0,1,,M1v=0,1,,N1 F ( u , v ) F(u,v) F(u,v)二维离散傅里叶反变换可以定义为:
在这里插入图片描述
  通过傅里叶变换将图像从时域转换到频域之后,就可以对其进行下一步操作,巴特沃斯低通滤波的定义如公式(7)所示:

在这里插入图片描述
  其中 D ( u , v ) D(u,v) D(u,v)为该点到中心点的距离, D 0 D_0 D0为截止频率,也就是振幅下降为-3 分贝时的频率, D 0 D_0 D0选取的值不同其对图像的处理效果也不同。滤波器阶数 n n n越大滤波器的形状越陡峭。通常取 n = 2 n = 2 n=2,此时没有明显的振铃效应,数值更大时会有模糊效应。
  巴特沃斯高通滤波的定义如公式(8)所示:
在这里插入图片描述
  为了在高频率域来降噪时较好的保存边缘信息,首要工作就是要找到图像结构特征的频率带,在这些频率带上不能做过多的缩减,而在离这些频率带比较远的区域,可以增加缩减的程度。巴特沃斯响应函数在频率中心区域的半径小于 D ( u , v ) D(u,v) D(u,v) 时,函数值很接近1,变化不大;而随着距离中心点越来越远,函数值迅速减少。这一特性可以被用来进行图像降噪。

2、参考文献

[1]贾亮,邢轶博,徐善博. 基于改进巴特沃斯滤波的红外图像增强算法 [J]. 电脑与电信, 2022, (07): 58-62+76. DOI:10.15966/j.cnki.dnydx.2022.07.017.

二、代码实现

clc;
clear;
close all;%% ------------------------------读取图像----------------------------------
Img = imread('Y.png');
%% ---------------------------可视化原始图像-------------------------------
subplot(121),imshow(Img);
title('原始图像');
%% --------------------------巴特沃斯高通滤波------------------------------
% 图像的数据类型由uint8转化为double类型
Imgd = im2double(Img);
% 二维傅立叶变换
fuv = fft2(Imgd);
% 对傅里叶变换后得到的频谱进行平移,将变换后的图像频谱中心从矩阵的原点移到矩阵的中心
trans = fftshift(fuv);
[row,col] = size(trans); % 求二维傅里叶变换后图像大小
n = 2;                   % 巴特沃斯高通滤波器的阶数n
d0 = 30;                 % 巴特沃斯高通滤波器的截止频率D0
n1 = round(row/2);
n2 = round(col/2);
% 计算频率点(i,j)与频域中心的距离
for i = 1:row      for j = 1:col distance = sqrt((i-n1)^2+(j-n2)^2);if distance==0 h = 0; elseh = 1/(1+(d0/distance)^(2*n));% 巴特沃斯高通滤波endtrans(i,j) = h*trans(i,j);% 频域图像乘以滤波器的系数end
end
invTrans = ifftshift(trans);
% 二维傅里叶反变换转换为时域图像
fxy = ifft2(invTrans);
% real函数取元素的实部
trans = real(fxy);
%% ----------------------可视化滤波后的图像--------------------------------
subplot(122),imshow(trans,[]);
title('巴特沃斯高通滤波图像');

三、结果展示

在这里插入图片描述

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

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

相关文章

12 c++版本的坦克大战

前言 呵呵 这大概是 大学里面的 c 贪吃蛇了吧 有一些 面向对象的理解, 但是不多 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用 坦克大战 #include<iostream> #include<windows.h> #include<conio.h> #include<ctime> #include…

【数据结构与算法】:手搓顺序表(Python篇)

文章目录 一、顺序表的概念二、顺序表的实现1. 顺序表的创建1.1 扩容1.2 整体建立顺序表 2. 顺序表的基本运算算法2.1 顺序表的添加&#xff08;尾插&#xff09;2.2 指定位置插入2.3 指定位置删除2.4 顺序表的查找2.5 顺序表元素的索引访问2.6 顺序表元素的修改2.7 顺序表长度…

Ubuntu 安装遇到 Out of memory

文章目录 应该是RAM的问题降低显卡的RAM使用降低到可兼容的版本然后更新到最新版WIFI接收器不兼容&#xff08;WIFI接收器太新&#xff09;&#xff0c;使用手机连线热点&#xff0c;更新版本后即可用 应该是RAM的问题 降低显卡的RAM使用 YTB:How to fix “Error: Out of Mem…

xfce4 panel 不能显示QQ,钉钉的状态图标

有一段时间不能显示了&#xff0c;之前刚装完系统的时候很长时间内都是好的&#xff0c;所以刚开始肯定是支持显示这些状态图标的。就是因为不能显示的原因&#xff0c;所以还装了lxQt桌面&#xff0c;这个桌面确实不错。不过还是有时会怀念xfce4&#xff0c;想看看能不能解决这…

中电金信:向“新”而行——探索融合架构的项目管理在保险行业的应用

近年来&#xff0c;险企在政策推动、市场牵引、自身发展、新技术应用日趋成熟等内外部因素的驱动下&#xff0c;积极投身到数字化转型的浪潮中。在拜访各类保险客户和合作项目的过程中&#xff0c;我们发现不少险企在数字化转型中或多或少都面临着战略如何落地、技术如何承接和…

Java根据模板动态生成Pdf(添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64)

Java根据模板动态生成Pdf&#xff1a;添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64 引言【Java根据模板动态生成Pdf资源地址】示例一&#xff1a;动态生成带页码的PDF报告示例二&#xff1a;加密PDF以保护敏感信息示例三&#xff1a;应…

echarts地图叠加百度地图底板实现数据可视化

这里写自定义目录标题 echarts地图叠加百度地图实现数据可视化echarts地图叠加百度地图实现数据可视化 实现数据可视化时,个别情况下需要在地图上实现数据的可视化,echarts加载geojson数据可以实现以地图形式展示数据,例如分层设色或者鼠标hover展示指标值,但如果要将echa…

Electron+Vue3+ElectronForge整合 - 打包时整合 -分步打包

说明 本文介绍一下 Electron Vue3 的打包整合的基本操作。实现的效果是 &#xff1a; 1、一个正常的Vue3项目&#xff1b; 2、整合加入 Electron 框架 &#xff1a;开发时 Electron 加载的是开发的vue项目&#xff1b; 3、完成打包时整合&#xff1a;3.1 先完成vue3项目的正常…

c语言指针的应用场景

​ 1.什么是指针&#xff1f; 当我们提起指针的时候&#xff0c;可能第一反应会露出惊喜的表情 &#xff08;但是我们其实没必要那么慌&#xff0c;因为当我们随着我们学习的越来越深入就会发现&#xff0c;指针虽然看起来难&#xff0c;实际上也不怎么简单。哈哈哈开玩笑的&a…

DataX数据采集流程(项目)

目录 1.CDH介绍 2.ClouderaManager架构 3.服务器 4.dataX架构 5.Datax数据处理流程 6.DataX的使用说明 7.Mysql数据切割 8.Mysql数据导入HDFS 9.查询站点 站点页面如下&#xff0c;可进一步查询导入的数据内容 10.dataX-Web访问页面 创建数据库连接 1.CDH介绍 --(…

BUUCTF--web(1)

1、[极客大挑战 2019]Http1 1.http报文请求&#xff1a; 1、请求行&#xff1a; 第一部分是请求方法&#xff0c;常见包括GET、POST、OPTIONS&#xff08;我目前还没有见过我是菜鸡&#xff09; 第二部分是url 第三部分是HTTP协议(http(Hypertext transfer protocol)超文本传…

TCN-LSTM时间卷积网络长短期记忆网络多输入多输出回归预测

文章目录 效果一览文章概述 订阅专栏只能获取一份代码部分源码参考资料 效果一览 文章概述 TCN-LSTM时间卷积网络长短期记忆网络多输入多输出回归预测 matlab2021 订阅专栏只能获取一份代码 部分源码 %------------------------------------------------------------------…