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

Defect Pixel Correction#

‘결함 픽셀 보정’ 카메라 기능을 사용하면 센서의 개별 픽셀 간 감도 차이로 인한 영향을 최소화할 수 있습니다.

촬영된 이미지에서는 균일한 조명을 사용했더라도 일부 픽셀이 나머지 픽셀보다 현저히 밝거나 어둡게 보일 수 있습니다. 이 문제는 개별 픽셀 간의 감도 차이로 인해 발생하며, 이는 제조 공차에서 기인합니다.

기능 사용법#

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

ace 2 R/X, boost R, dart M 카메라#

Basler ace 2 R, ace 2 X, boost R 및 dart M 카메라는 고정 결함 픽셀 보정 기능을 지원합니다. 이 보정 기능은 카메라에 저장되어 있으며 결함 픽셀 좌표 목록을 포함하는 파일을 기반으로 합니다.

“정적(Static)”이란 보정 과정에서 항상 동일한 지정된 결함 픽셀 좌표가 사용됨을 의미합니다. 이미지 획득 시, 정확히 이 픽셀들의 휘도 값이 인접 픽셀들의 휘도 값을 기준으로 대체됩니다.

다음과 같은 결함 픽셀 보정 파일을 카메라에 저장할 수 있습니다:

  • 공장 파일: 카메라 생산 과정에서 감지된 결함 픽셀의 좌표를 포함합니다.
  • 사용자 파일: 사용자가 정의한 좌표가 포함되어 있습니다. 이 파일을 카메라에 업로드할 수 있습니다. 이를 통해 시간이 지남에 따라 발생했을 수 있는 새로운 결함 픽셀을 정의할 수 있습니다.

정보

Basler ace 2 X 카메라는 동적 픽셀 결함 보정 기능도 지원합니다. 자세한 내용은 다음을 참조하십시오. Pixel Correction Beyond.

pylon Viewer를 사용하여 결함 픽셀 보정하기#

→ ‘정적 결함 픽셀 보정’을 참조하십시오 (pylon Viewer).

pylon API를 사용하여 결함 픽셀 보정하기#

정보

Basler는 다음을 사용하여 결함 픽셀 보정을 수행할 것을 권장합니다. pylon Viewer를 사용하여 결함 픽셀 보정을 수행할 것을 권장합니다.

pylon API 는 자체 애플리케이션에서 결함 픽셀 보정 기능을 구현하려는 경우에만 사용하십시오.

정적 결함 픽셀 보정 모드 설정#

정적 결함 픽셀 보정 모드를 설정하려면 다음을 설정하십시오. BslStaticDefectPixelCorrectionMode 매개변수를 다음 값 중 하나로 설정합니다:

  • Factory (기본값): 정적 결함 픽셀 보정은 에 저장된 결함 픽셀을 기반으로 합니다. 팩토리 수정 파일.
  • User: 정적 결함 픽셀 보정은 에 저장된 결함 픽셀을 기반으로 하며, 사용자 수정 파일.
    pylon API 를 통해 이 모드를 설정할 때는 다음 사항에 유의하십시오. 오직 사용자 정의 픽셀이 사용됩니다. 다음을 설정할 때 User incl. Factory 다음 경로를 통한 수정 모드 pylon Viewer, 공장 설정 파일에 저장된 픽셀 외에도 사용자 정의 픽셀이 사용됩니다.
  • Off: 카메라가 포함되지 정적 결함 픽셀 보정을 수행합니다.
User Defect Pixel Correction 파일 업로드하기#

사용자 결함 픽셀 보정 파일을 업로드하기 전에, 해당 파일이 다음 파일 형식을 준수하는지 확인하십시오:

파일은 값이 0인 4바이트로 구성된 헤더로 시작해야 합니다. 헤더 다음에는 결함 픽셀 항목이 포함되어야 하며(최대 4096개의 결함 픽셀을 지정할 수 있음), 각 항목은 32비트로 구성되며 비트 순서는 다음과 같습니다: 14비트 y좌표, 14비트 x좌표, 4비트 유형

예: 좌표 x = 1 및 y = 2인 Defect Pixel Entry

