去除椒盐噪声(简单的matlab代码实践,PSNR评价)

参考:
https://www.cnblogs.com/tiandsp/archive/2012/11/14/2770462.html
https://blog.csdn.net/zbc1090549839/article/details/38404995
https://baike.baidu.com/item/%E6%A4%92%E7%9B%90%E5%99%AA%E5%A3%B0/3455958?fr=aladdin

椒盐噪声

椒盐噪声也称为脉冲噪声。它是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。其中黑色的噪声点就被形象地称为胡椒噪声(pepper noise),而白色的噪声点就被称为盐噪声(salt noise)。一般这2种噪声同时出现,呈现在图像上就是黑白的杂点。
椒盐噪声往往由图像切割引起,去除脉冲干扰及椒盐噪声最常用的算法是中值滤波。

中值滤波

滤除椒盐噪声比较有效的方法是对信号进行中值滤波处理。去除椒盐噪声后可以得到较为平滑的信号,其效果要优于均值滤波器,当然中值滤波也同样会造成边缘模糊、信号不够锐利,这似乎也是很多滤波方法的一大通病。因为只要是去噪,一定是低频滤波,而低频滤波所造成的结果就是低频信息被保持,而高频信息受到损失。所以能够激发的一点思考就是在滤波的同时如何更好的保持边缘是滤波中尤其需要注意的。
在matlab中,调用 y = medfilt1(x,n)即可进行一维信号的中值滤波操作(x表示输入信号,n值窗宽度)
调用 B = medfilt2(A, [m n])可完成二维信号的中值滤波操作(A为要被中值滤波的图像,采用m*n大小的窗口)。

中值滤波代码

clc;
clear;
close all;
fprintf('=======中值滤波=====\n');
img=imread('remote_sense.tif'); 
[~,~,ch]  = size(img);
if ch ==3
    img =rgb2gray(img);
end
figure;imshow(img);title('原始图像');
img_med = medfilt2(img, [2,2]);
figure;imshow(img_med);title('2*2中值滤波');

psnr_med = eval_psnr(img,img_med);
% 使用[3,3]的窗口
img_med2 = medfilt2(img, [3,3]);
figure;imshow(img_med2);title('3*3中值滤波');
psnr_med2 = eval_psnr(img,img_med2);

为了作比较我们也是用DCT来去除椒盐噪声并利用PSNR评价。

DCT(频域滤波)去除椒盐噪声

经过显示去噪之后的结果我们同样可以看到,无论是在频域滤波还是在空间域滤波,我们都会造成边缘模糊。这是需要我们思考的。

clc;
close all;
img = imread('remote_sense.tif'); 
[m,n,ch]  = size(img);
if ch == 3
    img = rgb2gray(img);
end
figure;imshow(img);title('原始图像');
%DCT变换
img_dct = dct2(img); 
I = zeros(m,n);
% 高频屏蔽
I(1:m/3,1:n/3)=1; 
Ydct = img_dct .* I;
%逆DCT变换
img_dct = uint8(idct2(Ydct)); 
%结果输出
figure;imshow(img_dct);title('去噪之后');
psnr_dct = eval_psnr(img,img_dct);

评价结果及结论

这里写图片描述
我们会发现中值滤波的结果要好于DCT滤波,但是[2,2]的窗口滤波却比[3,3]的窗口滤波效果要好。

PSNR评价

PSNR可简单地由均方差MSE进行定义。PSNR基于图像像素灰度值进行统计分析。由于人类视觉特性的差异性,通常出现的评价结果与人的主要感觉不一致,但其仍然是一个有参考价值的评价指标。
其求解公式为
这里写图片描述
这里的MAX通常是图像的灰度级,一般就是255。当用于对比2幅图像相似的时候,PSNR越大则表示图像之前相似性越高。

function [PSNR] = eval_psnr(img,imgn)
% =================PSNR评价
% param :
%       img:输入灰度图像(img与imgn同等大小)
%       imgn:输入要进行对比的灰度图像
% 
B = 8;                %编码一个像素用多少二进制位
MAX = 2^B-1;          %图像有多少灰度级
[height,width,~] = size(img);
MES = sum(sum((img-imgn).^2))/(height*width);     %均方差
PSNR = 20*log10(MAX/sqrt(MES));           %峰值信噪比

end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值