레이블링과 외곽선 검출

이주희·2022년 12월 7일
0

레이블링

배경과 객체 분리 이후 각 객체 분리 필요
이떄 사용하는 작업
객체 픽셀 집합에 고유 번호 매기기
-> 연결된 구성 요소 레이블링 이라고도 함

이진화 후 진행

  • 검은색은 배경
    픽셀값 0
  • 흰색은 객체
    픽셀값 0 아닌 다른 수

연결 관계

  • 4-방향 연결성
    상하좌우 붙어있는 픽셀끼리 연결되있다고 정의
  • 8-방향 연결성
    대각선 방향까지 연결돼있다고 정의

이진 영상 레이블링 하면 2차원 정수 행렬 만들어짐 -> 레이블 맵

  • connectedComponents를 사용하면 레이블된 맵 리턴

  • connectedComponentsWithStats 사용하면 통계 정보까지 같이 제공
    stats와 centroids가 추가된 형태

  • stat 행렬에서 두번째 행렬 0,0,4,3,10 확인해보면
    1번 객체 감싸는 바운딩박스 (0,0)~ (4,3) 이다
    1번 객체 픽셀 수는 10

  • centroids 행렬에서 두번째 행 원소 값이 (1.7 ~ 1.2)
    1번 영역 무게중심 좌표

외곽선 검출

외곽선 : 객체 영역 중 배경 영역과 가장 인접한 일련의 픽셀

vector<vector<Point>> contours; 로 나타냄
객체 백터 안에 여러 점들...

검출하면 contours 변수에

contours[0] : [1,1], [1,2] , [1,3] ...
contours[1] : ...
이런 식으로 들어감

findContours() 함수 이용

mode 인자

  • RETR_EXTERNAL
    객체 바깥쪽 외곽선만 검출
  • RETR_LIST
    바깥쪽과 안쪽 검출, 계층 x
  • RETR_CCOMP
    모든 외곽선 검출, 2단계 계층 구조 형성
  • RETR_TREE
    모든 외곽선 검색, 전체 계층 구조 형성

method 인자
검출된 외곽선 점의 좌표 근사화

  • CHAIN_APPROX_SIMPLE
    점 개수 줄이는 데에 유리
  • CHAIN_APPROX_TC89_L1,
    CHAIN_APPROX_TC89_KCOS
    점 수가 줄지만 외곽선 모양 변형 생김

외곽선 처리 함수

  • boundingRect()
    외곽선, 점을 감싸는 최소 크기의 사각형

  • minEnclosingCircle
    외곽선, 점을 감싸는 최소 크기의 원

  • approxPolyDP()
    주어진 곡선 형태를 단순화하여 작은 개수의 점으로 구성된 곡선 생성

  1. 외곽선에서 가장 떨어진 두점 찾아 직선으로 잇기
  2. 해당 직선에서 가장 떨어진 외곽선점 찾기
  3. 이 점을 수직선으로 근사화점 추가
    반복

0개의 댓글