数字音频水印——峰值信噪比PSNR与信噪比SNR的问题。求告之!求代码!

数字音频水印——峰值信噪比PSNR与信噪比SNR的问题。求告之!求代码!,第1张

峰值信噪比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')


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存