中值滤波
中值滤波:是一种非线性数字滤波器技术, 用于降噪。
理解:去一个模板,可为3 * 3, 5 * 5,n * n…每次从图像中取出模板大小的矩阵,将所有元素排序,取中间值放入木板的中心位置,再还原到原图中,以此类推扫描整个图像。
可先对图像进行填充,填充函数:
B = padarray(A,padsize,padval,direction)
注释:
功能:填充图像或填充数组。
A:输入图像;
B:填充后的图像;
padsize:填充的行数和列数,通常用[r ,c]来表示。
padval:表示填充方法。它的具体值和描述如下:
包括:
- ‘symmetric’表示图像大小通过围绕边界进行镜像反射来扩展;
- ‘replicate’表示图像大小通过复制外边界中的值来扩展;
- ‘circular’图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
direction:表示填充的方向。
包括: - ‘pre’表示在每一维的第一个元素前填充;
- ‘post’表示在每一维的最后一个元素后填充;
- ‘both’表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。
若参量中不包括direction,则默认值为’both’。
若参量中不包含padval,则默认用零来填充。
若参量中不包括任何参数,则默认填充为零且方向为’both’。
在计算结束时,图像会被修剪成原始大小。
matlab中自带的中值滤波函数:
b=medfilt2(x0,[n,n]);
x0:需要过滤的图像;
[n,n]:模板大小
注意:此函数用于二维中值滤波,通常先灰度处理。
另一种方法程序代码:
x=imread('G:\matlab\1.jpg');%需要过滤的图像
n=3; %模板大小
[height, width]=size(x); %获取图像的尺寸(n小于图片的宽高)
figure;
imshow(x);%显示原图
% x = padarray(x,[3,3]); %对图像边缘进行填充
x = imnoise(x,'salt & pepper'); %加入椒盐噪声
figure;
imshow(x); %显示加入噪声后的图片
x1=double(x); %数据类型转换
x2=x1; %转换后的数据赋给x2
for i=1:height-n+1
for j=1:width-n+1
c=x1(i:i+(n-1),j:j+(n-1)); %在x1中从头取模板大小的块赋给c
e=c(1,:); %e中存放是c矩阵的第一行
for u=2:n %将c中的其他行元素取出来接在e后使e为一个行矩阵
e=[e,c(u,:)];
end
med=median(e); %取一行的中值
x2(i+(n-1)/2,j+(n-1)/2)=med; %将模板各元素的中值赋给模板中心位置的元素
end
end
d=uint8(x2); %未被赋值的元素取原值
figure;
imshow(d); %显示过滤图片
x0=rgb2gray(x); %灰度处理,灰度处理后的图像是二维矩阵
b=medfilt2(x0,[n,n]); %matlab中自带值滤波函数
figure;
imshow(b); %显示过滤后的灰度图片
结果截图:
原图:
加入椒盐噪声后的图:
手写程序滤波后:
自带函数滤波:
今天的文章中值滤波matlab代码_二阶滤波器计算公式分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/70137.html