9.3.2 임의의 각도 회전 구현
영상의 회전 변환에서는 삼각함수의 계산이 필요하다. C/C++에서는 sin, cos, tan 등의 삼각함수를 제공하며, 이들 함수를 사용하려면 먼저 <math.h> 파일을 포함(#include)해야 한다. C/C++에서 제공하는 sin, cos 함수의 원형은 다음과 같다.
double sin(double x); double cos(double x);
이들 함수에서 인자로 받는 회전 각도 x는 라디안radian 단위를 사용하기 때문에 우리가 흔히 사용하는 형태의 각도 단위(°)를 사용하려면 다음과 같은 공식으로 변환해야 한다.
const double PI = 3.14159265358979323846; double rad = (angle * PI) / 180.;
여기서 const double형으로 선언된 변수 PI는 원주율 π를 의미한다. 이를 이용하여 회전 각도 angle로 입력된 값은 (angle * PI) / 180 공식에 의해 라디안 값 rad로 변환된다.
그러면 영상의 회전 변환을 수행하는 함수를 작성해보자. 함수의 이름은 IppRotate를 사용하기로 하고, 다음과 같은 함수 선언을 IppGeometry.h 파일에 추가하자.
void IppRotate(IppByteImage& imgSrc, IppByteImage& imgDst, double angle);
IppRotate 함수는 입력 영상 imgSrc를 angle 각도만큼 시계 방향으로 회전한 후, 결과 영상을 imgDst에 저장한다. 이 함수의 앞부분에서는 회전 변환되어 생성될 결과 영상의 크기를 계산하고, 뒷부분에서는 실제 회전 변환을 수행한다. 회전 변환 시 보간법은 양선형 보간법을 사용하였다. IppRotate 함수의 전체 내용은 소스 9-9에 나타내었다.