색상의 유사성을 확인하는 알고리즘


82

두 RGB 색상을 비교하고 유사성 값을 생성하는 알고리즘을 찾고 있습니다 (유사성은 "평균적인 인간 인식과 유사 함"을 의미 함).

어떤 아이디어?

수정 :

더 이상 대답 할 수 없기 때문에 질문에 대한 편집으로 내 "솔루션"을 사용하기로 결정했습니다.

저는 제 앱에서 트루 컬러의 (매우) 작은 부분 집합을 사용하기로 결정했습니다. 그래서 제가 직접 색상 비교를 처리 할 수 ​​있습니다. 저는 약 30 가지 색상으로 작업하고 그들 사이에 하드 코딩 된 거리를 사용합니다.

iPhone 앱이기 때문에 저는 objective-C로 작업했으며 구현은 색상 사이의 거리를 보여주는 아래 표를 나타내는 매트릭스입니다.

여기에 이미지 설명 입력


R, G, B 값을 비교하는 것만으로는 충분하지 않습니까?
BlackBear 2011 년

@Kai : 나는 똑같은 것을 구현하려고 노력하고 있습니다. YUV 접근 방식을 사용 했습니까? 아니면 다른 종류의 색 공간과 공간 거리를 선택 했습니까?
Thariama

3
@Thariama 나는 내 앱에서 트루 컬러의 (매우) 작은 부분 집합을 사용하기로 결정했습니다. 저는 약 50 개의 색상으로 작업하고 그 사이에 하드 코딩 된 거리를 사용합니다. 그러나 2 ^ 24 색상을 사용할 때 내가 읽고 시도하고 테스트 한 모든 것에서 YUV가 가장 잘했습니다.
Kai Huppmann

@Kai : 귀하의 결정과 그 이유에 대해 알려 주셔서 감사합니다. 즉, RGB를 사용하고 50 가지 색상을 사용하여 히스토그램을 만들고 미리 정의 된 거리를 사용하여 알고리즘 속도를 높입니다. 맞습니까? 알고리즘을 구현하기 위해 어떤 언어를 사용 했습니까?
Thariama

@Thariama 원래 질문에 편집으로 넣으십시오.
카이 Huppmann

답변:


57

유클리드 공간에서 RGB 거리는 "인간의 지각과 유사"하지 않습니다.

YUV 색상 공간을 사용할 수 있으며 다음 요소를 고려합니다.

|  Y' |      |  0.299    0.587    0.114   | | R |
|  U  |  =   | -0.14713 -0.28886  0.436   | | G |
|  V  |      |  0.615   -0.51499 -0.10001 | | B |

이 목적으로 CIE 색 공간을 사용할 수도 있습니다 .

편집하다:

YUV 색 공간은 간단한 공식을 통해 계산할 수있는 저렴한 근사치입니다. 그러나 그것은 지각 적으로 균일하지 않습니다. 지각 적으로 균일하다는 것은 색상 값에서 동일한 양의 변화가 거의 동일한 시각적 중요성의 변화를 생성해야 함을 의미합니다. 더 정확하고 엄격한 메트릭이 필요한 경우 CIELAB 색 공간 또는 다른 지각 적으로 균일 한 공간 (변환을위한 간단한 공식이 없더라도)을 반드시 고려해야합니다.


3
감사합니다! 그런 다음 Y'UV 값의 유클리드 공간 거리를 사용할 수 있습니까?
Kai Huppmann 2011 년

물론입니다.하지만 다른 거리를 사용할 수도 있습니다.
Ghassen Hamrouni

2
Y '가 루마 성분이기 때문에 UV 성분 사이의 유클리드 거리를 계산하고 싶을 것입니다.
로스

17
YUV의 유클리드 거리가 인간의 차이에 대한 인식을 반영한다는 주장에 대한 출처를 누구든지 인용 할 수 있습니까?

4
@ 빌 그렇지 않습니다. 여기에서 "결과"섹션을 참조하십시오. compuphase.com/cmetric.htm
kritzikratzi

23

CIE94 (DeltaE-1994)를 사용하는 것이 좋습니다 . 인간의 색상 인식을 제대로 표현한다고합니다. 나는 내 컴퓨터 비전 관련 응용 프로그램에서 꽤 많이 사용했으며 결과에 다소 만족합니다.

그러나 이러한 비교를 수행하는 것은 계산 비용이 많이 듭니다.

  1. RGB to XYZ 두 색상 모두
  2. XYZ to LAB 두 색상 모두
  3. Diff = DeltaE94(LABColor1,LABColor2)

