Python 两组坐标之间的线性偏移

Python 两组坐标之间的线性偏移,python,numpy,computer-vision,astronomy,Python,Numpy,Computer Vision,Astronomy,我的问题如下: 在我的工作中,我需要将扫描的照相底片的图像与底片覆盖的天空一般区域内已知恒星样本的目录(我称之为主目录)进行比较。为此,我提取图像中对象的信息,如图像上的亮度和在天空中的位置,并将其保存在表格中。然后,我使用python创建一个多项式,用于校准图像中恒星的大小。 这相当好地达到了一定的精度,但不幸的是还不够好,因为物体在照相底片和主目录中的坐标之间有一个小的偏移 这里的绿色圆圈表示主目录中对象的位置(圆心)。正如你所看到的,实际的恒星总是位于主目录中物体的左上角 我看了一点图像

我的问题如下:

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

这里的绿色圆圈表示主目录中对象的位置(圆心)。正如你所看到的,实际的恒星总是位于主目录中物体的左上角

我看了一点图像的比较(也就是说),但我现在有点不知所措,因为我实际上并没有比较图像,而是比较数组和对象的坐标。这里的另一个问题是(如图所示),主目录中有一些物体在板块上看不到,并且并非所有板块都有相同的深度(意味着一些板块比其他板块显示更多的恒星)


我想知道的是一种在python中查找和更正两个坐标大小不同的数组之间的线性移位的方法。不应该有任何旋转,所以它只是在x和y方向上的移动。这些阵列是正常的numpy重新阵列。

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

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

A我相信你的情况会更好 基本上是指: 基于少量数据点(定义相关模型所需的最小数量)创建模型,并使用完整数据集验证其正确性

具体地说,如果你只考虑翻译(而不是刻度):

  • 选择一个点
  • 将其与目录中的一个随机点进行匹配[如果你事先知道什么样的翻译更有可能,你可以进行“有根据的猜测]
  • 此匹配将为您提供翻译
  • 验证此转换是否与您的其他点匹配
  • 重复以上步骤,直到找到合适的匹配项

  • 我在这里假设,在照片板和主目录中,物体的顺序不一定相同

    考虑照相底片中对象的位置向量集A和主目录中对象的位置向量集B。你在寻找一个向量,v,这样对于a中的每个aa+v大约是b中的某个元素


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

    我会稍微改变@Ophryoktan的建议。你有这些圆圈。我假设你知道半径,你有这个半径值是有原因的


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

    圆的半径是算法的搜索半径,该算法通过查看我的主目录来查找目录和图像之间可能的匹配。因此,我现在提取了所有可能的匹配项,并按照您的建议计算了它们之间的差异,这似乎有效。直方图不是完美的,但在平滑它们之后,我得到了一个最大值,我可以用它来获得翻译。谢谢