반응형

1. 노이즈 제거

 Edge detection은 이미지의 노이즈에 민감하므로 첫 번째 단계에서 Gaussian filter를 사용하여 이미지의 노이즈를 제거한다.

 

 

2. 이미지의 Gradient 크기, 방향 구하기

 노이즈가 제거된 이미지에 수평(Gx), 수직(Gy) 방향으로 Sobel kernel 필터링하여 파생 모델을 얻는다. 이 두 영상에서 다음과 같이 각 픽셀에 대한 Edge Gradient 및 방향을 찾을 수 있다.

 

Gradient 방향은 항상 Edge에 수직이다.

 

 

3. 최댓값이 아닌 픽셀 0으로 만들기(Non-maximum Suppression)

 Gradient 크기와 방향을 얻은 후, Edge를 구성하지 않을 수 있는 불필요한 픽셀 제거를 위해 이미지 전체를 스캔한다.

 

  • 위 그림에서 A는 Edge 위에 있다.
  • Gradient 방향은 Edge에 수직이다.
  • 점 B, C는 Gradient 방향이다.
  • 따라서 점 A는 점 B, C와 비교하여 local maximum 값인지 확인한다.
  • A가 최대라면 다음 단계로 넘어가고, 아니라면 0으로 설정.

 (쉽게 말해서 주변 픽셀을 탐색하여 가장 값이 큰 녀석만 남기겠다는 거다...)

 

4. Hysteresis Thresholding

 이 단계는 모든 Edge가 실제로 Edge인지 아닌지를 결정. 이를 위해 minVal 및 maxVal의 두 가지 임계값이 필요하다. Gradient의 크기가 maxVal보다 큰 모든 Edge는 Edge가 되고, minVal보다 작은 Edge는 버려진다. 두 임계값 사이에 있는 Edge들은 연결성을 기반으로 Edge인지 아닌지 결정된다.

 

 위 그림에서

  • A는 maxVal 위에 있기 때문에 Edge.
  • C는 maxVal보다 낮지만 A에 연결되어 있으므로 유효한 Edge로 간주된다.
  • 그러나 B는 minVal 이상이고 C와 동일한 영역에 있지만 확실한 Edge에 연결되어 있지 않으므로 폐기된다.

 

 

Canny Edge Detection in OpenCV

void cv::Canny(InputArray image, 
	OutputArray edges, 
	double threshold1, 
	double threshold2, 
	int apertureSize=3, 
	bool L2gradient=false
)

image : 8 bit input image

edges : output edge map, 8 bit single channel

threshold1 : minVal

threshold2 : maxVal

apertureSize : Sobel을 위한 aperture size

반응형
woongs_93