콘텐츠로 건너뛰기

어플리케이션 노트: Blob Analysis#

이 응용 참고서는 VisualApplets Blob Analysis 디자인에 대해 설명합니다.

VisualApplets에서 다른 오퍼레이터와 조합하여 Blob Analysis 오퍼레이터를 사용하는 방법을 배울 수 있습니다. 예제에서는 FPGA 내부의 기본적인 Object Detection 및 분류를 위해 Blob Analysis 오퍼레이터를 사용합니다. 라인 앱릿은 Blob Analysis 1D 오퍼레이터의 사용법을 보여줍니다. 또한, 제공되는 예제에 대한 C++ SDK 프로젝트도 사용할 수 있습니다. 이를 통해 PC 측에서 Blob Analysis 결과가 어떻게 해석되는지 이해할 수 있습니다. (Application Note SAN011)

다음 디자인 예제는 VisualApplets blob analysis 오퍼레이터의 사용법을 보여줍니다.

  • 개체 시각화를 위한 SDK 프로젝트가 포함된 간단한 Blob Analysis 애플리케이션: 이 예제에서는 기본적인 Object Detection을 위해 Blob Analysis를 사용합니다. 감지된 모든 개체는 호스트 PC로 전송됩니다.
  • 분류 및 ROI 선택을 위한 Blob Analysis 사용: 이 예제는 FPGA 내에서 Object Detection 및 분류를 위해 Blob Analysis를 사용하는 방법을 보여줍니다.
  • Blob Analysis 1D: 이 예제는 무한 라인 스캔 이미지를 위해 Blob Analysis 1D 오퍼레이터를 사용하는 방법을 설명합니다.

개체 시각화를 위한 SDK 프로젝트를 포함한 Simple Blob Analysis 어플리케이션#

첫 번째 예제는 기본 Blob Analysis 앱릿입니다. 카메라 이미지가 이진화됩니다. 다음으로, 이진화된 이미지가 한 경로에서는 DMA로 전송되고, 다른 경로에서는 Blob Analysis가 수행된 후 두 번째 DMA 채널을 통해 결과가 출력됩니다.

그림 1: 간단한 블롭 분석 애플리케이션을 위한 Visual Applets 디자인

이 예제에서 사용된 이진화는 간단한 임계값 처리에 기반합니다. 블롭 분석은 모든 흰색 픽셀을 물체 픽셀로 간주합니다. 그림 2는 두 개의 임계값을 사용하여 전경 값 범위가 선택되는 것을 보여줍니다. 이를 통해 물체가 어두운 픽셀로 구성된 이미지나 배경에 비해 물체가 더 밝은 이미지를 모두 사용할 수 있습니다. 이진화 과정이 완료된 후 이미지는 버퍼에 저장됩니다. 버퍼에서 이미지는 블롭 분석으로 전달되며, 이진화된 이미지를 모니터링하기 위해 호스트 PC로 전송됩니다.

그림 2: 이진화

Blob 분석 매개변수의 구성은 다음 그림에서 확인할 수 있습니다:

그림 3: Simple Blob2D Applet용 Blob Analysis 파라미터
그림 4: Blob2D Applet용 Blob 스트림의 단일 링크 병합

위의 이미지에서는 블롭 분석 데이터가 하나의 링크로만 통합되는 방식을 확인할 수 있습니다. 이 예시에서, 특징들은 Bounding Box 및 Area 사용됩니다. 먼저, 각각 16비트인 바운딩 박스 링크들이 병합되어 링크 폭이 64비트가 됩니다. 영역도 마찬가지로 64비트로 확장됩니다. 다음을 사용하여 InsertPixel 연산자가 적용되면 두 링크가 하나로 병합됩니다. 따라서 결과적인 DMA 전송은 다음과 같은 형식을 갖게 됩니다:

Simple Blob2D Applet용 Blob DMA Byte Order#

바이트 번호 개체 Feature
0 ~ 1 Bounding Box X0
2 ~ 3 Bounding Box X1
4 ~ 5 Bounding Box Y0
6 ~ 7 Bounding Box Y1
8 ~ 15 면적

PC에서 바이트 순서가 달라진 점에 유의하십시오. 객체의 비트 폭이 확장되었습니다. 실제로 바운딩 박스는 0에서 1023 사이의 값을 표현하는 데 10비트만 사용하고, 면적은 21비트만 사용합니다. 이 애플릿의 기능을 보여주기 위해 간단한 SDK C++ 프로젝트가 첨부되어 있습니다. 이 프로젝트는 디자인 파일과 함께 다음 폴더에서 찾을 수 있습니다. Examples\Processing\BlobAnalysis\Blob2D VisualApplets 설치 경로의.

분류 및 ROI Selection을 위한 Blob Analysis 활용#

이 예제는 추출된 개체 기능을 기반으로 관심 영역(ROI)을 잘라내는 접근 방식을 보여줍니다. 목적은 면적이 가장 큰 개체를 찾아내고, ROI를 형성하는 데 사용되는 이 개체의 무게 중심을 추출하는 것입니다.

