如何将这个非常直线的数据集拟合到直线网格中

时间:2018-01-31 14:38:51

标签: algorithm dataset

考虑这张图片:

enter image description here

我可以(有!)编写代码来找到每个Lilypad(即原始图像中没有的那些红色方块)

对于人类而言,那些单独的百合垫形成一个非常明显的12 x 12方形网格,让一个人将这些垫分配到一个2D阵列的垫中是微不足道的,此时我可以做任何数量的与他们一起更有趣的事情。

但它们并不是一个很好的网格。它们不是直线的,它们甚至不能均匀地抵消。 如何将垫(或等效地,每个方块的左上角)安装到直线网格上。 (或者找到现有算法来执行此操作所需的关键字是什么)

奖励90s-kid-points以识别来源;)

1 个答案:

答案 0 :(得分:1)

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

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