Я делаю окончательный проект в области поиска изображений с использованием контента с использованием OpenCv. Я начал сравнивать гистограммы. Дело в том, что я видел много постов, в которых говорится, что RGB - худшее цветовое пространство для работы, и лучше использовать HSV или 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() );
}
Верны ли диапазоны?
Я нормализую изображение, но оно ничего не меняет.
Как вы думаете, я должен попытаться использовать другие методы?
Я также заметил, что количество бинов имеет большое значение, и если я изменю это значение, я получу очень разные результаты, есть ли способ контролировать это?
Привет