Color Image

색상과 관련된 용어와 변환을 다뤄봅니다.읽는데 9분 정도 걸려요.

Color

231017-141752

하얀색 빛은 RGB 색상의 빛을 모두 합칠 때 나타난다는 건 많이들 알고있을 것이다.
하지만, 빛의 삼원색과 색상의 합을 두고는 의문이 든다.
왜 마젠타와 노란색을 섞으면 밝아지는 것이 아닌 어두워지는 걸까.. 하고.

색상이 보인다 라는 것은 사물이 해당 색상의 빛을 반사하고 나머지 색상의 빛을 흡수하기 때문이다.
마젠타는 RB의 빛의 혼합이다. 즉 Green 색을 흡수한다는 뜻이다.
노랑은 RG의 빛의 혼합이다. 즉 Blue 색을 흡수한다는 뜻이다.
따라서 마젠타와 노랑을 섞은 색은 Green, Blue 색을 흡수한다는 뜻이니 R만 반사할 것이다.
그렇기에 밝아지는게 아닌 어두워져서 Red 색상을 띄게 되는 것이다.

RGB Model

231017-142916

RGB 모델은 아주 익숙한 색상 모델이다.
빛의 삼원색인 Red, Green, Blue 색상의 빛의 밝기로 색상을 표현한다.

HSI Model

231017-143217

HSI 모델은 생소하지만, 활용성이 뛰어난 색상 모델이다.
Hue, Saturation, Intensity의 3요소로 색상을 표현한다.

Hue는 색상을 표현하는 각도로 색조 라고도 부른다.
0°\degree는 Red, 180°\degree는 Cyan 등 각도 하나만으로 모든 색상을 나타내게 된다.

Saturation은 색상의 포함 정도로 채도 라고도 부른다.
Saturation값이 클수록 색상을 많이 함유하고 있다는 뜻이다.
따라서 Saturation이 0이 되면 색상이 존재하지 않는, Gray 색상이 되어버린다.

Intensity는 빛의 세기를 표현하는 정도로 강도 라도도 부른다.
Intensity값이 클수록 빛이 강하다는 뜻이니 흰색에 가까워진다.

RGB vs HSI

두 모델간의 가장 큰 차이라면 '빛의 밝기가 색상에 영향을 주는 가' 이다.

RGB는 각 채널을 같은 비율로 늘리고 줄이는 방식으로 빛의 밝기를 조절한다.
따라서 빛의 밝기가 변하면 다른 색상이라고 취급된다.

하지만 HSI는 빛의 밝기를 I채널에서 관리한다.
따라서 빛의 밝기가 변해도 같은 색상으로 취급된다. (정확히는 H, S값이 변하지 않는다)

두 모델간 차이를 확인하기 위한 이미지이니 참고하자.

231017-211125


Pseudocolor Image Processing

흑백 데이터를 사람이 보기 쉽게 컬러로 대응시키는 과정을 의미한다.

Intensity Slicing

231017-211341

Intensity 값을 기준으로 다르게 색상일 입히는 방식이다.
Slicing plane을 여러개 두면 여러 색상으로 여러 범위의 색상을 입힐 수도 있다.

231017-211515


Color Transformations

기본적으로 앞서 배웠던 영상 변환과 같은 공식을 사용해서 변환한다.

g(x,y)=T[f(x,y)]g(x,y) = T[f(x,y)]

하지만 수식적인 부분은 뒤로 미뤄두고 어떤 채널을 어떻게 변화하면 영상이 어떻게 변화하는지를 중점적으로 알아보자.

Intensity

231017-212214

위 영상은 Intensity만 30% 줄인 영상이다.

231017-212235

그 결과 RGB 모델은 모든 채널이 30% 감소했지만,
HSI 모델은 I 채널만 30% 감소한 모습을 볼 수 있다.

Color Complements

231017-212435

위 영상은 보색으로 색상을 반전시킨 영상이다.
그 결과 RGB 모델은 각 색상 채널이 상하반전된 모습을 취하게 되었다.

HSI 모델은 색상이 반전되었기에,
Hue는 180°\degree만큼 shift된 모습의 그래프를 보이게 되었고, Intensity 역시 반전되었다.
하지만, S는 역시 변화가 없다.


Tone and Color Correction

이번엔 색상과 밝기 등을 수정하면서 어떻게 하면 영상을 보기좋게 만들 수 있는지 알아보자.

231017-214520

RGB 채널에 ease 커브를 줄 경우 어두운 부분은 더 어둡게, 밝은 부분은 더 밝게 만들 수 있다.
하지만 역시 밝기만 건드렸기 때문에 H, S값의 변화는 없다.

231017-214624

전체적으로 너무 밝은 영상의 경우에는 곡률을 아래로 주게 될 경우
영상 톤을 전체적으로 어둡게 바꿀 수 있다.

231017-214711

반대의 경우도 가능하다.

231017-215001

색상별로 톤 변화를 줄 수 있다.
이 경우 색상도 바뀐다.

본인 기준 특이하다고 생각되었던건 특정 색상을 어둡게 커브를 줬더니 영상에서는 오히려 해당 색이 많이 보이도록 조정되었다는 점이 인상적이었다.


Color Slicing

특정 색상영역을 추출하는 기법이다.
예로들어 피부색을 추출하고 싶다면, 피부색과 오차범위에 해당하는 색상만을 선택하여 남기는 작업을 수행하게 된다.

특정 영역을 선별하는 공식은 아래 2가지 방법이 있다.

si={0.5    if[rjaj>W2]any  1jnri    otherwises_i = \left\{\begin{matrix} 0.5 \;\; if[|r_j-a_j| > \frac{W}{2}]_{any \; 1 \leq j \leq n} \\ r_i \;\; otherwise \end{matrix}\right.

RGB 3채널을 기준으로(n=3n=3) 픽셀의 색상(rjr_j)과 기준값(aja_j)의 차이가 오차범위(W/2W/2)보다 크면 0.5로 세팅하고,
오차범위 내부, 즉, 추출하고자 하는 색상 영역이면 원색상을 유지한다.

이 때, 허용범위는 RGB 스페이스에서 정육면체 모양으로 구성되게 된다.
따라서 실제 원했던 색상영역보다 약간 더(꼭짓점 부분) 색상을 포함할 수 있다.


si={0.5    ifj=1n(rjaj)2>R02,ri    otherwises_i = \left\{\begin{matrix} 0.5 \;\; if\sum_{j=1}^{n}(r_j-a_j)^2 > R_0^2, \\ r_i \;\; otherwise \end{matrix}\right.

RGB 3채널을 기준으로(n=3n=3) 픽셀의 색상(rjr_j)과 기준값(aja_j)의 차이가 오차범위(R0R_0)보다 크면 0.5로 세팅하고,
오차범위 내부, 즉, 추출하고자 하는 색상 영역이면 원색상을 유지한다.

이 때, 허용범위는 RGB 스페이스에서 모양으로 구성되게 된다.
따라서 실제 원했던 색상영역을 정확하게 표현할 수 있다.

231017-214142

왼쪽은 첫번째 방법으로, 오른쪽은 두번째 방법으로 Slicing한 영상이다.
더 나아보이는 방식으로 취사선택하면 될 거 같다.