기하학적 처리
기하학적 처리란 임의의 기하학적 변환에 의해 화소들의 위치를 변경하는 처리를 말합니다. 기하학적 처리는 크게 확대, 축소, 회전, 대칭 등이 있습니다.
확대
픽셀 복제 방법
가상 쉽게 확대할 수 있는 방법은 픽셀을 복제하는 방법입니다. 확대 배율만큼 픽셀을 반복적으로 복사하면 확대된 영상을 얻을 수 있습니다. 이 방법은 확대 배율이 정수일 때만 사용할 수 있습니다.
픽셀 복제 방법의 문제점은 앞서 말한 것처럼 확대 배율이 정수일 때만 사용할 수 있다는 것입니다. 또한 확대된 영상의 품질이 좋지 않을 수 있습니다(계단현상). 확대된 영상은 픽셀을 복사하는 방법이기 때문에 새로운 화소값을 생성하지 않습니다. 따라서 확대된 영상은 원래의 영상보다 품질이 떨어질 수 있습니다.
역방향 사상과 양선형 보간법
역방향 사상과 양선형 보간법을 이용하면 확대 배율이 실수일 때도 확대할 수 있으며, 계단현상 또한 줄일 수 있습니다.
역방향 사상
역방향 사상은 확대된 영상의 픽셀을 원래의 영상으로 되돌리는 방법입니다.
확대된 영상의 픽셀을 원래의 영상으로 되돌리기 위해서는 확대된 영상의 픽셀이 원래의 영상의 어느 위치에 대응되는지 알아야 합니다. 이를 위해 역방향 사상 시 확대된 영상의 픽셀 좌표를 원래의 영상으로 변환하는 변환식을 사용합니다. 변환식은 다음과 같습니다.
\[\begin{align*} \text{X}_{source} &= \frac{\text{X}_{dest}}{2} \\ \text{Y}_{source} &= \frac{\text{Y}_{dest}}{2} \end{align*}\]하지만 위 식으로 변환 시 역방향 사상의 결과가 정수가 아닐 수 있습니다. 따라서 역방향 사상 시 픽셀 좌표를 실수로 변환한 후 보간법을 이용하여 새로운 픽셀 값을 생성합니다.
선형 보간법(Linear Interpolation)
선형 보간법이란 1차원에 두 지점 사이의 특정 지점을 계산하기 위해 사용하는 간단한 수학적 기법입니다. 선형 보간법은 두 지점 사이의 거리를 가중치로 사용하여 새로운 지점의 값을 계산합니다.
\[\begin{align*} \text{P}_{output} &= (1-k) \times \text{P}_{1} + k \times \text{P}_{2} \\ \end{align*}\]양선형 보간법(bilinear interpolation)
1차원에서의 선형 보간법을 2차원으로 확장한 것이 양선형 보간법입니다. 즉 선형 보간을 바탕으로 수행하며, 화소 당 선형보간을 세 번 수행합니다. 새롭게 생성된 화소는 가장 가까운 화소 4개에 가중치를 곱한 값을 합하여 생성합니다.
\(\begin{align*} \text{E} &= \times (1-\alpha) \times A + \alpha \times B \\ \text{F} &= \times (1-\alpha) \times C + \alpha \times D \\ \text{P} &= \times (1-\beta) \times E + \beta \times F \\ \end{align*}\)
- $E$: A와 B 사이의 보간값
- $F$: C와 D 사이의 보간값
- $P$: E와 F 사이의 보간값, 즉 새로운 화소값
보간법 적용 예시를 보겠습니다. 아래 그림은 2x2 크기의 영상을 4x4 크기로 확대하는 과정입니다.
\[\begin{array}{|c|c|} \hline 100 & 110 \\ \hline 120 & 130 \\ \hline \end{array} \rightarrow \begin{array}{|c|c|c|c|} \hline 100 & ? & 110 & ? \\ \hline ? & ? & ? & ? \\ \hline 120 & ? & 130 & ? \\ \hline ? & ? & ? & ? \\ \hline \end{array}\]위 그림에서 I(1,1)에 대한 확대된 영상의 픽셀 값을 계산해보겠습니다.
먼저 역방향 사상을 통해 I(0.5, 0.5)로 변환한 뒤, 양선형 보간법을 통해 I(0.5, 0.5)의 값을 계산합니다.
축소
서브 샘플링 방법
축소 배율만큼 건너뛰면서 픽셀 값을 취하는 방법입니다. 해당 방법의 문제점은 영상의 상세한 정보가 손실될 수 있다는 것입니다.
평균값 필터링 방법
영상을 흐리게 한 다음 서브샘플링을 적용하면 영상의 상세한 정보를 유지하면서 축소된 영상을 얻을 수 있습니다.
회전
회전 변환식
회전 변환식은 다음과 같습니다.
\[\begin{align*} \text{X}_{dest} &= \text{X}_{source} \times \cos(\theta) - \text{Y}_{source} \times \sin(\theta) \\ \text{Y}_{dest} &= \text{X}_{source} \times \sin(\theta) + \text{Y}_{source} \times \cos(\theta) \\ \end{align*}\]전방향 사상
전방향 사상은 원래 영상의 픽셀을 회전된 영상으로 변환하는 방법입니다. 각 픽셀에 대해 회전 변환식을 적용하여 회전된 영상의 픽셀을 계산합니다. 해당 방법의 문제점은 1. 출력영상에서 픽셀 값을 할당받지 못하거나, 2. 결과 영상에서 잘리는 영역이 다량 발생할 수 있다는 것입니다.
회전 시 고려해야 할 사항은 크게 4가지가 있습니다.
- 빈 영역 발생
- 원점 중심 회전으로 인한 영상의 잘림
- 회전 후 영상 크기 변화
역방향 사상
역방향 사상을 이용하여 문제점을 해결할 수 있습니다. 원점을 중심으로 회전 변환식을 적용하여 회전된 영상의 픽셀을 원래 영상으로 되돌립니다.(빈 영역 발생 문제 해결)
\[\begin{align*} \text{X}_{source} &= \text{X}_{dest} \times \cos(\theta) + \text{Y}_{dest} \times \sin(\theta) \\ \text{Y}_{source} &= -\text{X}_{dest} \times \sin(\theta) + \text{Y}_{dest} \times \cos(\theta) \\ \end{align*}\]- $\theta$가 음수로 바뀌는 것이기 때문에, $\cos(-\theta) = \cos(\theta)$, $\sin(-\theta) = -\sin(\theta)$를 이용하여 식을 도출할 수 있습니다.
중심점 이동
앞에서 사용한 회전 변환식은 원점을 중심으로 회전하는데, 원점을 기준으로 회전하면 결과 영상에서 잘리는 영역이 발생할 수 있습니다. 영상의 중심점을 원점이 아닌 다른 점으로 이동시킨 후 회전 변환식을 적용하면 결과 영상에서 잘리는 영역을 줄일 수 있습니다.(회전 후 영상 잘림 문제 해결)
\[\begin{align*} \text{X}_{dest} &= \text{X}_{source} \times \cos(\theta) - \text{Y}_{source} \times \sin(\theta) + \text{X}_{center} \\ \text{Y}_{dest} &= \text{X}_{source} \times \sin(\theta) + \text{Y}_{source} \times \cos(\theta) + \text{Y}_{center} \\ \end{align*}\]크기 변환
입력 영상과 출력 영상의 크기를 같게 하면 출력 영상에서 잘려나가는 부분이 발생할 수 있습니다. 따라서 출력 영상의 크기를 미리 계산하여 역방향 사상을 적용해야 합니다.
대칭
대칭은 영상을 대칭시키는 것을 말합니다. 대칭은 크게 좌우 대칭과 상하 대칭이 있습니다.
좌우 대칭
좌우 대칭은 영상을 좌우로 뒤집는 것을 말합니다. 좌우 대칭은 다음과 같은 변환식을 사용합니다.
\[\begin{align*} \text{X}_{dest} &= \text{width} - \text{X}_{source} - 1 \\ \text{Y}_{dest} &= \text{Y}_{source} \\ \end{align*}\]상하 대칭
상하 대칭은 영상을 상하로 뒤집는 것을 말합니다. 상하 대칭은 다음과 같은 변환식을 사용합니다.
\[\begin{align*} \text{X}_{dest} &= \text{X}_{source} \\ \text{Y}_{dest} &= \text{height} - \text{Y}_{source} - 1 \\ \end{align*}\]