- 영상 처리에서 기하학 처리는 영상 내에 있는 기하학적인 대상의 공간적 배치를 변경하는 과정을 말한다.
- 이것을 화소의 입장에서 보면 영상을 구성하는 화소들의 공간적 위치를 재배치하는 과정이라 할 수 있다.
- 이러한 변환에는 회전, 크기 변경, 평행이동 등이 있다.
사상(Mapping)
- 사상은 화소들의 배치를 변경할 때, 입력 영상의 좌표가 새롭게 배치될 해당 목적 영상의 좌표를 찾아서 화소값을 옮기는 과정을 말한다.
- 사상에는 순방향 사상(forward mapping)과 역방향 사상(reverse mapping)의 두 가지 방식이 있다.
- 순방향 사상은 원본 영상의 좌표를 중심으로 목적영상의 좌표를 계산하여 화소의 위치를 변환하는 방식이다.
- 이 방식은 원본 영상과 목적 영상의 크기가 같을 때는 유용하지만 그렇지 않으면 홀(hole)이나 오버랩(overlap)의 문제가 발생할 수 있다.
- 아래 그림에서 홀과 오버랩에 대해 나타내었는데, 홀은 입력 영상의 좌표들로 목적영상의 좌표를 만드는 과정에서 사상되지 않은 화소를 가리킨다. 보통 영상을 확대하거나 회전할 때 발생한다.
- 반면 오버랩은 원본 영상의 여러 화소가 목적영상의 한 화소로 사상되는 것으로 영상을 축소할 때 주로 발생한다.
https://drive.google.com/uc?id=1aWO0P_-u_OgaB78gtBw4SFtIHY5yMK6Z
- 이런 문제를 해결할 수 있는 방법이 역방향 사상이다. 역방향 사사은 목적 영상의 좌표를 중심으로 역변환을 계산하여 해당하는 입력 영상의 좌표를 찾아서 화소값을 가져오는 방식이다.
- 아래 그램의 예시에서 입력영상의 하단 왼쪽 한 개의 화소가 목적 영상의 두 개 화소로 각각 사상된다. 이 경우에도 역방향 사상의 방식은 홀이나 오버랩은 발생하지 않는다.
- 다만 입력영상의 한 화소를 목적영상의 여러 화소에서 사용하게 되면 결과 영상의 품질이 떨어질 수 있다.
https://drive.google.com/uc?id=1OiRFclTyT16i2ECTZgvua7OVVR3SahUf
크기 변경(Scaling)
- 크기 변경은 입력 영상의 가로와 세로로 크기를 변경해서 목적영상을 만드는 방법으로 입력영상보다 변경하고자 하는 영상의 크기가 커지면 확대가 되고, 작아지면 축소가 된다.
- 영상의 크기 변경은 비율을 이용해서 수행할 수 있다. 가로와 세로로 변경하고자 하는 비율을 지정하여 입력영상의 좌표에 곱하면 목적영상의 좌표를 계산할 수 있다.
$x' = x \cdot ratio X, y' = y \cdot ratio Y$
- 목적영상의 크기를 지정해서 변경할 수도 있는데, 이것은 입력영상과 목적영상의 크기로 비율을 계산하고, 계산된 비율을 이용해서 목적영상의 좌표를 계산한다.
$ratio X = {dst_{width} \over org_{width}}, ratio Y = {dst_{height} \over org_{height}}$
보간(Interpolation)
- 아래 그림은 입력영상을 두 배 확대할 때 목적영상의 화소 배치를 보인 것이다. 순방향 사상으로 목적영상의 화소를 찾은 경우에는 입력영상의 4개 화소는 쉽게 배치가 되지만, 목적영상에서 확대되는 나머지 화소들은 홀이 발생한다.
- 이런 문제를 해결하는 방법으로 역방향 사상을 통해서 홀의 화소들을 입력영상에서 찾아서 목적영상의 화소에 대입함으로써 목적영상의 화질을 유지할 수 있다.
- 이렇게 목적영상에서 홀의 화소들을 채우고 오버랩이 되지 않게 화소들을 배치하여 목적영상을 만드는 기법을 보간법이라한다.
- 이렇나 보간법의 종류에는 최근접 이웃 보간법(nearest neighbor interpolation), 양선형 보간법(bilinear interpolation), 3차 회선 보간법(cubic convolution interpolation) 등이 있다.
https://drive.google.com/uc?id=1t8X31myTB_Ku9VUItJKQquMfJ6GXRfhe
최근접 이웃 보간법(Nearest Neighbor Interpolation)
- 최근접 이웃 보간법은 목적영상을 만드는 과정에서 홀이 되어 할당 받지 못하는 화소들의 값을 찾을 때, 목적영상의 화소에 가장 가깝에 이웃한 입력영상의 화소값을 가져오는 방법이다.
https://drive.google.com/uc?id=1zp462e2cFVx8s6nOY67DE39FsIiaTuNr