검색결과 리스트
글
기하 연산
기하 연산이란?
기하연산은 영상을 회전시키거나 특정 영역을 크게 하는 혹은 회전하는 작업 등의 작업이 필요한 경우에
기하연산을 적용하여 해결할 수 있다.
동차좌표와 동차행렬
기하 변환은 동차좌표(homogeneous coordinate)와 동차행렬(homogeneous matrix)로 표현한다.
이 표현에서 2차원상의 점 x = (y, x)는 동차좌표 x' = (y, x, 1)로 표현한다. 세 개의 값을 가진 3차원 벡터로 표현한다.
단순히 차원을 하나 늘리고 1로 설정하면 된다.
동차좌표에서는 세 요소에 같은 값을 곱하면 같은 좌표가 된다.
예를 들면 (5, 2, 1), (10, 4, 2), (0.5, 0.2, 0.1)은 모두 같은 (5, 2) 좌표를 나타낸다.
동차 행렬은 [그림 1]과 같이 정리할 수 있다.
[그림 1 - 기하 변환을 정리한 동차행렬]
어떤 점을 y방향으로 3만큼, x방향으로 2만큼 이동시키는 동차행렬 H는 다음과 같다.
그런데 2차원 변환을 하는데 왜 3차원 동차좌표와 동차행렬을 사용할까?
T(3, 2)를 좌표이동한후, 회전변환을 수행하면 각 점에 대해 2번씩 연산을 수행해야 한다.
하지만 행렬은 다행히 곱셈에 대해 결합 법칙이 성립하므로 결합하면 한번의 연산으로 변환이 가능하다.
이것을 복합변환(Composite transformation)이라고 부른다. k 단계의 변환이 이뤄지는 상황에서 복합 변환을
활용하면 k배 만큼 빨라진다. 이것이 동차 좌표를 사용하는 이유이다.
영상에서의 기하 변환 적용
만약 위에서 동차좌표계로 계산한 결과의 좌표값이 (8.6962, 3.0622)와 같이 실수 값이 나오게 되면
어떻게 처리해야 할까?
이때 반올림 하여 처리하면 (9, 3)이 될것이다.
[그림 2]를 보게 되면 전방 변환의 경우 여러 곳에서 값을 받는 화소가 있는 반면,
어떤 화소는 하나도 못받아 구멍이 생기는 현상이 발생한다. 이렇게 구멍이 생기는 현상을
에일리어싱(aliasing)이라 불른다. 이런것을 처리하려는 노력을 안티 에일리어싱(anti-aliasing)
이라고 한다.
[그림 2 - 후방 기하 변환의 안티에일리어싱 효과]
목표 영상의 target의 화소가 자신의 값을 찾아 나설때 역변환을 통해 target이미지의 위치가 source이미지의 어느
위치에 존재하는지 계산해 픽셀을 채우는 것이다. 이 방법을 사용하면 에일리어싱 효과를 막을 수 있다.
변환행렬 H의 역행렬을 사용하면 된다.
전방 기하 변환
1 2 3 4 5 6 7 8 9 10 11 12 | /* 입력 : 영상 inputF(j,i), 0≤j≤M-1, 0≤i≤N-1, 변환행렬 H 출력 : 기하 변환된 영상 outputF(j,i), 0≤j≤M-1, 0≤i≤N-1 */ for(j=0 to M-1) for(i=0 to N-1) { (j,i)에 H를 적용하여 변환된 점(j2, i2)를 구한다. 실수는 반올림하여 정수로 변환 outputF(j2, i2) = inputF(j, i) // 영상 공간을 벗어난 점은 무시 } |
후방 기하 변환
1 2 3 4 5 6 7 8 9 10 11 12 | /* 입력 : 영상 inputF(j,i), 0≤j≤M-1, 0≤i≤N-1, 변환행렬 H 출력 : 기하 변환된 영상 outputF(j,i), 0≤j≤M-1, 0≤i≤N-1 */ for(j=0 to M-1) for(i=0 to N-1) { (j,i)에 H의 역행렬을 적용하여 변환된 점(j2, i2)를 구한다. 실수는 반올림하여 정수로 변환 outputF(j, i) = inputF(j2, i2) // 영상 공간을 벗어난 점은 무시 } |
'컴퓨터비전/영상처리' 카테고리의 다른 글
모라벡 알고리즘 (0) | 2014.10.13 |
---|---|
지역 특징(Local Feature)을 찾는법 (0) | 2014.10.13 |
bilateral filter (0) | 2014.10.10 |
영상처리의 기본연산 (0) | 2014.10.10 |
화소 연결성 (0) | 2014.10.09 |