공부/영상처리

[영상처리]Graylevel Histograms

오비루 2022. 11. 1. 16:19
728x90
728x90

Graylevel Histograms

ð  히스토그램 = 모든 유형의 데이터 통계를 캡처하는 기술로 각 빈의 발생 횟수를 기록

ð  데이터가 있는 공간 = (bins)

 

graylevel histogram(그레이 레벨 히스토그램) = gray level의 빈도수를 측정하는 것.

è  배열의 각 요소를 0으로 초기화

è  영상의 모든 화소를 확인 후 특정 그레이 레벨이 발생할 때마다 배열의 해당 요소가 증가

è  모든 과정이 완료되면 배열의 각 요소는 특정 그레이 레벨에 대한 화소 수를 저장한다.

Normalized histogram(정규화된 히스토그램)

ð  각 값을 영상의 총 화소 수(width * height)로 나눈다.

ð  최종적으로 0` 사이의 값으로 만든다.(정규화 과정)

Probability density function(PDF , 확률 밀도 함수)

ð  정규화 된 막대 그래프 (0~1의 값을 갖는다)

 

Interpreting Histogram(히스토그램 해석)

ð  히스토그램을 통해 영상에 대한 정보 분석이 가능하다.

ð  objectbackground를 구분할 때 사용 가능

ð  contrast 정보나 overall intensity distribution을 알 수 있다.

왼쪽   : 높은 대조와 많은 어둡고 밝은 화소로 구성된 영상

가운데 : 낮은 대조를 가진 어두운 영상 (작은 빈의 값이 크면 어둡다)

오른쪽 : 좋은 노출을 가진 높은 대조의 영상

 

영상의 contrast가 낮음 = 히스토그램의 모든 값이 비교적 좁은 범위에 집중된다.

영상의 contrast가 높음 = 히스토그램이 전체 범위에 걸쳐 값이 분산된다.

 

728x90

 

Histogram Equalization(히스토그램 균일화)

ð  low contrast 영상의 contrast를 높이려면, 허용 값 범위내의 화소 값을 균일하게 분배.

ð  이 방법은 매개변수가 필요하지 않으며 자동으로 출력된다.

 

CDF = 누적 분포 함수

(Cumulative Distribution Function)

è  이는 PDF를 누적한 값을 의미

 

CDF의 최종 누적 합계는 1이다. (= 모든 PDF를 더하면 1이 나옴)

각각의 화소 밝기들의 빈도수를 그래프로 표현.

위의 이미지를 정규화 시키면 다음과 같은 그래프가 나타난다.

이때의 각각의 화소 밝기들은 반올림을 통해 정수값에 더 가까운 값을 갖게 된다.

 

여기에 CDF * input 개수 = output LUT는 다음과 같다.

원본 이미지를 위 사진의 LUT를 통과하면 equalized 이미지로 나타나게 된다.

위의 화소 밝기를 보면 이전 normalized histogram과는 다르게 균일한 밝기를 갖게 됨을 확인 가능하다.

 

 

하단의 사진은 어두운 화소가 많이 몰려 있기 때문에 어두운 사진이겠다는 유추가 가능하다.

CDF구하는 법 = PDF를 계속 적분.

CDF * 255를 하여 Scaled up 한 그래프를 통해 이전 그레이 레벨로부터 새 그레이 레벨로 매핑이 된 새로운 z’(derived Random valiable)의 값을 저장한다.

이렇게 변환된 z’을 그리면 다음과 같은 평행한 PDF가 나타나며, 영상대비와 화질이 높아지는 기대효과를 갖게 된다.

 

 

Histogram Matching(=Specification)

ð  더 밝거나 어둡고, contrast는 더 높이거나 낮추기 위해서 사용(원하는 대로 하기 위해)

ð  평평한 경우가 아닌 내가 원하는 형태의 히스토그램을 그리고자 할 때 사용

è  입력 영상 + desired(reference) histogram 을 넣어야 수행.

è  Histogram equalization + inverse histogram equalization 이 수행 돼야함

 

320x100

 

 히스토그램 매칭이 두단계로 이루어진 이유.

왼쪽 = equalization 할 때 사용했던 그래프

히스토그램 (= PDF)을 통해 CDF를 구해낼 수 있다.

이때 Original gray levelz의 값에서 Scaling up 된 값(*255한 경우)가 아닌 그냥 CDF의 값으로 mapping이 된다고 생각하면 된다.

 

오른쪽 = 원하는 히스토그램인 reference(desired) histogram 을 이용해서 나온 CDF이다.

해당 histogram의 경우 정방향. , z’에서 CDF의 값을 찾는 순서가 아닌 역방향(inverse)으로 mapping을 수행한다. [c’ref -> z’의 값을 찾는 형태]

 

따라서, 왼쪽 그림을 통해 얻은 c(z)와 동일한 값을 crefmapping을 시켜준다.

이후 최종적으로 inverse histogram equalization을 수행하면 Original(input) z Transformed(output) 에서는 z’으로 mapping이 된다.

 

 

LUTf[.]로 나타냄. (LUT = 256개만 있으면 됨, 화소값)

L’255에서부터 줄여가면서 mapping을 시키는데, input & output cdf가 가장 유사한 지점까지 반복하다가 유사한 지점이 나오면 해당 값(범위내 숫자 중 가장 작은 값)을 최종적으로 array에 넣는다.

728x90
반응형