私はOpenCvを使ったコンテンツベースのイメージ検索で最終学位を取っています。ヒストグラムの比較を開始しました。事は、私は、RGBが動作する最悪の色空間であると言って、多くの投稿を見ているということです。it's better to use HSV or YCrCb。しかし、RGBと画像を比較すると、他の色空間を使用した場合よりも結果が常に優れています。コンテンツベースの画像検索のためのヒストグラム比較。
これは、YCrCb色のコードです:
void Histogram::calculateYCCHist(const cv::Mat3b& img_base, const cv::Mat1b& mask)
{
cv::Mat3f ycbcr;
cvtColor(Mat3f(img_base), ycbcr, CV_BGR2YCrCb);
int hist_size[] = {100, 100, 100};
float y_range[] = { 0, 1 }; // luma (Y) value have a nominal range from 0 to 1
float chr_range[] = { -0.5, 0.5 }; // chroma (CB and CR) values will have a nominal range from -0.5 to +0.5
const float* ranges_Y[] = {y_range};
const float* ranges_Cb[] = {chr_range};
const float* ranges_Cr[] = {chr_range};
int channel_y[] = {0};
int channel_cb[] = {1};
int channel_cr[] = {2};
// Compute histogram
calcHist(&ycbcr, 1, channel_y, mask, m_histogram_b, 1, hist_size, ranges_Y, true, false);
normalize(m_histogram_b, m_histogram_b, 0, m_histogram_b.rows, NORM_MINMAX, -1, Mat());
calcHist(&ycbcr, 1, channel_cb, mask, m_histogram_g, 1, hist_size, ranges_Cb, true, false);
normalize(m_histogram_g, m_histogram_g, 0, m_histogram_g.rows, NORM_MINMAX, -1, Mat());
calcHist(&ycbcr, 1, channel_cr, mask, m_histogram_r, 1, hist_size, ranges_Cr, true, false);
normalize(m_histogram_r, m_histogram_r, 0, m_histogram_r.rows, NORM_MINMAX, -1, Mat());
}
は範囲が右にありますか?
私はイメージを正規化しますが、何も変更しません。
私は他の方法を使うべきだと思いますか?
この値を変更すると、ビンの数が非常に重要であり、私は非常に異なる結果になることに気付きました。これを制御する方法はありますか?
よろしく
私は卒業証書を希望し、ヒストグラムのビンを制御する方法を知らないと言うでしょう。私の助言は、まず一般的な画像処理と特にあなたの主題について学ぶことです非常に単純なプロジェクトを始め、owmヒストグラム関数を書く方法を学び、次に進む – Sam