[계산사진학] Histogram Processing

JAEYOON SIM·2021년 10월 6일
0

Computational Photography

목록 보기
10/34
post-thumbnail

Histogram

Histogram은 통계학 시간에 배운 기초 개념으로, 원하는 정보를 일종의 bar 모양의 그래프로 나타낸 것을 말한다. 다음의 예시는 학점 분포 상에서의 학생들의 수를 히스토그램으로 나타낸 것이다.

Histogram of Image

이미지로부터 histogram을 정의하려고 한다. 이때, histogram을 정의할 수 있는 방법은 굉장히 다양하다. 이미지의 픽셀 값 혹은 intensity 값을 기준으로 histogram을 만들어보려고 한다. 이미지의 픽셀 값은 0에서 255로 보통 정의가 되는데, 이 값들을 기준으로 이미지가 해당 intensity 값을 얼마나 가지고 있는지 histogram으로 만들어보자.
x축은 픽셀이 나타내는 intensity 값으로 0부터 255까지 총 256개의 x값들이 분포되어 있으며, 각각의 x값에 해당하는 y값은 해당 intensity를 몇개의 픽셀이 가지고 있는지를 나타낸 것이다. 그러면 우리는 총 256개의 bin을 만들어 histogram을 얻을 수가 있다.
Intensity를 1개씩 해도 되지만, 위와 같이 8개를 묶어서 histogram을 만들 수도 있다. 이렇게 되면 256개였던 bin의 개수가 8개씩 묶여서 32개의 bin만 표현이 된다. 이렇게 histogram을 정의하는 방법은 다양하며, 필요에 따라서 정의하면 된다.

그러면 왜 이미지 상에서 histogram을 사용하는 것일까? 그 이유는 이미지의 brightness나 contrast 등과 같이 이미지를 분석하고 조작하는데 histogram이 유용하게 사용이 되기 떄문이다. 먼저 brightness와 관련하여 다음 예시를 보자.
첫번째 이미지는 육안으로 봐도 굉장히 어두운 것을 볼 수 있다. 두번째 이미지는 상대적으로 밝은 이미지이다. 그러면 어두운 이미지의 histogram은 어떻게 분포가 되어 있을까? intensity를 기준으로 0은 검은색, 255는 흰색을 나타내기 때문에 histogram은 좌측에서 형성되어 있게 될 것이다. 반대로 밝은 이미지는 intensity가 대부분 255에 가까울 것이기에 histogram은 우측에서 형성되어 있다. 우리는 이미지를 기준으로 histogram을 살펴보았는데, 반대로 histogram만으로도 이미지가 어떠한 특징을 보이는지 분석이 가능하다.

다음으로 contrast를 분석해보자. 여기서 contrast라는 용어는 일종의 분포도라고 생각하면 되는데, contrast는 가장 작은 intensity 값과 가장 큰 값의 비율 혹은 가장 어두운 지역과 가장 밝은 지역간의 비율로 생각할 수 있다. Histogram 상에서는 좌우로 얼마나 분포가 되어있는지로 생각하면 된다.
먼저 첫번째 이미지는 색의 분포가 어느 한 곳에 밀집된 것처럼 밋밋하게 보인다. 반대로 두번째 이미지는 밝은 부분과 어두운 부분의 대조가 확실하게 보인다. 이는 intensity 값들이 첫번째 이미지에서는 어느 한 곳에 밀집되어 있기 때문이고, 두번째 이미지에서는 0부터 255까지 골고루 퍼져있기 때문이다. 아무래도 두번째 이미지가 ideal한 상황이 되어 육안으로도 깔끔하게 이미지가 보이게 된다. 그래서 앞으로 ideal한 이미지를 만들거나 찾고 싶으면 histogram이 wide한 것을 찾으면 된다. 이는 high contrast를 의미하며 intensity 값을 모든 픽셀이 골고루 가지고 있어 histogram이 평평하게 보일 것이다.

Histogram Processing

이제 이미지로부터 만들 수 있는 histogram을 어떠한 과정과 작업을 통해서 우리가 원하는 결과로 바꿔보려고 한다. 이 과정을 histogram processing이라고 하며, 2가지 방법에 대해서 살펴볼 것이다. 첫번째 방법은 histogram equalization으로 한 쪽으로 치우쳐 있는 histogram 평평하게 만들어 골고루 분포하도록 만드는 것이다. 이 방법은 이미지 상에서 brightness와 contrast 값을 조절하기 위해서 자주 사용이 된다.

두번째 방법은 histogram matching이다. 이 방법은 histogram을 원하는 특정한 모양으로 바꿔주는 작업니다. Equalization은 단순히 uniformly하기 바꿔주는 반면에 histogram matching은 원하는 대로 histogram을 변형시킬 수 있다.

Histogram Equalization

