CV Lecture 5 - Stereo Matching
by Yeonjee Jung
Stereo Matching
Stereo Matching
($f$:focal length, $p^l, p^r$:image point(left, right), $P$:world point, $Z$:depth of $P$) (length of Baseline을 $t$라고 하자. 그리고 $x_l$은 $O_l$을 기준으로 한 선으로부터 음의 방향으로 $p_l$까지의 거리, $x_r$은 $O_r$을 기준으로 한 선으로부터 양의 방향으로 $p_r$까지의 거리이다.)
그러면 $\triangle(p_l, P, p_r)$과 $\triangle(O_l, P, O_r)$은 닮음이므로
이 성립하므로,
이 성립하는데, 이때 $x_r-x_l$을 disparity라고 하고, $D = x_r-x_l$이라고 한다.
Essential Matrix
회전변환은 없으므로(두 평면이 평행하므로) rotation matrix $R = I$이고, translation matrix $T = [-d, 0, 0]^T$가 된다. 그리고 $E = [T_\times]R = \left(\begin{matrix}0 & 0 & 0 \ 0 & 0 & d \ 0 & -d & 0\end{matrix}\right)$이다. $p_l = [x, y, f], p’ = [x’, y’, f]$라고 하면 $p’^TEp=0$을 이용하여
임을 알 수 있다. 이는 카메라가 평행이동하여 찍은 두 사진에서, 같은 점은 같은 $y$축 좌표가 같아야 함을 알려준다.
Sum of Square Difference (SSD)
왼쪽 사진에서 한 픽셀에 대하여 오른쪽 사진에는 epipolar line이 있을 것이다. 그 epipolar line 위에 있는 모든 픽셀에 대해서, 왼쪽 사진 픽셀과의 차이를 제곱해서 모두 더한다. 그 cost가 가장 작은 것이 best match이다. 그러나 이 방법은 비슷한 패턴들이 많이 나타날 때에는 best match가 많이 나타날 수도 있다.
따라서, ratio distance를 정의한다.
$f_2$는 $f_1$과의 best match이고, $f_2’$는 두 번째 best match이다. 근데 이게 그냥 SSD보다 왜 좋은걸까?
Normalized Cross Correlation (NCC)
SSD와 비슷한데, 점끼리의 차가 아닌 region의 차의 제곱을 계산한다. 중앙에 해당 픽셀이 있고, 그 주위 픽셀까지 정사각형으로 묶는다. 그 두 사각형이 $A$와 $B$라고 하면, 이들을 $a$, $b$라는 벡터로 만든다.
$A$는 고정해 놓고, $B$를 움직이면서 NCC cost를 계산한다. 이 cost가 가장 작은 점이 best match이다. 이 때, window size가 너무 작으면 노이즈까지 전부 세세하게 고려하게 되고, 너무 크면 디테일이 사라지게 되어 적당한 window size를 고르는 것이 중요하다.
Stereo Matching Framework
-
모든 차이에 대해서 raw matching cost를 계산한다. ($E_0(x,y;d)=\rho(I_L(x’+d,y’)-I_R(x’,y’))$) 이때 $\rho$는 robust function인데, input $u$가 작으면 제곱에 가까운 값을, 크면 1에 수렴하는 값을 내놓는다. ($\rho(u;\sigma) = \frac{u^2}{\sigma^2+u^2}$) 폐쇄된 부분(occlusion)이나 튀는 값 때문에 이 함수를 쓴다?
-
cost를 공간적으로 합친다? ($E(x,y;d)=\sum_{(x’,y’)\in N(x,y)}E_0(x’,y’,d)$)
-
각각의 픽셀에 대해 winning disparity를 찾는다. ($d(x,y)=argmin_d(x,y;d)$)
-
sub-pixel accuracy로 보간한다.
Baseline은 너무 작으면 depth를 계산하는 데에 에러가 있을 수 있고, 너무 크면 같은 점 찾기가 어려워진다. 전통적인 Stereo Matching은 디테일한 표면 예측을 하고, 빠른 계산을 할 수 있다는 장점이 있다. 그러나 Baseline이 작으면 노이즈가 많을 수 있고, 질감에 따라 결과가 다르다는 점, 가까운 폐쇄 경계를 찾을 때 어렵다는 단점이 있다?
Data Interpolation
sparse한 3D 점들이 있을 때 이것을 보간하는 방법에는 여러가지가 있는데, 먼저 energy minimization은 에너지의 최소점을 찾는 것이다.
각 항을 미분하면
이고, 우리는 $E_{total}(d)$를 줄이는 것이 목표이기 때문에
으로 만들어 주는 방향으로 가면 된다.
이렇게 iteration을 돌려주면 된다. 이걸 dynamic programming으로 푸는 방법이 있다. 먼저 가장 쉬운 1차원 cost function을 살펴본다. 우선 아까와는 다르게 로 정의한다.
2D에는 이를 적용할 수 없다. ($d_{x,y-1}$과 $d_{x-1,y}$가 서로 다른 $d_{x-1,y-1}$값에 의해 결정되기 때문) 그래서 Graph cuts optimization 이라는 알고리즘을 사용한다.
그래서 그래프컷을 어떻게 사용함?
Terms
disparity : 차이, 이격도
occlusion : 폐쇄
specularity : 반사
sweep : 쓸다
Subscribe via RSS