matlab:lena图像在空域和频域的均匀滤波

matlab:lena图像在空域和频域的均匀滤波文章目录前言一、空域滤波二、频域滤波三,matlab代码结果前言卷积:函数空间域的卷积的傅里叶变换是函数傅里叶变换的乘积。对应地,频率域的卷积与空间域的乘积存在对应关系。给定频率域滤波器,可对其进行傅里叶逆变换得到对应的空域滤波器;滤波在频域更为直观,但空域适合使用更小的滤波模板以提高滤波速度。因为相同尺寸下,频域滤波器效率高于空域滤波器,故空域滤波需要一个更小尺寸的模板近似得到需要的滤波结果。一、空域滤波将模板在图像中逐像素移动,将卷积核的每个元素分别和图像矩阵对应位置元素相乘并将结果累加,

大家好,又见面了,我是你们的朋友全栈君。


前言

卷积:函数空间域的卷积的傅里叶变换是函数傅里叶变换的乘积。对应地,频率域的卷积与空间域的乘积存在对应关系。


给定频率域滤波器,可对其进行傅里叶逆变换得到对应的空域滤波器;滤波在频域更为直观,但空域适合使用更小的滤波模板以提高滤波速度。因为相同尺寸下,频域滤波器效率高于空域滤波器,故空域滤波需要一个更小尺寸的模板近似得到需要的滤波结果。

一、空域滤波

将模板在图像中逐像素移动,将卷积核的每个元素分别和图像矩阵对应位置元素相乘并将结果累加,累加和作为

模板中心对应像素点的卷积结果。通俗的讲,卷积就是对整幅图像进行加权平均的过程,每一个像素点的值,都

由其本身和邻域内的其他像素值经过加权平均后得到。

二、频域滤波

频率域是由傅里叶变换和频率变量 (u,v)定义的空间,频域均匀滤波处理过程:先对图像进行傅里叶变换,转换至频率域,在频域使用滤波函数进行滤波,最后将结果反变换至空间域。即:
(1)计算原始图像f(x,y)的DFT,得到F(u,v)。
(2)创建均值滤波器,并使用fft2计算其DFT得到H(u,v)
(3)计算滤波器函数H(u,v)与F(u,v)的乘积G(u,v)。
(4)计算第(3)步计算结果的傅里叶反变换g(x,y)。
(5)取g(x,y)的实部作为最终滤波后的结果图像。
按照该步骤,在MATLAB中很容易编程实现频域滤波。滤波能否取得理想结果的关键取决于频域滤波函数H(u,v),常常称之为滤波器,或滤波器传递函数。因为它在滤波中抑制或滤除了频谱中某些频率的分量,而保留其他一些频率不受影响。


注意空域的滤波器x转变的频域时用的函数是fft2(x,m,n),m*n是需要处理的图片大小。

三,matlab代码

t=imread('E:\matlab DMP\lenaG.bmp');
[m,n,z]=size(t);

 

y1=0+10*randn(m,n);%二维高斯分布矩阵 0是均值 20是标准差
y2=0+20*randn(m,n);%二维高斯分布矩阵 0是均值 20是标准差
y1=uint8(y1);
y2=uint8(y2);
%加上噪声
t1=t+y1;
t2=t+y2;
figure('name','添加高斯噪声');;
subplot(2,2,1),imshow(t),title('原图');
subplot(2,2,3),imshow(t1),title('加入均值为0,标准差为10的高斯噪声后');
subplot(2,2,4),imshow(t2),title('加入均值为0,标准差为20的高斯噪声后');


 

K1=conv2(fspecial('average',5),t2 )/255;
K2=conv2(fspecial('average',10),t2 )/255 ;
K3=conv2(fspecial('average',20),t2 )/255;
 
figure('name','空域均值滤波');

