콘텐츠로 건너뛰기
STAGING SERVER
DEVELOPMENT SERVER

TDI (Time Delay Integration)#

TDI (Time Delay Integration)는 라인 스캔 카메라에서 사용되는 이미징 기술로, 물체의 움직임을 보정하면서 여러 단계에 걸쳐 이미지 데이터를 수집합니다.

TDI는 감광도를 높이고 더 넓은 다이내믹 런지를 가진 밝은 이미지를 생성하므로 저조도 환경에서 사용하기에 이상적입니다.

정보

이 기능은 Basler racer 2 XL 및 racer 2 L mono 카메라에서만 사용할 수 있습니다.

기능 사용법#

이 기능의 구현 방식은 카메라에 따라 다릅니다.

racer 2 XL 카메라#

racer 2 XL 카메라에는 TDI 센서가 장착되어 있습니다. TDI 센서는 배열(array) 형태로 배치된 스테이지(stage)라고 하는 여러 픽셀 행으로 구성됩니다.

물체가 센서의 시야(Field of View)를 가로질러 이동할 때, 해당 물체의 이미지는 첫 번째 스테이지의 노출 영역에서 마지막 스테이지의 노출 영역으로 투영됩니다. 스테이지들은 개별적으로 순차 노출되는 것이 아니라 전체 블록으로 노출됩니다. 따라서 센서는 모든 스테이지에서 동일한 물체를 노출하고, 전하가 리드아웃 라인에 도달할 때까지 전하를 축적하고 전송합니다.

다음 그림은 4개의 스테이지가 있는 센서 내의 전하 전송을 시각적으로 보여줍니다.

TDI 센서 전하 전송

한 스테이지에서 다음 스테이지로의 전하 전송은 물체의 움직임과 정확히 동기화되어야 합니다. 이를 통해 지속적인 노출과 전하 통합이 보장됩니다. 물체의 노출은 카메라의 시야 내에 있는 동안 지속됩니다. 더 많은 스테이지가 사용될수록 유효 Exposure Time 및 적분 시간이 길어집니다.

다음 그림은 TDI 센서의 시야와 전하 이동 원리를 보여줍니다.

TDI 카메라 전하 이동 원리

Number Of Stages#

스테이지 수는 마지막 스테이지에 도달할 때까지 전하가 축적되고 한 스테이지에서 다음 스테이지로 이동하는 빈도를 결정합니다. 스테이지 수가 많을수록 이미지 감광도가 높아집니다. 예를 들어, 스테이지 수가 256개인 경우 카메라는 256배 더 높은 감도로 이미지를 획득합니다. 스테이지 수는 결과적인 Exposure Time에도 영향을 줍니다.

센서는 4개 또는 최대 256개 등 다양한 스테이지 수로 작동하도록 설정할 수 있습니다. 사용 가능한 스테이지 수는 사용되는 센서에 따라 다릅니다.

스테이지 수를 설정하려면 BslTDINumberOfStages 파라미터 값을 다음으로 설정하십시오: Stages4 또는 Stages256.

정보

Area sensor acquisition mode에서 스테이지 수는 이미지 높이를 결정합니다. 예를 들어, 스테이지 수가 128로 설정된 경우 r2T16416-500cm 카메라는 Area sensor acquisition mode에서 16416 x 128 "area" 이미지를 획득합니다.

Scan Direction#

TDI 센서의 Scan Direction은 카메라를 통과하는 물체의 움직임과 동기화되어야 합니다. 지속적인 노출과 전하 통합을 보장하기 위해 Scan Direction은 물체가 이동하는 방향과 같아야 합니다.

정보

스캔 방향 설정 방법은 카메라에 렌즈가 장착되어 있음을 가정합니다. 렌즈는 상하반전된 이미지를 생성합니다.

스캔 방향을 설정하려면 다음을 설정하십시오. BslTDIScanDirection 매개변수를 다음 값 중 하나로 설정합니다:

  • Forward: 센서의 시야각을 통과하는 물체는 다음 방향으로 스캔됩니다. 순방향 스캔 방향입니다. 물체는 카메라 하단을 먼저 통과한 후 상단을 통과합니다.
  • Reverse: 센서의 시야각을 통과하는 물체는 다음 방향으로 스캔됩니다. 역방향 스캔 방향입니다. 물체는 카메라 상단을 먼저 통과한 후 하단을 통과합니다.

Resulting Exposure Time#

TDI 센서 수집 모드모드에서는 Exposure Time이 다음의 ExposureTime 파라미터로 설정되지 않습니다. 대신, 다음 두 가지 취득 파라미터에 의해 결정됩니다.

  • Number of stages: 전하가 축적 및 이동되는 동안 물체가 센서의 시야각에 머무는 시간을 정의합니다.
  • Line rate: 한 스테이지에서 다음 스테이지로 전하가 이동하는 속도를 정의합니다. 또한 개별 스테이지당 적분 시간도 결정합니다.

