www.stoske.de/digicam

Technische Artikel und Methoden, Experimente, Tricks und Hilfsprogramme
für Digitalkameras und CCD-erzeugte Bilder

©2003-2004 Stoske & Bertling, Visuelle Kommunikation, Velbert, stephan@stoske.de

Artikel: Verzeichnungen entfernen

Verzeichnungen entfernen

- Genaues und sicheres Vermessen von statischen Objektv-Verzeichnungen, Erstellung einer Korrektur-Matrix.
- Nachträgliche Entfernung der Verzeichnung durch Anwendung der eigenen Matrix.

Hier ein Foto meiner ungeputzten Tafel, aufgenommen mit einer einfachen Canon S45.

Obwohl ich mir die größte Mühe gegeben habe, die Kamera (auf Stativ) möglichst gerade und mittig auszurichten, ist die Tafel nie wirklich gerade und die Kanten sind alle mehr oder weniger verbogen.

Das sind die typischen Verzeichnungen einer einfachen Digitalkamera, hier mit 35 mm Brennweite.

Hier das Resultat nach einer automatischen Korrektur. Die Kanten sind nun gerade und das Bild ist wieder unverzerrt.

Realisiert wurde dies durch genaues Ausmessen der Verzeichnungen meiner Kamera und durch die Berechnung einer Art "Objektiv-Profil". In diesem sind die ganz individuellen Verzeichnungen meines Objektivs gespeichert und damit lassen sie sich auch wieder entfernen.

Wie ich das gemacht habe, wie diese Methode funktioniert und wie man diese selbst leicht nachvollziehen kann, das ist Gegenstand dieses Artikels.

Kleiner Überblick

Bauartbedingte und individuelle Verzeichnungen

Es gibt zahlreiche fundierte und ausführliche Informationen zu diesem Thema, das sich in vielerlei Hinsicht weiter differenzieren lässt und mit vielen Kontexten in Verbindung steht. Ich beschränke mich deshalb hier auf eine vereinfachte Darstellung der wesentlichen Punkte und überlasse es dem Leser, wo er sich mit der Materie näher befassen möchte.

Objektiv-Verzeichnungen sind kein Manko der digitalen Generation, sondern seit je her mit Objektiven und Linsen verbunden. Die Bemühungen der optischen Hersteller lassen sich über Generationen und Jahrzehnte zurückverfolgen und in der Regel ist dieser Fehler mit den heutigen modernen Objektiven auch kein Thema mehr.
In der Regel heisst aber nicht in jedem Fall, und so wächst die Verzeichnung wieder mit sinkender Brennweite und ganz besonders bei den zahllosen, preiswerten Digitalkameras mit ihren winzigen Linsen.

Bauartbedingte Verzeichnung

Im professionellen Bereich der Studio-Fotografie, wo die Perfektion oft keine Grenzen kennt, wollte man nicht darauf warten bis die Objektive verzeichnugsfrei waren, oder musste ohnehin in Bereichen arbeiten, wo dies nicht zu erwarten war. Also begann man die Verzeichnung zu messen, und durch eine genau gegensätzliche Verzerrung aufzuheben. Auch heute noch gibt es Dienstleister und Hersteller, die für sehr hochwertige Objektive Profile oder sogenannte Verzeichnungs- oder Verzerrungsmatrizen anbieten.

Dies ist aber nur sinnvoll bei entsprechend hochwertigen Objektiven mit fester Brennweite, die untereinander, also innherhalb der Herstellung keinerlei Fertigungstoleranzen mehr aufweisen. Hier enthält das Profil die immer gleichen bauartbedingten Verzeichnungen und nur dann kann ein Profil auch allgemein benutzt werden.

Errechnet wird dieses Profil durch die genauen Spezifikationen des Objektivs, z.B. wenn der Hersteller dies selber tut, oder auch nachträglich und eigenhändig durch Aufnahme und Messung spezieller Testbilder.

Es gibt einige Programme für diese Anwendung, teilweise kommerziell, teilweise informativ (so wie hier), und in den meisten Fällen wird mit diesem "idealisierten" Modell gearbeitet, d.h. es wird versucht, die bauartbedingte Verzeichnung zu entfernen.

