オペレーター CoefficientBuffer

Operator Library: Memory

このオペレーターを使用すると、ホストPCからフレームグラバーへ画像ファイルをアップロードし、連続して出力して画像ソースとして使用することができます。ここでは画像ファイルが汎用データコンテナとして使用されます。そのため、アップロードされた画像には、係数などの任意のデータを含めることができます。すべての係数画像は同じピクセル幅と高さを持つ必要がありますが、フォーマットは完全に異なっていてもかまいません。たとえば、リンク0の係数画像はGRAY 8 bitフォーマットにすることができます。リンク1ではRGB16フォーマットの画像を提供できます。また、リンク2はバイナリ画像にすることができます。すべての係数画像は Frame Grabber RAM (DRAM)に格納されます。タイプ RAMのVisualAppletsリソースが1つ必要です。詳細については、'Allocation of Device Resources'を確認してください。オペレーターのレイテンシについては、Table 46, 'Individual Latencies of the Operators in Library Memory'を参照してください。

[注] CoefficientBufferは、imaFlex CXP-12 QuadおよびimaFlex CXP-12 Pentaプラットフォームでは利用できません。

CoefficientBufferは、imaFlex CXP-12 QuadおよびimaFlex CXP-12 Pentaプラットフォームではサポートされていません。'Functional Example for Loading Test Images Using ImageInjector'の例では、ImageInjectorオペレーターを使用して、imaFlex CXP-12 QuadまたはimaFlex CXP-12 Penta上でCoefficientBufferオペレーターの機能をテスト画像ソースとして代替する方法を示しています。

'2D Shading Correction / Flat Field Correction Using Operator RamLUT'の例は、2Dシェーディング補正のためにCoefficientBufferの代わりにRamLUTを使用する方法を示しています。

リンクの数は、CoefficientBufferに格納されている係数画像の数に対応します。係数画像は、画像acquisitionが実行されていないときに、ソフトウェアを介してのみFPGAバッファにアップロードできます。これを行うには、パラメーター LoadCoefficientsに書き込みを行います。

オペレーターの出力ポートは同期して動作します。最初の画像ピクセルの転送は、すべての出力ポートで全く同時に開始されます。すべての画像が受信側オペレーターに転送されると、CoefficientBufferは再び同期して画像の出力を開始します。

[注] シミュレーション中の動作

オペレーターのリンク上の画像は同時に出力されます。1つのシミュレーションステップにおいて、オペレーターは各リンクに出力される画像を最大1つとします。シミュレーションステップ中に格納されたすべての画像(各リンクに1つ)が受信側オペレーターに転送された場合、つまりブロッキングが発生しなかった場合、次のシミュレーションステップでも同じ出力(各リンクに1つの画像)が転送されます。

CoefficientBufferは、関心領域(RoI)の管理もサポートしています。RoIは、4つのパラメーター(XOffset、XLength、YOffset、YLength)によって定義されます。XOffsetとYOffsetはRoIの左上隅、つまりピクセル単位の開始座標を定義します。RoIの寸法は、パラメーター BufferWidthおよび BufferHeightによって定義される格納された係数画像の寸法を超えてはなりません。RoIは、acquisition中、またはacquisitionが実行されていないときに、4つのRoI座標パラメータすべてに新しい値を設定し、UpdateROIパラメータに書き込むことで、動的に更新できます。なお、XLengthはリンクのBit Widthの粒度も満たしている必要があることに注意してください。つまり、XLength modulo LinkParallelism = 0となります。

各出力リンクに対して、係数画像ファイルがバッファに格納されます。つまり、リンク0には係数画像0が提供されます。係数画像は、acquisitionが開始される前にCoefficientBufferにロードされる必要があります。係数画像は、パラメータ CoefficientFile Nで指定されたファイルに格納される必要があります。Nは、それぞれリンク番号または係数画像番号を表します。係数ファイルはTIF形式でエンコードされている必要があります。

BufferWidthは、CoefficientBufferに格納されているすべての係数画像の幅をピクセル単位で指定します。

BufferHeightは、CoefficientBufferによって管理されるすべての係数画像の高さをピクセル単位で指定します。BufferWidthと BufferHeightは、すべての出力リンクの最大出力画像寸法を決定します。

グレースケールリンクには、グレースケール画像ファイルを使用する必要があります。カラーリンクには、RGB画像ファイルを使用する必要があります。

リンクのBit Widthが画像ファイルのBit Widthよりも高い場合、オペレーターは複数の画像ファイルピクセルを使用して出力ピクセルを生成します。たとえば、22 bitのリンクでは、8 bitの画像ファイルで3つのピクセルが必要になります。したがって、画像ファイルの画像幅は、パラメータ BufferWidthの3倍である必要があります。

