質問

っての実施を適 ヴィオラ-ジョーンズの顔検出アルゴリズム.その技術に依存して置subframeの24x24ピクセルの画像内の、その後を矩形の特徴の中での位置とサイズが可能です。

これらの特長で構成することが可能で、四つの矩.以下の例を示した。

Rectangle features

その請求項の網羅的な設定は以上180k(2):

このベース分解能の検出器は24x24の網羅的の矩形の特徴が非常に大き、180,000.ことに注意ハールベースの矩形 特徴はovercomplete.

以下の記述に明記はしておりませんの論文、その前提は自分:

  1. が2つの矩形の特徴は、2つの矩形の特徴は、1つの矩形の特徴です。これまでの観測に とを強調し、矩形、明示されていないの色や輝度のものを並べ替えができます。
  2. できませんので定義機能タイプAとして1×1ピクセルをクリックるにはいいと思うんだけど---少なくとも1x2(ピクセル単位)で作成します。また、タイプD以上の2x2ピクセルの、この規則を有しているのが特徴です。
  3. できませんので定義機能タイプAとして1x3ピクセルブロックとしてのピクセルできませんで仕切られ、を差し引いてからのものと同じような1x2の画素のブロック;この型は定義されていても幅.また、幅の機能タイプCき3で割り切れ、この規則を有しているのが特徴です。
  4. できませんの定義、特徴幅および/または高さが0になります。そのため、繰り返し処理を実行し xy 24マイナスのサイズの特徴です。

これらの想いを網羅的に設定:

const int frameSize = 24;
const int features = 5;
// All five feature types:
const int feature[features][2] = {{2,1}, {1,2}, {3,1}, {1,3}, {2,2}};

int count = 0;
// Each feature:
for (int i = 0; i < features; i++) {
    int sizeX = feature[i][0];
    int sizeY = feature[i][1];
    // Each position:
    for (int x = 0; x <= frameSize-sizeX; x++) {
        for (int y = 0; y <= frameSize-sizeY; y++) {
            // Each size fitting within the frameSize:
            for (int width = sizeX; width <= frameSize-x; width+=sizeX) {
                for (int height = sizeY; height <= frameSize-y; height+=sizeY) {
                    count++;
                }
            }
        }
    }
}

その結果、 162,336.

けんおおよその180,000"ヴィオラ&ジョーンズのドを前提#4の導入によるバグのコードです。この変更につラインをそれぞれる:

for (int width = 0; width < frameSize-x; width+=sizeX)
for (int height = 0; height < frameSize-y; height+=sizeY)

その結果、その 180,625.(なお、この効果的に防止のための特徴から来に触れる権利および/またはbottomのsubframe.)

もちろんの質問:しているのでミスを実装?はあるものなのかということであると考え機能表面のゼロ?るのは僕を見ることで、間違ったそうです。

役に立ちましたか?

解決

近づい、コードを見正しいっ;るのを見るとそうでもないように思えるかどうかは原著作者がoff-by-oneくなる場合もあります思うべきであるかOpenCVを実装しもう!

しかし、提案しやすいように理解しはじめた、 のための ループにより全てのサイズ、そしてループに所定のサイズ:

#include <stdio.h>
int main()
{
    int i, x, y, sizeX, sizeY, width, height, count, c;

    /* All five shape types */
    const int features = 5;
    const int feature[][2] = {{2,1}, {1,2}, {3,1}, {1,3}, {2,2}};
    const int frameSize = 24;

    count = 0;
    /* Each shape */
    for (i = 0; i < features; i++) {
        sizeX = feature[i][0];
        sizeY = feature[i][1];
        printf("%dx%d shapes:\n", sizeX, sizeY);

        /* each size (multiples of basic shapes) */
        for (width = sizeX; width <= frameSize; width+=sizeX) {
            for (height = sizeY; height <= frameSize; height+=sizeY) {
                printf("\tsize: %dx%d => ", width, height);
                c=count;

                /* each possible position given size */
                for (x = 0; x <= frameSize-width; x++) {
                    for (y = 0; y <= frameSize-height; y++) {
                        count++;
                    }
                }
                printf("count: %d\n", count-c);
            }
        }
    }
    printf("%d\n", count);

    return 0;
}

同じ結果として、前 162336


を検証し、これまでの試験の場合4x4ウを手動で確認すべての場合につきやすいカウントから1x2/2x1、1x3/3x1形状のみを90度回転):

2x1 shapes:
        size: 2x1 => count: 12
        size: 2x2 => count: 9
        size: 2x3 => count: 6
        size: 2x4 => count: 3
        size: 4x1 => count: 4
        size: 4x2 => count: 3
        size: 4x3 => count: 2
        size: 4x4 => count: 1
