위 방법을 n개의 대응 점에 대해 정리하여 행렬 A∈R2n×12을 구성하고, 투영 행렬의 요소를 p∈R12로 벡터화하여
Ap=0
이라는 homogeneous linear system으로 정리한다.
SVD를 이용한 풀이
1. 목표
우리가 찾고자 하는 건 A∈R2n×12에 대해 다음 조건을 만족하는 p∈R12:
Ap=0,단p=0
즉, 0이 아닌 해를 가지는 null space 벡터를 구하는 것이다.
그러나 이건 일반적인 Ax=b 형태가 아니라 우변이 0인 homogeneous system이기 때문에, 해가 유일하지 않다. 우리가 원하는 건 크기를 정규화한 상태에서 A의 null space에 있는 벡터이다.
(1) Homogeneous system이란?
homogeneous system이란 선형 방정식의 우변이 모두 0인 경우를 말한다. 일반적인 선형 시스템이 다음과 같다면:
Ax=b
homogeneous system은 다음처럼 생긴다:
Ax=0
예를 들어,
[2412][x1x2]=[00]
이런 형태다. 즉, 모든 방정식이 “= 0”으로 끝난다.
(2) 우변이 0인 homogeneous system은 왜 해가 유일하지 않은가?
이유는 간단하다: 무조건 x=0 (영벡터)는 항상 해가 되기 때문이다.
그러나 만약 행렬 A의 rank가 전체 열 개수보다 작다면, 즉 열 벡터들이 선형 종속이면, x=0 인 무한한 해가 존재한다.
이러한 해들은 null space (kernel) 안에 있는 벡터들이고, 그 차원만큼 자유도를 가진다.
다음과 같은 A∈R2×3 행렬을 보자:
A=[122436]
그리고 우리는 homogeneous system을 푼다고 가정한다:
Ax=0
즉, x∈R3 이고 Ax=0을 만족하는 x를 찾는 것이다.
(3) 행렬 A의 rank란 무엇인가?
행렬의 rank는 "서로 선형 독립인 행이나 열의 최대 개수"이다.
위 행렬에서 두 번째 행은 첫 번째 행의 2배다.
row2=2⋅row1
따라서 이 두 행은 선형 종속(linearly dependent)이다.
→ rank = 1 (독립인 행은 하나뿐)
요약:
이 행렬의 rank는 1이다.
이는 이 행렬이 정보를 하나의 방향에서만 담고 있다는 뜻이다.
(4) 행렬 A의 rank가 전체 열 개수보다 작다는 것이 무엇인가?
A는 2×3 행렬이다. 열이 3개다.
rank가 1이면, 세 개의 열 중 오직 하나만이 독립이고 나머지는 그것의 선형 결합이라는 뜻이다.
즉, 열의 수 > rank → null space가 존재한다는 의미다.
(5) 열벡터들이 종속이라는 뜻이 무엇인가?
위 행렬의 열을 보자:
col1=[12],col2=[24],col3=[36]
col2=2⋅col1
col3=3⋅col1
모두 col1의 배수다. 즉, 종속(linearly dependent)이다.
이는 3개의 벡터가 한 방향(직선) 위에 있다는 뜻이다.
(6) 왜 이럴 경우 x=0인 무한한 해가 존재하는가?
동차 선형 시스템에서는 항상 0은 해다.
그러나 Ax=0에 대해 열의 개수 > rank일 때, 해 공간이 0이 아닌 벡터까지 포함하게 된다.
구체적으로 풀어보자.
A=[122436],x=⎣⎢⎡x1x2x3⎦⎥⎤
곱하면:
1차 방정식: x1+2x2+3x3=0
2차 방정식: 2x1+4x2+6x3=0
두 번째 방정식은 첫 번째의 2배다. 즉, 실제로는 하나의 독립 방정식만 있음.
그러면,
x1+2x2+3x3=0
만 만족하면 된다.
이건 해가 무수히 많다.
예를 들어 x2=1,x3=0이면 x1=−2
또는 x2=0,x3=1이면 x1=−3
(7) Null Space (Kernel)란?
null space는 다음 공간이다:
null(A)={x∈Rn∣Ax=0}
위 예에서 null space는 위 조건을 만족하는 x∈R3 전체 집합이다.
실제로는 평면이 아니라 1차원 직선 공간이다.
위의 방정식 x1+2x2+3x3=0의 해 공간은
두 개의 자유 변수 x2,x3를 기준으로 움직일 수 있고, x1은 그에 따라 정해진다.
이 시스템에서:
x=x2⎣⎢⎡−210⎦⎥⎤+x3⎣⎢⎡−301⎦⎥⎤
즉, null space는 이 두 벡터의 선형 조합으로 이루어진 2차원 평면이다.
개념
뜻
예시에서 설명
rank
독립 행/열의 수
row 1만 독립 → rank = 1
열 종속
어떤 열이 다른 열의 선형결합
col₂ = 2·col₁, col₃ = 3·col₁
null space
Ax=0을 만족하는 해 공간
무수히 많음, 2차원 평면
자유도
해 공간의 차원 = n − rank
열 3개 − rank 1 = 2
(8) 왜 우리가 원하는 건 크기를 정규화한 상태에서 A의 null space에 있는 벡터인가?
위에서 본 것처럼 Ap=0인 해는 무수히 많고, 모두 크기만 다른 동일한 방향의 벡터다.
예를 들어,
p1=[2,−1,0]T,p2=[4,−2,0]T
는 방향은 같지만 크기가 다른 해다.
우리는 이 중에서 길이 1로 정규화된 하나의 대표 벡터를 고른다:
p=∥p∥p
그 이유는:
DLT에서 구한 해는 스케일이 중요하지 않기 때문이다 (동차 좌표계에서는 스케일이 무시됨)
하지만 해가 너무 크거나 작으면 수치적으로 불안정하기 때문에 norm 1인 해를 선호한다
2. 왜 SVD를 활용하는가?
(1) SVD의 정의와 구성 요소의 성질
임의의 실수 행렬 A∈Rm×n에 대해, 다음과 같은 특이값 분해(Singular Value Decomposition, SVD)가 항상 존재한다:
A=UΣVT
여기서 각 행렬의 성질은 다음과 같다:
U∈Rm×m: 좌직교 행렬
열벡터 ui들은 서로 직교하며 ∥ui∥=1
UTU=I
U의 열은 A Aᵗ의 고유벡터(eigenvectors)
Σ∈Rm×n: 대각 행렬
대각 성분 σ1≥σ2≥⋯≥σr>0, 나머지는 0
이들 σi는 A의 특이값(singular values)이다
특이값은 λi 형태로 ATA 혹은 AAT의 고유값에서 유도됨
V∈Rn×n: 우직교 행렬
열벡터 vi들 역시 직교하고 단위 벡터
VTV=I
V의 열은 AᵗA의 고유벡터
(2) 고유벡터(Eigenvector)와 고유값(Eigenvalue)
행렬 A에 어떤 벡터 v를 곱했을 때, 그 벡터의 방향이 바뀌지 않고 크기만 변하는 경우가 있다.
이때 그 벡터를 고유벡터(eigenvector), 그 크기 변환 계수를 고유값(eigenvalue)라고 한다.
즉,
Av=λv
이 식을 만족하는 v=0가 있으면:
v: 고유벡터
λ: 고유값
의미
A는 공간을 변형(회전, 스케일 등)시키는 연산자
어떤 방향의 벡터 v는 A에 의해 방향은 안 바뀌고, 크기만 λ배로 늘어나거나 줄어든다
예시
A=[2003]
이 행렬은 x-축 방향 벡터는 2배, y-축 방향 벡터는 3배로 스케일하는 행렬이다.
A[10]=[20]=2⋅[10]
→ 고유벡터: [1,0]T, 고유값: 2
A[01]=[03]=3⋅[01]
→ 고유벡터: [0,1]T, 고유값: 3
(3) 특이값(Singular Value)
고유값은 정방행렬(square matrix)에만 정의된다.
하지만 m×n인 직사각형 행렬도 매우 흔하다.
특이값 분해(SVD)는 이를 다루기 위해 고안된 일반화다.
특이값은 행렬이 벡터의 축 방향을 얼마나 늘이거나 줄이는지를 나타내는 값이다.
SVD에서는 다음 분해가 있었다:
A=UΣVT
여기서 Σ의 대각 성분이 바로 특이값(singular values)이다.
즉, σ1≥σ2≥⋯≥σr≥0가 A의 특이값이다.
특이값은 다음과 같이 정의된다:
σi=λiwhere λi is an eigenvalue of ATA
즉, 특이값 = ATA의 고유값의 제곱근
의미
고유값은 특정 방향에서의 "스케일 인자"
특이값은 임의의 행렬이 정규 직교 기저를 따라 벡터를 늘이거나 줄이는 정도
SVD에서 이 특이값들을 기준으로 가장 정보량이 큰 방향부터 순서대로 정렬해서 해석할 수 있음 (→ PCA와도 연결됨)
예시
A=[3012]
SVD로 분해하면 Σ 대각에 σ1≈3.256,σ2≈1.843 같은 값이 나올 것이다.
이건 A가 어떤 벡터를 축 1, 축 2 방향으로 그만큼 스케일 시킨다는 뜻이다.