관리 메뉴

공부 기록장 💻

[OpenCV/C++] 에지 검출 1 - 미분 근사화와 그래디언트를 이용한 에지 검출의 원리 (Edge Detection of Image) 본문

# Tech Studies/Computer Vision • OpenCV

[OpenCV/C++] 에지 검출 1 - 미분 근사화와 그래디언트를 이용한 에지 검출의 원리 (Edge Detection of Image)

dream_for 2022. 12. 3. 17:15

OpenCV 4로 배우는 영상 처리와 컴퓨터 비전 CH9. 에지 검출 정리

 

영상의 에지 검출

 

영상에서 에지(edge)란 한쪽 방향으로 픽셀 값이 급격하게 바뀌는 부분으로, 픽셀 값의 변화율을 이용해 이를 찾을 수 있다. 2차원 디지털 영상에서 픽셀 값의 변화율을 근사화하여 구하는 방법과 다양한 응용에서 영상의 미분을 구하는 용도로 사용되고 있는 소벨 필터에 대해 알아보자.

 

미분과 그래디언트

에지란, 픽셀 값이 급격하게 바뀌는 부분으로 어두운 영역에서 갑자기 밝아지거나 반대로 밝은 영역에서 급격히 어두워지는 부분을 말한다. 일반적으로 객체와 배경의 경계, 또는 객체와 다른 객체의 경계에서 에지가 발생한다.

따라서 에지 검출은 컴퓨터 비전 시스템에서 객체의 윤곽을 알아내고, 객체를 판별하기 위한 전처리로 많이 사용되고 있다.

 

1차원 연속 함수 f(x)의 미분은 다음과 같이 정의한다.

Δx 는 x의 변화량을 의미하여, x의 변화량이 무한히 0에 가까워질 때의 함수값 변화량을 미분이라 한다. 함수 값이 증가하는 위치에서는 함수의 미분 값이 0보다 큰 양수로, 함수 값이 감소하는 위치에서는 미분 값이 0보다 작은 음수를 갖게 되어, 함수 값이 일정한 구간에서는 함수의 미분이 0에 가까운 값을 갖는다.

 

1차원 연속함수 f(x)의 값 변화에 따른 미분 f'(x)를 다음과 같이 나타낼 수 있다.

d

함수의 값이 급격히 증가하는 ⓐ 구간에서 f'(x)의 값은 큰 양수값으로 나타나고, 급격히 감소하는 ⓑ에서는 f'(x)의 값이 큰 음수값으로, 그리고 서서히 증가하다 평탄해지는 ⓒ 구간에서는 작은 양수 값으로 나타난다. 

따라서 f(x)의 값이 급격하게 바뀌는 부분을 찾기 위해서는 미분 f'(x)의 값이 0보다 훨씬 크거나 또는 훨씬 작은 위치를 찾으면 된다.

 

잘 알려진 다항함수나 삼각함수 등의 미분을 계산하는 것은 많이 연구되어 도출된 공식을 통해 쉽게 구할 수 있지만, 영상은 2차원 평면 위에 픽셀 값이 정형화되지 않은 상태로 나열되어 있는 이산 형태이므로, 미분 공식을 적용할 수 없다. 따라서 두 가지 특징을 고려하여 미분을 계산해야 하는데, 하나는 영상이 2차원 평면에서 정의된 함수라는 점, 둘째는 영상이 정수 단위 좌표에 픽셀이 나열되어 있는 이산함수라는 점이다.

 

 

영상은 2차원 평면에 정의된 함수이므로, 영상에서 에지를 찾기 위해서는 영상을 가로 방향, 세로 방향으로 각각 미분을 해야 한다. 2차원 영상 I(x,y) 를 가로 방향으로 미분한다는 것은 y좌표는 고정한 상태에서 x축 방향으로만 미분 근사(linear derivative approximation)를 계산하는 것을 의미하며, 이러한 연산을 x축 방향으로의 편미분(partial derivative)라고 한다.

 

