2011-11-14 19 views
1

私は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()); 
} 

は範囲が右にありますか?

私はイメージを正規化しますが、何も変更しません。

私は他の方法を使うべきだと思いますか?

この値を変更すると、ビンの数が非常に重要であり、私は非常に異なる結果になることに気付きました。これを制御する方法はありますか?

よろしく

+2

私は卒業証書を希望し、ヒストグラムのビンを制御する方法を知らないと言うでしょう。私の助言は、まず一般的な画像処理と特にあなたの主題について学ぶことです非常に単純なプロジェクトを始め、owmヒストグラム関数を書く方法を学び、次に進む – Sam

答えて

1

私は、これは各色空間正直に言うと.... をあなたの特定の質問ではなく、あなたの、より一般的なものを答えていないことを実感互いに非常に異なっています。私の経験では、あなたのアルゴリズムで異なる色空間を使うのは、通常、有用な結果を得るためにアルゴリズムの仕組みを変更する必要があります。これの一例は、HSV空間において、Hチャネルが円形である、すなわちRGBの場合ではない100の値= 0である方法である。たとえば、YCbCrでは、イルミネーションに関係なく色を扱う場合、イルミネーションの強さが重要な1つのタイプのイメージや、反対のラウンドのイメージを扱う場合、YチャネルはCr adn Cbチャネルよりも強調/重要性が高いかもしれません力。

第2に、1つの色空間が他の色空間よりも悪いと言うとき、それぞれに不公平です。彼らはそれぞれ用途と限界を持っています。 スペースにリンクしている記事は「安定性」が主観的です。色空間を別の色空間よりも選択する理由はたくさんあります。

あなたの特定の質問についてYCbCrの範囲で...私は知らない申し訳ありません...私はこれに少し錆びています。 :)

+0

ありがとうございます。ヒストグラム間の距離を取得する際にいくつかの重みを使用しようとしました。しかし、私はHSV、Luv、YCrCbで悪い結果を得ています。私はRGBで行くつもりです。よろしく – mapetilan

関連する問題