2011-08-30 6 views
1

이미지를 분석하고 녹색 또는 갈색 또는 흰색을 사용하는 방법을 결정하는 방법에 대한 몇 가지 아이디어를 찾고 있습니다 ... ISH를 강조하고 있습니다. 전체를 캡처하는 데 관심이 있습니다. 이 색의 음영 지금까지, 나는 다음을 수행했다 :iPhone 색상 이미지 분석

나는 내 UIImage를 가지고 있는데, 나는 CGImageRef를 가지고 있고 실제로 픽셀 자체의 색상을 가지고있다. (RGB와 알파이다.) 내가 모르는 것은 이것을 계량화하는 방법이다. 그리고 모든 녹색 음영, 파랑, 갈색, 황색, purples 등을 결정 ... 그래서, 나는 모든 픽셀을 처리 할 수있는 기본 RGB를 결정하지만, 전체 이미지를 통해 색상을 정량화에 도움이 필요합니다.

아이디어에 감사드립니다 ... Alex.

답변

4

RGB 색상 공간에서 Y 색상 공간 (YUV, YCrCb 또는 그 중 하나)과 같은 색상 공간으로 전환하는 것이 좋습니다. 모든 경우에 Y 채널은 밝기를 나타내고 다른 두 채널은 함께 밝기를 기준으로 색상을 나타냅니다. 아마도 어둠 아래의 모든 색을 배제하라는 경고와 함께 밝기를 배제하기를 원할 것입니다. 따라서 Y를 개별적으로 얻는 것이 그 자체로 도움이되는 첫 번째 단계입니다.

RGB에서 YUV 로의 변환은 간단한 선형 조합으로 수행됩니다. 직선 위키 백과와 천 다른 소스에서 :

y = 0.299*r + 0.587*g + 0.114*b; 
u = -0.14713*r - 0.28886*g + 0.436*b; 
v = 0.615*r - 0.51499*g - 0.10001*b; 

당신이 범위에서 R, G 및 B를 유지하고 가정 [0, 1], 첫 번째 테스트는 다음과 같을 수 있습니다

if(y < 0.05) 
{ 
    // this colour is very dark, so it's considered to be as 
    // far as we allow from any colour we're interested in 
} 

하는 결정하기 색상은 다음, 말, 녹색,은 y의 비율로, 관심있는 녹색의 U 및 V 구성 요소를 해결하는 것이 얼마나 가까운 : 그 후

r = b = 0; 
g = 0; 

y = 0.299*r + 0.587*g + 0.114*b = 0.587; 

u = -0.14713*r - 0.28886*g + 0.436*b = -0.28886; 
v = 0.615*r - 0.51499*g - 0.10001*b = -0.51499; 

proportionOfU = u/y = -2.0479; 
proportionOfV = v/y = -0.8773; 

, 운동 및 비율을 비교 U와 V의 들어오는 색상을 비교하고 (예 : 비교하는 색상에 대해 계산 한 값과 평면 거리 (2d 평면 거리 포함)를 비교합니다. 더 가까운 값이 더 비슷합니다. 해당 측정 항목을 확장하고 사용하는 방법은 응용 프로그램에 따라 다릅니다.

y가 0으로 갈수록 계산 된 비율은 입력 데이터의 제한된 범위 때문에 점점 더 정확도가 떨어지고 y가 0 일 때 정의되지 않음에 유의하십시오. 개념적으로 이는 빛이 없을 때 모든 색상이 똑같이 보입니다 그 (것)들에. y가 최소한의 특정 값 이상인지 확인하는 것은이 문제를 해결하기위한 실용적인 방법입니다. 이것은 또한 당신이 "이 그림이 얼마나 흑인입니까?"라고 말하면 합리적인 결과를 얻지 못할 것이라는 것을 의미합니다. 다시 말하면 그것은 빛을 반사하지 않는 표면과 표면을 반사하지 않는 표면 사이의 모호함 때문입니다. 그 위에 어떤 빛이라도 떨어지십시오.

+0

굉장 - 고마워요. 나는 그것을 시도 할 것입니다. – geekyaleks