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');
 

结果

在这里插入图片描述

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • django和drf_jackson序列化原理

    django和drf_jackson序列化原理前言上一篇文章我们讲述了序列化,这篇就带大家一起来实现以下序列化Serializer我们使用序列化类Serializer,我们来看下源码结构,这里推荐使用pycharm左边导航栏的Structu

  • java解析xml转为Map

    java解析xml转为Map之前开发过一个解析多层级xml文件的工具类,后来处理的时候发现,这种方式得到的map或json集合多一个key标签,在解析的时候会比较麻烦,于是根据需要在原有方法的基础上写出了另外的处理方法,总结记录如下:1、单节点单层级、单节点多层级xml转mapimportjava.io.ByteArrayInputStream;importjava.util.ArrayList;importjava

  • js数组排序—自定义快速排序

    js数组排序—自定义快速排序数组自带的sort方法 vararr=[3,4,2,1]; arr.sort(); console.log(arr);进行递增排序(4)[1,2,3,4]sort方法可以接收一个参数,用来自定义排序规则 arr.sort(function(val1,val2){ //returnval1-val2;默认 returnval2-…

  • 如何用51单片机控制步进电机运动「建议收藏」

    如何用51单片机控制步进电机运动「建议收藏」本来接触单片机挺久了的,但是一直只是停留在非常初级的认识阶段,本科的时候上过几门课,但是从来没有自己捣鼓过单片机,这次突然来了兴趣,感觉一下子学到了好多东西,在这里好好整理一下。这篇文章只适合于入门阶段的小白阅读,高手请绕道。12年年初的时候购买了一套普中科技的“单片机开发试验仪”,好多次想好好学学,结果每一次都半途而废,主要原因还是周围的人都不会用,有问题都不知道找谁问,结果锁到箱子里一直到现在。

  • springboot 获取错误信息 exception message

    springboot 获取错误信息 exception message

  • oracle恢复被覆盖的存储过程

    oracle恢复被覆盖的存储过程

    2021年11月29日

发表回复

您的电子邮箱地址不会被公开。

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