히스토그램은 영상처리에서만 사용하는 용어가 아닌 통계에서의 데이터 분포를 나타내는 용어이다.
영상에서는 픽셀값의 분포를 나타내는 방법이다.
위의 이미지를 보면 해당 그레이스케일의 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차원 그래프를 수월하게 그릴 수 있다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 기본적인 영상처리 기법 _ 히스토그램 평활화 (0) | 2022.05.11 |
---|---|
[Open CV] 기본적인 영상처리 기법 _ 영상의 명암비 조절 (0) | 2022.05.10 |
[Open CV] 기본적인 영상처리 기법 _ 컬러 영상과 색 공간 (0) | 2022.05.08 |
[Open CV] 기본적인 영상처리 기법 _ 영상의 산술 및 논리 연산 (0) | 2022.05.07 |
[Open CV] 기본적인 영상처리 기법 _ 영상의 밝기 조절 (0) | 2022.05.06 |