【问题标题】:How can I prove that this edge traversing algorithm works?我如何证明这种边缘遍历算法有效?
【发布时间】:2015-11-23 17:49:15
【问题描述】:

我遇到了一种算法,它可以找到图形的轮廓,但我无法证明它为什么有效,我有点理解它为什么有效,但我无法推导出我自己在那里使用的公式。

这是算法:

假设我们有一个二值图像(图形为黑色,背景为白色)。所有像素都存储在一个二进制矩阵中,1为白色,0为黑色。

0) 找到第一个黑色像素(例如,如果它是一个正方形,那么它位于左上角)。

1) 设置 Lx = x 和 Ly = y(第一个像素的坐标),并且 Rx = x - 1 和 Ry = y。还要保留 2 个常量 firstX = x 和 firstY = y(我们稍后会需要它们)。

2) 计算 Tx = Rx + Ly - Ry 和 Ty = Ry + Rx - Lx。

3) 执行以下循环:

do {
        if (m[Tx][Ty] == 0) {
            Lx = Tx;
            Ly = Ty;
            m2[Tx][Ty] = 0;
        } else {
            Rx = Tx;
            Ry = Ty;
        }
        if (Lx == Rx || Ly == Ry) {
            Tx = Rx + Ly - Ry;
            Ty = Ry + Rx - Lx;
        } else {
            Ty = (Ly + Ry - Lx + Rx) / 2;
            Tx = (Lx + Rx + Ly - Ry) / 2;
        }
    } while (Tx != firstX || Ty != firstY);

在上面的代码中,m是原始图像,m2是只包含轮廓的图像。

我试图想象它是如何工作的,这就是我得到的:

显然它正在做一些曲折的运动来获得边缘上的零点并确定轮廓。

所以,我的问题是,这是一个已知的算法吗?这些公式究竟是如何得出的:

Tx = Rx + Ly - Ry;
Ty = Ry + Rx - Lx;

Ty = (Ly + Ry - Lx + Rx) / 2;
Tx = (Lx + Rx + Ly - Ry) / 2;

?

【问题讨论】:

  • 有趣,我从未见过。我们可以参考吗?它可能类似于穿越迷宫的“右手在墙上”策略。经典方法在这里描述:imageprocessingplace.com/downloads_V3/root_downloads/tutorials/….
  • 我还没有仔细研究过,但是 Tx/Ty 公式肯定是基于点 L 和 R 在 T 的附近,并且用于计算另一个点邻域,例如查找下一个顺时针邻域或类似的邻域。
  • @YvesDaoust 不幸的是,我没有任何参考资料,这个算法是从别人那里得到的,从别人那里得到的,等等,但我会问他们是否有什么推论!非常感谢您的链接。

标签: algorithm image-processing matrix geometry computational-geometry


【解决方案1】:

提示

在整个执行过程中,R、L 和 T 是直接 8 个邻居(在 Moore 意义上)。

该算法根据 T 处的值重复将 T 分配给 R 和 L 之一,因此 L 始终位于黑色像素上,而 R 始终位于白色像素上。然后它通过围绕 R 旋转 RL 来重新计算 T。


暂时假设Rx=Ry=0;那么如果 L 是一个 4-neighbor,(Tx,Ty):=(Ly,-Lx),则旋转 90°;否则,(Tx,Ty):=((Lx+Ly)/2,((Ly-Lx)/2),旋转 45°。该规则如下图所示:


初始配置在图中左上角,L为第一个黑色像素。给定级数规则,很明显该算法将遵循一条链(8个连接像素的序列)。

其实对于R的一个位置,绕着它旋转L,直到找到一个黑色像素点;然后将 R 移动到该像素。这就是名为Radial Sweep 的过程。

我们可以将其改写为等价形式(在重命名R=BL=W,并将Rot定义为上面的轮换规则之后。)

B, W= B0, LeftOf(B0)
do
    while Rot(B, W) is White
        W= Rot(B, W)
    B= Rot(B, W)
while B != B0

还有待证明

  1. 链关闭(我们将回到起始像素),

  2. 它是一个blob的轮廓(链中的每个像素都有黑色和白色的邻居),

  3. 没有遗漏像素。

更准确地说,L 遵循内部轮廓,而 R 遵循外部轮廓(而 T 两者都做)。

【讨论】:

  • 如果你想完成证明事情,你应该查找“向量加法的多边形定律”(又名物理学中的“多边形力定律”)。但是,是的,我也意识到这些只是向量运算!
  • 证明需要对数字几何的一些主题有很好的理解,例如“Digital Topology, Azriel Rosenfeld, The American Mathematical Monthly, Vol. 86, No. 8. (Oct., 1979) ,第 621-630 页。” (第 2、3、5 节)
猜你喜欢
  • 2013-05-06
  • 1970-01-01
  • 2011-03-15
  • 2022-10-14
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多