Knowledge/Vision

Trifocal tensor 이해하기

침닦는수건 2023. 3. 30. 20:35
반응형

Trifocal tensor는 epipolar geometry에 등장하는 fundamental matrix의 카메라 3대 버전이라고 이해하면 된다. 즉, trifocal tensor를 이해한다는 것은 반대로 카메라 3대 간의 geometry를 이해하는 것과 같다.

 

epipolar geometry와 같이 trifocal tensor가 다루는 것은 여전히 point와 line 간의 관계다. epipolar geometry에서 한 카메라 이미지에 찍힌 점은 다른 카메라 이미지 상에 선으로 나타난다는 것이 핵심이듯이 trifocal tensor가 다루는 geometry에서는 한 카메라 이미지의 점이 다른 카메라에서 어떻게 등장하는지가 핵심이다. 다만 그 경우의 수가 point-line-line, point-line-point와 같이 조금 더 많다는 차이가 있다. 

 

실제로 epipolar geometry를 쓰는 경우도 드문데 trifocal tensor를 쓸 일이 뭐가 있냐고 지적한다면 맞는 말이지만 그냥 교양 차 알고 있기에 나쁘지 않은 내용이고 혹 multi-camera 세팅에서 활용할 일이 있을 수 있으니 간단히 정리한다.

 

epipolar geometry 처럼 카메라 3대 간의 geometry를 표현하는 단어가 따로 없기 때문에 그냥 내가 trifocal geometry라고 부르면서 정리하겠다.

Trifocal tensor

Trifocal geometry의 핵심은 point가 아니라 line이다. 

개념의 시작은 위와 같이 3차원 공간 상의 라인 L이 있고 각 시점으로 projection된 2차원 line, l, l', l''이 있는 상황이다.

 

이 때 각 카메라 센터 C, C', C''은 알고 있다고 가정하고 각각 P=[I|0], P'=[A|a4], P''=[B|b4]와 같이 intrinsic, rotation, translation을 알고 있는 상태다.

 

(epipolar geometry는 카메라 포즈를 얻기 위한 방법으로 쓰이기도 하는데 trifocal geometry는 그 목적으로 쓰지 못한다. 카메라 포즈를 알고 있어야 시작할 수 있다. )

 

이 때 2D line, l, l',l''을 back-projection하여 평면으로 만들면 카메라 포즈를 알고 있는 상황에서 다음과 같이 쓸 수 있다.

그리고 동시에 3D line, L 위의 점은 X = αX1 + βX2 라고 쓸 수 있다. 3D line이니까 X1 벡터 하나로 표현할 수 있지 않냐고 질문할 수 있는데, 원점을 지나지 않는 직선이라면 X1, X2 최소 2개가 필요하다. 참고로 이 둘은 linearly independent하다. 

그러면 3D line, L은 각 평면 π, π', π'' 위에 있으므로 당연히 위 수식을 만족할테고 M = [π, π', π''] 라고 정의한다면 다음과 같이 현 상태를 정리할 수 있다. 그리고 바로 이것을 변형하면 trifocal tensor가 등장한다. 

 

여기서부터는 선형대수 개념이 조금 들어간다.  변형 시작!

 

아까 X 는 linearly independent, 벡터 2개로 구성됨으로 미루어 보아 N(M), null space는 rank 2임을 알 수 있다. 다른 말로 M의 column 중 2개만 있으면 나머지 1 column을 만들어 낼 수 있다는 것이다. 

 

이를 대입해서 M.T X = 0을 풀게 되면 다음과 같이 변형할 수 있게 된다.

 

최종적으로 카메라 포즈 중 translation 만을 조합해서 만들어낸  3x3 matrix, Ti가 생성된다. 이는 첫번째 카메라 이미지의 line이 두번째, 세번째 카메라 이미지의 line들과 어떤 관계를 갖는지 표현하는 matrix다. 

 

이는 조합 순서를 바꾸면 3가지가 존재하기 때문에 3x3 * 3개가 존재하게 되고 tensor 형태가 된다. 그리고 이 T matrix 3개가 하나로 묶여 trifocal tensor라고 불리는 것이다. 

 

