峰值信噪比PSNR
(1)PSNR (Peak signal-to-noise ratio)
常用于图像压缩等领域中,压缩前与压缩后,图像劣化程度的客观评价。
评价结果以dB(对比分贝)为单位来表示。2个图像间,PSNR值越大,趋于无劣化,劣化程度较大时,PSNR值趋于0dB。
不知道你是灰度图像水印还是彩色图像水印,还是音频转成的二维矩阵,我就简单的用灰度水印图像介绍一下;
PSNR的公式是:
、
如上图MSE是原始和编码后图像的之间的均方误差,n表示每个像素的比特数,公式的具体解释和证明去自己找资料吧。
看你代码的形式,应该是matlab
其中n表示的比特数为8比特
function [PSNR, MSE] = psnr(X, Y)
% 计算峰值信噪比PSNR、均方根误差MSE
% 如果输哪世伏入Y为空,则视为X与其本身来计算PSNR、MSE
if nargin<2
D = X
else
if any(size(X)~=size(Y))
error('The input size is not equal to each other!')
end
D = X-Y
end
MSE = sum(D(:).*D(:))/prod(size(X))
PSNR = 10*log10(255^2/MSE)
以下个人观点:我李携做实验的时候不太喜欢用PSNR,实验结果显示,PSNR 的分数无法和人眼看到的视返枣觉品质完全一致,有可能 PSNR 较高者看起来反而比PSNR 较低者差,语音水印的品质也很成问题,不建议用PSNR,除非你的算法和PSNR很合得来,可以作为参考参数。
下班了,待续...
x1=imread(original)x2=imread(test)
x1=double(x1)
x2=double(x2)
[m,n]=size(x1)
[m2,n2]=size(x2)
if m2~=m||n2~=n
error('图像选择错误')
end
msevalue=0
for i=1:m
for j=1:n
msevalue=msevalue+(x1(i,j)-x2(i,j))^2
end
end
msevalue=msevalue/(m*n)
disp(['输入数据的mse为孝旦:',num2str(msevalue)])
psnrvalue=255^2/msevalue
psnrvalue=10*log10(psnrvalue)
以上是求PSNR的程序,直接姿李加在主函数后面就可以,或者新建一个m文件来保存之后调用。头两句直接读入原图巧册扰像和经过处理的图像,把图像数据矩阵存放在x1和x2中~~例如x1=imread('lena.bmp')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)