![]() |
![]() |
|---|---|
USB 2.0 USB 3.x GigE |
USB 2.0 USB 3.x GigE |
Syntax
INT is_LUT(HIDS hCam, UINT nCommand, void* pParam, UINT cbSizeOfParams)
Beschreibung
Mit is_LUT() aktivieren Sie eine Hardware- oder Software-LUT (Lookup-Tabelle) für uEye Kameras, die in der Kamera auf das Bild angewendet wird. Eine Lookup-Tabelle (LUT) für die uEye Kamera enthält Werte für die Veränderung der Bildhelligkeits- und Bildkontrastparameter. Bei Verwendung einer LUT wird jeder Helligkeitswert des Bildes durch einen in der Tabelle hinterlegten Wert ersetzt. Typische Anwendungen sind Verstärkung des Bildkontrasts oder der Gamma-Kurve.
Es steht eine Reihe vordefinierter LUTs zur Verfügung. Alternativ können Sie eine eigene LUT definieren. Eine LUT besteht aus 32 Abschnitten, die jeweils durch einen Anfangs- und einen Endpunkt definiert werden. Die Werte für die Anfangs- und Endpunkte müssen zwischen 0.0 und 1.0 liegen. Wenn Sie eine lineare LUT erzeugen möchten, müssen die Anfangs- und Endpunkte der aufeinanderfolgenden Abschnitte dieselben Werte haben.
Zudem können Sie mit der Funktion eine LUT definieren, ohne diese gleichzeitig zu aktivieren. Des Weiteren können Sie die aktuelle LUT der Kamera auslesen.
Ü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 cbSizeOfParam angegeben.
Für weitere Informationen siehe auch das Kapitel Kameraeinstellungen: LUT.
LUT und automatische Belichtungzeit (AES)/Verstärkung (AGC)
Wenn Sie die LUT in Verbindung mit der automatischen Belichtungszeit (AES) oder Verstärkung (AGC) verwenden, können unerwünschte Nebeneffekte auftreten. Wenn Sie z. B. eine negative LUT verwenden (die Helligkeit im Bild also invertieren), aber die automatische Regelung gleichzeitig das Bild aufhellt. Deaktivieren Sie daher die automatische Regelung, wenn Sie mit einer nicht stetigen (Sprünge) oder nicht komplett positiven (Steigung) LUT arbeiten.
Übergabeparameter
hCam |
Handle auf Kamera |
pParam |
Zeiger auf Funktionsparameter, der abhängig von nCommand unterschiedlich belegt ist. |
cbSizeOfParam |
Größe des Speicherbereichs in Byte, auf den pParam verweist. |
Inhalt der Struktur IS_LUT_CONFIGURATION_PRESET_64
IS_LUT_PRESET |
predefinedLutID |
ID der vordefinierten LUT |
IS_LUT_CONFIGURATION_64 |
lutConfiguration |
Vordefinierte LUT |
Inhalt der Struktur IS_LUT_CONFIGURATION_64
DOUBLE |
dblValues[3][IS_LUT_64] |
LUT mit 64 Kniepunkten. Dies sind 32 Abschnitte mit je einem Anfangs- und einem Endpunkt. |
BOOL |
bAllChannelsAreEqual |
Bei TRUE wird die gleiche LUT auf alle 3 Kanäle angewendet. |
Inhalt der Struktur IS_LUT_STATE
BOOL |
bLUTEnabled |
LUT ist aktiviert |
INT |
nLUTStateID |
ID der LUT-Statusinformation |
INT |
nLUTModeID |
ID des LUT-Mode |
INT |
nLUTBits |
Verwendete Bits der LUT |
Inhalte der Struktur IS_LUT_SUPPORT_INFO
BOOL |
bSupportLUTHardware |
Hardware-LUT wird unterstützt |
BOOL |
bSupportLUTSoftware |
Software-LUT wird unterstützt |
INT |
nBitsHardware |
Verwendete Bits der Hardware-LUT |
INT |
nBitsSoftware |
Verwendete Bits der Software-LUT |
INT |
nChannelsHardware |
Unterstützte Kanäle der Hardware-LUT |
INT |
nChannelsSoftware |
Unterstützte Kanäle der Software-LUT |
Rückgabewerte
IS_FILE_READ_OPEN_ERROR |
Die Datei kann nicht geöffnet werden. |
IS_FILE_WRITE_OPEN_ERROR |
Datei kann nicht zum Schreiben oder Lesen geöffnet werden. |
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_NO_SUCCESS |
Allgemeine Fehlermeldung |
IS_NOT_SUPPORTED |
Das verwendete Kameramodell unterstützt diese Funktion oder Einstellung nicht. |
IS_SUCCESS |
Funktion erfolgreich |
/* Zuletzt gesetzte LUT aktivieren */
IS_LUT_ENABLED_STATE nLutEnabled = IS_LUT_ENABLED;
INT nRet = is_LUT(hCam, IS_LUT_CMD_SET_ENABLED, (void*) &nLutEnabled, sizeof(nLutEnabled));
/* Erzwinge, dass LUT und Gamma in Software eingerechnet werden (Altes Verhalten für Gamma bei USB3 Kameras) */
IS_LUT_MODE nLutMode = IS_LUT_MODE_ID_FORCE_SOFTWARE;
INT nRet = is_LUT(hCam, IS_LUT_CMD_SET_MODE, &nLutMode , sizeof(nLutMode));
/* Lese aktuellen Status der LUT */
IS_LUT_STATE lutState;
INT nRet = is_LUT(hCam, IS_LUT_CMD_GET_STATE, (void*) &lutState, sizeof(lutState));
/* Lese die aktuelle LUT Support Information */
IS_LUT_SUPPORT_INFO lutSupportInfo;
nRet = is_LUT(hCam, IS_LUT_CMD_GET_SUPPORT_INFO, (void*) &lutSupportInfo, sizeof(lutSupportInfo));
/* Setze Sigmoidfunktion als benutzerdefinierte LUT (skaliert in x von [-6.0,6.0] nach [0.0,1.0] */
/* Sigmodifunktion ist S(x) = 1 / (1 + e^(-x)) */
//#include <cmath>
IS_LUT_CONFIGURATION_64 userLUT;
userLUT.bAllChannelsAreEqual = true;
userLUT.dblValues[0][0] = 0.0; /* Setze Startwert auf 0.0 */
for (INT i = 0; i <63; i += 2)
{
/* Startpunkt des nächsten linearen Apporiximationssegments soll gleich dem Endpunkt des vorherigen Segmentes sein. */
if (i> 0)
{
userLUT.dblValues[0][i] = userLUT.dblValues[0][i-1];
}
/* Berechne den verwendeten Wert skaliert im Intervall [0.0, 1.0] */
double dXPosWideRange = (((i + 1) / 64.0) - 0.5) * 12.0; /* Aktuelle Position im Intervall [0.0,1.0] gestreckt auf [-6.0,6.0] */
userLUT.dblValues[0][i+1] = 1.0 / (1.0 + std::exp(-dXPosWideRange)); /* #include <cmath> wird hier benötigt */
}
userLUT.dblValues[0][63] = 1.0; /* Setze Endwert auf 1.0 */
/* Setze die berechnete LUT */
INT nRet = is_LUT(hCam, IS_LUT_CMD_SET_USER_LUT, (void*) &userLUT, sizeof(userLUT));