이 예제는 앱릿 내부에서 분류를 위해 Blob Analysis 결과를 사용하는 Visual Applets의 기능을 보여주며, 이를 통해 프레임 그래버 내부의 이미지 처리 가능성을 크게 향상시킬 수 있습니다. 그림 1은 디자인의 스크린샷을 보여줍니다. 주요 부분은 이진화, Blob Analysis, 분류 및 ROI 잘라내기입니다. 이러한 부분은 아래에서 자세히 설명합니다.

그림 1: ROI 선택을 위한 블롭 분석 디자인

이 예제에서 사용된 이진화는 간단한 임계값 처리에 기반합니다. 블롭 분석은 모든 흰색 픽셀을 물체 픽셀로 간주합니다. 그림 2는 두 개의 임계값을 사용하여 전경 값 범위가 선택되는 것을 보여줍니다. 이를 통해 물체가 어두운 픽셀로 구성된 이미지나 배경에 비해 물체가 더 밝은 이미지를 모두 사용할 수 있습니다. 이진화 과정이 완료된 후 이미지는 버퍼에 저장됩니다. 버퍼에서 이미지는 블롭 분석으로 전달되며, 이진화된 이미지를 모니터링하기 위해 호스트 PC로 전송됩니다.

그림 2: 이진화

Blob Analysis는 이진화 후에 수행됩니다. 여기서는 추가 처리를 위해 x 및 y 방향의 무게 중심과 면적 개체 기능만 사용됩니다. 이 예제에서는 다른 모든 기능은 사용되지 않습니다.

앱릿은 계속해서 Blob Analysis 결과의 분류를 수행합니다(그림 3). 먼저, 무게 중심 값을 면적으로 나누어 정규화합니다. 이는 DIV 오퍼레이터를 사용하여 간단히 수행됩니다. 한편, 가장 넓은 면적을 가진 개체 감지가 수행됩니다. 여기서는 오퍼레이터와 Register가 사용됩니다. 분류 알고리즘의 아이디어는 지금까지 조사한 개체보다 면적이 작은 모든 개체를 억제하는 것입니다. 상세히 설명하자면, Blob Analysis는 개체 스트림을 출력합니다. FrameMax 오퍼레이터와 Register가 사용됩니다. 분류 알고리즘의 아이디어는 지금까지 조사한 개체보다 면적이 작은 모든 개체를 억제하는 것입니다. 상세히 설명하자면, Blob Analysis는 개체 스트림을 출력합니다. FrameMax 오퍼레이터는 현재 개체가 지금까지 조사한 개체보다 큰지 감지하고 출력단에 논리 '1'을 출력합니다. IsMax.이 값은 다음 용도로 사용됩니다. Capture 레지스터의 입력. 현재 객체가 이전 객체보다 크면 무게 중심 좌표가 출력에 래치됩니다. 따라서 프레임의 마지막 출력, 즉 블롭 스트림은 면적이 가장 큰 객체의 무게 중심 좌표를 나타냅니다. 그림 3은 이 동작을 보여줍니다.

그림 3: 최대 면적을 가진 개체 찾기
표: 최대 면적을 가진 개체를 찾는 알고리즘 예시

이제 분류 모듈은 이미지에서 찾은 가장 큰 객체의 무게 중심 좌표를 출력합니다. 다음으로, 이 좌표들은 ROI 좌표로 변환되어야 합니다. XOffset, XLength, YOffset 및 YLength. 그림 4는 이 변환의 설계를 보여줍니다. 이 설계에서 XLength 및 YLength 은 상수로 설정되는 반면, 무게 중심 좌표는 ROI 크기의 절반만큼 줄어듭니다.

그림 4: ROI 좌표 생성

이제 네 개의 ROI 값을 사용하여 DynamicROI 연산자를 통해 원본 이미지에서 ROI를 잘라냅니다. 앞서 설명한 바와 같이 분류 모듈은 프레임의 마지막 값과 함께 면적이 가장 큰 객체를 출력합니다. 이는 DynamicROI 연산자가 수신된 마지막 ROI 좌표만 고려하기 때문에 유리합니다. 따라서 올바른 좌표가 사용되며 원본 이미지에서 가장 큰 객체가 잘려 나갑니다. 이 VisualApplets 프로젝트의 디자인 파일은 다음 폴더에서 확인할 수 있습니다. Examples\Processing\BlobAnalysis\Blob2D_ROI_select VisualApplets 설치 경로 내에 있습니다. 애플릿을 microDisplay에서 실행하여 결과를 직접 확인할 수 있습니다. 또한, 예제에 작은 SDK 프로젝트가 추가되어 있습니다. SDK 프로젝트를 사용하려면 ROI의 DMA 크기를 모듈들에 의해 설정된 DMA 크기로 변경해야 합니다. ROIsizeX 및 ROIsizeY. Use the 디스플레이 microDisplay의 설정 또는 widht1 및 height1 SDK 프로젝트의 매개변수를 사용하여 조정을 수행합니다.

Blob Analysis 1D#

Blob Analysis 1D 예제는 VisualApplets 환경에서 1D 블롭 연산자의 사용법을 보여줍니다.

