Histogram

영상에서 히스토그램이란 영상의 밝기값의 분포를 보여주는 그래프로 각 픽셀레벨당 픽셀수를 나타낸 그래프이다.


세로축 : 픽셀값

가로축 : 픽셀레벨

히스토그램의 그래프가 낮은 레벨, 즉 왼쪽부분으로 모인 경우는 어두운 이미지, 오른쪽으로 모인 경우는 밝은 이미지임을 짐작할 수 있다. 뭉쳐있는 레벨들을 펴줌으로서 대비를 높일 수가 있으며 point processing의 기본이면서 널리 쓰이는 매우 중요한 방법 중 하나이다. 그 방법은 아래와 같다.


1. Histogram Stretching

원본의 최소/최대값의 차와 표현하려는 값의 최소/최대값를 이용해서 곱하는 방식

; 특정 밝기 영역에 집중되는 경우에는 효과가 떨어짐.



2. Histogram Equalization

Histogram stretching 방법은 사용자가 범위를 지정해줘야 하는 단점이 있다. Histogram Equalization은 stretching을 자동으로 하기 위한 방법이다. 


  



결과



위의 원본과 비교하였을시 전체적으로 그래프의 간견이 넓어지고(퍼지고) 그래프의 값들이 서로 비슷해짐을 볼 수가 있다. 이미지를 보았을시 상대적으로 대비가 좋아져 밝아졌음을 알 수가 있다. 히스토그램을 보았을 때는 내가 생각한 것과는 다른 모양이었지만 이미지를 보니 제대로 된 것이 아닌가 한다.


3. Histogram Specification

Equalization이 영상의 전체부분을 평활화 한것이라면 Specification은 자신이 원하는 부분만 선택하여 stretching 하는 것이다. 무조건 균일하게 분포시키는 것이 아니라 영상의 히스토그램을 사용자가 원하는 모양의 히스토그램으로 만들고자 할 때 사용한다.보통은 Equalization을 먼저 수행하고 원하는 부분을 한번더 Specification을 한다. 

Equalization과는 반대로 정규화된 누적합이 명도값이 되고, 명도값은 역평활화 값이 된다.


위의 그림은 가장 많은 값이 모여있는 5-9 레벨을 piecewise linear function를 사용하여 2-14레벨로 stretching 한 경우이다.


결과




원래의 Gray이미지를 평활화 한 후 100~227 사이의 128개의 Graylevel에 대하여 각 512를 빈도를 가지를 가지게 명세화를 하였다. 보이는 바에 같이 밝은 영역과 어두운 영역의 중간단계인 회색영역으로 명세화됨을 볼 수가 있다. 명세화에 대한 이해를 제대로 못한건지 히스토그램 평준화시 역변환을 거치는데 이 때 값을 가지지 못하는 level들이 생겨 원하는 레벨로 완전히 치환되지는 않아 자연스러운 이미지는 생성할 수가 없음을 알 수 있었다.


위의 글을 보니 이걸로 과연 이해를 할 수가 있을까 싶다. 티스토리에서 그래프도 지원을 해줬다면 좀 더 쉬운 방법으로 설명이 가능했을 텐데,,

제대로 구현이 된건지 아직도 의심스러운 점이 많다. 특히 Specification의 경우 노이즈가 생기는데 치환이 안되는 값이 있어서 그런것이라 생각은 하지만 자세한것은 모르겠다.

'Study Life > Image Processing' 카테고리의 다른 글

Histogram Equalization & Specification  (0) 2013.04.14
Bit Slicing  (0) 2013.04.01
Negative image  (0) 2013.04.01
Posted by Rsubs

댓글을 달아 주세요