노멀라이즈, 이퀄라이즈, CLAHE
by Cori노멀라이즈와 이퀄라이즈, CLAHE가 무엇인지 알아보고, 이 개념들이 실생활에서 어떻게 적용되는지 실습을 통해 알아본다.
* 해당 포스팅에서 다루고 있는 모든 내용은 다음 서적에서 확인할 수 있다.
노멀라이즈 (정규화)
0) 정의
-> 원래 기준이 다른 값을 같은 기준이 되게 만들거나, 특정 부분에 몰려 있는 값을 전체 영역으로 골고루 분포되게 하는 것
· 20문제 중 19문제를 맞힌 A와 25문제 중 20문제를 맞힌 B 점수 비교..
· 전교생 5명이 각각 95, 96, 97, 98, 100점을 받았을 경우 -> 70 ~ 100점 구간으로 점수 환산
영상 분야에서는 노멀라이즈를 통해 픽셀 값들이 0~255에 골고루 분포하지 않고 특정 영역에 몰려 있는 경우 화질을 개선하거나 영상 간 연산을 수행할 수 있도록 만든다.
1) normalize 함수 구조
-> dst = cv2.normalize(src, dst, alpha, beta, type_flag)
· src: 노멀라이즈 이전 데이터
· dst: 노멀라이즈 이후 데이터
· alpha: 노멀라이즈 구간1
· beta: 노멀라이즈 구간2, 구간 노멀라이즈가 아닌 경우 사용하지 x
· type_flag: 알고리즘 선택 플래그 상수
· cv2.NORM_MINMAX: alpha와 beta 구간으로 노멀라이즈
· cv2.NORM_L1: 전체 합으로 나누기 (alpha = 노멀라이즈 전체 합)
· cv2.NORM_L2: 단위 벡터로 노멀라이즈
· cv2.NORM_INF: 최대 값으로 나누기
2) 활용
막 눈에 띄는 차이는 보이지 않지만, 정규화 되었다고 한다.. 아무튼 그렇다고 한다..
2. 이퀄라이즈 (평탄화)
0) 정의
-> 노멀라이즈의 경우 분포가 한 곳에 집중되어 있는 경우에는 효과적이지만, 집중된 영역에서 멀리 떨어진 값이 있을 경우에는 효과 x
ex) 전교생 5명의 점수가 70, 96, 98, 98, 100으로 나왔다면 구간 노멀라이즈로는 새로운 70~100 분포로 만들어도 결과가 동일하다.
(기존의 범위와 새로운 범위가 같기 때문)
이퀄라이즈는 히스토그램으로 빈도를 구해서 그것을 노멀라이즈한 후, 누적값을 전체 개수로 나누어 나온 결과 값을 히스토그램 원래 픽셀 값에 매핑한다. 각각의 값이 전체 분포에 차지하는 비중에 따라 분포를 재분배하기 때문에, 명암 대비(contrast) 개선에 효과적 !
히스토그램을 계산한 후, 누적 히스토그램을 구한다. 이후 0인 값을 NaN으로 제거 - np.ma.masked_equal(cdf, 0) - 하고, 이퀄라이즈 히스토그램을 계산한다. 이후, NaN을 다시 0으로 환원하고, 히스토그램을 픽셀로 매핑하여 이퀄라이즈를 수행한다.
1) equalize 함수 구조
-> dst = cv2.equalizeHist(src[, dst])
· src: 대상 이미지, 8비트 1채널
· dst: 결과 이미지
2) 그레이 스케일 이미지에 이퀄라이즈 적용하기
이퀄라이즈를 수행하고 나니 이미지가 좀 더 밝아진 것을 확인할 수 있다.
3) 컬러 이미지에 이퀄라이즈 적용하기
BGR 컬러스페이스의 경우 밝기 값을 개선하기 위해 3개 채널을 모두 개선해야 하기 때문에, 히스토그램 이퀄라이즈를 컬러 스케일에
적용할 경우 BGR 컬러스페이스보다는 YUV나 HSV로 변환하여 밝기 채널만을 연산해 최종 이미지에 적용하는 것이 좋다.
* HSV 적용
-> img_yuv 부분을 img_hsv[:,:,2] = cv2.equalizeHist(img_hsv[:,:,2]) 로 바꿔서 적용
3. CLAHE (Contrast Limiting Adaptive Histogram Equalization)
0) 정의
-> 영상 전체에 이퀄라이즈를 적용했을 때 너무 밝은 부분이 날아가는 현상을 막기 위해 영상을 일정한 영역으로 나눠서 이퀄라이즈를
적용하는 것으로, 노이즈가 증폭되는 것을 막기 위해 어느 히스토그램 계급(bin)이든 지정된 제한 값을 넘으면 그 픽셀은 다른 계급으로
배분하고 나서 이퀄라이즈를 적용한다.
1) CLAHE 함수 구조
$ clahe = cv2.createCLAHE(clipLimit, tileGridSize)
$ clahe.apply(src)
· clipLimit: Contrast 제한 경계 값으로, 기본 40.0이다.
· tileGridSize: 영역 크기로, 기본 8 x 8이다.
2) 활용
테이블의 무늬까지 보인다..
이미지 촬영을 했을 때, 빛이 너무 많이 들어가 이퀄라이즈를 적용한 사진이 밝은 부분에 대해 날아갔을 경우, CLAHE를 적용해보자.
'AI > Computer Vision' 카테고리의 다른 글
역투영 (0) | 2021.09.25 |
---|---|
영상 히스토그램 그리기 (0) | 2021.09.24 |
영상 합성과 마스킹 (1) | 2021.09.22 |
두 영상 간 다른 점 찾기 (차영상) (1) | 2021.09.21 |
영상 합성 (알파 블렌딩) (0) | 2021.09.20 |
블로그의 정보
코딩하는 오리
Cori