我有两张图片,我希望了解它们在逐像素级别上的差异程度。我的基本想法是拍摄两个图像,应用absdiff,然后在差异中移动每个像素,采用其标准,并将标准存储在另一个数组中。这种方法的问题在于它对我的应用来说太慢了。有没有人知道任何替代方案?
非常感谢,
希拉里
计算标准差异的代码:
uchar* row_pointer_image_difference;
double* row_pointer_normed_difference;
Vec3b bgrPixel;
double pixel_distance;
for (long int r = 0; r < rows; r++){
row_pointer_image_difference = image_difference.ptr<uchar>(r);
row_pointer_normed_difference = normed_difference.ptr<double>(r);
for (long int c = 0; c < columns; c++){
//calculate pixel distance
bgrPixel = row_pointer_image_difference[c];
pixel_distance = norm(bgrPixel);
row_pointer_normed_difference[c] = pixel_distance;
}
}
答案 0 :(得分:1)
您需要更好地澄清您的用例,以便查看可用的快捷方式。问问自己:你用什么来区别?你能忍受大致的差异吗?你只需要判断图像是否完全相同吗?
另外,您想要优化什么计算时间?最糟糕的情况?平均?你的计算时间差异很大吗?
例如,如果您只对测试精确相等感兴趣,则第一个差异的提前终止非常快,如果大多数图像彼此不同,则预期时间会很短。
如果重复的比例预计很大,随机像素采样可能是一种可行的方法,从采样率可以量化假阳性和阴性的可能性。