1x2 shapes:
        size: 1x2 => count: 12             +-----------------------+
        size: 1x4 => count: 4              |     |     |     |     |
        size: 2x2 => count: 9              |     |     |     |     |
        size: 2x4 => count: 3              +-----+-----+-----+-----+
        size: 3x2 => count: 6              |     |     |     |     |
        size: 3x4 => count: 2              |     |     |     |     |
        size: 4x2 => count: 3              +-----+-----+-----+-----+
        size: 4x4 => count: 1              |     |     |     |     |
3x1 shapes:                                |     |     |     |     |
        size: 3x1 => count: 8              +-----+-----+-----+-----+
        size: 3x2 => count: 6              |     |     |     |     |
        size: 3x3 => count: 4              |     |     |     |     |
        size: 3x4 => count: 2              +-----------------------+
1x3 shapes:
        size: 1x3 => count: 8                  Total Count = 136
        size: 2x3 => count: 6
        size: 3x3 => count: 4
        size: 4x3 => count: 2
2x2 shapes:
        size: 2x2 => count: 9
        size: 2x4 => count: 3
        size: 4x2 => count: 3
        size: 4x4 => count: 1

他のヒント

ます。がありますので混乱ヴィオラとジョーンズ'。

そのCVPR'01紙である"と明確に示

"具体的には、使用していま 種類の特徴です。の値 二矩形の特徴 較差とは、和の 画素内二つの矩形。地域のサイズが同じで、 形が横並びに 縦に隣接する(図1)。 三矩形の特徴 計算の和内外 矩形から減算された和 センターの矩形を描きます。最後に a 四つの矩形の特徴".

のIJCV'04論文では、厳密に同じことが言った。 いず、4つの特徴.でも不思議な縁で、記載のこの網羅的な機能セットは45396!とするものではありませんの最終バージョン。ここではないかと思い何の制約を追加したがちょうど朝の登校時間帯とかさなどのmin_width,min_height、幅/高さの比率です。

この両方の論文からダウンロード 彼のページ.

この全体の方は、お見積もりが付いてい

この拠点の解決の 検出器は24x24の網羅的に設定 の矩形の特徴は非常に大き 以上180,000.ことに注意 ハールベースの矩形 特徴はovercomplete.

"セットの矩形の特徴はovercomplete" "網羅的なセット"

で私のように設定し、期待している論文の作家による説のためにどのように淘汰され、検索スペースをより効果的な設定により、例えば、く些細な事例などの矩形がゼロの面積です。

編集:または、何らかの機械学習アルゴリズムの概要ヒントです。網羅的に設定がすべての可能性だけでなく、"リーズナブル"です。

保証はありませんが著者の論文が正しいにおいて前提条件との調査結果です。思えば前提#4は有効ですが、その後の状態に保つことを前提としてご理論。する以外の原著作者にあります。

かなり良いので、観察、その暗黙的にゼロ-パッドの24x24フレーム、"オーバーフロー"および使用を開始最初のピクセルさせていただくことが範囲外に、回転シフト、またはブルトン県立っ性を高めることが考えられますが一部の機能として"些細な機能"、そして廃棄していAdaBoost.

また、書いたPythonおよびMatlabバージョンのコードで試すことができ、コードの自分(やデバッグおよびフォロくんの後をこちらにな用し受けます。

Python:

frameSize = 24;
features = 5;
# All five feature types:
feature = [[2,1], [1,2], [3,1], [1,3], [2,2]]

count = 0;
# Each feature:
for i in range(features):
    sizeX = feature[i][0]
    sizeY = feature[i][1]
    # Each position:
    for x in range(frameSize-sizeX+1):
        for y in range(frameSize-sizeY+1):
            # Each size fitting within the frameSize:
            for width in range(sizeX,frameSize-x+1,sizeX):
                for height in range(sizeY,frameSize-y+1,sizeY):
                    count=count+1
print (count)

Matlab:

frameSize = 24;
features = 5;
% All five feature types:
feature = [[2,1]; [1,2]; [3,1]; [1,3]; [2,2]];

count = 0;
% Each feature:
for ii = 1:features
    sizeX = feature(ii,1);
    sizeY = feature(ii,2);
    % Each position:
    for x = 0:frameSize-sizeX
        for y = 0:frameSize-sizeY
            % Each size fitting within the frameSize:
            for width = sizeX:sizeX:frameSize-x
                for height = sizeY:sizeY:frameSize-y
                    count=count+1;
                end
            end
        end
    end
end

display(count)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top