더북(TheBook)

8.3.4 영상 날카롭게 만들기 메뉴 만들기

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

표 8-6 [라플라시안 필터], [언 샤프 마스크 필터] 메뉴 항목 속성

ID

Caption

ID_FILTER_LAPLACIAN

라플라시안 필터(&L)

ID_FILTER_UNSHARP_MASK

언샤프 마스크 필터(&U)

ID_FILTER_HIGHBOOST

하이부스트 필터(&H)

메뉴 항목을 추가하였으면, 이제 이 메뉴에 대한 메뉴 이벤트 처리 함수를 추가하자. [라플라시안 필터], [언 샤프 마스크 필터], [하이부스트 필터] 메뉴 항목에 대한 이벤트 처리기 마법사에 입력할 정보는 표 8-7을 참고하라. 새로 추가된 OnFilterLaplacianOnFilterUnsharpMask, OnFilterHighboost 함수에 입력할 소스 코드는 소스 8-11에 한꺼번에 나타내었다.

표 8-7 [라플라시안 필터], [언 샤프 마스크 필터] 메뉴 이벤트 처리기 정보

명령 이름(ID)

처리 클래스

메시지 형식

처리기 이름

ID_FILTER_LAPLACIAN

CImageToolDoc

COMMAND

OnFilterLaplacian

ID_FILTER_UNSHARP_MASK

CImageToolDoc

COMMAND

OnFilterUnsharpMask

ID_FILTER_HIGHBOOST

CImageToolDoc

COMMAND

OnFilterHighboost

소스 8-11 [라플라시안 필터]와 [언샤프 마스크 필터] 메뉴 항목에 대한 이벤트 처리 함수(ImageToolDoc.cpp)
void CImageToolDoc::OnFilterLaplacian()
{
    CONVERT_DIB_TO_BYTEIMAGE(m_Dib, imgSrc)
    IppByteImage imgDst;
    IppFilterLaplacian(imgSrc, imgDst);
    CONVERT_IMAGE_TO_DIB(imgDst, dib)

    AfxPrintInfo(_T("[라플라시안 필터] 입력 영상: %s"), GetTitle());
    AfxNewBitmap(dib);
}

void CImageToolDoc::OnFilterUnsharpMask()
{
    CONVERT_DIB_TO_BYTEIMAGE(m_Dib, imgSrc)
    IppByteImage imgDst;
    IppFilterUnsharpMask(imgSrc, imgDst);
    CONVERT_IMAGE_TO_DIB(imgDst, dib)

    AfxPrintInfo(_T("[언샤프 마스크 필터] 입력 영상: %s"), GetTitle());
    AfxNewBitmap(dib);
}

void CImageToolDoc::OnFilterHighboost()
{
    CONVERT_DIB_TO_BYTEIMAGE(m_Dib, imgSrc)
    IppByteImage imgDst;
    float alpha = 1.2f;
    IppFilterHighboost(imgSrc, imgDst, alpha);
    CONVERT_IMAGE_TO_DIB(imgDst, dib)

    AfxPrintInfo(_T("[하이부스트 필터] 입력 영상: %s, alpha = %4.2f"), GetTitle(), alpha);
    AfxNewBitmap(dib);
}

소스 8-11에서 하이부스트 필터 메뉴 이벤트 처리기인 OnFilterHighboost 함수에서는 하이부스트 필터에서 사용되는 alpha 값을 항상 1.2로 고정하여 실행하도록 코드가 작성되어 있다. 만약 사용자로부터 다양한 alpha 값을 입력 받아서 하이부스트 필터를 수행하려면, 실숫값을 입력 받는 대화 상자를 직접 만들어 사용하기 바란다.

그림 8-23은 ImageTool 프로그램에서 lenna.bmp 파일에 대하여 언샤프 마스크 필터와 하이부스트 필터를 수행한 결과 영상를 보여준다. 가장 왼쪽의 차일드 프레임 윈도우가 입력 영상인 lenna.bmp 영상이며, 가운데가 언샤프 마스크 필터 결과이고 오른쪽이 하이부스트 필터 결과 영상이다. 확실히 언사프 마스크 필터 결과 영상에서 엣지 정보가 더욱 두드러지게 나타나기 때문에 초점이 더욱 잘 맞은 사진처럼 변경됨을 볼 수 있다. 하이부스트 필터 결과는 영상의 명암비도 함께 높아지는 효과가 나타남을 확인할 수 있다.

그림 8-23 ImageTool 프로그램에서 영상 날카롭게 하기 실행 결과
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.