2011-11-14 3 views
1

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 컬러 코드입니다?

이미지를 표준화하지만 아무 것도 변경하지 않습니다.

다른 방법을 사용해야한다고 생각하십니까?

또한이 값을 변경하면 빈의 수는 매우 중요하며 매우 다른 결과를 얻습니다.이를 제어 할 수있는 방법이 있습니까?

안부

+2

학위 졸업장을 원하고 히스토그램에서 빈을 제어하는 ​​방법을 알지 못한다고 말하고 싶습니다. 제 조언은 일반적으로 일반적으로 이미지 처리에 대해 배우는 것입니다. , 아주 간단한 프로젝트를 시작하고, owm 히스토그램 함수를 쓰는 방법을 배우고, 다음으로 진행하십시오. – Sam

답변

1

나는이 정직 각 색상 공간이 서로 매우 다르다 말해서 특정 질문이 아니라 당신의 더 일반적인 하나 .... 에 응답하지 않을 수 있음을 알고 있습니다. 내 경험으로 알고리즘에서 다른 색상 공간을 사용하면 일반적으로 유용한 결과를 얻기 위해 알고리즘이 작동하는 방식을 변경해야합니다. 이 예는 HSV 공간에서 H 채널이 원형 인 즉, RGB의 경우가 아닌 100 = 0의 값이되는 방법이다. 예를 들어, YCbCr에서 조명 강도가 중요한 한 가지 유형의 이미지를 다루는 경우 Y 채널이 Cr adn Cb 채널보다 더 중점/중요성을 가질 수 있습니다. 조명과 상관없이 색상을 처리하는 경우 반대 방향으로 처리하십시오. 힘.

두 번째로 한 색상 공간이 다른 색상 공간보다 나쁘다고 말하면 각각에 불공평합니다. 그들은 각각 그들의 용도와 한계가 있습니다. 공간이 더 좋은 곳으로 링크하는 기사는 "안정성"에 주관합니다. 색상 공간을 다른 색상보다 많이 선택할 수있는 많은 이유가 있습니다.

YCbCr 범위에 관한 귀하의 특정 질문에 ... 죄송합니다. 알고 싶지 않습니다 ... 나는 약간 녹슬 었습니다. :)

+0

답장을 보내 주셔서 감사합니다. 히스토그램 사이의 거리를 구할 때 일부 가중치를 사용하려고했습니다. 그러나 나는 HSV, Luv 및 YCrCb로 나쁜 결과를 얻고 있습니다. 나는 RGB를 계속 사용한다. 문안 인사 – mapetilan