リンクのBit Widthが画像ファイルのBit Widthよりも小さい場合、オペレーターは入力画像ファイルの下位ビットのみを使用します。たとえば、8 bitの画像ファイルと3 bitのリンクでは、ファイルのビット0、1、2が使用されます。

16 bit TIFファイルの使用には十分注意する必要があります。

Parameter LoadCoefficientsは、画像acquisitionが開始される前に、係数画像のバッファへのロードを開始するために使用されます。ロードは、書き込みサイクルまたはこのパラメータへの値1の書き込みによってトリガーされます。値0を書き込んでも効果はありません。

Parameter UpdateROIは、画像acquisitionの実行中または画像が取得されていないときに、現在のRoIを動的に更新するために使用されます。このパラメータに書き込む前に、新しいRoIを4つのRoI座標パラメータで指定する必要があります。書き込まれた値は更新プロセスには影響せず、書き込みサイクルのみがそれをトリガーします。つまり、書き込まれた値は0または1のいずれでもかまいません。

Parameter XOffsetは、左側の画像境界からRoIの最初の列までの水平方向のオフセットを指定します。指定された値はピクセル単位で測定され、BufferWidth-1の値を超えてはなりません。

Parameter XLength specifies the length of the RoI in horizontal direction in pixels. The specified value must not exceed BufferWidth and must be divisible by the output link parallelism. Also the following constraint must be met: XOffset + XLength <= BufferWidth.

Parameter YOffsetは、上部の画像境界からRoIの最初の行までの垂直方向のオフセットを指定します。YOffsetはピクセル単位で指定する必要があり、BufferHeight-1を超えてはなりません。

Parameter YLength specifies the length of the RoI in vertical direction in pixels. The length must not exceed BufferHeight. Furthermore, the following constraint must be met: YOffset + YLength <= BufferHeight.

Parameter CoefficientFile Nは、TIF形式で保存されたリンクNの係数画像のファイル名を指定します。

[注] 注意
  1. リンク0のParallelismによって、他のすべてのリンクのParallelismが決定されます。

  2. リンク0のParallelismを設定すると、新しいParallelismで割り切れるようにXLengthの値が修正されます。これは将来のVAバージョンでは異なる方法で処理される可能性があります。つまり、リンクのParallelism属性のスピンボックスで上下ボタンを使用すると、XLengthが変更される可能性があるということです。したがって、すべてのリンクが接続され指定された後に、XLengthの設定を確認することをお勧めします。

  3. パラメータBufferWidthとBufferHeightを設定すると、いずれかの座標が新しい画像寸法を超える場合に備えて、RoI座標が修正されます。座標は、可能な限り最も近い有効な値に修正されます。

  4. CoefficientBufferは、2D、1D、および0Dの画像をサポートしています。1D画像および0D画像の場合、オペレーターは、フレーム終了マーカーやライン終了マーカーを生成することなく、2D画像として保存されている係数画像を連続的に提供します。

  5. このオペレーターは1つのDDRRAMバンクを使用します。そのため、係数画像のストレージ容量は、1オペレーターあたり1つのRAMバンクの容量(mE5ボードでは256MByteなど)に制限されます。さらに、DDRRAMの内部フォーマットに起因して、実際のストレージ容量が物理的なストレージ容量よりもわずかに少なくなる場合があります。使用されるストレージ容量は、リンクフォーマットおよび各リンクのピクセル幅に関連しています。最適なケースでは、すべてのリンクのピクセル幅の合計が1つのRAMバンクの容量(mE5の場合は256)で割り切れます。この場合、すべての係数画像を1つのMemoryバンクにまとめて保存できます。それ以外の場合、ストレージの使用効率は最適でなくなります。ハードウェアプラットフォームの詳細については、Device Resourcesを確認してください。

このオペレーターを使用する場合の推奨設定順序

  1. CoefficientBufferのすべてのリンクを接続します。

  2. すべてのリンクのリンクフォーマットを指定します。

  3. BufferWidthおよびBufferHeightパラメーターを設定します。

  4. RoI座標を設定します。

  5. 係数ファイル名を設定します。

最高パフォーマンスでのオペレーターの使用

内部的に、CoefficientBufferオペレーターはすべての係数画像ピクセルから1つの累積ピクセルを生成します。これが、いわゆるスーパーピクセルです。

  • RAMデータ幅がスーパーピクセルのBit Widthよりも小さい場合、スーパーピクセルは複数のRAMセルに分散されます。
  • スーパーピクセルがRAMデータ幅よりも小さい場合、複数のスーパーピクセルが1つのRAMセルに収まる場合であっても、各RAMセルに保存されるスーパーピクセルは1つだけです。