Abb. 201: Resultierende LUT-Kurve
/* Auslesen der gesetzten LUT */
/* Benutzerdefinierte LUT (ohne eingerechnetes Gamma) */
IS_LUT_CONFIGURATION_64 userLUT;
INT nRet = is_LUT(hCam, IS_LUT_CMD_GET_USER_LUT, (void*) &userLUT, sizeof(userLUT));
/* Komplette LUT (mit eingerechnetem Gamma) */
IS_LUT_CONFIGURATION_64 completeLUT;
nRet = is_LUT(hCam, IS_LUT_CMD_GET_COMPLETE_LUT, (void*) &completeLUT, sizeof(completeLUT));
/* Vordefinierte LUT "Glow1" setzen */
/* Zuerst wird GLOW1 geladen */
IS_LUT_CONFIGURATION_PRESET_64 presetLUT;
presetLUT.predefinedLutID = IS_LUT_PRESET_ID_GLOW1;
INT nRet = is_LUT(hCam, IS_LUT_CMD_GET_PRESET_LUT, (void*) &presetLUT, sizeof(presetLUT));
/* Anschließend kann die LUT "Glow1" gesetzt werden */
if (IS_SUCCESS == nRet)
{
nRet = is_LUT(hCam, IS_LUT_CMD_SET_USER_LUT, (void*) &presetLUT, sizeof(presetLUT));
}
/* Lade und setze LUT aus Datei "lutFile.xml" */
wchar_t* pFilename = L"lutFile.xml";
INT nRet = is_LUT(hCam, IS_LUT_CMD_LOAD_FILE, (void*) pFilename , NULL);
/* Speichere gesetzte LUT in Datei "lutFile2.xml" */
wchar_t* pFilename2 = L"lutFile2.xml";
nRet = is_LUT(hCam, IS_LUT_CMD_SAVE_FILE, (void*) pFilename2 , NULL);