영상처리와 OpenCV

흐짜짜! 🫒 올리브·2021년 1월 3일
0
post-thumbnail

1. 영상처리


참고
영상 처리 기초 정리

-기본 과정

  1. 영상 입력
  2. 전처리
  3. 특징 추출
  4. 인식 및 해석
  5. 결정

-영상처리 기법

  1. 향상 (enhancement) : 영상 해석 용이하게 하기
    대비 향상, 에지 강조, 잡음 제거 등
  2. 복원 (restoration) : 영상의 열화 제거 또는 최소화하기
    잡음 제거, 선명화, 기하학적 왜곡 정정 등
  3. 이해 (understanding -> computer vision) : 영상 해석 및 의미 찾기
    경계/영역/관계 등을 인식하여 자동 검사, 목표물 인식(문자, 사람, 자동차 등) 등
  4. 압축 (compression -> image coding) : 영상의 데이터량 줄이기
    손실/무손실 부호화를 통한 압축 영상의 전송과 저장

2. 얼굴 인식 과정


참고
딥러닝을 이용한 얼굴 인식
기계학습은 즐겁다! part4

  • 얼굴 검출 detection : 이미지에서 얼굴을 찾아낸다
  • 얼굴 식별 identification (1:n) : 여러 사람 중 누군지 찾아낸다.
  • 얼굴 검증 verification (1:1) : 특정 대상에 대해 비교를 통해 일치하는지 확인한다.


1. 이미지에서 '얼굴'을 검출한다. 얼굴의 방향이나 조명 등을 고려할 수 있어야 한다.
2. 얼굴의 '특징'을 찾는다.
3. 특징을 '비교'하여 이름을 결정하여 구분한다.

1) 얼굴 검출하기

-영상 특징점(keypoint/feature) 검출/추출 방법

참고

특징점

특징점이란, 이미지의 특징을 잘 나타낼 수 있는 부분이다.

  • 물체의 형태나 크기, 위치가 변해도 쉽게 식별이 가능한 곳
  • 카메라의 시점, 조명이 변해도 쉽게 식별이 가능한 곳

이러한 조건을 만족하는 가장 좋은 특징점은 Corner point이다.

  • SIFT
  • HOG
  • Haar
  • Harris Corner, FAST,

① SIFT Scale Invariant Feature Transform

특징점을 선택한 후, 각 특징점을 중심으로 어떤 영역(local patch)에 대해 특징 벡터를 추출한 것을 말한다.

DoG(Difference of Gaussian) 기반으로, 인접한 가우시안 블러링 영상끼리의 차이를 이용한다.
특징점 단위 매칭으로 이루어져, 물체의 형태 변화, 크기 변화, 회전 등에 무관하게 매칭이 가능하다.

② HOG Histogram of Oriented Gradient

대상 영역을 일정한 크기의 셀로 분할하고, 각 셀마다 gradient의 크기(magnitude)가 일정값 이상인 픽셀들을 방향에 따라 히스토그램으로 표현한 것이다.

Gradient
방향을 갖는 벡터 (ex.어두워지는 방향으로 그려지는 화살표)

template matching으로, 물체가 회전된 경우나 형태 변화가 심한 경우 검출이 힘들다.

SIFT는 특징점 간 비교이며, HOG는 영역 간 비교이다.

③ Haar

영역 간의 밝기 차를 이용한 것이다. 다음과 같은 다양한 elementary feature들이 존재하며, 이를 조합하여 물체에 대한 특징을 추출한다.

영역 간의 밝기차가 거의 없는 경우, 적용하기 어렵다.
영역 내부에서의 물체의 형태 변화 및 약간의 위치변화를 어느 정도 커버할 수 있다.
하지만 contrast 변화나 광원의 방향 변화로 인한 영상 밝기 변화에 영향을 받는다.
또한 물체가 회전된 경우에는 검출이 힘들다.

2) 얼굴 특징 찾기

#face landmark estimation

얼굴에 존재하는 landmark를 찾아낸다.


눈과 입이 어디있는지 확인하였으므로, 눈과 입이 최대한 가운데로 올 수 있게 이미지를 조정한다. - 얼굴 위치 교정(Posing)과 투영(Projection)

(python dlib 사용하여 구현 가능)

3) 얼굴 구별하기

컴퓨터는 이미지를 흑백으로 처리한 후 특징을 찾기 때문에, 우리가 사람을 구분하는 특징과는 전혀 다른 방식으로 얼굴을 구별한다. 따라서 딥러닝을 이용해 컴퓨터가 스스로 파악하도록 얼굴 구별을 실시한다.
ex. SVM 분류기

2. OpenCV


openCV는 오픈 소스 컴퓨터 비전 라이브러리 중 하나로, 크로스플랫폼과 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다.
즉, 객체·얼굴·행동 인식, 모션 추적 등의 응용 프로그램에서 사용하는 영상처리에 관한 라이브러리이다.

참고

Haar Cascades

Haar Cascade Classifier는 특정 형태의 물체를 찾고자 할 때 사용할 수 있는 대표적인 방법 중 하나이다.
다수의 객체 이미지(positive image)와 객체가 아닌 이미지(negative image)를 cascade 함수로 트레이닝시켜 객체 검출을 달성하는 머신러닝 기반 접근방법이다.

얼굴 검출을 위해서는 얼굴이 있는 이미지/없는 이미지를 classifier에 트레이닝시켜
얼굴에 대한 특징을 추출해 데이터로 저장해두어야 한다.

  • OpenCV에서는 Haar-Cascade 트레이너와 검출기를 모두 제공한다.
    특정 객체를 트레이닝시켜 학습데이터로 저장하고, 학습 데이터를 이용해 특정 객체를 검출한다.
  • OpenCV에서는 이미 얼굴, 눈 등에 대한 미리 훈련된 데이터(xml)를 가지고 있다.

딥러닝

딥러닝 학습은 Cafe, TensorFlow 등의 다른 딥러닝 프레임워크에서 진행하고, 학습된 모델을 불러와 실행할 때는 DNN 모듈을 사용한다.

0개의 댓글