0

opencv の hog.cpp のガンマ補正のコードがわかりません。opencv hog.cpp のコードと一致しないいくつかのリンクをここで調べました。

Mat_<float> _lut(1, 256);

const float* lut = &_lut(0,0);

if( gammaCorrection )
    for( i = 0; i < 256; i++ )
        _lut(0,i) = std::sqrt((float)i);
else
    for( i = 0; i < 256; i++ )
        _lut(0,i) = (float)i;

コードから理解したのは、1x256 の 2 次元配列を作成することだけです。ガンマ補正が true の場合、データの平方根を計算します。このコードに関連するすべてのファイルをデバッグしようとしましたが、理解できませんでした。ここで何が起こっているのか、誰でも簡単に説明できますか。


事前に感謝します。

4

1 に答える 1

5

そこで行っていることは、ルックアップ テーブルを作成することだけです。入力データが文字であることはわかっているため、すべてのピクセルは 0 ~ 255 の値しか持てないため、ガンマ補正を行う場合は平方根を事前に計算します。これは、ピクセルごとのグラデーション計算の中で後で使用されます。その後、computeGradients() で、行ポインターを取得します。

const uchar* imgPtr  = img.data + img.step*ymap[y];

次にルックアップ テーブルにインデックスを付けて、[ -1 0 1 ] 勾配のピクセル値を取得します。

        for( x = 0; x < width; x++ )
        {
            int x1 = xmap[x];

            dbuf[x] = (float)(lut[imgPtr[xmap[x+1]]] - lut[imgPtr[xmap[x-1]]]);
            dbuf[width + x] = (float)(lut[nextPtr[x1]] - lut[prevPtr[x1]]);
        }
于 2013-05-17T15:12:51.210 に答える