Motion
영상에서 움직임을 감지하는 방법에 대해 알아봅니다.읽는데 4분 정도 걸려요.어떤 사물이 움직이는 사물이라고 정의할 수 있을까?
움직임은 우선 시간이라는 차원이 있기에 존재하는 개념이다.
그렇기에 2차원 영상 기준, 움직이는 영상은 2차원 데이터 + 시간으로 이루어진다.
즉, 시간이 경과했을 때, 특정 픽셀의 변화가 없다면? 해당 픽셀에 해당하는 객체는 움직이는 사물이 아닌 배경이라고 판단하면 되고,
시간이 경과했을 때 픽셀의 변화가 있다면, 해당 픽셀에 해당하는 객체는 움직이는 사물이라고 판단할 수 있을 것이다.
Background Subtraction
원본 영상에서 배경을 빼는 방식으로 움직이는 사물만을 추출할 수 있다.
즉, 원본 영상에서 배경을 추출하는 영역이 가장 중요한 부분인데, 이 배경을 추출하는 방법을 알아보자.
우선 배경(Background)은 시간에 따른 영상 스택에서 픽셀의 변화가 없거나 매우 천천히 변하는 영역일 것이다.
물론 현실에서는 시간변화에 따른 일조량, 그림자 차이 등등 여러 요소가 있기 때문에 배경을 추출하는 방식에는 정해진 방식이 없다.
그렇기에 지금껏 배운 컴퓨터 비전 지식을 총동원해야 한다.
아무튼 배경을 추출했다면, 원본에서 배경을 뺄 수 있을텐데, 그럼 결과물로 어떤 영상이 나올까?
움직이는 객체(foreground object)와 약간의 노이즈만이 나올 것이다.
이렇게 나온 영상에 대해 절댓값을 취하고(음수가 나올 수 있기 때문) thresholding을 하면 foreground object 만 얻을 수 있을 것이다.
이제 특정 시각에서 배경을 추출하는 여러 아이디어를 알아보자.
Frame Differencing
단순히 이전 프레임의 영상을 배경으로 삼는 것이다.
단순해 보이지만, 생각보다 잘 동작한다.
만약 사물의 움직임이 threshold에 걸리지 않을만큼 느려서 인식이 잘 안되는 경우에는 이전 프레임 말고, 10 프레임 이전과 같은 영상을 사용하는 방식을 취할 수도 있다.
Mean Filter
이전 프레임들의 평균값을 배경으로 사용하는 것이다.
Median Filter
이전 프레임들의 중앙값을 배경으로 사용하는 것이다.