2024.11.18 - [전공수업/영상처리(C언어)] - [영상처리] 히스토그램 평활화(Histogram Equalization)
* 히스토그램 매칭(Histogram Matching)
히스토그램 매칭은 이미지의 히스토그램을 타겟 이미지의 히스토그램과 유사하게 조정하는 이미지 처리 기법으로, 원본 이미지의 밝기 분포(히스토그램)를 타겟 이미지의 밝기 분포와 일치시킨다.
히스토그램 매칭은 두 이미지가 동일한 누적 분포 함수(Cumulative Distribution Function, CDF)를 가지도록 변환하는 방식으로 이루어진다.
왼쪽 상단의 히스토그램은 원본 이미지의 명암 분포를 나타내며, 이를 통해 누적 분포 함수(CDF)를 생성한다.
이 과정에서 y=H(x)로 표현된 CDF는 밝기 값의 누적 확률을 나타내어, 각 밝기 값까지의 누적 빈도수를 계산한다.
마찬가지로 목표 이미지에 대해서도 y=G(x)로 표현된 CDF가 계산된다.
변환 함수 T(x)는 원본 이미지의 밝기 값을 변환된 값으로 매핑하는 과정에서 목표 이미지의 CDF와 일치하는 결과를 생성하는 변환이다.
그림에서 변환된 값 x′이 목표 이미지의 CDF와 일치하는지 확인하기 위해 H(T−1(x′))=G(x′)라는 조건이 있는데, 이 조건은 원본 이미지의 변환된 값이 목표 이미지와 동일한 누적 분포를 가져야 한다는 것을 의미한다.
최종적으로, 변환 함수는 T(x)=G−1(H(x))로 정의된다.
[ 히스토그램 매칭 과정 ]
① 원본과 타겟 이미지의 히스토그램 및 CDF 계산: 원본과 타겟 이미지의 누적 분포 함수를 계산한다. CDF는 특정 밝기 값까지의 누적 빈도이다.
② 원본 이미지의 CDF로부터 매핑 함수 생성: 원본 이미지의 각 밝기 값에 대해 해당 CDF 값을 찾고 이를 통해 새로운 값으로 변환하는 매핑을 생성한다.
③ 타겟 이미지의 CDF와 일치하는 값 찾기: 원본 이미지의 CDF값과 가장 가까운 타겟 이미지의 CDF 값에 해당하는 밝기 값을 찾는다. 이를 통해 변환 테이블(매핑 함수)을 생성한다.
④ 변환 함수(LUT: Look Up Table) 생성: 원본 이미지의 모든 픽셀 값을 타겟 이미지의 CDF에 맞춰 변환하는 변환 함수를 생성한다.
⑤ 이미지 변환: 원본 이미지의 각 픽셀 값에 대해 변환 함수를 적용하여 타겟 이미지와 유사한 밝기 분포를 가지도록 변환한다. 결과적으로 두 이미지의 시각적 특성이 일치하게 된다.
* 코드
1. 히스토그램 매칭을 위한 LUT 생성 함수
원본 CDF의 각 픽셀 값(sourceCDF[i])을 타겟 CDF의 값(targetCDF[j])과 비교하여, 소스 CDF 값보다 크지 않은 가장 작은 타겟 CDF 값을 찾는다.
해당 타겟 CDF 값의 인덱스(j)가 소스 CDF 값에 대응하는 픽셀 값이 된다.
이 과정을 통해 소스 이미지의 픽셀 값을 타겟 이미지의 히스토그램에 맞추어 변환할 수 있는 LUT를 생성한다.
2. 히스토그램 매칭 함수
원본 이미지의 히스토그램을 타겟 이미지의 히스토그램과 일치시키는 매칭된 이미지를 생성한다.
원본(source) 이미지와 타겟 이미지의 히스토그램과 CDF를 각각 게산하고, createMatchLUT 함수를 통해 원본 CDF를 타겟 CDF에 맞추는 LUT를 생성한다.
원본 이미지의 픽셀 값을 LUT를 통해 변환하여 매칭된 이미지를 생성한다.
* 히스토그램 매칭 결과 영상
Lena.512 영상이 타겟 이미지인 pepper.512 영상의 분포와 유사하게 조정되었다. 매칭된 이미지의 히스토그램은 타겟 이미지의 히스토그램과 유사한 분포를 가지며, CDF도 타겟 이미지와 비슷한 형태로 변환되었다.
따라서, 원본 이미지의 픽셀 값들이 타겟 이미지의 밝기 분포에 따라 재배치된 것을 확인할 수 있다.
livingroom.512 영상에 밝은 레나 영상을 매칭한 결과.
fruits.512 영상에 lake.512 영상을 매칭한 결과.
끝.
'전공수업 > 영상처리(C언어)' 카테고리의 다른 글
[영상처리] Spatial Domain Filtering(공간 영역 필터링) (0) | 2024.12.09 |
---|---|
[영상처리] 히스토그램 평활화(Histogram Equalization) (0) | 2024.11.18 |
[영상처리] Binary Image (OpenCV, C언어) (0) | 2024.10.07 |
[영상처리] 모자이크 처리 (OpenCV, C언어) (0) | 2024.09.30 |
[C] 2차원 배열 동적 할당 (1) | 2024.09.21 |
댓글