안녕하세요. 지난 포스팅의 디지털 영상 처리 - 풀-칼라 영상 처리 기초에서는 칼라 영상을 처리하는 2가지 방법으로 칼라 성분별 처리와 벡터-기반 처리를 소개하였습니다. 오늘은 이러한 처리 방법을 이용해서 어떻게 칼라 영상을 처리하는 지 알아보도록 하겠습니다. 여기서 말하는 칼라 변환은 HSI에서 RGB로의 칼라 성분 변환(또는 그 반대)와는 다른 개념임에 유의해주시길 바랍니다.
1. 공식화
기본적으로 그레이 스케일에서의 밝기 변환은 아래의 공식을 통해 얻을 수 있다는 것을 저희는 이미 알고 있습니다.
$$g(x, y) = T\left[f(x, y)\right]$$
여기서 $f(x, y)$는 입셩 영상, $g(x, y)$는 변환된 영상, $T$는 $(x, y)$의 공간 이웃에 적용되는 $f$를 변환시키는 연산자입니다. 대표적으로 로그 변환, 감마 변환, 히스토그램 평활화 및 매칭, 스무딩 등이 있습니다. 이제 위 식을 칼라에도 적용할 수 있도록 바꾸도록 하겠습니다.
$$s_{i} = T_{i}]\left(r_{1}, r_{2}, \dots, r_{n}\right)$$
여기서 $i = 1, 2, \dots, n$입니다. $r_{i}$과 $s_{i}$를 각각 $f(x, y)$와 $g(x, y)$의 칼라 성분들을 나타내는 변수들, $n$을 칼라 성분의 수, $\{T_{1}, T_{2}, \dots, T_{n}\}$은 $s_{i}$를 만들기 위해 $r_{i}$에 연산되는 변환 또는 칼라 매핑 함수들의 집합입니다. 예를 들어 RGB 칼라 공간에서 어떤 변환을 하게 되면 $n = 3$이 되고 각 칼라 성분 마다 다른 변환 함수 $\{T_{R}, T_{G}, T_{B}\}$가 정의됩니다. 그리고 $T_{R}$을 사용하면 입력된 RGB 칼라 벡터가 R 성분의 값을 하나 만들게 되는 것이죠.
위의 공식을 이용하면 지금까지 저희가 알아본 어떠한 변환도 칼라 영상에 적용할 수 있습니다. 하지만, 어떤 연산은 특정 칼라 공간에 더 적합한 경우가 많기 때문에 직접 칼라를 변환해보면서 찾아보야아합니다. 그리고 동일한 변환이라고 하더라도 각 칼라 공간에 대해서는 공식이 달라질 수 있습니다. 예를 들어서 입력 영상의 밝기(intensity)를 선형적으로 변환시킨다고 가정하면 RGB, HSI, CMY 칼라 공간에서는 아래와 같이 모델링 됩니다.
- RGB 칼라 공간 : $s_{i} = kr_{i}$
- HSI 칼라 공간 : $s_{3} = kr_{3}$
- CMY 칼라 공간 : $s_{i} = kr_{i} + (1 - k)$
먼저, RGB 칼라 공간의 경우에는 모든 칼라가 밝기라는 정보를 포함하고 있기 때문에 모든 칼라 성분에 $k$를 곱해주게 됩니다. 그리고 HSI 칼라 공간은 가장 마지막 칼라 성분인 I에만 밝기 정보를 가지고 있기 때문에 마지막 성분에만 $k$를 곱해주게 됩니다. CMY 칼라 공간은 1에서 RGB 칼라 공간의 값을 빼서 얻을 수 있기 때문에 RGB 칼라 공간과 동일하게 모든 칼라 성분에 $k$를 곱해주면 됩니다. 위에서 식들은 전부 다른 공식을 가지고 있지만 결론적으로 얻는 영상은 전부 같은 결과를 얻습니다. 아래의 그림은 $k = 0.7$로 두어 밝기를 30% 감소시킨 딸기의 모습입니다.
2. 칼라 보색(Color Complement)
이번에는 보색(Complement)에 대해서 알아보도록 하겠습니다. 보색은 아마 초등학교 미술 시간에 다들 배우실 거 같습니다. 예를 들어 빨간색의 보색은 청록색입니다. 이를 그림으로 표현하면 아래와 같습니다.
위의 그림에서 각 칼라의 반대편이 해당 칼라의 보색이 됩니다. 그리고 이를 처리하는 방법은 1에서 해당 칼라를 빼주면 됩니다. 즉, RGB와 CMY는 서로 보색 관계임을 알 수 있습니다. 아래의 그림을 보시면 빨간색 부분이 청록색으로 반전된 것을 볼 수 있습니다.
3. 칼라 슬라이싱(Color Slicing)
이번에는 관심 칼라를 다른 칼라와 분리하는 칼라 슬라이싱(Color Slicing)에 대해서 알아보도록 하겠습니다. 칼라 슬라이싱의 목적은 2가지입니다.
- 관심 칼라를 배경으로부터 두드러지게 표시
- 관심 칼라에 의해 정의된 영역을 그 다음 단계의 처리를 위한 마스크로 사용
칼라 슬라이싱을 수행하는 가장 쉬운 방법은 관심 범위 밖의 칼라는 회색 칼라로 매핑하는 것입니다. 관심 칼라가 폭이 $W$인 큐브($n \ge 3$이면 하이퍼 큐브) 내에 있고 $(a_{1}, a_{2}, \dots, a_{n})$ 성분을 중심으로 한다고 할 때 필요한 변환 함수는 아래와 같이 정의할 수 있습니다.
$$s_{i} = \begin{cases} 0.5 &\left[\left|r_{j} - a_{j}\right| > \frac{W}{2}\right]_{\text{any } 1 \le j \le n} \text{for } i = 1, 2, \dots, n \\ r_{i} &\text{Otherwise}\end{cases} $$
위에서는 큐브로 정의했지만 아래와 같이 구(sphere)로도 정의할 수 있습니다.
$$s_{i} = \begin{cases} 0.5 &\sum_{j = 1}^{n} \left(r_{j} - a_{j}\right)^{2} > R_{0}^{2} \\ r_{i} &\text{Otherwise}\end{cases}$$
여기서 $R_{0}$는 구의 반지름, $(a_{1}, a_{2}, \dots, a_{n})$은 구의 중심을 의미합니다. 아래의 그림은 위의 큐브 변환과 구 변환을 이용하여 적색 칼라를 슬라이싱한 결과입니다.
4. 색조 및 칼라 보정
저희가 이전에 보았던 밝기 변환 방법 중 콘트라스트 스트레칭, 로그 변환이나 감마 변환을 이용해서 좀 더 선명하게 만들수도 있습니다.
5. 히스토그램 처리
히스토그램 평활화는 영상의 밝기 분포를 균일하게 만드는 알고리즘입니다. 혹시 자세한 설명을 원하시면 아래의 링크를 참조해주시길 바랍니다.
칼라 영상에서의 히스토그램 평활화 역시 동일하지만 일반적으로 HSI 칼라 공간 중 I 칼라 성분에만 적용하는 것이 이상적인 방법임이 알려져 있습니다.
'image processing' 카테고리의 다른 글
디지털 영상 처리 - 스무딩과 샤프닝 구현하기 (0) | 2021.07.26 |
---|---|
디지털 영상 처리 - 스무딩과 샤프닝 (0) | 2021.07.23 |
디지털 영상 처리 - 풀-칼라 영상 처리 기초 (0) | 2021.07.18 |
디지털 영상 처리 - 의사 칼라 영상 처리 (0) | 2021.07.16 |
디지털 영상 처리 - 칼라 기초 (0) | 2021.07.12 |