图像的均方差和信噪比计算
- 一、均方差
- 1、公式
- 2、代码
- 二、信噪比
- 1、公式
- 2、代码
图像的均方差和信噪比公式及代码,代码基于opencv和C++实现。
一、均方差
均方误差,英文简称:MSE,英文全称:“Mean Square Error”。
衡量图像的相似度,值越小,表示图像越相似。
1、公式
I、J表示两幅图像。
2、代码
//均方差计算
double gGetMSE(Mat& srcImage, Mat& dstImage)
{
Mat src = dstImage;
Mat dst = srcImage;
int channels = dstImage.channels();
int rowsNumber = src.rows;
int colsNumber = src.cols * channels;
double sigma = 0.0;
double mse = 0.0;
for (int i = 0; i < rowsNumber; i++)
{
for (int j = 0; j < colsNumber; j++)
{
mse += (src.ptr<uchar>(i)[j] - dst.ptr<uchar>(i)[j]) * (src.ptr<uchar>(i)[j] - dst.ptr<uchar>(i)[j]);
}
}
mse = mse / (rowsNumber * colsNumber);
return mse;
}
二、信噪比
信号和噪声的比值,英文简称:SRN,英文全称:“Signal Noise Ratio”。
衡量信号中噪声的多少。
1、公式
f为原图,g为去噪后的图像
2、代码
//信噪比计算
double gGetSNR(Mat& srcImage, Mat& dstImage)
{
Mat src = dstImage;
Mat dst = srcImage;
int channels = dstImage.channels();
int rowsNumber = src.rows;
int colsNumber = src.cols * channels;
double sigma = 0.0;
double mse = 0.0;
double SNR = 0.0;
for (int i = 0; i < rowsNumber; i++)
{
for (int j = 0; j < colsNumber; j++)
{
sigma += (src.ptr<uchar>(i)[j]) * (src.ptr<uchar>(i)[j]);
mse += (src.ptr<uchar>(i)[j] - dst.ptr<uchar>(i)[j]) * (src.ptr<uchar>(i)[j] - dst.ptr<uchar>(i)[j]);
}
}
SNR = 10 * log10(sigma / mse);
return SNR;
}