Bit   |31          18| |17           4| |3  0|
Value |00000000000010| |00000000000001| |0000|
      | y = 2        | | X = 1        | |type|

pylon Viewer를 사용하여 User Defect Pixel Correction 파일을 업로드하려면:

  1. pylon Viewer의 Camera 메뉴에서 File Access를 클릭합니다.
  2. Camera File 드롭다운 상자에서 User Defect Pixel Correction을 선택합니다.
    User Defect Pixel Correction 항목이 없으면 카메라에서 보정 파일 업로드를 지원하지 않는 것입니다.
  3. Upload를 클릭하고 업로드하실 파일로 이동합니다.
  4. Open을 클릭합니다.

업로드 후 User Defect Pixel Correction 파일을 적용하려면 다음을 수행해야 합니다. BslStaticDefectPixelCorrectionMode 로 설정된 경우 User 그런 다음 다음을 실행합니다. BslStaticDefectPixelCorrectionReload 명령입니다.

Defect Pixel Correction 파일 다운로드하기#

공장 출고 시 보정 파일 등 Defect Pixel Correction 파일을 다운로드하는 것은 다운로드한 파일에 사용자가 직접 측정한 결함 픽셀을 추가하려는 경우에 유용할 수 있습니다. 결함 픽셀 항목의 전체 목록을 새로운 사용자 보정 파일에 저장할 수 있습니다.

pylon Viewer를 사용하여 Defect Pixel Correction 파일을 다운로드하려면:

  1. pylon Viewer의 Camera 메뉴에서 File Access를 클릭합니다.
  2. 다운로드하려는 파일에 따라 Camera File 드롭다운 상자에서 Static Factory Defect Pixel Correction 또는 Static User Defect Pixel Correction을 선택합니다.
    적절한 항목이 없으면 카메라에서 파일 다운로드를 지원하지 않는 것입니다.
  3. Download를 클릭하고 파일을 저장할 디렉터리로 이동한 후 원하는 파일 이름을 입력합니다.
  4. Open을 클릭합니다.
Static Defect Pixel Correction File Status#

이 StaticDefectPixelCorrectionFileStatus 파라미터는 다음 값을 가질 수 있습니다.

  • FileStatusUnknown: Defect Pixel Correction 파일의 상태를 알 수 없습니다. 파일 상태를 변경하려면 이미지를 취득하세요.
  • FileOk: Defect Pixel Correction 파일이 유효합니다.
  • FileNotFound: Defect Pixel Correction 파일을 찾을 수 없습니다. 업로드된 적이 없거나 삭제되었습니다.
  • FileEmpty: Defect Pixel Correction 파일에 항목이 없습니다. 파일 헤더는 유효하지만 파일에 결함 픽셀이 포함되어 있지 않습니다. Defect Pixel Correction 프로세스가 중단됩니다.
  • InvalidHeader: Defect Pixel Correction 파일 헤더가 유효하지 않습니다. 파일에는 4바이트 파일 헤더가 있어야 합니다.
  • InvalidSize: Defect Pixel Correction 파일 크기가 유효하지 않습니다. 결함 픽셀의 최대 개수는 4096개를 초과할 수 없습니다.
  • InvalidSorting: Defect Pixel Correction 파일의 항목 정렬이 유효하지 않습니다. Defect Pixel Correction 프로세스가 중단됩니다.
  • InvalidFileEntry: Defect Pixel Correction 파일의 항목 중 하나 이상이 유효하지 않은 크기를 가지고 있습니다. Defect Pixel Correction 프로세스가 중단됩니다.
  • InvalidClustering: 유효하지 않은 클러스터가 발견되었습니다. 한 행에 3개 이상의 인접한 픽셀이 있는 경우는 유효하지 않은 클러스터로 간주됩니다. 다른 결함 픽셀 사이에 있는 결함 픽셀은 보정할 수 없습니다.

Defect Pixel Correction 파일에는 최대 개수의 결함 픽셀이 포함될 수 있습니다. 이 개수를 확인하려면 다음의 값을 가져오세요. BslStaticDefectPixelCorrectionMaxDefects 파라미터.