공식 (의사 코드) :


CIELAB 색 공간을 사용했기 때문에이 방법을 선호했습니다. 감사합니다.
Sergey Voronezhskiy

"Hunter-Lab"에서와 같이 XYZ에서 LAB로?
Zuks

1
신경
쓰지 마세요

14

인간의 지각은 강도보다 채도가 약합니다.

예를 들어, 상업용 비디오에서 YCbCr / YPbPr 색상 공간 (Y'UV라고도 함)은 크로마 정보의 해상도를 줄이지 만 루마 (Y)는 유지합니다. 4 : 2 : 0 및 4 : 2 : 2와 같은 디지털 비디오 압축에서는 상대적으로 약한 인식으로 인해 크로마 비트 전송률이 감소합니다.

루마 (Y)보다 우선 순위가 높고 크로마보다 우선 순위가 낮은 거리 함수를 계산할 수 있다고 생각합니다.

또한 낮은 강도에서 인간의 시력은 사실상 흑백입니다. 따라서 우선 순위 함수는 낮은 루마 (Y)의 경우 채도에 점점 더 적은 가중치를 부여한다는 점에서 비선형입니다.

더 많은 과학적 공식 : http://en.wikipedia.org/wiki/Color_difference


14

여기에 색 거리에 대한 훌륭한 글이 있습니다 : http://www.compuphase.com/cmetric.htm

리소스가 사라지는 경우 저자의 결론은이 공식 ( C 코드에서)을 사용하여 두 RGB 색상 사이의 거리에 대한 가장 저렴한 근사값을 얻을 수 있다는 것 입니다.

typedef struct {
   unsigned char r, g, b;
} RGB;

double ColourDistance(RGB e1, RGB e2)
{
  long rmean = ( (long)e1.r + (long)e2.r ) / 2;
  long r = (long)e1.r - (long)e2.r;
  long g = (long)e1.g - (long)e2.g;
  long b = (long)e1.b - (long)e2.b;
  return sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}

3

색상 인식은 유클리드가 아닙니다. 모든 거리 공식은 동시에 충분히 좋고 끔찍할 것입니다. 유클리드 거리 (RGB, HSV, Luv, Lab, ...)를 기반으로 한 모든 측정 값은 유사한 색상에 충분하며 아쿠아가 청록색에 가깝다는 것을 보여줍니다. 그러나 닫히지 않은 값의 경우 임의적입니다. 예를 들어 빨간색이 녹색 또는 파란색에 더 가깝습니까?

Charles Poynton의 색상 FAQ에서 :

XYZ 및 RGB 시스템은 지각 적 균일 성을 나타내지 않습니다. XYZ를 합리적으로 지각 적으로 균일 한 공간으로 변환하는 것은 CIE에서 10 년 이상을 소비했으며 결국 단일 시스템에 합의 할 수 없었습니다.


감사합니다. 그리고 그것은 훌륭하고 흥미로운 링크입니다. 내 목적을 위해 빨간색이 녹색 또는 파란색에 더 가까운 지 구분하는 것은 중요하지 않지만 밝은 회색이 흰색에 더 가깝고 밝은 빨간색에 가깝고 YUV가 그것을 만들길 (아직 확실하지는 않습니다) 희망합니다.
Kai Huppmann 2011 년

-5

RGB 큐브의 색상 유사성은 유클리드 거리 (피타고라스 공식 사용)로 측정됩니다.

편집 : 다시 생각하면 이것은 대부분의 다른 색상 공간에서도 마찬가지입니다.


6
아니요, RGB 공간의 유클리드 거리는 사람의 눈이 색상 간의 차이를 인식하는 방식과 일치하지 않습니다. 이것이 Lab과 같은 색 공간이 만들어진 이유입니다.

아니. 유클리드 거리는 모든 데카르트 공간에서 거리를 측정하는 한 가지 방법입니다. 유사성이 아닌 거리를 측정합니다! 이제 유클리드 거리와 유사성이 일치하는 다른 벡터 공간 (예 : cie 또는 yuv)을 선택하거나 다른 측정 값을 사용할 수 있습니다. 그러나 rgb + euclidean은 만족스러운 결과를 제공하지 않습니다.
kritzikratzi

나도 이것을 생각했지만 제한된 수의 색상 (예 : 216 프리셋 기본 팔레트를 사용하는 아도비 플래시)으로 그리기 프로그램을 열고 해당 공식을 테스트하면 매우 빨리 실망하여 노란색이 표시됩니다. 분명히 갈색 등이 필요합니다.
Dmitry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.