소스 11-13 [해리스 코너 검출] 메뉴 이벤트 처리 함수(ImageToolDoc.cpp)
    #include "HarrisCornerDlg.h"
    
    
    void CImageToolDoc::OnHarrisCorner()
    {
        CHarrisCornerDlg dlg;
        if (dlg.DoModal() == IDOK)
        {
            CONVERT_DIB_TO_BYTEIMAGE(m_Dib, img)
                std::vector<IppPoint> corners;
            IppHarrisCorner(img, corners, dlg.m_nHarrisTh);
    
            BYTE** ptr = img.GetPixels2D();
    
            int x, y;
            for (IppPoint cp : corners)
            {
                x = cp.x;
                y = cp.y;
    
                ptr[y - 1][x - 1] = ptr[y - 1][x] = ptr[y - 1][x + 1] = 0;
                ptr[y][x - 1] = ptr[y][x] = ptr[y][x + 1] = 0;
                ptr[y + 1][x - 1] = ptr[y + 1][x] = ptr[y + 1][x + 1] = 0;
            }
    
            CONVERT_IMAGE_TO_DIB(img, dib)
    
            AfxPrintInfo(_T("[해리스 코너 검출] 입력 영상: %s, Threshold: %d, 검출된 코너 갯수: %d"),
                    GetTitle(), dlg.m_nHarrisTh, corners.size());
            AfxNewBitmap(dib);
        }
    }
    

    OnHarrisCorner 함수에서는 먼저 해리스 코너 검출 대화 상자를 띄워서 코너 응답 함수의 임계값을 입력 받는다. 그리고 IppHarrisCorner 함수를 호출하여 코너 포인트들의 정보를 std::vector<IppPoint> 타입의 변수 corners로 넘겨받는다. 그리고 검출된 코너 포인트 위치에 3×3 크기의 검정색 점을 표시하도록 하였다.

    그림 11-26은 다양한 영상에 대하여 [해리스 코너 검출] 메뉴를 실행한 결과이다. 화면에 나타난 차일드 윈도우의 영상은 왼쪽부터 abcdef.bmp, house.bmp, pentagon.bmp 파일에서 코너 포인트를 찾을 결과이다. 세 개의 영상 모두 해리스 코너 응답 함수에 대한 임계값은 20000을 사용하였다.

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