Nikon Kamera - Nikon Camera
Nikon Kamera
Nikon Kamera Dateiformat
Nikon verwendet für seine Kameras das sogenannte Nikon Electronic File Format (*.nef). Das *.nef Dateiformat wird von diversen Anwendungen unterstützt (z.B. Photoshop). Falls man aber eine große Anzahl Dateien verarbeiten will ist dieser Weg ungeeignet. Glücklicherweise bietet Nikon auf seiner Webseite die Möglichkeit an die Software Developtment Kit (SDK) herunterzuladen. Die in diesem Paket enthaltene Programmbibliothek (dll) exportiert funktionen, die die Verarbeitung von *.nef Dateien erlaubt.
Ein Beispiel-Code mit ausführlichen Kommentaren für die Verwendung der SDK in C# befindet sich auf dem Röntgenoptik-Sharepoint. Zugriff auf diese Dateien hat jedes Mitglied der Röntgenoptik Gruppe.
Grundsätzliche Funktionsweise:
- Die von Nikon bereitgestellte Bibliothek exportiert eine einzelne Eingangsfunktion
- Dieser Eintrittsfunktion werden zwei Parameter übergeben
- Hexadezimale Kennzfiffer: Zur Defintion welche Funktion der Bibliothek aufgerufen werden soll (Bsp.: Vorschaubilder abrufen, Bildinformationen liefern,....)
- C-Struktur: Diese enthält je nach aufgerufenen Befehl die notwendigen Parameter für den Befehlt (Bsp.: Pfad zur *.nef Datei)
- Es besteht ein festgelegter Ablauf, wie schlussendlich die Daten aus der *.nef Datei abgerufen werden können:
- Öffnen der Bibliothek
- Starten einer Session (wobei eine Session das lesen von einer *.nef Datei ist)
- Bildinformationen abrufen (z.B. Höhe, Breite, Bit-Tiefe)
- Dateiinformationen abrufen (welche Codierung haben die Bildinformationen: jpeg, tiff, ...)
- Vorschaubilder abrufen (optional): Jede *.nef Datei speichert gleichzeitig drei Vorschaubilder in unterschiedlichen Größen in jpgeg Komprimierung. Die Bibliothek liefert die Bilddaten in einem ByteArray, das direkt in eine Datei geschrieben werden kann (24 bit RGB, little-Endian).
- Bild abrufen (optional): ruft die eigentlichen Bildinformationen aus der *.nef Datei ab. Die Bibliothek liefert hier ebenfalls die Bilddaten in einem ByteArray, das direkt in eine Datei geschrieben werden kann (48 bit RGB, little-Endian).
- Beenden der Session (n.B. wenn die Session nicht geschlossen wird, kann die Bibliothek nicht erneut angesprochen werden, das heißt es kann keine weitere *.nef Datei bearbeitet werden)
- Schließen der Bibliothek
Anmerkungen:
- In den *.nef Dateien sind immer vorschaubilder in Unterschiedlichen Auflösungen enthalten (*.jpg Kompression). Diese können mit der SDK ebenso extrahiert werden. Die erhaltenen Daten sind im 24 bit RGB (8 bit Rot, 8 bit Grün, 8 bit Blau) little-Endian Format und können z.B. mit ImageJ über File->Import->Raw mit eben erwähnten Einstellungen importiert werden.
- Die eigentlichen Bildinformationen liegen im 48 bit RGB (16 bit Rot, 16 bit Grün, 16 Bit Blau) little-Endian Format vor. ImageJ kann dieses Format erstmal nicht lesen. Man kann sich jedoch z.B. mit Matlab behelfen:
function displayNEF(width, height)
% open file
fileHandle = fopen('FullPic_4928_3280.raw');
% read in 16 bit values in little-Endian
test = fread(fileHandle,inf,'*uint16','l');
% get first (=red) layer of image and reshape to a matrix with |height|
% rows and |width| columns
I1 = reshape(test(1:3:end),height,width);
% display red layer
figure, imagesc(I1), colormap('gray');
% close file
fclose(fileHandle);
end
- Die Dokumentation und der Bedienkomfort der NIKON SDK ist nicht sehr hoch. Es lohnt sich in den oben erwähnten Beispiel-Code auf dem Röntgenoptik-Sharepoint zu schauen.
Nikon Kamera Ansteuerung
Nikon bietet zur Ansteuerung seiner Kameras eine SDK an. Um die SDK herunterzuladen muss man sich mit einer e-mail Adresse registrieren. Es ist zu Beachten, dass neben der eigentlichen SDK zusätzlich noch eine passende Gerätedatei (das heißt für jeden Kameratyp eine Datei z.B. Nikon D4 -> Typ0007.md3) zusätzlich notwendig ist. Die Kommunikation über diese Bibliothek erfolgt ähnlich der für die der *.nef SDK.
Da die Kommunikation über diese Schnittstelle jedoch umständlich ist, kann man sich (zumindest mit Anwendungen, die im .Net Standard geschrieben wurden) mit einer Wrapper Bibliothek behelfen, die wesentlich komfortabler zu bedienen ist. Diese Wrapper Bibliothek wird auf sourceforge gehostet und kann in Visual Studio Problemlos in das Projekt eingebunden werden. Beispiel Anwendungen liegen ebenfalls vor und die Wrapper Bibliothek deckt praktisch alle Funktionen ab, die die Kamera zur Verfügung stellt.
Leider scheint die von Nikon bereitgestellte SDK Bibliothek einen Fehler zu enthalten, so dass es vorkommen kann dass die Bibliothek im Speicher hängt und nicht mehr reagiert. In diesem Fall hilft leider nur neu zu starten.
Es exisitieren zwei Anwendungen zur Ansteuerung der Kamera, die in C# geschrieben wurden. Diese sind ebenfalls auf dem Röntgenoptik-Sharepoint verfügbar. Die eine Anwendung dient als Kommandozeilen-Anwendung zur Ansteuerung der Kamera über ein Skript, die zweite Anwendung bietet in einer Benutzeroberfläche die Möglichkeit eines Live-Bildes sowie diverser Einstellmöglichkeiten. Alle Einstellmöglichkeiten der Kommandozoleineanwendung sind auch in der Benutzeroberfläche vorhanden.
Die Kommandozeilenversion zeigt eine Hilfe aller möglichen Parameter an, wenn die Anwendung ohne Argumente in der Kommandozeile aufgerufen wird. Für die GUI Version wurde eine Hilfe geschrieben, die im zip Archiv auf dem Sharepoint enthalten ist. Für beide Anwendungen ist es notwendig, dass die für die Kamera passende *.md3 Dateien im gleichen Verzeichnis wie die Anwendung enthalten ist.