大家有没有发现自己将图片上传到网上一段时间后会发现图片出现噪点,有点不够很清晰。这是一件很烦的事情,本期过冷水就给大家讲讲如何去除掉讨厌的噪点。
大家需要了解一下一个简单的非线性空间滤波的工具箱。这个函数就是g=ordfilt2(f,order,domain)。matlab图像(亮度变换与线性滤波)记住,这个工具箱只能处理二维的图片。当然,可以用其他办法搞定三维的彩色图片。
其中g就是它的输出图像,它的原理非常简单,它可以生成统计排序滤波器,它的响应是基于对图像邻域包含的像素进行排序。然后用排序结果确定的值来代替邻域的中心像素的值。
其中order代表使用排序元素的第order个元素代替f中的每一个元素。而该邻域由domain中的非零元素指定。
比较有名的滤波叫做中值滤波。它对应的是第50个百分位。也就是像素点总和的一半。
语法如下:
g=ordfilt2(f,median(1:m*n),ones(m,n))
还有最小滤波器,对应第0个百分位。
语法如下:
g=ordfilt2(f,1,ones(m,n))
还有对应100个百分位的滤波器。也就是像素点总和。
g=ordfilt2(f,m*n,ones(m,n))。
另外中值滤波还有一个专用的工具箱g=medfilts(f)。
首先给大家讲讲简单的灰白图像的去噪问题。
代码如下
clear clc f=imread('4.jpg'); %读原图像 f=rgb2gray(f); f1=imnoise(f,'salt & pepper',0.09); %加椒盐噪声 g=medfilt2(f1); %进行中值滤波 subplot(1,3,1),imshow(f),title('原图像') subplot(1,3,2),imshow(f1),title('被椒盐噪声污染的图像') subplot(1,3,3),imshow(g),title('中值滤波图像')
可以看出人为污染和去噪效果很好的。黑白图片并不能满足大家的学习需求,还是彩色照片的需求高一点,那么如何处理彩色图片,需要注意的是才是图片是三维矩阵 有三个颜色通道,只需要分别处理这三个颜色通道。然后组合在一起,彩色图片就自然解决掉了。
代码如下:
clear clc f=imread('2.jpg'); imshow(f) f1=imnoise(f(:,:,1),'salt & pepper',0.09); %加椒盐噪声 f2=imnoise(f(:,:,2),'salt & pepper',0.09); %加椒盐噪声 f3=imnoise(f(:,:,3),'salt & pepper',0.09); %加椒盐噪声 f_noise(:,:,1)=f1; f_noise(:,:,2)=f2; f_noise(:,:,3)=f3; imshow(f_noise) g1=medfilt2(f1);%中值滤波 g2=medfilt2(f2);%中值滤波 g3=medfilt2(f3);%中值滤波 g_1(:,:,1)=g1; g_1(:,:,2)=g2; g_1(:,:,3)=g3; subplot(1,3,1),imshow(f),title('原图像'); subplot(1,3,2),imshow(f_noise),title('添加椒盐噪声的图像'); subplot(1,3,3),imshow(g_1),title('处理以后的图像');
运行这段代码就可以得到我们的封面图片了。过冷水和大家分享的去噪小技巧,快快get起来。
原创文章,作者过冷水,未经授权,禁止私自转载,转载请联系作者,如果您希望加入Matlab仿真秀官方交流群和资料下载可加群:927550334