1D Blob Analysis 예제는 기준선 카메라를 기반으로 한 간단한 애플릿입니다. 카메라는 라인 트리거로만 사용됩니다. 따라서 이 애플릿은 실제 1D 이미지를 기반으로 합니다. DMA 전송을 위해 원본 이미지가 2D 이미지를 형성하는 연속된 라인의 작은 조각으로 변환됩니다. 애플릿의 모든 부분은 다음에서 자세히 설명합니다. 그림 1은 디자인의 메인 시트를 보여줍니다.

그림 1: Blob Analysis 1D Design

취득을 위해, 에 연결된 라인 카메라 연산자 ImageBuffer 가 사용됩니다. 이 버퍼를 사용하면 1D 이미지 라인을 버퍼링할 수 있습니다. 다음으로, 계층적 상자(Hierarchical Box) Binarize 에서 간단한 임계값 처리를 수행하여 픽셀을 전경 픽셀과 배경 픽셀로 변환합니다. 선택기를 사용하면 원본 이미지와 이진 이미지를 이미지 출력 경로로 전환할 수 있습니다. 이는 IF 연산자와 CONST 연산자를 통해 간단히 수행됩니다. 이 dynamic parameter가 CONST 연산자를 사용하면 IF 연산자의 조건 입력을 수정하여 입력을 전환할 수 있습니다. 따라서 런타임 중에 원본 그레이스케일 이미지와 이진화된 이미지 사이를 전환할 수 있습니다.

그림 2: Switching Between Grayscale and Binary Image

애플릿의 응용 목적이 원본 이미지에서 발견된 객체의 시각화이므로, PC에서 두 DMA 채널의 동기화를 허용해야 합니다. 라인 마커는 원본 이미지의 모든 라인과 모든 블롭을 표시하는 데 사용됩니다. 따라서 카운터를 사용하여 모든 라인을 셉니다. 라인 카운터는 계층적 상자 1DBlobAnalysis 에 블롭 분석 연산자와 함께 포함되어 있으며, 라인 카운트 값은 상위 링크 O000을 통해 상자를 나갑니다. 카운터의 범위는 10비트입니다. 따라서 값 1024에서 오버플로가 발생하고 카운터가 다시 0에서 시작합니다.

In ReplaceFirstPixelByLineNo 라인의 처음 네 개 픽셀이 라인 카운트로 대체됩니다. 이를 위해 Parallelism가 변경되어 32비트 단위로 연산이 수행됩니다. x좌표가 카운트되며 x좌표가 0일 때마다 원래 픽셀 값 대신 라인 번호(32비트로 확장됨)가 전달됩니다.

그림 3: Replacing of Leading Pixels by Line Number

라인 마커 외에도 Blob Analysis 연산을 위한 플러시(flush) 조건을 생성해야 합니다. 플러시는 트리거 입력으로 구현될 수 있으며, 이 경우 플러시 조건은 라인당 한 번 생성됩니다. 따라서 Blob Analysis는 라인당 한 번 출력을 완료(Eof)합니다. 그러나 Blob Analysis는 다음 매개변수를 사용할 때 출력 프레임이 비어 있지 않은 경우에만 이 동작으로 구성됩니다. supres_empty_output_frames또한 Blob Analysis는 최대 개체 높이를 10비트(즉, 1024픽셀)로 구성됩니다. 연산자의 최대 출력 프레임 크기는 20으로 설정됩니다. 더 많은 개체를 출력해야 하고 플러시 조건이 발생하지 않으면 연산자는 새 프레임을 생성합니다. 이러한 작은 출력 프레임을 통해 개체가 감지된 시간과 PC에서 분석할 수 있는 시간을 최소화할 수 있습니다.

그림 4: Line Counting 및 Blob Analysis
그림 5: Blob 1D 예시 구성 파라미터

11개의 Blob Analysis 출력 스트림이 DMA에 연결된 하나의 스트림으로 병합됩니다. 이는 단순히 MergePixel 및 InsertPixel 연산자를 사용하여 수행됩니다. 개체 기능의 순서는 아래 표에 나와 있습니다.

그림 6: Blob1D Applet을 위해 Blob 스트림을 하나의 링크로 병합
바이트 번호 개체 Feature
0 ~ 3 Line Marker
4 ~ 5 Bounding Box X0
6 ~ 7 Bounding Box X1
8 ~ 11 Center of Gravity Y
12 ~ 15 Center of Gravity Y
16 ~ 17 Bounding Box Y0
18 ~ 19 Bounding Box Y1
20 ~ 23 면적
24 ~ 25 Contour Length Diagonal
26 ~ 27 Contour Length Orthogonal
28 ~ 31 Error Flags

하드웨어에서 이 프로젝트를 실행하려면 라인 카메라 및 트리거 엔코더 시스템을 갖춘 특수한 하드웨어 설정이 필요합니다. 디자인 파일은 Examples\Processing\BlobAnalysis\Blob1D VisualApplets 설치 경로 폴더에서 찾을 수 있습니다. 대부분 개체 표시를 시연하는 복잡한 SDK 프로젝트가 디자인에 추가됩니다.