Search
Duplicate

AI/ StereoBM, StereoSGBM

StereoBM은 Stereo 카메라의 두 이미지에 대해 block matching을 통해 disparity map을 찾는 방법이고 StereoSGBM은 StereoBM의 개선 버전이다.
두 방법 모두 Stereo 이미지가 rectified (두 이미지의 행 또는 열이 정렬된 상태)일 것을 가정하므로, StereoBM과 StereoSGBM을 수행하려면 그 전에 두 이미지에 대한 rectify를 수행해야 한다. 이미지가 rectified 된 상태라면 기준 이미지(일반적으로 왼쪽 카메라)를 이용하여 대상 이미지(일반적으로 오른쪽 카메라)의 동일한 행(y 좌표)에 대해서만 매칭 검색을 수행할 수 있다.
StereoBM 계열의 방법들은 모두 별도의 특징점을 추출하지 않고 픽셀값만 사용하여 매칭을 수행한다.

StereoBM

StereoBM은 block 단위로 매칭 포인트를 찾는 방법이다. (그래서 이름이 block matching이다.) 우선 각 픽셀 (x,y)(x, y)를 중심으로 두 이미지에서 N×NN \times N 크기의 블록을 설정한다. 예컨대 N=5N =5이면 5×5=255 \times 5 = 25개의 픽셀에 대해 비교를 수행한다.
기준 이미지의 블록에 대해 동일한 행의 대상 이미지의 블록에 대해 다음의 절대값 오차(Sum of Absolute Difference)를 계산한다.
SAD(x,y,d)=i=rrj=rrIL(x+i,y+j)IR(x+id,y+j)\text{SAD}(x,y,d) = \sum_{i=-r}^r \sum_{j=-r}^r |I_L(x+i, y+j) - I_R(x+i-d, y+j)|
여기서 r=N12r = {N-1 \over 2}의 블록의 반경에 해당하고, dd는 사용자가 정의하는(예: 16, 64 등) disparity 값이다.
알고리즘은 해당 disparity 값 내에서 모든 disparity 값을 시도한다. 예컨대 사용자가 disparity 값을 64로 설정하면 알고리즘은 disparity 값을 0에서 63까지 변경하면서 비용함수를 계산한다.
위의 식은 각 픽셀 별로 대응하는 픽셀 값과의 절대값 차이를 구한 후 block 내 모든 값을 합산하는 것을 의미한다. 이렇게 구한 값 중에 disparity 값을 최소화하는 값을 찾으면 최적 disparity 값이 된다.
d(x,y)=argmindSAD(x,y,d)d^*(x, y) = \arg \min_d \text{SAD}(x, y, d)
이렇게 픽셀별로 구한 최적 disparity dd^* 값에 대해 d>0d^* > 0인 값을 이용하여 focal length와 baseline과 다음과 같이 계산하면 최종적으로 depth map을 구할 수 있다.
z=focal length×baselinedz = {\text{focal length} \times \text{baseline} \over d^*}

StereoSGBM

StereoSGBM은 SAD(Sum of Absolute Difference) 대신 Census Transform이나 Hamming Distance 같은 비용함수를 사용하고, 여러 방향에서 정보를 집계하여 보다 일관성있는 시차값을 계산한다. StereoSGBM이 StereoBM에 비해 더 많은 계산을 사용하므로 결과 품질이 더 좋지만 더 비싸다.
예컨대 Census Transform을 사용한 비용함수는 다음과 같이 정의된다. (아래는 예시일 뿐, 다른 거리 함수를 사용하는 것도 가능하다)
Cost(x,y,d)=Hamming Distance(C(IL(x,y)),C(IR(xd,y)))\text{Cost}(x,y,d) = \text{Hamming Distance}(C(I_L(x,y)), C(I_R(x-d,y)))
여기서 CC는 Census Transform
StereoSGBM은 이러한 비용함수를 이용하여 다음과 같이 8방향에서 대해 비용을 집계한다.
Lr(p,d)=Cost(p,d)+min(Lr(pr,d),Lr(pr,d±1))+P1+P2L_r(p,d) = \text{Cost}(p,d) + \min(L_r(p-r,d),L_r(p-r,d\pm1)) + P_1 + P_2
여기서 Lr(p,d)L_r(p,d)는 방향 rr에서의 누적 비용이고, P1,P2P_1, P_2는 smoothing 파라미터이다.
8방향에서 집계된 비용을 합산하여 최종 비용을 계산한다.
S(p,d)=r=18Lr(p,d)S(p,d) = \sum_{r=1}^8 L_r(p,d)
StereoBM과 같이 최소 비용을 가지는 시차값을 선택하여 disparity map을 구성한다.
d(x,y)=argmindSAD(x,y,d)d^*(x, y) = \arg \min_d \text{SAD}(x, y, d)