더북(TheBook)

8.5.5 비등방성 확산 필터 메뉴 만들기

ImageTool 프로그램에 비등방성 확산 필터를 위한 메뉴 항목과 메뉴 이벤트 처리 함수를 추가해보자. Visual Studio 리소스 뷰에서 IDR_ImageToolTYPE 메뉴 항목을 더블 클릭하여 메뉴 편집 창이 나타나게 한 후, [필터] 팝업 메뉴 맨 아래에 [비등방성 확산 필터] 메뉴 항목을 추가하자. [비등방성 확산 필터] 메뉴 항목의 속성은 표 8-18을 참고하라.

표 8-18 [비등방성 확산] 메뉴 항목 속성

ID

Caption

ID_FILTER_DIFFUSION

비등방성 확산 필터(&D)...

메뉴 항목을 추가하였으면 이제 이 메뉴에 대한 메뉴 이벤트 처리 함수를 추가하자. [비등방성 확산 필터] 메뉴 항목에 대한 이벤트 처리기 마법사에 입력할 정보는 표 8-19를 참고하라. 새로 추가된 OnFilterDiffusion 함수에 입력할 소스 코드는 소스 8-20에 나타내었다.

표 8-19 [비등방성 확산] 메뉴 이벤트 처리기 정보

명령 이름(ID)

처리 클래스

메시지 형식

처리기 이름

ID_FILTER_DIFFUSION

CImageToolDoc

COMMAND

OnFilterDiffusion

소스 8-20 비등방성 확산 메뉴 이벤트 처리 함수(ImageToolDoc.cpp)
#include "DiffusionDlg.h"

void CImageToolDoc::OnFilterDiffusion()
{
    CDiffusionDlg dlg;
    if (dlg.DoModal() == IDOK)
    {
        CONVERT_DIB_TO_BYTEIMAGE(m_Dib, imgSrc)
        IppFloatImage imgDst;
        IppFilterDiffusion(imgSrc, imgDst, dlg.m_fLambda, dlg.m_fK, dlg.m_nIteration);
        CONVERT_IMAGE_TO_DIB(imgDst, dib)

        AfxPrintInfo(_T("[비등방성 확산 필터] 입력 영상: %s, Lambda: %4.2f, K: %4.2f,
            반복 횟수: %d"),
            GetTitle(), dlg.m_fLambda, dlg.m_fK, dlg.m_nIteration);
        AfxNewBitmap(dib);
    }
}

그림 8-34는 ImageTool 프로그램에서 비등방성 확산 필터를 수행한 결과이다. 입력 영상으로는 lenna.bmp 파일을 사용하였고, 비등방성 확산 결과 영상은 ImageTool1 차일드 창에 나타나 있다. 이때 비등방성 필터 계수 값으로는 lambda는 0.25, K는 4, 반복 횟수는 10을 사용하였다. 비등방성 확산 필터 수행 결과, 큰 엣지 정보를 유지하고 나머지 영역들은 마치 다림질을 한 것처럼 매끈하게 잡음이 제거된 것을 확인할 수 있다. 그림 8-34에서는 일부러 [비등방성 확산 필터] 메뉴를 한 번 더 실행하여 비등방성 확산 대화 상자의 실행 모습도 함께 나타내었다.

그림 8-34 ImageTool 프로그램에서 비등방성 확산 필터 실행 결과
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.