In der Zeichnung unten sieht man ein paar der naheliegensten Informationen, mit denen man eine Verzeichnung messen kann (hier ist die Verzeichnung natürlich übertrieben dargestellt). Neben der Rotation und einer verschobenen Lage, kann eine Kissen-Verzeichnung, z.B. über zwei Ellipsen, beschrieben werden. Aber es gibt auch zahlreiche andere Möglichkeiten eine Verzeichnung zu erfassen, oft wird mit Neigung, Wölbung, Biegung und vielen anderen Daten, Winkeln und Maßen gearbeitet. Genauso vielfältig und unterschiedlich sind die Testbilder und Aufnahmeverfahren.

Individuelle Verzeichnung

Im Falle einer "einfachen" Digitalkamera scheint mir dieses bewährte Verfahren aber nicht unbedingt angebracht zu sein. Denn hier haben wir zusätzlich zur bauartbedingten Verzeichnung noch hohe Toleranzen, die nicht nur vom Objektiv, sondern auch von anderen Komponenten stammen und sich addieren. Hier denke ich an schief eingeklebte CCD-Chips, an Gehäuse und Fassungen aus Plastik und natürlich an Objektive die riesige Zoombereiche und hohe Qualität liefern sollen, aber billig herzustellen sein müssen - natürlich auch aus Plastik.

Hier haben wir es also sehr wahrscheinlich mit Verzeichnungen zu tun, die sich überhaupt nicht allgemein erfassen lassen, sondern nur ganz individuell ermittelt werden können. Die Verzerrung müsste dazu viel genauer gemessen werden und wird sich dann auch nicht mehr durch eine geometrische Beschreibung darstellen lassen. Auch ist sie nicht mehr austauschbar, sondern passt ausschließlich zu der gemessenen Kamera, bzw. dem Objektiv, dafür aber wesentlich genauer.

Die Verzeichnungen eines Objektivs ähneln meist einer flachen Wölbung die zum Betrachter hin das Bild kissenförmig verzerrt. In der Praxis ist die Verzeichnug nur selten symmetrisch, sondern ungleichmäßig auf allen vier Seiten, dazu gedreht und dezentral verschoben.

Einschränkungen

Abhängigkeit von der Brennweite, Zoomobjektive

Prinzipiell ist eine solche Messung statisch, sie erfasst eine fixe Situation und deren Eigenschaften. Darum ist das ganze besonders sinnvoll bei Objektiven mit festen Brennweiten.

Bei variablen Brennweiten, sprich einem Zoom-Objektiv, ist das Problem der Verzeichnung auch anders zu lösen, einfach indem man den Weitwinkel-Bereich verlässt, also die Brennweite erhöht und den Abstand zum Objekt vergrößert.

Kommt man aber nicht umhin den Weitwinkel zu benutzen, z.B. aus räumlichen Gründen, wegen des Abbildungsmaßstabs oder weil man, wie ich, ohnehin fast alle Fotos mit Weitwinkel schießt, dann ist es auch bei einem Zoom-Objektiv sinnvoll zumindest von der weitesten Brennweite eine Messung anzufertigen.

Bei einer Digitalkamera kann es sogar möglich sein, andere Zoom-Stufen zu berücksichtigen, denn hier ist der Zoom-Bereich nicht immer stufenlos sondern oft in erstaunlich wenige, feste Schritte unterteilt (bei der Canon S45 z.B. sind es nur derer sieben). Die Brennweiten lassen sich also genau auswählen, und so kann es sinnvoll sein, z.B. die untersten drei Zoom-Stufen zu vermessen - je nach Stärke der Verzeichnung.

Abgesehen davon, dass die Vermessung möglichst genau sein sollte, ist es mir auch sehr wichtig, das sie leicht und unproblematisch funktioniert, auch unter schlechteren Bedingungen und mit minimaler Ausstattung. Deshalb kommen sehr unterschiedliche Tricks zum Einsatz, die, wie ich hoffe, auch anderweitig interessant und nützlich sind.

