2016-08-02 8 views
3

opencvのハリスコーナー検出アルゴリズムを実行している画像から抽出された配列がnumpyで、類似する4点をソートしようとしています長方形。pythonで矩形を抽出する配列の(x、y)点を比較する方法

は、次の点の集合である:

numpy.array([[194, 438], 
    [495, 431], 
    [512, 519], 
    [490, 311], 
    [548, 28], 
    [407, 194], 
    [181, 698], 
    [169, 93], 
    [408, 99], 
    [221, 251], 
    [395, 692], 
    [574, 424], 
    [431, 785], 
    [538, 249], 
    [397, 615], 
    [306, 237]]) 

頂部と底部の点の間のどの平行線を比較するとともに、90のわずかな偏差内象限に角度のポイントを比較するための最良の方法であるもの左と右のポイントは、4つの可能な候補を返すことですか?

編集

有意な回転または歪みがないように画像を略矩形と整列されます。遠近法変換のための偏差余裕と±10度と考えることができると思います。

以下は、xとyの位置を持つプロットされた線のイメージです。所望のコーナーこれはおそらく最も効率的な方法ではない左上(169,93)であり、右上(408,99)、右下(395692)、及び左下(181698)

enter image description here
+0

は、画面の端に揃えられた矩形、または回転したり歪んだりする「正しい」四角形ですか? –

+1

これはまた、矩形「良さ」を定義する方法を正確に*明示しない限り、答えが得難くなるでしょう。平行度は90度よりも重要ですか? 1つの完全な90°の角度を持つ「長方形」と、2つの平凡な角度を持つ「長方形」よりも1つの非常に悪い角度がありますか?いくら? –

+1

余分な寸法をつぶしてmatplotlibの散布図を作成して、作業しているもののアイデアを得ないのはなぜですか? –

答えて

0

コーナーを見つけることについては行くが、私はそうのような4つの象限にポイントを分割する:その後、私は左上と右下のために、それぞれの角度に各セクションをグループ化

yThreshM = height/2 
xThreshM = width/2 

tl = dst[ ((dst[:,1]<yThreshM) & (dst[:,0]<xThreshM)) ] 
tr = dst[ ((dst[:,1]<yThreshM) & (dst[:,0]>xThreshM)) ] 
br = dst[ ((dst[:,1]>yThreshM) & (dst[:,0]>xThreshM)) ] 
bl = dst[ ((dst[:,1]>yThreshM) & (dst[:,0]<xThreshM)) ] 

tla = [bl, tl, tr] 
bra = [tr, br, bl] 

tlap = list(it.product(*tla)) 
brap = list(it.product(*bra)) 

その後私は垂直線の方向を計算し、rem所与の垂直方向の閾値内にないアイテムを含む。次に、角度を計算し、90度のしきい値+/-内にない項目を除外しました。

最後には、私がtlapbrapを反復処理の結果の反対側のエンドポイントは、ポイントの残りの部分を取得するとtlbrの点を確認するために、一致したことを確認しました。

関連する問題