3D Computer Vision 관련 자료는 Minnesota 대학교 박현수 교수님의 CSCI 5563
자료를 사용하였습니다.
https://www-users.cse.umn.edu/~hspark/csci5563_S2021/csci5563.html
현실 세계에서 서로 평행한 직선들은 서로간의 접점이 존재하지 않습니다. 하지만 현실 세계에서 평행한 직선들이 영상에 투영되게 되면 평행한 직선들이 모이는 지점이 생기게 됩니다. 이 직선들이 모이는 지점을 소실점(Vanishing Point) 이라고 부릅니다.
여기서 몇가지 특징이 존재하는데 그림 2.의 바닥을 보시면 여러개의 평행한 선이 존재하는데 이 평행한 선은 모두 한개의 소실점으로 모인다는 것 입니다. 이말은 즉 실제 공간에서 평행한 직선들은 모두 하나의 소실점으로 모인다는 것 입니다.
또한 바닥 면과 위 천장 면의 직선들 또한 같은 소실점으로 모이는 것을 보았을 때 우리는 동일한 평면에 존재하지 않더라도 평행하기만 하다면 영상에서는 모두 같은 소실점을 갖는다는 것을 알 수 있습니다.
이를 그림을 통해 다시 보도록 하겠습니다.
우선 하나의 직선이 존재하고 이 직선을 카메라로 촬영하는 상황을 가정해 보겠습니다.
그림 4. 에서 보이는 것 처럼 직선을 촬영하게 되면 점들이 하나씩 소실점 방향으로 투영되는 것을 알 수 있습니다.
다음은 소실점을 통해 알 수 있는 특성 몇가지를 알아보도록 하겠습니다.
초록색 직선과 평행한 직선 파란색 이 있다고 가정했을 때 두 직선은 평행하므로 하나의 소실점을 갖습니다.
카메라의 중심과 소실점을 통과하는 3D 직선을 그려보게 되면 다른 선들과 평행한 특성을 갖는 것을 알 수 있습니다.
그림 6.에서 보이는 것과 같이 평행한 두선의 접점인 소실점은 기준이 되는 평행선에 따라서 여러개가 존재할 수 있습니다.
정리해보면 소실점은 3가지 특성을 가지고 있습니다.
1) 영상에서 같은 소실점에서 만나는 직선들은 실제 세계에서는 평행하다.
2) 카메라 중심과 소실점을 통과하는 3d 직선은 다른 선들과 평행하다.
3) 여러개의 소실점이 존재할 수 있다.
지금까지 소실점에 대해서 알아보았습니다. 다음은 소실선(Vanishing Line)에 대해 알아보도록 하겠습니다.
앞서 서로 평행한 직선은 갖은 소실점을 갖는다고 말씀 드렸습니다. 이는 즉 그림 8.과 같이 서로 다른 평행한 직선이 존재할 경우 서로 다른 소실점이 생성된다는 것을 의미하게 되고 이렇게 생성된 서로 다른 소실점들을 통과하는 하나의 선이 바로 소실선(Vanishing Line) 입니다.
여기서 중요한 점이 하나 있는데 모든 소실점들이 다 일직선으로 이어지지는 않습니다.
일직선으로 이어지는 소실점들은 같은 평면에 존재하거나 또는 평행한 평면사이에 존재하는 평행한 직선들에 의해 생성된 소실점들만 같은 소실선 위에 존재하게 됩니다.
말로만 표현하게되면 잘 이해가 가지 않으니 그림을 통해 설명드리도록 하겠습니다.
1) 복도의 바닥의 평면에 존재하는 평행한 직선들에 의해 생성되는 소실점들은 모두 같은 소실선 위에 존재하게 됩니다. (같은평면)
2) 복도의 천장의 평면에 존재하는 평행한 직선들에 의해 생성되는 소실점들은 모두 같은 소실선 위에 존재하게 됩니다.(같은평면)
3) 복도의 바닥과 천장은 평행하므로 바닥에서 생성된 소실선과 천장에서 생성된 소실선은 같게 됩니다. (평행한 평면)
그림 11. 과 같이 다른 평면(평행하지 않은 평면)에 의해 생기는 소실선은 같지 않는 특징을 갖습니다.
소실선을 통해서 저희가 얻을 수 있는 것은 뭘까요?
이 소실선을 통해 저희는 카메라의 수평선, 카메라의 Pitch & Roll angle를 추정할 수 있습니다.
지금까지 소실점의 이론적인 내용에 대해서 알아보았습니다. 그럼 이제 소실점과 소실선을 어떻게 구하는지도 알아야 되겠죠?
소실점과 소실선을 구하는 방법을 알기 위해서는 우선 점과 선과의 관계에 대해서 먼저 알아야 합니다.
우선 2차원 공간에서의 점과 선의 관계에 대해서 알아본 후 3차원 공간으로의 확장, 그리고 소실점과 소실선을 계산하는 법에 대해서 설명드리도록 하겠습니다.
타일위의 한점 $(u, v)$를 지나는 한 직선이 존재할 때 이를 식으로 표현하게 되면 아래 식처럼 쓸 수 있습니다.
$ au + bv + c = 0 $
여기서 Line Parameter $(a, b, c)$와 픽셀 좌표 $(u, v, 1)$ 간의 곱을 행렬로 나타내어 $I^{T}x = 0$ 으로 정리할 수 있습니다.
하지만 하나의 점을 가지고 직선을 정의할 수가 없기 때문에 또다른 하나의 점이 추가적으로 필요합니다.
한 직선위에 두개의 점이 놓여있을 때
따라서 타일 위의 점 $x_{1} = (u_{1}, v_{1})$과 $x_{2} = (u_{2}, v_{2})$ 를 이용하여 행렬로 정리하게 되면
$ \begin{bmatrix}x_{1}^{T} \\ x_{2}^{T} \end{bmatrix} I = 0$
우측 항이 0이기때문에 $x_{1}$과 $x_{2}$ 로 구성된 A행렬에 대해서 null space를 계산해 주면 Line Parameter를 구할 수 있습니다.
또한 직선 파라미터 $I$는 점 $x_1$ 과 $x_2$와 내적했을 때 0의 값을 갖으므로 이 두 벡터와 수직인 관계를 갖는다고 할 수 있습니다.
따라서 점 $x_1$, $x_2$의 외적을 통해서도 구할 수 있습니다.
이번에는 두 선의 교점을 알아보도록 하겠습니다.
타일위의 한점 $x$를 지나는 두 개의 직선이 존재한다고 할 때 두 직선의 파라미터 모두 $x$와 내적하게 되면 0의 값을 갖게 됩니다.
이를 행렬로 정리하여 보면 그림 18.의 화살표에 나와있는 것 처럼 정리할 수 있고, 두 직선 파라미터로 이루어진 행렬 A의 Null space를 계산함으로써 두 직선의 교점 $x$를 구할 수 있습니다.
$I_{1}^{T}(I_{1} \times I_{2}) = 0$, $I_{2}^{T}(I_{1} \times I_{2}) = 0$ 이므로 $(I_{1} \times I_{2})$는 $I_{1}$과 $I_{2}$ 두 직선위에 존재하는 하나의 점이 됩니다.
따라서 $I_{1}$와 $I_{2}$의 외적으로 두직선의 교점을 구할수 있게 됩니다.
이번에는 점과 선의 변환관계를 알아보겠습니다.
점 $x_{1}$에 변환행렬($\theta$ 만큼 회전)를 곱하면 점 $x_{2}$가 된다고 했을 때 선 $I_{1}$ 이 선 $I_{2}$ 가 되려면 변환행렬은 $T^{-T}$가 되어야 합니다.
$x_{2} = Tx_{1} \leftrightarrow I_{2} = T^{-T}I_{1}$
위의 식을 증명해 보자면 $I^{T}_{1}x_{1} = 0$식은 분리하여 $(I^{T}_{1}T^{-1})(Tx_{1}) = 0$로 표현할 수 있고 여기서 $(I^{T}_{1}T^{-1})$ 식을 Transpose로 묶게 되면 $(T^{-T}I_{1})^{T}(Tx_{1}) = 0$로 정리할 수 있게 됩니다. 정리된 식을 보면 $Tx_{1}$는 $x_{1}$의 점에 변환행렬을 곱한 것이 되므로 $x_{2}$로 나타낼 수 있고 $(T^{-T}I_{1})^{T}$는 $x_{2}$와 내적해서 0의 값을 갖기 때문에 $I^{T}_{2}$가 되게 됩니다.
따라서 $I_{2}$ = $T^{-T}I_{1}$ 가 되게 됩니다.
@@@수정 예정@@
지금까지는 2차원에서의 점과 선의 관계와 변환 관계를 알아보았습니다.
하지만 실제 세계는 3차원에서 정의 되기때문에 지금까지의 내용을 3차원의 공간으로 확장이 필요합니다.
따라서 지금까지 알아본 2차원 공간에서의 점과 선의 변환관계를 이용해 3차원 상황에서는 어떻게 계산이 되는지 알아보도록 하겠습니다.
지난 글에서 설명드린것 처럼 영상에서의 두 점 $u_{1}$, $u_{2}$(이미지 좌표계)에 카메라 내부 파라미터 $K$행렬의 역행렬을 곱하게 되면 3차원 Ray $\lambda u_{1}$, $\lambda u_{2}$를 얻게 됩니다. 여기서 $\lambda$ 값을 1이라고 설정하면 정규 좌표계에 위치한 두 점 $\hat{u}_{1}$, $\hat{u}_{2}$를 얻게 됩니다. 여기서 정규 좌표계에서의 두 점 $\hat{u}_{1}$, $\hat{u}_{2}$을 외적하면 두 점을 지나는 직선 $\hat{I}$를 구할 수 있습니다.
$\hat{I}$은 또한 기존 영상에서의 $u_{1}$, $u_{2}$를 지나는직선 $I$에 카메라 내부 파라미터 행렬 $K$를 이용해서 구할 수 있는데 이전에 점과 선의 변환 관계에 대해서 설명드린 것 처럼 $I$는 선이기 때문에 단순히 $K$ 행렬의 역행렬을 곱해서 구하는 것이 아닌 $K$ 역행렬의 역행렬 Transpose를 계산하여 $K^{T}$를 곱해주면 $\hat{i}$를 계산할 수 있습니다.($\lambda$는 1의 경우)
$\lambda$를 미지수로 두고 이미지 평면에서의 직선 $I$를 3차원으로 이동시키게 되면 그림 20. 에서 보이는 것 처럼 3차원에서의 평면(주황색 평면)을 이루게 됩니다. 또한 이 평면은 항상 카메라 중심 $O$를 지나게 됩니다.
@@@수정 예정@@
이제 소실점과 소실선을 계산해 보도록 하겠습니다.
1) 우선 타일위의 점을 외적하여 4개의 선 $I_{11}$, $I_{12}$, $I_{21}$, $I_{22}$를 계산합니다.
2) 그 후 $I_{11}$과 $I_{12}$를 외적하여 소실점 $v_{1}$, $I_{21}$와 $I_{22}$를 외적하여 소실점 $v_{2}$를 구합니다.
3) 두 소실점 $v_{1}$ 과 $v_{2}$를 외적하여 소실선을 구합니다.
구해진 2차원의 소실선을 3차원으로 변환시키면 그림 22. 주황색 소실선 평면이 생기게 되는데 카메라의 중심과 소실점(소실선은 소실점들의 집합 이므로 소실선중 한점 아무거나 가능)을 지나가는 Ray는 항상 바닥의 평행선들과 평행하므로 바닥면과 소실선 평면은 평행하게 됩니다.
지금까지 소실점과 소실선을 계산하는 방법에 대해서 알아보았습니다.
소실점과 소실선을 계산하여 구했을 때 카메라의 Pitch & Roll angle을 추정하는 방법에 대해서는 다음 글에서 이어서 설명드리도록 하고 다음 글을 이해하기 위해 필요한 Point and Line at Infinity에 대해서 마지막으로 설명드리고 이번글을 마치도록 하겠습니다.
영상에서 평행한 두 직선을 서로 외적하게 되면 두 직선의 교점은 영상평면의 유한 포인트에 존재하지 않습니다.
이 무한대 점은 영상평면안에 존재하지 않고 사영 공간(P)에만 존재합니다.
이러한 무한대 점들은 사영 공간에서 특정한 직선 위에 존재하게 되는데 이러한 직선을 무한대 직선 $I_{\infty}$(Line at Infinity)라고 합니다.
'3D Vision 공부' 카테고리의 다른 글
[CSCI 5563] 2. Projection Matrix (1) | 2021.10.23 |
---|---|
[CSCI 5563] 1. 3D Point Projection (4) | 2021.10.12 |