Trifocal tensor의 활용

1. 한 시점의 line을 알고 있을 때, 나머지 시점 point 들 간 homography를 할 수 있다. 

그리기 편하게 두번째 카메라 이미지 상의 line을 알고 있다고 가정하자.

위 설명과 마찬가지로 l' 을 back-projection함으로써 평면 π' 을 만들 수 있는데 이 때 trifocal geometry를 만족하는 점이라면 image 1의 점 x가 image3의 점 x''로 어떻게 바뀌는지 알 수 있다. 반드시 π'과 교차하기 때문에 homography를 이용해서 계산할 수 있게 되기 때문이다.

정확히 어떤 homography matrix로 표현되는지 따져보면 trifocal tensor의 transpose들과 l'을 dot product한 결과로 나오는 3x3 matrix가 된다. 당연히 l을 알고 있을 때, l''을 알고 있을 때도 있기 때문에 3가지 homography가 존재한다. 

 

2. 두 시점에서 line-line, point-line, point-point를 알고 있을 때, 나머지 한 시점의 point에 (epipolar contraints보다) 강한 contraint를 걸 수 있다. 

먼저 그 시작이 되는 수식을 하나 보자.

복잡해보이지만 trifocal tensor와 l',  l''로 만든 l과 원래 l을 cross product하면 0이 나온다는 뜻이다. 당연하게도 자기 자신에 cross product하는 꼴이니 0이 나와야 정상이다. 이 식을 요리조리 변형하는 과정에서 line-line, point-line, point-point 를 알 고 있을 때 나머지 한 시점에 여러 contraint를 생성할 수 있음을 알 수 있다. 

 

먼저 line-line이다. 

l'과 l''을 알고 있다고 했을 때 위 수식 (x는 l위에 있으니 당연한 수식이다)을 대입하면 아래와 같이 변형할 수 있다. 

그 의미를 생각해보면 l'과 l''의 시점이 아닌 나머지 시점에 찍힐 point, x는 반드시 위 수식을 만족하는 범위 내에 있어야 한다는 것이다. 

 

그 다음은 point-line 혹은 line-point이다.

l'과 x''을 알고 있다고 했을 때 homography 관련 수식을 가져와 대입하여 변형해보면 다음과 같이 정리할 수 있다.

그 의미를 생각해보면 역시나 동일하게 나머지 시점에 찍힐 point, x는 반드시 위 수식을 만족하는 범위 내에 있어야 한다는 것이다.

 

마지막으로 point-point이다.

x'과 x''을 알고 있다고 가정했을 때 이미 직관적으로 바로 알 수 있다시피 x이 거의 결정된다. 오차가 없다면 그냥 결정된다고 보는게 낫다.

역시나 동일하게 나머지 시점에 찍힐 point, x는 반드시 위 수식을 만족하는 범위 내에 있어야 한다.

 

Summary

위 이미지가 보여주는 내용 그대로다. 

 

이 외에 trifocal tensor에서 fundamental matrix 뽑아내는 법, inrinsic matrix 뽑아내는 법, 우연히 한 line이 epipolar plane 위에 있을 경우 등 자잘한 내용들이 있지만 실용적이거나 큰 의미가 있진 않다고 생각해서 위 내용만 숙지하면 될 것 같다. 

 

공부하면서 느낀 것이지만 역시나 trifocal tensor를 쓸 일은 거의 없을 것 같다. epipolar geometry + bundle adjustment로 웬만한 것을 끝낼 수 있을 것 같으니 말이다...

 

Reference

https://www.robots.ox.ac.uk/~vgg/hzbook/hzbook2/HZtrifocal.pdf

반응형

'Knowledge > Vision' 카테고리의 다른 글

Positional embedding (직관적 이해)  (0) 2023.09.13
Image flickering  (0) 2023.08.17
Swish activation function  (0) 2023.03.10
Positional encoding  (0) 2023.03.10
Spectral bias of Neural network  (0) 2023.03.10