Hier einige wichtige Faktoren, die ich im folgenden versuche zu berücksichtigen:

- Das Testbild muss einfach sein und anspruchslos in Qualität und Auflösung, man sollte es leicht selbst erstellen und ausdrucken können.

- Die Messung durch Abfotografieren des Testbildes sollte möglichst tolerant sein. Es darf kein Ausschnitt und keine Fläche vorgegeben sein.

- Die Beleuchtung ist sehr schwer vorzugeben und noch schwerer in einem vorgegeben Rahmen einzuhalten, deshalb wäre es am Besten, wenn sie garkeine Rolle spielen würde und von der Messung ausgeschlossen werden könnte.
 

Beginnen wir mit dem Ausschnitt. Dieser ist schon nicht leicht zu treffen und es sollte deshalb keine Bedingung sein, einen bestimmten Ausschnitt aufnehmen zu müssen, er sollte also schon tolerant sein. Das bedeutet, das Testbild ist am Besten eine repitive, also wiederholbare Textur, sodass unabhängig vom Ausschnitt die Abbildung immer gleich ist.

Da eine Verzerrung gemessen werden soll, haben wir es mit Abweichungen zu tun, die sich am Einfachsten im Vergleich zum Ideal ergeben. Also ist wahrscheinlich ein rasterartiges Muster ganz sinnvoll, das aber nicht auf einem angenommenem Maß aufbauen darf, damit der Ausschnitt tolerant bleibt.

Nach verschiedenen Versuchen mit Gittern aller Art, aber auch Punkten und Kreisen im Raster, entscheide ich mich am Ende dafür, die senkrechte und waagerechte Verzeichnung separat zu messen und zwei Messbilder zu verwenden. Diese enthalten ganz schlicht nur waagerechte und senkrechte Linien die sich auch mit sehr geringer Druckauflösung ausgeben lassen. Um möglichst viele Messdaten über die Fläche erfassen zu können, sollte die Anzahl der Linien hoch sein, aber auch noch sicher differenzierbar.

Es versteht sich von selbst, dass schwarze Linien auf weißem Papier gedruckt werden, ich wähle nach einigem Probieren eine Linenstärke von etwa einem Millimeter, mit ebensogroßem Abstand zueinander. Diese Linien lassen sich noch sehr sicher abtasten und verfolgen.

Ausgehend von der maximalen Biegung der obersten und untersten Linie könnte man nun damit beginnen, eine möglichst passende Geometrie zu bilden, also die verzerrede Form in eine numerische Beschreibung umzusetzen. Das entspräche dann in etwa der bauartbedingten Entzerrung, auch wenn sie schon individuell ist. Was aber ist mit den Toleranzen die sich nicht geometrisch ableiten lassen?

Hier lösen wir uns vom idealisierten Modell, indem wir aus der Abtastung einer Linie keinen vektoriellen Bogen berechnen, sondern die Abweichung der Linie für jeden einzelnen Pixel der ganzen Zeile speichern. Alle Zeilen zusammen ergeben dann ein sehr feinmaschiges Netz, bei dem jeder Knoten in der Position frei verschiebbar ist. Das erlaubt die Speicherung einer äußerst komplexen und völlig amorphen, d.h. formlosen Verzerrung.

Erste Überlegungen

Rahmenbedingungen und Vorgaben zur Realisierung

Aufnahmen unabhängig von der Beleuchtung

Trennung der gewünschten Information von der unerwünschten Beleuchtung, Aufnahme von Messdaten unter widrigen Bedingungen.

Den folgenden Trick beschreibe ich etwas ausführlicher, denn er ist für viele Zwecke sinnvoll nutzbar.

Wie kann man nun sicherstellen, dass ein Messbild klar und kontrastreich fotografiert werden kann? Die Linien sollen schließlich abgetastet werden und deshalb muss das Bild möglichst sauber und gleichmäßig bis in alle Ecken ausgeleuchtet sein. Das ist schon eine schwierige Hürde, wenn das Verfahren für "jedermann" leicht nachzumachen sein soll.

