문제

RGB에서 GrayScale로 변환 할 때, 특정 가중치는 채널 R, G 및 B로의 적용되어야한다고합니다. 이 중량은 0.2989, 0.5870, 0.1140입니다.

그 이유는이 세 가지 색상에 대한 인간의 인식/감성이 다릅니다. 때로는 NTSC 신호를 계산하는 데 사용되는 값이라고도합니다.

그러나 웹에서 이것에 대한 좋은 참조를 찾지 못했습니다. 이 값의 원천은 무엇입니까?

이전 질문도 참조하십시오. 여기 그리고 여기.

도움이 되었습니까?

해결책

문제의 특정 숫자는 CCIR 601에서 나온 것입니다 (아래 Wikipedia 링크 참조).

rgb-> grayscale을 약간 다른 숫자 / 다른 방법으로 변환하는 경우 정상적인 조명 조건에서 정상적인 컴퓨터 화면에서 전혀 차이가 전혀 나타나지 않을 것입니다.

일반적으로 색상에 대한 더 많은 링크가 있습니다.

위키 백과 루마

브루스 린드 블룸 뛰어난 웹 사이트

Colin Ware의 책의 색상에 대한 4 장, "정보 시각화", ISBN 1-55860-819-2; 이 긴 링크와의 링크 books.google.com작동하거나 작동하지 않을 수 있습니다

케임브리지 인콜러 : 우수하고 잘 작성된 "절차보다 개념을 강조하는 시각적으로 지향적 인 접근법을 사용하여 디지털 사진을 획득, 해석 및 처리하는 방법에 대한 튜토리얼"

"선형"대 "비선형"RGB를 사용한다면 여기에 나 자신에 대한 오래된 메모의 일부가 있습니다. 반복, 실제로는 많은 차이가 보이지 않을 것입니다.


rgb-> ^gamma-> 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/gamma)) (순수 주의자 혀 클릭)로 작성되지만 여기서는 ''를 떨어 뜨립니다.

CRT 디스플레이의 밝기는 rgblin = rgb ^ gamma에 비례하므로 CRT의 50% 회색은 매우 어둡습니다. .5 ^ 2.2 = 최대 밝기의 22%. (LCD 디스플레이는 더 복잡합니다. 또한 일부 그래픽 카드는 감마를 보상합니다.)

가벼움의 척도를 얻기 위해 L* RGB에서 먼저 RGB를 255로 나누고 계산합니다.

Y = .2126 * R^gamma + .7152 * G^gamma + .0722 * B^gamma

이것은 Y xyz 색상 공간에서; 색상 "휘도"의 척도입니다. (실제 공식은 정확히 x^gamma가 아니라 닫습니다. 첫 번째 패스를 위해 x^gamma를 고수하십시오.)

드디어,

L* = 116 * Y ^ 1/3 - 16

"... 지각 적 균일 성을 열망하고 [] 가벼움에 대한 인간의 인식과 밀접하게 일치한다." - 위키 백과 실험실 색상 공간

다른 팁

나는이 간행물이 이전의 유사한 질문에 대한 답으로 언급 된 것을 발견했다. 매우 도움이됩니다.

http://cadik.posvete.cz/color_to_gray_evaluation/

다른 결과를 가진 회색조 이미지를 생성하기 위해 다른 방법의 '톤'을 보여줍니다!

RGB를 GrayScale으로 변환하기 위해 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 표준에 사용되는 값이기 때문에 구식입니다.

다음은이 숫자 (또는 유사한 숫자)가 어떻게 도출되었는지에 대한 논문입니다.

https://web.archive.org/web/20160303201512/http://www.cis.rit.edu/mcsl/research/broadbent/cie1931_rgb.pdf

이 값의 원천은 무엇입니까?

게시 된 계수의 "소스"는 NTSC 사양입니다. Rec601 그리고 텔레비전의 특성.

"궁극적 인 출처"는 1931 년경 인간의 색상 인식에 대한 실험입니다. 인간 비전의 스펙트럼 반응은 균일하지 않습니다. 실험은 인식에 기초하여 삼위 일체 값의 가중치를 이끌어 냈다. 우리의 l, m 및 s 콘1 우리가 "빨간색", "녹색"및 "파란색"(각각)으로 식별하는 광 파장에 민감하며, 여기서 Tristimulus 기본 색상이 도출됩니다.2

선형광3 SRGB (및 REC709)의 스펙트럼 가중치는 다음과 같습니다.

아르 자형 * 0.2126 + g * 0.7152 + b * 0.0722 = y

이들은 컴퓨터 모니터 (SRGB) 또는 HDTV 모니터 (REC709)를 나타내기위한 SRGB 및 REC709 색상 분야에만 해당되며 ITU 문서에 자세히 설명되어 있습니다. REC709 그리고 또한 Bt.2380-2 (10/2018)

각주 (1) 원뿔은 눈의 망막의 색 검출 세포입니다.
(2) 그러나, 선택된 tristimulus 파장은 각 원뿔 유형의 "피크"에 있지 않으며, 대신 Tristimulus 값이 선택되어 자극의 분리 된 특정 원뿔 유형에서 자극을받습니다.
(3) 계수를 적용하기 전에 SRGB 값을 선형화해야합니다. 나는 이것에 대해 논의한다 여기에 또 다른 대답.

이 값은 사람마다 다릅니다. 특히 색맹 인 사람들에게는 다릅니다.

이 모든 것이 실제로 필요한 것입니다. 인간의 인식과 CRT 대 LCD는 다를 것이지만 RGB 강도는 그렇지 않습니다. L = (R + G + B)/3 새 RGB를 L, L, L로 설정하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top