したがって、RAMセルは1つのスーパーピクセルのみによって占有されるか、スーパーピクセルの一部になります。

オペレーターは、出力のBit WidthのピクセルをRAMデータ幅の広いブロックに内部的に保存します。たとえば、出力のBit Widthがmarathon VCLプラットフォーム(RAMデータ幅は256bit)で8bitに設定されている場合、各RAMセルのうち使用されるのは8 bitのみです。残りは無駄になります。

単にParallelismを大きくして帯域幅を増やしても、この場合には何の役にも立ちません。

使用しているフレームグラバーのRAMデータ幅は、このドキュメントの「Platform Resources」セクションで確認できます。

デバイスリソース

帯域幅やRAM効率を向上させるためのいくつかのアイデアを以下に示します。

ヒント 1:

帯域幅を増やすには、ピクセルのBit Widthを大きめに定義し、後からCastParallelオペレーターを使用してそれを修正する方法があります。

例:Gray 8bitの画像が必要であるが、Parallelism 8の帯域幅が必要な場合。そのためには、出力のBit Widthを64(Parallelism 1)として定義し、後からCastParallelオペレーターを使用してリンクを8 bitとParallelism 8に戻すことができます。

このようにすると、1つのRAMセルに複数のピクセルが保存されるため、画像のRAM消費量も削減されます。CastParallelオペレーターを使用せずに直接使用した場合、画像を保存するために必要なMemoryは8倍になります。

ヒント 2:

結合されたリンクのBit Widthが64 bitを超える場合は、画像を複数の画像に分割し、CoefficientBufferオペレーターの複数のリンクを使用できます。すべての出力がO-synchronousであるため、後からすべてのリンクを結合できます。

例:RGB24画像をParallelism 4で送信する場合。累積ピクセルは4*24 = 96Bitとなり、大きすぎます。これを解決するアイデアは、画像を4つのサブ画像に分割し、それぞれがピクセルの¼を持つようにすることです。

内部的に、オペレーターは各入力のピクセルを96bitの1つのスーパーピクセルに累積します。

このようにして、RAMの効率も向上します。Ironman mE5VQ8-CXPDプラットフォーム(128 Bit幅のRAMデータインターフェイス)で1024x1024の画像を使用する場合、1つのリンクのCoefficientBufferにシンプルに保存される画像は

1024 * 1024 * 128 / 8 Byte = 16MB。

4リンク設定を適用した場合のサイズは以下のようになります。

1024 * 1024 * (128 / 4) / 8 = 4MB

RAMセルのビット幅が64 bitの microEnable IV フレームグラバーの例。

Coefficientbuffer が単一の係数画像ファイルでのみ使用され、ピクセル Bit Width が8 bit/ピクセル、Parallelism が1であると仮定します。この場合、バッファのパフォーマンスは著しく低下します。これは、帯域幅のわずか 1/8 しか使用されないためです。さらに、バッファは2倍の設計クロック周波数で値を読み取るため、フル帯域幅のわずか 1/16 しか使用されません。

バッファを最大パフォーマンスで使用するには、ピクセルデータを再解釈する必要があります。この例では、バッファ出力リンクのパラメータを64 bit/ピクセルに設定し、Parallelism 2を使用する必要があります。これにより、バッファは設計クロックごとに128 bitを読み取るようになります。CastParallel オペレータを使用して、64 bitのデータ値を Bit Width 8、Parallelism 16に再解釈します。さらに、パラメータ BufferWidth を係数画像の画像の幅の 1/8 に設定する必要があります。

結論として、最大帯域幅を取得できるのは、出力 Bit Width が64 bitなどの高い値の場合のみです。出力 Parallelism を高くしても、帯域幅は増加しません。

シミュレーションソースとしてのオペレーターの使用

このオペレータはシミュレーションソースとして使用できます。この場合、オペレータは Coefficient File N パラメータで指定された画像ファイルをロードして使用しようとします。これは、画像ファイルがリンクフォーマットと完全に一致している場合にのみ正常に機能することに注意してください。例えば 64 Bit のリンクフォーマットを使用している場合、画像ファイルには1ピクセルあたり8 bitが含まれるため、画像ファイルの画像の幅はリンクの最大画像の幅の8倍である必要があります。高さも、リンクで指定された最大画像の高さと完全に一致している必要があります。

帯域幅の最適化

Frame Grabber RAM (DRAM) を使用するオペレーターを通過する理論上の帯域幅 [ビット/秒] は、次の式に従って計算されます。

しかし、実際の帯域幅はDRAMの効率により、常に理論上の帯域幅よりも小さくなります。

