Q. Do we have to apply two linear operations here(convolution)?
convolution operator의 associativity 속성을 이용해 filter를 합성하자
filter로서, 이 또한 미분값을 계산하는 것과 같다.
여기서 다시 Recap
우리의 목표는 gradient가 큰 곳(edge)을 찾는 것이었다. 그런데, gradient convolution이 noise에 매우 민감하다. 그래서 우린 smoothing을 하기로 했다.
먼저 smoothing을 위해 gaussian filter를 적용할 것이다. 이렇게 smoothing된 image에 derivate filter를 적용하여 intensity가 크게 변하는 지점을 찾을 수 있다.
smoothing filter와 derivate filter를 한 번에 적용하기 위해 우린 Derivate of Gaussian(DoG) filter를 사용할 것이다.
이전에 Gaussian filter를 적용하고, derivate filter를 적용한 결과와 derivate of gaussian(DoG) filter를 적용한 결과가 동일함을 알 수 있다.
→ 이로써 smoothing과 intensity가 크게 변하는 지점 찾기를 동시에 진행하여 computational cost를 줄일 수 있다.
위와 같이 DoG를 이용해 intensity 변화가 큰 곳을 찾는다. 필터는 본인의 gradient를 이용해 gradient가 큰 곳을 찾는다.
💡그런데 보니까, DoG filter의 모양이 edge와 비슷하다. 커널은 자기 자신과 유사한 곳을 찾는구나!
simple answer: discontinuities in intensity
→ intensity 변화가 급격한 곳이 edge이다.
boundary?
: 의미가 있는, 물체를 구분하는 듯한 경계부분. edge의 subset일 수 있음.
→ edge의 gradient는 즉, 엣지인 정도(edgeness)를 나타내는 것으로 볼 수 있음.
그렇다면 어떤 기준으로 edge를 판단할까?
→ threshold를 정하자!
자 그럼 edge이냐/아니냐를 판단하기 위해 edgeness에 thrshold를 줘야 하는데, 상식적으로 threshold를 낮게 설정하면 너무 많은 edge가 검출될 것임. 그래서 threshold를 적절히 설정해야 함.
threshold보다 edgeness가 큰 픽셀들에 모두 동일하게 1값을 주면, 그제서야 edge가 검출된다.
예를 들어 위 이미지는 edge 이미지는 아니다. 왜냐하면 threshold를 준 다음에야 edge image가 된다. 아직까지는 edgeness 이미지이다.
How should we choose the threshold?
threshold를 10으로 준 이미지를 살펴보자. 저렇게 픽셀 여러 개를 edge로 판단하면 안된다. 이런 건 '선'이 아니라 어떤 영역을 차지하는 "객체"를 의미한다.
edge라고 하는 것은 '선'을 의미한다. 선은 면적을 점하고 있으면 안된다. 선은 thin할수록 좋고, thick할수록 왜곡된다.
한마디로, edge는 얇을수록 좋다.
→ threshold를 설정하지 말고, edge는 thin할수록 좋다고 했으니, 최댓값을 구해보면 어떨까?
→ 최댓값은 즉 극댓값이므로 또 미분을 할까 생각을 해봤더니, 미분은 연산량이 매우 커지고, noise에 민감하다.
→ threshold로 잘라서 남은 픽셀들을 대상으로 최댓값을 구하자. 이미지에서는 orientation의 방향대로 잘라서 최댓값을 구하자는 의미
There is ALWAYS a tradeoff between smoothing and good edge localization
local maxima는 어떻게 구하나?
q의 orientation에 있는 픽셀들의 값보다 q가 크면, 이를 local maxima로 두고, orientation line에 q값보다 더 큰 값이 있다면 local maxima를 그 값으로 바꿔준다.
그래프의 y축은 gradient amplitude를 나타낸다. 즉, |∇I|, edgeness, magnitude...
먼저 high threshold보다 높은 영역을 edge로 선정한다. 그리고 나서 edge로 선정된 영역 주변
에서 low threshold보다 큰 영역을 또한 edge로 선정한다.