我的问题如下:
对于我的工作,我需要将扫描的照相印版的图像与印版所覆盖的天空的一般区域内的已知星星样本的目录进行比较(我将其称为主目录)。为此,我提取图像中对象的信息,如图像上的亮度和天空中的位置,并将其保存在表格中。然后我使用python创建一个多项式拟合,用于校准图像中星星的大小。 这很好地达到了一定的准确度,但遗憾的是不够好,因为物体在照相板和主目录中的坐标之间存在小的偏移。
此处绿色圆圈表示主目录中对象的位置(圆心)。如您所见,实际的恒星总是位于主目录中对象的左上角。
我在图像的比较中看了一点(即How to detect a shift between images),但我现在有点不知所措,因为我实际上并不比较图像而是数组与对象的坐标。这里的另一个问题是(正如您在图像中看到的),主目录中的对象在板上不可见,并且并非所有板都具有相同的深度(意味着一些显示比其他板更多的星)。
我想知道的是一种查找和纠正python中不同坐标大小的2个数组之间线性移位的方法。不应该有任何旋转,所以它只是x和y方向的变化。这些数组是正常的numpy重组。
答案 0 :(得分:1)
有几种可能的解决方案 注意 - 这些是高级指针,您需要做一些工作才能将其转换为工作代码
原始解决方案(互相关)可以适应当前的数据结构,并且应该可以正常工作
相信RANSAC会更好 基本上它意味着: 根据少量数据点(定义相关模型所需的最小数量)创建模型,并使用完整数据集验证其正确性。
具体而言,如果您只考虑翻译(而不是缩放):
答案 1 :(得分:1)
我假设这些物品在照片板和主目录中的顺序不一定相同。
考虑照片板中对象的位置矢量集A,以及主目录中对象的位置矢量集B.您正在寻找一个 v 的向量,这样对于A中的每个 a , a + v 大约是 b 中的一些元素。
对我来说最明显的算法是对每个 a 说,对于每个 b ,让 v = b < / strong> - a 。现在,对于A中的每个元素,检查B中是否存在与该元素+ v 足够接近(在您选择的距离e内)的对应元素。一旦找到符合此条件的 v , v 就是您的转变。
答案 2 :(得分:1)
我会略微改变@ OphirYoktan的建议。你有这些圈子。我假设您知道半径,并且您有半径值是有原因的。
不是随机选择点,而是在样本半径范围内过滤x,y的主目录。然后计算您需要为样本范围内的所有可能主目录条目计算的许多向量。重复做同样的事情,然后收集矢量的直方图。据推测,少数会反复出现,这些可能是真正的翻译。 (理想情况下,“小数字”== 1。)