RGB에서 그레이 스케일로 변환 할 때 R, G, B 채널에 대한 특정 가중치를 적용해야한다고합니다. 이러한 가중치는 0.2989, 0.5870, 0.1140입니다.
그 이유는이 세 가지 색에 대한 인간의 지각 / 감성이 다르기 때문이라고합니다. 때때로 이들은 NTSC 신호를 계산하는 데 사용되는 값이라고도합니다.
그러나 웹에서 이에 대한 좋은 참조를 찾지 못했습니다. 이러한 가치의 출처는 무엇입니까?
답변
질문의 특정 번호는 CCIR 601에서 가져온 것입니다 (아래 Wikipedia 링크 참조).
RGB-> 그레이 스케일을 약간 다른 숫자 / 다른 방법으로 변환하면 일반적인 조명 조건에서 일반 컴퓨터 화면에서 큰 차이를 볼 수 없습니다. 시도해보십시오.
일반적으로 색상에 대한 추가 링크는 다음과 같습니다.
위키 백과 루마
브루스 린드 블룸 의 뛰어난 웹 사이트
Colin Ware의 책의 색상에 관한 4 장, “정보 시각화”, isbn 1-55860-819-2; books.google.com의 Ware에 대한이 긴 링크
는 작동하거나 작동하지 않을 수 있습니다.
캠브리지 : 훌륭하고 잘 작성된 “절차보다 개념을 강조하는 시각적 지향적 접근 방식을 사용하여 디지털 사진을 획득, 해석 및 처리하는 방법에 대한 자습서”
“선형”RGB와 “비선형”RGB를 마주 치게된다면 여기에 대해 나 자신에 대한 오래된 메모의 일부가 있습니다. 반복합니다. 실제로는 큰 차이가 없습니다.
RGB-> ^ 감마-> Y-> L *
색상 과학에서 html rgb (10 %, 20 %, 30 %)에서와 같은 일반적인 RGB 값을 “비선형”또는
감마 보정이라고 합니다. “선형”값은 다음과 같이 정의됩니다.
Rlin = R^gamma, Glin = G^gamma, Blin = B^gamma
감마는 많은 PC에서 2.2입니다. 일반적인 RGB는 때때로 R ‘G’B ‘(R’= Rlin ^ (1 / 감마)) (순수한 혀 클릭)로 작성되지만 여기서는 ‘.
CRT 디스플레이의 밝기는 RGBlin = RGB ^ 감마에 비례하므로 CRT의 50 % 회색은 매우 어둡습니다 : .5 ^ 2.2 = 최대 밝기의 22 %. (LCD 디스플레이는 더 복잡하며 일부 그래픽 카드는 감마를 보정합니다.)
L*
RGB에서 호출 되는 밝기 측정 값을 얻으려면 먼저 RGB를 255로 나누고
Y = .2126 * R^gamma + .7152 * G^gamma + .0722 * B^gamma
이것은 Y
XYZ 색상 공간에 있습니다. 색상 “휘도”의 척도입니다. (실제 공식은 정확히 x ^ 감마가 아니라 가깝습니다. 첫 번째 패스에서는 x ^ 감마를 사용합니다.)
드디어,
L* = 116 * Y ^ 1/3 - 16
“… 지각 적 균일 성을 열망하고 [그리고] 인간의 가벼움에 대한 인식과 밀접하게 일치합니다.” –
위키 백과 실험실 색 공간
답변
나는이 출판물이 이전의 유사한 질문에 대한 답변에서 언급 된 것을 발견했습니다. 매우 유용합니다.
http://cadik.posvete.cz/color_to_gray_evaluation/
다양한 결과로 회색조 이미지를 생성하는 다양한 방법의 ‘톤’을 보여줍니다!
답변
rgb를 회색조로 변환하는 c의 코드가 있습니다. rgb에서 그레이 스케일로 변환하는 데 사용되는 실제 가중치는 0.3R + 0.6G + 0.11B입니다. 이 가중치는 절대적으로 중요하지 않으므로 가지고 놀 수 있습니다. 0.25R + 0.5G + 0.25B로 만들었습니다. 약간 더 어두운 이미지를 생성합니다.
참고 : 다음 코드는 xRGB 32 비트 픽셀 형식을 가정합니다.
unsigned int *pntrBWImage=(unsigned int*)..data pointer..; //assumes 4*width*height bytes with 32 bits i.e. 4 bytes per pixel
unsigned int fourBytes;
unsigned char r,g,b;
for (int index=0;index<width*height;index++)
{
fourBytes=pntrBWImage[index];//caches 4 bytes at a time
r=(fourBytes>>16);
g=(fourBytes>>8);
b=fourBytes;
I_Out[index] = (r >>2)+ (g>>1) + (b>>2); //This runs in 0.00065s on my pc and produces slightly darker results
//I_Out[index]=((unsigned int)(r+g+b))/3; //This runs in 0.0011s on my pc and produces a pure average
}
답변
다음은 이러한 숫자 (또는 유사한 숫자)가 어떻게 도출되었는지에 대한 논문입니다.
답변
이에 대한 정보 는 색상 FAQ 를 확인하십시오 . 이러한 값은 디스플레이에서 사용하는 RGB 값의 표준화에서 비롯됩니다. 실제로 Color FAQ에 따르면 사용중인 값은 최신 모니터가 아닌 원래 NTSC 표준에 사용 된 값이므로 구식입니다.
답변
이러한 가치의 출처는 무엇입니까?
게시 된 계수의 “소스”는 Rec601 및 TV 특성 에서 볼 수있는 NTSC 사양입니다 .
“궁극적 인 출처”는 인간의 색채 지각에 대한 1931 년경의 CIE 실험입니다. 인간 시각의 스펙트럼 반응은 균일하지 않습니다. 실험은 지각을 기반으로 삼 자극 값의 가중치를 부여했습니다. 우리의 L, M, S 원뿔 1 은 삼 자극 원색이 파생되는 “적색”, “녹색”및 “파란색”(각각)으로 식별되는 빛 파장에 민감합니다. 2
sRGB (및 Rec709)에 대한 선형 조명 3 스펙트럼 가중치는 다음과 같습니다.
R lin * 0.2126 + G lin * 0.7152 + B lin * 0.0722 = Y
이러한 컴퓨터 모니터 (의 sRGB) 또는 HDTV 모니터 (REC709)을 나타 내기 위해 의도 된 컬러 공간의 sRGB와 REC709, 특정하고,위한 ITU 문서에 자세히 설명되어 REC709 도 (2천18분의 10)를 BT.2380-2
각주
(1) 콘은 눈의 망막의 색을 감지하는 세포입니다.
(2) 그러나 선택된 삼 자극 파장은 각 원뿔 유형의 “피크”에 있지 않습니다. 대신 삼 자극 값이 선택되어 특정 원뿔 유형에서 다른 것보다 실질적으로 더 많이 자극합니다 (즉, 자극 분리).
(3) 계수를 적용하기 전에 sRGB 값을 선형화해야합니다. 나는 이것을 다른 대답 에서 논의합니다 .
답변
이러한 값은 특히 색맹 인 사람들의 경우 사람마다 다릅니다.