콘텐츠로 바로 가기
STAGING SERVER
DEVELOPMENT SERVER

Defect Pixel Correction#

Defect Pixel Correction 카메라 기능을 사용하면 센서 개별 픽셀의 감도 차이로 인한 영향을 최소화할 수 있습니다.

균일한 조명을 사용할 때에도 획득한 이미지에서 일부 픽셀이 나머지 픽셀보다 현저히 밝거나 어둡게 나타날 수 있습니다. 이 문제는 제조 공차로 인해 발생하는 개별 픽셀 간의 감도 차이 때문에 발생합니다.

기능 사용#

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

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

Basler ace 2 R, ace 2 X, boost R, dart M 카메라는 정적 결함 픽셀 보정(Static Defect Pixel Correction)을 지원합니다. 이 보정은 카메라에 저장되어 있으며 결함 픽셀 좌표 목록이 포함된 파일을 기반으로 합니다.

"정적(Static)"이란 보정 프로세스에 항상 동일하게 지정된 결함 픽셀 좌표가 사용된다는 의미입니다. 이미지 획득 중에 정확히 이 픽셀들의 강도 값은 주변 픽셀의 강도 값을 기반으로 교체됩니다.

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

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

정보

Basler ace 2 X 카메라는 dynamic pixel defect correction도 지원합니다. 자세한 내용은 Pixel Correction Beyond를 참조하십시오.

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

→ Static Defect Pixel Correction (pylon Viewer) 참조.

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

정보

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

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

Static Defect Pixel Correction 모드 설정#

정적 결함 픽셀 보정 모드를 설정하려면 다음을 설정하십시오. BslStaticDefectPixelCorrectionMode 파라미터를 설정하십시오:

  • Factory (기본값): 정적 결함 픽셀 보정은 다음에 저장된 결함 픽셀을 기반으로 합니다. factory 보정 파일.
  • User: 정적 결함 픽셀 보정은 다음에 저장된 결함 픽셀을 기반으로 합니다. user 보정 파일.
    pylon API를 통해 이 모드를 설정할 때, only 사용자 정의 픽셀이 사용됩니다. 설정을 지정할 때 User incl. Factory 보정 모드를 다음을 통해 설정하는 경우 pylon Viewer, factory 파일에 저장된 픽셀 외에도 사용자 정의 픽셀이 추가로 사용됩니다.
  • Off: 카메라는 다음을 수행하지 않습니다. 않습니다 정적 결함 화소 보정을 수행합니다.
User Defect Pixel Correction 파일 업로드#

User Defect Pixel Correction 파일을 업로드하기 전에 파일이 다음 파일 형식에 부합하는지 확인하십시오:

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

예시: 좌표 x = 1 및 y = 2인 결함 화소 항목

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 파라미터가 다음으로 설정된 경우에만 Light Control 기능과 함께 사용할 수 있음을 명시했습니다. User 다음을 실행하십시오. BslStaticDefectPixelCorrectionReload command.

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 파일 상태#

The 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: 결함 픽셀 보정 파일의 항목 정렬이 유효하지 않습니다. 결함 픽셀 보정 프로세스가 중단됩니다.
  • InvalidFileEntry: 결함 픽셀 보정 파일의 항목 중 하나 이상이 유효하지 않은 크기를 가집니다. 결함 픽셀 보정 프로세스가 중단됩니다.
  • InvalidClustering: 유효하지 않은 클러스터가 발견되었습니다. 한 행에 3개 이상의 인접한 픽셀이 있는 경우 유효하지 않은 클러스터로 간주됩니다. 다른 결함 픽셀 사이에 있는 결함 픽셀은 보정할 수 없습니다.

결함 픽셀 보정 파일에는 최대 허용 개수의 결함 픽셀이 포함될 수 있습니다. 이 개수를 확인하려면 다음의 값을 가져오십시오: BslStaticDefectPixelCorrectionMaxDefects 파라미터에 HTML 로그 파일(*.html)의 경로와 이름을 지정할 수 있습니다.

boost V 카메라#

