今天的作业是求两幅图像的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

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

  1. matlab之原始处理图像几何变换

    (一)图像几何变换理论知识 (1)图像的平移与比例 图像的平移很简单,平移前后的坐标分别为(x,y)和(x',y'),则满足的关系式为 x'= x +Tx: y'= y +Ty: 其中Tx与Ty分别为 ...

  2. Matlab提供了两种除法运算:左除(\)和右除(/)

    Matlab提供了两种除法运算:左除(\)和右除(/).一般情况下,x=a\b是方程a*x =b的解,而x=b/a是方程x*a=b的解.例:a=[1  2  3; 4  2  6; 7  4  9]b ...

  3. matlab均方根误差

    Matlab均方根误差的计算 http://blog.sina.com.cn/s/blog_6210f654010308kv.html

  4. [转]两种Sigma-Delta ADC SNR仿真方法

    假设现有一组Sigma-Delta ADC输出序列,下面将介绍两种计算出相应SNR的方法.其中由cadence导出数据的CIW窗口命令为:ocPrint(?output "输出目录/输出文件 ...

  5. MATLAB解析PFM格式图像

    http://www.p-chao.com/ja/2016-09-27/matlab%E8%A7%A3%E6%9E%90pfm%E6%A0%BC%E5%BC%8F%E5%9B%BE%E5%83%8F/ ...

  6. Matlab图像处理系列4———图像傅立叶变换与反变换

    注:本系列来自于图像处理课程实验.用Matlab实现最主要的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内能够加工处理图像以外.我们还能够将图像变换到其它空间后进行处理.这些方法 ...

  7. matlab练习程序(图像球面化)

    十一没什么事干,接着看图像算法. 这个球面化算法最初是在ps上的球面化滤镜中看到的,感觉挺有意思,就研究了一下. 算法的详细推导可以在这篇博客中找到,我比较懒,只在纸上推了一遍,就不在博客上编辑了. ...

  8. matlab各类数据l图像之间的转化

    matlab各类数据图像之间的转化 rgb类型转化为二值的步骤例如以下: 1.採用命令im2double将rgb类型转化三维的double >> str='E:\programing\Ei ...

  9. matlab学习笔记,图像分块

    clc; clear all; close all; I = imread('E:\matlab\files-images\tomsen512.jpg'); rs = size(I, 1);% 行数c ...

随机推荐

  1. Ext选项卡tabpanel切换动态加载数据

    鸣人不说暗话,来张图: 代码开始:(使用Ext,ajax加载数据,如果你们有好的方法也可以多多交流)var tabxsk = new Object(); //初始化 tabxsk.init = fun ...

  2. tcprstat测试服务器请求响应时间

    tcprstat使用,tcprstat必须使用root权限才能使用 tcprstat -p 3306 -t 1 -n 5 -l 192.168.52.250 centos统计分析所有的IP地址

  3. node js 爬虫爬取静态页面,

    先打一个简单的通用框子 //根据爬取网页的协议 引入对应的协议, http||https var http = require('https'); //引入cheerio 简单点讲就是node中的jq ...

  4. #20175201 实验二:Java面向对象程序设计

    20175201 实验二:Java面向对象程序设计 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L ...

  5. dependent object 和root object

    dependent object 是root object 下面的字节点.每个节点被访问,都要通过 root object 进入.

  6. python类与对象-如何让对象支持上下文管理

    如何让对象支持上下文管理 问题举例 一个telnet客户端的类TelnetClient, 调用实例的connect(),login(),interact方法 启动客户端与服务器交互,交互完毕后需要调用 ...

  7. visual studio 启动报 activityLog.xml文件 错误

    1.在安装目录里面找到 devenv.exe 这个文件的所在位置C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE 2.点击左下角图标, ...

  8. pytorch数据加载器

    class torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, num_workers=0, ...

  9. Ubuntu16.04彻底删除PHP7.2

    一.删除php的相关包及配置 apt-get autoremove php7* 二.删除关联 sudo find /etc -name "*php*" |xargs  rm -rf ...

  10. linux 系统管理11 ——系统安全及应用

    一.基本安全措施 1.系统账号清理 (1).将非登陆用户的shell设为/sbin/nologin 方法一.usermod -s 方法二.chsh命令,交互式修改 方法三.chsh -s usermo ...