2017-03-17 6 views
1

私は2つの独立した座標リスト((x、y)の星の位置) 2つの一致点間の距離は両方のリストでほぼ同じになります)。 2つのリストにはほとんど同じ星が含まれていますが、それらのいくつかは異なる場合があります。2つの独立した画像座標リストを同じスケールであるが、ある回転とシフトを持つ座標グリッドと比較する

例えば、

list1 
2691 2968 
1772 1580 
4020 1479 
3836 1920 
2045 2591 
2202 1945 

list2 
1648 1807 
2568 3195 
3898 1705 
3712 2147 
2078 2171 
1921 2818 

あなたは上記の二つのリストを検討している場合、同じスターのペアがどのように1は、この種の達成ん、

(2691,2968) & (2568,3195) 
(1772,1580) & (1648,1807) 
(4020,1479) & (3898,1705) 
(3836,1920) & (3712,2147)  
(2045,2591) & (1921,2818)  
(2202,1945) & (2078,2171)  

ですマッチング?私が持っている一つのアイデアは、多くの三角形を作り、面積を比較することです。

私はこれを行うにはPythonが好きで、出力として、両方のリストに存在する星の位置の一致した配列だけが必要です。

答えて

1

まあ、私は最終的にそれを行う方法を見つけました。私はそれを最適化と呼ぶつもりはありません。

import numpy as np 
from itertools import permutations as mutate 

sigma_c = 1.5 
def reject_outliers(data, m=sigma_c): 
    return data[abs(data - np.mean(data)) < m * np.std(data)] 

list1 = np.genfromtxt("1.coo") 
list2 = np.genfromtxt("2.coo") 

x1,y1 = zip(*list1) 
x2,y2 = zip(*list2) 

compare_value = 10000**2 
for i, j in zip(mutate(x1), mutate(y1)): 
    diff = (np.array(x2)-np.array(i)) 
    stddev = np.std(reject_outliers(diff)) 
    if stddev <= compare_value: 
     compare_value = stddev 
     mutant_x1 = map(int,i) 
     mutant_y1 = map(int,j) 
     difference_array = map(int,diff) 


print(zip(mutant_x1, mutant_y1)) 
print(zip(map(int,x2), map(int,y2))) 
print("with difference array (X coo):") 
print(difference_array) 
関連する問題