Program/OPEN_CV

[Open CV] 기본적인 영상처리 기법 _ 히스토그램 분석

사막여유 2022. 5. 10. 00:17
728x90

 

히스토그램은 영상처리에서만 사용하는 용어가 아닌 통계에서의 데이터 분포를 나타내는 용어이다.

영상에서는 픽셀값의 분포를 나타내는 방법이다.

 

출처 : https://medium.com/@rndayala/image-histograms-in-opencv-40ee5969a3b7

 

위의 이미지를 보면 해당 그레이스케일의 Value를 모아서 분포를 표현해놓은 값이다.

가로축은 각각의 픽셀값을 의미하는데 이를 bin이라고 한다. 보통 GrayScale은 255까지 있다.

 

정규화된 히스토그램 이라고 부르는 표현이 있는데 ( Normalized histogram ) 

이는 각 픽셀의 개수를 영상 전체 픽셀 개수로 나누어 준것이다.

이를 사용하는 이유는 같은 영상의 크기가 다를때는 분포가 달라질 수 있기 때문에 사용하는 방법이다.

이는 기존의 히스토값을 확률로 변환하여 나타낼 수 있다.

 

보통 영상은 히스토그램을 보고 밝은영상인지 어두운영상인지를 구분할 수 있는데 

x축 값의 치우침을 보고 판단할 수 있다.

 * Contrast 가 낮거나 뿌연 영상은 히스토그램이 한 구간에 뭉쳐져있는 경우가 많음

 

 - 히스토그램 구하기 ( cv2.calcHist (images, channels, mask, histSieze, ranges, hist, accumulate )

위 인자들중

images -> 영상 한장 또는 여러장의 히스토그램을 구할 수 있다.

chnnels -> 히스토그램을 구할 채널을 나타내는 리스트 , GrayScale은 [0]의 값으로 정해줄 수 있다. 

histSize -> 히스토그램 각 차원의 크기 ( bin의 개수 ) 를 나타내는 리스트

GrayScale의 영상에 128을 입력하게되면 좀 더 러프하게 Histrogram을 표현할 수 있다.

ranges -> 히스토그램 각 차원의 최솟값과 최대값으로 구성된 리스트 인데 

2개 이상의 차원일 경우 [ 0,256,0,256 ] 와 같은 값으로 설정할 수 있다.

이의 출력값은 numpy.ndarray 로 출력 된다.

 

 

 

위와같이 GrayScale의 Histogram을 나타낼수도 있고

B G R 컬러형태로 로드하여 3번을 계산해서 컬러 히스토그램을 나타낼 수도 있다.

 

 

 

위와같이 컬러영상의 B G R 값을 따로 계산하여 Histrogram 을 계산할 수 있다.

 * lenna.bmp 의 영상 자체의 빨간색이 강하기때문에 Red값이 높은것을 확인할 수 있다. * 이와반대로 녹색부분은 약하게 나타나는 걸 볼 수 있다. ( 그나마 나오는 녹색들은 노란색부분에서    추출됐다고 볼 수 있다 )

 

* plt 는 atplotlib.pyplot 을 객체화 한 것으로 plot 을 이용하게되면 1차원 그래프를 수월하게 그릴 수 있다.

 

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

https://bit.ly/3L3avNW

 

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

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

fastcampus.co.kr

 

728x90