Contents

[DL]Image Segmentation 3

개요

  1. 이전 글에 이어서 Image segmentation의 접근 방법 (Edge 기반 방법, 영역 기반 방법)에 대해서 알아보고자 한다.

  1. 먼저 Edge 기반 방법Edge Detection에 대해 알아보겠다.

Edge Detection

  1. Edge Detection은 영상(Image)의 Edge(경계선, 윤곽선)을 검출하는 것이다. 이때 Edge는 깊이, 색깔, 조명이 달라서등 다양한 원인에 의해서 생길 수 있다. Edge는 이러한 원인들에 의해서 밝기가 급격하게 변한다라고 말할 수 있다.

  1. 따라서 영상상의 Edge의 밝기를 분석했을 때 Edge에 해당하는 부분은 픽셀의 밝기가 급격하게 변한다라는 특징을 가지고 있다.
    /images/image-segmentation-3/image-segmentation-1.png
    [그림 1] intensity function
  2. 위 [그림 1]을 보면 중간 그림 처럼 아래로 떨어지는 부분이나, 위로 오르는 부분이 Edge이다. 이 부분을 미분을 해보면 우측 그림 처럼 극값이 Edge라고 할 수 있다.

  1. 따라서 Edge 검출 방법은 미분을 이용하여 근처 픽셀과의 변화율을 찾아 검출하는 것이다. 변화율을 찾을 때 1차 미분, 2차 미분을 이용하는 방법이 있다.

  1. Edge Detection에선 1차 미분의 중앙 차분 방법을 사용하는데 이 방법을 영상 속 픽셀에 적용시키기 위하여 미분 마스크를 사용하게 된다. 미분 마스크는 가로(x), 세로(y) 방향이 있고 x,y 방향 둘 다 계산(1차 미분)을 하여 두 개의 결과를 합쳐서 일정 threshold를 기준으로 Edge를 검출 할 수 있게 된다.
    /images/image-segmentation-3/image-segmentation-2.png
    [그림 2] Edge Detection flow
    /images/image-segmentation-3/image-segmentation-3.png
    [그림 3] Mask Filter
  2. 미분 마스크의 여러 형태(마스크의 값)이 있는데 이 중 일반적으로 간단한 sobel을 많이 사용한다.
  • 라이브러리 cv2의 Sobel 메서드를 사용하면 미분 마스크를 사용해볼 수 있다.
    import cv2
    img = cv2.imread("some_img.png", cv2.IMREAD_GRAYSCALE)
    dx = cv2.Sobel(img,-1,1,0, delta = 128) # delta는 시각화를 위하여
    dy = cv2.Sobel(img,-1,0,1, delta = 128) # delta는 시각화를 위하여
    
    • 3*3 필터로 각각 x방향, y방향 편미분을 하는 방식

Region Growing

  1. 영역 기반 방식에서 가장 많이 사용되는 방식이 region-growing 알고리즘이다. 이 방식은 **기준 픽셀(SEED)**을 정하고 기준 픽셀과 비슷한 속성을 갖는 픽셀로 영역을 확장하여 더 이상 속성을 갖는 것들이 없으면 확장을 마치는 방식이다.

  1. **기준 픽셀(SEED)**를 정하는 방식은 Thresholding & Morphological등의 방법이 사용될 수 있다. Thresholding을 사용하여 그림을 추출 한 후 구체적인 포인트를 뽑기 위해 Morphological Erosion을 하는 방식이 있다.

  1. 시드포인트를 정한 후 확장하는 방법도 다양하다.
  • 원래의 시드 픽셀과 비교
    • 기존 시드 픽셀과 비교하여 일정 범위 이내가 되면 영역을 확장하는 방법. (잡음에 민감, seed에 민감)
  • 확장된 위치의 픽셀과 비교
    • 원래 시드 픽셀의 위치가 아니라 영역이 커지는 만큼 시드 픽셀도 방향에 맞게 같이 커지는 방식.
      /images/image-segmentation-3/image-segmentation-4.png
      [그림 4] Region Growing

Reference