Program/OPEN_CV

[Open CV] 객체추척과 모션벡터 _ 배경차분 _ 이동평균배경

사막여유 2022. 6. 27. 08:15
728x90

2022.06.28 금일은 배경차분 이동평균 배경에  관한 강의였다.

 

 

지난 강의에서 사용했던 정적 배경 모델 사용시 문제점을 보자면

 - 미리 등록된 기준 영상이 실제 배경과 크게 달라진 경우 오동작
   그림자 등의 영향으로 인한 조도 변경, 새로운 객체가 화면에 고정될 경우 

그래서 새로 들어오는 영상을 분석하면서 업데이트를 해주는 작업들이 필요하다.

그때 필요한 방법이 오늘 배울 평균 연산이라는 방법이다.

 

평균 영상에 의한 배경 영상 생성

 - 움직이는 객체가 존재하는 수백장의 입력 영상으로부터 평균 영상을 구하면?

 

위 영상을 보게되면 자동차들이 잠깐 나타났다가 화면에서 사라지게 되는데

위와같은 영상을 수백장을 받아서 평균영상을 만든다. 

수백장의 영상이라고 하면 굉장히 많은 것 같지만 초당 30 Frame 이라고 한다면 10초만 촬영하게되도

300장의 영상을 구할 수 있다.

그럼 10초정도의 평균영상을 구해보면 오른쪽의 깨끗한 도로의 영상을 구할 수 있다.

그럼 이 사진을 기준으로해서 움직임을 감시하는 방법을 구현할 수 있다.

 

 - 수백장의 이전 프레임을 버퍼에 저장하려면 대용량 메모리가 필요

그럼 이 수백장의 프레임을 버퍼에 저장하게되면 2~6MB 를 수백장 저장하게되므로 대용량이 필요하게되는데

이를 해결하기 위해서 이동 평균을 사용하게 된다.

 

이동 평균 ( Moving Average ) 이란?

 - 수백장의 영상을 저장하는 대신 매 프레임이 들어올 때마다 평균 영상을 갱신

   이전 프레임까지의 배경영상과 현재프레임의 가중치합을 계산해서 배경영상을 업데이트해서 만들겠다라는 의미

 - 알파라는 가중치를 이용해서 배경을 업데이트할때는 uint8의 정수형이 아닌 소숫점이하의 정보가 보존되어야하기
   때문에 실수형으로 저장해주어야 한다.

 - 대용량 버퍼 메모리가 필요하지 않음

 


이동 평균 계산을 위한 가중치 누적함수

cv2.accumulateWighted ( src, dst, alpha, mask = None ) -> dst

src : 입력영상. 1또는 3채널. 8비트 또는 32비트 실수형

dst : 축적 영상. 입력 영상과 동일 채널 개수 ( 배경영상 )
        32비트 또는 64비트 실수형

* 다른 함수들과 다르게 아래의 수식과같이 입력과 출력으로 인자가 들어가게되면 
  출력값으로 변수를 적어주는게 아닌 함수 인자로 변수를 적어줘야한다.

Ex ) dst = cv2.accumulateWeighted ( src, dst , alpha, mask ) ( X )
                cv2.accumulateWeighted ( src, dst, alpha, mask ) ( O )

alpha : ( 입력 영상에 대한 ) 가중치

mask : 마스크 영상

 * 가중치를 지정하면서 누적시켜 계산


 

위 코드도 전 강의와 동일하게 첫번째 이미지를 배경이미지로 등록한다.

그레이 스케일로 변환한 뒤 가우시안 블러링을 진행해준다.

그리고 fback = back.astype ( np.float32 ) 를 사용하여 실수형 타입으로 변환해준다.

 

이후 입력 동영상도 위와같은 방식으로 등록 및 블러링을 진행해준 뒤 

accumulateWeighted 함수를 사용하여 Moving Average를 진행한다. 이때 fback ( float 타입 ) 을

weighted 함수에 넣는데 이를 absdiff 함수에서 사용하기위해서 다시 uint8로 변환시켜줘야한다.

 

absdiff 라는 함수에 그대로 넣어주면 편할거같지만 absdiff 함수는 두개의 타입이 같아야만 함수가

실행되기때문에.

 

그럼 이 전에 나왔던 영상과는 다르게 배경에 고정되어있던 객체들은 배경으로 처리되어 사라지고

움직이는 객체들만 검출되는 것을 알 수 있다.

 

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

https://bit.ly/3L3avNW

 

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

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

fastcampus.co.kr

728x90