OpenCV로 배우는 영상 처리 및 응용/ 영상 처리 응용 사례 Ⅰ

2차원 히스토그램을 이용한 이미지 검색

  • 영상 검색하는 방법은 크게 문자기반 검색방법(Text-Based Image Retrieval, TBIR)과 내용기반 검색 방법(Content-Based Image Retrieval, CBIR)로 구분할 수 있다.
    • 이중 내용기반 검색방법은 영상의 색상, 질감, 모양과 같은 해당 영상 데이터의 특징을 자동으로 추출하여 검색에 이용한다.

2차원 히스토그램

  • 크기가 다른 영상들에서 히스토그램을 계산하면 영상간의 히스토그램 빈도값이 동등하지 않게 된다. 즉, 크기가 큰 영상은 화소의 개수가 많아서 각 빈도값이 커지므로 영상간의 동등한 비교를 위해 계산된 히스토그램을 0~1 사이의 값으로 정규화한다.
  • 아래 그림과 같이 2차원 히스토그램의 빈도 데이터는 색상(hue)와 채도(saturation)를 축으로 2차원의 좌표를 구성하고, 각각의 좌표에 색상과 채도를 연관지어 빈도가 계산된다.
  • 이와 같은 2차원 히스토그램을 그림으로 표현하면, 2차원 행렬에서 x 좌표는 채도를 y 좌표는 색상을 나타내도록 하고, 빈도값을 그 좌표에서의 밝기로 지정할 수 있을 것이다.

유사도 비교

  • OpenCV에서 두 영상의 히스토그램이 얼마나 비슷한지를 비교해주는 함수가 cv::compareHist()이다.
    • 비교 방식 옵션 중에서 CV_COMP_CORREL를 지정하면 다음의 수식으로 계산된 값을 반환한다. 이 수식은 상호상관 함수의 수식을 응용한 것으로서 두 히스토그램의 비슷한 정도를 나타낸다.

d(H_{1}, H_{2}) = {\sum_{i}(H_{1}(i) - \bar{H}_{1}) (H_{2}(i) - \bar{H}_{2}) \over \sqrt{\sum_{i} (H_{1}(i) - \bar{H}_{1})^{2} \cdot (H_{2}(i) - \bar{H}_{2})^{2}}}

하르 분류기를 이용한 얼굴검출 및 성별 분류

하르 기반 분류기

  • 2001년 Viola와 Jones는 객체 검출 분야에서 가장 대표적인 방법론으로 인정받는 논문 “Rapid Object Detection Using a Boosted Cascade of Simple Features”를 발표했다.
    • 이 논문에서 얼굴과 얼굴이 아닌 것의 차이를 효율적으로 보여줄 수 있는 하르 유사 특징(Haar-like features)을 이용한 방법을 제안하였다.
    • 하르 유사 특징은 하르 웨이브릿(Haar wavelet)과 유사하기 때문에 붙여진 이름으로서 아래 그림과 같이 위치, 모양, 크기에 따라 다양한 형태로 구성되어 있다. 그 특징값은 흰색 영역의 화소값의 합과 검음색 직사각형 영역의 화소값의 합의 차로 정의된다.
  • 하르 기반 캐스케이드 분류기는 하르 유사 특징과 같은 매우 단순한 특징들을 조합하여 객체를 찾아낸다. 캐스케이드(cascade)란 용어에서 알 수 있듯, 여러 개의 검출기를 순차적으로 사용한다.
    • 처음에 간단한 검출기를 적용하고, 진행할 수록 복잡한 검출기를 적용한다.
    • 따라서 단순 검출기를 통과한 후보에만 시간이 많이 걸리는 강력한 검출기가 적용되기 때문에 검출 속도를 크게 향상시킬 수 있다.
  • OpenCV의 캐스케이드 분류기는 1,000개 이상의 얼굴 영상과 10,000개 이상의 얼굴이 아닌 영상을 사용하여 학습되었다.
    • 이 과정은 일반적인 멀티코어 CPU를 장착한 컴퓨터에서 최대 1주일 정도의 시간이 소요되는데, 다행히 OpenCV에서 미리 학습된 다양한 검출기를 제공한다.
    • 따라서 필요한 종류의 Cascade 분류기 파일을 로드함녀 검출기를 사용하여 분류할 수 있다. 이를 통해 전면 얼굴, 옆면 얼굴, 눈, 코 등을 검출할 수 있다.
    • OpenCV의 \sources\data\harrcascades\ 폴더에 xml 파일로 된 다양한 하르 기반 검출기가 있다.
  • (이하 예제 코드 설명 내용 생략)
[ssba]

The author

지성을 추구하는 디자이너/ suyeongpark@abyne.com

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.