미분 근사화 방법에는 전진 차분, 후진 차분, 중앙 차분이 있는데 이는 자기 자신을 제외하고 바로 앞과 뒤에 있는 픽셀 값을 이용하는 방법으로, 세 가지 미분 근사 방법 중 중간값 차이를 이용하는 중앙 차분 방법이 이론적으로 근사화 오류가 가장 적고, 실제 영상에서 미분을 계산할 때 널리 사용되고 있다.

 

x축 방향의 편미분은 아래의 Ix, 그리고 y축 방향의 편미분은 Iy로 표기한다.

2차원 영상 I(x,y)에 대하여 x축과 y축 방향에 대한 각각의 편미분을 중앙 차분 방법으로 근사화하면 다음과 같다.

 

중앙 차분을 이용한 영상의 미분 근사는 마스크 연산을 이용해 쉽게 구현할 수 있다. 

다음은 영상을 x축 방향으로 편미분을 수행하는 1x3 필터, y축 방향으로 편미분을 수행하는 3x1 필터 마스크이다. 이를 이용해 영상을 각각 필터링 하면 영상을 가로 방향, 세로 방향으로 편미분한 정보를 담고 있는 행렬을 얻을 수 있다.

 

원래 영상은 미분의 부호가 있는 실수로 계산되지만, 미분 결과를 시각적으로 분석하기 위해 미분 값에 128을 더한 후, 0~255 사이의 정수로 형변환하여 그레이스케일 영상 형태로 다음과 같이 lenna 영상에 대한 미분 결과를 각각 x축, y축으로 각각 편미분한 결과를 나타냈다.

흰색, 검은색으로 표현된 픽셀이 입력 영상에서 각각 x좌표, y좌표 방향으로 픽셀 값이 급격하게 감소하는 위치이다.

 

 

2차원 공간에서 정의된 영상에서 에지를 찾으려면, x축과 y축 방향의 편미분을 모두 사용해야 하는데, x축과 y축 방향 미분을 한꺼번에 벡터로 표현한 것을 그래디언트(gradient)라고 하며 다음과 같이 표기한다.

그래디언트는 벡터이므로 크기와 방향 성분으로 표현할 수 있다. 따라서 벡터의 방향은 변화 정도가 가장 큰 방향을 나타내고, 그래디언트 벡터의 크기는 변화율 세기로 나타내는 척도로 생각할 수도 있다. 

 

따라서 그래디언트의 크기는 ||∇f|| = square root(fx^2 + fy^2)로 구하고,

그래디언트 방향 각도는 다음 수식으로 구할 수 있다.

그래디언트를 구한 예를 다음 그림을 통해 확인할 수 있다.

어두운 배경에 밝기가 다른 두 객체가 나타난 영상으로, 그래디언트 벡터는빨간색 화살표로 나타났으며, 이 길이는 그래디언트의 크기를, 방향은 그래디언트 벡터의 방향을 나타낸다. 따라서 a, b 점의 그래디언트 방향의 길이보다 밝기 차이가 심한 c점에서의 그래디언트 벡터의 길이가 훨씬 긴 것을 확인할 수 있다. 그리고, 그래디언트 벡터의 방향은 해당 위치에서 밝기가 가장 밝아지는 방향을 가리킨다.  

노란색 화살표는 그래디언트 벡터와 수직인 방향을 표시한 것으로, 이는 에지의 방향을 나타낸다.

 

 

2차원 영상에서 에지를 찾는 기본적인 방법은 그래디언트의 크기가 특정 값보다 큰 위치를 찾는 것이다.

여기서 에지 여부를 판단하기 위해 기준이 되는 임계값(threshhold) 또는 문턱치를 영상의 특성에 따라 다르게 설정해야 한다. 임계값을 높게 설정하면 밝기 차이가 급격하게 변하는 에지 픽셀만 검출되고, 낮게 설정하면 약한 에지 성분까지도 쉽게 모두 검출되므로, 이를 유의하여 적절한 임계값을 지정해야 한다.

 

 

728x90
반응형
Comments