오다기리 박의 알고리즘 노트

[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 03. 그래픽 컬러처리 본문

컴퓨터 그래픽스/OpenGL

[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 03. 그래픽 컬러처리

오다기리 박 2019. 2. 14. 21:06

OpenGL로 배우는 3차원 컴퓨터 그래픽스


Chapter 03. 그래픽 컬러처리

Section 01. 컬러이론

  • 색상, 명도, 채도

    • 빛은 전자기파 (공간에서 전기장과 자기장이 서로 수직으로 교차하며 진행하는 파)의 일종

    • 빛 에너지의 세기 = 전자기파의 장의 세기

    • 주파수 : 초당 몇 번이나 장의 세기가 바뀌는가

    • 백색광 : 태양광, 형광등 등 일반적인 광원. 보라색 ~ 빨간색의 모든 주파스 성분이 내포되어있음. 백색광이 물체 표면에 부딪치면 어떤 주파수 성분은 흡수되고 어떤 주파수 성분은 반사된다.
      반사된 빛 중 가장 많은 에너지를 지닌 파장의 주파수를 우세 주파수라고 하고 우세 주파수의 색을 물체의 색상(Hue, Color)이라 한다.
      ex) 황색 :

    • 채도(Saturation) : 색의 선명도 / 순도. 색상 에너지와 백색 에너지의 차이

    • 명도(Luminance) : 색상에 무관하게 눈에 감지된 빛 에너지의 총량

      • 자체명도(Brightness, Self-Luminance) : 스스로 빛을 발하는 물체의 명도

      • 반사 명도 (Lightness) : 반사된 빛을 발하는 물체의 명도

  • 컬러매칭

    • 색 범주(Color Gamut)


      • 표현할 수 있는 색상을 모두 망라한 것

      • 경계선은 단일 파장에 의한 순수 색을 나타낸다.

      • 중앙의 백색에서 멀어질수록 채도 증가

      • 동일한 양의 두 보색을 섞으면 백색


Section 02. 컬러모델

  • RGB 컬러모델 (=가산모델)

    • RGB 모델은 우리 눈이 파장 630mm(빨강), 530mm(녹색), 450mm(청색) 세개의 파장에 가장 민감하게 반응한다는 관찰에 의한다. 즉, 우리 눈이 이 세 가지 파장의 빛의 세기만을 합성하여 색을 인식한다는 삼중자극 이론에 따른다.

    • RGB 컬러모델 :  모델링에 있어서 R,G,B를 x,y,z 축에 놓고 가중치에 따라서 색을 정의하고자 하는 것

    • 컴퓨터 화면에 재현하기 위해 실제 색상을 단순화한 것

  • CMY 컬러모델 (=감산모델)


    • 빛이 물체 표면에 반사되었을 때의 색에 관한 모델

  • HSV 컬러모델

    • 색상, 채도, 명도를 명시함으로써 색을 지정하는 방법


Section 03. 컬러모드

  • RGB 컬러모드

    • 프레임 버퍼 내용이 직접적으로 R, G, B 값을 담고 있는 경우

    • 화소 당 비트 수가 클수록 색 표현 정밀도는 커지고 프레임 버퍼 메모리의 용량이 증가

  • 인덱스 컬러모드

    • 프레임 버퍼의 비트 값은 컬러 보기표의 첫 칼럼인 인덱스 값을 의미

    • 제한된 프레임 용량으로 다양한 색을 표현하기 위해 사용


Section 05. 감마수정

  • 감마수정

    • 인점의 명도는 전자 빔의 세기에 비선형적

    • <math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle mathsize="20px"><mrow><mi>B</mi><mo>=</mo><mi>&#x3B1;</mi><msup><mi>&#x3B4;</mi><mi>&#x3B3;</mi></msup></mrow></mstyle></math>
      <math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle mathsize="20px"><mi>B</mi><mo>&#xA0;</mo><mo>:</mo><mo>&#xA0;</mo></mstyle></math>인점의 명도, <math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle mathsize="20px"><mi>&#x3B1;</mi></mstyle></math> : 비례상수, <math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle mathsize="20px"><mi>&#x3B4;</mi></mstyle></math> : 정규화 회색도, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#x3B3;</mi></math> : 1.7 ~ 2.8

    • 사용자가 명시한 회색도보다 인점의 명도는 어둡다.

    • 감마 수정 : 사용자가 입력한 회색도 <math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle mathsize="20px"><mi>&#x3B4;</mi></mstyle></math><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac bevelled="true"><mn>1</mn><mi>&#x3B3;</mi></mfrac></math>을 미리 곱하여 이를 수정된 입력 값으로 프레임 버퍼에 저장하여 이 값을 기준으로 전자 빔을 쏘도록한다.
      <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>B</mi><mo>=</mo><mi>&#x3B1;</mi><msup><mfenced><mrow><mi>&#x3B4;</mi><mo>'</mo></mrow></mfenced><mi>&#x3B3;</mi></msup><mspace linebreak="newline"/><mo>&#xA0;</mo><mo>&#xA0;</mo><mo>&#xA0;</mo><mo>=</mo><mi>&#x3B1;</mi><msup><mfenced><msup><mi>&#x3B4;</mi><mfrac bevelled="true"><mn>1</mn><mi>&#x3B3;</mi></mfrac></msup></mfenced><mi>&#x3B3;</mi></msup><mspace linebreak="newline"/><mo>&#xA0;</mo><mo>&#xA0;</mo><mo>&#xA0;</mo><mo>=</mo><mi>&#x3B1;</mi><mfenced><mi>&#x3B4;</mi></mfenced><mspace linebreak="newline"/></math>

    • 하드웨어 감마 : 하드웨어 스스로 감마수정 실행

    • 시스템 감마 : 소프트웨어에 의해 감마수정