foto‎ > ‎

Verzerrung und Entzerrung

2011-03-21

Die meisten unserer Gelegenheitsfotos werden meist ohne weitere Nachbearbeitung archiviert. Bei den Extremeinstellungen moderner Zoom-Objektive können aber die Verzerrungen gerader Linien an den Rändern schon sehr auffällig sein. Diese Verzerrungen machen sich besonders bei Aufnahmen von Gebäuden bemerkbar. Diese Verzerrungen können mit Zusatzprogrammen entfernt werden.

Was spricht aber dagegen, überhaupt alle Bilder einem Entzerrungsprozess zu unterziehen? 

Profis, die Lightroom verwenden, haben damit kein Problem. Amateure können das aber auch.

Alle Objektive haben kissenartige (Teleobjektive) oder tonnenförmige (Weitwinkelobjektive) Verzerrung. Die Verzerrung ist kein Mangel sondern eine optische Gegebenheit. Es gibt auch verzerrungsfreie Objektive, meist aber mit Festbrennweiten.

Es ist möglich, diese Verzerrung rechnerisch zu entfernen. Viele High-End-Bildbearbeitungsprogramme verfügen über solche Entzerrungsfunktionen, man muss lediglich die Kamera und das Objektiv eingeben und oft nicht einmal das, weil sich das Programm diese Daten aus der EXIF-Information des Bildes holt. Auch Spiegelreflexkameras (zum Beispiel meine Canon 60d) verfügen über die Möglichkeit, diese Entzerrung bereit in der Kamera durchzuführen. Leider werden aber nur die Canon-Objektive unterstützt. Bei Fremdfabrikaten wird diese Entzerrungsfunktion ausgeschaltet.

PTLens

Ptlens ist ein selbständiges Programm zur Entzerrung digitaler Bilder, enthält aber auch ein PlugIn für Lightroom und Photoshop. Die Liste der unterstützen Kameras reicht von Kompaktkameras aller namhafter Hersteller bis zu Spiegelreflexkameras mit allen Wechselobjektiven sowohl der Hersteller als auch der Fremdhersteller.Homepage von PTLens 

In der ZIP-Datei ist sowohl eine 32-Bit als auch eine 64-Bit-Version enthalten. PTLens installiert sich in C:\Program Files\ePaperPress\PTLens\
PTLens kann verschiedenartigste Verzerrungen entfernen helfen, sogar Entzerrungen von Weitwinkelobjektiven, die bei Personenaufnahmen zum Beispiel die Nase unvorteilhaft groß erscheinen lassen.

PTLens kann auch in deutscher Sprache bedient werden, die mitgelieferte Hilfe-Datei ist aber in englisch.

Was man einem Bild antun kann:

  • Tonnen- oder Kissenverzerrung entfernen (Grundfunktion)
  • Vignettierung entfernen
  • Perspektive verändern
  • Drehen
  • Maßstab
  • Verschieben
  • Farbverschiebung
  • Zoom
  • Entzerrung von Fischaugen-Objektiven

Ein entzerrtes Bild ist ein Duplikat des Originals mit nachgestelltem "_pt".

Nachdem das erste Bild entzerrt wurde, können weitere Bilder eines Ordners durch Mehrfachauswahl (Ctrl oder Shift) in einem Batchmode abgearbeitet werden, in dem die beim ersten Bild gegebene Entzerrungseinstellung für alle weiteren Bilder eines Ordners angewendet wird, wobei aber die Angaben über die Kamera, das Objektiv und die Brennweite aus jedem Bild individuell ausgelesen werden.

Die Beispielbilder zeigen die Entzerrungswirkung bei der Einstellung 17mm, 35mm, 50mm eines Tamron-Zoom-Objektivs.

Auf Grund welcher Daten PTLens die Korrektur vornimmt, erfährt man nicht. Diese Daten sind in einer Binärdatei kodiert abgelegt.

ImageMagick

Es gibt auch eine grundlegendere Methode, Bilder zu verzerren oder zu entzerren. Und zwar mit dem Programm ImageMagick. Es handelt sich um ein Kommandozeilenprogramm, das über die Eingabeaufforderung aufgerufen wird.

Wer sich mit Bildbearbeitung beschäftigt, sollte sich dieses Programm jedenfalls auf seinem Rechner installieren. Dieses Programm zu besprechen, ist hier nicht möglich. Dazu muss man die Online-Dokumentation bemühen. Hier wird nur beschrieben, wie man Bilder automatisch bearbeiten kann.