オペレータを通過する maximum bandwidth は、Bit Width と Parallelism の積が内部 RAM ポート幅 x 2(読み取り専用パラメータの場合に該当)と等しいときに達します。

[注] プラットフォーム固有の値

RAM Port WidthとSystem Clockはプラットフォーム固有のものです。 個々のプラットフォームの詳細については、Device Resourcesを参照してください。

I/O Property

Property 値
オペレータータイプ M
Output Link O[n]、データ出力

サポートされているリンクフォーマット

Link Parameter 出力リンク O[n]
Bit Width [1, 64]12
Arithmetic {unsigned, signed}
Parallelism any2
Kernel Columns 1
Kernel Rows 1
Img Protocol {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D}
Color Format any
Color Flavor any
Max. Img Width BufferWidth
Max. Img Height BufferHeight

1

出力 Bit Width の範囲は、符号なし入力の場合は [1, 64] です。符号付き入力の場合は [2, 64] です。符号なしカラー入力の場合は [3, 63] で、符号付きカラー入力の場合は [6, 63] です。

2

Bit Width と Parallelism の積は、ネイティブの RAM データ幅を超えてはなりません。詳細については、Device Resources を確認してください。

パラメーター

RamDataWidth
タイプ static write parameter
Default N/A
範囲 整数

このパラメータは、RAM インターフェイスで使用できるデータビット数を提供します。

RamAddressWidth
タイプ static write parameter
Default N/A
範囲 整数

このパラメータは、利用可能な RAM アドレスビット数を提供します。

BufferWidth
タイプ static パラメータ
Default 1024
範囲 [1, 65535]

このパラメータは、係数画像の幅(ピクセル単位)を定義します。さらに、このパラメータは、すべての出力リンクの最大画像の幅を定義します。このパラメータの範囲は、使用するフレームグラバーとその RAM によって異なります。

BufferHeight
タイプ static パラメータ
Default 1024
範囲 [1, 65535]

このパラメータは、係数画像の高さ(ピクセル単位)を定義します。さらに、このパラメータは、すべての出力リンクの最大画像の高さを定義します。このパラメータの範囲は、使用するフレームグラバーとその RAM によって異なります。

LoadCoefficients
タイプ 動的書き込みパラメータ
Default 0
範囲 {0, 1}

このパラメータは、画像取得の開始前に、係数画像をバッファへのロードを開始するために使用されます。ロードは、このパラメータに値1を書き込む書き込みサイクルによってトリガーされます。値0を書き込んでも、係数ファイルのロードは実行されません。

UpdateROI
タイプ 動的書き込みパラメータ
Default 1
範囲 {1}

このパラメータは、ハードウェアの ROI 設定を更新するために使用されます。4つの ROI 座標パラメータで定義された値が使用されます。更新は、画像取得の実行中であっても、いつでも実行できます。

XOffset
タイプ dynamic/static read/write parameter
Default 0
範囲 [0, Max.Img Width - XLength]

このパラメータは、ROI の左上隅の x 座標を定義します。値を変更しても、ROI 設定は直接変更されません。新しい設定を適用するには、パラメータ UpdateROI に書き込む必要があります。

ステップサイズはParallelismです。

XLength
タイプ dynamic/static read/write parameter
Default 1024
範囲 [parallelism, Max.Img Width - XOffset]

このパラメータは ROI の幅を定義します。値を変更しても ROI 設定は直接変更されません。新しい設定を適用するには、パラメータ UpdateROI に書き込む必要があります。

ステップサイズはParallelismです。

YOffset
タイプ dynamic/static read/write parameter
Default 0
範囲 [0, BufferHeight - YLength]

このパラメータは ROI の左上隅の y 座標を定義します。値を変更しても ROI 設定は直接変更されません。新しい設定を適用するには、パラメータ UpdateROI に書き込む必要があります。

YLength
タイプ dynamic/static read/write parameter
Default 1024
範囲 [1, BufferHeight - YOffset]

このパラメータは ROI の高さを定義します。値を変更しても ROI 設定は直接変更されません。新しい設定を適用するには、パラメータ UpdateROI に書き込む必要があります。

FillLevel
タイプ 動的リードパラメータ
Default 0
範囲 [0%, 100%]

このパラメータは、DRAMのFillレベルを25%刻みで提供します。

Overflow
タイプ 動的リードパラメータ
Default 0
範囲 [0, 1]

このパラメータはバッファオーバーフローを示します。

Coefficient File N
タイプ 動的読み取り/書き込みパラメータ
Default coefficients_N.tif
範囲 パス(オプション)を含む tif ファイルの任意のファイル名

このパラメータは、リンク N の係数画像のファイル名を定義します。

使用例

CoefficientBuffer オペレータの使用方法は、以下の例に示されています。