跳至內容
測試伺服器
開發伺服器

Scaling#

透過 Scaling 相機功能,您可以降低相機輸出影像的解析度。

Scaling 功能類似於 Pixel Beyond 功能,該功能僅適用於 ace 2 相機。

使用此功能#

運作原理#

在縮放期間,影像大小會透過插補按比例縮小。系統會依需求相加並平均像素值,以將其對應至縮放後影像的像素。這會提高訊雜比。

Scaling 是由您選擇的縮放係數來控制。水平與垂直方向會套用相同的係數。係數為 1.0 時,影像大小保持不變。小於 1.0 的係數會使影像的寬度和高度縮小。

設定 Scaling#

若要設定 Scaling:

  1. 請確保相機處於閒置狀態,也就是未擷取影像。
  2. 將 binning 與 decimation 係數設為 1,藉此停用 Decimation 和 Binning。
  3. 將 ScalingHorizontal 參數設為所需的 scaling 值.

資訊

  • 變更 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 設定的影響#

當您使用 Scaling 時,Image ROI 與 Auto Function ROI 設定是指修改後影像的縮放行與列,而非感測器的實體行與列。

例如,假設您使用的相機配備 3 840 x 2 748 感測器。在完整解析度下套用 0.5 的 Scaling 係數。在這種情況下,最大 ROI 寬度為 1918,最大 ROI 高度為 1372。ROI 寬度與高度參數會自動調整。同理,您在啟用 Scaling 之前定義的任何偏移量也會自動調整。

當停用 Scaling 時,ROI 會再次增加,但可能小於原始的 ROI。

資訊

Basler 建議您在停用 Scaling 後務必檢查 Image ROI 設定,並在必要時手動將 Image ROI 恢復為所需的尺寸與位置。

降低解析度#

使用 Scaling 會有效降低相機影像感測器的解析度。例如,如果您在配備 3 840 x 2 748 感測器的相機上設定 0.25 的 Scaling 係數,相機的有效解析度將降至 954 x 682。

捨去損失#

在 Scaling 期間,影像尺寸會頻繁進行四捨五入。如果您重複變更 Scaling 係數,四捨五入的效應會累積。當返回先前的影像尺寸時,因四捨五入而遺失的尺寸將無法恢復。

為避免累積的四捨五入損失,請手動恢復先前的影像尺寸。或者,返回「參考」影像尺寸(例如完整解析度),並手動指定影像尺寸以避免四捨五入誤差。

範例程式碼#

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.ScalingHorizontalAbs.Value = 0.5
# Disable scaling
camera.ScalingHorizontalAbs.Value = 1
其他相機#
// 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);
# Set horizontal scaling to 0.5
camera.ScalingHorizontal.Value = 0.5
# Disable scaling
camera.ScalingHorizontal.Value = 1

您也可以使用 pylon Viewer 來輕鬆設定參數。