2009-11-20 3 views
3

미리 정의 된 rgb 배열이 있습니다. 사용자 정의 된 색상을 내 배열과 비교하고 목표 C에서 가장 가까운 일치를 반환 할 수 있기를 원합니다.목표 C 가장 가까운 색상 찾기 (rgb)

모든 도움을 주시면 감사하겠습니다.

답변

1

사전 정의 된 색상과 사용자 정의 된 색상의 차이 제곱합을 찾아 최소 "거리"로 사전 정의 된 색상을 선택할 수 있습니다.

예. 사용자 정의 색상을 가정하는 것은 [120 300 200]하고 미리 정의 된 색상은 [100 250 150], 제곱 차이의 합이며, 점수는 다음과 같습니다

(120-100)*(120-100) + (300-250)*(300-250) + (200-150)*(200-150) = 5400 - 그리고 최소한의 차이로 prefefined 색상을 선택합니다.

+0

감사합니다. Jacob. 미리 정의 된 각 색상에 대해 UIColor 값을 저장하고 플로트 값을 기반으로 가장 가까운 비교를 수행 할 수 있습니까? – yesimarobot

+0

네, 그렇게 할 수 있습니다. 빠른 속도로 만들고 싶다면 미리 정의 된 색상에서 KD 트리를 만들면 쿼리 속도가 빨라집니다. 그렇지 않으면, 당신은 그것을 bruteforce 할 수 있습니다 - 각 색상을 비교하십시오. – Jacob

+0

차가움. 나는 1000 이하의 comarisons를보고있다. 나는 그것이 잘 작동 PHP에서 제안을 구현했습니다. 나는이 아이폰에 대한 구현을 찾고 있어요. KD 나무는 내게 가치가 있습니까? – yesimarobot

1

이렇게하면 색의 친밀도가 무엇인지 질문하게됩니다.

색상을 모두 계산하지 않아도됩니다. 시도해야합니다. 3D 공간에서 두 점 사이의 거리를 찾으려면 color1과 color2로 주어진 수학은 다음과 같이됩니다 : ((r2-r1)^2 + (b2-b2)^2 + (g2-g1)^2)^0.5 (최종 제곱근은 비교 ​​목적으로 필요하지 않습니다.)

가능한 한 더 좋은 방법은 HSB 공간에서 계산을 수행하는 것입니다. 색조를 보는 것만 가능합니다.

0

먼저 거리 함수를 정의해야합니다. 사소한 것은 벡터 길이 함수입니다 : 모든 차원에 의한 차이의 제곱합입니다.

다음 배열을 통해 실행하고 옷장 하나를 선택하십시오 (최소 거리).

2

테스트 할 색 공간을 결정해야합니다.

HSL은 "색조 차이"에 더 많은 무게를 줄 수 있고 "밝기"에 덜 비중을 둘 수 있기 때문에 틀림없이 RGB보다 우수한 색 공간입니다. RGB 공간에서는 눈이 다른 색상보다 녹색 음영이 낫기 때문에 차이를 왜곡해야합니다.