10-1. 배경 차분: 정적 배경 차분

정적 배경 차분

    등록된 배경 모델과 현재 입력 프레임과의 차영상을 이용하여 움직이는 전경 객체 검출을 위한 기본적인 방법

정적 배경 차분 원리 (출처: FastCampus)

    정적 배경을 이용한 전경 객체 검출 방식은 다음과 같이 구현할 수 있다.

#import sys
#import numpy
#import openCV

# read video file
# check whether the file is read successfully

# read the first frame to save it as background image
# check whether the frame is read successfully

# convert the background image to grayscale
# use Gaussianblur to filter the noise if needed

# infinite loop
 # read next frame
 # check whether the frame is read successfully
 
 # convert the frame to grayscale
 # use Gaussianblur to filter the noise if needed
 
 # use absdiff function to calculate difference between the background and current frame
 # Binariation of difference image
 
 # use connectedComponentsWithStats function to do labeling on the difference image
 
 # loop through labels
  # read each stats
  # check whether stats value is over certain value
  # if not, skip
  # if it is, draw rectangle around labeled components
 
 # if ESC key is pressed in certain period, break the loop

# close the video object
# destroy all windows

움직이는 객체 인식 결과 프레임적 예시.

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.


10-2. 배경 차분: 이동 평균 배경

이동 평균 배경

    정적 배경 모델의 문제점은 동영상에서 보다 시피 그림자 등의 영향으로 인한 조도 변경, 새로운 객체가 화면에 고정되는 경우 미리 등록된 기준 영상이 실제 배경에서 달라지기 때문에 오동작하는 경우가 발생

     이에 따라, 하나의 정적 배경이 아닌 수백 장의 입력 영상으로부터의 평균 영상을 추출하여 배경 영상을 생성하는 아이디어 탄생했지만, 수백 장의 이전 프레임을 버퍼에 저장하려면 대용량의 메모리가 필요해진다.

    대신 이동 평균(Moving Average), 매 프레임이 들어올 때마다 평균 값을 갱신하는 방식을 사용

     대용량 버퍼 메모리가 필요해지지 않는다.

이동 평균을 사용한 배경 영상 연산 방식 (출처: FastCampus)

    이동 평균 계산을 위한 가중치 누적 함수: cv2.accumulateWeighted(src, dst, alpha, mask) -> dst

     src는 1 or 3 채널, 8- or 32-bit 실수형 입력 영상

     dst는 입력 영상과 동일한 채널 개수를 갖는 32- or 64-bit 실수형 축적 영상

     alpha는 입력 영상에 대한 가중치

     mask는 마스크 영상

가중치 누적 함수 원리 (출처: FastCampus)

     정적 배경 코드에서 추가되는 점

      1. 각 읽어오는 비디오 프레임 영상의 32-bit 실수형 타입 변환

      2. 차영상 계산 전 32-bit 실수형 타입 정적 배경을 dst로써 가중치 누적 함수를 사용하여 이동 평균을 사용한 배경 영상 연산 후 8-bit unsigned int 형태 변환

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.


10-3. 배경 차분: MOG 배경 모델

MOG (Mixture of Gaussian)

    각 픽셀에 대해 MOG 확률 모델을 설정하여 배경과 전경을 구분하는 방식으로 Gaussian Mixture Model(GMM)이라고도 불린다.

     Gaussian을 활용한 다양한 배경 모델 구성 방법이 있는데 이 논문을 Adaptive GMM 참고 자료로 제공해주셨다.

다양한 배경 모델 구성 방식 (출처: FastCampus)

    OpenCV이 제공하는 배경 추정 알고리즘: cv2.BackgroundSubtractor 클래스 (링크)

cv2.BackgroundSubtractor 구성도 (출처: OpenCV, FastCampus)

    BackgroundSubtractorMOG2 클래스 생성 함수: cv2.createBackgroundSubtractorMOG2(, history, varThreshold, detectShadows) -> <cv2.BackgroundSubtractor(MOG2) object>

     history는 히스토리의 길이로 기본값은 500

     varThreshold는 픽셀과 모델 사이의 마할라노비스 거리(Mahalanobis distance) 제곱에 대한 임계값으로 해당 픽셀이 배경 모델에 의해 잘 표현되는지를 판단하는 척도로 쓰인다. 기본값은 16

     detecShadows는 그림자 검출 여부로 기본값은 True

    전면 객체 마스크 생성 함수: <cv2.BackgroundSubtractor object>.apply(image, fgmask, learningRate) -> fgmask

     image는 새로운 비디오 프레임

     fgmask는 8-bit 이진 형태의 전경 마스크 영상

     learningRage는 배경 모델 학습 속도 (0~1 사이의 실수를 사용하되 기본값은 -1로 자동으로 결정된다. 0일 경우 배경 모델을 갱신하지 않으며, 1일 때는 매 프레임마다 배경 모델을 새로 만든다.)

    배경 영상 반환 함수: <cv2.BackgroundSubtractor object>.getBackgroundImage(, backgroundImage) -> backgroundImage

     backgroundImage는 학습된 배경 영상을 출력

 

     정적 배경 코드에서 수정되는 점

      1. BackgroundSubtractorMOG2 클래스 객체를 생성

      2. 차영상 계산 대신 전면 객체 마스크 생성 함수와 배경 영상 반환 함수를 사용해 이동 객체를 검출한다.

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.


인증 타임

AI를 사용한 움직이는 객체 인식 예제를 볼 때마다 딥러닝을 구현해야만 할 수 있는 것인줄 알았는데 기준 배경 영상을 기준으로 움직이는 객체만을 판단하는 방식들도 다양하게 있다는 것을 배울 수 있어서 좋았다. 기준 배경 영상이 있어야만 하고 완전히 다른 프레임에서 판단하는 경우 새로운 기준 배경 영상을 제공해야한다는 단점이 있긴 하지만 딥러닝 네트워크까지 구현해서 검출하기에 부담스러운 정도의 작은 영상 정도라면 충분히 사용 가능해 보인다.

 

10-1. 공부 인증 영상
10-2. 공부 인증 영상
10-3. 공부 인증 영상


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online

 

패스트캠퍼스(FastCampus) 강의 둘러보러 가기 

   

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.


 

+ Recent posts