cv::absdiff() 使用什么 methodology/algorithm?
What methodology/algorithm does cv::absdiff() use?
OpenCV 的 cv::absdiff(InputArray src1, InputArray src2, OutputArray dst)
使用什么 methodology/algorithm?
对于 1 通道 Mat
它是否计算 src1
的每个 cell/voxel 与 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 instead is an algorithm, with a lot of steps involved。
我不知道它的复杂性,但它至少是 O(N),N
比 absdiff
.
大得多
所以,canny
比 absdiff
慢很多,但这不是一个公平的比较。
OpenCV没有voxel的概念。
OpenCV 的 cv::absdiff(InputArray src1, InputArray src2, OutputArray dst)
使用什么 methodology/algorithm?
对于 1 通道 Mat
它是否计算 src1
的每个 cell/voxel 与 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 instead is an algorithm, with a lot of steps involved。
我不知道它的复杂性,但它至少是 O(N),N
比 absdiff
.
所以,canny
比 absdiff
慢很多,但这不是一个公平的比较。
OpenCV没有voxel的概念。