Handling Distortion in Camera Calibration
지금까지는 distortion이 없는 ideal lens를 다뤄왔다.
하지만 real lens는 rectilinear projection이 안되는 왜곡된 lens일 수도 있다.
Lens가 물리적으로 symmetric 하기 때문에 distortion도 radially symmetric 한 편이다.
따라서 isotropic transformation으로 radial distortion을 모델링해보면,
$$ QP_i=\begin{bmatrix}\frac{1}{\lambda} & 0 & 0 \\ 0 & \frac{1}{\lambda} & 0 \\ 0 & 0 & 1 \end{bmatrix}MP_i=\begin{bmatrix} u_i \\ v_i\end{bmatrix}=p_i $$
과 같다.
이걸 system of equations로 다시 써보면 아래 식을 얻을 수 있다.
$$ u_iq_3P_i=q_1P_i \\ v_iq_3P_i=q_2P_i $$
하지만 이 system은 더 이상 linear 하지 않으므로, non-linear optimization technique이 필요하다.
다음과 같은 가정이 성립하면, calibration problem의 nonlinear optimization을 더 간단하게 처리할 수 있다.
Radial distortion에서, 두 좌표 $u_i$ 와 $v_i$ 의 ratio(비율)은 영향을 받지 않는다는 것이다.
따라서 비율은 다음과 같이 나타나고,
$$ \frac{u_i}{v_i}=\frac{\frac{m_1P_i}{m_3P_i}}{\frac{m_2P_i}{m_3p_i}}=\frac{m_1P_i}{m_2P_i} $$
n 개의 correspondence가 가능하다고 할 때, 다음과 같은 system을 설정할 수 있다.
$$ v_1(m_1P_1)-u_1(m_2P_1)=0 \\ \vdots \\ v_n(m_1P_n)-u_n(m_2P_n)=0 $$
따라서 이를 우리가 SVD로 풀 수 있는 matrix-vector product의 꼴로 나타내면
$$ Ln=\begin{bmatrix}v_1P_1^T & -u_1P_1^T \\ \vdots & \vdots \\ v_nP_n^T & -u_nP_n^T\end{bmatrix}\begin{bmatrix}m_1^T \\ m_2^T\end{bmatrix} $$
이다.
이렇게 $m_1, m_2$ 를 얻고 나면,
위처럼 $m_3$ 도 $m_1,m_2,\lambda$ 의 nonlinear function으로 표현가능하다.
Appendix A: Rigid Transformations
가장 basic한 rigid transformation으로는 rotation, translation, scaling이 있다.
Rotation
3D상에서의 회전은 각 좌표축을 각각 rotate시킴으로써 표현된다.
관습적으로 counter-clockwise direction(반시계방향)으로 회전하는 게 일반적이다.
회전을 표현하는 여러 방법이 있을 수 있지만, rotation matrix를 사용하는 것이 가장 general하다.
Rotation matrix는 square matrix이면서 orthogonal matrix이고 determinant가 1이다.
Rotation matrix $R$ 과 벡터 $v$ 가 주어졌을 때, 회전된 벡터 $v^\prime$ 은 다음과 같다.
$$ v\prime=Rv $$
또한 각 축을 따라 $\alpha,\beta,\gamma$ 만큼 회전한다고 하면 각 축의 rotation은 다음과 같다.
$$ R_x(\alpha)=\begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\alpha & \sin\alpha \\ 0 &\sin\alpha & \cos\alpha\end{bmatrix} $$
$$ R_y(\beta)=\begin{bmatrix} \cos\beta & 0 & \sin\beta \\ 0 & 1 & 0 \\ -\sin\beta & 0 & \cos\beta\end{bmatrix} $$
$$ R_z(\gamma)=\begin{bmatrix} \cos\gamma & -\sin\gamma & 0 \\ \sin\gamma & \cos\gamma & 0 \\ 0 & 0 & 1\end{bmatrix} $$
행렬곱 순서에 따라, z축부터 시작해 y, x 축 순서로 회전이 되고 $R_xR_yR_z$ 와 같이 표현된다.
Translation
특정 방향으로의 movement를 표현한다.
3D 공간에서 translation vector $t$ 는 3개의 축 각각의 displacement인 $t_x,t_y, t_z$ 로 구성된다.
따라서 한 점 $P$ 에서 $t$ 에 의해 이동된 점 $P^\prime$ 은 다음과 같이 표현된다.
$$ P^\prime=P+t=\begin{bmatrix}P_x \\ P_y \\ P_z\end{bmatrix} + \begin{bmatrix}t_x \\ t_y \\ t_z\end{bmatrix} $$
이를 matrix형태로 나타내면, translation은 homogeneous coordinates를 이용해서 쓸 수 있다.
Translation matrix $T$ 를 다음과 같이 나타내면
$$ T=\begin{bmatrix}1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1\end{bmatrix} $$
$P^\prime=TP$ 가 $P^\prime=P+t$ 와 같음을 확인할 수 있다.
Translation을 rotation matrix multiplication과 결합하고 싶다면, 이번에도 homogeneous coordinate를 사용하면 된다.
만약 벡터 $v$ 를 $R$ 로 회전시키고 $t$ 로 이동시킨다고 하면, 결과 벡터 $v^\prime$ 을 다음과 같이 나타낼 수 있다.
$$ \begin{bmatrix}v^\prime \\ 1\end{bmatrix}=\begin{bmatrix} R & t \\ 0 & 1\end{bmatrix}\begin{bmatrix}v \\ 1\end{bmatrix} $$
Scaling
만약 특정 방향으로 $S_x,S_y,S_z$ 만큼 scaling을 하고 싶다면, scaling matrix는 다음과 같다.
$$ S=\begin{bmatrix} S_x & 0 & 0 \\ 0 & S_y & 0 \\ 0 & 0 & S_z\end{bmatrix} $$
따라서, 만약 특정 vector를 scale하고, rotate하고, translate하고 싶다면,
최종 transformation matrix는 다음과 같다.
$$ T=\begin{bmatrix}RS & t \\0 & 1\end{bmatrix} $$
위와 같은 종류의 transformation들은 모두 affine transformation 의 일종이라는 것을 유의하자.
Appendix B: Different camera Models
Weak perspective model
Weak perspective model 이라는 간단한 모델에 대해서 알아보자.
Weak perspective model은 point들의 scene depth가 camera로부터의 distance보다 상대적으로 많이 작으면 적용할 수 있는 model이다.
쉽게 말하면, 피사체들의 거리가 비교적 다 비슷비슷하고, 피사체와 카메라의 거리가 멀 때를 의미한다.
예를 들어 다음과 같은 그림을 생각하면 이해하기 쉽다.
원래 projective camera model은 다음과 같이 projection이 일어난다.
이와 다르게 weak perspective model은 point 들을 먼저 reference plane에 orthogonal projection을 통해 project를 시킨 뒤,
projective transformation을 통해 image plane으로 project 시킨다.
따라서 project된 point의 좌표가
$$ x^\prime=\frac{f^\prime}{z}x,\quad y^\prime=\frac{f^\prime}{z}y $$
에서
$$ x^\prime=\frac{f^\prime}{z_0}x,\quad y^\prime=\frac{f^\prime}{z_0}y $$
로 가정할 수 있게 된다.
즉, projective model 에서와 달리 weak perspective model의 camera matrix의 마지막 행이 $[0\,\,\,\,0\,\,\,\,0\,\,\,\,1]$ 이 되는 것을 확인할 수 있다.
따라서 위와 같이 3D point를 image plane으로 mapping하는 것도 훨씬 간결해진다.
$$ P^\prime=MP=\begin{bmatrix}m_1\\m_2\\m_3\end{bmatrix}P=\begin{bmatrix}m_1P\\m_2P\\1\end{bmatrix} $$
Orthographic projection model
Weak perspective model 보다 더 simple 한 모델이 바로 이 모델이다.
Affine projection model 이라고도 부른다.
이 모델은 optical center가 무한대에 있다고 가정하는 모델이기 때문에,
projection ray들이 retinal plane과 수직하게 된다.
따라서 이 모델은 depth 자체를 무시하며,
$$ x^\prime=x\\y^\prime=y $$
가 만족하게 된다.
Orthographic projection model은 architecture나 industrial design에서 종종 쓰인다.
정리하면, weak perspective model은 굉장히 수학적으로 간결해지지만, 조금의 부정확함을 감수해야하는 모델이다.
하지만 object가 매우 작거나 카메라로부터 멀리 떨어져있는 경우 굉장히 정확한 결과를 낼 수도 있다.
'3D\Multiview Geometry > CS231A' 카테고리의 다른 글
CH02. Single View Metrology (2) (0) | 2023.02.09 |
---|---|
CH02. Single View Metrology (1) (0) | 2023.02.08 |
CH01. Camera Models (3) (0) | 2023.02.06 |
CH01. Camera Models (2) (0) | 2023.02.05 |
CH01. Camera Models (1) (0) | 2023.02.05 |