Operator Library: Blob
BlobDetector2D 연산자는 이진 이미지에서 객체를 감지하고 그 속성을 파악합니다. 이 연산자의 출력은 각 객체의 속성을 나타내는 여러 데이터 스트림입니다.
이 연산자의 기능은 VisualApplets에서 완전히 시뮬레이션할 수 있습니다.
Library Blob 소개도 함께 참조하세요.
BlobDetector2D는 BoundingBox, Area 및 Center of Gravity X와 Y 기능을 지원합니다.
![]() |
Center of Gravity X와 Y는 연산자의 직접적인 출력이 아닙니다. |
|---|---|
|
출력 포트 CenterX와 CenterY는 실제로 이미지 모멘트 M10 (CenterX)과 M01 (CenterY)을 제공합니다. 객체의 무게 중심을 추출하려면 모멘트를 추출된 면적으로 나누어야 합니다:
|
입력된 이미지는 작업자가 한 줄씩 처리합니다. 작업자는 미래를 예측할 수 없기 때문에, 나중에 서로 연결되는 영역이 처음에는 독립된 영역으로 보일 수 있습니다. 따라서 이 문서에서 한 줄 내에 서로 연결된 픽셀들을 객체 아티팩트라고 명명됩니다. BlobDetector2D 연산자는 이러한 객체 아티팩트가 다음 줄의 다른 객체 아티팩트와 겹치는지 확인합니다. 이는 해당 객체들이 실제로 독립적인지, 아니면 더 큰 객체의 일부인지 판단하기 위함입니다. 이 연산자가 처리할 수 있는 오브젝트 아티팩트의 최대 개수는 LabelCount 매개변수로 정의됩니다. 만약 오브젝트 아티팩트의 개수가 LabelCount 값을 초과하면 데이터가 손실되며, 오브젝트 결과의 무결성이 더 이상 보장되지 않습니다. 이를 컨텍스트 손상라고 합니다. 데이터가 손실된 라인은 Line Error 더미 객체로 표시되며, 이는 ErrorFlag를 통해 식별할 수 있습니다. 손상된 컨텍스트 내의 모든 후속 객체에는 해당 플래그가 지정됩니다. 컨텍스트 손상은 프레임 종료 시 또는 애플릿을 다시 시작함으로써 컨텍스트가 자동으로 재설정되면 종료됩니다. 모든 오류 플래그는 '출력 포트' 섹션에 나열되어 있습니다 .
대부분의 경우 컨텍스트 손상을 방지하는 데 필요한 레이블 수는 라인 내 객체 아티팩트의 최대 수와 같습니다. neighborhood = 4 및 neighborhood = 8의 경우 필요한 정확한 레이블 수가 약간 다릅니다:
-
neighborhood = 4의 경우 컨텍스트 손상을 방지하는 데 필요한 레이블 수는 N 라인의 X 위치에 있는 모든 픽셀과 N+1 라인의 X 위치에 있는 픽셀 간의 객체 아티팩트 최대 수와 같습니다.
-
neighborhood = 8의 경우 컨텍스트 손상을 방지하는 데 필요한 레이블 수는 N 라인의 X 위치에 있는 모든 픽셀과 N+1 라인의 X+1 위치에 있는 픽셀 간의 객체 아티팩트 최대 수와 같습니다.
선택한 레이블 양이 사용 사례에 충분한지 확실하지 않은 경우 시뮬레이션에서 확인하십시오.
BlobDetector2D 모듈을 인스턴스화할 때, 생성할 출력 포트를 정의할 수 있습니다. 포트를 활성화하거나 비활성화하면, 해당 기능도 자동으로 활성화되거나 비활성화됩니다. 일단 이 포트를 확정하면 더 이상 변경할 수 없습니다. 다른 출력 포트가 필요한 경우, 별도의 BlobDetector2D 모듈을 인스턴스화해야 합니다.
블롭 검출기 연산자는 처리 속도, 즉 대역폭이 이미지 콘텐츠에 따라 달라지는 몇 안 되는 연산자 중 하나입니다. 이 연산자는 응집된 라인 내에서 전경 픽셀과 배경 픽셀 간의 변화가 거의 없는 이미지에서 가장 잘 작동합니다. 따라서 여러 라인 내에 노이즈나 많은 수의 객체 아티팩트가 있으면 데이터 처리량이 눈에 띄게 느려집니다. 하지만 이는 노이즈가 매우 심한 이미지에만 적용됩니다.
이 연산자는 입력 이미지를 한 줄씩 처리함으로써 지연 시간을 최소화합니다. 객체의 끝이 명확해지면, 객체의 특징은 연산자에 의해 즉시 출력됩니다. 따라서 객체의 출력은 객체가 끝나는 바로 그 줄에서 이루어집니다. 이를 통해 이미지 자체가 오퍼레이터에 의해 여전히 처리되고 있는 동안에도 완성된 객체 특징에 대한 후처리가 가능해집니다.
DMA 및 일부 다른 연산자는 프레임 종료 신호를 기다린 후에야 처리가 완료되었다고 보고한다는 점에 유의하십시오. 프레임 종료 신호는 입력 이미지의 마지막 줄이 처리되면 생성됩니다.
연산자의 리소스 소비는 활성화된 기능, 기능에 사용되는 비트 수, 선택한 레이블 수에 따라 달라집니다. 따라서 Basler는 필요하지 않은 기능을 비활성화하고 LabelCount 파라미터를 설정할 때 주의할 것을 권장합니다.
![]() |
Bounding Box 포트 일부 비활성화는 리소스를 절약하지 않음 |
|---|---|
|
Bounding box에는 여러 개의 출력 포트가 있으므로, 모든 포트가 비활성화된 경우에만 해당 기능이 비활성화됩니다. Bounding box 포트를 일부만 비활성화하는 것은 리소스를 절약하지 않습니다. |
![]() |
최대값을 수동으로 설정하면 리소스가 절약됨 |
|---|---|
|
리소스 절약 및 디자인 처리 향상을 위해, 감지할 객체의 최대값을 알고 있는 경우 Basler에서는 링크의 Bit Width를 수동으로 설정할 것을 권장합니다. |
블롭 감지기의 ImageI 입력은 이진(픽셀 비트 폭 1) 2차원 이미지를 기대합니다. 이 연산자는 이미지 내의 서로 다른 줄 길이는 물론, 빈 줄과 빈 프레임도 입력으로 지원합니다.
이 오퍼레이터는 전경(foreground) 값이 ONE이고 배경(background) 값이 ZERO일 것으로 가정합니다. 사전 이진화(binarization) 과정에서 이 요구 사항이 충족되도록 하십시오.
출력은 VALT_IMAGE2D 이미지 형식으로 표시됩니다. 각 출력 포트는 하나의 객체 특징/객체 속성을 나타냅니다. 이들은 동기식이며 함께 하나의 객체를 설명합니다. 각 출력 픽셀은 완성된 객체 또는 오류 상태 객체의 값을 제공합니다. 이 출력이 추출된 객체인지 오류 상태 객체인지는 ErrorFlagsO 출력 포트를 통해 표시됩니다. 객체를 나타내는 픽셀은 해당 객체가 완료된 줄에 나타납니다. 이들은 완료된 순서대로 출력됩니다. 예를 들어, 두 개의 객체가 10번째 줄에서 끝납니다. 객체 A의 마지막 픽셀은 X 좌표가 42이고, 객체 B의 마지막 픽셀은 X 좌표가 97입니다. 따라서 객체 A는 연산자의 출력 포트에서 첫 번째 픽셀이고, 객체 B는 두 번째 픽셀입니다. 객체가 완료되지 않았고 오류도 발생하지 않은 행은 비어 있습니다.
feature 데이터의 오버플로우를 방지하기 위해 제공된 입력 형식을 기반으로 출력 포트의 폭이 자동으로 조정됩니다. 또는 출력 포트의 폭을 수동으로 구성할 수도 있습니다. 링크 bit width의 수동 구성은 오퍼레이터 property에서 Area / CenterX / CenterY를 활성화한 경우에 사용할 수 있습니다.
포트 ErrorFlagsO는 오버플로우 또는 추가 정보 태그에 대한 여러 오류 플래그를 출력합니다. 각 비트는 특정 플래그용으로 예약되어 있습니다. 하드웨어의 런타임 환경 또는 시뮬레이션에서 이러한 오류 플래그를 확인할 수 있습니다. 시뮬레이션에서 이러한 오류 플래그를 확인하려면:
-
BlobDetector2D의 ErrorFlagsO 포트에 시뮬레이션 프로브를 추가합니다.
-
오버플로우를 유발하는 이미지를 시뮬레이션에 추가합니다.
-
시뮬레이션을 실행합니다.
-
출력 포트의 를 엽니다.
-
검사하려는 픽셀로 스크롤하고, 확대하여 픽셀 값을 확인한 후 픽셀 값을 다음으로 설정합니다. :
-
hex 값 내의 활성 비트는 blob 객체와 관련된 다양한 오류 또는 상태 정보를 나타냅니다. 자세한 내용은 아래 표를 확인하십시오.
오류 플래그에 대한 자세한 설명은 아래 파라미터 설명에서 확인하실 수 있습니다. 요약은 다음 표에 나와 있습니다.
| Bit # | 설명 | 참고 사항 |
|---|---|---|
| 0 | Area 오버플로우 |
객체의 'Area' 값이 처리 과정에서 어느 시점에서 제공된 출력 비트 폭을 초과했습니다. |
| 1 | CenterX Overflow |
처리 과정 중 특정 시점에서 객체의 CenterX 값(이미지 모멘트 M10)이 제공된 출력 bit width를 초과했습니다. |
| 2 | CenterY Overflow |
처리 과정 중 특정 시점에서 객체의 CenterY 값(이미지 모멘트 M01)이 제공된 출력 bit width를 초과했습니다. |
| 3, 4 | 예비 |
향후 확장을 위해 예약되어 있습니다. |
| 5 | Line Error |
선택한 레이블 수로 처리할 수 있는 것보다 더 많은 객체 아티팩트가 발생한 라인을 나타내는 더미 객체를 나타냅니다. 사용 가능한 memory가 부족하여 들어오는 데이터를 더 이상 처리할 수 없습니다. 이는 더미 객체이므로 다른 포트의 피처 데이터 값에는 유용한 데이터가 포함되어 있지 않습니다. 시뮬레이션에서는 피처 값이 0으로 표시되지만 하드웨어에서는 어떤 값으로든 지정될 수 있습니다. 하위 ErrorBits 7-0이 활성화된 피처 및 해당 값에 연결되어 있으므로, 이러한 플래그는 시뮬레이션과 하드웨어에서 서로 다를 수 있습니다. 이 에러 플래그가 존재할 경우, 항상 라인의 첫 번째 객체 출력입니다. |
| 6 | ContextCorruption |
선택한 레이블 수로 처리할 수 있는 것보다 더 많은 객체 아티팩트가 발생했습니다. 들어오는 모든 데이터를 처리하기에는 사용 가능한 memory가 충분하지 않습니다. 플래그가 지정된 객체의 무결성을 보장할 수 없습니다. 운영자는 프레임이 끝날 때나 데이터 수집을 다시 시작함으로써 정상적인 작동 상태로 복귀합니다. 다음 이미지는 이전 컨텍스트 손상의 영향 없이 처리됩니다. |
표 37. Blob 오류 플래그 설명
| Property | Value |
|---|---|
| Operator Type | M |
| Input Link | ImageI, 데이터 입력 |
| Output Links | BoundingX0O, data output BoundingX1O, data output BoundingY1O, data output BoundingHeightO, data output AreaO, data output CenterXO, data output CenterYO, data output ErrorFlagsO, data output |
|
Bit Width은 ImageI 링크로 들어오는 최대 이미지 Width을 기반으로 합니다. 다음과 같이 계산됩니다. |
|
|
비트 폭은 ImageI
링크의 최대 입력 이미지 높이를 기준으로 합니다. 이는 다음과 같이 계산됩니다. |
|
|
비트 폭은 ImageI
링크의 최대 입력 이미지 높이를 기준으로 합니다. 이는 다음과 같이 계산됩니다. |
|
|
AreaBitWidthMode, CenterXBitWidthMode, CenterYBitWidthMode 파라미터를 통해 링크를 수동으로 구성할지 자동 모드를 사용할지 선택할 수 있습니다. 링크를 수동으로 편집하는 경우 허용되는 범위는 [1, 48]입니다. |
|
|
이미지의 최대 너비는 다음 매개변수와 같습니다. LabelCount + 1. |
| LabelCount | |
|---|---|
| Type | static parameter |
| Default | 100 |
| Range | [1, (max. Img Width(Input Link I) / 2 + 2] |
|
부분 객체를 내부적으로 추적하기 위해, 이 매개변수는 사용 가능한 레이블의 수를 설정합니다. 또한 한 줄에 출력될 수 있는 객체의 최대 개수에도 영향을 미칩니다.BlobDetector2D 연산자에 필요한 리소스는 라벨 수에 따라 달라진다는 점에 유의하십시오. 이 매개변수의 적절한 값 범위는 100에서 500 사이이며, 이는 대부분의 응용 프로그램에 충분할 것입니다. 선택된 레이블보다 더 많은 부분 객체가 발생하면 데이터가 손실되고 프레임의 컨텍스트가 손상됩니다. 이 경우, 출력 링크 ErrorFlagsO의 6번째 비트가 '1'이 되어 제공된 데이터가 더 이상 신뢰할 수 없음을 나타냅니다. 이 오류 비트는 데이터 손실이 감지되면 설정되며, 출력 프레임이 종료되면 재설정됩니다. |
|
| Neighborhood | |
|---|---|
| Type | static parameter |
| Default | EightConnected |
| Range | {FourConnected, EightConnected} |
|
이 파라미터는 object detection에 필요한 인접 영역을 선택합니다. 픽셀 인접 영역에 대한 자세한 설명은 'Definition'을 참조하십시오. |
|
| AreaBitWidthMode | |
|---|---|
| Type | static parameter |
| Default | 자동 프레임 최대값 |
| Range | {자동 프레임 최대값, 수동 편집 가능 링크} |
|
객체의 면적은 모든 객체 전경 픽셀의 합으로 정의됩니다. AutomaticContextMaximum이 선택된 경우, 연산자는 객체의 최대 크기에 해당하는 비트를 자동으로 설정합니다. 객체의 최대 가능 크기는 입력 링크 I의 최대 너비와 높이에 따라 결정됩니다. 객체의 이론적 최대 면적은 이미지의 모든 픽셀이 전경 값으로 구성될 때 달성되며, 즉 흰색 입력 이미지가 하나의 거대한 객체로 이루어진 경우를 말합니다. 가능한 최대 CenterX (이미지 모멘트 M10) 값이 알려져 있거나, 특정 X 좌표를 가진 물체만 관심 대상인 경우, Basler는 LinkManuallyEditable 모드를 사용할 것을 권장합니다. 이렇게 하면 리소스를 절약하고 전체 설계의 빌드 시간을 단축할 수 있습니다. LinkManuallyEditable 모드에서는 허용 범위 [1, 48] 내에서 링크의 비트 폭 속성을 편집할 수 있습니다. 링크의 비트 폭은 Area 피처를 계산하는 데 내부적으로 사용되는 비트 폭과 직접적으로 연동되므로, 전체 리소스 소비량에 영향을 미칩니다. 비트 폭이 객체의 Area 값을 표현하기에 충분하지 않은 경우, 이는 ErrorFlagO 링크(비트 0)를 통해 표시됩니다. |
|
| CenterXBitWidthMode | |
|---|---|
| Type | static parameter |
| Default | 자동 프레임 최대값 |
| Range | {자동 프레임 최대값, 수동 편집 가능 링크} |
|
Center of Gravity 기능에 대한 설명은 'Center of Gravity'를 참조하십시오. 출력값은 이미지 모멘트 M10임을 유의하십시오. 질량 중심 X의 픽셀 좌표를 얻으려면 다음 중 하나를 사용하십시오. DIV 연산자를 사용하거나, 해당 값을 호스트 PC의 면적으로 나누십시오. AutomaticContextMaximum을(를) 설정하면 오퍼레이터가 자동으로 출력 비트를 설정합니다. 객체의 최대 가능한 크기는 입력 링크 I의 최대 너비와 높이에 따라 달라집니다. 객체의 이론상 최대 CenterX 값은 이미지의 모든 픽셀이 전경 값으로 구성된 경우, 즉 하나의 큰 객체인 흰색 입력 이미지인 경우에 달성됩니다. 큰 입력 이미지를 사용하는 경우 CenterXO 링크의 Bit Width이(가) 매우 높아질 수 있습니다. 가능한 최대 CenterX (이미지 모멘트 M10) 값을 알 수 있거나 특정 X 좌표의 객체만 관심 대상인 경우, Basler에서는 LinkManuallyEditable 모드를 사용할 것을 권장합니다. 이를 통해 리소스를 절약하고 전체 디자인의 빌드 시간을 단축할 수 있습니다. LinkManuallyEditable 모드에서는 허용 범위 [1, 48] 내에서 링크의 Bit Width Property를 편집할 수 있습니다. 링크의 Bit Width는 CenterX 기능 계산에 내부적으로 사용되는 Bit Width로 직접 변환되므로, 전체 리소스 소비에 영향을 미칩니다. Bit Width이(가) 객체의 CenterX 값에 충분하지 않은 경우, ErrorFlagO 링크(비트 1)로 표시됩니다. |
|
| CenterYBitWidthMode | |
|---|---|
| Type | static parameter |
| Default | 자동 프레임 최대값 |
| Range | {자동 프레임 최대값, 수동 편집 가능 링크} |
|
Center of Gravity에 대한 설명은 'Center of Gravity'를 참조하십시오. 출력은 이미지 모멘트 M01입니다. Center of Gravity Y에 대한 픽셀 좌표를 얻으려면 DIV 오퍼레이터를 사용하거나 호스트 PC에서 그 값을 면적으로 나누십시오. AutomaticContextMaximum을(를) 설정하면 오퍼레이터가 자동으로 출력 비트를 설정합니다. 객체의 최대 가능한 크기는 입력 링크 I의 최대 너비와 높이에 따라 달라집니다. 객체의 이론상 최대 CenterY 값은 이미지의 모든 픽셀이 전경 값으로 구성된 경우, 즉 하나의 큰 객체인 흰색 입력 이미지인 경우에 달성됩니다. 큰 입력 이미지를 사용하는 경우 CenterYO 링크의 Bit Width이(가) 매우 높아질 수 있습니다. 가능한 최대 CenterY (이미지 모멘트 M10) 값을 알 수 있거나 특정 Y 좌표의 객체만 관심 대상인 경우, Basler에서는 LinkManuallyEditable 모드를 사용할 것을 권장합니다. 이를 통해 리소스를 절약하고 전체 디자인의 빌드 시간을 단축할 수 있습니다. LinkManuallyEditable 모드에서는 허용 범위 [1, 48] 내에서 링크의 Bit Width Property를 편집할 수 있습니다. 링크의 Bit Width는 Area 기능 계산에 내부적으로 사용되는 Bit Width로 직접 변환되므로, 전체 리소스 소비에 영향을 미칩니다. Bit Width이(가) 객체의 CenterY 값에 충분하지 않은 경우, ErrorFlagO 링크(비트 2)로 표시됩니다. |
|
BlobDetector2D 오퍼레이터의 사용법은 다음 예시에서 보여줍니다:
-
예시 - 에어 스캔 애플리케이션에서 BlobDetector2D 오퍼레이터의 사용법을 보여줍니다.

![[참고]](../common/images/admon/note.png)






이전

