1

次のように、ヒストグラムを計算するための 3 次元マトリックスを作成しました。

// Histogram of HSV image
int const hue_bins = 180; //
int const sat_bins = 256; //
int const val_bins = 4;   // Only four bins for V channel!
float const hue_range[2] = {0, 180};
float const sat_range[2] = {0, 256};
float const val_range[2] = {0, 256};
int const hsv_sizes[] = {hue_bins, sat_bins, val_bins};
cv::Mat1f m_tone_frequences(3, hsv_sizes, 0.);

それから私は使用しています

cv::calcHist
    ( &image, 1, channels, mask, histogram
    , num_channels, hsv_sizes, ranges);
...
cv::calcBackProject
    ( &image_f, 1, channels, histogram
    , backproject, hsv_sizes, 1.0);

正常に動作しているようです (コードは簡略化されています)。

ヒストグラムは単一の画像からサンプリングされるため、サンプリングの問題が発生する可能性があります (対象オブジェクトの色分布が狭い)。そこで、ガウス平滑化を「値」ヒストグラム平面に適用したいと思います。ヒストグラムの行を取得しようとしましたが、別の 3D マットが得られます:

cv::Mat1f hrow = histogram.row(0); 
// hrow.dims ==3 && hrow.rows == -1 && hrow.cols == -1

私はそれを処理することについての考えを持っていません。

このアクションは非常に簡単に実行できるはずなので、この問題を解決するのに途方に暮れています。

どんなアドバイスでも大歓迎です。

4

0 に答える 0