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

时间:2013-11-17 17:44:01

标签: c++ opencv image-processing

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

1 个答案:

答案 0 :(得分:1)

您需要更好地澄清您的用例,以便查看可用的快捷方式。问问自己:你用什么来区别?你能忍受大致的差异吗?你只需要判断图像是否完全相同吗?

另外,您想要优化什么计算时间?最糟糕的情况?平均?你的计算时间差异很大吗?

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

如果重复的比例预计很大,随机像素采样可能是一种可行的方法,从采样率可以量化假阳性和阴性的可能性。