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

2024-06-13 1107阅读

目录

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

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

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

      一、算法原理

      1、原理概述

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

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

        其中 f ( x ) f(x) f(x) 为离散序列,长度为 N N N, u = 0 , 1 , … , N − 1 u =0,1,…, N -1 u=0,1,…,N−1,则 F ( u ) F(u) F(u)的一维离散傅里叶反变换可以定义为:

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

        根据公式(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,…,M−1,y=0,1,…,N−1。

      其定义为:

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

        在公式(5)中, u = 0 , 1 , … , M − 1 , v = 0 , 1 , … , N − 1 u =0,1,…, M -1,v =0,1,…, N -1 u=0,1,…,M−1,v=0,1,…,N−1。 F ( u , v ) F(u,v) F(u,v)二维离散傅里叶反变换可以定义为:

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

        通过傅里叶变换将图像从时域转换到频域之后,就可以对其进行下一步操作,巴特沃斯低通滤波的定义如公式(7)所示:

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

        其中 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)所示:

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

        为了在高频率域来降噪时较好的保存边缘信息,首要工作就是要找到图像结构特征的频率带,在这些频率带上不能做过多的缩减,而在离这些频率带比较远的区域,可以增加缩减的程度。巴特沃斯响应函数在频率中心区域的半径小于 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; 
              else
                  h = 1/(1+(d0/distance)^(2*n));% 巴特沃斯高通滤波
              end
              trans(i,j) = h*trans(i,j);% 频域图像乘以滤波器的系数
          end
      end
      invTrans = ifftshift(trans);
      % 二维傅里叶反变换转换为时域图像
      fxy = ifft2(invTrans);
      % real函数取元素的实部
      trans = real(fxy);
      %% ----------------------可视化滤波后的图像--------------------------------
      subplot(122),imshow(trans,[]);
      title('巴特沃斯高通滤波图像');
      

      三、结果展示

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

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]