两组坐标之间的线性偏移

9
我的问题如下: 为了我的工作,我需要将扫描的照片与已知星样本目录中的星区进行比较(我称之为主目录)。为此,我提取图像中物体的信息,如亮度和天空位置,并将其保存在表格中。然后我使用Python创建多项式拟合,以校准图像中星体的大小。这在一定精度范围内运行良好,但不幸的是,由于物体在照片上的坐标与主目录中的坐标存在微小偏移,因此效果不佳。

这里的绿色圆圈表示主目录中物体的位置(圆圈的中心)。您可以看到实际的星星总是位于主目录中物体的左上方。
我已经稍微研究了图像比较(即如何检测图像之间的移位),但现在有点迷茫,因为我实际上并没有比较图像,而是比较具有对象坐标的数组。另一个问题是(如图所示),主目录中存在一些在平板上不可见的对象,并且不是所有平板都具有相同的深度(这意味着有些显示更多的星星,而有些则不会)。
我想知道的是如何在Python中找到和纠正两个不同大小的坐标数组之间的线性移位的方法。不应该有旋转,因此只是在x和y方向上的移位。这些数组是正常的numpy recarrays。
3个回答

1
有几种可能的解决方案 注意 - 这些是高级指针,您需要进行一些工作才能将其转换为工作代码
原始解决方案(交叉相关)可以适应当前数据结构,并且应该有效
我相信在您的情况下 RANSAC 将更好 基本上意味着: 基于少量数据点创建模型(定义相关模型所需的最小数量),并使用完整数据集验证其正确性。
具体而言,如果您只考虑平移(而不是比例):
1.选择您的一个点 2.将其与目录中的随机点匹配[如果您对哪种平移更有可能有先验知识,则可以进行“有根据的猜测”] 3.此匹配为您提供了平移 4.验证该平移是否与其余点匹配 5.重复,直到找到好的匹配

1
我在这里假设照片和主目录中的对象不一定按相同顺序排列。考虑位置向量集A,表示照片中对象的位置向量,以及位置向量集B,表示主目录中对象的位置向量。您要寻找一个向量v,使得对于A中的每个a,a + v大致上等于B中的某个元素b。
对我来说,最明显的算法是对于每个a,对于每个b,让v = b - a。现在,对于A中的每个元素,检查是否存在与该元素+v足够接近(在您选择的某个距离e内)的B中的相应元素。一旦找到满足此条件的v,v就是您的移位。

1
我会略微修改@OphirYoktan的建议。您有这些圆形。我假设您知道半径,并且您有该半径值的原因。
不要随机选择点,而是筛选主目录中x,y在样本半径内的内容。然后计算出所有可能的主目录条目所需的向量数量。重复相同的步骤,然后收集向量的直方图。可能会重复出现少量向量,这些向量很可能是真正的翻译。(理想情况下,“小数”== 1。)

圆的半径是算法搜索半径,用于在我的主目录中查找目录和图像之间可能的匹配项。现在我提取了所有可能的匹配项,并按照您建议的计算它们之间的差异,看起来很有效。虽然直方图不完美,但在平滑处理后,我可以得到一个最大值,以便进行翻译。谢谢。 - Christoph Pohl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接