영상 히스토그램 그리기
by Cori영상 분야에서의 히스토그램에 대해 알아보고, 실제로 그려본다.
* 해당 포스팅에서 다루고 있는 모든 내용은 다음 서적을 참고하였습니다.
히스토그램
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) 활용
· 대상 이미지
· 코드
계급 수를 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