이미지 변형 (Image Transformation)
이미지의 변형은 이미지의 각 픽셀을 이동시켜 이미지를 다른 형태로 변환하는 것이다.
이미지의 각 픽셀 좌표에 어떠한 변환 행렬을 곱하여 이러한 변환을 수행할 수 있다.
이미지 전체에 대해 같은 행렬을 이용한 변환을 수행하는 것을 Parametric Global Warping이라고 한다.
원본 이미지의 픽셀 좌표 $p$에 변형 행렬 $T$를 곱하여 $p'$로 옮기는 것이다.
$$p' = Tp$$
이때, 만약 $T$가 linear한 변형을 수행하는 행렬이라면, $p' \equiv Tp$가 성립한다.
2x2 행렬을 이용한 변환
크기 변형 (Scaling)
이미지의 $x$축과 $y$축에 대하여, 각각 $a, b$의 비율로 변형을 수행한다.
$$ \begin{bmatrix} x' \\ y' \end{bmatrix} =
\begin{bmatrix} a & 0 \\ 0 & b \end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix} $$
회전 (Rotation)
이미지를 특정 각도로 회전시킨다.
$$ \begin{bmatrix} x' \\ y' \end{bmatrix} =
\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}
\begin{bmatrix} x \\ y \end{bmatrix} $$
전단 (Shear)
이미지를 위 이미지와 같이 기울인다.
$$ \begin{bmatrix} x' \\ y' \end{bmatrix} =
\begin{bmatrix} 1 & sh_x \\ sh_y & 1 \end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix} $$
반전 (Invert)
이미지를 X축이나 Y축 기준으로 반전시킨다.
$$ \begin{bmatrix} x' \\ y' \end{bmatrix} =
\begin{bmatrix} -1 & 0 \\ 0 & -1 \end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix} $$
2x2 행렬 변환의 특징
$2\times 2$ 행렬을 이용한 변환은 다음과 같은 특징들이 있다.
- 원점이 유지된다.
- 직선이 유지된다.
- 평행선들이 계속 평행하게 유지된다.
3x3 행렬을 사용한 변환 (Affine Transfromation)
원점을 바꾸는 변환을 수행하기 위해서는 동차 차원을 추가하여야 한다.
이렇게 크기, 회전, 위치를 모두 바꾸는 변환을 아핀 변환이라 한다.
$$ \begin{bmatrix} x' \\ y' \\ w' \end{bmatrix} \equiv
\begin{bmatrix} 1&0&t_x\\ 0&1&t_y \\ 0&0&1 \end{bmatrix}
\begin{bmatrix} \cos\theta&-\sin\theta&0 \\ \sin\theta&\cos\theta&0 \\ 0&0&1 \end{bmatrix}
\begin{bmatrix} s_x&0&0 \\ 0&s_y&0 \\ 0&0&1 \end{bmatrix}
\begin{bmatrix} x \\ y \\ w \end{bmatrix}$$
위 식에서, 변환이 크기, 회전, 위치 순서로 일어나는 것을 알 수 있는데, 변환의 순서를 바꿀수는 있지만 바꾸게 되면 행렬의 값들도 다 바꿔줘야 한다.
아핀 변환의 특징
- Scale이 0일 때를 제외하고, 직선들과 평행선 정보들이 계속 유지된다.
투영 변환 (Projective Transform)
투영 변환은 시점 변환(Perspective Transform)이나 Homography라고도 한다.
$3\times 3$ 행렬로 정의되며, 총 8개의 변수를 이용하여 8의 자유도(Degree of Freedom)를 갖는다.
변환 이후에는 원본 이미지에서 직선 정보만 유지되는 특징이 있다.
투영 변환을 통해 아래 3가지 경우의 변환을 수행할 수 있다.
2D 면에 대한 변환
어떤 사진 속에 존재하는 2D 평면을 다음과 같이 복원하거나, 다른 각도에서 찍은 것처럼 변환할 수 있다.
3D 물체에 대한 촬영 각도 변형
어떤 3D 물체를 찍은 이미지를 마치 같은 위치에서 다른 각도로 찍은 이미지처럼 변형할 수 있다.
이를 응용하여 아래에서 소개할 Image Stitching을 수행할 수 있다.
멀리 떨어진 3D 물체에 대한 변형
위에서 3D 물체는 같은 자리에서 다른 각도로 찍은 사진처럼 변형이 가능하다고 말했지만, 멀리 떨어진 물체는 조금 이동하여서 봐도 같은 위치에서 보는 것과 큰 차이가 없다.
멀리 있는 3D 물체를 다른 장소에서 찍은 사진들도 서로 변형이 가능하다.
Image Stitching
이런 투영 변환을 이용하면 서로 다른 이미지를 이어붙여 파노라마 이미지를 만들 수 있다.
이미지를 이어붙이려면, 이미지가 원래 하나인 것처럼 서로 scale이나 rotation 등이 잘 맞아야 한다.
특징 추출하고 특징점들 매칭하기
SIFT를 비롯한 특징 추출기들을 이용해 이미지의 특징점들을 각각 추출하고, 매칭 알고리즘을 통해 각 이미지에서 공통되는 특징점들을 짝을 지어준다.
매칭된 쌍들을 이용한 Homography 계산
이제 두 이미지 사이에 공통된 점들을 찾았다.
이것들을 기반으로 이미지 A 속 특징점들의 좌표 $[x_i, y_i]$를 이미지 $B$ 속 특징점들의 좌표 $[x_i', y_i']$로 올바르게 변환해 줄 행렬 $H$를 찾아야 한다.
$$\begin{bmatrix} x_i' \\y_i' \\w_i' \end{bmatrix} \equiv \begin{bmatrix} h_{11}&h_{12}&h_{13}\\ h_{21}&h_{22}&h_{23}\\ h_{31}&h_{32}&h_{33}\\ \end{bmatrix} \begin{bmatrix} x_i\\y_i\\w_i \end{bmatrix} \equiv H\mathbf{x}_i \equiv \begin{bmatrix} h_1^T \\ h_2^T \\ h_3^T \end{bmatrix}\mathbf{x}_i \equiv \begin{bmatrix} h_1^T\mathbf{x}_i \\ h_2^T\mathbf{x}_i \\ h_3^T\mathbf{x}_i \end{bmatrix} $$
위 식에 의하여 아래 식이 성립한다.
$$ \begin{bmatrix} x_i' \\y_i' \\w_i' \end{bmatrix} \times \begin{bmatrix} h_1^T\mathbf{x}_i \\ h_2^T\mathbf{x}_i \\ h_3^T\mathbf{x}_i \end{bmatrix} = 0$$
위 식을 다시 외적 식을 이용하여 전개하면,
$$ \begin{bmatrix} y'h_3^T\mathbf{x}_i - w_i'h_2^T\mathbf{x}_i \\ w_i'h_1^T\mathbf{x}_i - x_i'h_3^T\mathbf{x}_i\\
x_i'h_2^T\mathbf{x}_i - y_i'h_1^T\mathbf{x}_i \end{bmatrix} = 0$$
위 행렬의 각 행에 0을 곱한 $h_1^T, h_2^T, h_3^T$ 를 각각 더해주면 아래와 같이 행렬을 분해할 수 있다.
$$ \begin{bmatrix} 0^T & -w_i'\mathbf{x}_i^T & y_i'\mathbf{x}_i^T \\ w_i'\mathbf{x}_i^T & 0^T & -x_i'\mathbf{x}_i^T \\
-y_i'\mathbf{x}_i^T & x_i'\mathbf{x}_i^T & 0^T \end{bmatrix} \begin{bmatrix}h_1 \\ h_2 \\ h_3 \end{bmatrix} = 0 $$
어우 복잡해라.. 이제 위 행렬에서 선형 독립인 행 2개만 남기고 마지막 행 하나는 버리면, 비로소 특징점 한 쌍에 대한 식이 완성되었다.
우리가 찾아낸 $n$개의 특징점 행렬 $A$와 고정된 homography 변환 행렬 $h$에 대하여 $Ah=0$이 성립한다.
특징점들의 좌표를 이용해 $A$행렬을 만들고, $Ah$를 최소화하는 $h$를 찾으면 homography 변환 행렬을 찾아낼 수 있다.
이때, $h$의 norm을 1로 고정하고 $h$의 최소값을 탐색하는데, 특이값분해(SVD)를 이용하여 $h$를 구할 수 있다.
$A$를 SVD로 분해하여 나온 행렬 $U, D, V$ 중, 마지막 행렬 $V$의 마지막 열 9개 값이 바로, $h$ 행렬을 구성하는 값이 된다.
영상처리 공부를 정리하며...
지금까지 이미지 변환과 이를 이용한 Image Stitching을 알아보았다.
원한다면 Image Stitching을 코드 단위로 설명한 필자의 이전 글을 보셔도 좋다.
이제.. 머신러닝 공부 좀 하러 가야겠다. 실로 어질어질한 일주일이었다. 휴
'Deep Learning > 영상처리' 카테고리의 다른 글
Vector of Locally Aggregated Descriptors (VLAD) 소개 (0) | 2023.03.14 |
---|---|
Bag of Visual Words (BoVW) (2) | 2023.03.10 |
SIFT: Scale Invariant Feature Transform을 이용한 Feature Matching (0) | 2023.03.08 |
SIFT: Scale Invariant Feature Transform 을 이용한 Blob Detection (0) | 2023.03.08 |
코너 검출 (Corner Detection) (0) | 2023.03.08 |
댓글
이 글 공유하기
다른 글
-
Vector of Locally Aggregated Descriptors (VLAD) 소개
Vector of Locally Aggregated Descriptors (VLAD) 소개
2023.03.14 -
Bag of Visual Words (BoVW)
Bag of Visual Words (BoVW)
2023.03.10 -
SIFT: Scale Invariant Feature Transform을 이용한 Feature Matching
SIFT: Scale Invariant Feature Transform을 이용한 Feature Matching
2023.03.08 -
SIFT: Scale Invariant Feature Transform 을 이용한 Blob Detection
SIFT: Scale Invariant Feature Transform 을 이용한 Blob Detection
2023.03.08