输入是一个序列,当我从一个区域中找到一个轮廓时,它就得到了。该序列由该区域周围的像素组成。
但是这个序列没有排序,因为我得到这个序列时使用了递归。如何对该序列进行排序?
输出应该是一个在同一点开始和结束并通过所有点的电路(如果必要,可以忽略几个点)。
如果区域是凸的,那么您所需要做的就是找到像素集的凸包。如果区域也可以是凹的,那么你就不可能解决这个问题——轮廓可以通过多种方式重建,并且每种方式的可能性都是一样的(除非提供进一步的信息)。
你说你的这些点代表了某个区域的轮廓。如果这是真的,你可以去寻找最近的邻居。
但单凭这一点可能会很慢,所以请确保实现一些启发式方法,以减少为了找到最近的邻居而需要计算的点之间的距离。
最简单的方法是将你的世界划分成类似网格的模式,然后首先尝试在与原点相同的网格单元中搜索可能的邻居。
如果到同一网格单元中所有点的距离大于从原点到最近单元边界的距离,也要检查共享同一边界的相邻网格单元中的点。
这种方法的最大优点是,它不在乎区域形状是凸的还是凹的。