2

Viola Jones 検出器を実装しようとしています。分類器をトレーニングするのに十分な画像や時間がないため、これらの OpenCV を使用することにしました。

これまでのところ、全体haarcascade_frontface_alt.xmlをメモリ内の構造体にロードし、高速領域合計用の Integral Image を作成し、検出器の基本的なアルゴリズムを作成することができました。しかし、期待どおりに機能していません。

したがって、誰かが Viola Jones 検出器がどのように機能するかを知っていて、OpenCV がその構造をどのように使用するかを知っている場合は、私の仮定を確認または否定してください。

1、インテグラル イメージは、白の 0->1 の範囲の float 値で計算されます
2、すべてのフィーチャについて、長方形内の面積を取得し、重みを掛けて、すべての長方形と合計します
3、合計が > しきい値の場合、left_val が合計されますさらに、right_val が使用されていない場合
4、ステージ内のすべての分類子の合計が stage_threshold よりも大きい場合、顔である可能性があるため、次のステージに進みます。使用されていない場合、ブレーク
5、すべてのステージ、検出ウィンドウ、およびスケールについて繰り返します...

これまでのところ、顔を含むものを除いて、あらゆる種類の検出された領域を取得しています...

openCV カスケードの使用に関する私の仮定が間違っている場合は、助けてください。ありがとう。

4

1 に答える 1

1
  1. 整数イメージのデータ型として float と int のどちらを使用しても、算術オーバーフローを防ぐのに十分な大きさの値を格納できる限り問題ありません。値を正規化する必要はありません。正規化は、後で分類子の評価中に行われます (3 を参照)。

  2. はい

  3. sum * inverse_area < threshold * standard_deviation の場合、left_val はさらに合計されます... (以下を参照)。

  4. はい

  5. はい

Java で記述されたJViolaJonesや切り株ベースのカスケード用のjs-objectdetectなどの高レベルの OpenCV ポートを参照することをお勧めします。特に切り株ベースでないカスケード用のHaar.jsは両方とも JavaScript で記述されています。アルゴリズム。最適化された OpenCV C/C++ コードはやや読みにくいです。computeSat()detectSingleScale()

于 2012-09-05T04:29:14.763 に答える