PSNR 的公式很容易搜到。

http://www.360doc.com/content/12/0605/21/4129998_216244993.shtml
http://blog.sina.com.cn/s/blog_455c7a600101ytgo.html

峰值信噪比经常用作图像压缩等领域中信号重建质量的测量方法,它常简单地通过均方差(MSE)进行定义。两个m×n单色图像IK,如果一个为另外一个的噪声近似,那么它们的的均方差定义为:

峰值信噪比定义为:

代码实现(参考:http://stackoverflow.com/questions/29428308/snr-of-an-image-in-c-using-opencv)

double getPSNR(const Mat& I1, const Mat& I2)
{
Mat s1;
absdiff(I1, I2, s1); // |I1 - I2|
s1.convertTo(s1, CV_32F); // cannot make a square on 8 bits
s1 = s1.mul(s1); // |I1 - I2|^2 Scalar s = sum(s1); // sum elements per channel double sse = s.val[] + s.val[] + s.val[]; // sum channels if( sse <= 1e-) // for small values return zero
return ;
else
{
double mse =sse /(double)(I1.channels() * I1.total());
double psnr = 10.0*log10((*)/mse);
return psnr;
}
}

SNR 不太好搜。

http://cg2010studio.com/2014/12/10/opencv-snr-%E8%88%87-psnr/

http://blog.csdn.net/lien0906/article/details/30059747

SNR (Signal to Noise Ratio):訊號雜訊比,簡稱訊雜比。

PSNR (Peak Signal to Noise Ratio):也是訊雜比,只是訊號部分的值通通改用該訊號度量的最大值。以訊號度量範圍為 0 到 255 當作例子來計算 PSNR 時,訊號部分均當成是其能夠度量的最大值,也就是 255,而不是原來的訊號。

代码实现(参考:http://cg2010studio.com/2014/12/10/opencv-snr-%E8%88%87-psnr/)

/**
Theme: SNR (Signal to Noise Ratio) & PSNR (Peak Signal to Noise Ratio)
compiler: Dev C++ 4.9.9.2
Library: OpenCV 2.0
Date: 103/12/10
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
#include <cv.h>
#include <highgui.h>
#include<iostream> using namespace std; int main(){
IplImage *src1= cvLoadImage("moon_o.BMP");
IplImage *src2= cvLoadImage("moon_m.BMP"); long long int sigma = ;
long long int squre = ;
double MSE = 0.0;
double SNR = 0.0;
double PSNR = 0.0;
int frameSize = src1->height*src1->width*;
int blue1=, blue2=;
int green1=, green2=;
int red1=, red2=; // width x height -> [height][width]
for(int i=;i<src1->height;i++){
for(int j=;j<src1->widthStep;j=j+){
blue1=(int)(uchar)src1->imageData[i*src1->widthStep+j];//Blue
green1=(int)(uchar)src1->imageData[i*src1->widthStep+j+];//Green
red1=(int)(uchar)src1->imageData[i*src1->widthStep+j+];//Red
blue2=(int)(uchar)src2->imageData[i*src2->widthStep+j];//Blue
green2=(int)(uchar)src2->imageData[i*src2->widthStep+j+];//Green
red2=(int)(uchar)src2->imageData[i*src2->widthStep+j+];//Red
sigma+=(blue1-blue2)*(blue1-blue2)+
(green1-green2)*(green1-green2)+
(red1-red2)*(red1-red2);
squre += blue1*blue1 + green1*green1 + red1*red1;
}
}
MSE=sigma/(double)frameSize;
PSNR=*log10(*/MSE);
SNR = *log10(squre/sigma); cout<<"sigma: "<<sigma<<endl;;
cout<<"MSE: "<<MSE<<endl;;
cout<<"PSNR: "<<PSNR<<endl;;
cout<<"SNR: "<<SNR<<endl;; system("pause");
cvWaitKey();
return EXIT_SUCCESS;
}

