Sobel算子的阶数是什么?

3

OpenCV文档中指出,(order == 0) 表示该方向不会应用导数,即不会对该核进行任何计算。

(Order == 1) 表示仅对该方向进行图像和核的简单卷积。

但是(order == 2) 是什么意思?它如何影响计算?

我正在实现自己编写的Sobel算子,对于order == 1,它效果很好,但我无法得到类似于OpenCV的二阶Sobel算子的结果,称为cv:: Sobel(src, dest, 0, 2, 0)。


对不起,我没明白你的问题。你是想了解二阶导数的结果吗?还是想知道它是如何工作的? - Abid Rahman K
我猜是第二个。我想知道,如何区分order=1计算和order=2计算。对于order=1,我们只需将每个像素应用的核的总和作为新像素亮度(假设我们正在使用灰度)即可。那么order=2有什么主要区别吗? - Roman Nazarenko
你尝试应用两次是因为当我使用order=1的sobel算子两次时,得到的结果与使用order=2的sobel算子相同... - Abid Rahman K
1个回答

2
是的。一阶导数估计特定方向上的变化率。 二阶导数估计二阶导数(强度变化率的变化率)。 等等。
想象一下位置(强度)、速度(阶数=1)、加速度(阶数=2)、急停(加速度的变化率-阶数3)
通常高阶导数并不太有用,特别是由于图像离散化和图像操作通常使用的有限大小模板。
应用Sobel一阶两次理论上应该给出二阶Sobel,但在实践中,由于图像和Sobel算子的离散化,这并不正确。

谢谢您让我明白了。但是我仍然需要Sobel二阶实现,如果双应用程序确实不起作用,那么该怎么办呢?发现OpenCV在阶数不小于内核大小时会抛出错误,它们之间有什么关系? - Roman Nazarenko
从理论上讲,这是不可能确定的。例如,要找到强度变化的速率,您至少需要2个像素。如果只有一个像素,那么找到单个像素的强度率是什么意思?如果您的模板只有一个像素,则所有内容都将为零。同样,如果没有至少3个大小的模板,则无法在理论上估计点处的加速度(除了估计所有零)。 - Boyko Perfanov
当我们将Sobel算子看作导数时(它确实是一个导数),这个问题就变得非常清晰易懂了,因为它的本质就是导数。 - Roman Nazarenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接