Algorithm 如何将这个不太直线的数据集拟合到直线网格

Algorithm 如何将这个不太直线的数据集拟合到直线网格,algorithm,dataset,Algorithm,Dataset,以这幅图像为例: 我可以(已经!)编写代码来定位每个lilypad(即那些红色方块,它们不在原始图像中) 对人类来说,这些单独的百合花垫形成了一个非常明显的12 x 12的正方形网格,让人类将这些垫分配到一个2D垫数组中是很简单的,在这一点上,我可以用它们做很多有趣的事情 但它们实际上并不在一个很好的网格中。它们不是直线,它们甚至不是均匀偏移的。 如何将焊盘(或等效地,每个正方形的左上角)安装到直线网格上。(或者查找现有算法所需的关键字是什么) 识别来源的额外90秒儿童积分;) 您可以选择第

以这幅图像为例:

我可以(已经!)编写代码来定位每个lilypad(即那些红色方块,它们不在原始图像中)

对人类来说,这些单独的百合花垫形成了一个非常明显的12 x 12的正方形网格,让人类将这些垫分配到一个2D垫数组中是很简单的,在这一点上,我可以用它们做很多有趣的事情

但它们实际上并不在一个很好的网格中。它们不是直线,它们甚至不是均匀偏移的。 如何将焊盘(或等效地,每个正方形的左上角)安装到直线网格上。(或者查找现有算法所需的关键字是什么)



识别来源的额外90秒儿童积分;)

您可以选择第一个正方形(任意一个),给它一个虚拟坐标
(0,0)
,然后将该正方形添加到队列中。然后在每一步中,从队列中弹出一个正方形,并尝试找到最佳的上/下/左/右邻居。例如,在查找上邻居时,我们可以最小化等于
|current.top-x.bottom |+| current.left-x.left |
的函数。然后,如果这个最佳邻居方块不在队列中,您可以使用新坐标
(current.x,current.y+1)
将其添加到队列中,依此类推。如果你得到了令人怀疑的大的最佳距离-你是在边缘,你不需要添加一个邻居


当队列为空时,您将获得所有具有相对(相对于选定的第一个正方形)坐标的正方形,并可以将它们转换为所需的网格坐标。

工作正常。谢谢