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

Scaling#

「Scaling 」相機功能可讓您降低相機輸出的影像解析度。

「Scaling 」功能與 Pixel Beyond 功能,該功能僅適用於 ace 2 相機。

使用功能#

運作原理#

在縮放過程中,會透過插值將影像尺寸按比例縮小。系統會根據需要對像素值進行加總與平均運算,以便將其映射至縮放後影像的像素上。此舉可提高信噪比。

Scaling 由您選擇的縮放係數所控制。此係數在水平與垂直方向均適用。若係數為 1.0,圖片尺寸將保持不變;若係數小於 1.0,則圖片的寬度與高度都會縮減。

設定Scaling#

要設定縮放功能:

  1. 請確保相機處於閒置狀態,也就是未擷取影像。
  2. 停用 Decimation 並 Binning 透過將分桶係數與降採樣係數設定為 1 來達成。
  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」的設定所指的,是經縮放後之修改影像的行與列,而非感測器的實際行與列。

舉例來說,假設您使用的是配備 3 840 × 2 748 感測器的相機。系統會將全解析度套用 0.5 的縮放係數。在此情況下,ROI 的最大寬度為 1918,最大高度為 1372。ROI 的寬度和高度參數會自動調整。同樣地,您在啟用縮放功能之前所定義的任何偏移量,也會自動進行調整。

當縮放功能被停用時,ROI 會再次擴大,但可能比原始的 ROI 還要小。

資訊

Basler 建議您在停用縮放功能後,務必檢查影像 ROI 的設定,並在必要時手動將影像 ROI 恢復至所需的尺寸與位置。

降低解析度#

有效運用縮放功能會降低攝影機影像感測器的解析度。例如,若您將具備 3 840 x 2 748 感測器的攝影機設定為縮放係數 0.25,則該攝影機的有效解析度將降至 954 x 682。

四捨五入造成的損失#

在縮放過程中,影像尺寸經常會被四捨五入。若反覆變更縮放係數,四捨五入的影響便會累積。當恢復至先前的影像尺寸時,因四捨五入而遺失的尺寸將無法恢復。

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

範例程式碼#

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

您也可以 use the pylon Viewer 來輕鬆設定參數。