图像处理之理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器的matlab实现去噪_图像低通滤波-程序员宅基地

技术标签: matlab  计算机视觉  低通滤波器  图像处理  

一、前言

在一幅图像中,低频部分对应图像变化缓慢的部分即图像大致外观和轮廓。高频部分对应图像变换剧烈的部分即图像细节(注意图像的噪声属于高频部分)

低通滤波器的功能是让低频率通过而滤掉或衰减高频,其作用是过滤掉包含在高频中的噪声。即低通滤波的效果是图像去噪声平滑增强,但同时也抑制了图像的边界即过滤掉图像细节,造成图像不同程序上的模糊。对于大小为M*N的图像,频率点(u,v)与频域中心的距离为D(u,v),其表达式为:
在这里插入图片描述
低通滤波器一共有三种,分别为理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器。理想低通滤波器的滤波非常尖锐,高斯低通滤波器的滤波则非常平滑。巴特沃斯滤波器介于两者之间,当巴特沃斯低通滤波器的阶数较高时,接近于理想低通滤波器;当巴特沃斯低通滤波器的阶数较低时,则接近于高斯低通滤波器。

二、理想低通滤波器(ILPF)

1、基本定义

理想低通滤波器的产生公式为:
在这里插入图片描述
在这里插入图片描述

其中D0为理想低通滤波器的截止频率。理想低通滤波器在半径为D0的范围内,所有频率都可以没有衰减地通过滤波器,该半径之外的所有频率都完全被衰减掉。理想低通滤波器具有平滑图像的作用,但是有很严重的振铃现象。

补充1:图像处理中,对一幅图像进行滤波处理,若选用的频域滤波器具有陡峭的变化,则会使滤波图像产生“振铃”。所谓“振铃”,即指输出图像的灰度剧烈变化处产生的震荡,就好像钟被敲击后产生的空气震荡。如下图所示:
在这里插入图片描述
参考博客:图像处理中的振铃现象产生原因

2、matlab实现理想低通滤波器去除高斯噪声

(1)实现代码:

close all;
clear all;
clc;
I = imread('football.jpg');
I=rgb2gray(I);

subplot(131),imshow(I);
title('原始图像');

I=imnoise(I,'gaussian');%加入高斯白噪声
subplot(132),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(133),imshow(s,[]);
title('理想低通滤波所得图像'); 

(2)实现效果:
在这里插入图片描述
三、巴特沃斯低通滤波器(BLPF)

1、基本定义

巴特沃斯低通滤波器的产生公式为:

在这里插入图片描述
在这里插入图片描述
其中D0为巴特沃斯低通滤波器的截止频率,参数n为巴特沃斯低通滤波器的阶数,n越大则滤波器的形状越陡峭即振铃现象越明显。

2、matlab实现巴特沃斯低通滤波器去除高斯噪声

(1)实现代码:

close all;
clear all;
clc;
I = imread('football.jpg');
I=rgb2gray(I);

subplot(131),imshow(I);
title('原始图像');

I=imnoise(I,'gaussian');%加入高斯白噪声
subplot(132),imshow(I);
title('加入噪声后所得图像');

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

(2)实现效果:
在这里插入图片描述
四、高斯低通滤波器(GLPF)

1、基本定义

高斯低通滤波器的产生公式为:
在这里插入图片描述
在这里插入图片描述
其中D0为高斯低通滤波器的截止频率,注意高斯低通滤波器不会产生振铃现象。

2、matlab实现高斯低通滤波器去除高斯噪声

(1)实现代码:

close all;
clear all;
clc;
I = imread('football.jpg');
I=rgb2gray(I);

subplot(131),imshow(I);
title('原始图像');

I=imnoise(I,'gaussian');%加入高斯白噪声
subplot(132),imshow(I);
title('加入噪声后所得图像');

% 函数fft2()用于计算二维傅立叶变换
% 函数fftshift()是对函数fft2()作傅里叶变换后得到的频谱进行平移,将变换后的图像频谱中心从矩阵的原点移到矩阵的中心
% 作二维傅里叶变换前一定要用函数im2double()把原始图像的数据类型由uint8转化为double类型
% 否则会因为unit8数据类型只能表示0-255的整数而出现数据截断,进而出现错误结果
s=fftshift(fft2(im2double(I)));
[a,b]=size(s);
d0=30; % 将高斯低通滤波器的截止频率D0设置为30
a0=round(a/2);
b0=round(b/2);
for i=1:a
    for j=1:b
        distance=sqrt((i-a0)^2+(j-b0)^2);    % 根据高斯低通滤波器公式H(u,v)=e^-[D^2(u,v)/2*D0^2] 
        h=exp(-(distance*distance)/(2*(d0^2))); % exp表示以e为底的指数函数
        s(i,j)=h*s(i,j);% 频域图像乘以滤波器的系数
    end
end

s=real(ifft2(ifftshift(s)));% 最后进行二维傅里叶反变换转换为时域图像
subplot(133),imshow(s,[]); 
title('高斯低通滤波图像');

(2)实现效果:
在这里插入图片描述

补充2:对图像噪声的简单理解:噪声在图像上常表现为引起较强视觉效果的孤立像素点或像素块。一般, 噪声信号与研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息。通俗的说,噪声点其实在视觉上看上去让人感觉很难受,直观理解就是其和周围的像素点差异比较大,显得比较突兀,视觉看起来很不舒服。

参考博客:
(1) 通过matlab编程,对以下图像分别添加高斯噪声和椒盐噪声(参数自定),并使用理想低通滤波器、高斯低通滤波器和巴特沃斯低通滤波器进行去噪
(2)用matlab编程实现数字图像理想低通滤波、高斯低通滤波和巴特沃斯低通滤波去噪算法

