6

OpenCV と SURF メソッドを使用して交通標識認識エンジンを実装しようとしています。私の問題は、ランダムな結果が得られることです (時には本当に正確な場合もあれば、明らかに間違っている場合もあります)。その理由を理解できません。比較を実装する方法は次のとおりです。

  • まず、画像の輪郭を検出します
  • 次に、各等高線で SURF を使用して、交通標識が内側にあるかどうか、およびどの交通標識かを調べます。

輪郭検出は完全にうまく機能します:ガウスぼかしとキャニーエッジを使用して、これに似た輪郭を見つけることができます:

ここに画像の説明を入力

次に、この輪郭に対応する画像を抽出し、この画像を次のような交通標識テンプレート画像と比較します。

ここに画像の説明を入力

ここに画像の説明を入力

cvExtractSURF は、輪郭画像の 189 個の記述子を返します。次に、naiveNearestNeighbor メソッドを使用して、輪郭画像と各テンプレート画像の類似点を見つけます。

ここに私の結果があります:

最初のテンプレートの6/189 (これは私が見つけようとしているものです)

2 番目のテンプレートの場合は92/189 (これは明らかに輪郭画像とはあらゆる点で大きく異なります)

これらの結果がよくわかりません…</p>

私が実行する手順のリストは次のとおりです。

  • 輪郭画像をグレースケールにする
  • テンプレート画像をグレースケールにする
  • 輪郭画像のヒストグラムを均等化する (cvEqualizeHist)
  • テンプレート画像のサイズを変更して、輪郭画像に一致させます
  • テンプレート画像をぼかします (cvSmooth)
  • 輪郭画像をぼかす (cvSmooth)
  • テンプレート画像で cvExtractSURF を実行します
  • 輪郭画像で cvExtractSURF を実行します
  • 輪郭画像の記述子ごとに、naiveNearestNeighbor を実行します
  • 「いい」点数を貯める

2 つの画像の類似性を評価するには、比率を使用します。

goog ポイント数 / 記述子の総数

PS: 詳細については、このチュートリアルに従いました: http://www.emgu.com/wiki/index.php/Traffic_Sign_Detection_in_CSharp

OpenCV の find_obj サンプルを使用して、C に適応させました。

4

2 に答える 2

6

SURF ディスクリプタは、テクスチャが豊富な画像を比較するのに適しています...交通標識には十分なテクスチャがないと思います。

記述子を抽出するとき、最初に「顕著な点」が特定されます。たとえば、両方の標識 (長方形と文字 P) の長方形のマークの角にある場合、それらのローカル プロパティが収集されます。同様に、長方形の角は、クローズアップ、ぼかし、グレースケールからどのように見えますか.

次に、これらの記述子は、文字 P からの四角形の角に一致します。それらはそれほど違いはありません... (形状情報を考慮していないため)。たぶん、Pの文字の角は、「立ち入り禁止」の標識の角に少し近いかもしれません. 無作為に。

もちろん、これはすべて憶測にすぎません... 理解する唯一の方法は、徹底的にデバッグすることです。記述子が見つかった小さな円で画像を表示してみてください (円のサイズは、ポイントが見つかった縮尺によって異なります)。または、両方のイメージを 1 つの IplImage に入れ、一致する記述子間に線を引きます。このようなもの:

http://www.flickr.com/photos/22191989@N00/268039276

これを修正するにはどうすればよいでしょうか...交通標識の外側の輪郭を検出するために使用するのと同じ形状一致方法を内側に使用するのはどうでしょうか? (たとえば、標識が見つかったら、P 字型のオブジェクトを探すことができます。)

于 2011-03-05T20:57:37.737 に答える
0

2 つの画像の類似性を評価するには、次の比率を使用します: goog ポイントの数 / 記述子の総数

記述子ベクトルに基づいてメトリックを使用する必要があり、ポイント間の空間情報を使用する必要があるのは悪いメトリックだと思います。

これは、SIFT のような機能が「同じポイント」だけに一致し、類似したポイントには一致しないためです。一致基準を変更することで微調整できる可能性があります。 0.6 類似度。

記述子の照合は 2 つのステップで構成されます。最初のステップは、David Lowe のシンプルだが強力なマッチング アルゴリズムに従います。より正確には、左の画像の記述子 A が右の画像の記述子と一致するかどうかを確認するために、まず、左の画像の記述子 A とすべての記述子 A の間のユークリッド距離 d(A, A') を計算します。 ' 右の画像。最も近い距離、たとえば d(A, A1') が 2 番目に近い距離、たとえば d(A, A2') の k 倍より小さい場合、A と A1' は一致していると見なされます。k=0.6 に設定します

k を変更できるかもしれませんが、誤検知が増えると思います。

于 2012-04-26T11:51:31.707 に答える