【发布时间】:2011-12-29 02:03:10
【问题描述】:
我正在使用 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() );
}
范围是否正确?
我对图像进行了标准化,但它根本没有改变任何东西。
你认为我应该尝试使用其他方法吗?
我还注意到 bin 的数量非常重要,如果更改此值,我会得到非常不同的结果,有什么方法可以控制吗?
问候
【问题讨论】:
-
我会说你想要学位文凭并且不知道如何控制直方图中的 bin 很奇怪......我的建议是首先了解一般的图像处理,以及你的主题特别是,开始一个非常简单的项目,学习如何编写你的 owm 直方图函数,然后继续
标签: image-processing opencv histogram image-comparison cbir