【问题标题】:Finding best neighbour pixel寻找最佳邻居像素
【发布时间】:2014-12-23 21:31:08
【问题描述】:

我正在尝试在 MATLAB(特别是)中对图像中的对象进行形状分析。为此,我找到了边界像素。对于每个边界像素,我使用 8 邻域理论计算它的邻居。现在我正在计算一个点与其唯一一个邻居的切线(取决于我如何选择顺时针或其他方式)。如果每个像素恰好有两个邻居,我的算法就可以正常工作。对于this picture 中显示的形状(订购 9 X 15 像素)。

但是如果一个像素有两个以上的邻居,那么我的算法就会混淆。例如(订购 9 X 15 像素)中所示。

我想在顺时针或逆时针方向上取每个边界像素与其相邻像素的切线,如果您注意到第二张图像,这是有效的边界图像,如果我沿顺时针方向移动,那么红色像素的邻居将是顺时针方向的绿色和绿色的邻居将是“1”,“1”的邻居是“2”,但是我无法回到蓝色和棕色像素,我无法访问每个边界像素并将其与其相邻像素相切。

我已经学习了图形的节点访问算法,您可以在其中维护队列或堆栈,但是在这种情况下,我不仅想访问每个像素,而且还根据我所在的方向仅用右相邻像素对每个像素进行切线移动。

这是一个示例问题,类似问题可能会以其他方式发生,因此我正在尝试为其生成一些通用算法。我会感谢你的帮助。谢谢。

【问题讨论】:

  • 您应该将计算视为发生在像素之间的边界上,而不是像素之间。那么就没有问题了。所以顺时针方向你会发现绿蓝通蓝红通红蓝通蓝棕,没有问题。
  • 但是第二张图像是所有像素都是边界像素的有效图像。因此,在遍历像素时,请记住每个白色像素都是边界像素。

标签: algorithm matlab image-processing


【解决方案1】:

就像 btilly 已经说过的那样。解决方案是找到像素之间的边界,而不是像素自身。我向您推荐 potrace 算法的一部分。它是一种矢量化二值图像的算法。有趣的部分是对路径的分解。下面是Path分解的思路:

您可以在这里找到Potrace Algorithm。

另一种算法来自Wilhelm Burge 和Burger in the Book "digital image processing an algorithmic introduction using enter link description here"。在链接中,您可以看到本书的某些部分。 interisting 部分是第 538 页的“TraceContour”函数。该算法的工作方式与您的想法一样,并围绕“内部”像素走动。我在内部边界追踪中发现了 Alorith here 的一些解释。您可以使用四个或八个邻居连接来执行该算法。

【讨论】:

    猜你喜欢
    • 2020-11-08
    • 2023-03-10
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多