두 파라미터는 결합하여 전체 Exposure Time을 결정합니다.

$$ \text{Exposure time} = \frac{\text{Number of stages}}{\text{Line rate}} $$

다음 표는 500 kHz의 고정된 Line rate와 다양한 Number of stages에서의 Exposure Time 예시를 보여줍니다.

Number of Stages Line Rate [kHz] Exposure Time [µs]
4 500 8
64 500 128
128 500 256
256 500 512

다음 표는 128개의 고정된 Number of stages와 최대 500 kHz까지의 다양한 Line rate에서의 Exposure Time 예시를 보여줍니다.

Line Rate [kHz] Number of Stages Exposure Time [µs]
100 128 1280
200 128 640
400 128 320
500 128 256

Number of stages와 Line rate는 모두 Exposure Time에 영향을 미치므로, 트리거링이 물체의 움직임과 올바르게 동기화되어 있고 픽셀 포화 한계가 준수되는 한 이미지 밝기에도 영향을 줍니다.

  • Number of stages가 높을수록 Exposure Time이 길어져 더 많은 전하가 축적됩니다. 이미지가 더 밝게 표시됩니다.
  • Number of stages가 낮을수록 Exposure Time이 짧아져 적은 전하가 축적됩니다. 이미지가 더 어둡게 표시됩니다.
  • Line rate가 높을수록 스테이지당 Exposure Time이 짧아져 적은 전하가 축적됩니다. 이미지가 더 어둡게 표시됩니다.
  • Line rate가 낮을수록 스테이지당 Exposure Time이 길어져 더 많은 전하가 축적됩니다. 이미지가 더 밝게 표시됩니다.

racer 2 XL 카메라의 TDI 구성#

TDI용 racer 2 XL 카메라를 구성하려면 다음을 수행하십시오.

  1. 다음 값 중 하나로 BslSensorAcquisitionMode 매개변수: TDISingleLine. 센서는 하나의 리드아웃 라인을 사용합니다.
  2. 시스템 설정에 따라 BslTDIScanDirection 파라미터를 예로 들어 다음과 같이 설정합니다. Forward.
  3. 다음 값 중 하나로 BslTDINumberOfStages 파라미터를 예로 들어 128으로 설정합니다.

정보

  • 센서의 리드아웃 절차가 대상의 이동 속도 및 방향과 정확히 동기화되어 있는지 확인하십시오. 테스트 목적으로 그에 따라 Acquisition Line Rate를 변경하십시오. 이는 결과적인 Exposure Time에도 영향을 줍니다.
  • 트리거 일시 중지 후 다시 트리거할 때, n을 최소 스테이지 수로 나타낼 때 적어도 첫 번째 n개의 리드아웃 라인은 유효하지 않은 것으로 간주해야 합니다.

racer 2 L 흑백 카메라#

racer 2 L mono cameras는 멀티 라인 센서, 즉 듀얼 라인 또는 쿼드 라인 센서가 장착되어 있습니다. 센서의 각 픽셀 라인은 서로 다른 Exposure Time으로 노출되도록 설정할 수 있습니다. 획득이 트리거될 때마다 센서의 모든 픽셀 라인이 동시에 노출됩니다. 단일 노출의 경우, 센서의 각 라인은 카메라를 지나가는 물체에 대해 서로 다른 시야를 가지므로 물체의 서로 다른 영역을 획득합니다.

다음 그림은 모노 쿼드 라인 센서의 시야를 보여줍니다.

모노 쿼드 라인 센서의 시야

이 경우 물체의 특정 영역에 대한 전체 정보를 얻으려면 네 번의 서로 다른 획득 데이터를 버퍼링하고 결합해야 합니다. 이는 Spatial Correction을 통해 수행됩니다. 현재 노출의 마지막 라인 데이터는 과거 노출에서 가져온 이전 라인 데이터와 결합됩니다.

Line Combination Mode를 사용하여 HDR 이미지를 얻기 위해 개별 라인의 픽셀 값을 결합할 방식을 최종적으로 지정할 수 있습니다.

Line Combination Mode#

라인 조합 모드를 사용하면 결합된 센서 라인의 픽셀 값을 합산할지 평균을 낼지 정의할 수 있습니다. 다음을 설정할 수 있습니다. BslLineCombinationMode 매개변수를 다음 값 중 하나로 설정합니다:

  • Off: 라인 조합이 비활성화되었습니다.
  • TDISum: 결합된 센서 라인의 픽셀 값이 합산됩니다. 이는 카메라의 광원에 대한 응답성과 신호 대 잡음비를 증가시킵니다.
  • TDIAverage: 결합된 센서 라인의 픽셀 값 평균이 계산됩니다. 이는 카메라의 광원에 대한 응답성에 영향을 주지 않고 신호 대 잡음비를 증가시킵니다.