boost V 카메라#

Basler boost V 카메라는 static defect pixel correction을 지원합니다. 이 보정은 카메라에 저장되어 있고 결함 픽셀 좌표 목록이 포함된 파일을 기반으로 합니다.

“정적(Static)”이란 보정 과정에서 항상 동일한 지정된 결함 픽셀 좌표가 사용됨을 의미합니다. 이미지 획득 시, 정확히 이 픽셀들의 휘도 값이 인접 픽셀들의 휘도 값을 기준으로 대체됩니다.

Defect Pixel Correction 수행#

정보

pylon Viewer의 기본 제공 Static Defect Pixel Correction 기능은 boost V 카메라를 지원하지 않습니다.

boost V 카메라에서 defect pixel correction을 수행하려면 pylon Viewer의 feature tree 또는 pylon API를 사용하세요.

boost V 카메라에서 defect pixel correction을 수행하려면:

  1. 다음 값 중 하나로 BslStaticDefectPixelCorrectionMode parameter를 원하는 correction mode로 설정합니다:

    • Factory: 공장 파일에 좌표가 저장된 결함 픽셀만 보정됩니다. 공장 파일은 카메라 생산 중에 생성되며 변경할 수 없습니다.
    • User: 사용자 지정 결함 픽셀 좌표를 지정할 수 있습니다.
    • Off: 카메라가 포함되지 정적 결함 픽셀 보정을 수행합니다.
  2. 선택한 경우 User:

    1. 이미지에서 픽셀 오류를 찾아 결함 픽셀의 x 및 y 좌표를 기록합니다.
    2. 다음 값 중 하나로 BslStaticDefectPixelCorrectionYCoordinate 파라미터를 y 첫 번째 결함 픽셀의 좌표입니다.
    3. 다음 값 중 하나로 BslStaticDefectPixelCorrectionXSelector 매개변수: X0.
    4. 다음 값 중 하나로 BslStaticDefectPixelCorrectionXCoordinate 파라미터를 x 첫 번째 결함 픽셀의 좌표입니다.
    5. y 좌표는 같지만 x 좌표가 다른 다른 결함 픽셀이 있는 경우, BslStaticDefectPixelCorrectionXSelector parameter를 다음 항목(예: X1)으로 설정하고 다음 x 좌표를 입력합니다.
    6. 다른 모든 픽셀 오류에 대해 b~e 단계를 반복합니다.
    7. 다음을 실행합니다. BslStaticDefectPixelCorrectionSave command를 사용하여 변경 사항을 flash memory에 저장합니다.

정보

  • 이 값 및 기타 특정 구성 설정에 기반하여 카메라에서 달성할 수 있는 프레임 레이트를 평가하기 위해 BslStaticDefectPixelCorrectionCount parameter를 사용하여 현재 보정되고 있는 이미지 픽셀 수를 확인합니다.
  • 다음을 설정할 수 있습니다. BslStaticDefectPixelCorrectionTestMode 매개변수: On 을(를) 사용하여 모든 보정된 픽셀을 완전히 흰색으로 설정합니다. 이는 이미지에서 보정되는 픽셀을 찾는 데 도움이 됩니다.

결함 픽셀 좌표 제거하기#

공장 파일의 픽셀 좌표는 제거할 수 없습니다.

