2017-02-19 12 views
0

画像から領域を抽出する必要があります(その画像を公開することはできません)。 Abid K Rahman's answer私はイメージを得ました Result Image 私は矩形を作るかもしれないが、最も近似した矩形を見つけることができなかった点を得ました。点集合からの近似矩形の検索

[[625, 389], [10, 385], [116, 184], [5, 35], [626, 26]] 

矩形の4つの点はすべて、4つの異なるコーナーにあると仮定できます。だから私は自分の場所に基づいてセットを4つの異なるグループに分けました。

[[[[41, 63]], [[613, 66]]], [[[227, 428], [25, 426], [39, 392]], [[612, 394]]]] 

しかし、私はさらに移動することはできません。私はおおよそ矩形を描く点を抽出したいと思います。 答えがPythonであれば良いでしょう。

+0

あなたはそれだけですか?あなたは[良い質問をする方法](http://stackoverflow.com/help/how-to-ask)を学んで[最小、完全、および検証可能]を作成することができます(http://stackoverflow.com/help/ mcve)の例です。そうすれば、私たちがあなたを助けやすくなります。 –

+0

@StephenRauch私は制約があります。私は少し更新しましたが。 –

+0

最適化の問題には制約が必要です。あなたは何も指定していません。アプリケーションが適切な矩形であると考えるものの説明を理解しようとすることをお勧めします。 –

答えて

0

私はコードrayryengを使ってこのコードを書いてこれを考え出しました。ここで

c = [[[] for x in range(2)] for y in range (2)] 
for xy in centroids: 
    x_i = xy[0]*2/col 
    y_i = xy[1]*2/row 
    c[y_i][x_i].append(np.array(xy)) 

combination = [] 
combination = np.array([ np.array([q1,q2,q3,q4]) for q1 in c[0][0] for q2 in c[0][1] for q3 in c[1][1] for q4 in c[1][0]]) 

if len(combination)>0 : 
    key = 0 
    property = [[ 0 for j in range(4)] for i in range(len(combination))] 
    for i in range(len(combination)): 
     q = combination[i] 
     d1,d2 = q[2]-q[0],q[1]-q[3] 
     d1_len,d2_len = np.sqrt(sum(d1**2)),np.sqrt(sum(d2**2)) 
     angle = math.degrees(math.acos(sum(d1*d2)/(d1_len*d2_len))) 
     if d1_len > d2_len: 
      r,extent = int(100*d1_len/d2_len),d2_len 
     else: 
      r,extent = int(100*d2_len/d1_len),d1_len 
     property[i] = [r,angle,extent,i] 
    property.sort(key = lambda x:x[0]) 
    key = property[0][3] 
    combination = combination[key] 

は私の問題でのポイントは、すべての4つのqaudrantsからする必要があるため、私は象限に分け、私が持っているポイントであり、重心。私は4つの点のすべての可能な組み合わせを作った。 私は対角線を見つけました。中心に角度を付けました。 対角線の長さ(最小から最大)、角度および最短対角線の長さの比率を含むリストを作成しました。 長方形の対角線の長さが等しいという性質を使用しました。これは今のところ非常に便利です。私は他のプロパティを使用する方法を知らないので、そのプロパティを保持しています。最終的な答えでは、私は最良の矩形を得ます(sqaureを作成する点がない場合、矩形のサイズについても気にしません)。

-1

最善のことはRECT定義さimcrop(I,rect);ある

RECTよう= [XMIN YMIN幅高さ]実施例[41,63]の最初の対におけるよう

、[613,66]

XMIN = 41

YMIN = 63

幅= 613から41

高さ= 66-63

+1

もう一度正解ではありません。もう一度質問をよく読んでください。矩形は、ポイントのセットを与えられて自動的に定義される必要があります。 – rayryeng

関連する問題