racer 2 L Mono 카메라의 TDI 구성#

TDI용 racer 2 L 모노 카메라를 구성하려면:

  1. 다음 값 중 하나로 센서 수집 모드 듀얼 또는 쿼드 라인 이미지 획득으로:
    다음 값 중 하나로 BslSensorAcquisitionMode 매개변수: DualLine 또는 QuadLine TDI에 두 개 또는 네 개의 라인 중 어느 것을 사용할지에 따라 다릅니다.
  2. 각 라인(스테이지)의 Exposure Time을 지정합니다.

    1. 다음 값 중 하나로 ExposureTimeMode 매개변수: Individual.
    2. 다음 값 중 하나로 ExposureTimeSelector 매개변수: Stage1.
    3. 다음 값 중 하나로 ExposureTime 파라미터를 원하는 Exposure Time(마이크로초 단위)으로 설정합니다.
      참고: 카메라 모델의 최소 및 최대 Exposure Time 값은 다음에서 찾을 수 있습니다. 세부 정보 섹션 Exposure Time 항목.
    4. 다른 스테이지에 대해 단계 b와 c를 반복합니다.
  3. 다음 항목을 지정합니다. spatial correction stride Spatial Correction의 시작 라인과 방향을 결정합니다.
    다음 값 중 하나로 BslSpatialCorrectionStride parameter를 예를 들어 2로 설정합니다.

  4. 다음 값 중 하나로 line combination mode 결합된 라인의 센서 픽셀 값을 더할 것인지 평균을 낼 것인지 결정합니다:
    다음 값 중 하나로 BslLineCombinationMode 파라미터를 예로 들어 다음과 같이 설정합니다. TDIAverage.

외부 후처리 프로그램을 사용하여 라인 정보를 결합함으로써 High Dynamic Range 이미지를 생성합니다.

샘플 코드#