Deshalb sollte die Beleuchtung bei der Aufnahme möglichst keine Rolle spielen, d.h. das Ergebnis sollte immer perfekt sein, ganz gleich ob die Szene falsch belichtet, unregelmäßig beleuchtet oder sogar fleckig ist. Wie soll das funktionieren? Eigentlich ganz einfach.

Dann man kann auch dann etwas trennen, wenn man nur das Gegenteil separieren kann.

Anders gesagt, wir haben eine Information (die Linien), die überlagert werden von den Werten des Untergrundes (des Trägers). Wir brauchen aber nur die Linien allein, können sie aber nicht allein fotografieren. Den Träger aber, also das beleuchtete Papier mit den vielen Graustufen, das können wir sehr wohl separieren, einfach indem wir das Blatt leer aufnehmen.

Dadurch haben wir den Träger allein, und wenn dieser nun umgekehrt, also invert, und dann vom gemeinsamen Bild abgezogen wird, was bleibt dann übrig? Genau das Gegenteil = die nackte Information.

Auf diese Art und Weise kann die Information, also das Muster des Messbildes, immer sauber und sicher erfasst werden, ganz gleich wie schlecht oder ungünstig die Beleuchtung ist. Da es sich hier um eine reine Differenzbildung handelt, ist die Aufnahme völlig unabhängig von Farbe, Belichtung und Struktur, die Messung könnte sogar bei Kerzenlicht erfolgen.

Ausführen läßt sich dieser Schritt in einer Bildverarbeitung wie PhotoShop auf viele Arten. So kann der invertierte Träger z.B als Ebene auf die Messbilder aufgelegt werden, wobei der Modus z.B. auf "Farbig abwedeln" eingestellt wird. In einem einzigen Schritt geht dies auch durch den Dialog "Bildberechnung" bei gleicher Einstellung.

Hier ein einfaches Testbild, man beachte die gekonnte Strichführung. Die Beleuchtung durch eine Taschenlampe ist miserabel, sogar die Struktur des Papieres wird sichtbar. Ein denkbar schlechter Fall für ein Messbild.

Hier der Träger allein, also das gleiche Foto, nur ohne die wesentliche Information. Das einzige was fehlt sind die Linien. Dieses Bild ist leicht vorher oder auch nachher anzufertigen.

Die Umkehrung (Invertierung) des Trägers.

Das Testbild abzüglich des umgekehrten Trägers. Es bleibt nur noch die reine Information übrig.

Unterstützende Software, Vorbereitung zur Messung

Nach dem die Informationen des Messbildes, also die Linien, sauber von der Belichtung getrennt wurden, müssen sie nun abgetastet und in eine Korrektur-Matrix umgewandelt werden. Das ist natürlich nicht mehr manuell oder mit einfachen Programmen zu lösen, also schreibe ich mir dazu zwei kleine Hlfsprogramme:

DistortionMatrix
Dient dem Ausdruck der beiden Messbilder und berechnet aus den Aufnahmen die individuelle Matrix.

DistortionRemove
Entfernt mittels der Matrix Verzeichnungen aus einem wählbaren Bild.

Im Folgenden beschreibe ich nun die Aufnahme der Messbilder und die Funktionsweise der einzelnen Schritte nacheinander: wie die Linien abgetastet werden, wie damit eine Verzerrung erfasst wird, wie daraus die Matrix gewonnen wird und wie man damit Bilder korrigiert.

Bis auf die Aufnahme der Messbilder kann der interessierte Leser oder Fotograf alle Schritte mit den beiden Hilfsprogrammen durchführen. Benötigt werden zusätzlich noch ein Drucker um die Messbilder auszudrucken, ein Stativ sowie eine Wasserwaage.

1.
Die Messbilder sollten 1 mm dicke schwarze Linien mit 1 mm Abstand enthalten. Das ganze DIN A4-Blatt sollte so weit wie möglich vollflächig mit waagerechten Linien gefüllt sein, das zweite Messbild mit senkrechten.


Die Messbilder können leicht mit verschiedenen Programmen selbst erstellt werden, wobei man mit der Auflösung experimentieren kann. Oder man lässt sich die Messbilder einfach durch das Programm
DistortionMatrix ausdrucken.


