matlab--简单滤波器的设计

       一个图像经过傅立叶变换后,就从空域变到了频域,因此我们可以用信号处理中对于频域信号的处理方法对一幅图像进行处理。比如对图像进行低通滤波、高通滤波等。

低通滤波

       数字图像处理的低通滤波是一种用于去除图像中高频噪声和细节的方法。该方法通过滤波器的运算来使图像的高频成分减小,从而达到平滑处理的效果。

      常见的低通滤波器包括均值滤波器、高斯滤波器和中值滤波器。这些滤波器通过在图像上滑动一个固定大小的窗口,计算窗口内像素的均值、高斯加权均值或中值来实现滤波操作。

        一个二维的理想低通滤波器(ILPF),它的传递函数由下式确定:

   

       式中D0是一个规定的非负的量,称为截止频率,虽然在计算机中必定能够模拟一个锐截止频率的理想低通或高通滤波器,但这种理想的滤波器不能用电子元件来实现。实际中比较常用的滤波器有:巴特沃思(Butterworth)滤波器、指数滤波器、梯形滤波器等。

高通滤波

       高通滤波是数字图像处理中一种常用的滤波技术,它可以用来增强图像的高频部分,从而突出图像的细节和边缘。高通滤波的核心思想是通过减少图像中低频分量的影响,来增强高频分量的信息。

       在图像处理中,高通滤波通常通过对图像进行傅立叶变换来实现。具体来说,可以使用一个高通滤波器来滤除图像中的低频部分,而保留高频部分。常见的高通滤波器包括布特沃斯高通滤波器、高斯高通滤波器等。

      一个二维的理想高通滤波器(IHPF),它的传递函数为:

例子

       以下以设计一个理想的低通滤波器为例加以说明。

       设计理想的低通滤波器由其定义可知只要设计一个与频域图像大小完全相同的矩阵。在某一个区域内该矩阵的值为1,其余为0即可。

例:若图像的大小为M×N,则可以这样设计一个低通滤波器:

H=zeros(M, N);

H(M/4 : M*3/4, N/4 : N*3/4)=1;  %此处的范围是人为取定的,可以根据需要更改。

若图像矩阵I的傅立叶变换是B(已经用fftshift将频谱中心移至矩阵的中心),则对这幅图像做低通滤波,再做傅立叶逆变换命令为:

LOWPASS=B.* H;  %此处变换后的矩阵为LOWPASS,另注意这儿是矩阵的点乘

C=ifft2(LOWPASS);

imshow(abs(C))

下图为一个图像的傅立叶变换谱及其频域低通、高通滤波的结果:

代码实现

       设计一个简单的理想低通滤波器(截止频率50),对图像作频域低通滤波,再作反变换,观察滤波后的图像与原图像的区别

I = imread('1.png');
I=rgb2gray(I);
 
subplot(121),imshow(I);
title('原始图像');
 
 
% 函数fft2()用于计算二维傅立叶变换
% 函数fftshift()是对函数fft2()作傅里叶变换后得到的频谱进行平移,将变换后的图像频谱中心从矩阵的原点移到矩阵的中心
% 作二维傅里叶变换前一定要用函数im2double()把原始图像的数据类型由uint8转化为double类型
% 否则会因为unit8数据类型只能表示0-255的整数而出现数据截断,进而出现错误结果
s=fftshift(fft2(im2double(I)));
[a,b]=size(s);
a0=round(a/2);
b0=round(b/2);
d0=50; % 将理想低通滤波器的截止频率D0设置为50
for i=1:a %双重for循环计算频率点(i,j)与频域中心的距离D(i,j)=sqrt((i-round(a/2)^2+(j-round(b/2)^2))
    for j=1:b 
        distance=sqrt((i-a0)^2+(j-b0)^2);
        if distance<=d0  % 根据理想低通滤波器产生公式,当D(i,j)<=D0,置为1
            h=1;
        else
            h=0;        % 根据理想低通滤波器产生公式,当D(i,j)>D0,置为0
        end
        s(i,j)=h*s(i,j);% 频域图像乘以滤波器的系数
    end
end
% real函数取元素的实部
s=real(ifft2(ifftshift(s)));% 最后进行二维傅里叶反变换转换为时域图像
subplot(122),imshow(s,[]);
title('理想低通滤波所得图像'); 

      设计一个简单的理想高通滤波器(截止频率20),对图像作频域高通滤波,再作反变换,观察滤波后的图像与原图像的区别。选取不同的截止频率,比较结果。

% 读取原始图像
originalImage = imread('1.png');
% 将图像转换为灰度图像
grayImage = rgb2gray(originalImage);
% 将图像转换为双精度类型
grayImage = im2double(grayImage);
 
% 计算图像大小
[M, N] = size(grayImage);
 
% 设置截止频率(自选)
cutoffFrequency = 20;
 
% 计算滤波器中心位置
cx = round(M / 2);
cy = round(N / 2);
 
% 创建频域滤波器
filter = zeros(M, N);
for i = 1:M
    for j = 1:N
        distance = sqrt((i-cx)^2 + (j-cy)^2);
        if distance > cutoffFrequency
            filter(i, j) = 1;
        end
    end
end
 
% 对输入图像进行傅里叶变换
F = fftshift(fft2(grayImage));
 
% 应用高通滤波器
filteredF = F .* filter;
 
% 对滤波结果进行反傅里叶变换
filteredImage = real(ifft2(ifftshift(filteredF)));
 
% 显示原始图像和滤波后的图像
figure;
subplot(1, 2, 1);
imshow(grayImage);
title('原始图像');
subplot(1, 2, 2);
imshow(filteredImage);
title('滤波后的图像');

总结

       低通滤波器的运算使图像中的细节和高频信息受到抑制,从而可以减少图像中的噪声并平滑图像。然而,需要注意的是,低通滤波器会使图像的细节丢失,因此需要根据具体应用场景来选择合适的滤波器和参数。

       高通滤波可以应用于许多图像处理任务,比如图像增强、边缘检测等。但需要注意的是,高通滤波可能会增加图像中的噪音,因此在应用高通滤波时需要根据具体的应用场景和图像特点进行调整。

  • 22
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值