관리 메뉴

ComputerVision Jack

[컴퓨터 비전 - 레이블링과 외각선 검출] 본문

Image Processing/Computer Vision

[컴퓨터 비전 - 레이블링과 외각선 검출]

JackYoon 2020. 2. 3. 13:11
반응형

레이블링

배경과 객체를 구분한 다음 다시 객체를 구분하고 분석하는 작업이 필요하다.

 

레이블링(Lbeling)

영상 내에 존재하는 객체 픽셀 집합에 고유 번호를 매기는 작업으로 구성 요소 레이블링 이라고도 한다.

객체인식을 위한 전처리 과정으로 자주 사용한다.

일반적으로 이진화된 영상에서 수행한다.

 

4방향 연결성 과 8방향 연결성

연결성 판단

레이블링에 의해 고유 번호가 있는 2차원 정수 행렬이 만들어짐

이러한 2차원 정수 행렬을 레이블 맵(label map)이라고 한다.

객체 레이블링 알고리즘 예시

int conntectedComponents(InputArray image, OutputArray labels, int connectivity = 8, int ltype = CV_32S);

#레이블링 적용하는 함수

 

int connectedCompoentsWithStats(InputArray image, OutputArray labels, OutputArray stats,

                                                           OutputArray centroids, int connectivity = 8, int ltype = CV_32S);

#labels과 stats와 centroids를 반환한다.

CompoenentsWithStats()함수 반환값
라벨링 적용

외곽선 검출

객체 외곽선(contour)

객체 영역 픽셀 중에서 배경 영역과 인접한 일련의 픽셀.

최외곽에 있는 픽셀을 외곽선으로 정의한다. 영역 안에 존재하는 hole에 대한 외각선도 검출 할 수 있다.

객체 외각선 검출 

void findContours(InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode,

                                                                                            int method, Point offset = Point());

 

void findContours(InputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset = Point());

#영상 내부 객체들의 외곽선을 검출하는 함수

hierachy인자에 따라 함수가 다르게 오버로딩 되어 있다.

외각선 검출 이미지
영상의 외곽선 계층 구조

void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, 

                    const Scalar& color, int thickness = 1, int lineType = LINE_8, InputArray hierarchy = noArray(),

                                                                              int maxLevel = INT_MAX, Point offset = Point());

#객체 외곽선 정보를 그리는 함수

외곽선 그리기

Rect boundingRect(IntputArray points);

#주어진 외곽선 점들을 감싸는 바운딩 박스를 구하는 함수

 

RotatedRect minAreaRect(InputArray points);

#외곽선을 감싸는 최소 크긱의 회전된 사각형을 구하는 함수

 

void minEnclosingCircle(InputArray points, Point2f& center, float& radius);

#최소 크기의 원을 구하는 함수

 

double arcLength(InputArray curve, bool closed);

#곡선을 형성하는 점 집합을 가질때, 곡선의 길이를 구하는 함수

 

double contourArea(InputArray contour, bool oriented = false);

#외곽선이 감싸는 영역의 면적을 구하는 함수

 

더글라스 - 포이커 알고리즘

void approxPlolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed);

#외곽선 또는 곡선을 근화하는 함수

사각형 삼각형 원 외곽선 근사화
ex_contours.cpp
0.00MB
ex_labeling.cpp
0.00MB
ex_object.cpp
0.00MB

반응형
Comments