由于刚刚开始学习图像处理,对于很多知识理解不到位。如有错误,恳请指正,任重而道远,慢慢加油!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44111805/article/details/126305064

智能推荐

Hadoop : hdfs的核心工作原理_hdfs 内核原理-程序员宅基地

文章浏览阅读5.7k次。namenode元数据管理要点 什么是元数据?hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置&lt;datanode&gt;)元数据由谁负责管理?namenodenamenode把元数据记录在哪里?namenode的实时的完整的元数据存储在内存中;namenode还会在磁盘中(dfs.namenode.name.dir)存储内存元..._hdfs 内核原理

详解Python操作Excel文件_python workbooks.open-程序员宅基地

文章浏览阅读7.4k次,点赞34次,收藏250次。前言本篇文章主要总结了一下利用python操作Excel文件的第三方库和方法。常见库简介1.xlrdxlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件。地址:http://xlrd.readthedocs.io/en/latest/ xlrd支持.xls,.xlsx文件的读 通过设置on_demand变量使open_wor..._python workbooks.open

Android 逆向(四) - adb常用逆向命令-程序员宅基地

文章浏览阅读5.2k次,点赞6次,收藏7次。本篇文章继续记录下adb 的一些常用逆向命令.

Ribbon 饥饿加载_ribbon饥饿加载-程序员宅基地

文章浏览阅读768次。Ribbon 默认为懒加载即在首次启动Application时会默认加载,然后将其存储在缓存中,这样程序启动完成后就可以直接拿来用。在applicaiont.yml配置文件中完成配置,可支持针对某个服务进行配置。_ribbon饥饿加载

JIRA 7.8 安装详解说明_atlassian-jira-software-7.8.1-x64-程序员宅基地

文章浏览阅读2.4k次,点赞4次,收藏2次。1、安装centos系统2、关闭防火墙 ---------systemctl stop firewall.service3、查看防火墙状态 --- firewall-cmd --state4、安装wget 包----------yum -y install wget5、安装java环境 yum -y install java-1.8.0-openjdk.x86..._atlassian-jira-software-7.8.1-x64

uni-app解决自定义导航栏,刘海屏的适配问题_uniapp适配刘海屏-程序员宅基地

文章浏览阅读6.6k次,点赞2次,收藏20次。uni-app在微信小程序上,自定义导航栏解决刘海屏的适配问题如果使用的是uni-app的自定义导航栏组件 uni-nav-bar 自定义导航栏,则设置 statusBar为true即可如果是自己写的自定义导航栏组件,解决刘海屏的适配问题,就是解决状态栏的高度问题,通过uni-app的接口来获取到当前设配的状态栏高度,并在组件中添加一个元素并设置高度为 获取到的状态栏高度;<template> <view class="music-head" :style="{color:co_uniapp适配刘海屏

随便推点

深入浅出ExtJS 第四章 表单与输入控件-程序员宅基地

文章浏览阅读149次。1 4.1 制作表单 2 var form = new Ext.form.FormPanel({ 3 title:'form', 4 defaultType:'textfield', 5 buttonAlign:'center', 6 frame:true, 7 width:220, 8 fieldDef..._extjs textfiled 直接放在viewport

物联网卡是什么?_什么是物联网卡-程序员宅基地

文章浏览阅读1.7k次。在最近几年,物联网技术这个概念就一直被广泛提及,他的到来给予了我们全新的发展机遇,一大批智能设备也在高速发展。然而,作为物联网技术中的关键一环,物联网卡也得到了急速的发展,物联网卡的到来极大的方便了我们的日常生活,他也为智能设备装上了一款智慧大脑。那么,什么是物联网卡?物联网卡是三大运营商联合发布的,主要用户是针对于企业而非个人。物联网卡也被安装在各种物体上是SIM卡、传感器、二维码..._什么是物联网卡

在虚拟机中安装docker_虚拟机安装docker-程序员宅基地

文章浏览阅读9.1k次,点赞6次,收藏30次。在虚拟机中安装docker_虚拟机安装docker

初始mach-o文件及在项目中应用-程序员宅基地

文章浏览阅读494次,点赞5次,收藏4次。本文字数:2250字预计阅读时间:15分钟01认识mach-o的必要性了解mach-o的结构可以帮助认识系统加载二进制文件的动态链接和静态链接。应用层面,使用initialize的c++函数计算启动时间耗时也需要以mach-o的结构知识为铺垫。还可以用在使用clang自注册启动任务上。后续会一一展开说明。02mach-o的定义mach-o是mach object的缩写,是存储程序或库的标准格式。a...

法线贴图的原理和实现-程序员宅基地

文章浏览阅读160次。本文出自:http://shiba.hpe.sh.cn/jiaoyanzu/wuli/showArticle.aspx?articleId=328&classId=4法线映射可以让由少量多边形构成的模型看起来像是由大量多边形构成的一样,无需添加更多的多边形。使用法线映射可以使表面(如墙壁)看起来更加富有细节和真实。展示法线映射的一个简单方法是模拟几何形状。要计算法线映射我们需要两个..._家具法线贴图的使用和原理、

vue商品秒杀倒计时-程序员宅基地

文章浏览阅读871次。今天做项目需要倒计时具体代码如下:showTimes(val) { let that = this; let interval = setInterval(() => { let nowTime = new Date().getTime(); let startDate = that.obj.endTime; startDate = startDate.replace(new RegExp('-', 'gm'), '/'); let startDate

推荐文章

热门文章

相关标签