programing tip

RGB를 회색조 / 강도로 변환

itbloger 2020. 7. 24. 07:51
반응형

RGB를 회색조 / 강도로 변환


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에 대한이 긴 링크 는 작동하거나 작동하지 않을 수 있습니다.

cambridgeincolor : 훌륭하고 잘 쓰여진 "절차보다 개념을 강조하는 시각적 지향적 접근 방식을 사용하여 디지털 사진을 획득, 해석 및 처리하는 방법에 대한 자습서"

"선형"대 "비선형"RGB에 부딪 치면 여기에 대한 오래된 메모의 일부가 있습니다. 반복하십시오. 실제로는 큰 차이가 없습니다.


RGB-> ^ 감마-> Y-> L *

색상 과학에서 html rgb (10 %, 20 %, 30 %)에서와 같이 일반적인 RGB 값을 "nonlinear"또는 Gamma corrected라고 합니다. "선형"값은 다음과 같이 정의됩니다.

Rlin = R^gamma,  Glin = G^gamma,  Blin = B^gamma

많은 PC에서 감마는 2.2입니다. 일반적인 RGB는 때때로 R 'G'B '(R'= Rlin ^ (1 / gamma)) (혀를 누르는 순수 주의자)로 작성되지만 여기서는 '를 삭제합니다.

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

L*RGB에서 호출 되는 밝기를 측정하려면 먼저 RGB를 255로 나누고 계산하십시오.

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

이것은 YXYZ 색상 공간에 있습니다. 색상 "휘도"의 척도입니다. (실제 공식은 정확히 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 값의 표준화에서 비롯됩니다. 실제로 색상 FAQ에 따르면 사용중인 값은 최신 모니터가 아닌 원래 NTSC 표준에 사용 된 값이므로 오래되었습니다.


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

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


이러한 가치의 근원은 무엇입니까?

게시 된 계수의 "소스"는 NTSC 사양이며 Rec601텔레비전 특성 에서 확인할 수 있습니다 .

"궁극의 소스"는 인간의 색 인식에 관한 1931 년경 CIE 실험입니다. 인간 비전의 스펙트럼 반응은 일정하지 않습니다. 실험은 지각에 기초한 삼 자극 값의 가중치를 유발했다. 우리의 L, M 및 S 콘 1 은 우리가 "적색", "녹색"및 "청색"(각각)으로 식별하는 광 파장에 민감합니다. 2

sRGB (및 Rec709)에 대한 선형 라이트 3 스펙트럼 가중치는 다음과 같습니다.

Rlin * 0.2126 + Glin * 0.7152 + Blin * 0.0722 = Y

These are specific to the sRGB and Rec709 colorspaces, which are intended to represent computer monitors (sRGB) or HDTV monitors (Rec709), and are detailed in the ITU documents for Rec709 and also BT.2380-2 (10/2018)

FOOTNOTES (1) Cones are the color detecting cells of the eye's retina.
(2) However, the chosen tristimulus wavelengths are NOT at the "peak" of each cone type - instead tristimulus values are chosen such that they stimulate on particular cone type substantially more than another, i.e. separation of stimulus.
(3) You need to linearize your sRGB values before applying the coefficients. I discuss this in another answer here.


These values vary from person to person, especially for people who are colorblind.


is all this really necessary, human perception and CRT vs LCD will vary, but the R G B intensity does not, Why not L = (R + G + B)/3 and set the new RGB to L, L, L?

참고URL : https://stackoverflow.com/questions/687261/converting-rgb-to-grayscale-intensity

반응형