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인 결함 화소 항목
pylon Viewer를 사용하여 User Defect Pixel Correction 파일을 업로드하려면:
- pylon Viewer의 Camera 메뉴에서 File Access를 클릭합니다.
- Camera File 드롭다운 상자에서 User Defect Pixel Correction을 선택합니다.
User Defect Pixel Correction 항목이 없으면 카메라에서 보정 파일 업로드를 지원하지 않는 것입니다. - Upload를 클릭하고 업로드하려는 파일로 이동합니다.
- Open을 클릭합니다.
업로드 후 User Defect Pixel Correction 파일을 적용하려면 다음을 수행하고 BslStaticDefectPixelCorrectionMode 파라미터가 다음으로 설정된 경우에만 Light Control 기능과 함께 사용할 수 있음을 명시했습니다. User 다음을 실행하십시오. BslStaticDefectPixelCorrectionReload command.
Defect Pixel Correction 파일 다운로드#
예를 들어 팩토리 보정 파일과 같은 Defect Pixel Correction 파일을 다운로드하는 것은 다운로드한 파일에 사용자가 직접 측정한 결함 화소를 추가하려는 경우에 유용할 수 있습니다. 결함 화소 항목의 전체 목록을 새로운 사용자 보정 파일에 저장할 수 있습니다.
pylon Viewer를 사용하여 Defect Pixel Correction 파일을 다운로드하려면:
- pylon Viewer의 Camera 메뉴에서 File Access를 클릭합니다.
- Camera File 드롭다운 상자에서 다운로드할 파일에 따라 Static Factory Defect Pixel Correction 또는 Static User Defect Pixel Correction을 선택합니다.
적절한 항목이 없으면 카메라에서 파일 다운로드를 지원하지 않는 것입니다. - Download를 클릭하고 파일을 저장할 디렉토리로 이동한 후 원하는 파일 이름을 입력합니다.
- 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 카메라에서 결함 픽셀 보정을 수행하려면:
-
파라미터를 원하는
BslStaticDefectPixelCorrectionMode파라미터를 원하는 보정 모드로 설정합니다:Factory: 공장 출고 시 파일에 저장된 좌표를 가진 결함 픽셀만 보정됩니다. 공장 출고 시 파일은 카메라 생산 중에 생성되며 변경할 수 없습니다.User: 사용자 지정 결함 픽셀 좌표를 지정할 수 있습니다.Off: 카메라는 다음을 수행하지 않습니다. 않습니다 정적 결함 화소 보정을 수행합니다.
-
선택한 경우
User:- 이미지에서 픽셀 오류를 찾아 결함 픽셀의 x 및 y 좌표를 기록합니다.
- 파라미터를 원하는
BslStaticDefectPixelCorrectionYCoordinate파라미터를 다음으로 설정: y 첫 번째 결함 픽셀의 좌표입니다. - 파라미터를 원하는
BslStaticDefectPixelCorrectionXSelector파라메터X0. - 파라미터를 원하는
BslStaticDefectPixelCorrectionXCoordinate파라미터를 다음으로 설정: x 첫 번째 결함 픽셀의 좌표입니다. - y 좌표는 같지만 x 좌표가 다른 다른 결함 픽셀이 있는 경우, 다음으로 설정합니다.
BslStaticDefectPixelCorrectionXSelector파라미터를 다음 항목으로 설정합니다(예:X1) 및 다음 x 좌표를 입력합니다. - 다른 모든 픽셀 오류에 대해 b~e 단계를 반복합니다.
- 다음을 실행합니다.
BslStaticDefectPixelCorrectionSave명령을 사용하여 변경 사항을 플래시 메모리에 저장합니다.
정보
- 다음 항목을 사용할 수 있습니다.
BslStaticDefectPixelCorrectionCount파라미터를 사용하여 현재 보정되고 있는 이미지 픽셀 수를 확인합니다. - 다음을 설정할 수 있습니다.
BslStaticDefectPixelCorrectionTestMode파라메터On보정된 모든 픽셀을 완전한 흰색으로 설정합니다. 이는 이미지에서 보정되는 픽셀을 찾는 데 도움이 됩니다.
결함 픽셀 좌표 제거#
공장 출고 시 파일의 픽셀 좌표는 제거할 수 없습니다.
그러나 "User" 보정 모드에서 입력된 좌표와 같이 사용자가 지정한 결함 화소 좌표를 삭제할 수 있습니다(위 참조). 방법은 다음과 같습니다:
-
단일 사용자 지정 결함 화소 좌표를 삭제하려면:
- 파라미터를 원하는
BslStaticDefectPixelCorrectionYCoordinate파라미터를 다음으로 설정: y 결함 화소의 좌표. - 파라미터를 원하는
BslStaticDefectPixelCorrectionXSelector결함 화소의 x 좌표를 유지하는 항목에 대한 매개변수(예:X0. - 파라미터를 원하는
BslStaticDefectPixelCorrectionXCoordinate매개변수를 0xFFFF로 설정합니다. - 다음을 실행합니다.
BslStaticDefectPixelCorrectionSave명령을 사용하여 변경 사항을 플래시 메모리에 저장합니다.
- 파라미터를 원하는
-
모든 사용자 지정 결함 화소 좌표를 삭제하려면:
- 다음을 실행합니다.
BslStaticDefectPixelCorrectionClearAll명령입니다. 이는 모든BslStaticDefectPixelCorrectionXCoordinate매개변수 값을 0xFFFF로 설정합니다. - 다음을 실행합니다.
BslStaticDefectPixelCorrectionSave명령을 사용하여 변경 사항을 플래시 메모리에 저장합니다.
- 다음을 실행합니다.
dart 및 pulse 카메라#
Basler dart 및 pulse 카메라는 두 가지 유형의 화소 보정을 수행할 수 있습니다:
- 정적 화소 보정은 완전히 검은색 화소를 포함하여 주변 화소보다 강도 값이 현저히 낮은 화소를 보정합니다.
- 동적 화소 보정은 완전히 흰색 화소를 포함하여 주변 화소보다 강도 값이 현저히 높은 화소를 보정합니다. 내부 임계값은 화소가 "핫 픽셀"로 감지되는 시점을 정의합니다. "동적"은 취득된 각 이미지에 대해 결함 화소 보정이 개별적으로 계산됨을 의미합니다.
Defect Pixel Correction 모드 설정#
결함 화소 보정 모드를 설정하려면 다음을 설정하십시오. BslDefectPixelCorrectionMode 파라미터를 설정하십시오:
On(기본값): 카메라는 다음을 수행합니다. 정적 및 동적 화소 보정.StaticOnly: 카메라는 다음을 수행합니다. 정적 화소 보정만 수행합니다.Off: 카메라는 다음을 수행하지 않습니다. 않습니다 화소 보정을 수행합니다.
샘플 코드#
ace 2 R/X, boost R 및 dart M 카메라#
/* 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);
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 카메라#
/* 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);
pylon Viewer를 사용하여 파라미터를 손쉽게 설정할 수도 있습니다.