Home / LinuxUser / 2003 / 10 / Halbautomatische Nachbearbeitung von Fotoserien

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

„Klickbunt auf dem Server? Warum nicht, wenn's hilft!"
(179 Punkte bei 5 Stimmen)
Mit Openbox 3.5
(143 Punkte bei 5 Stimmen)
Bezahlstandard
(121 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Ordnung im digitalen Schuhkarton

Halbautomatische Nachbearbeitung von Fotoserien

Kein Widerspruch: Kommandozeile und Bilder

Bei grafischen Bildbearbeitungsprogrammen wendet man eine Bearbeitungsfunktionen in der Regel abhängig davon an, was man sieht. Das funktioniert gut mit wenigen Bildern; sollen jedoch hunderte von Dateien gleichermaßen bearbeitet werden, lässt sich das besser von der Kommandozeile aus bewerkstelligen. Noch erstaunlicher: Einige Aufgaben aus der visuellen Welt meistern zur Zeit überhaupt nur Kommandozeilenprogramme.

Zu den klassischen Einsatzzwecken für solche Filter-Tools zählt das Drehen von Fotos, die mit senkrecht gehaltener Kamera im Hochformat gemacht wurden. Selbst wenn die Kamera einen Orientierungssensor hat, speichert sie eine Bilddatei im Querformat mit dem auf der Seite liegenden Motiv. Bevor Sie Ihre Foto-Sammlung präsentieren, sollten Sie diese Aufnahmen auf jeden Fall drehen, auf dass sie in korrekter Orientierung erscheinen.

Für diese Aufgabe empfehlen sich jhead [4] und das Tool jpegtran aus dem Paket der JPEG-Library libjpeg [5]. jhead erhält die EXIF-Header; jpegtran dreht ohne Neukompression und damit ohne Qualitätsverlust.

Verfügt Ihre Kamera über einen Orientierungssensor (und haben Sie diesen beim Fotografieren aktiviert, siehe Abbildung 5) bringt folgender Befehl alle Fotos in die richtige Orientierung – vorausgesetzt, jhead liegt mindestens in Version 2.0 vor:

jhead -autorot *.jpg

jhead liest dabei die von der Kamera in die EXIF-Header der Fotos geschriebene Orientierungsinformation ein und dreht die Bilder entsprechend mit Hilfe von jpegtran. Leider kommt das Tool nicht mit allen Kamerahaltungen klar, es versagt etwa dann, wenn die Kamera auf dem Kopf steht (Auslöser nach unten) oder das Objektiv senkrecht nach oben oder nach unten zeigt.

Abbildung 5: Die Canon Digital IXUS 400 erkennt automatisch, ob sie horizontal oder vertikal gehalten wird, zu sehen am (mit dem Pfeil gekennzeichneten) Orientierungssymbol auf ihrem Bildschirm – dennoch speichert sie alle Bilder im Querformat und notiert die richtige Orientierung im EXIF-Header

Manuelles Drehen beherrschen auch ältere jhead-Versionen. Zwar erfüllt

jpegtran -rot 270 originalbild.jpg > gedrehtesbild.jpg

diese Aufgabe bereits, doch überträgt jpegtran den EXIF-Header aus originalbild.jpg nicht in die Zieldatei gedrehtesbild.jpg, zudem müssen Ausgangs- und Zieldatei verschiedene Namen tragen. Beide Probleme löst der Befehl

jhead -cmd "jpegtran -rot 270 &i > &o" bild.jpg

Mit der -cmd-Option kann jhead jedes beliebige JPEG-Bildmanipulationskommando aufrufen; jhead sichert dann die EXIF-Daten von bild.jpg, führt die gegebene Kommandozeile aus (wobei es für &i den Namen der Ausgangsdatei und für &o den Namen einer temporären Datei einsetzt), fügt die EXIF-Daten in letztere ein und ersetzt die Ausgangsdatei durch die temporäre Datei. So lässt sich jeder Bildbearbeitungsbefehl unter Erhalt des EXIF-Headers durchführen, insbesondere auch Manipulationen mit convert [8] aus dem ImageMagick-Paket [6].

jhead -cmd "..." spielt speziell dann seine Stärken aus, wenn das aufgerufene Kommando selbst nur ein explizit genanntes Bild verarbeiten kann, aber viele Grafikdateien in einem Rutsch manipuliert werden sollen. So dreht

jhead -cmd "jpegtran -rot 270 &i > &o" *.jpg

alle JPEG-Bilder im Arbeitsverzeichnis eins nach dem anderen; den Drehwinkel beschränkt jpegtran allerdings auf 90-Grad-Schritte:

  • -rot 90 dreht um 90 Grad nach rechts,
  • -rot 270 um 90 Grad nach links,
  • -rot 180 um 180 Grad.

Ein weiteres Manko sei nicht verschwiegen: Da jhead die EXIF-Daten an der Manipulation vorbeischleust, bleibt der darin enthaltene Thumbnail gekippt; seine horizontale Auflösung übersteigt weiterhin die vertikale.

Um Tipparbeit zu sparen, lohnt es sich, zwei kleine Shell-Skripte anzulegen. Eines namens rotateleft füllen Sie mit folgendem Inhalt:

#!/bin/sh
jhead -cmd "jpegtran -rot 270 &i > &o" $*

In eine zweite neue Datei namens rotateright schreiben Sie

#!/bin/sh
jhead -cmd "jpegtran -rot 90 &i > &o" $*

Machen Sie beide Dateien mit

chmod 755 rotateleft rotateright

ausführbar, und schieben Sie sie nach /usr/local/bin. Sofern dieses Verzeichnis im Suchpfad liegt, drehen Sie Ihre Bilder ab jetzt einfach mit rotateleft bild1.jpg nach links bzw. mit rotateright bild2.jpg nach rechts.

Weg mit den toten Pixeln!

Massenbildverarbeitung via Kommandozeile lohnt sich auch beim Entfernen toter Pixel: Solange man die Kamera nicht wechselt, sorgen die Defekte im Bildsensor für Fehlstellen, die sich auf allen Bildern an der gleichen Stelle befinden (Abbildung 6).

Abbildung 6: Ein toter Pixel (der hellgrüne Punkt in der Mitte) im vergrößerten Ausschnitt eines Bildes. Dass er verwischt aussieht, liegt an der JPEG-Kompression

Die Retusche-Aufgabe selbst übernimmt jpegpixi [7]; für die Automatisierung des Korrekturprozesses in einer Bilderserie zeichnet wieder einmal jhead verantwortlich. Zum Bestimmen der Positionen der toten Pixel benötigen Sie ein Programm, das Bilder nicht nur anzeigt, sondern auch die Koordinaten des Pixels angibt, über dem sich der Mauszeiger befindet. Sowohl GIMP als auch display aus dem ImageMagick-Paket eignen sich dazu; mit GIMP geht es am einfachsten.

jpegpixi macht nichts anderes, als die auf der Kommandozeile angegebenen Bildbereiche durch eine Interpolation der Umgebung zu ersetzen – das funktioniert natürlich auch bei anderen Störelementen, nicht nur bei toten Pixeln. Dabei komprimiert das Tool nur die Bild-Datenblöcke neu, in denen es etwas wegretuschiert. Da es die übrigen Blöcke nicht antastet, bleibt die Bildqualität weitestgehend erhalten.

Als Erstes müssen Sie die defekten Pixel des Bildsensors Ihrer Kamera finden. Hierzu nehmen Sie ein absolut schwarzes Foto auf, das Sie anschließend am Bildschirm untersuchen. Halten Sie dafür etwas Schwarzes direkt vor das Objektiv (bei einigen Kamera-Typen, z. B. Spiegelreflexkameras, lassen Sie einfach die Schutzkappe auf der Linse). Unterbelichten Sie extrem, indem Sie die Blende möglichst weit schließen und eine möglichst kurze Belichtungszeit wählen. Bei Kameras ohne manuelle Steuerungsmöglichkeit stellen Sie zumindest die Belichtungskorrektur auf den dunkelstmöglichen Wert. Auf jeden Fall schalten Sie den Blitz aus, damit kein Licht durch den Spalt zwischen Objektiv und schwarzem Gegenstand eindringt. Da sowieso nur homogenes Schwarz abgebildet werden soll, braucht die Kamera nicht fokussieren zu können. Stellen Sie als Auflösung diejenige ein, mit der Sie die zu retuschierenden Fotos gemacht haben!

Laden Sie das Schwarzbild in GIMP, und zoomen Sie es soweit auf, dass ein Bildpixel auf einem Pixel des Monitors dargestellt wird (im Kontextmenü des Bilds Ansicht / Zoom / 1:1). Alternativ zoomen Sie mit den Tasten [=] und [-].

Suchen Sie nach hellen Pixeln auf der schwarzen Fläche! Wenn Sie keine finden, darf sich Ihre Kamera eines optimalen Bildsensors rühmen, und Sie brauchen nichts retuschieren. Finden Sie jedoch tote Pixel, zoomen Sie die entsprechenden Bereiche stärker, z. B. ins Verhältnis 4:1, und fahren den Mauszeiger an die linke obere Ecke eines imaginären Quadrats, das den Defekt vollständig bedeckt. Lesen Sie die Koordinaten unten links im GIMP-Bildfenster ab. Gehen Sie mit der Maus zur unteren rechten Ecke des Quadrats, und notieren Sie auch deren Koordinaten. Sollte GIMP anstatt von Pixelkoordinaten (ganze Zahlen, keine Einheit) Maße in Zentimetern oder Zoll anzeigen, schalten Sie im Kontextmenü mit Ansicht / Punkt für Punkt in den "Punkt-für-Punkt"-Modus um.

Unter Angabe des oberen linken Eckpunkts und der Kantenlänge des Quadrats entfernen Sie ein totes Pixel aus einem Bild originalbild.jpg wie folgt:

jpegpixi originalbild.jpg korrigiertesbild.jpg 350,1609,8 1585,865,8

Die Testbildauswertung dieser Kamera ergab zwei Defekte, einen mit den Koordinaten (350,1609) für die obere linke und (358,1617) für die untere rechte Ecke sowie einen zweiten, den das durch (1585,865) und (1593,873) definierte Quadrat beschreibt. Beide Quadrate haben eine Kantenlänge von acht Pixeln. Die korrigierte Bildversion landet in korrigiertesbild.jpg. Unterziehen Sie zunächst das schwarze Testbild dieser Behandlung; es sollte dabei vollkommen schwarz werden.

Eine gesamte Bilderserie korrigieren Sie mit folgendem Skript removedeadpixels automatisch:

#!/bin/sh
jhead -cmd "jpegpixi &i &o 350,1609,8 1585,865,8" $*

Nach /usr/local/bin verschoben und ausführbar gemacht, retuschieren Sie alle Bilder in einem Verzeichnis mit dem Kommando

removedeadpixels *.jpg
Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 108 Punkte (5 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2013_06

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Terminator
Viele Terminals im Griff mit Terminator
Tim Schürmann, 07.05.2013 10:57, 1 Kommentare

Wer morgens nach dem Einschalten des Rechners erst einmal mehrere Terminals öffnet und sich diese mühevoll auf dem Bildschirm drapiert, der sollte einen Blick auf Terminator werfen. Das kleine...

Aktuelle Fragen

Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 3 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...
lvm wieder loswerden
Peter Dibbern, 11.04.2013 16:28, 4 Antworten
Ich habe sämtliche alten Kisten ausgeschlachtet und aus der Teilen einen Rechner zusammengeschrau...