cv :: absdiff()使用什么方法/算法?

时间:2017-01-20 09:08:49

标签: c++ opencv computer-vision

OpenCV的cv::absdiff(InputArray src1, InputArray src2, OutputArray dst)使用什么方法/算法?

对于1个频道Mat,是否会计算src1的每个小区/体素与src2的同一位置的体素之间的颜色距离?它是否计算强度差异或色差或其他?它是最坏情况,平均和最佳情况运行时O(N)(其中N是Mat中的体素数)?如何计算绝对差值?

就运行时复杂度而言,cv::canny()cv::absdiff()更慢还是更快?速度差异是否显着?

1 个答案:

答案 0 :(得分:4)

absdiff是矩阵上的简单操作。它计算每个通道的每个像素的差值的绝对值。

操作是:

// pseudocode
Mat src1, src2, dst; 
...
for each row : r
    for each column : c
        for each channel : ch
            dst(r,c,ch) = abs(src1(r,c,ch) - src2(r,c,ch))

您可以看到复杂度为O(N),其中N = rows * cols * channels,因为您必须扫描整个矩阵。这也是高度可优化的

canny改为算法lot of steps involved。 我不知道它的复杂性,但它至少是O(N),Nabsdiff大得多。

因此,cannyabsdiff慢得多,但这不是一个公平的比较。

OpenCV没有 voxel 的概念。