MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波)

这篇具有很好参考价值的文章主要介绍了MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数字图像处理完整MATLAB代码在我的资源可以看到,为方便下载,下面是百度网盘资源:

链接:https://pan.baidu.com/s/17S7PZJwwvb3PFMFVxqEY5w 
提取码:HUAT

滤波代码:

function l_f = low_filter(img,fre)
%此函数用于对图像进行滤波
%主要原理为在图像平移后频谱图进行圈定范围(面积)操作,面积外的设为0(滤除高频成分)
%img为图像平移后频谱图,fre为圈定的频谱范围
[a,b] = size(img);
a0 = round(a/2);
b0 = round(b/2);
for i=1:a
    for j=1:b
        distance = (i-a0)^2+(j-b0)^2;
        if distance<fre
            h = 1;
        else
            h = 0;
        end
        l_f(i,j) = h*img(i,j);
    end
end

end

一、灰度图像滤波

具体处理过程如下:

1.Imread函数读取图像数据

2.RGB图像转换为灰度二维图

3.调用fft2函数对灰度二维图像进行DFT处理

4.调用abs函数取得频谱采用log处理,进行灰度压缩

5.调用fftshift函数中心化处理

6.利用理想低通滤波器low_filter(现有多种低通滤波器,自己可以进行选择设计)对图像频谱进行滤波,滤除高频成分

       在我看来, 这里的低通滤波器设计原理其实很简单,就是在步骤5处理后,图像频谱图的分布规律为:图像的低频信息位于图像频谱图的中心,自图像频谱图中心向外延申,图像所包含的信息的频率越高(而噪声的频率也很高),这也就可以通过保留靠近频谱图中心的部分(图像包含的低频信息),舍去远离频谱图中心的部分(高频噪声),滤除图像中的噪声。下面是圆形低通滤波器的代码,以及滤波前后的图像频谱图。

                     

MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波)        MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波)

(1).步骤5处理后的图像频谱图           (2).理想低通滤波器low_filter滤除高频后的图像频谱图

7.调用ifftshift函数去中心化处理

8.对输出结果ifft2反变化得到滤波后的图像

下面是滤波的过程结果,左侧滑块功能为调节低通滤波器的滤波范围。

MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波)

global My_GUI_handles;
fre=get(hObject,'Value');
set(handles.text_l_f1,'String',num2str(fre));


axes(My_GUI_handles.axes_dst);
img_src=getimage(My_GUI_handles.axes_src);
img_src=rgb2gray(img_src);%转换为灰度二维
img_src1=double(img_src);  %数据类型转换
% % img_src2=fft2(img_src1);%快速傅里叶变换
% % img_src3=fftshift(img_src2);%频谱平移
% % img_src4=abs(img_src3);%计算I的幅度谱
 img_src2=abs(fftshift(fft2(img_src1)));
imshow(log(img_src2),[]);
title('图像傅里叶变换取对数所得频谱');

axes(My_GUI_handles.axes_src1);
[a,b] = size(img_src1);
s_max = min(a/2,b/2);
s_max = s_max^2;
set(handles.slider_l_f1,'Max',double(s_max));


img_src5= low_filter(fftshift(fft2(img_src1)),fre);
imshow(log(abs(img_src5)),[]);
title('低通滤波频谱');

axes(My_GUI_handles.axes_dst1);
new_img = uint8(real(ifft2(ifftshift(img_src5))));
imshow(new_img,[]);
title('低通滤波后的图像');

set(handles.slider_l_f2,'Enable','off');

二、彩色图像(RGB)滤波

       我们知道一般对于RGB图像频域滤波都需要先转换成灰度二维图,才能进行频域低通滤波,这也导致最终显示的图像也只能是灰度图。分析其原因可知,这是由于我们对于图像处理需要用到fft2等函数造成的。那么如何才能对RGB图像进行频域滤波后,让它显示为RGB图像呢?在参考了网上一篇北京交通大学王潇的《利用MATLAB对彩色图像进行低通滤波》的文章后,得知可以对图像的R、G、B图像分别进行上述滤波后,再将R、G、B滤波后的图合成一张显示出来,以此达到对RGB图像进行频域滤波后依然可以显示滤波后的RGB图像。具体过程如下。

1.Imread函数读取图像

2.将RGB图像拆分为R、G、B三张单色图

3.调用fft2函数对R、G、B单色图分别进行进行DFT处理

4.调用abs函数取得频谱采用log处理,进行灰度压缩

5.调用fftshift函数中心化处理

6.利用理想低通滤波器low_filter对图像频谱进行滤波,滤除高频成分

7.调用ifftshift函数去中心化处理

8.对输出结果ifft2反变化得到滤波后的R、G、B图像

9.将分别处理后的R、G、B图像合成为一幅图像,然后进行显示,得到频域滤波后的RGB图像

下面是滤波的过程结果,第一行第二列和第二行第一列分别为:R单色图滤波后的频谱图、G单色图滤波后的频谱图。左侧滑块功能为调节低通滤波器的滤波范围。

MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波)文章来源地址https://www.toymoban.com/news/detail-453934.html

global My_GUI_handles;
fre=get(hObject,'Value');
set(handles.text_l_f2,'String',num2str(fre));


axes(My_GUI_handles.axes_dst);
img_src=getimage(My_GUI_handles.axes_src);
[a,b] = size(img_src);
s_max = min(a/2,b/2);
s_max = s_max^2;
set(handles.slider_l_f2,'Max',double(s_max));

