연산자 ImageBufferMultiRoI

Operator Library: Memory

이 오퍼레이터는 각 버퍼링된 이미지에 대해 여러 관심 영역(ROI)을 지원합니다. 모든 ROI는 순차적으로 판독됩니다. 각 ROI는 ROI 0, ROI 1, ROI 2부터 ROI N-1까지 새롭고 독립적인 출력 이미지입니다. N은 NumRoI 파라미터로 지정된 ROI 수입니다. 프레임 치수를 초과하지 않는 한 가능한 모든 직사각형 영역이 지원됩니다. 즉, 단일 픽셀, 단일 라인, 단일 열, 직사각형 영역 또는 전체 프레임을 ROI로 정의할 수 있습니다. 서로 다른 ROI는 서로 다른 크기를 가질 수 있습니다. 각 ROI는 개별적으로 정의할 수 있습니다. ROI는 서로 겹칠 수 있습니다. 그러나 모든 ROI는 입력 및 출력 링크에 의해 정의된 최대 이미지 크기 제한을 충족해야 합니다. 즉, ROI 너비는 최대 이미지 너비를 초과해서는 안 되며, ROI 높이는 최대 이미지 높이를 초과해서는 안 됩니다.

오퍼레이터의 지연 시간에 대한 정보는 표 46, '메모리 라이브러리의 오퍼레이터별 지연 시간'을 참조하십시오.

오퍼레이터는 프레임 그래버의 온보드 RAM에 이미지 스트림을 버퍼링합니다. RAM 유형의 VisualApplets 리소스가 하나 필요합니다('Allocation of Device Resources' 참조).

ImageBufferMultiRoI는 입력 링크의 최대 이미지 너비 및 높이 파라미터로 정의된 고정 크기의 이미지에서 작동합니다. 이는 오퍼레이터가 수행하는 입력 프레임 치수 제어를 의미합니다.

최대 이미지 치수보다 작은 이미지는 수정 없이 버퍼링됩니다. 그러나 ROI를 읽을 때 정의되지 않은 픽셀 값, 즉 입력 이미지 치수 외부의 픽셀 값을 읽게 될 수 있습니다. 누락된 프레임 픽셀에는 임의의 데이터가 포함되어 있으므로 이후 처리에서는 정의되지 않은 것으로 취급해야 합니다.

오버플로우가 발생한 경우, 즉 버퍼가 가득 차서 더 이상 이미지를 저장할 수 없는 경우, 버퍼에 최소한의 프레임 하나를 저장할 수 있는 충분한 여유 공간이 생길 때까지 들어오는 모든 이미지가 삭제됩니다. 쓰기 작업에 비해 ROI 읽기 속도가 너무 느리기 때문에 오버플로우가 발생할 수 있습니다. 이는 너무 많은 ROI가 정의되었거나 후속 오퍼레이터가 출력을 차단하기 때문일 수 있습니다. 균형 잡힌 디자인의 일반적인 상황에서는 오버플로우가 절대 발생하지 않습니다.

오퍼레이터는 해당 프레임이 완전히 버퍼링되는 즉시 출력에서 ROI 이미지를 제공합니다. 판독 방식은 Mode 파라미터로 정의됩니다.

MaxNumRoI 파라미터는 ROI의 최대 개수를 지정합니다. 실제로 사용되는 ROI의 개수는 이보다 적을 수 있으며, NumRoI 파라미터를 사용하여 정의됩니다.

NumRoI 파라미터는 오퍼레이터가 버퍼링된 각 이미지에 대해 출력에서 제공할 ROI의 개수를 지정합니다. 이 개수는 동적 유형으로 설정된 경우 MaxNumRoI를 초과할 수 없습니다.