Bei der Installation von ImageMagick wird dessen Binärverzeichnis auch im Pfad aufgenommen. Es sind mehrere Programme, die den Funktionsumfang von ImageMagick darstellen, zum Beispiel convert.exe und identify.exe aber auch andere.

Der Abschnitt über Verzerrungen, die mit ImageMagick ausgeführt werden können ist sehr umfangreich und die Tonnen- und Kissenverzerrung ist nur ein kleiner Teil der verschiedenen Verzerrungsarten. Genauer gesagt handelt es sich um eine Verzerrung, die durch Anwendung einer Polynom-Funktion auf alle Bildpunkte ausgeführt wird. Da es sich um eine Verzerrung mit zentrischer Symmetrie handelt, wird als Parameter der Radius eines Kreises verwendet, dessn Mittelpunkt die Bildmitte ist.

Rsrc = r * ( A*r3 + B*r2 + C*r + D )
Die vier Größen A, B, C, D

Programm zur automatischen Bildentzerrung

Das nachfolgende Skript distort.ps1 erleichtert die Kommandozeileneingabe, wobei die Parameter $a, $b und $c die Entzerrung vornehmen. Image Magick muss am Rechner installiert sein und dessen bin-Verzeichnis muss im Pfad enthalten sein. Grundlage für dieses Programm ist das folgende VB-Programm barrel.vbs, welches aber mit dem Windows Skripting Host (einer äteren Skript-Technologie) ausgeführt werden muss.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# ==============================================================================================
#
# Microsoft PowerShell Source File
#
# NAME: distort.ps1
#
# AUTHOR: Franz Fiala
# DATE  : 2011-03-02
#
# ==============================================================================================
 
$Suffix = "conv"
$FileName = ""
$What = ""
function ReplaceComma
{
    if ($args[0] -eq "") { "" }
    $args[0].Replace(",",".")
}
function help
{
    Write-Host "Image Magick - Lens Correction"
    Write-Host "arguments: * | file1.jpg, file2.jpg..."
    Write-Host "see http://www.imagemagick.org/Usage/windows/#vb_example"
}
function CorrectImage
{
    if (-not (Test-Path $args[0])) { Write-Host "Not Found"; break}
    $FileToConvert = Get-Item $args[0]
    $Extension = $FileToConvert.extension
    $FileName = $FileToConvert.Name.Replace($Extension, "")
    $FileConverted = $FileName + $Suffix + $Extension
    $Command = "cmd /c identify -format ""%[EXIF:FocalLength]"" " + $FileName + ".jpg"
    $f = Invoke-Expression $Command -OutVariable $What
    $f = Invoke-Expression $f
    Write-Host $f
    $a = 0
    $b = 0.000005142 * $f * $f * $f - 0.000380839 * $f * $f + 0.009606325 * $f  - 0.075316854
    $c = 0
    $d = 1 - $b
    $a = ReplaceComma([string]$a)
    $b = ReplaceComma([string]$b)
    $c = ReplaceComma([string]$c)
    $d = ReplaceComma([string]$d)
    Write-Host $a $b $c $d
    $Command = "convert $FileToConvert -quality 80%% -virtual-pixel black -filter point -distort Barrel ""$a $b $c $d"" $FileConverted"
    Write-Host $Command
    Invoke-Expression $command
}
cls
switch ($args.length)
{
    0 { help; break}
    1 { if ($args[0] -eq "*") {} else { CorrectImage($args[0]) } }
    default { help; break }
}

barrel.vbs

const strConv = "Convert" ' name of the IM Convert program
const strAdd = "_ptr"       ' string atached to the filename
'
Dim wsh,fs
Set wsh = CreateObject("Wscript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")
'
' names of the in- and output files
strFileIn = WScript.Arguments(0)
Pos = InStrRev(strFileIn,".")
strFileOut = Left(strFileIn,Pos - 1) & strAdd & Mid(strFileIn, Pos)
'
' evaluation of the focal length and calculation of parameter b
command = "cmd /k identify -format ""%[EXIF:FocalLength]"" " & strFileIn
Set objExec = wsh.Exec(command)
strf = objExec.StdOut.Readline
f = eval(strf)
b =  0.000005142 * f * f * f -0.000380839 * f * f + 0.009606325 * f  -0.075316854
d = 1 - b
b=replace(b,",",".") ' only needed in the German version
d=replace(d,",",".")
'
Command = strConv & " """ & strFileIn _
&  """ -quality 80%% -virtual-pixel black -filter point -distort Barrel   ""0.0 " _
& b & " 0.0 " & d & """ """ & strFileOut & """"
wsh.run command, 7, true
Comments