책장/Computer Vision

[비전4] Edge

TERAJOO 2021. 4. 20. 22:25

1. Filters for features

 

이전에 필터링을 노이즈를 없애거나 줄이는 데에 사용한다고 했었다.

이제 어떻게 필터를 higher-level feature, 즉 의미있는 데이터를 뽑아내는 데에 사용할까에 대해 알아보자.

여기서 의미 있는 데이터란 edge, corner 와 같은 데이터를 의미한다.

 


2. templates matching

 

: 입력 이미지에서 템플릿 이미지의 위치를 찾는 방법이다.

template matching 은 template image 와 같은 사이즈의 window 를 가지고 source image의 모든 subimage 들과 비교하면서 유사도가 가장 높은 부분을 찾게 되는데, 크기가 같은 두 이미지 유사도를 구하는 방법 중 하나가 바로 NCC가 되는 것이다. (Normalized Cross Correlation)

NCC

: 각 픽셀들을 벡터라고 생각하자, (r,g,b) 이런식으로...

그리고 벡터를 정규화(normalize) 한다. 이 후 이 벡터들을 서로 내적했을 때 나올 수 있는 가장 큰 값은 얼마일까?

바로 1이다. 같은 두 벡터를 내적하는 경우이다. 반대로 가장 작은 값을 -1로 방향이 전혀 반대인 경우이다. 하지만 r,g,b 값은 음수가 없으므로 0이 최소이기도 하다.

다음은 NCC 를 구하는 식이다.

→ n : 픽셀의 개수

 

여튼 이런 식으로 template image 와 유사도가 가장 높은 subimage 를 찾아서 그 부분을 template 과 매칭시키면 물체 인식이 되는 것이다.

물론 이미지상에 물체가 존재하지 않을 경우를 생각해서 유사도가 threshold을 넘어가는 경우에만 인식하도록 하는 것이 좋다.

 


3. Edge detection

 

Edge 란?

1) Edge pixels

영상 내 특정한 픽셀 주변의 밝기 값이 급격하게 변하는 픽셀. 즉, pixel 의 불연속성을 통해 찾아낼 수 있다.

 

2) Edges

엣지 픽셀들의 연속된 집합. 어떤 것들이 이 Edge 를 발생시키나? 다음 그림을 보자.

적혀있는 대로 depth 의 차이 때문에 생기기도 하고,

 

3) 1차원에서 edge 감지하는 방법

: 1차 미분(변화량)을 구한다 ⇒

주변 값과의 차이

즉, 미분을 수행했을 때 크기가 0이 아닌 특정한 값을 가지는 부분을 활용해 edge를 검출할 수 있다.

 

4) 2차원에서 edge 감지하는 방법

: image gradient를 활용한다.

Gradient vector는 해당 픽셀의 변화량이 가장 급격한 방향(rapid change)을 가리킨다. Gradient vector와 Edge direction 은 수직관계에 있다.

여기서 알아두고 갈 것!

Orientation ; 기울기 방향

Magnitude ; edge 의 세기

 

5) Gradient의 방향을 구하면 Edge의 방향을 구할 수 있게 된다.

  • Derivatives with convolution
    이 때 x축 기반의 경사와 y축 기반의 경사 각각으로 edge 를 감지할 수 있다.
  •  
  • Edge detection filter 의 종류
    1. Prewitt
    1. Sobel
    1. Roberts
    My = fspecial('sobel');
    outim = imfilter(double(im), My);
    imagesc(outim);
    colormap gray;

 


◆4. Noise Image's Edge

 

이미지에 다음과 같이 노이즈가 껴있는 경우 Gradient 를 통한 edge 검출이 힘들 수 있다.

이러한 경우 어떻게 edge 를 찾아야 할까? 여러가지 방법이 있다.

 

ⓐ Smooth first

gaussian filter 를 통한 blur 처리로 노이즈를 잠재운 다음에 기울기를 찾을 수 있다.

ⓑ Derivative theorem of convolution

위의 방법에서 약간 순서만 바꾼 듯한 방식이다. step은 다음과 같다.

이게 왜 될까? 오른쪽의 공식이 성립하기 때문이다. 도함수를 따로 빼낸 다음에 계산을 해도 똑같다는 것을 알 수 있다.