图像的 SNR 和 PSNR 的计算的更多相关文章

  1. 图像处理结果的度量 —— SNR、PSNR、SSIM

    衡量两幅图像的相似度: SNR/PSNR SSIM 1. SNR vs PSNR about SNR 和 PSNR MSE:mean squared error ∑x=1Nx∑y=1Ny(f(x,y) ...

  2. 机器学习进阶-直方图与傅里叶变换-傅里叶变换(高低通滤波) 1.cv2.dft(进行傅里叶变化) 2.np.fft.fftshift(将低频移动到图像的中心) 3.cv2.magnitude(计算矩阵的加和平方根) 4.np.fft.ifftshift(将低频和高频移动到原来位置) 5.cv2.idft(傅里叶逆变换)

    1. cv2.dft(img, cv2.DFT_COMPLEX_OUTPUT) 进行傅里叶变化 参数说明: img表示输入的图片, cv2.DFT_COMPLEX_OUTPUT表示进行傅里叶变化的方法 ...

  3. C# 图像快速转化成byte[]和计算像素值

    public static unsafe byte[] ConvertTo8Byte(Bitmap img) { byte[] result = new byte[img.Width * img.He ...

  4. opencv-9-图像噪声以及评估指标 PSNR 与SSIM

    开始之前 我们在将 opencv 的图像显示在了 qt 的label 上, 我们能够将图显示在label 上, 用于显示我们的算法, 我们在 opencv 上一篇文章中介绍了 opencv 的核操作, ...

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

    今天的作业是求两幅图像的MSE.SNR.PSNR.SSIM.代码如下: clc; close all; X = imread('q1.tif');% 读取图像 Y=imread('q2.tif'); ...

  6. 【OpenCV学习】计算两幅图像的重叠区域

    问题描述:已知两幅图像Image1和Image2,计算出两幅图像的重叠区域,并在Image1和Image2标识出重叠区域. 算法思想: 若两幅图像存在重叠区域,则进行图像匹配后,会得到一张完整的全景图 ...

  7. opencv8-GPU之相似性计算

    Opencv支持GPU计算,并且包含成一个gpu类用来方便调用,所以不需要去加上什么__global__什么的很方便,不过同时这个类还是有不足的,待opencv小组的更新和完善. 这里先介绍在之前的& ...

  8. OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)

    图像的几何变换是在不改变图像内容的前提下对图像像素的进行空间几何变换,主要包括了图像的平移变换.镜像变换.缩放和旋转等.本文首先介绍了图像几何变换的一些基本概念,然后再OpenCV2下实现了图像的平移 ...

  9. OpenCV2:等间隔采样和局部均值的图像缩小

    图像的缩小从物理意义上来说,就是将图像的每个像素的大小缩小相应的倍数.但是,改变像素的物理尺寸显然不是那么容易的,从数字图像处理的角度来看,图像的缩小实际就是通过减少像素个数来实现的.显而易见的,减少 ...

随机推荐

  1. 2001. Counting Sheep

      After a long night of coding, Charles Pearson Peterson is having trouble sleeping. This is not onl ...

  2. JavaScript基础学习篇

    1.alert消息弹出框 alert(字符串或变量); 消息对话框通常可以用于调试程序. 与document.write 相似. 2.确认:confirm消息对话框 confirm(弹出时要显示的文本 ...

  3. 【Oracle】多次提交造成性能慢及处理方法

    [问题背景] 2013-08-02 为某地市做了1个脚本用于帮客户账户添加一个新的账本.犯了一个很二的错,存储过程如下(SQL记录用户以后查询),一晚上只执行了190W数据 脚本如下 数据库中总共有5 ...

  4. NOI模拟赛Day3

    终于A题啦鼓掌~开心~ 开考看完题后,觉得第二题很好捏(傻叉上线 搞到十一点准备弃疗了然后突然发现我会做第一题 于是瞎码了码,就去准备饭票了... 好了,停止扯淡(就我一个我妹子每天不说话好难受QAQ ...

  5. 本地C代码中创建Java对象

    作者:唐老师,华清远见嵌入式学院讲师. 创建Java域的对象就是创建Java类的实例,再调用Java类的构造方法. 以Bitmap的构建为例,Bitmap中并没有Java对象创建的代码及外部能访问的构 ...

  6. Idea_Intellij Idea 12 生成serialVersionUID的方法

    默认情况下Intellij IDEA是关闭了继承了java.io.Serializable的类生成serialVersionUID的警告.如果需要ide提示生成serialVersionUID,那么需 ...

  7. EhCache WebCache 与 SpringMVC集成时 CacheManager冲突的问题

    转自:点击打开链接 http://www.cnblogs.com/daxin/p/3560989.html EhCache WebCache 与 SpringMVC集成时 CacheManager冲突 ...

  8. Scala命令设置JVM参数的规则

    Scala下设置JVM参数简单分析 Scala 启动shell脚本,简化后的scala REPL 启动命令大致如下所示: java -Xmx256M -Xms32M \-Xbootclasspath/ ...

  9. svn学习笔记(1)入门学习----安装及创建运行仓库

    学习及使用svn有一段时间了,但是以前学习的时候不怎么用,现在用只是简单的更新上传,又把基本理论忘了.为了以后自己看自己的笔记回忆,特此记录 svn学习博客:http://www.cnblogs.co ...

  10. 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结 转载

    基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...