- ベストアンサー
エッジの2値画像から閉じている四角形を探す
エッジの情報の2値画像があります。閉じている四角形を探して、さらに各頂点の座標を調べる方法を考えています。 いったんラベリングしてから同じラベルの画素の隣接を追跡して最初の地点に戻ってきたら閉じているみたいな方法でやろうかなと考えています。 もっとよい方法をご存知でしたら参考図書やURL、論文なんかを教えてもらえるとうれしいです。 頂点を探す方法は見当もつかないので、ヒントとなることを何でも教えていただけないでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エッジ画像と輪郭を区別して下さい。 輪郭とは、周囲の白領域とエッジの黒部分との境界で、時計回り(または反時計回り)に一周することができます。エッジ画像は境界付近に複数の黒画素があって、どこが真の境界か判然としません。言ってみれば、輪郭は1次元の画素系列で、エッジ画像は単なる2次元画像です。 エッジ画像(でなくても元の2値画像)があれば、その輪郭を追跡するアルゴリズムはあります。恐らく詳細を書いた公開文献はなく、メーカーなどのノーハウでしょう。 輪郭画素を時計回り(反時計回り)に追跡して輪郭点系列ができれば、輪郭を一周し、各点Xについて前方向に3戻った点Aと後方向に3行った点B(3でなくて5だって構いません)をもとめ、AXを結ぶ線分、XBを結ぶ線分を作り、二つの線分のなす角度が90°に近ければ頂点となります(実際には、さらに修正が必要です)。
その他の回答 (2)
- tatsumi01
- ベストアンサー率30% (976/3185)
No. 1 ですが、前のコメントが言葉足らずでした。 エッジ画像は2次元画像です。輪郭と見たところは同じですが、画素相互の関係がないところが違います。エッジ画像そのままではその上を一周することができません。 輪郭は座標系列のリストで、いわば1次元情報です。輪郭の上の画素には順番がついているので一周することができます。 エッジ画像の上を一周するように工夫することはできますが、結局それは輪郭抽出していることになります。
- tatsumi01
- ベストアンサー率30% (976/3185)
No. 1 ですが、輪郭を求めるアルゴリズムを簡単に書いておきます。 (0)対象画像を左上から右に向かって走査し、最初にぶつかる黒画素をスタート画素Sとします(ある走査線が全部白画素だったら次の走査線に移る)。Sの座標を記録します。 (1)Sの回りには8画素ありますが、左の画素(白の筈)から始めて時計回りに一周し、黒画素を探します。見つからなければ孤立点です。 (2)見つかった黒画素の座標を記録します (3)その画素をSとして(1)と同じことをします。ただし、周辺8画素の中の開始点は左ではなく、前の一周での最後の白画素からです。 (4)最初のSと同じ座標に戻れば終わり。 このアルゴリズムにはいろいろな変種が考えられます。 なお、このアルゴリズムで求められる輪郭は1個です。2個以上の輪郭を探したいならいろいろな工夫が必要です。 輪郭追跡のプログラムはバグが出やすいので頑張って下さい。 輪郭が求まったあと、頂点を探す方法はいろいろ考えられますが、とりあえず No. 1 で書いた方法が良いでしょう。
お礼
回答ありがとうございます。 質問でエッジと書いていたのは、輝度をあらかじめ2値化したもののエッジなのでtatsumi01さんのおっしゃられる輪郭というものに当てはまりますね。 輪郭というキーワードは、調べていなかったのであたらしいヒントになりました。ありがとうございます