Intro
인간은 어떻게 물체의 움직임을 예측할까? 많은 Computer Vision 분야가 그러듯 Optical Flow 역시 인간의 사고 흐름을 분석하며 발전해왔다. 눈치가 빠른 사람들은 이미 감을 잡았겠지만, Optical Flow는 물체의 움직임을 예측하는데 큰 역할을 한다. 그렇다면 그 이름이 Motion Flow, Object Flow 등이 아니라 왜 하필이면 Optical Flow인가? 이 질문에 답하기 앞서 다시 처음 질문으로 돌아가자.
인간은 어떻게 물체의 움직임을 예측할까?
근육의 움직임을 볼 수도 있고, 경험론적일 수도 있다. 그러다 곰곰이 생각해보면 관성에 의거함을 알 수 있다. 가만히 있는 물체는 가만히 있을 것이라 생각하고, 움직이는 물체는 그 방향으로 나아갈 것을 예상한다. 그래서 공포 영화에 깜빡일 때마다 다른 위치에서 등장하는 초자연적 현상은 보는 이에게 공포를 심어줄 수 있다. 예측이 안되기 때문이다.
Optical Flow는 다른 Computer Vision 분야가 그러듯 인간이 느끼는 바에 아이디어를 가지고 왔다. 이를 통해 전제조건을 만들고, 조건이 부족한 상황에서 답을 찾아 나간다. 이 포스트에서는 그런 전제조건들을 살펴볼 예정이다.
Coherence
앞서 말했듯이 모든 물리 현상은 관성을 따르고, 이를 다른 말로 바꾸면 일관성이 있다. CV에서 우리의 눈은 카메라가 될 것이고, 눈으로 받아들여지는 영상을 Frame 단위로 받아들일 것이다. 영상에서 중요한 일관성은 크게 두 가지가 있고, 이는 불리한 조건에서 해답을 찾게 도와준다.
- Image Coherence
이미지의 특정 지점을 봤을 때, 높은 확률로 인접 픽셀도 유사한 값을 갖는다. 예시가 조금 엉망이기는 하지만 당장 마우스를 만지고 있는 손을 바라봤을 때 이런 일관성을 발견할 수 있다. 살색의 인접 픽셀은 살색을 띤다. 이런 영상 일관성은 다양한 곳에서 활용되는데 가장 쉽게 접할 수 있는 분야는 Edge Detection이다. 인접 픽셀 간 차이가 적은 영역은 같은 물체일 확률이 높고, 차이가 큰 곳은 물체 간 경계면일 확률이 크다.
- Time Coherence
우리가 영상을 볼 때 물체는 연속적으로 움직인다. FPS(Frame Per Second)가 충분히 크다면 순간이동을 하거나, 180도로 delay 없이 방향 전환이 가능한 물체가 있다면 이 포스트에 반박 댓글을 reference URL과 함께 달아주면 감사하겠다(아마 얼마 지나지 않아 뉴스에서 필자를 볼 수 있을 것이다).
즉, 큰 변화가 있기 위해서는 작은 변화들이 선행되어야 한다. 이는 t 순간의 픽셀 값이 f(y, x, t)라고 할 때, f(y, x, t+1) 은 같거나 매우 유사한 값일 확률이 크다. 값이 같은 경우 움직임이 없었다고 추측할 수 있다. 이런 특징을 활용한다면 매우 기본적인 Segmentation을 진행할 수 있다. 두 이미지의 차를 통해 변화량이 큰 물체만 남길 수 있다. 이러한 시간 일관성은 Optical Flow의 매우 중요한 단서가 된다.
Next
이번 포스트에서는 Optical Flow를 Computer Vision 측면에서 계산하기 위한 단서들을 발견했다. 그런데 가장 중요한 것이 빠져있다. 그래서 Optical Flow가 뭔데? 당연히 떠올라야 하는 의문이다. 이번 포스트에서는 의도적으로 Optical Flow가 무엇인지 나오지 않는다. 그저 '물체의 움직임을 계산하기 위한 무언가'라고 인식되었을 것이다. 과연 물체의 움직임을 컴퓨터가 사람처럼 계산하는 게 가능할까? 다음 포스트에서는 Optical Flow가 무엇인지 다룰 것이다. 정말 물체의 움직임을 계산하는 것일까?