多角形のすべての線に対して(したがってy = min(y).. max(y))、l = min(x)とr = max(x)を得るようにしてください。左/右の勾配(deltax)を計算し、それを前の勾配と比較してください。それが変更された場合(ここでいくつかの許容差を使用してください)、あなたは四角形の隅に(またはその近くに)あります。低解像度のために勾配が正確になることはできませんが、大きな矩形と勾配がそれほど似ていない場合は、これはうまくいくはずです。
少なくとも、それはあなたの例に適しています:あなたはすでにコーナーのうちの2つを持っているので、
X0000000000X l = 0, r = 11
.00000000000 l = 1, r = 11, deltaxl = 1, deltaxr = 0
..X000000000 l = 2, r = 11, deltaxl = 1, deltaxr = 0
.....0000000 l = 5, r = 11, deltaxl = 3, deltaxr = 0
........0000 l = 8, r = 11, deltaxl = 3, deltaxr = 0
...........X l = 11, r = 11, deltaxl = 3, deltaxr = 0
あなたは、あなたがLとRのための2つの異なる値を取得する長方形の上部で始まります。左側の最初の3行はdeltax = 1になりますが、その後deltax = 3になるので、(3、3)に角があります。右側では何も変わらず、deltax = 0なので、最後にポイントを得るだけです。
ここでコーナーを「収集」していることに注意してください。最後に4つのコーナーがない場合は、スロープが似ています(または、三角形の画像があります) (より正確な)アルゴリズムを使用するか、エラーを返すだけです。矩形に4つ以上のコーナーや穴のような奇妙なものがある場合も同じです。何らかの画像検出が関係しているようですので、これらのケースが発生する可能性があります。
単純DELTAX =(X - lastx)する場合がある長方形の左側は、この例を参照して、良好に動作しません:時々DELTAXは時々1であり、0
xxxxxx
xxxxx deltax = 1 dy/dx = 1/1 = 1
xxxxx deltax = 0 dy/dx = 2/1 = 2
xxxx deltax = 1 dy/dx = 3/2 = 1.5
xxxx deltax = 0 dy/dx = 4/2 = 2
xxx deltax = 1 dy/dx = 5/3 = 1.66
であるが実際の点から左上/右の点(deltay/deltax)までの線の傾きを使用する方が良いでしょう。それを使用しても、許容範囲を守らなければならないでしょうが、新しい行ごとに値がより正確になります。
なぜあなたは仕事をしていませんか?実際の最大値と実際の最小値を見つける必要があります(実際に最大値と最小値を決める前にすべての点を調べることによって)が、ある時点であなたに伝えるデータの一部に頼らざるを得なくなります矩形はどのように見えますか? –
コーナーのポイント座標を持たずに、どのように矩形のシルエットを取得しましたか? – Stewbob
私は入力として画像を持っています、私は背景から興味深い部分を分離することができますスレッシュホールド機能を備えています。 – dutchflyboy