2012-03-21 17 views
0

私はロゴを検出する必要があるアンドロイドプロジェクトを行っています(ロゴは異なるコントラスト、色相または彩度のものがあります)。これは、アンドロイド用のOpenCV-2.3.1のヒストグラム比較を使用しています。画像ロゴの比較

以下の手順は次のとおりです。

1)記憶された画像

private List<Integer> histSize; 
    private List<Float> ranges; 


    histSize.add(50); 
    histSize.add(60); 
    histSize.add(10); 

    ranges.add(0f); 
    ranges.add(256f); 

    ranges.add(0f); 
    ranges.add(180f); 

    ranges.add(0f); 
    ranges.add(256f); 

    channels.add(0); 
    channels.add(1); 
    channels.add(2); 


hsv_base1=new Mat(); 
Imgproc.cvtColor(image1,hsv_base1, Imgproc.COLOR_BGR2HSV); 
hsv_base.add(hsv_base1); 
Imgproc.calcHist(hsv_base, channels,new Mat(), hist_base, histSize, ranges,false); 

2のHIST値を計算) そしてiが毎フレーム撮影した画像をトリミングしています。トリミングされた画像のサイズは、格納された画像のサイズと全く同じであり、上記と同じ方法を使用してヒストグラム値を計算します。

3) 両画像

double base_test2 = Imgproc.compareHist(hist_base1,hist_baseCamera1,Imgproc.CV_COMP_CHISQR); 

の格納されたHIST値とを比較Iはcomparehistの良い値を取得します。しかしながら、問題はいつかは、あるランダムな捕捉画像に対して良好な値を与える、すなわち望ましくないことがある。

だから、ヒストグラムを比較して他の方法を使う予定です。私のロゴは丸で構成されています。

私の質問は次のとおりです。キャプチャされた画像が、保存されたロゴのサークルと正確に同じサイズの円で構成されていることがわかります。

他の方法を使用する必要がありますか、またはチャンネル、範囲、histSizeの値を保存して再生できますか?私は前にテンプレートマッチングを使用していた

、その非常に遅く、私はこの上の任意の光をいただければと思います

同じ大きさの画像のためにかなり難しいです。

答えて

0

他の方法もあります。実際に、ヒストグラムを比較することは、既に発見したように、非常にあいまいな方法の選択です。

A roughly created de- and re construction of a greylevel picture

を(写真の多数は、下の図に見られるように、同じヒストグラムを持つことができます)私はあなたが現在の色でロゴに取り組んでいることがわかりますが、単純なアプローチは、多くの場合、より良い結果につながります。だから、グレースケール画像で作業することができるかどうかを検討するべきです(これは、ロゴに色を付けることができないという意味ではなく、画像を処理する前に画像を分割する必要があるということを意味します)。よりシンプルなアプローチは、画像内のデータ量が少ないため、ランタイムが向上します。

セグメンテーションが完了していれば、画像をしきい値処理し、BLOB分析(バイナリラージオブジェクト)を実行できます。必要なアルゴリズムは、興味のある図形によって異なります。その方法と説明が見つかりますOpenCV documentationにあります。

私の推測では、matchShapes()関数がうまく機能すると思います。しかし、ヒストグラムを少し使って画像処理を理解する必要があります。

もちろんOpenCVのAndroidバージョン用のラッパーを見つける必要があります。

P.S.環境、プログラミング言語、プラットフォームをタグに含めることを忘れないでください。

+0

セグメンテーションはopenCvでセグメンテーションを実装したことはありませんが、これを試してみます。 – user1249358