psnr rgb matlab程序

彩色图像:

%% 计算前后两副图像的均方根误差MSE、峰值信噪比PSNR

X=imread('cat.jpg');
Y=imread('cat1.jpg');
[r,cl]=size(X);   %读入图像尺寸
c=cl/3; 
mse_m=double(zeros(r,c));
%选取算法
disp('1. 彩色图像灰度化'); 
disp('2. RGB各分量计算法'); 
choice=input('请选择算法(1,2):')
if(choice==2)
    if nargin<2
        Xr=X(:,:,1);
        Xg=X(:,:,2);
        Xb=X(:,:,3);
        for i=1:r
            for j=1:c
                 Dr = Xr;
                 Dg = Xg;
                 Db = Xb;                 
            end
        end
        % MSE = sum(D(:).*D(:))/prod(size(X));
        mse_r = sum(Dr(:).*Dr(:))/prod(r*c);
        mse_g = sum(Dg(:).*Dg(:))/prod(r*c);
        mse_b = sum(Db(:).*Db(:))/prod(r*c);
        mse = (mse_r+mse_g+mse_b)/3;
    else
        if any(size(X)~=size(Y))
            error('The input size is not equal to each other!');
        end
        Xr=X(:,:,1);
        Xg=X(:,:,2);
        Xb=X(:,:,3);
        Yr=Y(:,:,1);
        Yg=Y(:,:,2);
        Yb=Y(:,:,3);
        for i=1:r
            for j=1:c
                mse_mR(i,j)=(Xr(i,j)-Yr(i,j))^2;
                mse_mG(i,j)=(Xg(i,j)-Yg(i,j))^2;
                mse_mB(i,j)=(Xb(i,j)-Yb(i,j))^2;
            end
        end
        %mse=sum(mse_m(:))/(r*c);
        mseRGB=sum(mse_mR(:))+sum(mse_mG(:))+sum(mse_mB(:))
        mse=mseRGB/(r*c*3)        
    end
end
    
% PSNR = 10*log10(255^2/MSE);

psnr=10*log(double(255*255/mse))/log(10)




灰度图像:

close all;
clear all;
clc;


img=imread('cat.jpg');
[h w]=size(img);


w=w/3;


imgn=imresize(img,[floor(h/2) floor(w/2)]);
imgn=imresize(imgn,[h w]);
imwrite(imgn,'cat1.jpg'); 
figure,imshow(img)
figure,imshow(imgn)
img=double(img);
imgn=double(imgn);


B=8;                %编码一个像素用多少二进制位
MAX=2^B-1;          %图像有多少灰度级
MES=sum(sum((img-imgn).^2))/(h*w);     %均方差
PSNR=20*log10(MAX/sqrt(MES))         %峰值信噪比

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值