Blob
1 개요
이웃하는 픽셀들의 집합으로, 픽셀들의 밝기값을 기준으로 영역을 구분하는 알고리즘입니다.
설정한 조건에 해당하는 픽셀들을 하나로 연결하여 객체로 만들어줍니다. 연결방향은 4방향과 8방향을 지원합니다.
일반적으로 이미지에서 객체나 특징을 추출하는데 사용됩니다.
2 알고리즘 상세 설명
Result Image | ||
---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
Fig.1 Blob
이미지에서 객체 또는 특징을 검출하는데 사용되며, 결과를 다양한 타입으로 얻을 수 있습니다.Result Image | Sort Image | Sort Cluster Image |
---|---|---|
![]() |
![]() |
![]() |
Fig.2 Blob Sort
결과들을 특정 기준에 따라 정렬할 수 있습니다(Fig.2). 위의 이미지에서 숫자는 객체 번호입니다. Perimeter 기준으로 정렬한 결과와, cluster 단위로 정렬한 결과입니다.
cluster 단위 정렬의 경우 같은 색상의 번호가 하나의 cluster입니다. cluster 정렬은 결과 객체가 일정한 규칙으로 있는 경우 사람이 인식하는 순서로 결과를 얻을 수 있습니다.
Result Image | Filter Image | |
---|---|---|
![]() |
![]() |
![]() |
Fig.3 Blob Filter
Blob 결과에서 조건에 맞지 않는 객체들을 제외할 수 있습니다. Fig.3은 각 해당 조건에 맞는 객체를 제거한 결과입니다.
3 파라미터 설정 및 사용 방법
- 세팅 함수
SetThresholdMode
- 임계값 조건 동작을 설정합니다. 기본값은
EThresholdMode_Single
으로 단일 임계값입니다. EThresholdMode_Dual_And
: 2개의 조건이 모두 참이 되는 객체를 검출합니다.EThresholdMode_Dual_Or
: 2개의 조건 중 하나만 참이 되면 객체로 검출합니다.
- 임계값 조건 동작을 설정합니다. 기본값은
SetThreshold
- 이미지에서 객체를 검출할 임계값을 설정합니다. 기본값은
127
입니다 - 채널별로 값을 다르게 지정할 수 있습니다.
EThresholdMode_Dual_And
또는EThresholdMode_Dual_Or
로 설정된 경우 2중 조건으로 검사합니다.
- 이미지에서 객체를 검출할 임계값을 설정합니다. 기본값은
SetLogicalCondition
- 임계값을 어떤 조건으로 검사할 것인지 설정합니다.
- 채널별로 다르게 지정할 수 있으며 기본값은
ELogicalCondition_Greater
입니다.
SetConnectedDirection
- 픽셀 연결 방향을 설정합니다. 기본값은
EConnectedDirection_Direction_8
입니다.
- 픽셀 연결 방향을 설정합니다. 기본값은
- 결과 함수
- 결과 객체를 얻어오는 함수
GetResult~~
로 시작하며 각 객체 타입에 대한 결과가 어미로 붙습니다.BoundaryRects
: 경계 사각형을 얻어옵니다.CFLRect<int32_t>
타입이CFLFigureArray
에 객체 순서대로 들어있습니다.Contours
: 픽셀 크기로 확장된 윤곽 도형을 얻어옵니다.CFLRegion
타입이CFLFigureArray
에 객체 순서대로 들어있습니다.PixelCenterContours
: 픽셀 중심 좌표에 대한 윤곽 도형을 얻어옵니다.CFLRegion
타입이CFLFigureArray
에 객체 순서대로 들어있습니다.MinimumEnclosingRectangles
: 최소 경계 사각형을 얻어옵니다.CFLQuad<double>
타입이CFLFigureArray
에 객체 순서대로 들어있습니다.ConvexHulls
: 볼록 경계 도형을 얻어옵니다.CFLRegion
타입이CFLFigureArray
에 객체 순서대로 들어있습니다.GravityCenters
: 무게 중심을 얻어옵니다.CFLPoint<double>
타입이CFLFigureArray
에 객체 순서대로 들어있습니다.Circularities
: 순환성을 얻어옵니다. 원과 유사할수록 1에 가깝게 나옵니다.double
타입이CFLArray
에 객체 순서대로 들어있습니다.Areas
: 객체의 픽셀 넓이를 얻어옵니다.uint64_t
타입이CFLArray
에 객체 순서대로 들어있습니다.Angles
: 객체의 각도를 얻어옵니다. 모멘텀으로 객체의 기울기를 계산합니다.float
타입이CFLArray
에 객체 순서대로 들어있습니다.
Sort
- 측정 결과를 조건에 따라 정렬합니다.
- 여러 조건을 설정할 수 있으며, 순서에따라 정렬 우선순위가 부여됩니다.
SortClusterMode
- 데이터가 일정한 규칙으로 있는 경우 사람의 인식수준의 순서로 정렬합니다.
Filter
- 측정 결과에서 조건에 맞는 객체들을 제거합니다.
- 여러 조건을 설정할 수 있습니다.
- 결과 객체를 얻어오는 함수
4 예제 코드
CBlob blob;
//////////////////////////////////
// 공통 파라미터 설정
//////////////////////////////////
//////////////////////////////////
// 추가 옵션 설정
//////////////////////////////////
blob.SetThreshold(180);
blob.SetLogicalCondition(ELogicalCondition_Less);
blob.Execute();
// 넓이가 100 이하인 객체 제거
blob.Filter(CBlob::EFilterItem_Area, 100., ELogicalCondition_LessEqual);
// 둘레를 기준으로 정렬
blob.Sort(CBlob::EFilterItem_Perimeter, CBlob::EOrder_Ascending);
// 결과를 경계 사각형으로 얻어오기
CFLFigureArray boundaryRects;
blob.GetResultBoundaryRects(boundaryRects);
// 결과를 윤곽 도형으로 얻어오기
CFLFigureArray boundaryContours;
blob.GetResultContours(boundaryContours);