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

What methodology/algorithm does cv::absdiff() use?

本文关键字:什么 方法 算法 absdiff cv      更新时间:2023-10-16

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

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

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

>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是一种算法,涉及很多步骤。我不知道它的复杂性,但它至少是 O(N),N远大于 absdiff .

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


OpenCV没有体素的概念。