Post

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

edge detection

여러 filter/kernel를 사용해서 image와 convolution을 한 결과는 image의 noise를 줄여준다는 사실을 알았습니다. 이 과정을 image filtering이라고 했습니다. 이렇게 얻은 깔끔한 이미지를 토대로 edge detection을 하는 방법을 알아보겠습니다.

왜 edge detection이 필요한가?

결론부터 말하자면, image에서 특정 특징을 edge를 기반으로 pattern matching할 예정이기 때문입니다. 어떤 pattern을 matching하기 위해서, 처음부터 끝까지 다 보는 행동은 매우 비효율적인 행동입니다. 어떤 pattern을 찾기 위해서 size를 고정하고, image의 시작부터 끝까지 다 훑는다고 가정했을 땐, 거의 O((image size)^2 * (pattern size)^2)의 시간이 걸린다고 볼 수 있습니다. 하지만 pattern의 size가 항상 고정일 수 없습니다. 따라서, image의 edge를 가지고 pattern matching을 하기 위해서 edge detection을 합니다. 또한 edge는 image의 intensity, rgb color에 관계없이 보존되는 특징이 있다는 성질도 위 내용을 뒷받침해주는데 한 몫 합니다.

image에서 edge

edge는 다양한 요소에 의해 생깁니다. 갑자기 texture의 질감이 변할 때도 생기고, 갑작스럽게 밝기가 변하는 지점에서 생길 수도 있습니다. 아무튼 뭔가 변하는 지점에서 생긴다는 것을 알 수가 있습니다. 그렇다면 하나 생각이 날 법 합니다. 바로 image intensity입니다.

image intensity와 edge

image를 나타내는 대표적인 feature이 intensity입니다. 이 중요한 특징인 intensity가 갑자기 증가하거나 변화하는 지점이라면 그 곳을 edge로 봐도 무방하지 않을까 싶습니다.

image

위 그림을 보시면, intensity가 갑자기 변하는 지점이, 변곡점이자 first derivate의 극값이 되는 것을 알 수가 있습니다. first derivate의 극점을 edge로 판단해도 되지 않을까 싶습니다.

intensity derivate

image는 (x,y)에서 intensity 값으로 나타납니다.

1
즉 F(x,y)=intensity value

로 나타낼 수 있음을 우리는 압니다.

이러한 F를 이제 derivate 해봅시다. derivate하기 위해서 연속이면서, 첨점이 없어야 합니다. image를 reconstruction해서 continous function으로 만든 후, derivate하는 방식은 지금은 어려우니, discrete한 image에서 바로 derivative를 해봅시다.

이제 2변수 함수에 대해 derivate와 비슷한 효과를 내는 방법을 생각해봅시다. 바로 discrete derivative입니다. 사실 derivate라는 것은 어떤 point에서 순간적인 변화율을 나타냅니다.

미분을 배우기 위해서, 극한을 배웁니다. 어떤 f에 대해 평균적인 변화율을 나타낸 뒤, 극한을 취해서 순간적인 변화율을 얻습니다. 극한에 의미에 집중해봅시다. x의 변화율에 대해, y의 변화율을 비율로 나타낸 것이 평균변화율이고, 이를 극한으로 취해서 얻은 값이 순간변화율입니다. 하지만 image에서 한 pixel은 매우 작다고 봐도 무방합니다. 즉, 하나의 pixel에 대해 평균적인 변화율이, 사실은 image intensity를 continous하게 만든 후, 순간변화율을 얻은 값과 거의 유사하다고 봐도 될 듯 합니다.

이제 2변수이므로, 각 변수에 대해 partial differentiation(편미분)을 취한다면, image의 intensity가 얼마나 변하는지 알 수 있어 보입니다.

image

2변수이므로, x에 대한 편미분, y에 대한 편미분 값이 나옵니다. 이를 gradient vector로 나타내고, grad vector의 크기를 사용해서 image intensity가 얼마나 변화하는지 수치적으로 계산을 할 수가 있게 됩니다.

image

이제 image의 gradient를 구했습니다. 이와 수직한 방향의 vector가 edge의 방향이 될 것입니다.

image

부가적으로 설명하자면, discrete한 image intensity를 partial derivative를 통해 continous derivative한 결과와 유사하도록 얻은 결과의 방향과 크기가 gradient입니다. 즉, 나의 pixel에서 gradient의 크기만큼 image intensity가 변화한다는 의미입니다. gradient 크기 그래프의 극점에서, gradient와 수직인 vector가, 결국 image의 edge로 판단이 되어도 합리적이라는 것입니다. 위 그림을 참조하시면 이해가 편할 것입니다.

마무리하며

discrete한 image의 first derivative(1차 미분)을 통해 edge를 검출하는 방식에 대해 살펴보았습니다. 다음 글에선 edge detection하는 방법에 대해 조금 더 알아보겠습니다.

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