Program/OPEN_CV

[Open CV] 기본적인 영상처리 기법 _ 히스토그램 평활화

사막여유 2022. 5. 11. 23:22
728x90

 

히스토그램 평활화란 ( Histogram Equalization ) ?

  - 히스토그램이 그레이스케일 전체구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법이다.

    이는 전날에 알아본 Histrogram Stretching 기법과는 조금 다른 방식의 기법이다.

    누적 분포함수 ( 히스토그램을 누적해서 함수를 만들고 누적된 함수를 이용해서 픽셀값을 변환하는 기법 ) 을 사용

 

예를들면

 

 

 

위 표와 같이 p(g) 함수값을 누적으로 더해서 나오는 값이 cdf(g)로 나오는 결과를 볼 수 있는데 위 표에서 나온 값에

현재 영상 픽셀의 최대값을 곱한 뒤 나오는 소수값들을 반올림하여 정수형태로 사용한다.

 

 

위와같이 최종적으로 평활화 계산된 이후, 기존 픽셀값을 평활화된 픽셀값으로 변형시켜주는 기법이다.

 

출처 : https://1coding.tistory.com/145

 

 * Histogram Stretching 과 Histogram Equalization 의 차이점을 보자면

   히스토그램 스트레칭은 있는 픽셀들을 균일하게 그대로 잡아서 피고

    히스토그램 평활화는 픽셀값이 많이 뭉쳐있는 곳을 더 많이 피고 적게 뭉쳐있는 곳은 많이 피지 않는다

    차이가 있다.

 

실제 OpenCV에서 아래와같은 코드로 간단하게 히스토그램 평활화를 수행할 수 있다.

cv2.equalizeHist

 

 

실제로 위와같이 Histogram Equalization 을 진행하게 되면 밝은 곳은 더 밝아지고 어두운 곳은 더 어두워지는 것을 

볼 수 있다.

 

 * GrayScale 영상뿐 아니라 TrueColor 영상에서도 히스토그램 평활화를 실행할 수 있다.

    직관적인 방법으로 R , G , B 의 픽셀값을 추출하여 히스토그램 평활화를 진행한 뒤 다시 Merge 하여 영상을 만들면

    되지 않을까라는 생각을 했는데 이 방법으로 진행하게 되면 색감이 바뀌어 버리는 경우가 발생하게되어 이렇게

    사용하면 안된다.

    그래서 R , G , B 값을 YCrCb 타입으로 변환하고 밝기값만 추출하여 ( Y ) 히스토그램 평활화를 실행시켜준 뒤 

    다시 Merge하는 방법을 사용하면 된다. 색상성분은 cr cb 는 건들지 않는다.

    여기서 중요한 점은 ycrcb로 변환한 이미지를 다시 B G R 로 변환해주고 실행시켜줘야한다는 점이다.

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

728x90