더북(TheBook)
소스 10-6 [DFT], [DFTRC] 메뉴 이벤트 처리 함수(ImageToolDoc.cpp)
#include "IppImage\IppFourier.h"

#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")

#define SHOW_SPECTRUM_PHASE_IMAGE

void CImageToolDoc::OnFourierDft()
{
    int w = m_Dib.GetWidth();
    int h = m_Dib.GetHeight();

    if (w * h > 128 * 128)
    {
        CString msg = _T("영상의 크기가 커서 시간이 오래 걸릴 수 있습니다.\n계속 하시겠습니까?");
        if (AfxMessageBox(msg, MB_OKCANCEL) != IDOK)
            return;
    }

    CWaitCursor wait;

    CONVERT_DIB_TO_BYTEIMAGE(m_Dib, img)

    IppFourier fourier;
    fourier.SetImage(img);

    DWORD t1 = timeGetTime();
    fourier.DFT(1);

  #ifdef SHOW_SPECTRUM_PHASE_IMAGE
    IppByteImage imgSpec;
    fourier.GetSpectrumImage(imgSpec);

    CONVERT_IMAGE_TO_DIB(imgSpec, dibSpec)
    AfxNewBitmap(dibSpec);

    IppByteImage imgPhase;
    fourier.GetPhaseImage(imgPhase);

    CONVERT_IMAGE_TO_DIB(imgPhase, dibPhase)
    AfxNewBitmap(dibPhase);
#endif

    fourier.DFT(-1);
    DWORD t2 = timeGetTime();

    IppByteImage img2;
    fourier.GetImage(img2);

    CONVERT_IMAGE_TO_DIB(img2, dib)
    AfxPrintInfo(_T("[푸리에변환/DFT] 입력 영상: %s, 처리 시간: %dmsec"), GetTitle(), t2 - t1);
    AfxNewBitmap(dib);
}

void CImageToolDoc::OnFourierDftrc()
{
    int w = m_Dib.GetWidth();
    int h = m_Dib.GetHeight();

    if (w * h > 256 * 256)
    {
        CString msg = _T("영상의 크기가 커서 시간이 오래 걸릴 수 있습니다.\n계속 하시겠습니까?");
        if (AfxMessageBox(msg, MB_OKCANCEL) != IDOK)
            return;
    }

    CWaitCursor wait;

    CONVERT_DIB_TO_BYTEIMAGE(m_Dib, img)

    IppFourier fourier;
    fourier.SetImage(img);

    DWORD t1 = timeGetTime();
    fourier.DFTRC(1);

#ifdef SHOW_SPECTRUM_PHASE_IMAGE
    IppByteImage imgSpec;
    fourier.GetSpectrumImage(imgSpec);

    CONVERT_IMAGE_TO_DIB(imgSpec, dibSpec)
    AfxNewBitmap(dibSpec);

    IppByteImage imgPhase;
    fourier.GetPhaseImage(imgPhase);

    CONVERT_IMAGE_TO_DIB(imgPhase, dibPhase)
    AfxNewBitmap(dibPhase);
#endif

    fourier.DFTRC(-1);
    DWORD t2 = timeGetTime();

    IppByteImage img2;
    fourier.GetImage(img2);

    CONVERT_IMAGE_TO_DIB(img2, dib)
    AfxPrintInfo(_T("[푸리에변환/DFTRC] 입력 영상: %s, 처리 시간: %dmsec"), GetTitle(), t2 - t1);
    AfxNewBitmap(dib);
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.