我正在使用OpenCv在基於內容的圖像檢索中完成最終學位項目。我已經開始比較直方圖。事情是,我看到很多帖子說RGB是最差的色彩空間來操作,並且it's better to use HSV or YCrCb。但是,當我將圖像與RGB進行比較時,結果總是比使用其他色彩空間時更好。基於內容的圖像檢索的直方圖比較。不同的顏色空間(RGB,HSV等)
這是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