Es ist weder ein tiefscharzer Ausdruck notwendig, noch ein hochweisses Papier. (Der Kontrastabstand muss mind. 50% betragen). Das Papier sollte aber plan und stabil sein.

Die Aufnahme der Messbilder

2.
Ein Stativ vor einer glatten Wand aufstellen, z.B. einer Tür, und die Auflageplatte mit einer Wasserwaage in beiden Achsen ausrichten. Dann die Kamera gerade zur Wand aufschrauben.

3.
Ein Blatt Papier der Sorte auf die auch die Messbilder gedruckt wurden, z.B. mit Tesafilm an die Wand kleben. So, dass das Objektiv etwa in die Mitte des Blattes zielt und ebenfalls mit der Wasserwaage ausgerichtet. Das Blatt muss völlig plan liegen (Tesa ganz drumherum).

4.
Kamera einschalten und einen Automatik- oder Programm-Modus wählen. Die kleinste (oder die zu messende) Brennweite einstellen und das Stativ soweit nach vorn schieben, bis alle Ränder des Blattes gut außerhalb des Bildes liegen.

Zu den Einstellungen:

- Scharfstellen ist auf einem weißen Blatt u.U. nicht möglich, dann stellt man manuell scharf oder hält kurz etwas kontrastreiches vor das Blatt und fixiert dann den Fokus.

- Die Belichtung kann automatisch erfolgen, ist also beim weißen Blatt anders als bei den Messbildern, beide sollten einfach "normal" belichtet sein.

- Die Beleuchtung des Blattes spielt keine Rolle (Helligkeit, Gleichmäßigkeit).

- Da die Kamera auf einem Stativ steht, kann die Belichtungszeit beliebig sein und die Filmempfindlichkeit gering.

- Die Auflösung sollte so hoch wie möglich sein, oder die, die am häufigsten benutzt werden soll.

- Das Format kann JPEG sein, wenn die Qualität nicht so gering gestellt ist, dass Artefakte sichtbar werden. Das RAW-Format bietet hierbei keine Vorteile.

- Ein Weißabgleich ist auch nicht von Belang.

5.
Ein Foto vom leeren Blatt schiessen.

6.
Das erste Messblatt genau auf das leere Blatt kleben und ein Foto schiessen.

7.
Das zweite Messblatt auf das erste kleben und das dritte und letzte Foto schießen.

Vorbereitung der Messbilder, Testbild erstellen

Nachdem die Fotos auf den Rechner überspielt wurden, öffne ich sie in einer Bildverarbeitung (PhotoShop) um, wie oben schon beschrieben, die Beleuchtung von den beiden Messbildern zu entfernen.

Alle drei Aufnahmen sind durch die Automatik korrekt belichtet, d.h. sie stellen eher ein mittleres Grau dar. Zuerst ändere ich den Modus aller Bilder von RGB auf Graustufen.
Keines der Bilder wird weiter korrigiert, es erfolgt keine Tonwertkorrektur, keine Rauschunterdrückung, keine Schärfung und keine Kontraständerung. Lediglich die Aufnahme des weißes Blattes wird invertiert.

Das invertierte Bild kopiere ich dann auf die beiden Messbilder - das funktioniert über die Zwischenablage oder durch einfaches "draufziehen" mit gedrückter Shift-Taste. In der Kanalpalette wähle ich den seltsam benannten Verknüpfungsmodus "Farbig abwedeln" um das aufgelegt Bild abzuziehen. Dieser Schritt kann auch über den Dialog "Bildberechnung" ausgeführt werden. Zum Schluß reduziere ich die Bilder wieder auf eine Ebene und speichere die beiden finalen Messbilder im TIFF-Format.

Um das spätere Entfernen der Verzeichnung nicht an einem unübersichtlichen Foto testen zu müssen, erstelle ich mir aus den beiden fertigen Messbildern noch ein Testbild, einfach indem ich beide Bilder mit der Verknüpfung "Multiplizieren" verbinde. So bekomme ich ein Gitter.