Basler boost V 카메라는 Static Defect Pixel Correction을 지원합니다. 이 보정은 카메라에 저장되며 결함 픽셀 좌표 목록이 포함된 파일을 기반으로 합니다.

"정적(Static)"이란 보정 프로세스에 항상 동일하게 지정된 결함 픽셀 좌표가 사용된다는 의미입니다. 이미지 획득 중에 정확히 이 픽셀들의 강도 값은 주변 픽셀의 강도 값을 기반으로 교체됩니다.

결함 픽셀 보정 수행#

정보

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

pylon Viewer의 기능 트리 또는 pylon API를 사용하여 boost V 카메라에서 결함 픽셀 보정을 수행하십시오.

boost V 카메라에서 결함 픽셀 보정을 수행하려면:

  1. 파라미터를 원하는 BslStaticDefectPixelCorrectionMode 파라미터를 원하는 보정 모드로 설정합니다:

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

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

정보

  • 다음 항목을 사용할 수 있습니다. BslStaticDefectPixelCorrectionCount 파라미터를 사용하여 현재 보정되고 있는 이미지 픽셀 수를 확인합니다.
  • 다음을 설정할 수 있습니다. BslStaticDefectPixelCorrectionTestMode 파라메터 On 보정된 모든 픽셀을 완전한 흰색으로 설정합니다. 이는 이미지에서 보정되는 픽셀을 찾는 데 도움이 됩니다.

결함 픽셀 좌표 제거#

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

그러나 "User" 보정 모드에서 입력된 좌표와 같이 사용자가 지정한 결함 화소 좌표를 삭제할 수 있습니다(위 참조). 방법은 다음과 같습니다:

  • 단일 사용자 지정 결함 화소 좌표를 삭제하려면:

    1. 파라미터를 원하는 BslStaticDefectPixelCorrectionYCoordinate 파라미터를 다음으로 설정: y 결함 화소의 좌표.
    2. 파라미터를 원하는 BslStaticDefectPixelCorrectionXSelector 결함 화소의 x 좌표를 유지하는 항목에 대한 매개변수(예: X0.
    3. 파라미터를 원하는 BslStaticDefectPixelCorrectionXCoordinate 매개변수를 0xFFFF로 설정합니다.
    4. 다음을 실행합니다. BslStaticDefectPixelCorrectionSave 명령을 사용하여 변경 사항을 플래시 메모리에 저장합니다.
  • 모든 사용자 지정 결함 화소 좌표를 삭제하려면:

    1. 다음을 실행합니다. BslStaticDefectPixelCorrectionClearAll 명령입니다. 이는 모든 BslStaticDefectPixelCorrectionXCoordinate 매개변수 값을 0xFFFF로 설정합니다.
    2. 다음을 실행합니다. BslStaticDefectPixelCorrectionSave 명령을 사용하여 변경 사항을 플래시 메모리에 저장합니다.

dart 및 pulse 카메라#

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

  • 정적 화소 보정은 완전히 검은색 화소를 포함하여 주변 화소보다 강도 값이 현저히 낮은 화소를 보정합니다.
  • 동적 화소 보정은 완전히 흰색 화소를 포함하여 주변 화소보다 강도 값이 현저히 높은 화소를 보정합니다. 내부 임계값은 화소가 "핫 픽셀"로 감지되는 시점을 정의합니다. "동적"은 취득된 각 이미지에 대해 결함 화소 보정이 개별적으로 계산됨을 의미합니다.

Defect Pixel Correction 모드 설정#

결함 화소 보정 모드를 설정하려면 다음을 설정하십시오. BslDefectPixelCorrectionMode 파라미터를 설정하십시오:

  • On (기본값): 카메라는 다음을 수행합니다. 정적 및 동적 화소 보정.
  • StaticOnly: 카메라는 다음을 수행합니다. 정적 화소 보정만 수행합니다.
  • Off: 카메라는 다음을 수행하지 않습니다. 않습니다 화소 보정을 수행합니다.

샘플 코드#

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를 사용하여 파라미터를 손쉽게 설정할 수도 있습니다.