OpenCV:快速量化两个图像之间的差异

OpenCV: Quantifying the difference between two images quickly

本文关键字:图像 两个 之间 量化 OpenCV      更新时间:2023-10-16

我有两张图像,我想了解它们在逐个像素级别上的差异。我的基本想法是获取两个图像,应用 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;
      }
  }

您需要更好地阐明您的用例,以便查看可用的快捷方式。问问自己:你用差异做什么?你能忍受近似的差异吗?您只需要判断图像是否完全相同吗?

另外,您要优化的计算时间是多少?最坏的情况?平均?你能忍受计算时间的巨大差异吗?

例如,如果您只对测试精确相等性感兴趣,则在第一个差值处提前终止非常快,并且如果大多数图像彼此不同,则预期时间会很短。

如果预计重复部分很大,则随机像素采样可能是一种可行的方法,并且根据采样率,您可以量化误报和假阴的可能性。