Mode 파라미터는 이미지 처리를 위한 오퍼레이터 동작을 지정합니다. FreeRun은 해당 프레임이 완전히 버퍼링되는 즉시, 가능한 한 빨리 출력에서 ROI를 제공하도록 버퍼를 정의합니다. 이 모드를 자유 실행(free running) 모드라고도 합니다. 오퍼레이터는 파이프라인 흐름 제어 메커니즘에 의해서만 제어됩니다. WaitAfterImage 모드는 프레임의 모든 ROI가 출력으로 제공된 후 오퍼레이터가 대기하도록 합니다. 다음 프레임의 ROI 판독을 다시 시작하려면 Unlock 파라미터에 값을 써야 합니다. WaitAfterRoI는 각 프레임의 각 ROI 후에 오퍼레이터가 중지된다는 점을 제외하면 WaitAfterImage와 유사합니다. 추가 처리를 다시 시작하려면 Unlock 파라미터에 대한 쓰기 주기가 필요합니다.

Unlock 파라미터는 WaitAfterImage 및 WaitAfterRoI 모드에서 오퍼레이터의 잠금을 해제하고 추가 판독 작업을 시작하는 데 사용됩니다. FreeRun 모드에서는 이 파라미터가 아무런 효과가 없습니다.

XOffset, XLength, YOffset 및 YLength는 일군의 ROI를 지정합니다. 이 파라미터들은 필드 파라미터입니다. 이 파라미터들의 파라미터 유형은 런타임 중에 조정 가능하거나 조정 불가능하도록 동적 또는 정적으로 설정할 수 있습니다. 하나의 ROI 파라미터 유형이 설정되면 모든 ROI 파라미터의 유형이 자동으로 그에 맞춰 조정됩니다. 필드의 크기는 MaxNumRoI 파라미터로 정의됩니다. 오퍼레이터는 순차적인 순서로 NumRoI 개의 ROI를 읽습니다. 필드 파라미터 설정 방법에 대한 자세한 내용은 'Parameter Editing'에서 확인하세요.

모든 ROI는 동적으로 업데이트할 수 있습니다. 그러나 FreeRun, WaitAfterImage 및 WaitAfterRoI 모드에서의 업데이트는 이미지 취득이 시작되지 않은 경우에만 수행할 수 있습니다. 또한 WaitAfterImage 및 WaitAfterRoI 모드에서는 해당 프레임 / 프레임의 모든 ROI가 전송되었고 오퍼레이터가 Unlock 파라미터에 대한 쓰기 주기를 대기 중인 경우 ROI를 업데이트할 수 있습니다.

이미지 취득 중에 ROI를 업데이트하면 일시적으로 직사각형이 아닌 ROI가 발생할 수 있으므로 피해야 합니다.

오퍼레이터를 이미지 프로토콜 VALT_LINE1D와 함께 사용하는 경우 Y 좌표 파라미터는 비활성화됩니다. 1D 동작에서 오퍼레이터는 하나의 ROI를 하나의 라인으로 읽습니다. 따라서 오퍼레이터의 출력은 무한 1D 이미지 스트림이 되며, 각 라인은 하나의 ROI로 표현됩니다(예: line 0 = ROI 0, line 1 = ROI 1, line N = ROI N, line N+1 = ROI 0, ...).

버퍼의 Fill 비율을 측정하기 위해 오퍼레이터는 FillLevel과 Overflow의 2가지 레지스터를 제공합니다. FillLevel은 RAM의 Fill 백분율을 보여줍니다. Overflow 파라미터는 FillLevel이 100%에 가깝거나 100%이고 버퍼에 저장될 다음 이미지가 RAM 용량을 초과할 때 1로 설정됩니다.

파라미터 InfiniteSource는 오퍼레이터가 카메라에 직접 연결되어 있는지 또는 다른 메모리 오퍼레이터와 시퀀스되어 있는지를 지정하는 데 사용됩니다. 자세한 내용은 'Infinite Sources / Connecting Cameras'를 확인하세요.

오퍼레이터 제한 사항

  • 빈 프레임은 지원되지 않습니다.

  • 라인 길이가 다양한 이미지는 지원되지 않습니다.

[참고] ImageBufferMultiRoI는 imaFlex CXP-12 Quad 및 imaFlex CXP-12 Penta 플랫폼에서 사용할 수 없습니다.

ImageBufferMultiRoI는 imaFlex CXP-12 Quad 및 imaFlex CXP-12 Penta 플랫폼에서 지원되지 않지만, 대신 imaFlex CXP-12 Quad 및 imaFlex CXP-12 Penta 플랫폼용 동등한 사용자 라이브러리 요소를 사용할 수 있습니다. 사용자 라이브러리 요소 작업 방법에 대한 지침은 'Delivered User Libraries'를 참조하세요.

