6

OpenCVのhaarカスケードファイルでは、「左」と「右」の値は何ですか。これは「しきい値」の値をどのように参照しますか?ありがとう!

参考までに、ファイルの構造は次のとおりです。

<haarcascade_frontalface_alt type_id="opencv-haar-classifier">
  <size>20 20</size>
  <stages>
    <_>
      <!-- stage 0 -->
      <trees>
        <_>
          <!-- tree 0 -->
          <_>
            <!-- root node -->
            <feature>
              <rects>
                <_>3 7 14 4 -1.</_>
                <_>3 9 14 2 2.</_></rects>
              <tilted>0</tilted></feature>
            <threshold>4.0141958743333817e-003</threshold>
            <left_val>0.0337941907346249</left_val>
            <right_val>0.8378106951713562</right_val></_></_>
        <_>
4

4 に答える 4

2

「左」と「右」は、特定の形状のグラデーション値を指します。これらの特定の形状は、特に左の長方形と右の長方形ではありません。代わりに、特定の構成のセクションを参照するだけです(2つ以上ある場合は、複数のセクションがある場合もあります)。これを説明するのに役立つ図がDavidHaarの論文にあります。

これがASCII表現です(=は塗りつぶされ、-は塗りつぶされていません):

====    ==--   =--=
====    ==--   =--=
----    ==--   =--=
----    ==--   =--=

全体的に、命名は悪い慣習です。代わりに、「グラデーション上」、「グラデーション下」(2)、「グラデーション左」、「グラデーション右」(2)、「グラデーション左」、「グラデーション中央」、「グラデーション下」(3)、それぞれ。回転、エッジ、およびその他の形状には、セクションを一意に識別するための名前を付ける必要があります。

于 2009-06-23T17:14:28.193 に答える
2

OpenCV のソース コードでは、cvhaar.cppHaar カスケードがどのように機能するかについての洞察を得ることができます。残念ながら、これは本質的に解説ではなく、ドキュメントもあまり役に立ちません。これがどのように機能するかについての私の理解です。

この関数icvEvalHidHaarClassifier()では、単一の の機能の合計が計算されますCvHidHaarTreeNode

この合計がしきい値よりも小さい場合、「左」ノードがたどられ、プロセスが繰り返されます。それ以外の場合は、「正しい」ノードがたどられ、再び繰り返されます。これは、次のステートメントに反映されています。

idx = sum < t ? node->left : node->right;

「左」または「右」ノードが負の値の場合、ループは中断されます。この場合、この機能の合計は計算されなくなりますが、その機能のしきい値が分類子の結果として返されます。

あなたが言うように、「左」と「右」は機能の位置とは何の関係もないので、引用符で囲みました。代わりに、カスケードが「落ちる」方向を反映します。しきい値を下回ると、カスケードは左に下がり、しきい値を超えると、に下がります。

これらのノードの表現に戻りましょう。XML では、ノードの表現がインデックスではなく値として表示されます。

<left_val>0.0337941907346249</left_val>
<right_val>0.8378106951713562</right_val>

これらの番号は、実際には を使用して検索されるノードcvGetFileNodeByName()です。これが OpenCV 内でどのように機能するかは正確にはわかりませんが、少なくともカスケードがどのように機能するかについてよりよく理解していただければ幸いです。

于 2010-03-29T15:32:02.437 に答える
2

ポール、本当に?

left_val/right_val は次のように使用されると思います。

sum_stage += (sum_feature < feature_threshold*stddev)?(left_val):(right_val)
于 2011-11-13T17:24:42.427 に答える
0

私の理解では、元の記事はPaul Viola と Michael Jones によるBoosted Cascade of Simple Features を使用した Rapid Object Detectionです。Haar のような機能に基づいているため、この名前が付けられています。IEEEの Web サイトから入手することをお勧めします。(アカウントを持っていない場合は、Google Scholarで他のバージョンを確認してください。)

分類器については、 Haar 分類器を使用した顔の特徴の検出(Wilson、Fernandez)でも説明されています。ACM Web サイトまたはCSA Webサイトで見つけることができます。

于 2009-09-28T16:19:18.040 に答える