图像的 SNR 和 PSNR 的计算
程序员文章站
2023-12-31 19:20:16
...
#include <cv.h>
#include <highgui.h>
#include<iostream>
using namespace std;
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[0] + s.val[1] + s.val[2]; // sum channels
if( sse <= 1e-10) // for small values return zero
return 0;
else
{
double mse =sse /(double)(I1.channels() * I1.total());
double psnr = 10.0*log10((255*255)/mse);
return psnr;
}
}
int main(){
IplImage *src1= cvLoadImage("001.jpg");
IplImage *src2= cvLoadImage("1.png");
long long int sigma = 0;
long long int squre = 0;
double MSE = 0.0;
double SNR = 0.0;
double PSNR = 0.0;
int frameSize = src1->height*src1->width*3;
int blue1=0, blue2=0;
int green1=0, green2=0;
int red1=0, red2=0;
// width x height -> [height][width]
for(int i=0;i<src1->height;i++){
for(int j=0;j<src1->widthStep;j=j+3){
blue1=(int)(uchar)src1->imageData[i*src1->widthStep+j];//Blue
green1=(int)(uchar)src1->imageData[i*src1->widthStep+j+1];//Green
red1=(int)(uchar)src1->imageData[i*src1->widthStep+j+2];//Red
blue2=(int)(uchar)src2->imageData[i*src2->widthStep+j];//Blue
green2=(int)(uchar)src2->imageData[i*src2->widthStep+j+1];//Green
red2=(int)(uchar)src2->imageData[i*src2->widthStep+j+2];//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=10*log10(255*255/MSE);
SNR = 10*log10(squre/sigma);
cout<<"sigma: "<<sigma<<endl;;
cout<<"MSE: "<<MSE<<endl;;
cout<<"PSNR: "<<PSNR<<endl;;
cout<<"SNR: "<<SNR<<endl;;
system("pause");
cvWaitKey(0);
return EXIT_SUCCESS;
}
推荐阅读
-
图像的 SNR 和 PSNR 的计算
-
验证torch中卷积和反卷积的计算
-
利用opencv提高图像分辨率和降低分辨率(双三次插值),并计算PSNR的值
-
求图纸形心的数据预处理与形心计算代码:输入多个矩形的坐标和长度宽度,计算它们的形心坐标
-
python使用range函数计算一组数和的方法
-
PHP计算指定日期所在周的开始和结束日期的方法,php日期
-
【碎片知识(1)· 计算机视觉基础】利用OpenCV实现图像的“Hello, world!”
-
计算机视觉之OpenCV中的图像处理2(18章-20章)
-
计算机视觉之OpenCV中的图像处理1(13章-17章)
-
PHP计算一年多少个星期和每周的开始和结束日期_PHP