Post

컴퓨터비전(5) - edge detection(3)

edge detection

image에서 중요한 feature중 하나인 edge detection을 partial derivative의 관점과 gaussian convolution의 관점에서 살펴봤습니다. 이번 글에선 sobel operator에 대해 알아보겠습니다.

링크 : 링크 :

sobel operator란?

sobel은 참고로 다른 뜻이 있는 것은 아니고, 사람 이름입니다. 들어가기에 앞서, sobel operator에 대해 한 줄로 요약하자면, gaussian filter로 convolution한 결과의 근사입니다. gaussian filter는 sigma값에 따라, 내부 값이 달라집니다. 선택의 문제입니다. 이러한 귀찮은 과정을 생략하고 근사해버린 filter로 convoluiton을 진행하는 것이 sobel operator입니다.

image

sobel filter는 2개로 이루어져 있습니다. 대표적인 sobel filter를 살펴보겠습니다. 왼쪽은 x축으로의 gradient를 나타내기 위한 filter sx고,오른쪽은 y축으로의 gradient를 나타내기 위한 filter sy입니다.

sx를 기준으로 보겠습니다.

image

왼쪽은 음수, 가운데는 0, 오른쪽은 양수인 filter입니다. 2열을 제외한 1,3행의 값들의 절댓값은 1이고, 2번째 행의 절댓값은 2입니다. 이는 pixel 기준으로, 제일 가까운 쪽인 양 옆은 (L1 거리 기준 1의 값을 갖는) weight를 2를 주고, 나머지는 1을 주겠다는 의미로 해석하면 됩니다.

그렇다면 부호는 왜 반대인가요? sobel filter는 위에서 사용한 sx를 사용한다고 하고, image는 제가 임의로 예시를 들어보겠습니다.

image

그림 실력이 조잡하긴 하지만 간략하게 살펴보겠습니다. 3행의 행벡터는 (-7,0,7)입니다. 이를 convolution한 결과는 0이지 않나요? 즉 좌우로 내가 부호만 다른 동일한 가중치를 두어, 합을 구합니다. 만약 합이 0에 근사한 값이라면 사실 image intensity의 변화는 거의 없다고 보는 것입니다. 또한 기준 pixel에 대해, 거리가 가깝다면 조금 더 높은 가중치를 두어서 edge를 detection하자는 것이 sobel operator의 의미와 가치입니다.

image

상단 첫 번째 이미지를 sx sobel operation한 결과가 두 번째 이미지고, sy로 operation한 결과가 세 번째 이미지입니다. 이 두 값을 가지고 gradient의 크기를 시각화 한 것이 제일 아래의 그림입니다.

gausian convolution과의 차이점

sobel filter는 좌 우의 값이 절댓값만 같지만 부호를 다르게 설정하여, 근처가 얼마나 바뀌는지에 대해 좀 더 직관적으로 이해하는 것에 초점을 둔 filter라고 할 수 있습니다. 또한, 값을 매우 단순하게 지정했기에, 계산의 overhead를 더 줄인 operator라고 볼 수 있습니다. 어차피 derivative한 gaussian filter로 convolution을 하는 것 보다, 비슷한 효과를 내지만 계산의 양도 훨신 적은 sobel operator을 현업에서 더 많이 사용한다고 합니다.

sobel operator의 단점

그렇다면 sobel operator는 장점만 있는 것인가요? 정답은 아닙니다. 이는 speckle noise에 매우 취약한 모습을 보입니다. 왜냐하면 pixel 기준, 3x3 filter로 계산을 합니다. 위 아래로 1칸씩 최대 보겠다는 의미인데, 여기서 intensity value가 갑자기 튀는 speckle noise가 있다면 바로 edge로 detection하기에, 단점이 있습니다. 이는 noise를 줄이지 않으면, 항상 거쳐야 하는 문제입니다. 또한 edge가 굵게 나온다는 나쁜 특성이 있습니다. 왜냐하면 convolution한 결과에서 연속한 pixel의 값이 비슷하다면, 이를 하나의 edge로 판단하고, 결과론적으로 edge가 굵게 표현된다는 것입니다.

이러한 문제점을 해결하는 것이 canny edge detection입니다.

마무리하며

다음 글에선 edge detection의 마지막, canny edge detection에 대해 살펴보도록 하겠습니다.

This post is licensed under CC BY 4.0 by the author.