Intro
이전 포스트에서 Optical Flow가 무엇인지 알아봤다. 또한, 3차원에서 2차원으로 압축이 되며 발생한 많은 정보 손실에 대해서도 이야기했다. 이러한 문제를 극복하기 위해 Optical Flow는 몇 가지 가정을 하게 된다. 처음 포스트에서 다루었던 Coherence 개념이 여기서 이름만 바꿔서 다시 등장하게 된다.
Assumptions
2차원으로 압축된 이미지에서 3차원의 움직임을 계산하기 위해서 우리는 가정을 해야만 한다. 이는 현실을 훼손하지 않는 범위 내에서 이뤄져야 하며, 문제를 풀기 위해 중요한 단서가 되어야만 한다.
- Brightness is constant
Bright Constancy는 첫 포스트에서 다뤘던 Image Coherence와 매칭 되는 가정이다. 이는 이미지의 특정 지점, 즉 어떤 픽셀을 봤을 때 그 픽셀과 인접 픽셀들이 같은 색이나 밝기를 갖는다는 가정이다. Computer Vision에서 색/밝기는 픽셀 값으로 나타나니 결국에는 인접하는 픽셀들은 같은 값을 같는다는 것이다.
하지만 이 가정이 실제로 완벽하려면 조명의 변화가 없어야 한다는 전제가 있어야 한다. 또한, 물체와 광원이 이루는 각이 변해도 명암 차이가 발생하지 않아야 한다. 실제로 현실에서는 이런 조건을 만들 수 없다. Optical Flow가 Real World에서 사용되려면 Real World의 법칙을 따라야 할 것이다. 다행인 것은 실제 실험을 해보면 완벽하게 같은 값은 갖지 못하지만, Threshold를 통해 이 가정을 수용할 수 있는 정도의 오차가 대부분이다. 덕분에 우리는 Optical Flow 알고리즘을 설계할 수 있는 중요한 가정을 사용할 수 있다.
- Motion is small
Small Motion은 첫 포스트에서 다뤘던 Time Coherence와 매칭 되는 가정이다. 큰 변화가 있기 위해서는 작은 변화들이 선행되어야 한다. 우리가 다루는 Optical Flow는 연속된 두 Frame에서의 변화기 때문에 작은 변화를 전제로 한다.
연속한 두 Frame에 나타난 물체의 같은 픽셀은 Brightness/Color가 동일하다(픽셀 값이 같거나 비슷하다.)
이 두 Assumption들을 하나로 표현하면 위와 같다. 이는 Optical Flow를 구하기 위한 가장 중요한 가정이니 꼭 알아두도록 하자. 사실 조금만 생각해보면 너무나 당연한 명제이다. 그러나 Computer Vision의 많은 가정들이 그렇듯 생각해보면 당연한 일을 문제를 풀기 위해 가정으로 삼는 과정이라고 생각하면 된다.
Optical Flow Constraint
시간 t에서, 이미지의 한 점 (y, x)의 intensity를 I(y, x, t)라고 하고, t+1에서의 값은 I(y+dy, x+dx, t+1) 해보자. 이 때 첫 번째 가정인 Brightness Constancy을 적용한다면 아래의 A 식을 도출할 수 있다.
위 식에서 우항에 Taylor Series(Expansion)을 적용한다면 아래와 같은 형태(B 식)가 될 것이다.
생략된 항은 2차 이상의 고차항이다. 저 뒤에 남아 있는 중략 표현이 거슬리기 때문에 두 번째 가정을 가져오도록 하자. Small Motion, 연속된 두 Frame의 시간 차이(dt)가 충분히 작은 상황이라고 가정하자. 이때 발생한 dy, dx 역시 충분히 작은 상황이라면 2차 이상의 고차항들은 1차 항에 비해 영향력이 매우 작아지기 때문에 완전 생략이 가능하다.
이때 충분히 작은 시간 차이(dt)의 값은 어떻게 정의할 수 있을까? 정답은 '단순히 정의 내릴 수 없다'이다. 충분히 작은 시간 차이는 dy, dx가 충분히 작은 값으로 유지될 수 있는 값이다. 보통 물체 이동 거리가 몇 픽셀 이내로 포착할 수 있으면 충분히 작은 값으로 본다. 즉, 중요한 것은 단순히 시간이 아니라 그 시간 내의 이동 거리량이 작아야 한다.
잠시 딴길로 벗어났는데 다시 돌아오자. 충분히 작은 시간이라 단순화한 B 식을 A 식에 대입하면 아래와 같은 식이 도출된다.
위 식을 조금 더 단순화하면 우리가 원하는 형태가 나오게 된다. 아래 식은 드디어 변화량에 집중할 수 있게 해 준다. 이 식의 경우 Brightness Constancy를 통해 Taylor Expansion 이후 바로 도출하는 방법도 있지만 차근차근 따라올 수 있게 처음부터 전개를 했다.
위 식에서 dt로 전체를 나누면 아래와 같이 표현된다.
첫 번째 식을 각 항의 의미에 따라 간략하게 표현한 식이 두 번째 식이다. 이 식을 Optical Flow Constraint Equation, OFC라고 부른다. 간혹 Gradient Constraint Equation이라고도 한다. 미분을 통해 Gradient 추정 Optical Flow 알고리즘은 대부분 이 식에서 출발한다. 그러나 이 식 자체로는 Optical Flow를, 나아가 Motion Vector를 구할 수 없는데 그 이유는 아래와 같다.
Apperture Problem
OFC를 조금 더 자세히 들여다보자. 각각의 의미를 살펴보기 앞서 변수와 상수로 구분해보자. 편미분으로 표현된 항들은 Optical Flow를 측정하고자 하는 픽셀의 위치와 값이 특정되면 종속적으로 결정될 상수이다. 그러면 편미분은 상수이고, 나머지 미분으로 표현된 애들은 거기서 발생하는 변수로 볼 수 있다. 여기까지 완벽하게 쫓아왔다면 큰 문제를 발견할 수 있다. 이거 뭔가 이상한데? 식이 이상한 거 아니에요? Brilliant! 너무 훌륭한 질문이다. 위 식은 이상하다. 아니, 정확히 말하면 부족하다. 그전에 OFC 항들의 의미를 짚고 넘어가자.
- 상수
- 변수
상수항을 이루는 세 Vector는 이미지로부터 측정되는 값이며, 이를 이용해 (v, u)를 계산해야 한다. 여기서 이상한 점이 발견된다. 방정식은 하나인데 구해야 할 미지수는 두 개..? 식이 부족하다. 즉, Optical Flow Constraint Equation 식으로는 Motion Vector를 유일한 값으로 특정할 수 없다. 이는 다른 가정이 없이는 한 점에서 발생하는 움직임을 구할 수 없다는 의미이다. 이러한 문제가 조리개 문제, 틈 문제 등 다양한 이름으로 불리지만 그냥 Apperture Problem으로 통용되는 현상이다.
Next
이번 포스트에서는 Optical Flow를 구하는데 중요한 가정들과 수식인 OFC를 유도해봤다. 열심히 따라왔지만 하나의 식으로 구할 수 없음을 알게 되어 좌절감이 들었을 것이다. 그러나 Algorithm Engineer면 식이 부족하면 또 다른 가정을 추가해 식을 채워주면 된다. 미지수가 2개인데 식이 1개면 식을 하나 더 만들자. 실제로 다음 포스트에서 다룰 Lucas-Kanade, Horn-Shunck 알고리즘들에서는 조건을 추가해 방정식의 해를 찾는다. Motion Vector를 찾을 수 있다. 먼저 좀 더 많이 들어봤을 Lucas-Kanade 알고리즘을 살펴보겠다.