C ++:从未排序列表中的校准图片中查找相邻网格点

时间:2014-11-28 11:53:44

标签: c++ grid jquery-ui-sortable calibration neighbours

我有4个校准点的x和y坐标列表。那些是没有特定顺序并且没有在任何轴上分配(它们来自具有轻微旋转和失真的真实校准图片)但是列表具有相同的索引并且无法排序以这种方式,每个列表是升序/降序。它们也没有整数值但是浮点数。我现在正试图找到给定点的四个相邻点。

E.g。寻找点[150,150]的邻居会返回[140,140],[140,160],[160,140],[160,160](除了它们实际上更像是[139.581239,138.28812])。

目前,我必须查看每个点的所有校准点以进行检查。大约有500个校准点。

稍后在此过程中,我需要知道1600x1400网格内随机点的4个邻居数百万次。因此,尽可能快地找到这些点是至关重要的,以避免计算时间为几天甚至几周。

我的第一个方法是检查每个点的~500个校准点中的每一个以检查并查看它们与检查点的相对位置(x_calib> x和y_calib> y将位于顶部右侧区域的某个位置点)并计算它们的距离。然后,每个区域中的最近点(左上,右上,左下,右下)将是相应的邻居点。这看起来效率不高,需要花费很多时间。

第二种方法是为每个1600x1400点创建一个彩虹表并保存相应的邻居(确切地说,将索引保存在坐标列表中)。稍后,该过程将在位置[x,y,0],[x,y,1],[x,y,2]和[x,y,3]处检查此彩虹表以获得4个指数4个邻居点。虽然计算彩虹表需要一些时间(对于那些〜200万点,约需要20分钟),但这种方法可以加快后续处理。不幸的是,这种方法很难调试后续的流程步骤,因为在其余的工作开始之前需要花费很长时间。

我仍然认为应该有优化空间,我希望有任何建议或帮助来加快整个过程。我已经读过关于kd-tree的事情,但是没有看到在这里使用它的可能性。我希望有一种方法可以用于这种未分类(和不可分类)的点列表,这些点比彩虹表更有效 - 或者至少在创建表时更快。

提前致谢!

0 个答案:

没有答案