![]() |
![]() |
|---|---|
USB 2.0 USB 3.x GigE |
USB 2.0 USB 3.x GigE |
Syntax
INT is_HotPixel (HIDS hCam, UINT nCommand, void* pParam, UINT nSizeOfParam)
Beschreibung
is_HotPixel() konfiguriert die Korrektur der Sensor-Hotpixel. Die Korrektur wird softwareseitig durchgeführt, die Hotpixelliste ist dabei im nicht-flüchtigen Kameraspeicher hinterlegt. Manche Sensormodelle bieten auch eine Korrektur der Hotpixel direkt im Sensor. Für weitere Informationen zur Hotpixelkorrektur siehe Grundlagen: Hotpixel.
Es gibt die folgenden, unterschiedlichen Hotpixellisten:
•*_SOFTWARE_USER_LIST: benutzerdefinierte Hotpixelliste im Computer
•*_CAMERA_FACTORY_LIST: werkseitige Hotpixelliste im nicht-flüchtigen Kameraspeicher
•*_CAMERA_USER_LIST: benutzerdefinierte Hotpixelliste im nicht-flüchtigen Kameraspeicher
•*_MERGED_CAMERA_LIST: werkseitige und benutzerdefinierte Hotpixelliste im nicht-flüchtigen Kameraspeicher (*_CAMERA_FACTORY_LIST und *_CAMERA_USER_LIST)
|
Diese Funktion wird von folgenden Kameramodellen nicht unterstützt: •UI-1007XS |
|
Die Korrektur funktioniert nicht bei eingeschaltetem Subsampling und bei Binning-Faktoren größer 2x. |
Adaptive Hotpixelkorrektur
Mit Version 4.82 wird zusätzlich die adaptive Hotpixelkorrektur eingeführt. Die adaptive Hotpixelkorrektur kann im laufenden Bild Hotpixel dynamisch erkennen und adaptiv korrigieren. So können Hotpixel noch besser korrigiert werden, die z. B. durch eine erhöhte Temperatur entstehen. Zudem kann die adaptive Hotpixelkorrektur direkt im Live-Betrieb durchgeführt werden und erlaubt so eine bestmögliche Optimierung auf die Applikationsbedingungen.
|
Hinweis zur adaptiven Hotpixelkorrektur •Die adaptive Hotpixelkorrektur kann zusammen mit Subsampling, Binning oder Scaler verwendet werden. •Die adaptive Hotpixelkorrektur kann derzeit nur mit Software- oder RAW-Farbformaten verwendet werden. |
Über den Übergabeparameter nCommand wird dabei der Funktionsmodus gewählt. Der Übergabeparameter pParam ist abhängig vom Funktionsmodus unterschiedlich belegt; bei Funktionen zum Setzen oder Rücklesen eines Wertes enthält pParam einen Zeiger auf eine Variable vom Typ UINT. Die Größe des Speicherbereichs, auf den pParam verweist, wird im Übergabeparameter nSizeOfParam angegeben.
Übergabeparameter
hCam |
Handle auf Kamera |
pParam |
Zeiger auf Funktionsparameter, der abhängig von nCommand unterschiedlich belegt ist. |
nSizeOfParam |
Größe des Speicherbereichs in Byte, auf den pParam verweist. |
Modi der adaptiven Hotpixelkorrektur
IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_ONCE |
Die Hotpixel werden einmal ermittelt und in einer Liste hinterlegt. Die adaptive Hotpixelkorrektur arbeitet mit dieser Liste. Dieser Modus ist passend für alle Anwendungen mit statischen Lichtverhältnissen, die keine dynamische Anpassung benötigen. |
IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_DYNAMIC |
Die Hotpixelliste wird dynamisch mit jedem Bild ermittelt. Dadurch kann auf sich ändernde Lichtverhältnisse besser reagiert werden. In diesem Modus kann unter Umständen nicht die volle Bildrate (Framerate) erzielt werden. |
IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_ONCE_CLUSTER |
Zusätzlich zu den oberen Modi kann eine adaptive Clusterkorrektur zugeschaltet werden, die auch zwei oder mehr benachbarte Hotpixel korrigiert. Die Hotpixel-Cluster werden einmalig ermittelt und in einer Clusterliste hinterlegt. Diese Clusterliste ist unabhängig von der Hotpixelliste. Beachten Sie, dass die Clusterdetektion auch größere Bildinhalte als Cluster erkennen könnte. Kalibrieren Sie in diesem Fall die Kamera vor einem kontrastärmeren Hintergrund oder dunkeln Sie die Kamera vor der Kalibrierung ab. |
IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_DYNAMIC_CLUSTER |
Die Clusterliste wird dynamisch mit jedem Bild ermittelt. Dadurch kann auf sich ändernde Lichtverhältnisse besser reagiert werden. In diesem Modus kann unter Umständen nicht die volle Bildrate (Framerate) erzielt werden. |
Folgende Kombinationen aus adaptiver Hotpixel- und Clusterkorrektur sind zulässig:
•IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_ONCE
•IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_DYNAMIC
•IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_ONCE | IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_ONCE_CLUSTER
•IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_DYNAMIC | IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_ONCE_CLUSTER
•IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_DYNAMIC | IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_DYNAMIC_CLUSTER
|
Hinweis zur adaptiven Hotpixelkorrektur Werden die Hotpixel einmalig ermittelt, sollte für die Detektion LUT, Gamma und RGB-Verstärkung deaktiviert werden. Bei der dynamischen Ermittlung kann die Verwendung von LUT, Gamma und RGB-Verstärkung dazu führen, dass zu viele Hotpixel ermittelt und korrigiert werden. Dies kann eine hohen CPU-Last verursachen. |
Rückgabewerte
IS_CANT_COMMUNICATE_WITH_DRIVER |
Kommunikation mit dem Kameratreiber schlug fehl, weil kein Treiber geladen ist. |
IS_CANT_OPEN_DEVICE |
Ein Versuch die Kamera zu öffnen schlug fehl (Kamera nicht vorhanden oder Fehler beim Initialisieren). |
IS_INVALID_CAMERA_TYPE |
Kameratyp der .ini-Datei stimmt nicht mit dem aktuellen Kameramodell überein. |
IS_INVALID_CAMERA_HANDLE |
Ungültiges Kamera-Handle |
IS_INVALID_PARAMETER |
Einer der übergebenen Parameter ist außerhalb des gültigen Bereichs, oder für diesen Sensor nicht unterstützt, bzw. in diesem Modus nicht zugänglich. |
IS_IO_REQUEST_FAILED |
Eine IO Anforderung des uEye Treibers schlug fehl. Eventuell passen die Versionen der Dateien ueye_api.dll (API) und ueye_usb.sys bzw. ueye_eth.sys (Treiber) nicht zusammen. |
IS_NO_SUCCESS |
Allgemeine Fehlermeldung |
IS_NOT_CALIBRATED |
Die Kamera enthält keine Kalibrierungsdaten. |
IS_NOT_SUPPORTED |
Das verwendete Kameramodell unterstützt diese Funktion oder Einstellung nicht. |
IS_NULL_POINTER |
Ungültiges Array |
IS_OUT_OF_MEMORY |
Es konnte kein Speicher alloziert werden. |
IS_SUCCESS |
Funktion erfolgreich |
IS_TIMED_OUT |
Ein Timeout trat auf. Eine Bildaufnahme konnte nicht in der vorgeschriebenen Zeit beendet werden. |
// Korrektur aktivieren/deaktivieren
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_DISABLE_CORRECTION, NULL, NULL);
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ENABLE_CAMERA_CORRECTION, NULL, NULL);
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ENABLE_SOFTWARE_USER_CORRECTION, NULL, NULL);
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ENABLE_SENSOR_CORRECTION, NULL, NULL);
nRet = is_HotPixel(hCam, IS_HOTPIXEL_DISABLE_SENSOR_CORRECTION, NULL, NULL);
// Aktuellen Modus auslesen
INT nMode = 0;
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_GET_CORRECTION_MODE, (void*)&nMode, sizeof(nMode));
// Unterstützte Modi abfragen
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_GET_SUPPORTED_CORRECTION_MODES, (void*)&nMode, sizeof(nMode));
// Benutzerdefinierte Hotpixelliste auslesen
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_GET_SOFTWARE_USER_LIST_EXISTS, NULL, NULL);
if (nRet == IS_SUCCESS)
{
// Anzahl der Hotpixel in der benutzerdefinierten Liste abfragen
INT nNumber = 0;
nRet = is_HotPixel(hCam, IS_HOTPIXEL_GET_SOFTWARE_USER_LIST_NUMBER, (void*)&nNumber, sizeof(nNumber));
if (nRet == IS_SUCCESS)
{
// Ausreichend Speicher allozieren. Jeder Hotpixel benötigte einen zwei WORD großen
// Speicher.
// Je ein zusätzlicher Speicherplatz von einem WORD ist benötigt für die Nummerierung.
UINT nListSize = 1 + 2 * nNumber;
WORD *pList = new WORD[nListSize];
nRet = is_HotPixel(hCam, IS_HOTPIXEL_GET_SOFTWARE_USER_LIST, (void*)pList, nListSize * sizeof(WORD));
// Einen Wert ändern und die Liste speichern.
// In pList[0] muss die Nummer des Hotpixel liegen
pList[1] = 100;
nRet = is_HotPixel(hCam, IS_HOTPIXEL_SET_SOFTWARE_USER_LIST, (void*)pList, nListSize * sizeof(WORD));
// Nicht benötigte Liste löschen
delete [] pList;
}
}
// Benutzerdefinierte Hotpixel-Liste im Computer in eine Datei speichern
// Die Liste wird zuvor mit IS_HOTPIXEL_SET_SOFTWARE_USER_LIST erzeugt.
char File1[100];
ZeroMemory(File1, sizeof(File1));
strcpy(File1, "c:\\test.txt");
nRet = is_HotPixel(hCam, IS_HOTPIXEL_LOAD_SOFTWARE_USER_LIST, (void*)File1, 0);
nRet = is_HotPixel(hCam, IS_HOTPIXEL_SAVE_SOFTWARE_USER_LIST, (void*)File1, 0);
// Unicode
wchar_t File2[100];
ZeroMemory(File2, sizeof(File2));
wcscpy(File2, L"c:\\test.txt");
nRet = is_HotPixel(hCam, IS_HOTPIXEL_LOAD_SOFTWARE_USER_LIST_UNICODE, (void*)File2, 0);
nRet = is_HotPixel(hCam, IS_HOTPIXEL_SAVE_SOFTWARE_USER_LIST_UNICODE, (void*)File2, 0);
// Benutzerdefinierte Hotpixel-Liste im nicht-flüchtigen Kameraspeicher speichern
// Abfragen, wie viele Hotpixel maximal im nichtflüchtigen Kameraspeicher gespeichert werden können
INT nMaxNumber = 0;
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_GET_CAMERA_USER_LIST_MAX_NUMBER, (void*)&nMaxNumber, sizeof(nMaxNumber));
if (nRet == IS_SUCCESS)
{
// z. B. 24 Hotpixel in den Kameraspeicher schreiben
UINT nNumber = 24; // wobei nNumber <= nMaxNumber
// Ausreichend Speicher allozieren. Jeder Hotpixel benötigte einen zwei WORD großen Speicher.
// Je ein zusätzlicher Speicherplatz von einem WORD wird für die Nummerierung benötigt
UINT nListSize = 1 + 2 * nNumber;
WORD *pList = new WORD[nListSize];
pList[0] = nNumber;
pList[1 + 2 * 0] = 10; // Hotpixel 1 - x-Wert
pList[2 + 2 * 0] = 103; // Hotpixel 1 - y-Wert
pList[1 + 2 * 1] = 100; // Hotpixel 2 - x-Wert
pList[2 + 2 * 1] = 345; // Hotpixel 2 - y-Wert
pList[1 + 2 * 2] = 123; // Hotpixel 3 - x-Wert
pList[2 + 2 * 2] = 3; // Hotpixel 3 - y-Wert
pList[1 + 2 * 3] = 235; // Hotpixel 4 - x-Wert
pList[2 + 2 * 3] = 10; // Hotpixel 4 - y-Wert
pList[1 + 2 * 4] = 355; // Hotpixel 5 - x-Wert
pList[2 + 2 * 4] = 629; // Hotpixel 5 - y-Wert
...
pList[1 + 2 * 23] = 1205; // Hotpixel 24 - x-Wert
pList[2 + 2 * 23] = 553; // Hotpixel 24 - y-Wert
nRet = is_HotPixel(hCam, IS_HOTPIXEL_SET_CAMERA_USER_LIST, (void*)pList, nListSize * sizeof(WORD));
delete [] pList;
}
// Benutzerdefinierte Hotpixel-Liste löschen
nRet = is_HotPixel(hCam, IS_HOTPIXEL_DELETE_CAMERA_USER_LIST, NULL, NULL);
// Kombinierte Liste zurückgeben
INT nNumber = 0;
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_GET_MERGED_CAMERA_LIST_NUMBER,
(void*)&nNumber , sizeof(nNumber));
if (nRet == IS_SUCCESS)
{
// Ausreichend Speicher allozieren. Jeder Hotpixel benötigte einen zwei WORD großen
// Speicher.
// Je ein zusätzlicher Speicherplatz von einem WORD ist benötigt für die Nummerierung.
UINT nListSize = 1 + 2 * nNumber;
WORD *pList = new WORD[nListSize];
nRet = is_HotPixel(hCam, IS_HOTPIXEL_GET_MERGED_CAMERA_LIST, (void*)pList, nListSize * sizeof(WORD));
// Nicht benötigte Liste löschen
delete [] pList;
}
INT nEnable = 0;
// Gibt den aktuellen Status der adaptiven Hotpixelkorrektur zurück
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_GET_ENABLE, (void*)&nEnable, sizeof(nEnable));
if (IS_SUCCESS == nRet)
{
if (IS_HOTPIXEL_ADAPTIVE_CORRECTION_DISABLE == nEnable)
{
// Die adaptive Hotpixelkorrektur ist deaktiviert
}
else if (IS_HOTPIXEL_ADAPTIVE_CORRECTION_ENABLE == nEnable)
{
// Die adaptive Hotpixelkorrektur ist aktiviert
}
}
// Gibt die Standardeinstellung der adaptiven Hotpixelkorrektur zurück
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_GET_ENABLE_DEFAULT, (void*)&nEnable, sizeof(nEnable));
if (IS_SUCCESS == nRet)
{
// Aktiviert die adaptive Hotpixelkorrektur
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_SET_ENABLE, (void*)&nEnable, sizeof(nEnable));
}
INT nMode = 0;
// Gibt den aktuellen Modus der adaptiven Hotpixelkorrektur zurück
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_GET_MODE, (void*)&nMode, sizeof(nMode));
if (IS_SUCCESS == nRet)
{
if (IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_ONCE == nMode)
{
// Die adaptive Hotpixelkorrektur wird einmalig ausgeführt
}
else if (IS_HOTPIXEL_ADAPTIVE_CORRECTION_DETECT_DYNAMIC == nMode)
{
// Die adaptive Hotpixelkorrektur wird dynamisch ausgeführt
}
}
// Gibt die Standardeinstellung zurück
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_GET_MODE_DEFAULT, (void*)&nMode, sizeof(nMode));
if (IS_SUCCESS == nRet)
{
// Setzt eine neuen Modus für die adaptive Hotpixelkorrektur
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_SET_MODE, (void*)&nMode, sizeof(nMode));
}
INT nSensitivity = 0;
// Gibt den aktuellen Wert für die Empfindlichkeit zurück
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_GET_SENSITIVITY, (void*)&nSensitivity, sizeof(nSensitivity));
// Gibt den Standardwert für die Empfindlichkeit zurück
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_GET_SENSITIVITY_DEFAULT, (void*)&nSensitivity, sizeof(nSensitivity));
// Gibt den Minimalwert für die Empfindlichkeit zurück
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_GET_SENSITIVITY_MIN, (void*)&nSensitivity, sizeof(nSensitivity));
// Gibt den Maximalwert für die Empfindlichkeit zurück
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_GET_SENSITIVITY_MAX, (void*)&nSensitivity, sizeof(nSensitivity));
if (IS_SUCCESS == nRet)
{
// Setzt einen neuen Wert für die Empfindlichkeit
nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_SET_SENSITIVITY, (void*)&nSensitivity, sizeof(nSensitivity));
}
// Setzt die Liste der adaptiven Hotpixelkorrektur zurück
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_RESET_DETECTION, NULL, 0);
// Gibt die Anzahl der korrigierten Hotpixel des letzten Bildes zurück
INT nNumber = 0;
INT nRet = is_HotPixel(hCam, IS_HOTPIXEL_ADAPTIVE_CORRECTION_GET_NUMBER_DETECTED, (void*)&nNumber, sizeof(nNumber));