• MATLAB 均方根误差MSE、两图像的信噪比SNR、峰值信噪比PSNR、结构相似性SSIM


      今天的作业是求两幅图像的MSE、SNR、PSNR、SSIM.代码如下:

    clc;
    close all;
    X = imread('q1.tif');%             读取图像
    Y=imread('q2.tif');
    figure;%                           展示图像
    subplot(1, 3, 1); imshow(X); title('q1');
    subplot(1, 3, 2); imshow(Y); title('q2');
    %                                  使得图像每个像素值为浮点型
    X = double(X); 
    Y = double(Y); 
    
    A = Y-X;
    B = X.*Y;
    subplot(1,3,3);imshow(A);title('作差');
    MSE = sum(A(:).*A(:))/numel(Y);%  均方根误差MSE,numel()函数返回矩阵元素个数
    SNR = 10*log10(sum(X(:).*X(:))/MSE/numel(Y));%信噪比SNR
    PSNR = 10*log10(255^2/MSE);%      峰值信噪比PSNR
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %以下为结构相似度SSIM
    ux=sum(X(:).*X(:))/numel(X);
    uy=sum(Y(:).*Y(:))/numel(Y);
    sigmoidx=sum(X(:).*X(:)-ux)/numel(X);
    sigmoidy=sum(Y(:).*Y(:)-uy)/numel(Y);
    sigmoidxy=sum(B(:).*B(:))/(numel(B)*ux*uy)-ux*uy;
    SSIM=(2*ux*uy)*(2*sigmoidxy)/(ux*ux+uy*uy)/(sigmoidx*sigmoidx+sigmoidy*sigmoidy);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    display(MSE);%均方根误差MSE
    display(SNR);%信噪比SNR
    display(PSNR);%峰值信噪比PSNR
    display(SSIM);%结构相似性SSIM
    

      接下来,让我们看一下代码的输出。

    MSE =153.6263
    
    SNR =19.7617
    
    PSNR =26.2661
    
    SSIM =-1.5281e+26
    

      

      根据观察,两幅图像可能来自于连拍,图片中的内容几乎完全一致。仅仅是对应的像素点产生了偏移。上图图三反应的是两幅图像作差以后的结果。根据均方根误差MSE,我们发现从数据上两幅图存在有巨大差异。这显然不符合我们的观察。作为图像质量评价指标,客观评价MSE与人眼的主观判断产生出入,这说明MSE并不是一个合适的指标。原因是:MSE指标的核心在于两幅图像相应像素点之间差值的平方和。这直接导致了该指标对于图像的空间分布没有“全局”认识,而只是局限于单纯的像素“个体”。

      而SNR和PSNR,在本例中取得了较好的效果。不过,个人认为在高熵图像中容易失效,在具有足够多中心点的着色过的Vornoi图和其平移图像中,SNR和PSNR将会难有成效。

      对于SSIM,SSIM综合考虑了两幅图像的均值、方差,以及他们的协方差,从而在本例中取得了非常好的效果。

    2019-03-04

    23:14:07

  • 相关阅读:
    php 下载文件
    thinkphp3.1 发送email
    微擎 plugin 时间插件 图片上传插件不显示 报错 影响下面执行
    Java中基本数据类型的对比记忆
    堆内存设置以及垃圾回收方式
    try--catch--finally中return返回值执行的顺序(区别)
    Java中的值传递和引用传递
    全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)
    10进制转换成16进制最简单的方法
    quartz 框架定时任务,使用spring @Scheduled注解执行定时任务
  • 原文地址:https://www.cnblogs.com/lyxyhhxbk/p/10474055.html
Copyright © 2020-2023  润新知