안녕하세요. 지난 포스팅에서는 디지털 영상 처리 - 밝기 변환 함수에 대해서 알아보았습니다. 그 중에서도 대표적인 변환인 영상 반전, 영상 로그 변환, 감마 변환 등을 직접 매트랩 코드를 이용하여 구현까지 해보았습니다. 오늘은 좀 더 어려운 개념으로서 히스토그램 처리에 대해서 알아보겠습니다.
코드는 아래 링크에서 다운받으실 수 있습니다.
github.com/skawngus1111/DIP.git
지난 포스팅에서 제가 사용했던 용어 중 영상 대비(contrast)가 있었습니다. 영상 대비란 간단하게 말해서 아래의 그림과 같이 영상 내 에서 객체간 구별이 확연히 차이가 나면 대비가 크다고 표현하고 그렇지 않으면 대비가 작다고 표현합니다.
하지만 이렇게만 말하면 애매모호한 면이 있는 거 같습니다. 더 명확하게 표현하는 방법이 있을까요? 여기서 사용할 수 있는 방법이 히스토그램화(histogramming)입니다. 일단 히스토그램이 무엇인지부터 알아보죠. 예를 들어, [2, 2, 3, 5, 6, 10]의 데이터가 있다고 가정했을 때, 저희가 각 데이터의 분포를 잘 보여주고 싶을 때 히스토그램을 사용할 수 있습니다. 위의 예에서 2는 2번, 3, 5, 6, 10은 각 1번 씩 등장하였습니다. 이를 바 그래프로 그린 것을 히스토그램이라고 합니다. 매트랩에서는 아주 간단하게 한 줄의 코드로 히스토그램을 그릴 수 있습니다.
x = [2, 2, 3, 5, 6, 10];
hist(x)
하지만 저희는 2차원 이상의 영상을 다루기 때문에 영상에서 히스토그램을 어떻게 뽑아내지?...라고 생각하실 수 있습니다. 쉽게 생각하면 됩니다. 영상 역시 배열인 점을 감안하면 히스토그램을 얻을 수 있겠죠. 예를 들어서 보도록 하겠습니다. 위키피디아에서 제공하는 기본 뇌 MRI 영상을 사용하였습니다.
I = imread('../example/MRI.jpg');
subplot(1, 2, 1); imshow(I);
subplot(1, 2, 2); imhist(I);
상단의 그림의 왼쪽을 보시면 전체적으로 어두운 영상입니다. 따라서 오른쪽의 히스토그램에서 전체적으로 0으로 치우쳐있는 것을 볼 수 있습니다. 특히, 머리의 외부 영역은 전부 0으로 채워져있기 때문에 0에 해당하는 값이 엄청나게 많은 것을 볼 수 있습니다.
I = imread('../example/Einstein.jpg');
subplot(1, 2, 1); imshow(I);
subplot(1, 2, 2); imhist(I);
이번에는 전체적으로 밝아보이는 영상을 보면 오른쪽의 히스토그램에서 255 근처에 굉장히 많은 값들이 분포해있다는 것을 알 수 있습니다.
I = imread('../example/low_cont.jpg');
subplot(1, 2, 1); imshow(I);
subplot(1, 2, 2); imhist(I);
낮은 대비의 영상은 어떨까요? 상단에서 왼쪽 그림을 보면 전체적으로 회색조의 영상이 보입니다. 이를 히스토그램으로 그려보면 중앙에 대부분의 값들이 집중되어있는 것을 볼 수 있습니다.
I = imread('../example/high_cont.jpg');
subplot(1, 2, 1); imshow(I);
subplot(1, 2, 2); imhist(I);
마지막으로 높은 대비의 영상을 보면 히스토그램의 분포가 낮은 대비의 영상에 비해서 상대적으로 전체적으로 분포되어있다는 것을 볼 수 있습니다. 상단의 예제를 하나의 그림으로 그려보겠습니다.
이를 정리하면 아래와 같습니다.
- 어두운 영상은 0 근처에 픽셀값이 분포한다.
- 밝은 영상은 255 근처에 픽셀값이 분포한다.
- 낮은 대비 영상은 특정 영역에 픽셀값이 분포되어 있다.
- 높은 대비 영상은 낮은 대비 영상에 비해 전체적으로 픽셀값이 분포되어있다.
이를 통해서 저희는 한 가지 생각해볼 수 있습니다. 만약, 저희가 낮은 대비 영상은 높은 대비 영상으로 바꾸고 싶다면 어떻게 하면 될까요? 바로 한 곳에 몰려있는 히스토그램의 분포를 전체적으로 펼쳐주면 저희가 높은 대비의 영상을 얻을 수 있습니다. 이러한 알고리즘을 히스토그램 평활화(histogram equalization)이라고 합니다. 이에 대한 알고리즘은 다음 포스팅에서 진행하도록 하겠습니다.
'image processing' 카테고리의 다른 글
디지털 영상 처리 - 히스토그램 지정(Histogram Matching) (0) | 2021.03.10 |
---|---|
디지털 영상 처리 - 히스토그램 평활화(histogram equalization) (14) | 2021.02.12 |
디지털 영상 처리 - 밝기 변환 함수 (0) | 2021.01.20 |
디지털 영상 처리 - 디지털 영상 기초 2 (0) | 2021.01.14 |
디지털 영상 처리 - 디지털 영상 기초 1 (0) | 2021.01.08 |