matlab 均值滤波

在matlab中使用滤波器对图像进行滤波非常方便,只需要调用库函数,只是满足工程需要就够了;但是想学习图像处理的滑,是远远不够的,还要对算法的基本原理弄清楚

1-均值滤波

均值滤波也叫做线性滤波,规定一个固定可调节大小的模板,如3*3,对目标像素做均值滤波就是将他周围8个点的像素值求和取平均,替代原来的像素值;

对目标像素3进行均值滤波

求3*3模板中的像素和(除了目标)=2+4+8+1+9+5+7+6=42

42/8=5,用5去替代原来的3

结论:由实验可得均值滤波会破坏图像细节,造成图像模糊

附上实验代码

clear all;
clc;
A=imread('F:\matlab_tt\fliter\tt.jpg');
B=size(A);
C=numel(B);
subplot(231)
imshow(A)
title('原始图像')
if (C==3)
    A=rgb2gray(A);
else
    A=A;
end
A1=imnoise(A,'salt & pepper',0.02);
subplot(232)
imshow(A1)
title('添加椒盐噪声的图片')
k1=filter2(fspecial('average',3),A1)/255;
k2=filter2(fspecial('average',5),A1)/255;
k3=filter2(fspecial('average',7),A1)/255;
k4=filter2(fspecial('average',9),A1)/255;
subplot(233),imshow(k1);
subplot(234),imshow(k2);
subplot(235),imshow(k3);
subplot(236),imshow(k4);

 以下是实验图:

为什么要除以255:

为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型.如果直接运行imshow(I),我们会发现显示的是一个白色的图像.这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围.而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了.
有两个解决方法:
1> imshow(I/256); -----------将图像矩阵转化到0-1之间 
2> imshow(I,[]); -----------自动调整数据的范围以便于显示.
从实验结果看两种方法都解决了问题,但是从显示的图像看,第二种方法显示的图像明暗黑白对比的强烈些!

  • 21
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值