ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 영상 분할과 객체 검출
    컴퓨터 비젼(Computer Vision)/영상 분할과 객체 검출 2022. 2. 16. 15:20

    그랩컷

    • 그래프 컷(graph cut) 기반의 영약 분할 알고리즘
    • 영상의 픽셀을 그래프 정점으로 간주하고, 픽셀들을 두 개의 그룹으로 나누는 최적의 컷(Max Flow Minimun Cut)을 찾는 방식

    그랩컷 영상 분할 동작 방식

    • 사각형 지정 자동 분할
    • 사용자가 지정한 전경/배경 정보를 활용하여 영상 분할

    그랩컷 함수

    cv2.grabCut(img, mask, rect, bgdModel, fgdModel, iterCount, mode=None) -> mask, bgdModel, fgdModel
    • img: 입력 영상. 8비트 3채널 영상.
    • mask: 입출력 마스크. cv2.GC_BGD, cv2.GC_FGD, cv2.GC_PR_BGD, cv2.GC_PR_FGD, 4 개의 값으로 구성됨. (PR: probably). cv2.GC_INIT_WITH_RECT 모드로 초기화.
    • rect: ROI 영역, cv2.GC_INIT_WITH_RECT 모드에서만 사용됨.
    • bgdModel: 임시 배경 모델 행렬. 같은 영상 처리 시에는 변경 금지.
    • fgdModel: 임시 전경 모델 행렬. 같은 영상 처리 시에는 변경 금지.
    • iterCount: 알고리즘이 수행되는 횟수.
    • mode: cv2.GC_로 시작하는 모드 상수. cv2.GC_INIT_WITH_RECT로 초기화하고, cv2.GC_INIT_WITH_MASK 모드로 업데이터함. 

    참조

    https://docs.opencv.org/3.4/d8/d83/tutorial_py_grabcut.html

     

    예시

    코드

    import sys
    import numpy as np
    import cv2
    
    # 입력 영상 불러오기
    src = cv2.imread('fish.jpg')
    
    if src is None:
        print('Image load failed!')
        sys.exit()
    
    # 사각형 지정을 통한 초기 분할
    rc = cv2.selectROI(src)
    mask = np.zeros(src.shape[:2], np.uint8)
    
    cv2.grabCut(src, mask, rc, None, None, 7, cv2.GC_INIT_WITH_RECT)
    
    # 0: cv2.GC_BGD, 2: cv2.GC_PR_BGD
    mask1 = np.where((mask == 0), 0, 1).astype('uint8')
    mask2 = np.where((mask == 0) | (mask == 2), 0, 1).astype('uint8')
    dst1 = src * mask1[..., np.newaxis]
    dst2 = src * mask2[..., np.newaxis]
    
    mask = mask*64
    # 초기 분할 결과 출력
    cv2.imshow('dst1', dst1)
    cv2.imshow('dst2', dst2)
    cv2.imshow('mask', mask)
    cv2.waitKey()
    cv2.destroyAllWindows()

    결과물

    이미지 출처:

    https://seatechaquariums.com/average-lifespan-of-common-aquarium-fish/

     

    결론

    일반적인 용도로 사용할 순 없고, 빠르게 구분하기 위해 사용되는 알고리즘으로 입력 영상을 잘 줘야한다. 

    '컴퓨터 비젼(Computer Vision) > 영상 분할과 객체 검출' 카테고리의 다른 글

    HOG 보행자 검출  (0) 2022.02.17
    캐스케이드 분류기  (0) 2022.02.17
    템플릿 매칭  (0) 2022.02.17
    모벤트 기반 객체 검출  (0) 2022.02.16

    댓글

Designed by Tistory.