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
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 로 설정된 경우 User 그런 다음 다음을 실행합니다. BslStaticDefectPixelCorrectionReload 명령입니다.
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 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을 수행하려면:
-
다음 값 중 하나로
BslStaticDefectPixelCorrectionModeparameter를 원하는 correction mode로 설정합니다:Factory: 공장 파일에 좌표가 저장된 결함 픽셀만 보정됩니다. 공장 파일은 카메라 생산 중에 생성되며 변경할 수 없습니다.User: 사용자 지정 결함 픽셀 좌표를 지정할 수 있습니다.Off: 카메라가 포함되지 정적 결함 픽셀 보정을 수행합니다.
-
선택한 경우
User:- 이미지에서 픽셀 오류를 찾아 결함 픽셀의 x 및 y 좌표를 기록합니다.
- 다음 값 중 하나로
BslStaticDefectPixelCorrectionYCoordinate파라미터를 y 첫 번째 결함 픽셀의 좌표입니다. - 다음 값 중 하나로
BslStaticDefectPixelCorrectionXSelector매개변수:X0. - 다음 값 중 하나로
BslStaticDefectPixelCorrectionXCoordinate파라미터를 x 첫 번째 결함 픽셀의 좌표입니다. - y 좌표는 같지만 x 좌표가 다른 다른 결함 픽셀이 있는 경우,
BslStaticDefectPixelCorrectionXSelectorparameter를 다음 항목(예:X1)으로 설정하고 다음 x 좌표를 입력합니다. - 다른 모든 픽셀 오류에 대해 b~e 단계를 반복합니다.
- 다음을 실행합니다.
BslStaticDefectPixelCorrectionSavecommand를 사용하여 변경 사항을 flash memory에 저장합니다.
정보
- 이 값 및 기타 특정 구성 설정에 기반하여 카메라에서 달성할 수 있는 프레임 레이트를 평가하기 위해
BslStaticDefectPixelCorrectionCountparameter를 사용하여 현재 보정되고 있는 이미지 픽셀 수를 확인합니다. - 다음을 설정할 수 있습니다.
BslStaticDefectPixelCorrectionTestMode매개변수:On을(를) 사용하여 모든 보정된 픽셀을 완전히 흰색으로 설정합니다. 이는 이미지에서 보정되는 픽셀을 찾는 데 도움이 됩니다.
결함 픽셀 좌표 제거하기#
공장 파일의 픽셀 좌표는 제거할 수 없습니다.
그러나 사용자 지정 결함 픽셀 좌표, 즉 "User" correction mode에서 입력한 좌표는 제거할 수 있습니다(위 참조). 방법은 다음과 같습니다:
-
단일 사용자 지정 결함 픽셀 좌표를 제거하려면:
- 다음 값 중 하나로
BslStaticDefectPixelCorrectionYCoordinate파라미터를 y 결함 픽셀의 좌표입니다. - 다음 값 중 하나로
BslStaticDefectPixelCorrectionXSelectorparameter를 결함 픽셀의 x 좌표가 포함된 항목으로 설정합니다(예:X0. - 다음 값 중 하나로
BslStaticDefectPixelCorrectionXCoordinateparameter를 0xFFFF로 설정합니다. - 다음을 실행합니다.
BslStaticDefectPixelCorrectionSavecommand를 사용하여 변경 사항을 flash memory에 저장합니다.
- 다음 값 중 하나로
-
모든 사용자 지정 결함 픽셀 좌표를 제거하려면:
- 다음을 실행합니다.
BslStaticDefectPixelCorrectionClearAllcommand. 이렇게 하면 모든BslStaticDefectPixelCorrectionXCoordinateparameter 값이 0xFFFF로 설정됩니다. - 다음을 실행합니다.
BslStaticDefectPixelCorrectionSavecommand를 사용하여 변경 사항을 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 카메라#
/* 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를 사용하여 파라미터를 손쉽게 설정할 수 있습니다.