我正在使用python测试OpenCV的PSNR实现,结果很奇怪。
我试图计算两个相同图像之间的PSNR:该值应该是错误的,因为MSE应该等于零。但是,结果等于361!有人可以向我解释为什么我们得到这样的结果吗?
import cv2
img1 = cv2.imread("image1.png")
img2 = cv2.imread("image1.png")
psnr = cv2.PSNR(img1,img2)
print(psnr)
PSNR的实现可以在here中找到。
最后两行是:
double diff = std::sqrt(norm(_src1, _src2, NORM_L2SQR)/(_src1.total()*_src1.channels()));
return 20*log10(R/(diff+DBL_EPSILON));
一个小值DBL_EPSILON
被添加到分母,以防止被零除。
#include <iostream>
#include <float.h> // For DBL_EPSILON
#include <math.h>
int main()
{
int R = 255; // default value
double diff = 0;
std::cout << 20*log10(R/(diff + DBL_EPSILON)) << std::endl;
}
C ++中的上述程序将打印361.201
的值,该值与在Python中打印的值相同。