for i=1:3
    A=img_src(:,:,i);
    B=double(A);
    C= low_filter(fftshift(fft2(B)),fre);
    D = uint8(real(ifft2(ifftshift(C))));
    img_src(:,:,i)=D;
end
img_src_R= low_filter(fftshift(fft2(double(img_src(:,:,1)))),fre);
imshow(log(abs(img_src_R)),[]);
axes(My_GUI_handles.axes_src1);
img_src_G= low_filter(fftshift(fft2(double(img_src(:,:,2)))),fre);
imshow(log(abs(img_src_G)),[]);
axes(My_GUI_handles.axes_dst1);
imshow(img_src);
set(handles.slider_l_f1,'Enable','off');

到了这里,关于MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机视觉】图像分割与特征提取——频域增强(低通滤波&高通滤波)

    个人简介:  📦个人主页:赵四司机 🏆学习方向:JAVA后端开发  ⏰往期文章:SpringBoot项目整合微信支付 🔔博主推荐网站:牛客网 刷题|面试|找工作神器 📣种一棵树最好的时间是十年前,其次是现在! 💖喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。 前言:

    2024年01月15日
    浏览(53)
  • Matlab图像处理(1)彩色图像转换为灰度图像(初学必看)

    手把手教你用Matlab实现彩色图像转换为灰度图像 这是一个最基本将彩色图像转换为灰度图像的代码,接下来详细解释代码: ‘RGB’是自己设置的,可以换成另外任何字母可以是a,也可以是b ‘imread’是matlab自带的函数,意思是将后面的对象读入工作区,是必不可少的一步

    2024年02月05日
    浏览(45)
  • Matlab图像处理- 高斯低通滤波器

      高斯低通滤波器 高斯低通滤波器是一种 更平滑的一种滤波器 ,高斯低通滤波器完全没有振铃现象,且边缘平滑。 示例代码 利用输入图像,构建一个截止频率为30的高斯低通滤波器的透视图如下图所示。 效果图片

    2024年02月09日
    浏览(45)
  • 图像处理之理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器的matlab实现去噪

    一、前言 在一幅图像中, 低频部分对应图像变化缓慢的部分即图像大致外观和轮廓。高频部分对应图像变换剧烈的部分即图像细节(注意图像的噪声属于高频部分) 。 低通滤波器的功能是让低频率通过而滤掉或衰减高频,其作用是过滤掉包含在高频中的噪声。即 低通滤波的效

    2023年04月09日
    浏览(51)
  • matlab实现语音信号的频域分析及应用

    1.语音信号本质上是非平稳信号。但我们可以假设语音信号在一个短时间内是平稳的,这样我们用稳态分析方法处理非平稳信号。应用在傅立叶分析就是短时傅立叶变换。 语音的频域分析:包括语音信号的频谱、功率谱、倒频谱、频谱包络等. 常用频域分析方法:带通滤波器

    2024年02月11日
    浏览(41)
  • 信号与系统的MATLAB仿真 ---信号的频域分析

    前言: 1.1 对 f1 = sa(2t)的频谱分析 运行结果 运行结果 运行结果 运行结果 运行结果 运行结果

    2024年02月16日
    浏览(36)
  • 实验三 基于MATLAB的离散时间信号的频域分析

    1.掌握离散时间信号和系统的频域分析方法; 2.学会利用MATLAB函数对离散时间信号和系统的频域进行计算。 1.离散时间傅里叶变换(DTFT) 通常是实变量Ω的复函数。实例程序演示如下: 【例3.1】求有限长序列的DTFT,并画出它的幅度谱,相位谱,实部和虚部。 其程序运行结果

    2024年02月05日
    浏览(38)
  • (数字图像处理MATLAB+Python)第七章图像锐化-第四节:频域高通滤波与综合案例

    频域高通滤波 :是一种基于频域表示的图像处理技术,用于增强或突出图像中高频成分的方法。它通过将图像转换到频域,应用高通滤波器来抑制或减弱低频成分,从而增强图像的边缘和细节 在频域中,可以设计各种类型的高通滤波器来实现不同的频率响应 理想的高通滤波

    2024年02月08日
    浏览(61)
  • 【信号与系统】【北京航空航天大学】实验三、连续时间信号的频域分析 【MATLAB】

    1、掌握 傅立叶变换(The Fourier Transform) 及其性质; 2、掌握 连续时间信号 傅立叶变换的 数值计算 方法; 3、掌握利用 MATLAB 实现信号的 幅度调制(Amplitude Modulation, AM) 的方法; 4、掌握利用 MATLAB 实现对 周期信号 的 频谱 分析。 1、 MATLAB代码: 公式推导: 叠加生成的 信

    2024年01月19日
    浏览(56)
  • 【数字图像处理】灰度图像中添加高斯噪声、椒盐噪声、斑点噪声以及利用不同方法(中值、排序、维纳滤波)去除各种噪声的matlab程序

    图像处理问题描述: 1、图像中分别加入不同方差的高斯噪声、不同噪声密度椒盐噪声和不同方差的斑点噪声(Gaussian noise, salt  pepper noise and speckle noise) 2、分别通过函数medfilt2、ordfilt2和 Wiener 2 去除图像中添加的一些噪声(Gaussian noise, salt  pepper noise and speckle noise)。 各部

    2024年02月07日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包