Staubkörner auf dem Sensor der Kamera

Beliebt 

 Fotos & Co. / Posted 1 Jahr ago / 321 views

Ich bin über ein ziemlich doofes Problem gestolpert: In meiner Kamera haben sich zwei Staubkörner verfangen. Sobald ich mit hohen Blenden arbeite, werden die sehr deutlich sichtbar. Ich habe das bemerkt, als ich ein Bilder für ein paar Timelapses geschossen habe. Diese Flecken (siehe Bild 1) sind im Resultat sehr ärgerlich :-(.

In einem vorherigen Beitrag habe ich schon das Gimp-Plugin „Heal Selection“ erwähnt. Damit kann ich diese Flecken in Gimp sehr gut entfernen: Bild laden, Maske um den Fleck legen, Filter -> Verbessern -> Heal Selection (Bild 2) wählen, Speichern – weg ist der Fleck (Bild 3). Just bei einem Timelapse ist das jedoch doof. Hier habe ich es mit bis zu 600 Bildern zu tun. Außerdem interpoliert der Algorithmus die Maske und wenn diese nicht bei jedem Bild komplett identisch ist, entsteht an der Stelle des Flecks ein Flackern.

Ein Stapelverarbeitungsskript anlegen

Geholfen habe ich mir mit Gimp Script-Fu [1], der Scripting-Sprache von Gimp. Damit lassen sich Abläufe automatisieren. Damit ein selbst geschriebenes Skript erkannt wird, muss es im richtigen Verzeichnis abgelegt werden. Dieses findet man durch einen Blick in die Liste unter Bearbeiten -> Einstellungen -> Ordner -> Skripte. Um das Rad nicht neu erfinden zu müssen, habe ich dann auf ein Beispiel-Skript [2] zurückgegriffen und dieses etwas verändert:

(define (heal-selection filename-in filename-out x y width height x1 y1 width1 height1)
 (let* ((image (car (gimp-file-load RUN-NONINTERACTIVE filename-in "")))
 (drawable (car (gimp-image-get-active-drawable image)))
 )

(gimp-image-select-rectangle image 2 x y width height)
 (python-fu-heal-selection RUN-NONINTERACTIVE image drawable 50 0 0)

(gimp-image-select-rectangle image 2 x1 y1 width1 height1)
 (python-fu-heal-selection RUN-NONINTERACTIVE image drawable 50 0 0)

(gimp-file-save RUN-NONINTERACTIVE image drawable filename-out "")

(gimp-quit 0)
 )
)

Im ersten Absatz definiert dieses eine neue Funktion „heal-selection“, die als Parameter eine zu ladende Datei, den Namen der zu speichernden Datei und zwei (weil es in meinem Fall zwei Staubkörner sind) rechteckige Bereiche übernimmt. Die Datei wird dann auch sofort geöffnet. Der zweite und dritte Absatz markiert jeweils einen der Bereiche und führt die tatsächliche Heal-Selection-Funktion aus Gimp aus. Letztendlich wird die geänderte Datei gespeichert und Gimp beendet.

Hinweis: Namen und Parameter bestehender Funktionen findet man schnell und einfach, indem man in Gimp Filter -> Script-Fu -> Konsole aufruft und in der Konsole auf „Durchsuchen“ klickt.

Das Skript ausführen

Das Skript kann nun von der Kommandozeile (Bash-.Shell) wie folgt aufgerufen werden:

gimp -d -i -b "(heal-selection \"Bild_in" \"Bild_out\" 2976 318 70 78 2762 414 66 68)"

Dabei verhindert das Parameter -d das Laden aller Brushes, -i verhindert das Laden des GUIs und -b lässt Gimp das folgende Skript ausführen. Bild_in ist das zu ladende Bild und als Bild_out wird das Resultat gespeichert. Die acht folgenden Zahlen beschreiben die Lage und Ausmaße meiner Staubkörner. Um ein ganzes Verzeichnis abzuarbeiten, habe ich den Ordner „healed“ angelegt und das folgende Bash-Skript um das Gimp-Skript herum aufgerufen:

for F in *.jpg ; do \ 
gimp -d -i -b "(heal-selection \"$F\" \"healed/$F\" 2976 318 70 78 2762 414 66 68)" \
done

[1] https://docs.gimp.org/de/gimp-concepts-script-fu.html
[2] http://www.adp-gmbh.ch/misc/tools/script_fu/ex_09.html

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.