일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- classification
- TD
- dynamic programming
- 그래프 이론
- 인공지능
- BFS
- Reinforcement Learning
- MySQL
- 자료구조
- MinHeap
- canny edge detection
- 딥러닝
- IN
- SIFT
- image processing
- AlexNet
- machine learning
- Mask Processing
- clustering
- edge detection
- DP
- opencv
- 백준
- C++
- 강화학습
- sklearn
- dfs
- Python
- exists
- 머신러닝
- Today
- Total
JINWOOJUNG
Optical Flow(작성 중) 본문
https://gaussian37.github.io/vision-concept-optical_flow/
본 포스팅은 'JINSOL KIM'의 포스팅을 바탕으로 정리한 내용입니다.
기본 개념
Frame은 연속된 영상이 입력될 때 사용되는 용어로, 연속 영상(동영상)을 구성하는 각각의 영상을 의미한다. 단위는 FPS(Frame Per Second)를 사용하며, 기존 이미지 좌표계에서 확장해 시간 축 t를 가진다.
연속적인 Frame이 들어오는 영상에서는 영상 일관성(Coherence)와 시간 일관성의 성질을 가진다.
영상 일관성은 특정 픽셀 $(y,x)$ 의 색상이 주변 픽셀의 색상과 유사한 색상일 가능성이 높음을 의미한다.
시간 일관성은 $t$ 순간의 픽셀 값 $f(y,x,t)$ 는 다음 순간 $f(y,x,t+1)$ 과 유사할 가능성이 높음을 의미한다. 변화량이 적을수록 두 frame 간의 이동량이 작다고 생각할 수 있다.
두 Frame 간의 변화를 계산하기 위해서는 간단하게 위에서 언급한 변화량 개념을 사용하면 된다.
$$f(n)=\left\{\begin{matrix}
1,& |f(y,x,t) - f(y,x,r)| > \gamma \\
0,& else \\
\end{matrix}\right.$$
$r$번째 Frame과 $t$번째 Frame의 픽셀 차이를 계산하여 특정 Threshold $\gamma$보다 변화량이 큰 경우 변화했음을 판단하여 Difference Image를 유도할 수 있다.
하지만 위와 같은 방법으로 영상 간의 차이를 구한다면 오직 고정된 카메라에서만 적용할 수 있으며, 배경과 물체의 색상이나 명암에 큰 변화가 있는 경우 사용할 수 없다. 따라서 실제 영상 내에서 움직이는 물체를 찾아야 한다.
3차원 공간에서 발생하는 물체의 움직임은 2차원 영상에 투영되면서 차원이 축소된다. 따라서, 3차원 공간의 무수히 많은 벡터가 2차원 영상 공간 상의 동일한 벡터로 투영될 수 있다. 이때, 물체의 움직임을 표현하기 위해서, Motion Field 라는 개념이 사용된다.
Motion Field는 3D 공간 상에서 포착되는 모든 물체의 움직임이 이미지에 투영되는 이상적인 표현이다. 즉 움직임이 발생한 모든 점의 변화를 벡터로 얻어낸 2차원 모션 맵이라 할 수 있다. 위 예시처럼 움직이는 픽셀 정보에 대하여 추정이 가능하다.
하지만 이상적인 상황이 아닌 현실적으론 Motion Field를 정확하게 구하는 것은 어렵다.
대표적으론 위 예시처럼 구체 회전과 광원 이동이 있는데, 구처럼 texture가 단조로운 경우 3D 상에서 발생한 회전 변화는 2D 상에서의 변화를 유도할 순 없다.
또한, 구는 회전하지 않았지만 광원이 변함에 따라 2D 상에서의 변화가 유도될 수 있다.
이처럼 발생 가능한 Motion Field에서의 오인식은 Temporal Feature 즉, 시간의 흐름에 다라 변하는 특징의 중요성을 더욱 부각시킨다.
Optical Flow
이전에 설명한 Motion Field를 Optical Field라고도 칭한다. Optical Flow는 Optical Field를 구하기 위해 프레임간 차이를 이용하고 픽셀값과 주변 픽셀들과의 관계를 통해 각 픽셀의 이동(Motion)을 계산함으로써 움직임을 구별 해 낸다.
위 사진처럼 차량의 움직임을 픽셀의 이동으로 표현할 수 있다. 따라서 Optical Flow 문제를 정의하면 각 픽셀의 $I(x,y,t) -> I(x,y,t+1)$를 어떻게 추정한는지 구하는 문제로 정의할 수 있다.
이때 $I(x,y,t) -> I(x,y,t+1)$로 인하여 $f(y,x,t) -> f(y,x,t+1)$가 발생했다고 이해하면 쉽다.
$f(y,x,y), f(y,x,t+1)$이 위와 같이 주어졌다고 가정 해 보자. 특정 객체(삼각형)이 초록색에서 파란색으로 이동하면서, 그에 해당되는 픽셀도 같이 움직이게 된다. 이때, $t$ frame 에서의 어떤 픽셀이 $t+1$의 어떤 픽셀과 대응되는지 구해야 motion vector를 계산할 수 있고, 이 문제가 optical flow 추정의 핵심이다.
Optical Flow는 2가지의 전제 조건을 가진다
1. Color(Brightness) Constancy : 어떤 픽셀과 그 픽셀의 주변 픽셀의 색/밝기는 같다.
2. Small Motion : Frame 간 움직임이 작아서 어떤 픽셀 점은 멀리 움직이지 않는다.
이때 첫번째 조건인 밝기 항상성은 연속한 두 영상에 나타난 물체의 같은 점은 명암값이 같거나 비슷하다는 의미로, 가장 중요한 가정이다.
위 변화를 수식으로 나타내면 다음과 같다.
$$f(y,x,t) = f(y+dy, x+dx, t+dt)$$
$$f(y,x,t) - f(y+dy, x+dx, t+dt) = 0$$
즉 dt동안 dx, dy 만큼의 변화된 픽셀의 색/밝기가 동일하다는 의미이다. 2번째 전제 조건에 의하여 $dx, dy$가 매우 작은 값을 가지고, $dt$가 충분히 작아서 2번째 전제 조건을 만족한다면 테일러 급수를 이용하여 다음과 같이 표현 가능하다.
만약 fps = 30인 영상의 경우 $dt = 1/30$이 된다. 2번 전제조건이 성립하기 위해서는 $dt$동안의 이동 거리량 역시 작아야 함을 의미한다. 따라서 $dt, dx, dy$모두 작기 때문에, 테일러 급수에서의 2차항 이상은 무시 가능하다.
'자율주행' 카테고리의 다른 글
OpenGL Custom Package에서 Include 하기(Ubuntu 20.04) (0) | 2024.01.11 |
---|---|
OpenGL 설치 및 예제파일 실행(Ubuntu 20.04) (1) | 2024.01.04 |