2009-12-04 6 views
1

내가 RGB 색 공간에서 붉은 색을 추적하는 시도를 발견이 코드,YCrCb 색상 공간을 사용하는 색상 감지?

// red color detection, turn the detected one into white 
    if (((red > (0.85 * (green + blue))) && (red > 105)) 
    && ((red - green > 73)) && (((green < 150) 
    || ((green >= 150) && (blue > 140))))) { 
     // set the pixel to white 
     red = 255; green = 255; blue = 255; 
    } 

사람이 대신 RGB를에 YCrCb 색 공간을 사용하여 색상을 추적하는 방법을 알고 있나요? 나는 그것을 추적하기 위해 모든 색상의 범위가 정확히 무엇인지 모릅니다. YCrCb의 적색 범위.

편집는 : 예상 로, 결과적으로 내가 사용에 YCrCb 생각보다 난 HSV를 시도했습니다, 그것은 RGB에 비해 더 나은 결과를 제공하지 않습니다.

감사합니다.

답변

0

HSV colour space을 사용하는 것이 좋습니다. 이렇게하면 훨씬 쉽게 처리 할 수 ​​있습니다.

0

YCbCr에서 각 구성 요소의 일반적인 범위는 16-240입니다. RGB와 YCbCr간에 변환 할 수식을 자세히 설명하는 다음 Wikipedia entry을 참조하십시오.

1

먼저 더 나은 정의를 위해 here을 살펴볼 수 있습니다. 이 색상 모델 (YCrCb)은 mpeg와 같은 비디오 형식에서보다 널리 사용됩니다. 비디오가 4 : 2 : 2 형식을 사용하는 경우 대부분의 비디오 형식 (Yb (파란색 구성 요소) 및 Yr (빨간색 구성 요소)이 표현되는 반면 Y 구성 요소 (휘도 표현 용)은 원본 RGB 이미지 크기를 가짐) 원래 이미지 해상도의 절반으로 그렇게하면 파일의 대역폭을 줄일 수 있습니다.

그러나 kigurai에 따르면 색상을 추적하려면 HSV (또는 HSI) 형식을 사용하는 것이 좋습니다. 이 형식에서 H (색조) 구성 요소는 색상 자체를 0..359 (360도)로 나타냅니다. 따라서 0..255에서 숫자를 반올림하지 않으려면 16 비트 행렬을 사용하여 메모리에서 해당 채널을 나타낼 수 있습니다. 또한이 색 공간에서 S는 채도 (해당 픽셀에서 H의 색 구성 요소가 얼마나 많이 존재하는지)를 나타내고 S (또는 I)는 이미지 밝기를 나타냅니다.

하는 것이 어렵지 않아 구현하는 알고리즘 :

I = 1/3 * (R + G + B)

S = 1 - (3/(R + G + B)) * (RG, RB) */(sqrt ((R, G, B))

H = cos^-1 (((RG) + (RB)) /))))