[팁] 예시: 메모리 사용량 최적화

고객이 20000 x 7096 픽셀 크기의 이미지(입력 포트의 링크 속성)를 공급합니다. Parallelism은 8로 설정됩니다. 픽셀 Bit Width는 8로 설정됩니다.

이 예시에서 사용된 플랫폼은 mE5이며, 즉 플랫폼이 256 Mbyte RAM 뱅크를 제공합니다. 256 MB를 모두 사용하려면 오퍼레이터에 128비트를 공급해야 합니다. 하지만 Parallelism이 8이므로 64비트(8 x 8비트)만 공급되며, 즉 사용자는 RAM의 128 MB만 사용할 수 있습니다. 20000 x 7096 픽셀 크기의 이미지를 저장하려면 141,920,000바이트(~135 MB)가 필요하며, 이는 사용 가능한 128 MB를 초과합니다. 이는 VisualApplets에 의해 감지되며 링크가 빨간색으로 강조 표시됩니다.

해결책: 오퍼레이터 ImageBufferMultiRoi 앞에 Parup(16으로 설정)을 배치합니다.

대역폭 최적화

Frame Grabber RAM (DRAM)을 사용하는 연산자를 통과하는 이론적 대역폭[bits/second]은 다음 공식에 따라 계산됩니다.

그러나 실제 대역폭은 DRAM 효율로 인해 항상 이론적 대역폭보다 작습니다.

연산자를 통과하는 최대 대역폭은 Bit Width와 Parallelism의 곱이 내부 RAM 포트 너비(RAM Port Width)와 같을 때 달성됩니다.

[참고] 플랫폼별 값

RAM Port Width과 System Clock은 플랫폼 종속적입니다. 개별 플랫폼에 대한 자세한 내용은 Device Resources를 참조하십시오.

I/O Properties

Property Value
Operator Type M
입력 링크 I, 이미지 데이터 입력
출력 링크 O, 데이터 입력

지원되는 Link Format

Link Parameter Input Link I Output Link O
Bit Width [1, 64]12 as I
Arithmetic {unsigned, signed} as I
Parallelism any2 as I
Kernel Columns 1 as I
Kernel Rows 1 as I
Img Protocol {VALT_IMAGE2D, VALT_LINE1D} as I
Color Format any as I
Color Flavor any as I
Max. Img Width any3 as I
Max. Img Height any3 as I

1

부호 없는 입력의 경우 입력 Bit Width 범위는 [1, 64]입니다. 부호 있는 입력의 범위는 [2, 64]입니다. 부호 없는 컬러 입력의 범위는 [3, 63]이고, 부호 있는 컬러의 범위는 [6, 63]입니다.

2

Bit Width와 Parallelism의 곱은 기본 ram 데이터 너비(RamDataWidth)를 초과해서는 안 됩니다. 자세한 내용은 Device Resources을(를) 확인하세요.

3

I의 최대 이미지 크기:

  • I.Img.Protocol = VALT_IMAGE2D: 2^RamAddressWidth >= (I.Max.Img.Width * I.Max.Img.Height) / I.Parallelism

  • I.Img.Protocol = VALT_LINE1D: 2^RamAddressWidth >= I.Max.Img.Width / I.Parallelism

Parameters

RamDataWidth
Type 정적 쓰기 파라미터
Default N/A
Range 정수

이 매개변수는 RAM 인터페이스에서 사용할 수 있는 데이터 비트 수를 제공합니다. 이는 입력 및 출력의 최대 비트 수입니다.

RamAddressWidth
Type 정적 쓰기 파라미터
Default N/A
Range 정수

이 파라미터는 사용 가능한 주소 비트 수를 제공합니다. 이는 허용되는 최대 이미지 크기를 계산하는 데 도움이 됩니다.

MaxNumRoI
Type static parameter
Default 1
Range [1, 65535]

이 파라미터는 오퍼레이터가 저장할 수 있는 최대 ROI 개수를 정의합니다.

