我正在尝试在MATLAB(特别是)中对图像中的对象进行形状分析。为此,我找到了边界像素。对于每个边界像素,我使用8邻域理论计算它的邻居。现在我正在计算一个点到它的唯一一个邻居的切线(取决于我如何选择顺时针或其他方式)。如果每个像素恰好有两个邻居,我的算法工作正常。对于this picture中显示的形状(顺序为9 X 15像素)。
但如果一个像素的邻居超过2个,那么我的算法就会混淆。例如,如(9 x 15像素的顺序)。
我想用顺时针或逆时针方向的相邻像素取每个边界像素的切线,如果你注意到第二个图像,这是有效的边界图像,如果我在顺时针方向移动,那么红色像素的邻居将是顺时针方向的绿色和绿色邻居为“1”,“1”的邻居为“2”但是我不能回到蓝色和棕色像素,我无法访问并获取每个边界像素与其相邻像素的切线。
我已经学习了图形节点访问算法,你可以在其中维护队列或堆栈,但在这种情况下,我不仅要访问每个像素,还要根据我的方向采用每个像素的正切相邻像素移动。
这是一个示例问题,类似的问题可能以其他方式发生,所以我试图为它生成一些通用算法。我将感谢你的帮助。谢谢。
答案 0 :(得分:1)
就像btilly已经说过的那样。解决方案是找到像素之间的边界而不是像素自身。我建议你使用potrace算法的一部分。它是矢量化二进制图像的算法。有趣的部分是你的路径的解压缩。以下是Path decompisition的想法:
你可以在这里找到Potrace Algorithm。
其他算法来自本书"digital image processing an algorithmic introduction using enter link description here"中的Wilhelm Burge和Burger。在链接中,您可以看到本书的某些部分。 interisting部分是功能" TraceContour"在第538页,这个算法的工作方式就像你想象的那样,并且绕着内部"像素。在内部边界追踪时,我发现了Alorith here的一些诠释。您可以使用四个或八个neighboor连接来执行算法。