Aktivieren Sie JavaScript, um die Website anzuzeigen.

IDS Software Suite 4.95.1

Windows_Logo
Linux_Logo

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

Beispiel 1

/* 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));

Beispiel 2

/* 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));

Beispiel 3

/* 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));

Beispiel 4

/* 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

Abb. 201: Resultierende LUT-Kurve

Beispiel 5

/* 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));

Beispiel 6

/* 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));
}

Beispiel 7

/* 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);