subplot(2,2,1),imshow(t2),title('原图');
subplot(2,2,2),imshow(K1),title('均值滤波,sizes 5x5');
subplot(2,2,3),imshow(K2),title('均值滤波,sizes 10x10');
subplot(2,2,4),imshow(K3),title('均值滤波,sizes 20x20');


 
Fc = fft2(t2);

 

h1 = fspecial('average',5);
h2 = fspecial('average',10);
h3 = fspecial('average',20);
 

H1 = fft2(h1,512,512);
H2 = fft2(h2,512,512);
H3 = fft2(h3,512,512);

G1 = H1.*Fc;
G2 = H2.*Fc;
G3 = H3.*Fc;
 

g1 = ifft2(G1);
g1 = im2uint8(mat2gray(abs(g1)));
 
g2 = ifft2(G2);
g2 = im2uint8(mat2gray(abs(g2)));

g3 = ifft2(G3);
g3 = im2uint8(mat2gray(abs(g3)));

figure('name','频域均值滤波');
subplot(2,2,1),imshow(t2),title('高斯噪声');
subplot(2,2,2),imshow(g1),title('高斯过滤,size 5*5');
subplot(2,2,3),imshow(g2),title('高斯过滤,size 10*10');
subplot(2,2,4),imshow(g3),title('高斯过滤,size 20*20');
 


Kk1 = medfilt2(t2,[3,3]);
Kk2 = medfilt2(t2,[5,5]);
Kk3 = medfilt2(t2,[7,7]);
figure('name','频域中值滤波');
subplot(2,2,1),imshow(t2),title('高斯噪声');
subplot(2,2,2),imshow(Kk1),title('高斯过滤,size 3*3');
subplot(2,2,3),imshow(Kk2),title('高斯过滤,size 5*5');
subplot(2,2,4),imshow(Kk3),title('高斯过滤,size 7*7');
 

结果

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150972.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu搭建samba服务器_搭建webdav

    ubuntu搭建samba服务器_搭建webdav1、下载安装samba服务sudoapt-getinstallsamba2、修改smb配置文件,设置共享目录a)配置文件:/etc/samba/smb.confb)进到该目录:cd/etc/sambac)修改前备份:sudocpsmb.confsmb.conf_bakd)修改配置文件,设置共享目录:sudovismb.conf参考修改内容(例:共享目录/home/samba_share)[samba_share]comment=…

    2022年9月24日
    0
  • MFC 自定义CListCtrl

    MFC 自定义CListCtrl本文的代码也是根据网上现有的改编而来首先是.h#pragmaonce#include”HeaderCtrlCl.h”//CListCtrlClclassCListCtrlCl:publicCListCtrl{DECLARE_DYNAMIC(CListCtrlCl)public:CHeaderCtrlClm_Header;CListCtrlCl();

    2022年6月23日
    24
  • spring注解@Conditional 按照一定的条件进行判断,满足条件给容器中注册bean

    spring注解@Conditional 按照一定的条件进行判断,满足条件给容器中注册beanpublicclassPerson{ privateStringname; privateintage; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){…

    2025年7月30日
    0
  • 基础野:细说无符号整数[通俗易懂]

    基础野:细说无符号整数[通俗易懂]Brief本来只打算理解JS中0.1+0.2==0.30000000000000004的原因,但发现自己对计算机的数字表示和运算十分陌生,于是只好恶补一下。本篇我们一起来探讨一下基础的基础

    2022年8月3日
    3
  • nacivat错误生成激活码_最新在线免费激活

    (nacivat错误生成激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1S…

    2022年3月27日
    73
  • 使用document对象操作cookie

    使用document对象操作cookie1.使用document对象的cookie属性,可以让你读取、添加和更新文档(当期HTML)所关联的cookie。2.当你读取document.cookie时,会得到当期文档的所有cookie。3.cookie的形式是如"name=value"的名值对。4.如果存在多个cookie一起返回,使用;隔开。“name1=value1;name2=value2”。所以对于添加和更新cooki…

    2022年7月27日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号