lensfun,

  • Hinzufügen von Objektiv-Korrektur-Profilen in AfterShot 3

    Viele Fotografen, insbesondere solche, die mit DSLR-Kameras arbeiten, vertrauen auf die Macht der Raw-Bilder. Die Vorteile des Raw-Formats liegen in besseren Bearbeitungsmöglichkeiten, als das bei jpg möglich wäre. Zudem bleibt die Raw-Datei immer unverändert, wie ein Negativ. Während viele Kameras Objektivfehler bei der Erstellung von jpg-Dateien sofort korrigieren, muß bei der Nutzung von Raw-Photos dieser Schritt mit Hilfe des Raw-Konverters vorgenommen werden.

    Vorraussetzung hierfür ist natürlich das der Raw-Konverter weiß, wie das Bild das mit einem bestimmten Objektiv aufgenommen wurde korrigiert werden muß, um die Objektiv-eigenen Verzeichnungen zu eleminieren. Zu diesem Zweck führen Raw-Konverter eine mehr oder weniger große Liste mit Objektiven und den zugehörigen Korrekturdaten. Die richtigen Korrekturdaten für ein Bild werden dabei aufgrund der Objektivdaten in den Exif-Daten des Raw-Bildes herausgesucht und bei Aktivierung der Objektiv-Korrektur angewendet, wodurch das Bild entzerrt wird.

    Die Liste von Objektiven und deren Korrekturdaten ist aber selten vollständig. Immer wieder kommt es vor, das für ein Foto nicht das richtige Objektiv oder gar kein Objektiv aus der Liste mit Korrekturdaten erkannt wird. Eine Korrektur ist in einem solchen Fall nicht direkt möglich.

    Zum Glück ist bei Corel AfterShot Pro (ASP) die Datenbank der Objektive mit Korrekturdaten auf einfache Art und Weise erweiterbar. Dabei kann man sowohl ein bisher unbekanntes Objektiv profilieren oder auch Korrekturdaten für das unbekannte Objektiv aus einer anderen Quelle beziehen und ASP bereitstellen.

    Das Profilieren eines Objektivs für ASP ist an verschiedenen Stellen bereits beschrieben, im folgenden soll hingegen die Nutzung von Korrekturdaten für ASP aus dem LensFun-Projekt beschrieben werden.

    Die ASP Dateistruktur

    Bevor man damit beginnt Daten aus LensFun für ein Objektiv für ASP bereitzustellen, muß man erst einmal wissen, wie ASP Korrekturdaten für Objektive verwaltet und an welcher Stelle man eingreifen kann. Der genaue Ort hängt bei ASP vom Rechner-Betriebssystem ab, da ASP ja für Windows, Mac als auch Linux verfügbar ist. Im Folgenden werde ich die Verzeichnisse der Linux-ASP-Variante beschreiben. Bei den anderen Architekturen, sind die Verzeichnisse sicherlich anders, dennoch läßt sich das im Folgenden gesagte sicherlich leicht übertragen.

    Unter Linux wird ASP unter /opt/AfterShot3\(64-bit\)/ installiert. In diesem Basis-Verzeichnis befindet sich auch das Unterverzeichnis
    supportfiles/Profiles/LensProfiles/. Diese Verzeichnis enthält zum einen eine Datei lens-db.xml und darüber hinaus weitere Dateien für Kamera-Hersteller wie z.B. profile_nikonlenstable.txt für Nikon.

    In der Datei lens-db.xml stehen die eigentlichen Korrekturdaten aller für diesen Kamerahersteller in ASP bekannten Objekltiv Korrekturdaten. Ein Eintrag sieht z.B. wie folgt aus:

     <Lens raw="true" skip="false">
      <Model>Nikkor 24-85mm f/2.8-4D IF AF Zoom</Model>
      <Mount>nikonSLR</Mount>
      <Exif provider="Nikon" id="67 48 37 62 24 30 6D 02"/>
      <FocalLength max="85" min="24"/>
      <Aperture>2.8</Aperture>
      <CropMultiplier>1</CropMultiplier>
      <Converter factor="1" detected="false"/>
      <CorrectionCoefficients>
      <RadialDistortion a="0.03" b="0.008" c="0.02" focal="24"/>
      <RadialDistortion a="0" b="0" c="0" focal="85"/>
      </CorrectionCoefficients>
     </Lens>

    Die Daten sind im XML-Format als einfache Text-Dateien gehalten, was es leicht möglich macht sie zu lesen oder zu bearbeiten. Jede Objektivbeschreibung beginn mit <Lens...> und endet mit </Lens>. Das gleiche Prinzip von öffnenden und schließenden Tags mit den darin stehenden Daten  wird auch innerhalb der <Lens>...</Lens> Tags in ähnlicher Weise wiederverwendet. So findet man hier beispielsweise die Brennweitenangabe <FocalLength max="85" min="24"/>, und die Tags <CorrectionCoefficients>...</CorrectionCoefficients> innerhalb derer die eigentlichen Korrekturdaten z.B. als <RadialDistortion a="0" b="0" c="0" focal="24"/> nach Brennweite (focal=) sortiert stehen.

    Die Korrekturdaten bestehen also letztlich aus drei Zahlen-Werten, die mit a,b und c benannt sind.
    Darüber hinaus steht ebenfalls das Objektiv-Modell in den Daten (<Model>Nikkor 24-85mm f/2.8-4D IF AF Zoom</Model>) als auch eine eindeutige ID <Exif provider="Nikon" id="67 48 37 62 24 30 6D 02"/>, die aus acht in hexadezimaler Schreibweise angebenenen Zahlen besteht.

    Diese ID soll im Idealfall jedes Objektiv eindeutig betimmen, d.h. es sollte keine zwei uterschiedlichen  Objektive geben, die die gleiche 8-stellige ID haben. In der Realität klappt das allerdings nicht immer zu 100%. Die genaue Herkunft und Bedeutung der einzelnen 8 Zahlen ist hier (dort nach "Nikon LensID Values" suchen)  erklärt.

    In dem anderen Dateityp wie z.B. profile_nikonlenstable.txt steht eine Zuordnung zwischen den eindeutigen Objektiv-IDs und den Namen der Objektive, die letztlich im ASP Menü zur Objektiv-Korrektur zur Auswahl angeboten werden.

    Neben diesen Dateien sucht ASP aber noch in weiteren Verzeichnissen nach  Dateien mit Korrektur-informationen. Hierzu zählt insbesondere
    das Verzeichnis /home/<user>/.AfterShotPro3/LensProfiles/ wobei <user>für den Linux-Benutzer steht, der sich am System angemeldet hat.

    Dieses Verzeichnis bietet eine wichtige Möglichkeit neue bisher unbekannte Objektiv-Korrektur-Daten  aufzunehmen, indem in diesem Verzeichnis, das ggf. erst angelegt werden muß, eine neue XML-Datei mit Korrekturdaten erstellt werden kann. Der Vorteil dieses Verzeichnisses ist, das eine Neuinstallation von Corel Aftershot oder ein Upgrade zwar die Dateien in und unterhalb von /opt/AfterShot3\(64-bit\)/ verändern oder ersetzen wird, darunter u.U. auch die lens-db.xml aber niemals Dateien im Home-Verzeichnis des Benutzers.

    Zwar könnte man z.B. auch direkt die Datei /opt/AfterShot3\(64-bit\)/supportfiles/Profiles/LensProfiles/lens-db.xml ergänzen oder anpassen, bei einem Update wäre es jedoch möglich das diese Dateien überschrieben werden und somit die eigenen Änderungen verloren wären. Daher ist es besser das Verzeichnis  /home/<user>/.AfterShotPro3/LensProfiles/
    für eigene Anpassungen zu verwenden.

    Für welches Objektiv möchte ich Korrektur-Daten einpflegen?

    Bevor mal anfängt Korrektur-Daten für ein eigenes Objektiv, das von ASP bisher nicht unterstützt wird selbst zu erstellen, muß man natürlich wissen welches Objektiv man denn wirklich hat. Das hört sich einfacher an als man glaubt. Wer denkt ich habe ein 24-85, FX, F3.5-4.5-Objektiv und glaubt das müßte doch reichen irrt sich. Von diesem Objektiv gibt es gleich mehrere Varianten. Der beste Weg herauszufinden, um welches Objektiv es sich wirklich handelt ist sich die Exif-Daten von einem Bild anzusehen, das mit diesem Objektiv gemacht wurde. Zur Ermittlung von Exif-Daten existiert ein sehr leistungsfähiges Werkzeug mit dem Namen exiftool, das es sowohl für Linux als auch für Windows und den Mac gibt. Hat man ein Foto, nennen wir es mylensfoto.nef (eine Nikon-Raw-Datei) kann man auf einfache Art und Weise massenweise Informationen über das Bild im Allgemeinen (exiftool mylensfoto.nef) als auch über das Objektiv erhalten.

    Der Name des Objektivs, der benötigt wird läßt sich wie folgt ermitteln:

    $ exiftool -lensid mylensfoto.nef
    Lens ID                         : AF-S VR Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED

    Darüber hinaus braucht man noch die 8-stellige Lens-Id:

    $ exiftool -lensid# mylensfoto.nef
    Lens ID                         : B4 40 37 62 2C 34 B6 0E

    Somit steht nun fest welches Objektiv gerne korrigiert werden möchte. Jetzt geht es darum, die entsprechenden Daten zu suchen und anschließend in eine für ASP verdauliche Form zu bringen.

    Erstellen einer ASP Korrektur-Datei mit Hilfe von LensFun

    LensFun ist ein OpenSource Projekt, das sich der digitalen Korrektur von Objektiv-Fehlern widmet. Es beherbergt eine immer größere Liste von Objektiven zusammen mit deren Korrekturdaten. Aus diesem Fundus läßt sich auch für ASP die notwendige Information finden.

    Um die gesuchten Korrekturdaten des Objektivs zu finden, muß man zunächst den LensFun-Quellcode herunterladen und dann z.B. in /tmp auspacken. Die Korrekturdaten befinden sich dann im Verzeichnis /tmp/lensfun-0.3.2/data/db/. Da das hier gesuchte Objektiv von Nikon stammt, muß man sich die in diesem Verzeichnis befindliche Datei slr-nikon.xml ansehen. Dort findet man bei der Suche nach "24-85" verschiedene Einträge aber nur einen, der den richtigen Objektiv-Namen enthält:

        <lens>
            <maker>Nikon</maker>
            <model>Nikon AF-S Nikkor 24-85 mm f/3.5-4.5G ED VR</model>
            <model lang="en">Nikkor AF-S 24-85mm f/3.5-4.5G ED VR</model>
            <mount>Nikon F AF</mount>
            <cropfactor>1</cropfactor>
            <calibration>
                <!-- Taken with Nikon D610 -->
                <distortion model="ptlens" focal="24" a="0.00771" b="-0.03274" c="0.01406" />
                <distortion model="ptlens" focal="28" a="0.01346" b="-0.04515" c="0.04487" />
                <distortion model="ptlens" focal="32" a="0.0165" b="-0.0444" c="0.05448" />
                <distortion model="ptlens" focal="42" a="0.00831" b="-0.00929" c="0.02554" />
                <distortion model="ptlens" focal="58" a="0.00581" b="-0.00104" c="0.0207" />
                <distortion model="ptlens" focal="68" a="0.00072" b="0.01909" c="-0.00624" />
                <distortion model="ptlens" focal="85" a="0.00148" b="0.01645" c="-0.00584" />
                <tca model="poly3" focal="24" br="0.0000562" vr="1.0003064" bb="-0.0000458" vb="1.0001659" />
                <tca model="poly3" focal="28" br="0.0000260" vr="1.0003036" bb="-0.0000758" vb="1.0001937" />
                <tca model="poly3" focal="32" br="0.0001195" vr="1.0000822" bb="-0.0000848" vb="1.0002045" />
                <tca model="poly3" focal="42" br="0.0000594" vr="0.9999884" bb="-0.0000847" vb="1.0001990" />
                <tca model="poly3" focal="58" br="0.0000426" vr="0.9998852" bb="-0.0000709" vb="1.0001834" />
                <tca model="poly3" focal="68" br="0.0000360" vr="0.9998503" bb="-0.0000556" vb="1.0001424" />
                <tca model="poly3" focal="85" br="0.0000118" vr="0.9998654" bb="-0.0000847" vb="1.0001720" />
            </calibration>
        </lens>

    Dieser Eintrag sollte der richtige sein, das es sich um die VR-Variante des Objektivs handelt. Auch in der LensFun- Beschreibung findet sich wieder ein <calibration>...</calibration> Block, der für verschiedene Brennweiten die Korrektur-Daten (<distortion... </distortion>) enthält. Diese Zeilen müssen jetzt an die Syntax der oben stehenden ASP-Beschreibungsdatei angepasst werden. Die zusätzlichen Informationen die in <tca model.../> stehen müssen weggelassen werden.

    Als Vorlage kann man die oben angegebene Ausgangsdatei verwenden in die man die an ASP-Syntax angepassten distortion-Zeilen einfügt. Das Ergebnis sieht dann wie folgt aus:

    <Lens raw="true" skip="false">
      <Model>Nikkor 24-85mm f/2.8-4D IF AF Zoom</Model>
      <Mount>nikonSLR</Mount>
      <Exif provider="Nikon" id="67 48 37 62 24 30 6D 02"/>
      <FocalLength max="85" min="24"/>
      <Aperture>2.8</Aperture>
      <CropMultiplier>1</CropMultiplier>
      <Converter factor="1" detected="false"/>
      <CorrectionCoefficients>
    # aus den oben stehenden <distortion-/>-Angaben erzeugt:
        <RadialDistortion focal="24" a="0.00771" b="-0.03274" c="0.01406"/>  
        <RadialDistortion focal="28" a="0.01346" b="-0.04515" c="0.04487"/>
        <RadialDistortion focal="32" a="0.0165" b="-0.0444" c="0.05448"/>
        <RadialDistortion focal="42" a="0.00831" b="-0.00929" c="0.02554"/>
        <RadialDistortion focal="58" a="0.00581" b="-0.00104" c="0.0207"/>
        <RadialDistortion focal="68" a="0.00072" b="0.01909" c="-0.00624"/>
        <RadialDistortion focal="85" a="0.00148" b="0.01645" c="-0.00584"/>
      </CorrectionCoefficients>
    </Lens>

    Zur Erstellung dieser Datei wurden die LensFun <Distortion-Zeilen - zu <RadialDistortion umgewandelt und jeweils die Werte für a, b und exakt und unverändert übernommen. Was nun noch fehlt ist die genaue Angabe des Objektiv-Namens so, wie er von exiftool ermittelt wurde, da ASP nach dieser  Bezeichnung sucht, um den passenden Korrektureintrag mit gleicher "Model"-Bezeichnung zu finden. Daher müssen die Zeilen aus obiger Datei

    <Model>Nikkor 24-85mm f/2.8-4D IF AF Zoom</Model>

    als auch

    <Exif provider="Nikon" id="67 48 37 62 24 30 6D 02"/>

    noch mit den Daten aus der exiftool-Ausgabe des mit dem Objektiv gemachten Bildes versorgt werden. Diese Daten müssen ebenfalls in das von AfterShot erwartete Format umgepackt werden (siehe kursiv gesetzte Zeilen unten). Die fertige Datei sieht dann wie folgt aus:

    <?xml version="1.0" encoding="UTF-8"?>
    <LenseDb>
     <Lens skip="false" raw="true">
      <Model>AF-S VR Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED</Model>
      <Mount>nikonslr</Mount>
      <Exif id="B4 40 37 62 2C 34 B6 0E" provider="Nikon"/>
      <FocalLength min="24" max="85"/>
      <Aperture>3.5</Aperture>
      <CropMultiplier>1</CropMultiplier>
      <Converter factor="1" detected="false"/>
      <CorrectionCoefficients>
       <RadialDistortion focal="24" a="0.00771" b="-0.03274" c="0.01406"/>
       <RadialDistortion focal="28" a="0.01346" b="-0.04515" c="0.04487"/>
       <RadialDistortion focal="32" a="0.0165" b="-0.0444" c="0.05448"/>
       <RadialDistortion focal="42" a="0.00831" b="-0.00929" c="0.02554"/>
       <RadialDistortion focal="58" a="0.00581" b="-0.00104" c="0.0207"/>
       <RadialDistortion focal="68" a="0.00072" b="0.01909" c="-0.00624"/>
       <RadialDistortion focal="85" a="0.00148" b="0.01645" c="-0.00584"/>
      </CorrectionCoefficients>
     </Lens>
    </LenseDb>

    Wohin mit der neuen Datei?

    Der letzte Schritt ist nun die fertige Beschreibungsdatei für ASP zugreifbar zu machen. Man könnte wie schon
    beschrieben diese Datei in /opt/AfterShot3\(64-bit\)/supportfiles/Profiles/LensProfiles/lens-db.xml  einfügen, was aber wie bereits beschrieben das Problem mit sich bringt, das diese Datei bei einem  Update von ASP überschrieben werden könnte, die Änderungen somit verloren wären.

    Die bessere Lösung ist daher das Benutzerverzeichnis in /home/<user>/.AfterShotPro3/LensProfiles/Lens.xml für den Benutzer <user>, der als Platzhalter für den wirklichen Linux-Benutzernamen dient. Der Name der Datei, die hier einfach einmal Lens.xml genannt wurde, ist nicht entscheidend. Wenn ASP startet und ein Bild mit diesem Objektiv bearbeitet wird, erstellt AfterShotPro3 in diesem Verzeichnis eine Datei, die dem ASP-Namensschema entspricht, ohne dabei den Inhalt zu verändern:

    Lens_AF_S_VR_Zoom_Nikkor_24_85mm_f_3_5_4_5G_IF_ED_Crop_1.xml

    Am Ende des Tages liegen also zwei Datein in /home/<user>/.AfterShotPro3/LensProfiles/. Einmal Lens.xml und dann die von ASP nach dem Start erzeugte Datei Lens_AF_S_VR_Zoom_Nikkor_24_85mm_f_3_5_4_5G_IF_ED_Crop_1.xml

    Die Datei Lens.xml kann jetzt wieder entfernt werden.

    Bei der Bearbeitung eines Bildes in ASP, das mit dem oben beschriebenen Objektiv aufgenommen wurde, sollte jetzt in ASP in der Objektiv-Korrektur automatisch das korrekte Objektiv angezeigt werden und bei der Aktivierung der Obejktivkorrektur sollte das Bild mit Hilfe der eingefügten Korrekturdaten jetzt entzerrt dargestellt werden.

    Weitere Informationen und Quellen: