【发布时间】:2014-12-23 21:31:08
【问题描述】:
我正在尝试在 MATLAB(特别是)中对图像中的对象进行形状分析。为此,我找到了边界像素。对于每个边界像素,我使用 8 邻域理论计算它的邻居。现在我正在计算一个点与其唯一一个邻居的切线(取决于我如何选择顺时针或其他方式)。如果每个像素恰好有两个邻居,我的算法就可以正常工作。对于this picture 中显示的形状(订购 9 X 15 像素)。
但是如果一个像素有两个以上的邻居,那么我的算法就会混淆。例如(订购 9 X 15 像素)中所示。
我想在顺时针或逆时针方向上取每个边界像素与其相邻像素的切线,如果您注意到第二张图像,这是有效的边界图像,如果我沿顺时针方向移动,那么红色像素的邻居将是顺时针方向的绿色和绿色的邻居将是“1”,“1”的邻居是“2”,但是我无法回到蓝色和棕色像素,我无法访问每个边界像素并将其与其相邻像素相切。
我已经学习了图形的节点访问算法,您可以在其中维护队列或堆栈,但是在这种情况下,我不仅想访问每个像素,而且还根据我所在的方向仅用右相邻像素对每个像素进行切线移动。
这是一个示例问题,类似问题可能会以其他方式发生,因此我正在尝试为其生成一些通用算法。我会感谢你的帮助。谢谢。
【问题讨论】:
-
您应该将计算视为发生在像素之间的边界上,而不是像素之间。那么就没有问题了。所以顺时针方向你会发现绿蓝通蓝红通红蓝通蓝棕,没有问题。
-
但是第二张图像是所有像素都是边界像素的有效图像。因此,在遍历像素时,请记住每个白色像素都是边界像素。
标签: algorithm matlab image-processing