더북(TheBook)

9.2.1 크기 변환과 보간법

영상의 크기 변환scale transform이란 영상의 크기를 원본 영상보다 크거나 또는 작게 만드는 변환이다. 입력 영상의 크기를 가로 방향으로 sx배로 늘리고, 세로 방향으로 sy배로 변환하는 크기 변환을 수식으로 나타내면 다음과 같다.

위 식에서 (x, y)는 입력 영상의 픽셀 좌표를 나타내고, (x´, y´)는 결과 영상의 픽셀 좌표를 의미한다.

그림 9-5는 영상의 입력 영상의 크기를 확대하는 크기 변환의 예를 보여준다. 이 그림에서 입력 영상의 가로와 세로 크기는 각각 w와 h이고, 확대된 영상의 크기는 nw와 nh로 나타내었다. 그러므로 가로 방향의 확대 비율은 sx=nw/w이고, 세로 방향의 확대 비율은 sy=nh/h이다.

그림 9-5 영상의 크기 변환

실제 디지털 영상의 확대 및 축소를 구현할 때에는 픽셀 값을 참조하는 방향에 대하여 고려해주어야 한다. 예를 들어 영상을 가로 및 세로 방향으로 각각 2배씩 확대하는 크기 변환에 대하여 생각해보도록 하자. 입력 영상의 픽셀 정보가 pSrc로 설정되어 있고, 결과 영상의 픽셀 정보가 pDst로 설정되어 있는 경우 다음과 같은 형태로 코드를 작성하면 문제가 생긴다.

BYTE** pSrc = imgSrc.GetPixels2D();
BYTE** pDst = imgDst.GetPixels2D();

for( j = 0 ; j < h ; j++ )
for( i = 0 ; i < w ; i++ )
{
    pDst[2 * j][2 * i] = pSrc[j][i];
}

얼핏 보면 결과 영상의 좌표가 입력 영상 좌표의 정확히 2배로 설정되어 있어서 문제가 없어 보인다. 그러나 위와 같이 코드를 작성할 경우, 결과 영상에는 픽셀 값이 설정되지 않는 빈 공간hall이 생기게 된다. 2×2 영상에 대한 크기 변환의 예를 그림 9-6에 나타내었다. 위의 소스 코드처럼 크기 변환을 구현할 경우, 그림 9-6의 오른쪽 결과 영상처럼 그레이스케일 값이 설정되지 않는 픽셀이 존재하는 문제점이 생긴다. 이처럼 입력 영상의 크기에 해당하는 for 루프를 수행하면서 결과 영상의 픽셀 값을 결정하는 방법을 순방향 매핑forward mapping이라고 하며, 이 방법은 생성한 결과 영상에 빈 공간이 생기는 문제점이 있다.

그림 9-6 순방향 매핑에 의한 영상의 2배 확대
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.