巴特沃斯滤波原理及代码实现(matlab详细过程版) | 您所在的位置:网站首页 › 陷波滤波器设计及应用 › 巴特沃斯滤波原理及代码实现(matlab详细过程版) |
目录
一、算法原理1、原理概述2、参考文献
二、代码实现三、结果展示
本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 巴特沃斯滤波器(Butterworth filter)是一种连续衰减的滤波器,所以也被称为最大平坦滤波器,在该滤波器不会出现太大陡峭的变化。其特点是在通频带内呈现出最大限度的平坦的频率响应曲线,没有纹波,同时在阻频带内则逐渐下降为0。其主要原理是先通过离散傅里叶变换把图像转换到频域,再进行巴特沃斯低通滤波,然后用傅里叶逆变换转换回空域,最终实现图像增强效果。其中离散傅里叶变换就是傅里叶变换在时间和频率域上均以离散的形式存在。其一维离散傅里叶变换定义为:
[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('巴特沃斯高通滤波图像'); 三、结果展示 |
CopyRight 2018-2019 实验室设备网 版权所有 |