Program/OPEN_CV

[Open CV] 객체추척과 모션벡터 _ 배경차분 _ 정적배경차분

사막여유 2022. 6. 26. 18:19
728x90

2022.06.27 금일은 정적 배경 차분에  관한 강의였다.

 

 

배경 차분 ( Background Subtract : BS )

 - 등록된 배경 모델과 현재 입력 프레임과의 차영상을 이용하여 전경 객체를 검출

 - 움직이는 전경 객체 검출을 위한 기본적인 방법

 

 

차영상이라던데 백그라운드 모델링에대해서는

이전 강의에서도 많이 나온 부분이었기 때문에 바로 소스코드를 보도록 한다.

 

아래 동영상을 보게되면

Background model 영상을 배경으로하는 영상에서

사람들과 차들이 지나다니고 주자되어있는 차도 모두 잡아내는 것을 표현해보려한다.

 

일단 PETS2000.avi 영상을 받아온 뒤 

첫 프레임을 배경영상으로 지정해놓으려고 한다.

 

이때,  Background 를 컬러영상으로 추출해도 문제는 없지만 

꼭 컬러영상이 필요한 것도 아니고, 연산속도를 빠르게 하기 위해서 GrayScale로 변환을 한 뒤 연산한다.

 

그리고 실제 avi 영상의 프레임을 받아올때도 Grayscale 로 변환을해주어서 받아온다.

그런데 배경영상과 현재프레임과의 차영상을 구할때 단순한 뺄셈연산이 아니라 뺄셈을 한 뒤 

절대값을 씌워주는 연산을 해줘야하기 때문에 cv2.absdiff라는 OpenCV 함수를 사용해준다.

 

위 소스코드에서 블러처리를 하기전에는 아래 영상같이 지글지글한 점들이 상당히 많이 검출된다.

자세히 보게되면 라인부분들이 이렇게 노이즈로 검출이 되는데 라인에 빛들이 반사되어서 노이즈가 많이

발생된다고 보고있다.

 

그렇다면 이 노이즈는 어떻게 제거해야할까?

지금까지 배워왔던 노이즈 제거방법을 그대로 적용시키면 된다.

모폴로지를 사용해서 노이즈를 제거하여도되고 필터를 사용해서 노이즈를 제거해도된다.

 

이번에는 가우시안 블러링을 통해서 영상자체의 노이즈를 제거한 뒤 실행시켜보았다.

지글거리는 노이즈가 사라진 것을 볼 수 있다.

 

그럼 여기에 레이블링 함수를 사용하게되면

간단한 침입자 감시 프로그램을 사용할 수 있게된다.

 

 

위와같은 방식은 어떤 조명의 변화 조도의 변화에 굉장히 민감하게 반응할 수 있고

예를들어 자동차가 주차되어서 그 자리에 지속적으로 있으면 해당 자동차를 지속적으로

감시하는 부분이 있을수도 있기 때문에 그렇게까지 좋은 방식은 아니다.

 

따라서 배경모델을 점진적으로 업데이트해서 적응시켜줄 수 있는 방식이 존재하는데 

다음강의에서 계속 설명할 예정이다.

 

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

https://bit.ly/3L3avNW

 

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

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

fastcampus.co.kr

 

728x90