Post

컴퓨터비전(4) - edge detection(2)

image gradient

저번 글에선, image gradient 계산을 통해서 image의 edge를 검출하는 방식에 대해 알아보았습니다. 하지만 이러한 방식은 바로 치명적인 단점을 갖고 있습니다.

image gradient - noise

pixel의 intensity를 변수로 gradient 값을 계산해서 edge를 검출했습니다. 하지만 이러한 단점은 image에 speckle noise가 많다면 거의 대부분의 point를 edge로 판단할 것입니다. 단적인 예시를 아래에서 보겠습니다.

image

누가 봐도 정 중앙이 edge임을 압니다. 하지만 image intensity를 derivative해보면 많은 극점을 가지고 있습니다. 이러한 모든 점을 edge로 검출해버린다면, 잘못된 edge detection이 된다는 것입니다. 하지만 우리는 저번 글에서 image의 speckle noise를 제거하는 convolution에 대해 학습했습니다.

gaussian convolution - image smoothing

링크 : ~~

바로 gaussian convolution을 통해서 image를 smooth하게 만들면 된다는 것입니다.

image

심지어 derivative도 이제 continous 이제 위치 1000을 제외한 나머지 곳을 gaussian convolution을 통해 edge로 detection하지 않게 되었습니다. 하지만 image와 h(kernel)의 convolution을 한 후, derivative를 하는 방법보다 더 효율적으로 계산하는 방식이 있습니다.

image

바로 convolution은 결합법칙이 성립한다는 것입니다. gaussian function은 derivative하기 쉬운 함수이므로, 적절히 미리 구현해두고, image와 convolution만 잘 하자는 것입니다. 심지어 gaussian function은 밑을 자연상수 e로 하는 지수함수 기반이므로, 계산도 편해보입니다! 두 번 계산하는 overhead를 한 번으로 줄였습니다!

1차원에서 gaussian function derivate한 결과입니다.

image

2차원에서 gaussian function derivate한 결과입니다.

image

두 변수에 대한 partial derivative한 gaussian filter을 얻었으므로, 어떤 pixel에서 두 filter에 대해서 convolution을 하고, 그 결과를 가지고 gradient를 만들면 noise가 제거된 image에서 edge를 detection 할 수 있습니다. 즉, derivatived된 gaussian filter를 convolution해서, image를 smooth하게 만든 후, edge를 검출해보면 되겠습니다!

마무리하며

다음 글에서는 edge detection algorithm중 sobel operation에 대해 알아보도록 하겠습니다.

image

위는 magnitude임

이건 canny edge detection하는 것. image

왜 sobel edge detection은 상대적으로 canny보다 넓은가?

canny는 Non-max Suppression를 통해서 주변 local maxima value만 뽑아내기 때문에 더 얇아짐. grad 방향으로 주변 node들을 탐색한다. 거기서 큰 값만 check함 즉, 하나의 edge가 여러 개의 픽셀로 표현되는 현상을 없애기 위하여 gradient 크기가 local maximum인 픽셀만을 edge 픽셀로 설정합니다.

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