OpenCV(和其他地方)中使用的Scharr-Filter中的值的说明

Men*_*ene 9 opencv image-processing

Scharrs论文中解释了Scharr -Filter .但是,第155页(pdf中的167)给出的值是[47 162 47] / 256.将其与推导过滤器相乘会产生:

在此输入图像描述

然而我发现使用的所有其他参考文献

在此输入图像描述

这与Scharr给出的大致相同,缩放了32倍.

现在我的猜测是范围可以更好地表示,但我很好奇是否有某个官方解释.

roc*_*cky 5

在找不到“专家”的情况下,让这个问题继续下去......

我相信值 [3, 10, 3] ... 而不是 [47 162 47] / 256 ... 仅用于速度。回想一下,该方法与系数值为 0、正/负 1 和 2 的Sobel 算子竞争。

尽管除法中的除数 256 或 512 是 2 的幂并且可以通过移位来执行,但这样做并乘以 47 或 162 将花费更多时间。然而,乘以 3 实际上可以在一些 RISC 架构(如 IBM POWER 系列)上通过单个移位和加法运算完成。那就是3x = (x << 1) + x。(在这些架构上,移位器和加法器是独立的单元,可以独立完成)。

博士论文使用更复杂、可能更精确的公式并不奇怪;它需要证明或证明某些东西,作者可能并不完全确定或不关心它是否与其他方法一起使用和实施。这篇论文的目的可能是拥有“完美的旋转对称性”。之后,当人们决定实施它时,我怀疑那个人使用了近似公式并放弃了一些完美的旋转对称性,以提高速度。正如我所说,那个人的目标是拥有一些具有竞争力的东西,但要为这种旋转的东西牺牲一点速度。

由于我猜你愿意做这件事,因为这是你的论文,我的建议是实现原始算法并针对 OpenCV Scharr 和 Sobel 代码对其进行基准测试。

试图获得“官方”答案的另一件事是:“使用‘来源’,卢克!”。该代码 在github所以检查出来,看看谁加入Scharr过滤器那里,与此人联系。我不会把这个人的名字放在这里,但我会说代码是2010-05-11添加的。