응용 노트: 블롭 분석#
VisualApplets 에서 블롭 분석 연산자를 다른 연산자와 함께 사용하는 방법을 배울 수 있습니다. 예제에서는 FPGA 내에서 기본적인 물체 탐지 및 분류를 위해 블롭 분석 연산자를 사용합니다. 선(line) 애플릿을 통해 블롭 분석 1D 연산자의 사용법을 확인할 수 있습니다. 또한, 제공된 예제에 대한 C++ SDK 프로젝트도 이용할 수 있습니다. 이를 통해 PC 측에서 블롭 분석 결과를 해석하는 방법을 이해할 수 있습니다. (애플리케이션 노트 SAN011)
다음 설계 예시는 ‘ VisualApplets ’ 블롭 분석 연산자의 사용법을 보여줍니다:
- 객체 시각화를 위한 SDK 프로젝트가 포함된 간단한 블롭 분석 애플리케이션: 이 예제에서는 기본적인 객체 감지를 위해 블롭 분석을 사용합니다. 감지된 모든 객체는 호스트 PC로 전송됩니다.
- 분류 및 ROI 선정을 위한 블롭 분석 활용: 이 예제는 FPGA 내에서 물체 감지 및 분류를 위해 블롭 분석을 사용하는 방법을 보여줍니다.
- 1차원 블롭 분석: 이 예제에서는 끝없는 라인 스캔 이미지에 대해 1차원 블롭 분석 연산자를 사용하는 방법을 설명합니다.
객체 시각화를 위한 SDK 프로젝트가 포함된 간단한 블롭 분석 애플리케이션#
첫 번째 예제는 기본적인 블롭 분석 애플릿입니다. 카메라 이미지가 이진화됩니다. 다음으로, 이진화된 이미지는 한 경로를 통해 DMA로 전송되고, 다른 경로에서는 블롭 분석이 수행된 후 그 결과가 두 번째 DMA 채널을 통해 출력됩니다.
이 예제에서 사용된 이진화는 간단한 임계값 처리에 기반합니다. 블롭 분석은 모든 흰색 픽셀을 물체 픽셀로 간주합니다. 그림 2는 두 개의 임계값을 사용하여 전경 값 범위가 선택됨을 보여줍니다. 이를 통해 어두운 픽셀로 구성된 물체가 있는 이미지나 배경에 비해 물체가 더 밝은 이미지를 모두 사용할 수 있습니다. 이진화 과정이 완료된 후 이미지는 버퍼에 저장됩니다. 버퍼에서 이미지는 블롭 분석으로 전달되며, 이진화된 이미지를 모니터링하기 위해 호스트 PC로 전송됩니다.
Blob 분석 매개변수의 설정 내용은 다음 그림에서 확인할 수 있습니다:
위 이미지에서는 블롭 분석 데이터가 하나의 링크로만 통합되는 방식을 확인할 수 있습니다. 이 예시에서, 특징들은 Bounding Box 및 Area 사용됩니다. 먼저, 각각 16비트인 바운딩 박스 링크들이 병합되어 링크 폭이 64비트가 됩니다. 영역도 마찬가지로 64비트로 확장됩니다. 다음을 사용하여 InsertPixel 연산자가 적용되면 두 링크가 하나로 병합됩니다. 따라서 결과적인 DMA 전송은 다음과 같은 형식을 갖게 됩니다:
간단한 Blob2D 애플릿을 위한 Blob DMA 바이트 순서#
| 바이트 번호 | 객체 특징 |
|---|---|
| 0에서 1까지 | 바운딩 박스 X0 |
| 2에서 3 | 바운딩 박스 X1 |
| 4~5 | 바운딩 박스 Y0 |
| 6에서 7까지 | 바운딩 박스 Y1 |
| 8에서 15까지 | 지역 |
PC에서 바이트 순서가 다르다는 점에 유의하십시오. 객체의 비트 폭이 확장되어 있습니다. 실제로 바운딩 박스는 0에서 1023 사이의 값을 표현하는 데 10비트만 사용하고, 면적은 21비트만 사용합니다. 이 애플릿의 기능을 보여주기 위해 간단한 SDK C++ 프로젝트가 첨부되어 있습니다. 이 프로젝트는 설계 파일과 함께 다음 폴더에서 찾을 수 있습니다. Examples\Processing\BlobAnalysis\Blob2D VisualApplets 설치 경로의.
분류 및 ROI 선정을 위한 블롭 분석 활용#
이 예제는 추출된 물체 특징을 바탕으로 관심 영역(ROI)을 잘라내는 방법을 보여줍니다. 목표는 면적이 가장 큰 물체를 찾아내고, 이 물체의 무게중심을 추출하여 ROI를 형성하는 것입니다.
이 예제는 Visual Applets가 애플릿 내에서 블롭 분석 결과를 분류에 활용할 수 있는 기능을 보여 주며, 이를 통해 프레임 그래버 내의 이미지 처리 가능성이 크게 향상됩니다. 그림 1은 해당 설계의 스크린샷입니다. 주요 구성 요소로는 이진화, 블롭 분석, 분류 및 ROI 추출이 있습니다. 이러한 구성 요소들에 대해서는 아래에서 자세히 설명하겠습니다.
이 예제에서 사용된 이진화는 간단한 임계값 처리에 기반합니다. 블롭 분석은 모든 흰색 픽셀을 물체 픽셀로 간주합니다. 그림 2는 두 개의 임계값을 사용하여 전경 값 범위가 선택됨을 보여줍니다. 이를 통해 어두운 픽셀로 구성된 물체가 있는 이미지나 배경에 비해 물체가 더 밝은 이미지를 모두 사용할 수 있습니다. 이진화 과정이 완료된 후 이미지는 버퍼에 저장됩니다. 버퍼에서 이미지는 블롭 분석으로 전달되며, 이진화된 이미지를 모니터링하기 위해 호스트 PC로 전송됩니다.
블롭 분석은 이진화 단계 이후에 수행됩니다. 이 단계에서는 대상의 x축 및 y축 방향 중심점과 면적만 후속 처리에 사용됩니다. 이 예제에서는 그 외의 모든 특징은 사용되지 않습니다.
이 애플릿은 블롭 분석 결과의 분류 단계로 이어집니다(그림 3). 먼저, 무게중심 값을 면적으로 나누어 정규화합니다. 이는 DIV 연산자를 사용하여 간단히 수행할 수 있습니다. 한편, 면적이 가장 큰 물체를 탐지합니다. 여기서, 연산자는 FrameMax 그리고 레지스터가 사용됩니다. 이 분류 알고리즘의 핵심은 지금까지 조사된 객체들보다 면적이 작은 모든 객체를 걸러내는 것입니다. 구체적으로, 블롭 분석은 객체 스트림을 출력합니다. 이 FrameMax 이 연산자는 현재 객체가 지금까지 조사된 객체들보다 큰지 여부를 감지하고, 출력에 논리 1을 출력합니다. IsMax.이 값은 다음에서 사용됩니다. Capture 레지스터의 입력값. 현재 물체의 크기가 이전 물체들보다 클 경우, 무게중심 좌표가 출력으로 고정됩니다. 따라서 프레임의 마지막 출력, 즉 블롭 스트림은 면적이 가장 큰 물체의 무게중심 좌표를 나타냅니다. 그림 3은 이러한 동작을 보여줍니다.
분류 모듈은 이제 이미지에서 발견된 가장 큰 물체의 무게중심 좌표를 출력합니다. 다음으로, 이 좌표를 ROI 좌표로 변환해야 합니다. XOffset, XLength, YOffset 및 YLength. 그림 4는 이 변환의 설계를 보여준다. 이 XLength 및 YLength 는 상수로 설정되는 반면, 무게중심 좌표는 ROI 크기의 절반만큼 축소됩니다.
이제 네 가지 ROI 값을 사용하여 DynamicROI 연산자를 통해 원본 이미지에서 ROI를 잘라냅니다. 앞서 설명한 바와 같이, 분류 모듈은 프레임의 마지막 값과 함께 면적이 가장 큰 객체를 출력합니다. 이는 다음과 같은 이점이 있는데, DynamicROI 이 연산자는 마지막으로 수신된 ROI 좌표만 고려합니다. 따라서 올바른 좌표가 사용되며, 원본 이미지에서 가장 큰 물체가 잘려 나옵니다. 이 ‘ VisualApplets ’ 프로젝트의 디자인 파일은 다음 폴더에서 찾을 수 있습니다. Examples\Processing\BlobAnalysis\Blob2D_ROI_select VisualApplets 설치 경로 내에 있습니다. 이 애플릿은 microDisplay에서 실행할 수 있으며, 결과를 바로 확인할 수 있습니다. 또한, 예제에는 소규모 SDK 프로젝트가 포함되어 있습니다. SDK 프로젝트를 사용하려면 ROI의 DMA 크기를 모듈에서 설정한 DMA 크기로 변경해야 합니다. ROIsizeX 및 ROIsizeY. 다음을 사용하십시오. 표시 microDisplay의 설정 또는 widht1 및 height1 적용을 수행하기 위해 SDK 프로젝트의 매개변수.
블롭 분석 1D#
'Blob Analysis 1D' 예제는 VisualApplets 환경에서 1D 블롭 연산자의 사용법을 보여줍니다.
‘1D 블롭 분석’ 예제는 기본형 카메라를 기반으로 한 간단한 애플릿입니다. 이 카메라는 라인 트리거로만 작동합니다. 따라서 이 애플릿은 실제 1D 이미지를 기반으로 합니다. DMA 전송을 위해 원본 이미지는 연속된 여러 줄로 구성된 작은 조각들로 변환되어 2D 이미지를 형성합니다. 애플릿의 모든 구성 요소에 대해서는 다음에서 자세히 설명하겠습니다. 그림 1은 이 설계의 메인 시트를 보여줍니다.
획득을 위해, 라인 카메라 조작자가 연결된 ImageBuffer 이 사용됩니다. 이 버퍼를 통해 1차원 이미지 라인을 버퍼링할 수 있습니다. 다음으로, 계층적 박스에서 Binarize 픽셀을 전경 픽셀과 배경 픽셀로 변환하기 위해 간단한 임계값 처리가 수행됩니다. 선택기를 사용하면 원본 이미지와 이진 이미지를 이미지 출력 경로로 전환할 수 있습니다. 이는 IF 연산자와 CONST 연산자. The dynamic 의 매개변수 CONST 연산자를 사용하면 다음을 수정할 수 있습니다. IF 연산자의 조건에 따라 입력을 전환할 수 있습니다. 따라서 실행 중에 원래의 회색조 이미지와 이진화 이미지 사이를 전환할 수 있습니다.
이 애플릿의 용도는 원본 이미지에서 발견된 객체를 시각화하는 것이므로, PC 내의 두 DMA 채널 간 동기화를 지원해야 합니다. 원본 이미지의 각 줄과 각 블롭을 표시하기 위해 선 마커가 사용됩니다. 따라서 각 줄을 세기 위해 카운터가 사용됩니다. 이 줄 카운터는 계층적 박스(Hierarchical Box)에 포함되어 있습니다. 1DBlobAnalysis 블롭 분석 연산자와 라인 수 값과 함께 상단 링크 O000을 통해 박스를 나갑니다. 카운터의 범위는 10비트입니다. 따라서 값이 1024에 도달하면 오버플로가 발생하고, 카운터는 다시 0부터 시작합니다.
에서 ReplaceFirstPixelByLineNo 한 줄의 처음 네 픽셀은 줄 번호로 대체됩니다. 이를 위해 병렬 처리 방식을 변경하여 32비트 단위로 연산을 수행합니다. x좌표는 카운트 값이며, x좌표가 0일 때마다 원래 픽셀 값 대신 줄 번호(32비트로 확장된 값)가 전달됩니다.
라인 마커 외에도 Blob 분석 작업에 대한 플러시 조건을 생성해야 합니다. 플러시는 트리거 입력으로 구현될 수 있으며, 이 경우 플러시 조건은 한 줄마다 한 번씩 생성됩니다. 따라서 Blob 분석은 한 줄마다 출력을 완료(Eof)합니다. 다만, Blob 분석은 매개변수를 사용하여 출력 프레임이 비어 있지 않은 경우에만 이러한 동작으로 구성됩니다. supres_empty_output_frames. 또한, 블롭 분석은 최대 객체 높이를 10비트, 즉 1024픽셀로 설정되어 있습니다. 이 연산자의 최대 출력 프레임 크기는 20으로 설정되어 있습니다. 출력해야 할 객체가 더 많지만 플러시 조건이 발생하지 않으면, 연산자는 새로운 프레임을 생성합니다. 이러한 작은 출력 프레임 덕분에 객체가 감지된 후 PC에서 분석될 때까지 걸리는 시간을 최소화할 수 있습니다.
11개의 Blob 분석 출력 스트림이 하나의 스트림으로 병합된 후, 이 스트림이 DMA에 연결됩니다. 이는 다음을 사용하여 간단히 수행할 수 있습니다. MergePixel 및 InsertPixel 연산자. 객체 속성의 순서는 아래 표에 나와 있습니다.
| 바이트 번호 | 객체 특징 |
|---|---|
| 0에서 3까지 | 선 표시기 |
| 4~5 | 바운딩 박스 X0 |
| 6에서 7까지 | 바운딩 박스 X1 |
| 8에서 11까지 | 중심 Y |
| 12~15 | 중심 Y |
| 16~17 | 바운딩 박스 Y0 |
| 18에서 19까지 | 바운딩 박스 Y1 |
| 20~23 | 지역 |
| 24에서 25까지 | 등고선 길이 대각선 |
| 26일에서 27일까지 | 등고선 길이 직교 |
| 28부터 31까지 | 오류 플래그 |
이 프로젝트를 하드웨어에서 실행하려면 라인 카메라와 트리거 인코더 시스템이 포함된 특수한 하드웨어 구성이 필요합니다. 설계 파일은 다음 폴더에서 확인할 수 있습니다. Examples\Processing\BlobAnalysis\Blob1D Visual Applets 설치 경로 내에 있습니다. 이 디자인에는 주로 객체 표시 방법을 보여주는 복잡한 SDK 프로젝트가 추가되어 있습니다.