In der verkleinerten Darstellung wären die Linien nicht mehr zu erkennen, deshalb zeige ich hier 1:2-Ausschnitte der linken oberen Bildecke. Eine vernünftige Visualisierung der Verzeichnung erstelle ich später aus der fertigen Matrix.

Messbild waagerecht

Messbild senkrecht

Foto weißes Blatt

Foto weißes Blatt, invertiert

Die finalen Messbilder nach Abzug des invertierten Weißbildes

Das Testbild daraus

Die Berechung der Achsen erfolgt getrennt, d.h. zuerst wird das Messbild mit den waagerechten Linien ausgewertet, dann auf gedrehte Weise das andere.

Die Abtastung erfolgt recht einfach, denn es werden nur Kontrastkanten gesucht. Das Messbild wird in der waagerechten Mitte von der oberen Kante an nach unten hin abgetastet. Dabei wird jeder Wechsel von Weiß nach Schwarz mit einer Kontrastdifferenz über 63 markiert (1/4 Intensität). Im Bild rechts ist es das rot umrandete Pixel. Für diese Pixelzeile, sagen wir es ist die 26te von oben, wird ein Zeilenspeicher eingerichtet, der neben dieser Basiszeile (Nr. 26) eine Liste von Zahlen trägt, und zwar soviele, wie das Bild Pixel in der Breite hat.

Berchnung der Matrix mit "DistortionMatrix"

1. Abtasten der Linien, Differenzen zeilenweise speichern

Die beiden Messbilder werden nun mit dem Hilfsprogramm DistortionMatrix geladen um daraus die Matrix zu berechnen.

Von diesem Pixel aus wird die Kontrastkante nun zuerst nach links, dann nach rechts verfolgt. Dazu wird immer wieder etwas höher begonnen, um nach unten die Kontrastkante erneut zu finden. Im Verlauf der Zeile verbiegt sich diese (im Bild übertrieben dargestellt) und der Abstand zur Basiszeile verändert sich.

Für jeden einzelnen Pixel der Zeile wird dieser Abstand dann im Zeilenspeicher abgelegt. Das ergibt eine Liste von Zeilen, etwa so, wie links abgebildet. Für jede fotografierte Linie auf dem Messbild gibt es dann eine Zeile die neben der zugehörigen Pixelzeile für jeden waagerechten Pixel die Abweichung angibt.

Berchnung der Matrix mit "DistortionMatrix"

2. Differenzkurven glätten

Die ermittelten Abstände, also die Differenzen zur jeweiligen Basislinie, sind an dieser Stelle noch ganzzahlig, stellen also eine Treppenform dar. Auch ist es durch Rauschen oder kleinere Fehler im Messbild möglich, dass sich in den Zahlenreihen Ausreißer, Fehlpixel oder kleinere Beulen finden lassen. Deshalb müssen die Zahlenlisten erst noch geglättet werden.

Das Verfahren dazu ist vergleichbar mit einem Weichzeichnungs-Filter. Jeder Wert wird dazu mit einer gewissen Anzahl von Nachbarpixeln vermittelt, sodass Übergänge weich und Aussreißer unterdrückt werden. Entsprechend der Bildgröße wähle ich eine Strecke von 24 Pixel pro Seite. Jeder Wert berechnet sich dann aus dem Mittelwert seines Wertes und dem seiner 48 Nachbarn.

Die Abbildung dazu unten ist natürlich vereinfacht, tatsächlich ist jede Zeile so lang wie das Bild Pixel in der Breite hat, hier sind es also in Wirklichkeit 2272 Werte.
Nach der Glättung sind aus den Zahlen Fliesskommawerte geworden, die als einfach genaue Zahlen mit 32-Bit (Single) gespeichert werden.

Berchnung der Matrix mit "DistortionMatrix"

3. Kontrollbilder

Direkt nach dem Glätten der Differenzkurven ergibt sich eine gute Gelegenheit die Messung zu kontrollieren. Die Inhalte der Zeilenspeicher werden dazu einfach in ein leeres Bild gemalt. Diese Linien müssen dann sauber, glatt und ohne Unterbrechungen sein.

