더북(TheBook)

11.2.4 캐니 엣지 검출 메뉴 만들기

ImageTool 프로그램에 캐니 엣지 검출을 위한 메뉴 항목과 메뉴 이벤트 처리 함수를 추가해보자. Visual Studio 리소스 뷰에서 IDR_ImageToolTYPE 항목을 더블 클릭하여 메뉴 편집 창에 나타나게 한 후, [마스크 기반 엣지 검출] 팝업 메뉴 아래에 [캐니 엣지 검출] 메뉴 항목을 추가하자. [캐니 엣지 검출] 메뉴 항목의 속성은 표 11-6을 참고하라.

표 11-6 [캐니 엣지 검출] 메뉴 항목 속성

ID

Caption

ID_EDGE_CANNY

캐니 엣지 검출(&C)...

메뉴 항목을 추가하였으면 이제 이 메뉴에 대한 메뉴 이벤트 처리 함수를 추가하자. [캐니 엣지 검출] 메뉴 항목에 대한 이벤트 처리기 마법사에 입력할 정보는 표 11-7을 참고하라. 새로 추가된 OnEdgeCanny 함수에 입력할 소스 코드는 소스 11-6에 나타내었다.

표 11-7 [캐니 엣지 검출] 메뉴 이벤트 처리기 정보

명령 이름(ID)

처리 클래스

메시지 형식

처리기 이름

ID_EDGE_CANNY

CImageToolDoc

COMMAND

OnEdgeCanny

소스 11-6 [캐니 엣지 검출] 메뉴 이벤트 처리 함수(ImageToolDoc.cpp)
#include "CannyEdgeDlg.h"

void CImageToolDoc::OnEdgeCanny()
{
    CCannyEdgeDlg dlg;
    if (dlg.DoModal() == IDOK)
    {
        CONVERT_DIB_TO_BYTEIMAGE(m_Dib, img)
        IppByteImage imgEdge;
        IppEdgeCanny(img, imgEdge, dlg.m_fSigma, dlg.m_fLowTh, dlg.m_fHighTh);
        CONVERT_IMAGE_TO_DIB(imgEdge, dib)

        AfxPrintInfo(_T("[캐니 엣지 검출] 입력 영상: %s, sigma: %4.2f, Low Th: %4.2f,
            High Th: %4.2f"),
                GetTitle(), dlg.m_fSigma, dlg.m_fLowTh, dlg.m_fHighTh);
        AfxNewBitmap(dib);
    }
}

그림 11-14는 ImageTool 프로그램에서 다양한 표준 편차 값을 이용하여 캐니 엣지 검출을 수행한 결과이다. 입력 영상으로는 camera.bmp 파일을 사용하였고, 낮은 임계값과 높은 임계값은 각각 30과 60을 사용하였다. 가장 왼쪽의 ImageTool1 결과 영상은 표준 편차 값으로 0.5를 사용한 결과이다. 표준 편차 값이 작아서 하늘 영역에 존재하던 잡음이 엣지로 검출되는 것을 볼 수 있다. ImageTool2와 ImageTool3 창에 나타난 결과 영상은 각각 표준 편차가 1.4, 2.0을 사용한 결과이다. 표준 편차의 값이 커질수록 잡음의 영향이 줄어들지만 대신 자잘한 엣지 또한 검출되지 않을 수 있다는 점을 확인할 수 있다. 캐니 엣지 검출기가 성능이 좋은 엣지 검출 방법이지만 영상의 특성에 맞는 적절한 표준 편차와 임계값을 선택하는 것 또한 중요함을 알 수 있다.

그림 11-14 ImageTool 프로그램에서 캐니 엣지 검출 결과
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.