소소한 컴퓨터 이야기

영상 히스토그램 그리기

by Cori

영상 분야에서의 히스토그램에 대해 알아보고, 실제로 그려본다.

 

* 해당 포스팅에서 다루고 있는 모든 내용은 다음 서적을 참고하였습니다.

 

파이썬으로 만드는 OpenCV 프로젝트

“개발자에게 딱 필요한 만큼의 이론과 활용 가능한프로젝트로 배우는 OPENCV 프로그래밍”OPENCV는 영상 처리와 컴퓨터 비전 분야에서 현존하는 가장 영향력 있는 라이브러리이다.이 책은 누구나


히스토그램 

0) 정의

-> 영상 분야에서의 히스토그램은 전체 영상에서 픽셀 값이 1인 픽셀이 몇 개이고 2인 픽셀이 몇 개이고 하는 식으로 픽셀 값이 255이

픽셀이 몇 개인지까지 세는 것을 나타낸다. 이를 통해, 전체 영상에서 픽셀들의 색상이나 명암의 분포를 파악할 수 있다. 

 

1) 히스토그램 함수

-> cv2.calcHist(img, channel, mask, histSize, ranges) 

더보기

· channel: 처리할 채널로, 리스트로 감싸서 표현한다. 1채널: [0], 2채널: [0, 1], 3채널: [0, 1, 2]

· mask: 마스크에 지정한 픽셀만 히스토그램 계산 

· histSize: 계급(bin)의 개수로, 채널 개수에 맞게 리스트로 표현한다. 1채널: [256], 2채널: [256, 256], 3채널: [256, 256, 256]

· ranges: 각 픽셀이 가질 수 있는 값의 범위로, RGB인 경우 [0, 256]으로 표현 

 

2) 그레이 스케일 히스토그램 그리기

3) 컬러 히스토그램 그리기

 

2D 히스토그램

0) 정의

-> 1차원 히스토그램의 경우, 각 픽셀이 몇 개씩인지 세어 그래프로 표현한다.  2차원 히스토그램의 경우 축이 2개고 각각의 축이 만나는 지점의 개수를 표현한다. 

 

ex) r, g, b -> (r, b), (r, g), (b, g)를 축으로 한 그래프 표현 

 

1) 활용

· 대상 이미지

· 코드

2D 히스토그램

계급 수를 256으로 조밀하게 적용할 경우 색상이 너무 작게 표현되어 32정도로 크게 잡았다. 오른쪽의 Blue and Red 그래프를 보면, 

(30, 0)인 지점에서 10,000 이상의 값을 갖는 픽셀이 보인다. 빨강이 차지하는 비중이 많다는 뜻 ! 

 

히스토그램 비교 

0) 정의

-> 히스토그램을 비교하면, 영상에 사용한 픽셀의 색상 비중이 얼마나 비슷한 지 알 수 있다. (영상이 얼마나 비슷한 지 파악 가능 !)

 

1) 히스토그램 비교 함수

-> cv2.compareHist(hist1, hist2, method) 

더보기

· hist1, hist2: 비교할 2개의 히스토그램으로, 크기와 차원이 같아야 한다.

· method: 비교 알고리즘을 선택하는 플래그 상수 

    · cv2.HISTCMP_CORREL: 상관관계 (1: 완전 일치, 0: 무관계, -1: 최대 불일치)

    · cv2.HISTCMP_CHISQR: 카이제곱 상관관계 (0: 완전 일치, 값이 클수록 최대 불일치)

    · cv2.HISTCMP_INTERSECT: 교차 상관관계 (1:완전 일치, 0: 최대 불일치)

    · cv2.HISTCMP_BHATTACHARYYA: 바차타야 상관관계 (0: 완전 일치, 1: 최대 불일치) -> 두 분포의 중첩되는 부분 측정 

    · cv2.HISTCMP_HELLINGER -> HISTCMP_BHATTACHARYYA와 동일 

2) 활용

서로 다른 영상의 히스토그램을 같은 조건으로 비교하기 위해서는 먼저 히스토그램을 노멀라이즈 해야 하는데, 이를 위해 각 이미지를 HSV로 변환하고, H, S 채널에 대한 히스토그램을 계산한 뒤 이를 0~1로 정규화 하였다.

img1은 원본 이미지이기 때문에 완전 일치를 보여주고 있고, 나머지 이미지들은 점점 무상관한 것을 확인할 수 있다.

'AI > Computer Vision' 카테고리의 다른 글

웹캠으로 실시간 움직임 감지하기  (1) 2021.09.26
역투영  (0) 2021.09.25
노멀라이즈, 이퀄라이즈, CLAHE  (0) 2021.09.23
영상 합성과 마스킹  (1) 2021.09.22
두 영상 간 다른 점 찾기 (차영상)  (1) 2021.09.21

블로그의 정보

코딩하는 오리

Cori

활동하기