다음의 이미지를 보자.
위의 이미지의 contrast는 작은 편이다. 그리고 이를 histogram으로 visualization하면 오른쪽과 같다. 이 이미지의 모든 brightness가 histogram의 center 쪽에 모여있는 것을 알 수 있다. 그리고 이를 cumulative하게 표시하면 검은색 선과 같다. 이제 여기에 histogram equalization을 적용하면 다음과 같은 histogram을 얻게 되고, 이에 따라 이미지도 변하게 된다.
Histogram equalization을 적용한 뒤에 histogram의 분포를 보았을 때, 평평하게 되지 않을 수 있다. 그 이유는 intensity 값이 quantization 되어 있기 때문이다. Intensity 값은 0부터 255까지로 정해지게 된다. 그렇기 때문에 완벽하게 평평한 histogram을 기대하기는 어렵다. 그리고 이를 cumulative하게 보았을 때, 그 결과가 얼추 linear하게 되어 있다. 이러한 결과를 보면, intensity 값들은 histogram eqaulization의 목적에 맞게 잘 분포가 된 것을 확인할 수 있다.

그러면 이러한 histogram equalization을 어떻게 할 수 있는 것일까? Histogram의 분포를 바꾸기 위해서는 input 이미지에 어떠한 mapping function을 적용해서 output 이미지로 바꿔줘야 한다. 이러한 mapping function은 cumulative histogram의 관계를 통해서 쉽게 찾을 수 있다.
이렇게 histogram equalization을 적용한 예시를 한 번 보도록 하자.
가장 먼저 intensity 값들이 전부 적은 쪽에 있고 contrast도 적은 경우이다. 이러한 경우에 dark 이미지를 만들게 되는데 이에 대해서 cumulative histogram을 보면 (1)번과 같다.
이번에는 intensity 값들이 전부 큰 쪽에 있고 contrast도 적은 경우이다. 이러한 경우에는 bright 이미지를 만들게 되는데 이에 대해서 cumulative histogram을 보면 (2)번과 같다.
이번에는 intensity 값들이 전부 중간 부근에 있고 constrast도 적은 경우이다. 이러한 경우에는 너무 밝지도, 너무 어둡지도 않은 low-contraste 이미지를 만들게 되며 이에 대해서 cumulative histogram을 보면 (3)번과 같다.
마지막으로 intensity 값들이 골고루 분포가 되어 있는 high contrast 이미지이다. 이러한 경우 애초에 histogram equalziation한 효과와 비슷한 이미지라서 cumulative histogram을 보면 이상적인 linear 모양인 것을 볼 수 있다. 그래도 이러한 이미지라도 histogram equalization을 적용하면 더욱 평평한 결과를 얻을 수 있을 것이다.

Histogram Matching

Histogram matching의 목적은 이미지 histogram을 원하는 모양의 histogram으로 바꾸는 것이다. Histogram equalization과는 다르게 histogram matching은 원하는 target histogram이 존재한다. 이러한 방법은 서로 다른 hisogram을 가지는 2개의 이미지를 가지고 이들을 비교할 때 유용하게 사용이 된다. 가령 같은 장소를 보여주는 이미지라도 낮인지 밤인지에 따라 이미지의 분위기가 다르고, 카메라의 종류에 따라서도 이미지가 다르게 보일 수 있다. 다음의 이미지는 전무 RGB 이미지이며 위성으로 찍은 것이다.
RGB 카메라라고 전부 같은 결과를 보여주는 것이 아니다. 각 채널마다 강조하는 비중을 다르게 설정이 되면 카메라에 찍힌 이미지도 다른 분위기를 보여주게 된다. 위의 예시는 다른 distribution을 보여주는 이미지 2개가 같은 이미지라는 것을 보여주고 싶은 것이다. 2개의 이미지는 각기 다른 color distribution을 가지고 있다. 그렇기 때문에 픽셀별로 비교하는데 어려움이 있다. 같은 지점의 픽셀이라도 다른 값을 가지고 있기 때문이다. 그래서 이를 비교하기 위해서 histogram matching을 사용하게 된다.

Source RGB histogram을 보면 3개의 채널 값의 distribution을 따로 visualization하고 있다. 이는 referece RGB histogram도 마찬가지이다. 여기에 histogram matching을 적용하게 되면 각각의 채널별로 적용이 될 것이다. Source RGB histogram에 histogram matching을 적용하여 reference RGB histogram과 유사하게 만들 수 있다. 그 결과가 output RGB histogram이며 이는 reference의 경우와 얼추 비슷해진 것을 볼 수 있다.

그렇다면 histogram matching은 어떻게 할 수 있을까?
Histogram matching을 위해서는 이를 적용 할 source histogram과 target histogram이 있어야 한다. 우리는 source histogram을 target histogram으로 바꾸는 것이 목표다. Histogram과 마찬가지로 이를 적용 할 mapping function을 찾아야 한다. 사실 histogram equalization은 histogram matching의 특수한 경우라고 생각할 수 있다. Histogram equalization에서의 target histogram은 평평한 경우다. Histogram matching에서의 target histogram은 임의의 histogram이다. 그렇기 때문에 histogram matching에서 mapping function도 각각의 cumulative histogram의 관계를 통해서 찾아낼 수 있다.

profile
평범한 공대생의 일상 (글을 잘 못 쓰는 사람이라 열심히 쓰려고 노력 중입니다^^)

0개의 댓글