输入任意一个二维矩阵,计算其均值滤波和中值滤波的结果。用3×3的卷积核,矩阵边缘的数据不处理

输入任意一个二维矩阵,计算其均值滤波和中值滤波的结果。用3×3的卷积核,矩阵边缘的数据不处理,第1张

其实都可以对彩色图像处理的,只是matlab里面的实现不一致。均值滤波和中值滤波matlab函数只考虑了单通道当然就必须转换成灰度图像;小波降噪的matlab函数不知道你是用的那个,肯定也需要把三通道的彩色图像先转换成单通道,分别去噪以后再整合成彩色图像。总的来说一般图像去噪都是对单通道来处理的,因为大部分的filter都是对二维矩阵来 *** 作的,要是对三通道处理也需要分别对不同的通道处理再整合。

%我觉得是你计算 PSNR的方法错了,应该是用最大像素值,
%灰度图像的最大像素值是255, 而不是512。
%另外计算MSE也不用那么麻烦
%下面是计算 MSE和PSNR的程序,我拿一张试了一下,结果肯定是不一样的。
%还有统计像素值出现的次数,用直方图imhist会更简单点,这个程序我没写。
I=imread('boatbmp');
J=imnoise(I,'gaussian',0,001);
Jg=double(J);
%均值滤波
k1=filter2(fspecial('average',3),Jg);
k2=filter2(fspecial('average',5),Jg);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k1));title('33模板均值滤波');
subplot(224),imshow(uint8(k2));title('55模板均值滤波');
%中值滤波
k3=medfilt2(Jg,[3 3]);
k4=medfilt2(Jg,[5 5]);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k3));title('33模板中值滤波');
subplot(224),imshow(uint8(k4));title('55模板中值滤波');
%计算均值滤波后图像的PMSE与PSNR
diff=(double(I)-k1)^2;
mse=mean(diff(:));
pmse_avg=mse;
max_value=max(k1(:));
psnr=double(10log(max_valuemax_value/mse)/log(10));
%计算中值滤波后的各项指标
diff=(double(I)-k3)^2;
mse=mean(diff(:));
max_value=max(k3(:));
pmse_mid=mse;
psnr_mid=double(10log(max_valuemax_value/mse)/log(10));

这是图像滤波、平滑的问题处理方式。一般使用模板进行平滑的时候,因为模板本身是有大小的所以边缘的地方处理不到。边缘一般忽略掉或是采用加行加列的方式。比如33模板加一行,55加两行。注意加行和列的时候不是同时加的,总有先后,所以55加一行变成65,再加一列变成66,就是这样,希望能帮到你。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12894364.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存