カラー画像で楕円形の上部を含む領域を検出しようとしています。
ここに私が描いたいくつかの例があります:
http://i.imgur.com/fh6udfL.jpg
http://i.imgur.com/3qLBrVn.jpg
これをどのように達成しますか?画像処理は未経験ですが、読んで学んでいきたいです。私は主に C++ で OpenCV を使用していますが、他のライブラリも使用できます。
カラー画像で楕円形の上部を含む領域を検出しようとしています。
ここに私が描いたいくつかの例があります:
http://i.imgur.com/fh6udfL.jpg
http://i.imgur.com/3qLBrVn.jpg
これをどのように達成しますか?画像処理は未経験ですが、読んで学んでいきたいです。私は主に C++ で OpenCV を使用していますが、他のライブラリも使用できます。
一般的に、あなたが尋ねることは一種の大きな問題です。現実世界の画像では、すべての楕円形を見つけて、どれが上にあるのかを区別する必要があります (どの角度まで許容して上を考慮するか)。次に、それらの形状を非常にうまく分割して、上部が楕円形のオブジェクトである領域を見つける必要があります。
ただし、例のように単純な画像を見つける必要があるが、より一般的なアプローチが必要な場合は、最初に任意のエッジ検出 (Canny など) を使用してエッジを取得できます。次に、曲線と楕円にハフ変換を使用します。しかし、そのための関数やライブラリはないと思います。そのため、独自のハフ変換を実装する必要がある場合があります。そのためには、楕円形のトップが何を意味するのかを正確に決定する必要があります。2 つの画像について、楕円形の上部が正常に見つかった場合は、その下の領域を取得します。しかし、より一般的なものにするために、より洗練されたアプローチでその下の形状をセグメント化することをお勧めします。
ハフ変換の場合。http://en.wikipedia.org/wiki/Hough_transform#Circle_Detection_Process および楕円で使用する場合http://en.wikipedia.org/wiki/Randomized_Hough_transform
実はopencvで円を検出する機能があります。
低い parameter2 でハフ変換を使用します。これは、与えられた頂点のみで円を検出する必要があるためです。
別の方法はそのままである必要があります。
1- ローパス フィルター (ガウスぼかし、opencv doc 内を検索)
2- カラー フィルター - オプション (わかっている場合はオブジェクトの色を使用します。それ以外の場合は、pixel(image.width/2 , 0) から色を取得してみてください)
3-キャニーエッジ検出(これもドキュメントを参照)
4-輪郭を見つける(これもドキュメントを参照してください)
5-できれば大きな領域を持ち、ピクセル(image.width/2、0)を含む輪郭がある場合-ここでpointPolygonTestを使用します-下部にブロブがあります。
6-このブロブが「楕円形」であるかどうかを検出することは大きな問題です。ただし、「卵形」のプロパティを使用してフィルタリングを行うことができます。
円のハフ変換よりも単純なアプローチをお勧めします。上の画像から、楕円の色が均一であるのに対し、画像の残りの部分は均一でないことがわかります。