2组坐标之间的线性平移

Linear shift between 2 sets of coordinates

我的问题如下:

对于我的工作,我需要将扫描的摄影底片的图像与底片覆盖的一般天空区域内已知恒星样本的目录(我称之为主目录)进行比较。为此,我提取图像中物体的信息,例如图像的亮度和天空中的位置,并将其保存在表格中。然后我使用 python 创建一个多项式拟合来校准图像中恒星的星等。 这在一定程度上可以很好地工作,但不幸的是还不够好,因为物体在照相底片和主目录中的坐标之间存在微小的偏移。

这里的绿色圆圈表示对象在主目录中的位置(圆心)。如您所见,实际的星星始终位于主目录中对象的左上角。

之前看过一些图片的对比(即How to detect a shift between images),但是现在有点不知所措,因为我其实不是在对比图片,而是对比坐标数组对象。这里的另一个问题是(如您在图像中看到的那样)主目录中的某些对象在印版上不可见,而且并非所有印版都具有相同的深度(这意味着有些印版显示的星星比其他印版更多)。

我想知道的是找到并纠正 python 中两个不同坐标大小的数组之间的线性偏移的方法。不应该有任何旋转,所以它只是 x 和 y 方向的移动。这些数组是普通的 numpy 重载数组。

有几种可能的解决方案 注意 - 这些是高级指针,您需要一些工作才能将其转换为工作代码

原始解决方案(互相关)可以适应当前的数据结构,并且应该有效

我相信 RANSAC 会更好 基本上这意味着: 基于少量数据点(定义相关模型所需的最少数量)创建模型,并使用完整数据集验证其正确性。

具体来说,如果您只考虑翻译(而不考虑比例):

  1. select你的观点之一
  2. 将它匹配到目录中的随机点[你可以这样做 "educated guesses",如果你事先知道哪种翻译更有可能]
  3. 这个匹配给你翻译
  4. 验证此翻译是否符合您的其他要点
  5. 重复直到找到合适的匹配项

我假设照片板和主目录中的对象不一定按相同顺序排列。

考虑照片板中对象的位置向量集 A 和主目录中对象的位置向量集 B。您正在寻找一个向量 v,这样对于 A 中的每个 aa + v 大约是 b.

中的某个元素

对我来说最明显的算法是说对于每个 a,对于每个 b,让 v = b - a。现在,对于 A 中的每个元素,检查 B 中是否有一个对应元素足够接近(在您选择的距离 e 内)该元素 + v。一旦你找到满足这个条件的vv就是你的shift。

我会稍微更改@OphirYoktan 的建议。你有这些圈子。我假设您知道半径,并且您拥有该半径值是有原因的。

不要随机选择点,而是在主目录中过滤样本半径内的 x,y。然后计算您需要为样本范围内所有可能的主目录条目计算的向量。重复做同样的事情,然后收集向量的直方图。大概有一小部分会重复出现,这些是可能的真实翻译。 (理想情况下,"small number" == 1。)