이제 최근방 이웃 보간법을 이용한 영상의 크기 변환을 C/C++ 함수로 작성해보자. 함수의 이름은 IppResizeNearest를 사용하기로 하고, 다음과 같은 함수 선언을 IppGeometry.h 파일에 추가하자.

    void IppResizeNearest(IppByteImage& imgSrc, IppByteImage& imgDst, int nw, int nh);

    IppResizeNearest 함수는 네 개의 인자를 받는다. 첫 번째 인자 imgSrc는 입력 영상이며, 두 번째 인자 imgDst는 최근방 이웃 보간법에 의한 크기 변환 결과가 저장될 영상이다. 세 번째와 네 번째 인자인 nwnh는 결과 영상의 가로와 세로 크기를 나타낸다. IppResizeNearest 함수의 전체 구현은 소스 9-4에 나타내었다.

    소스 9-4 최근방 이웃 보간법을 이용한 영상의 크기 변환 구현 함수(IppGeomerty.cpp)
    void IppResizeNearest(IppByteImage& imgSrc, IppByteImage& imgDst, int nw, int nh)
    {
        int w = imgSrc.GetWidth();
        int h = imgSrc.GetHeight();
    
        imgDst.CreateImage(nw, nh);
    
        BYTE** pSrc = imgSrc.GetPixels2D();
        BYTE** pDst = imgDst.GetPixels2D();
    
        int i, j, x, y;
        double rx, ry;
        for (j = 0; j < nh; j++)
        for (i = 0; i < nw; i++)
        {
            rx = static_cast<double>(w - 1) * i / (nw - 1);
            ry = static_cast<double>(h - 1) * j / (nh - 1);
            x = static_cast<int>(rx + 0.5);
            y = static_cast<int>(ry + 0.5);
    
            if (x >= w) x = w - 1;
            if (y >= h) y = h - 1;
    
            pDst[j][i] = pSrc[y][x];
        }
    }
    

    최근방 이웃 보간법의 구현 방법은 매우 간단하다. 결과 영상의 모든 좌푯값을 가로, 세로 확대 비율로 나누어주고, 그 결괏값을 단순히 정수형으로 변환하여 참조할 원본 영상의 좌표를 얻을 수 있다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.