
파노라마는 같은 공간에서 찍은 다른 사진들을 하나로 이어 붙이는 기술이다.
이미지를 이어붙이는 Stitching은 여러 이미지에서 특징을 뽑고, 각 특징을 매칭시킨 다음
Image Warping + Blending을 통해 붙인다.
이 작업을 반복하면 파노라마가 된다.
우리는 여러 이미지에서 불변성을 지닌 Feature들을 뽑는 방법에 대해서 알아왔다.
그렇다면 Image Warping에 대해 살펴본다.

이미지에 대한 Transformation은 filtering과 warping으로 나뉜다.
filtering은 domain에 대한 함수 값을 변경하는 것이다.
쉽게 설명하면 pixel값을 조정하는 photometric transformation이다.

warping은 pixel 값은 그대로 두고 domain 자체를 바꾸는 geometric transformation이다.


이미지의 scale을 조정하는 것은 
이런 선형 변환으로 해결된다.
x를 a배, y를 b배
역행렬은 x를 1/a배, y를 1/b배 하는 것이기에 원소의 역수로 해결된다.


역행렬은 세타의 값을 마이너스를 취해주면 된다.

이런 2x2 transformation은 공통적인 특징 3가지가 있다.
1. 원점 보존
2. 선 보존
3. 평행선 보존

이미지의 위치를 이동시키는 것은 2x2 transformation으로 해결되지 않는다. (non-linear)
x' = x + dx
y' = y + dy 를 표현할 수 없다.

따라서 차원을 하나 더 추가하여 2차원 상의 점을 표현하는 homogeneous 좌표계를 도입한다.

그러면 이런 선형변환이 가능해진다.


Affine transformation은 combination of 선형변환이다.
행렬곱은 순서의 영향을 받기 때문에 순서가 달라지면 결과도 달라진다.
Affine은 translation이 생겼기 떄문에 원점 보존은 되지 않는다.
1. 선 보존
2. 평행선 보존
모든 변환이 3x3 변환행렬의 마지막 행은 고정 값.
자유도 6

벡터의 equivalent와 equal은 요소의 값이 완전히 같음과 상수 배로 표현될 수 있냐의 차이이다.

Homography는 3x3 행렬을 다 사용해서 만들 수 있지만
w차원으로는 1로 투영시켜야 하기 때문에 자유도는 8이다.

1. 선 보존


그렇다면 출력 이미지의 pixel값은 어떻게 채울 수 있냐하면

첫 번째 방식은 forward warping이다.
입력 이미지의 각 픽셀들을 변환된 위치에 넣어준다.
하지만 그 위치가 정확한 point가 아니라면 splatting 해주어야 한다.
따라서 hole이나 overlap이 발생할 수 있다.
이걸 해결하기 위해서 inverse warping이 필요하다.

출력 이미지의 각 좌표를 역행렬을 통해 입력 이미지에서 가져오는 것이다.
이때는 interpolation을 사용할 수 있다.

그렇다면 이런 feature matching에 대해 어떤 변환을 해야 할까.
당연하게도 모든 matching 한번에 만족하는 변환은 확률이 매우 낮다.
따라서 우리는 RANSAC 방식을 이용한다.
랜덤으로 변환을 한 다음, 가장 많은 matching을 만족하는 변환을 찾는 것이다.

이때 우리는 한 매칭당 2개의 방정식을 얻어낼 수 있고
변수는 8개이기 때문에 총 4개의 매칭으로 하나의 변환을 만들 수 있다.

Ah=0을 만족하는 h를 찾는 것이 목적이고 이 문제는 A^TA의 아이젠벡터와 아이젠밸류 문제로 바뀐다.
그렇게 4개의 좌표와 Homography행렬을 찾아냈으면 모든 매칭에 대해 수행해보고 성능을 평가하는 것을
반복하여 최종적으로 가장 좋은 성능을 낸 변환을 사용한다.
잘 보고 있읍니다