Das Programm DistortionMatrix speichert diese beiden Kontrollbilder deshalb immer automatisch mit ab (Kontrollbild W und Kontrollbild H), sodass die Messung leicht überprüft werden kann.

In diesen beiden Bildern habe ich die Messbilder zusätzlich abgeschwächt in den Hintergrund gelegt, man sieht deutlich, dass die Erfassung der Linien geglückt ist.

Es ist zu beachten, dass die Auflösung der gespeicherten Kurven natürlich viel höher ist als die Pixelauflösung der beiden Kontrollbilder.

Berechnung der Matrix mit "DistortionMatrix"

4. Matrix interpolieren

Die Verzeichnung des Bildes ist nun über eine gewisse Anzahl von Zeilen erfasst, die tatsächliche Anzahl hängt natürlich davon ab, wieviele Linien auf dem Messbild abgebildet waren.

Was nun noch fehlt, um die Matrix zu vervollständigen, sind die vielen Zeilen dazwischen. Diese lassen sich natürlich berechnen, aber dürfen weder einfach wiederholt noch linear interpoliert werden. Denn da wir ja grundsätzlich davon ausgehen keine geometrische Struktur zu erfassen, wenngleich auch eine verzerrte, so müssen wir doch annehmen, dass die Werte der Zeilen asymmetrisch und unregelmäßig sein können. Deshalb müssen die Zwischenwerte durch eine Interpolation höherer Ordnung berechnet werden, z.B. der bikubischen.

Die Abbildung unten soll dies verdeutlichen. Hier werden die Zwischenwerte zwischen Zeile 53 und Zeile 87 ermittelt, die grünen Flächen zeigen daraus nur eine Spalte. (Die Anzahl der Schritte ist natürlich größer, denn zwischen 53 und 87 liegen ja 33 Zeilen.)

Zusätzlich zu den beiden Eckwerten werden noch zwei weitere Zeilen hinzugenommen, eine vorherige und eine folgende. Zwischen den korrespondierenden Werten wird nun die bikubische Kurve gebildet, mit der sich die grünen Zwischenwerte recht genau ermitteln lassen.

Auf diese Art wird die Matrix dann vervollständigt, d.h. sämtliche noch leeren Zwischenzeilen werden so berechnet. Um die Genauigkeit an den Rändern zu erhöhen, werden dafür zuvor noch die letzte und erste Linie verdoppelt und um einen gleichen Linienabstand verschoben. Damit ragen die erste und letzte Line u.U. aus dem Bild hinaus, was die Bildung der Kurve an den Bildrändern aber erleichtert.

Die fertige Matrix ist dann am Ende so groß wie das Bild selbst, in diesem Beispiel also 2272x1704 Pixel und enthält für jeden Pixel einen 32-Bit Fließkommawert, der die Verschiebung dieses Pixels in senkrechte Richtung angibt (aus den waagerechten Linien berechnet).

Aus dem zweiten Messbild mit den senkrechten Linien wird dann ebenso eine Matrix gebildet, die dann die waagerechte Verschiebung der Pixel enthält. Beide Matrizen werden schließlich als eine gemeinsame große Matrix betrachtet und in einem Roh-Format abgespeichert.

Betrachtung der Matrix, Visualisierung der individuellen Verzeichnung

Bevor die fertige Matrix nun benutzt wird um damit ein Bild zu entzerren, möchte ich sie zuerst selbst einmal darstellen, die Verzeichnung als solche sichtbar machen.

Dazu bewerte ich negative Zahlen als positive (Absolutwert) und multipliziere die waagerechte und senkrechte Matrix zu einem Wert pro Pixel. Der Wertebereich ist nun noch zu klein (je nach Biegung liegen die Werte deutlich unter 10), also spreize ich die Tonwerte um einen sichtbaren Verlauf zu erzeugen. Das natürlich stark verkleinerte Resultat sieht man rechts, es wurde noch weichgezeichnet um die durch die Spreizung und Verkleinerung entstandenen Muster und Moirees zu unterdrücken.

