0

HaarDetectObject()関数を使用して目を検出すると、次のような結果(detectedObjects)が得られます。

[((110, 47, 44, 44), 11), ((27, 45, 54, 54), 31)] 
[((114, 49, 40, 40), 10), ((28, 50, 47, 47), 17)] 
[((31, 50, 47, 47), 18), ((106, 47, 44, 44), 3)] 
[((106, 46, 44, 44), 38), ((29, 53, 45, 45), 35), ((18, 30, 74, 74), 4)] 
[((98, 54, 36, 36), 7), ((108, 48, 45, 45), 31), ((26, 52, 49, 49), 49)] 
[((109, 46, 45, 45), 28), ((29, 50, 49, 49), 38)] 
[((109, 46, 44, 44), 29), ((27, 47, 53, 53), 27), ((123, 45, 48, 48), 3)] 
[((108, 46, 44, 44), 35), ((28, 50, 49, 49), 33)] 
[((109, 47, 45, 45), 34), ((28, 53, 47, 47), 35), ((126, 50, 44, 44), 3)] 
[((109, 47, 44, 44), 29), ((29, 47, 51, 51), 39)] 
[((106, 47, 42, 42), 49), ((27, 49, 49, 49), 30)] 
[((31, 54, 42, 42), 13), ((110, 46, 44, 44), 4), ((125, 46, 44, 44), 4), ((27, 35, 66, 66), 6)] 

等々

私が知っていることは:

(110、47、44、44)、11)、これはx、y、w、h 、?

x、yは、「目」で検出された「目」の左上隅の座標であり、w、hは、検出された目の領域を決定するための幅と高さであるため、cvRect形式になります。

ご覧のとおり、最後の検出には4つの目があります。したがって、完全に検出された目が2つあることをどのようにして知ることができますか?つまり、任意のiの目[i] [0] [0]を見ると、目が右か左かを知ることができます。ただし、ここでは、左目と右目が2つあり、eyes[0]とeyes[3]が左目、eyes[1]とeyes[2]が右目です。

そしてこれが私の質問です。右目と左目の両方で検出された2つの結果のうち1つだけを取得する必要がある場合、どうすればよいですか?

以前、eye[i][1]はある種のスコアとして使用できると思いました。しばらくインターネットにアクセスできなかったので、そう思いました。しかし、私がちょうど発見したように、それはいくつかの品質スコアではありません。

したがって、この場合、eyes [0] [1]は13、eyes [1] [1]は4、eyes [2] [1]は4、eyes[3][1]は6です。これをQと呼びましょう。

残りの検出では、他の検出のQが高く、通常は約40〜60であるというパターンが見られたため、その範囲内のQが最良の検出を示していると思いましたが、前に述べたように、そうではありません。

では、「eyes」のどの「eye」が最良の検出であるかをどのように判断するのですか?

4

1 に答える 1

0

以前の結果を使用して、各画像に存在する検出された目に対してより多くのポイントを与えることができると思います(ビデオを使用して作業していると仮定します)。

目の間の距離などのパラメータを使用して、最適なカップルを見つけることもできます。最後に、もう少し複雑なもの(頭と目の組み合わせの検出や背景の減算など)に移動して、自分のパターンを取得し、最適な一致する目の位置を検索することもできます。

この方法で4つの目が得られる場合は、画像を前処理して結果を強化するか、アルゴリズムをさらに複雑にして結果を除外する必要があります。

于 2012-03-02T08:25:08.513 に答える