functionf=WPSNR(A,B,varargin)%ThisfunctioncomputesWPSNR(weightedpeaksignal-to-noiseratio)between%twoimages.Theanswerisindecibels(dB).%%Usingcontrastsensitivityfunction(CSF)toweightspatialfrequency%oferrorimage.%%Using:WPSNR(A,B)%%WrittenbyRuizhenLiu,http://www.assuredigit.comifA==Berror('Imagesareidentical:PSNRhasinfinitevaluelilizong')endmax2_A=max(max(A));max2_B=max(max(B));min2_A=min(min(A));min2_B=min(min(B));ifmax2_A>1|max2_B>1|min2_A<0|min2_B<0error('inputmatricesmusthavevaluesintheinterval[0,1]')ende=A-B;ifnargin<3fc=csf;%filtercoefficientsofCSFelsefc=varargin...{1};endew=filter2(fc,e);%filteringerrorwithCSFdecibels=20*log10(1/(sqrt(mean(mean(ew.^2)))));%disp(sprintf('WPSNR=+%5.2fdB',decibels))f=decibels;%=============functionfc=csf()%=============%ProgramtocomputeCSF%ComputecontrastsensitivityfunctionofHVS%%Output:fc---filtercoefficientsofCSF%%Reference:%MakotoMiyahara%"ObjectivePictureQualityScale(PQS)forImageCoding"%IEEETrans.onComm.,Vol46,No.9,1998.%%WrittenbyRuizhenLiu,http://www.assuredigit.com%computefrequencyresponsematrixFmat=csfmat;%Plotfrequencyresponse%mesh(Fmat);pause%compute2-DfiltercoefficientusingFSAMP2fc=fsamp2(Fmat);%mesh(fc)%===================functionFmat=csfmat()%===================%ComputeCSFfrequencyresponsematrix%%Calledbyfunctioncsf.m%%Frequencyrange:therangoffrequencyseemstobe:%w=pi=(2*pi*f)/60%f=60*w/(2*pi),about21.2%min_f=-20;max_f=20;step_f=1;u=min_f:step_f:max_f;v=min_f:step_f:max_f;n=length(u);Z=zeros(n);fori=1:nforj=1:nZ(i,j)=csffun(u(i),v(j));%callingfunctioncsffunendendFmat=Z;%========================functionSa=csffun(u,v)%========================%ContrastSensitivityFunctioninspatialfrequency%Thisfilecomputethespatialfrequencyweightingoferrors%%Reference:%MakotoMiyahara%"ObjectivePictureQualityScale(PQS)forImageCoding"%IEEETrans.onComm.,Vol46,No.9,1998.%%Input:u---horizontalspatialfrequencies%v---verticalspatialfrequencies%%Output:frequencyresponse%%WrittenbyRuizhenLiu,http://www.assuredigit.com%ComputeSa--spatialfrequencyresponse%symsSwsigmafuvsigma=2;f=sqrt(u.*u+v.*v);w=2*pi*f/60;Sw=1.5*exp(-sigma^2*w^2/2)-exp(-2*sigma^2*w^2/2);%ModificationinHighfrequencysita=atan(v./(u+eps));bita=8;f0=11.13;w0=2*pi*f0/60;Ow=(1+exp(bita*(w-w0))*(cos(2*sita))^4)/(1+exp(bita*(w-w0)));%ComputefinalresponseSa=Sw*Ow;