2017-01-25 3 views
2

OpenCVのHoughcirles関数を使用してオブジェクトを検出しようとしましたが、すべての画像に対してより良いパラメータを得ることができませんでしたが、threasholdingを行うとサークルをフィルタリングできます。私が使用しているコードは、しきい値の後サークル検出:houghcriclesのパラメータ

int main() 
{ 
// Load an image 
src = imread("occupant/cam_000569.png"); 
threshold(src,binary,52,255,0); 
imwrite("binary.png",binary); 
canny(src,canny,50,200,3); 
houghcircles(canny,circles,CV_HOUGH_GRADIENT,1,src.gray.rows/8,7,24,28); 

ですが、私は下の画像を取得し、障害があっても含まれているが、オブジェクトが明らかである場合52のしきい値のために、私は他のすべての画像に対して同じことを見ることができました。

cannyおよびhoughcirclesのパラメータを使用した後のコードには、コードが記載されています。私は必要なオブジェクトを検出することができました。

しかし問題は、次の画像を使用して同じしきい値の値を適用することができますが、cannyとhoughcirclesに同じパラメータを使用すると、オブジェクトを検出できません。

私の質問は、どのようにhoughcircleのパラメータを選択するか、または別のOpenCV関数でオブジェクトを検出することは可能ですか?

答えて

1

この検出のより良い解決策は、MATLABのC++またはregionpropでブロブ検出を使用し、領域および円形度計算に基づいてフィルタを外すことです。

2

ここでの主な問題は照明だと思います。キャニーエッジ検出器を適用する前に、ヒストグラムイコライゼーションに続いてスムージングを試してください。あなたは、多くの画像を撮り、それらの大部分でうまくいくかのハフパラメータを推定する必要があります。検出率が100%になる値を見つけることは不可能です。

もう1つの方法は、HaarまたはLBP機能を使用して、認識したいオブジェクトのオブジェクト検出器を訓練することです。オブジェクトが円であれば、これはちょっと残酷に思えます。

+0

ありがとうございます。私は照明が一つの理由だと確信しています。しかし、私の主な問題は、harshCircleのパラメータ、特にパラメータ1とパラメータ2を閾値処理のために選ぶ方法です。 – Reddy2810

+0

@ Reddy2810このような場合にパラメータを選択する通常の方法は、特定のシーンからの多数の画像のソフトウェアをテストし、最良の結果をもたらすパラメータの組み合わせを選択する「経験的選択」です。 – Totoro

関連する問題