그러나 사용자 지정 결함 픽셀 좌표, 즉 "User" correction mode에서 입력한 좌표는 제거할 수 있습니다(위 참조). 방법은 다음과 같습니다:

  • 단일 사용자 지정 결함 픽셀 좌표를 제거하려면:

    1. 다음 값 중 하나로 BslStaticDefectPixelCorrectionYCoordinate 파라미터를 y 결함 픽셀의 좌표입니다.
    2. 다음 값 중 하나로 BslStaticDefectPixelCorrectionXSelector parameter를 결함 픽셀의 x 좌표가 포함된 항목으로 설정합니다(예: X0.
    3. 다음 값 중 하나로 BslStaticDefectPixelCorrectionXCoordinate parameter를 0xFFFF로 설정합니다.
    4. 다음을 실행합니다. BslStaticDefectPixelCorrectionSave command를 사용하여 변경 사항을 flash memory에 저장합니다.
  • 모든 사용자 지정 결함 픽셀 좌표를 제거하려면:

    1. 다음을 실행합니다. BslStaticDefectPixelCorrectionClearAll command. 이렇게 하면 모든 BslStaticDefectPixelCorrectionXCoordinate parameter 값이 0xFFFF로 설정됩니다.
    2. 다음을 실행합니다. BslStaticDefectPixelCorrectionSave command를 사용하여 변경 사항을 flash memory에 저장합니다.

dart 및 pulse 카메라#

Basler dart 및 pulse 카메라는 두 가지 유형의 픽셀 보정을 수행할 수 있습니다:

  • static 픽셀 보정은 완전히 검은색 픽셀을 포함하여 주변 픽셀보다 강도 값이 현저하게 낮은 픽셀을 보정합니다.
  • Dynamic pixel correction은 완전한 백색 픽셀을 포함하여 주변 픽셀보다 강도 값이 현저하게 높은 픽셀을 보정합니다. 내부 임계값은 픽셀이 "hot pixel"로 감지되는 시점을 정의합니다. "Dynamic"이란 획득한 각 이미지마다 Defect Pixel Correction이 개별적으로 계산된다는 것을 의미합니다.

Defect Pixel Correction 모드 설정하기#

Defect Pixel Correction 모드를 설정하려면 다음을 설정하십시오. BslDefectPixelCorrectionMode 매개변수를 다음 값 중 하나로 설정합니다:

  • On (기본값): 카메라가 수행합니다. static 및 dynamic pixel corrections.
  • StaticOnly: 카메라가 수행합니다. static pixel correction만 수행합니다.
  • Off: 카메라가 포함되지 pixel corrections를 수행합니다.

샘플 코드#

ace 2 R/X, boost R, dart M 카메라#
// Set static user defect pixel correction
camera.BslStaticDefectPixelCorrectionMode.SetValue(BslStaticDefectPixelCorrectionMode_User);
// Reload static defect pixel correction file
camera.BslStaticDefectPixelCorrectionReload.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Set static user defect pixel correction
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionMode").SetValue("User");
// Reload static defect pixel correction file
CCommandParameter(nodemap, "BslStaticDefectPixelCorrectionReload").Execute();
// Set static user defect pixel correction
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionMode].SetValue(PLCamera.BslStaticDefectPixelCorrectionMode.User);
// Reload static defect pixel correction file
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionReload].Execute();
/* 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 static user defect pixel correction */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionMode", "User");
CHECK(errRes);
/* Reload static defect pixel correction file */
errRes = PylonDeviceExecuteCommandFeature(hdev, "BslStaticDefectPixelCorrectionReload");
CHECK(errRes);
# Set static user defect pixel correction
camera.BslStaticDefectPixelCorrectionMode.Value = "User"
# Reload static defect pixel correction file
camera.BslStaticDefectPixelCorrectionReload.Execute()
boost V 카메라#
// Set the defect pixel correction mode to User
camera.BslStaticDefectPixelCorrectionMode.SetValue(BslStaticDefectPixelCorrectionMode_User);
// Assume there are two defect pixels at coordinates (120,430) and (182,430)
// Set the y coordinate to 430
camera.BslStaticDefectPixelCorrectionYCoordinate.SetValue(430);
// Select entry X0 and assign the first x coordinate
camera.BslStaticDefectPixelCorrectionXSelector.SetValue(BslStaticDefectPixelCorrectionXSelector_X0);
camera.BslStaticDefectPixelCorrectionXCoordinate.SetValue(120);
// Select entry X1 and assign the second x coordinate, which is in the same line
camera.BslStaticDefectPixelCorrectionXSelector.SetValue(BslStaticDefectPixelCorrectionXSelector_X1);
camera.BslStaticDefectPixelCorrectionXCoordinate.SetValue(182);
// Save changes to flash memory
camera.BslStaticDefectPixelCorrectionSave.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Set the defect pixel correction mode to User
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionMode").SetValue("User");
// Assume there are two defect pixels at coordinates (120,430) and (182,430)
// Set the y coordinate to 430
CIntegerParameter(nodemap, "BslStaticDefectPixelCorrectionYCoordinate").SetValue(430);
// Select entry X0 and assign the first x coordinate
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionXSelector").SetValue("X0");
CIntegerParameter(nodemap, "BslStaticDefectPixelCorrectionXCoordinate").SetValue(120);
// Select entry X1 and assign the second x coordinate, which is in the same line
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionXSelector").SetValue("X1");
CIntegerParameter(nodemap, "BslStaticDefectPixelCorrectionXCoordinate").SetValue(182);
// Save changes to flash memory
CCommandParameter(nodemap, "BslStaticDefectPixelCorrectionSave").Execute();
// Set the defect pixel correction mode to User
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionMode].SetValue(PLCamera.BslStaticDefectPixelCorrectionMode.User);
// Assume there are two defect pixels at coordinates (120,430) and (182,430)
// Set the y coordinate to 430
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionYCoordinate].SetValue(430);
// Select entry X0 and assign the first x coordinate
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXSelector].SetValue(PLCamera.BslStaticDefectPixelCorrectionXSelector.X0);
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXCoordinate].SetValue(120);
// Select entry X1 and assign the second x coordinate, which is in the same line
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXSelector].SetValue(PLCamera.BslStaticDefectPixelCorrectionXSelector.X1);
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXCoordinate].SetValue(182);
// Save changes to flash memory
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionSave].Execute();
/* 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 defect pixel correction mode to User */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionMode", "User");
CHECK(errRes);
/* Assume there are two defect pixels at coordinates (120,430) and (182,430) */
/* Set the y coordinate to 430 */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslStaticDefectPixelCorrectionYCoordinate", 430);
CHECK(errRes);
/* Select entry X0 and assign the first x coordinate */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionXSelector", "X0");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "BslStaticDefectPixelCorrectionXCoordinate", 120);
CHECK(errRes);
/* Select entry X1 and assign the second x coordinate, which is in the same line */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionXSelector", "X1");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "BslStaticDefectPixelCorrectionXCoordinate", 182);
CHECK(errRes);
/* Save changes to flash memory */
errRes = PylonDeviceExecuteCommandFeature(hdev, "BslStaticDefectPixelCorrectionSave");
CHECK(errRes);
# Set the defect pixel correction mode to User
camera.BslStaticDefectPixelCorrectionMode.Value = "User"
# Assume there are two defect pixels at coordinates (120,430) and (182,430)
# Set the y coordinate to 430
camera.BslStaticDefectPixelCorrectionYCoordinate.Value = 430
# Select entry X0 and assign the first x coordinate
camera.BslStaticDefectPixelCorrectionXSelector.Value = "X0"
camera.BslStaticDefectPixelCorrectionXCoordinate.Value = 120
# Select entry X1 and assign the second x coordinate, which is in the same line
camera.BslStaticDefectPixelCorrectionXSelector.Value = "X1"
camera.BslStaticDefectPixelCorrectionXCoordinate.Value = 182
# Save changes to flash memory
camera.BslStaticDefectPixelCorrectionSave.Execute()
dart 및 pulse 카메라#
// Disable defect pixel correction
camera.DefectPixelCorrectionMode.SetValue(DefectPixelCorrectionMode_Off);
INodeMap& nodemap = camera.GetNodeMap();
// Disable defect pixel correction
CEnumParameter(nodemap, "DefectPixelCorrectionMode").SetValue("Off");
// Disable defect pixel correction
camera.Parameters[PLCamera.DefectPixelCorrectionMode].SetValue(PLCamera.DefectPixelCorrectionMode.Off);
/* 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 */
/* Disable defect pixel correction */
errRes = PylonDeviceFeatureFromString(hdev, "DefectPixelCorrectionMode", "Off");
CHECK(errRes);
# Disable defect pixel correction
camera.DefectPixelCorrectionMode.Value = "Off"

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