racer 2 XL 카메라#
// Set the sensor acquisition mode to TDI Single Line
camera.BslSensorAcquisitionMode.SetValue(BslSensorAcquisitionMode_TDISingleLine);
// Set the sensor scan direction to Forward
camera.BslTDIScanDirection.SetValue(BslTDIScanDirection_Forward);
// Set the number of stages to 128
camera.BslTDINumberOfStages.SetValue(BslTDINumberOfStages_128);
INodeMap& nodemap = camera.GetNodeMap();
// Set the sensor acquisition mode to TDI Single Line
CEnumParameter(nodemap, "BslSensorAcquisitionMode").SetValue("TDISingleLine");
// Set the sensor scan direction to Forward
CEnumParameter(nodemap, "BslTDIScanDirection").SetValue("Forward");
// Set the number of stages to 128
CEnumParameter(nodemap, "BslTDINumberOfStages").SetValue("");
// Set the sensor acquisition mode to TDI Single Line
camera.Parameters[PLCamera.BslSensorAcquisitionMode].SetValue(PLCamera.BslSensorAcquisitionMode.TDISingleLine);
// Set the sensor scan direction to Forward
camera.Parameters[PLCamera.BslTDIScanDirection].SetValue(PLCamera.BslTDIScanDirection.Forward);
// Set the number of stages to 128
camera.Parameters[PLCamera.BslTDINumberOfStages].SetValue(PLCamera.BslTDINumberOfStages.);
/* 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 the sensor acquisition mode to TDI Single Line */
errRes = PylonDeviceFeatureFromString(hdev, "BslSensorAcquisitionMode", "TDISingleLine");
CHECK(errRes);
/* Set the sensor scan direction to Forward */
errRes = PylonDeviceFeatureFromString(hdev, "BslTDIScanDirection", "Forward");
CHECK(errRes);
/* Set the number of stages to 128 */
errRes = PylonDeviceFeatureFromString(hdev, "BslTDINumberOfStages", "");
CHECK(errRes);
# Set the sensor acquisition mode to TDI Single Line
camera.BslSensorAcquisitionMode.Value = "TDISingleLine"
# Set the sensor scan direction to Forward
camera.BslTDIScanDirection.Value = "Forward"
# Set the number of stages to 128
camera.BslTDINumberOfStages.Value = ""
racer 2 L 흑백 카메라#
// Set the sensor acquisition mode to Dual Line
camera.BslSensorAcquisitionMode.SetValue(BslSensorAcquisitionMode_DualLine);
// Set the exposure time for both lines (stages)
// Select stage 1
camera.ExposureTimeSelector.SetValue(ExposureTimeSelector_Stage1);
// Set the exposure time to 1000 microseconds
camera.ExposureTime.SetValue(1000.0);
// Select stage 2
camera.ExposureTimeSelector.SetValue(ExposureTimeSelector_Stage2);
// Set the exposure time to 1000000 microseconds
camera.ExposureTime.SetValue(1000000.0);
// Set the spatial correction stride to 2
camera.BslSpatialCorrectionStride.SetValue(BslSpatialCorrectionStride_2);
// Set the line combination mode to TDI Sum
camera.BslLineCombinationMode.SetValue(BslLineCombinationMode_TDISum);
INodeMap& nodemap = camera.GetNodeMap();
// Set the sensor acquisition mode to Dual Line
CEnumParameter(nodemap, "BslSensorAcquisitionMode").SetValue("DualLine");
// Set the exposure time for both lines (stages)
// Select stage 1
CEnumParameter(nodemap, "ExposureTimeSelector").SetValue("Stage1");
// Set the exposure time to 1000 microseconds
CFloatParameter(nodemap, "ExposureTime").SetValue(1000.0);
// Select stage 2
CEnumParameter(nodemap, "ExposureTimeSelector").SetValue("Stage2");
// Set the exposure time to 1000000 microseconds
CFloatParameter(nodemap, "ExposureTime").SetValue(1000000.0);
// Set the spatial correction stride to 2
CEnumParameter(nodemap, "BslSpatialCorrectionStride").SetValue("");
// Set the line combination mode to TDI Sum
CEnumParameter(nodemap, "BslLineCombinationMode").SetValue("TDISum");
// Set the sensor acquisition mode to Dual Line
camera.Parameters[PLCamera.BslSensorAcquisitionMode].SetValue(PLCamera.BslSensorAcquisitionMode.DualLine);
// Set the exposure time for both lines (stages)
// Select stage 1
camera.Parameters[PLCamera.ExposureTimeSelector].SetValue(PLCamera.ExposureTimeSelector.Stage1);
// Set the exposure time to 1000 microseconds
camera.Parameters[PLCamera.ExposureTime].SetValue(1000.0);
// Select stage 2
camera.Parameters[PLCamera.ExposureTimeSelector].SetValue(PLCamera.ExposureTimeSelector.Stage2);
// Set the exposure time to 1000000 microseconds
camera.Parameters[PLCamera.ExposureTime].SetValue(1000000.0);
// Set the spatial correction stride to 2
camera.Parameters[PLCamera.BslSpatialCorrectionStride].SetValue(PLCamera.BslSpatialCorrectionStride.);
// Set the line combination mode to TDI Sum
camera.Parameters[PLCamera.BslLineCombinationMode].SetValue(PLCamera.BslLineCombinationMode.TDISum);
/* 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 the sensor acquisition mode to Dual Line */
errRes = PylonDeviceFeatureFromString(hdev, "BslSensorAcquisitionMode", "DualLine");
CHECK(errRes);
/* Set the exposure time for both lines (stages) */
/* Select stage 1 */
errRes = PylonDeviceFeatureFromString(hdev, "ExposureTimeSelector", "Stage1");
CHECK(errRes);
/* Set the exposure time to 1000 microseconds */
errRes = PylonDeviceSetFloatFeature(hdev, "ExposureTime", 1000.0);
CHECK(errRes);
/* Select stage 2 */
errRes = PylonDeviceFeatureFromString(hdev, "ExposureTimeSelector", "Stage2");
CHECK(errRes);
/* Set the exposure time to 1000000 microseconds */
errRes = PylonDeviceSetFloatFeature(hdev, "ExposureTime", 1000000.0);
CHECK(errRes);
/* Set the spatial correction stride to 2 */
errRes = PylonDeviceFeatureFromString(hdev, "BslSpatialCorrectionStride", "");
CHECK(errRes);
/* Set the line combination mode to TDI Sum */
errRes = PylonDeviceFeatureFromString(hdev, "BslLineCombinationMode", "TDISum");
CHECK(errRes);
# Set the sensor acquisition mode to Dual Line
camera.BslSensorAcquisitionMode.Value = "DualLine"
# Set the exposure time for both lines (stages)
# Select stage 1
camera.ExposureTimeSelector.Value = "Stage1"
# Set the exposure time to 1000 microseconds
camera.ExposureTime.Value = 1000.0
# Select stage 2
camera.ExposureTimeSelector.Value = "Stage2"
# Set the exposure time to 1000000 microseconds
camera.ExposureTime.Value = 1000000.0
# Set the spatial correction stride to 2
camera.BslSpatialCorrectionStride.Value = ""
# Set the line combination mode to TDI Sum
camera.BslLineCombinationMode.Value = "TDISum"

또한 pylon Viewer를 사용하여 파라미터를 손쉽게 설정할 수 있습니다.