OpenCv를 사용하여 콘텐츠 기반 이미지 검색에서 최종 학위 과정을 진행하고 있습니다. 나는 히스토그램 비교를 시작했다. 문제는 RGB가 가장 나쁜 색 공간이고, it's better to use HSV or YCrCb이라는 많은 게시물을 보았다는 것입니다. 그러나 이미지를 RGB와 비교할 때 다른 색 공간을 사용할 때보 다 항상 결과가 더 좋습니다. 콘텐츠 기반 이미지 검색을위한 히스토그램 비교. 다른 색상 공간 (RGB, HSV 등)
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());
}
이 범위를 잘 작성 위치 :
이것은에 YCrCb 컬러 코드입니다?
이미지를 표준화하지만 아무 것도 변경하지 않습니다.
다른 방법을 사용해야한다고 생각하십니까?
또한이 값을 변경하면 빈의 수는 매우 중요하며 매우 다른 결과를 얻습니다.이를 제어 할 수있는 방법이 있습니까?
안부
학위 졸업장을 원하고 히스토그램에서 빈을 제어하는 방법을 알지 못한다고 말하고 싶습니다. 제 조언은 일반적으로 일반적으로 이미지 처리에 대해 배우는 것입니다. , 아주 간단한 프로젝트를 시작하고, owm 히스토그램 함수를 쓰는 방법을 배우고, 다음으로 진행하십시오. – Sam