关于matlab里的PSNR问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于matlab里的PSNR问题相关的知识,希望对你有一定的参考价值。
为了衡量图像重构效果,采用客观图像质量评价指标PSNR 来表征重构图像块和相应原始图像块之间的差别.下图是图像在不同采样率下每幅图像各个块PSNR 值的分布情况,块采用从上到下,从到右的方式进行排列,横坐标表示块的分布,纵坐标表示重构图像各个块的PSNR 值.
想请教一下这样的图该怎样画?
% of images A and A\', both of size MxN
function [A] = psnr(base,result)
% convert to doubles
% base=double(base);
% result=double(result);
[M,N]=size(base);
b_base=block_im(base,8);
b_result=block_im(result,8);
for i=1:8
for j=1:8
% m_base(i,j)=max(max(double(b_basei,j).^2));
m_base(i,j)=max(max(im2double(b_basei,j).^2));
end
end
% psnr_num=double(M*N*max(m_base(:)));
psnr_num=M*N*max(m_base(:));
for i=1:8
for j=1:8
% s_dif(i,j)=sum(sum(double(b_difi,j).^2));
s_dif(i,j)=sum(sum(double(im2double(b_basei,j)-im2double(b_resulti,j)).^2));
end
end
% psnr_den=double(sum(s_dif(:)));
psnr_den=sum(s_dif(:));
% psnr_num=M*N*max(max(base.^2)); % calculate numerator用信号功率最大值乘以象素点个数)); % calculate den
% psnr_den=sum(sum((base-result).^2ominator 噪声的功率之和
A=10*log10(psnr_num/psnr_den); % calculate PSNR 参考技术A 请问你相应的数据已经有了吗?如果数据已经有了很好画啊。追问
我做图像处理,有原图各种采样率也试验过,现在就是相对比一下在不同采样率下的PSNR对比,但是不知道该怎么办?
追答按照上面那个图的意思就是你需要得到以下数据才到画图:某一采样率(比如说20%采样率)下分块为0,10,....,60时你计算得到的psnr值。然后再画图。
追问有没有画类似这种图的代码可以参考下
追答假设变量a,b,c,d中分别存放的是四种采样率下的psnr值,画图的话就是
plot(a);hold on;
plot(b,'-');hold on;
plot(c,'o');hold on;
plot(d);hold on;
就以上图而言,我有块数为10、20、30......60的在各种采样率下的值,然后去画图,你给的代码画的只是一个点而不是一条线。
追答不是啊,你把同一采样率下10,20,30...的值都放在a,b,c,d里,然后画图就可以了。
追问如你所说画的图应该是几个点构成的线,而上图是不规则的我感觉这应该是用某种函数函数生成的
追答你前面问的仅是画图的问题。如果上面的图是根据你现有的数据拟合出来的那是另外一个问题。你要先看看这个图到底是怎么得来的,文献里面应该也有说吧。
以上是关于关于matlab里的PSNR问题的主要内容,如果未能解决你的问题,请参考以下文章
为啥matlab中的psnr函数为被柯西噪声破坏的图像返回负值?
MATLAB中psnr函数如何使用?或者说,有直接可调用的psnr函数吗?像snr函数一样
MATLAB教程案例24基于matlab的有参图像质量评价仿真与分析,包括MSE,PSNR,NK,AD,SC,MD,NAE