더북(TheBook)

ksize 이후의 인자는 모두 기본값을 가지고 있으므로 실제 함수 호출 시에는 생략할 수 있습니다. ksize 인자에 1을 지정하면 3×1 또는 1×3 커널을 사용하고, 기본값인 3을 지정하면 그림 9-5에서 설명한 3×3 소벨 마스크를 사용합니다.

Sobel() 함수는 x 방향과 y 방향으로의 고차 미분을 계산할 수 있지만 대부분의 경우 x 방향 또는 y 방향으로의 1차 미분을 구하는 용도로 사용됩니다. 예를 들어 그레이스케일 레나 영상을 x 방향으로 편미분한 결과를 dx 행렬에, y 방향으로 편미분한 결과를 dy 행렬에 저장하려면 다음과 같이 코드를 작성합니다.

Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
 
Mat dx, dy;
Sobel(src, dx, CV_32FC1, 1, 0);
Sobel(src, dy, CV_32FC1, 0, 1);

앞 예제 코드에서 dxdy 행렬 크기는 src 행렬과 같고, 행렬 원소는 float 자료형을 사용하도록 설정하였습니다.

OpenCV는 널리 사용되고 있는 소벨 마스크 외에도 샤르 필터(Scharr filter) 마스크를 이용한 미분 연산도 지원합니다. 샤르 필터는 3×3 소벨 마스크보다 정확한 미분 계산을 수행하는 것으로 알려져 있습니다. 가로 방향과 세로 방향으로 미분을 수행하는 샤르 필터 마스크를 그림 9-6에 나타냈습니다.

▲ 그림 9-6 3×3 샤르 필터 마스크

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.