두 방법 중에 Gaussian filter(low-pass filter의 일종) 의 미분을 구한 다음 기존의 이미지에 계산해주어 한번에 edge 를 찾는 것이 더 편해보인다. 이 때 Gaussian filter 의 미분 형태는 다음 두가지로 이루어져 있다.

어? 왜 갑자기 두 가지지? 이 질문에 대한 답은 이전 포스트에서 알 수 있다.

이전 포스트에서 Gaussian filter 의 분리가능성에 대해 잠깐 봤었다.

즉 이 성질에 의해 Gaussian 의 기울기 역시 각각 separate 된 놈의 기울기 곱으로 쪼개지기 때문에 위처럼 x축 방향, y축 방향 두 가지로 이루어져 있다고 봐도 무방하다.

 

여튼 이런식의 방법으로 noise 를 제거하면서 edge 를 찾을 수 있다. 하지만 이 때 사용되는 Gaussian filter 의 크기가 클 수록 blur 처리되어 edge 가 검출이 되니 이점만 주의하자. 다만 어느게 정답인 거인지는 그때그때 다르다.

 

Laplacian of Gaussian

도함수의 도함수를 통해 noise 를 감안한 edge 도출 역시 가능하다. 이 때는 다만 급격한 변화가 아닌 0을 통과하는, 즉 부호가 바뀌는 부분이 edge 이다.

또한 라플라시안 역시 x, y 축 기준으로 쪼갤 수 있다. (separate 가능!)

 

 


◆5. Edge Dectector

 

Thresholding

어떻게 pixel 을 솎아내어 최적화 할까? 에 대한 하이퍼파라미터 설정이 필요하다. 이 역시 비전 공학의 특성에 맞게끔 그때그때 융통성 있게 처리해야 한다고 한다.

 

위의 그림을 예시로 들었을 때, higher threshold 에 의해 뽑아내진 edge 가 더 인식하기 좋다는 것을 알 수 있다.

 

ⓐ Canny edge detector

Gaussian 으로 noise를 다룬 후 edge 를 뽑아내는 방법이다. 특이한 점은 Non-maximum suppression 으로 여러개의 edge 가 도출 된 경우 가장 선명한 edge 를 뽑아내는 방식을 사용한다는 점이다.

이 NMS 는 edge 뿐 아니라 detection 할 때에도 사용하니 알아두자.

 

다음 그림들이 Canny edge detector 를 사용한 예시이다. canny는 threshold 를 주어 edge 를 적절히 솎아낼 수 있으며 가우시안 필터를 통해 노이즈 처리 후 edge 를 검출한다는 거 알아두자.

 

Non-maximum suppression

위에서 말했듯이 기울기가 여러 개 있을 때 가장 큰 값을 선택한다는 방식을 이야기한다.

여튼 이 NMS 와 Thresholding 방식으로 edge 를 찾게 되었을 때 분명히 edge 인데 threshold 보다 작아 살아지는 문제가 생길 수 있다. 보통 곡선에서 이 문제가 많이 일어난다.

이 문제를 해결하기 위해 Hysteresis thresholding 방식을 사용한다.

오류를 최소화하기 위해 자신의 값 뿐만 아니라 주변의(공간적 또는 시간적으로) 값을 같이 참조하는 것이 효과적이다.

Hysteresis thresholding은 주변의 분류 결과에 따라서 자신의 분류 결과가 달라질 수 있는 thresholding 기법으로서 Canny edge detector에 사용된 이진화 기법이 가장 대표적인 예이다.

 

Hysteresis thresholding 방식의 과정은 다음과 같다.

  1. high threshold와 low threshold의 두 개의 threshold 값이 존재하며 high threshold 이상의 edginess 를 갖는 픽셀들은 무조건 edge 픽셀로 분류한다.
  1. low와 high 사이에 있으면서 이미 edge로 분류된 픽셀들과 연결되어(인접해) 있으면 edge 픽셀로 분류한다.
  1. 나머지 픽셀들(low threshold 이하이거나 high threshold 이하이면서 edge 픽셀과 연결되어 있지 않은 경우)은 모두 non edge 픽셀로 분류한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


참조링크