Wie man schon ahnt, ist die Form der Verzeichnung geometrisch, bzw. auf vektoriellem oder idealsiertem Wege, kaum oder garnicht erfassbar. Besonders deutlich wird das, wenn die Darstellung noch auf wenige Graustufen reduziert wird. Die hier gemessene Verzeichnung ist in jeder Hinsicht ein ziemlich amorphes, d.h. formloses Gebilde.

An dieser Stelle sollte auch ganz klar werden, dass eine solche Matrix, im Sinne eines Objektiv-Profils, in keinem Falle austauschbar ist. Diese Matrix passt ausschließlich zu der hier gemessenen Canon S45 und nicht annähernd für irgendeine andere Canon S45.

Warum wird die Matrix vollständig gespeichert? Es würde doch genügen nur die abgetasteten und geglätteten Linien zu sichern und die Zwischenlinien dann während der Entzerrung zu berechnen. Die gespeicherte Matrix wäre dann auch nur einige hundert Kilobyte groß, statt etliche Megabyte.

Die Entzerrung selbst erfordert eine aufwendige Interpolation, würde man die Matrix erst zu diesem Zeitpunkt bilden, würde jede Entzerrung mehr als doppelt so lange dauern, weil dieselbe Matrix immer wieder aufs neue berechnet würde.

Korrektur eines Bildes anhand der Matrix durch bikubische Interpolation

Nun kommen wir zum letzten und wesentlichen Schritt dieser Geschichte, der Entzerrung eines Bildes anhand der Matrix.

Hier kommt das zweite kleine Hilfsprogramm DistortionRemove zum Einsatz. Dort wird zuerst die Matrix geladen, wieder in die senkrechte und waagerechte getrennt, und anschließend das zu korrigierende Bild.

Der folgende Prozess ist in der Bildverarbeitung und den meisten Grafikprogrammen recht üblich, das Quellbild wird entsprechend der Matrix transformiert.

Dazu wird zuerst ein leeres Bild der gleichen Größe angelegt um das Resultat aufzunehmen, dieses wird dann zeilen- und spaltenweise vollständig durchlaufen. Bei jedem Bildpunkt werden aus der waagerechten und senkrechten Matrix dann die beiden Differenzwerte ausgelesen, was aus der verzeichneten, ganzzahligen Pixelstelle, die unverzeichnete, transformierte Fliesskomma-Koordinate macht.

 

Basierend auf dieser Zielposition erfolgt dann eine klassische bikubische Interpolation. Zuerst werden von den 16 Pixeln des 4x4-Rechtecks die Reihen interpoliert, dann diese vier Resulate. Das wiederholt sich dreimal für die Bildkanäle Rot, Grün und Blau. Anschließend braucht das Bild nur noch gespeichert zu werden.

Das Bild mit den Gitterlinien, das aus den übereinandergelegten Messbildern entstand, besteht nach der Korrektur nur noch aus völlig geraden Linien (Bilder ganz links: 1:2 Ausschnitt der linken unteren Ecke).

Source-Code

Die beiden Hilfsprogramme stehen auch als Source-Code zur Verfügung (siehe Programm-Seiten) um eigene Anpassungen, Korrekturen oder Erweiterungen vorzunehmen. Oder einfach nur um zu sehen, wie es gemacht wurde.

Bitte beachten Sie das Urheberrecht und die gesetzlichen Bestimmungen.

Anhang -
Dateistruktur der Verzeichnungsmatrix

1 x long
1 x long
1 x long
1 x byte
n x byte
1 x byte
n x byte
1 x byte
n x byte
n x single
n x single

Magic-Number "482375901"
Breite der Matrix in Pixel
Höhe der Matrix in Pixel
Länge des Infotextes 1 in Byte
Infotext 1
Länge des Infotextes 2 in Byte
Infotext 2
Länge des Infotextes 3 in Byte
Infotext 3
X-Matrix mit senkrechten Differenzen, n = Bildbreite x Bildhöhe
Y-Matrix mit waagerechten Differenzen, n = Bildbreite x Bildhöhe
(single = 32-Bit float = 4 Byte)