[영상처리] Connected-component Algorithm (Blob)

이수빈·2024년 8월 11일
0

ImageProcessing

목록 보기
2/2
post-thumbnail

✏️ Connected-component Algorithm이란?

N*N 크기의 2차원이미지(흑백이미지) 에서 인접한(상,하,좌,우 or 상,하,좌,우, 대각선) 픽셀에 모두 같은 번호(Label)을 붙이고 연결되지 않은 다른 성분(component)에는 다른 번호를 붙이는 알고리즘

✏️ 알고리즘 설명

  1. 흑백이미지의 첫번째 픽셀을 시작으로 한다. image[0][0]

  2. 그 픽셀이 foreground픽셀이면 current pixel로 지정해주고 queue에 추가한다.

  3. 만약 back ground pixel 이거나 label이 있다면 foreground pixel을 찾을 때 까지 반복 한다.

  4. 반복이 완료 되면 queue에서 element를 꺼내어 foreground pixel이 며 label이 없다면 current pixel로 지정하고 curlab 을 1 더한다. 그리고 queue에 추가한다.

  5. 이 과정을 queue에 element가 없을때 까지 반복한다.

✏️ 알고리즘 적용시 파라미터

객체의 연결 기준을 상하좌우 혹은 상하좌우대각선으로 볼지 선택 가능하다.

✏️ 실제 코드

  def count_cells(x, y):

    if x < 0 or y < 0 or x >= N or y >= N:
        return 0
    elif blob[x][y] != IMAGE or blob[x][y] == ALREADY_COUNTED:
        return 0
    else:
        blob[x][y] = ALREADY_COUNTED
        return (1 + count_cells(x, y-1) 
                + count_cells(x+1, y-1)
                + count_cells(x+1, y)
                + count_cells(x+1, y+1) 
                + count_cells(x, y+1)
                + count_cells(x-1, y+1)
                + count_cells(x-1, y)
                + count_cells(x-1, y-1))

✏️ 활용

  • Object Detection 오토 라벨링
  • 여러개의 객체를 동시에 찍은 이미지 자르지(crop)

0개의 댓글