NumRoI
Type dynamic/static 읽기/쓰기 파라미터
Default 1
Range [1, MaxNumRoI]

이 파라미터는 실제로 사용되는 ROI 개수를 정의합니다. 오퍼레이터는 각 입력 이미지에서 NumRoI 개의 ROI를 읽어와 출력으로 제공합니다. 파라미터가 static으로 설정된 경우 범위는 [1, 65536]이며 MaxNumRoI는 비활성화됩니다.

Mode
Type static parameter
Default FreeRun
Range {FreeRun, WaitAfterImage, WaitAfterRoI}

이 파라미터는 리드아웃 알고리즘의 작동 모드를 정의합니다. FreeRun 모드에서 오퍼레이터는 해당 프레임이 완전히 버퍼링되는 즉시 ROI 이미지를 제공합니다. WaitAfterImage 모드에서 오퍼레이터는 단일 프레임 내의 모든 ROI를 제공한 후 중지하고, 소프트웨어가 Unlock 파라미터에 값을 써넣어 다음 프레임 ROI의 읽기를 활성화할 때까지 대기합니다. WaitAfterRoI 모드에서 오퍼레이터는 각 프레임의 각 ROI 후에 중지합니다. 리드아웃 작업을 다시 시작하려면 소프트웨어가 Unlock 파라미터에 값을 써넣어야 합니다.

Unlock
Type dynamic write 파라미터
Default 1
Range {1}

이 파라미터는 WaitAfterImage 및 WaitAfterRoI 모드를 위한 핸드셰이크를 구현합니다. 이 파라미터에 값 1을 쓰면 오퍼레이터가 다음 ROI / 다음 프레임의 모든 ROI 리드아웃을 계속 진행하게 됩니다.

이 파라미터는 Mode 파라미터가 WaitAfterImage 또는 WaitAfterRoI로 설정된 경우에만 사용할 수 있습니다.

XOffset
Type dynamic/static 읽기/쓰기 파라미터
Default 0
Range [0, Max.Img Width - XLength]

이 필드 파라미터는 ROI의 왼쪽 상단 모서리 x 좌표를 정의합니다.

스텝 크기는 parallelism입니다.

필드 파라미터 구성 방법에 대한 자세한 내용은 'Parameter Editing'에서 확인하세요.

XLength
Type dynamic/static 읽기/쓰기 파라미터
Default 1024
Range [2*Parallelism, Max.Img Width - XOffset]

이 필드 파라미터는 ROI의 너비를 정의합니다.

스텝 크기는 parallelism입니다.

필드 파라미터 구성 방법에 대한 자세한 내용은 'Parameter Editing'에서 확인하세요.

YOffset
Type dynamic/static 읽기/쓰기 파라미터
Default 0
Range [0, 최대 이미지 높이 - YLength]

이 필드 파라미터는 ROI의 왼쪽 상단 모서리 y 좌표를 정의합니다.

필드 파라미터 구성 방법에 대한 자세한 내용은 'Parameter Editing'에서 확인하세요.

YLength
Type dynamic/static 읽기/쓰기 파라미터
Default 1024
Range [1, 최대 이미지 높이 - YOffset]

이 필드 파라미터는 ROI의 높이를 정의합니다.

필드 파라미터 구성 방법에 대한 자세한 내용은 'Parameter Editing'에서 확인하세요.

FillLevel
Type dynamic read parameter
Default 0
Range [0%, 100%]

이 파라미터는 DRAM의 Fill 레벨을 제공합니다.

Overflow
Type dynamic read parameter
Default 0
Range [0, 1]

이 파라미터는 버퍼 오버플로를 나타냅니다.

InfiniteSource
Type static parameter
Default ENABLED
Range {ENABLED, DISABLED}

이 파라미터는 Camera 오퍼레이터와 같은 무한 소스 오퍼레이터에 대한 지원을 활성화합니다. 자세한 내용은 'Infinite Sources / Connecting Cameras'를 참조하십시오.

사용 예

ImageBufferMultiRoI 오퍼레이터의 사용법은 다음 예시에서 확인할 수 있습니다.