コンテンツにスキップ

Scaling#

Scalingカメラ機能を使用すると、カメラから出力される画像の解像度を下げることができます。

Scaling機能は、 ace 2カメラでのみ使用可能なPixel Beyond機能に似ています。

機能を使用する#

仕組み#

スケーリング中は、補間によって画像サイズが比例的に縮小されます。ピクセル値は、必要に応じて加算および平均化され、スケーリングされた画像の画素にマッピングされます。これにより、SN比が向上します。

Scalingは、選択したスケーリング係数によって制御されます。水平方向と垂直方向に同じ係数が適用されます。係数1.0では、画像サイズは同じままです。1.0より小さい係数を指定すると、画像の幅と高さが縮小されます。

Scalingの設定#

スケーリングを設定するには、次の手順に従います。

  1. カメラがアイドル状態であること、つまり画像をキャプチャしていないことを確認します。
  2. ビニング係数とデシメーション係数を1に設定して、DecimationおよびBinningを無効にします。
  3. ScalingHorizontalパラメーターを目的のスケール値に設定します。

情報

  • ScalingHorizontalパラメーター値を変更すると、ScalingVerticalパラメーター値が自動的に調整されます。これにより、元の高さと幅の比率が維持されます。
  • Scaling機能が使用されていてBinningおよびDecimationが使用できない場合。

Scaling値#

スケーリング係数は0.125から1まで選択できます。ただし、使用できる離散値は112個だけです。使用できない値を入力すると、フロートコ制御により自動的に最も近い使用可能な値に切り上げまたは切り捨てられます。

有効な値を計算するには、次の式を使用します:16/x(xは16~128の任意の自然数)。

結果として得られるScaling係数 結果
16/16 1.0 デフォルト設定。Scalingは無効です。元の画像サイズに変更はありません。
BinningおよびDecimationを使用できます。
16/17 0.941
16/18 0.888
など
16/32 0.5 画像サイズが半分に縮小されます(係数2)。
16/64 0.25 画像サイズは係数4で縮小されます。
など
16/128 0.125 画像サイズは係数8で縮小されます(最大縮小)。

Scaling使用時に考慮すること#

ROI設定への影響#

スケーリングを使用する場合、画像ROIおよびオートファンクションROI設定は、センサーの物理的な行と列ではなく、変更された画像のスケーリングされた行と列を参照します。

例えば、3840 x 2748センサーを搭載したカメラを使用しているとします。スケーリング係数0.5をフル解像度に適用します。この場合、最大ROI幅は1918で、最大ROI高さは1372です。ROIの幅と高さのパラメーターは自動的に調整されます。同様に、スケーリングを有効にする前に定義したオフセットも自動的に調整されます。

スケーリングを無効にすると、ROIは再度増加しますが、元のROIよりも小さくなる場合があります。

情報

Baslerでは、スケーリングを無効にした後は常に画像ROI設定を確認し、必要に応じて画像ROIを目的のサイズと位置に手動で復元することをお勧めします。

解像度の低下#

スケーリングを使用すると、カメラのイメージングセンサーの解像度が効果的に低下します。例えば、3840 x 2748センサーを搭載したカメラでスケーリング係数0.25を設定すると、カメラの有効解像度は954 x 682になります。

Rounding Losses#

スケーリング中は、画像のサイズが頻繁に丸められます。スケーリング係数を繰り返し変更すると、丸め効果が累積されます。前の画像サイズに戻すと、丸めによって失われた寸法は復元できません。

累積丸め損失を回避するには、前の画像サイズを手動で復元します。または、「基準」画像サイズ(フル解像度など)に戻し、画像サイズを手動で指定して丸めエラーを回避します。

サンプルコード#

ace classic/U/L GigEカメラ#

// Set horizontal scaling to 0.5
camera.ScalingHorizontalAbs.SetValue(0.5);
// Disable scaling
camera.ScalingHorizontalAbs.SetValue(1);
INodeMap& nodemap = camera.GetNodeMap();
// Set horizontal scaling to 0.5
CFloatParameter(nodemap, "ScalingHorizontalAbs").SetValue(0.5);
// Disable scaling
CIntegerParameter(nodemap, "ScalingHorizontalAbs").SetValue(1);
// Set horizontal scaling to 0.5
camera.Parameters[PLCamera.ScalingHorizontalAbs].SetValue(0.5);
// Disable scaling
camera.Parameters[PLCamera.ScalingHorizontalAbs].SetValue(1);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Set horizontal scaling to 0.5 */
errRes = PylonDeviceSetFloatFeature(hdev, "ScalingHorizontalAbs", 0.5);
CHECK(errRes);
/* Disable scaling */
errRes = PylonDeviceSetIntegerFeature(hdev, "ScalingHorizontalAbs", 1);
CHECK(errRes);

その他のカメラ#

// Set horizontal scaling to 0.5
camera.ScalingHorizontal.SetValue(0.5);
// Disable scaling
camera.ScalingHorizontal.SetValue(1);
INodeMap& nodemap = camera.GetNodeMap();
// Set horizontal scaling to 0.5
CFloatParameter(nodemap, "ScalingHorizontal").SetValue(0.5);
// Disable scaling
CIntegerParameter(nodemap, "ScalingHorizontal").SetValue(1);
// Set horizontal scaling to 0.5
camera.Parameters[PLCamera.ScalingHorizontal].SetValue(0.5);
// Disable scaling
camera.Parameters[PLCamera.ScalingHorizontal].SetValue(1);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Set horizontal scaling to 0.5 */
errRes = PylonDeviceSetFloatFeature(hdev, "ScalingHorizontal", 0.5);
CHECK(errRes);
/* Disable scaling */
errRes = PylonDeviceSetIntegerFeature(hdev, "ScalingHorizontal", 1);
CHECK(errRes);

pylon Viewerを使用して、パラメーターを簡単に設定することもできます。