[ComputerVision] Edge Detection

유혜지·2023년 10월 18일
0

ComputerVision

목록 보기
3/9

Box vs. Gaussian

Gaussian Smoothing Filter

  • Gaussian Smoothing at Different Scales

Smooth before Applying Derivate Operator


Q. Do we have to apply two linear operations here(convolution)?

Smoothing and Differentiation

convolution operator의 associativity 속성을 이용해 filter를 합성하자

First(partial) Derivate of a Gaussian


filter로서, 이 또한 미분값을 계산하는 것과 같다.

Derivate of Gaussian 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와 비슷하다. 커널은 자기 자신과 유사한 곳을 찾는구나!

What are Edges?

simple answer: discontinuities in intensity
intensity 변화가 급격한 곳이 edge이다.

boundary?
: 의미가 있는, 물체를 구분하는 듯한 경계부분. edge의 subset일 수 있음.

Edge Detection (1D)


edge의 gradient는 즉, 엣지인 정도(edgeness)를 나타내는 것으로 볼 수 있음.
그렇다면 어떤 기준으로 edge를 판단할까?
threshold를 정하자!

Overview of Gradients

  • magnitude: 이미지의 intensity 변화 강도 (=edgeness)
  • orientation: intensity의 변화가 심한 방향
  • ∇I: edgeness; edgeness는 현재 위치 기준 orientation 방향으로 edge인 정도를 나타냄

자 그럼 edge이냐/아니냐를 판단하기 위해 edgeness에 thrshold를 줘야 하는데, 상식적으로 threshold를 낮게 설정하면 너무 많은 edge가 검출될 것임. 그래서 threshold를 적절히 설정해야 함. threshold보다 edgeness가 큰 픽셀들에 모두 동일하게 1값을 주면, 그제서야 edge가 검출된다.

예를 들어 위 이미지는 edge 이미지는 아니다. 왜냐하면 threshold를 준 다음에야 edge image가 된다. 아직까지는 edgeness 이미지이다.

Issues to Address Shotly

How should we choose the threshold?

threshold를 10으로 준 이미지를 살펴보자. 저렇게 픽셀 여러 개를 edge로 판단하면 안된다. 이런 건 '선'이 아니라 어떤 영역을 차지하는 "객체"를 의미한다.

edge라고 하는 것은 '선'을 의미한다. 선은 면적을 점하고 있으면 안된다. 선은 thin할수록 좋고, thick할수록 왜곡된다. 한마디로, edge는 얇을수록 좋다.

  • Edge Thinning and linking
    threshold를 애초에 낮게 둬서, edge로 검출된 픽셀들을 대상으로 edge thinning을 진행하자.

Canny Edge Detection


→ threshold를 설정하지 말고, edge는 thin할수록 좋다고 했으니, 최댓값을 구해보면 어떨까?
→ 최댓값은 즉 극댓값이므로 또 미분을 할까 생각을 해봤더니, 미분은 연산량이 매우 커지고, noise에 민감하다.
→ threshold로 잘라서 남은 픽셀들을 대상으로 최댓값을 구하자. 이미지에서는 orientation의 방향대로 잘라서 최댓값을 구하자는 의미

Trade-off: Smoothing vs. Localization

There is ALWAYS a tradeoff between smoothing and good edge localization

Complete Canny Algorithm

  1. image를 x와 y 각각으로 편미분한 값을 구한다. (I'x, I'y)
  2. 모든 픽셀에서의 edgeness를 구한다. (= |∇I|)
  3. gradient의 direction(orientation)에서 local maxima만 남긴다.
  4. Hysteresis Thresholding: thresholding을 여러 번 해서 linking한다.
  • 아주 강한 애들을 확실히 남기고(T'h 이용), 강한 애들 주변에서 T'l을 이용해 낮은 아이들을 모아서 linking한다.

Non-maximum suppression


local maxima는 어떻게 구하나?
q의 orientation에 있는 픽셀들의 값보다 q가 크면, 이를 local maxima로 두고, orientation line에 q값보다 더 큰 값이 있다면 local maxima를 그 값으로 바꿔준다.

Hysteresis Thresholding


그래프의 y축은 gradient amplitude를 나타낸다. 즉, |∇I|, edgeness, magnitude...
먼저 high threshold보다 높은 영역을 edge로 선정한다. 그리고 나서 edge로 선정된 영역 주변에서 low threshold보다 큰 영역을 또한 edge로 선정한다.

요약

  • smoothing과 derivate filtering을 동시에 진행하기 위해 derivate of gaussian(DoG)를 사용한다.
  • 어떠한 filter를 가지고 convolution을 수행함은 filter와 닮은 영역을 찾는 것으로도 생각할 수 있다.
  • DoG convolution하면, edgeness(=magnitude, gradient amplitude)가 나오는데, 이 중 edge를 찾아주기 위해 thresholding을 하려 한다.
  • 그러나, smoothing과 good edge localization은 항상 trade-off 관계에 있기 때문에 다른 방법을 사용해야한다.
  • 모든 픽셀에 대해 orientation 방향으로 local maxima를 찾는다.
  • high threshold를 이용해 강한 edgeness를 가진 영역을 edge로 선정하고, edge로 선정된 아이들 주변에 low threshold보다 높은 영역을 edge로 모은다.

0개의 댓글