Ich habe kürzlich einen Probelauf für ein Projekt gemacht, um ein bestimmtes Klettergebiet aus verschiedenen Richtungen zu fotografieren. Ich habe zu verschiedenen Tageszeiten vom selben Ort aus Aufnahmen gemacht, verschiedene Belichtungen ausprobiert und 16 Aufnahmen für die Einstellungen gemacht, die mir am besten erschienen. Der beste Schuss aus der besten Session war dieser(Miniaturbild unten). Ich hatte ursprünglich gedacht, dass ich versuchen würde, Bilder zu stapeln, aber das Ergebnis der Stapelung der 16 Aufnahmen sah schlechter aus (weniger Details) als die beste Einzelaufnahme. Atmosphärische Turbulenzen waren durch das Objektiv deutlich sichtbar, als die heiße Nachmittagssonne auf die Westseite des Felsens traf. Obwohl ich morgens einige Aufnahmen mit indirektem Licht gemacht habe, zeigten sie aufgrund des Mangels an Schatten und Kontrast und der geringeren Lichtstärke tatsächlich weniger Details. Es gibt keinen Ort, von dem aus ich aus der Nähe die richtige Perspektive auf mein Motiv bekommen kann, also müssen alle meine Bilder mit einem 135-mm- oder 300-mm-Objektiv aus großer Entfernung aufgenommen werden.
Gibt es eine Möglichkeit, den Prozess der Suche nach den Glücksbildern aus einer Reihe von Landschaftsfotos wie diesem zu automatisieren? Da Leute, die glückliche Bilder mit astronomischer Fotografie machen, manchmal Hunderte von Aufnahmen machen, gehe ich davon aus, dass sie dies irgendwie automatisieren, aber ich weiß nicht, ob die von ihnen verwendeten Algorithmen für die Landschaftsfotografie geeignet sind. Dieses Projekt wird viel Autofahren und Wandern beinhalten, daher würde ich gerne Hunderte von Aufnahmen hintereinander machen, wenn es wahrscheinlich hilfreich wäre. Ich suche nach einer Open-Source-Lösung, die unter Linux funktioniert, vorzugsweise etwas, das ich über die Befehlszeile tun kann.
Oder würde ich wahrscheinlich bessere Ergebnisse erzielen, wenn ich eine Videotechnik verwende? Beeindruckende Ergebnisse werden hier beschrieben . Aber es scheint, als müssten Sie dazu in der Lage sein, etwa 10 Bilder pro Sekunde aufzunehmen, und ich habe nicht herausgefunden, ob meine Kamera das kann. (Ich habe eine Fuji x-e1.)
[BEARBEITEN] Nachdem ich mich ein wenig mehr im Internet umgesehen habe, glaube ich, dass ich einige Teilantworten auf meine eigene Frage habe. (1) Amateurastronomen, die Lucky Imaging verwenden, scheinen alle Windows zu verwenden und "Shareware"-Windows-Software zu verteilen. (2) ABER die astronomischen Techniken beinhalten alle die Auswahl eines "Referenzsterns", von dem angenommen wird, dass er eine Punktquelle ist. Wenn Sie einen solchen Referenzstern haben, ist es ziemlich trivial, ein Maß für die Bildqualität zu erhalten. Ein häufiges scheint das Strehl-Verhältnis zu sein, das im Grunde die Spitzenintensität des Bildes Ihres Referenzsterns ist. Wenn diese Eindrücke also stimmen, dann kann es für mich sinnvoll sein, zu versuchen, einen eigenen Bildauswahlalgorithmus für Landschaften zu entwickeln.
Dies ist keine endgültige Antwort auf meine eigene Frage, aber es ist zu lang für einen Kommentar.
Ich habe die Idee umgesetzt, den RMS Laplace zu verwenden. Die Idee ist, dass, wenn die Helligkeit des Bildes durch ein Array von Pixeln a[i,j] dargestellt wird, wir an jedem Punkt (i,j) die diskrete Annäherung an den Laplace-Operator L=a[i-1 haben, j]+a[i+1,j]+a[i,j-1]+a[i,j+1]-4a[i,j]. Dies misst die Schärfe von Merkmalen im Bild. Wenn das Bild beispielsweise unscharf wäre, wäre L niedriger. Der RMS-Wert des Laplace-Operators, R, ist die Quadratwurzel des Mittelwerts des Quadrats des Laplace-Operators.
Hier ist mein Code, der R für ein PNG-Eingabebild berechnet:
#!/usr/bin/ruby
# To batch convert a bunch of JPGs to png:
# perl -e '$i=0; foreach $f(<*.JPG>) {$s=sprintf("%03d",$i); $c="convert $f $s.png"; print "$c\n"; system($c); $i=$i+1;}'
require 'oily_png'
# require 'hsluv'
# http://www.hsluv.org
# https://github.com/hsluv/hsluv-ruby
# sudo gem install hsluv
# Sloppy and probably not physiologically valid, but fast.
# Returns an integer from 0 to 255*3.
def color_to_brightness(c)
return ChunkyPNG::Color::r(c)+ChunkyPNG::Color::g(c)+ChunkyPNG::Color::b(c)
end
def rms_laplacian_from_file(input_file)
image = ChunkyPNG::Image.from_file(input_file)
n = 0
sum = 0
sum_sq = 0
w = image.width
h = image.height
1.upto(w-2) { |i|
### if i%1000==0 then print "i=#{i}\n" end # show progress
next unless i>w/3 && i<(2*w)/3 ## for efficiency, only use center of frame
1.upto(h-2) { |j|
next unless j>h/3 && j<(2*h)/3 ## for efficiency, only use center of frame
next unless rand(10)==0 # for efficiency
a = Hash.new
(-1).upto(1) { |k|
(-1).upto(1) { |l|
c = image[i+k,j+l] # color, represented as a 4-byte rgba value
a[[k,l]] = color_to_brightness(c)
}
}
laplacian = a[[1,0]]+a[[-1,0]]+a[[0,1]]+a[[0,-1]]-4*a[[0,0]]
n = n+1
sum = sum + laplacian
sum_sq = sum_sq + laplacian*laplacian
}
}
sum = sum.to_f/n
sum_sq = sum_sq.to_f/n
rms = Math::sqrt(sum_sq-sum*sum)
return rms
end
ARGV.each { |input_file|
rms = rms_laplacian_from_file(input_file)
print "#{input_file} -- rms=#{rms}\n"
}
Dies ist in Ruby implementiert und läuft unter Linux mit der Open-Source-Bibliothek oily_png. Falls jemand daran interessiert ist, es auszuprobieren, es sollte fast keine Modifikation erfordern, um auf anderen Plattformen zu laufen, wenn Sie Ruby und oily_png installiert haben.
Um zu testen, ob es die Schärfe misst, habe ich das erste Bild meines Satzes von 16 aufgenommen, R gemessen und dann eine 5-Pixel-Gaußsche Unschärfe mit GIMP hinzugefügt und R erneut gemessen. Das Ergebnis war R = 30,8 vor der Unschärfe und R =7,8 nach. Dies scheint also zu bestätigen, dass es die Schärfe misst.
Meine 16 Bilder sind von 000 bis 015 nummeriert. Beim Betrachten der Bilder mit dem Auge hatte ich zuvor Bild 003 als das beste herausgesucht. Das war das Bild, zu dem ich in der Frage einen Link gepostet habe.
Ich habe meinen Code auf den 16 Aufnahmen ausgeführt, die ich gemacht hatte, und die folgende Ausgabe erhalten:
000.png -- rms=30.809465960392004
001.png -- rms=31.215359700578606
002.png -- rms=31.909926250066476
003.png -- rms=31.83243374839454
004.png -- rms=31.310612756003305
005.png -- rms=30.353258897447564
006.png -- rms=30.61244684985801
007.png -- rms=30.882745734215135
008.png -- rms=28.667104210689384
009.png -- rms=29.862966602367973
010.png -- rms=29.72001987743495
011.png -- rms=30.51274847773823
012.png -- rms=30.84316910530572
013.png -- rms=29.21751498027252
014.png -- rms=29.067434969521976
015.png -- rms=30.831305018709617
Von den 16 Bildern hatte meine Wahl den zweithöchsten R-Wert. Dies scheint zu bestätigen, dass diese Statistik eine nützliche Alternative zur Inspektion von Bildern und deren subjektiver Beurteilung durch das Auge sein könnte.
Meine Implementierung ist ziemlich langsam, und um das auszugleichen, habe ich einige Dinge getan, um die Leistung zu verbessern. Ich inspiziere nur die Mitte des Feldes und nehme den Laplace-Operator nur bei 1/10 der Punkte ab. In einer optimierteren Implementierung könnten diese Verknüpfungen nach Wunsch eliminiert werden.
Später kam mir der Gedanke, dass es einen viel einfacheren Weg geben könnte, dies zu tun. Ein Bild mit mehr Details sollte nicht so gut komprimiert werden, daher ist die größte JPG-Datei möglicherweise einfach die beste. Tatsächlich führte ein ls -lS zum Auflisten der Dateien in der Reihenfolge abnehmender Größe zu einer Liste, die fast in der gleichen Reihenfolge wie die nach abnehmendem R sortierten Dateien war:
-rw-rw-r-- 1 bcrowell bcrowell 16970354 Oct 25 15:48 003.png
-rw-rw-r-- 1 bcrowell bcrowell 16927174 Oct 25 15:48 002.png
-rw-rw-r-- 1 bcrowell bcrowell 16903104 Oct 25 15:48 004.png
-rw-rw-r-- 1 bcrowell bcrowell 16882373 Oct 25 15:47 000.png
-rw-rw-r-- 1 bcrowell bcrowell 16861082 Oct 25 15:47 001.png
-rw-rw-r-- 1 bcrowell bcrowell 16817527 Oct 25 15:48 006.png
-rw-rw-r-- 1 bcrowell bcrowell 16816529 Oct 25 15:49 011.png
-rw-rw-r-- 1 bcrowell bcrowell 16793982 Oct 25 15:49 012.png
-rw-rw-r-- 1 bcrowell bcrowell 16786443 Oct 25 15:48 009.png
-rw-rw-r-- 1 bcrowell bcrowell 16773575 Oct 25 15:48 005.png
-rw-rw-r-- 1 bcrowell bcrowell 16771759 Oct 25 15:49 010.png
-rw-rw-r-- 1 bcrowell bcrowell 16765674 Oct 25 15:48 007.png
-rw-rw-r-- 1 bcrowell bcrowell 16764562 Oct 25 15:49 015.png
-rw-rw-r-- 1 bcrowell bcrowell 16750179 Oct 25 15:48 008.png
-rw-rw-r-- 1 bcrowell bcrowell 16732854 Oct 25 15:49 013.png
-rw-rw-r-- 1 bcrowell bcrowell 16684073 Oct 25 15:49 014.png
Gibt es eine Möglichkeit, den Prozess der Suche nach den Glücksbildern aus einer Reihe von Landschaftsfotos wie diesem zu automatisieren?
So wie ich es verstehe, ist Ihre Definition von "Glücksbild" eine, die schärfer als der Durchschnitt ist. Da viele Kameras die Messung der Schärfe (eines Bereichs) eines Bildes in ihren Autofokusmechanismen verwenden 1 , ist klar, dass es eine Möglichkeit gibt, ihre Messung zu automatisieren. Die Vorteile verschiedener Ansätze und die Möglichkeit, sie zu kombinieren, sind jedoch Gegenstand aktiver Forschung, sodass Sie keine endgültige Antwort erwarten können. Eg Robust Automatic Focus Algorithm for Low Contrast Images Using a New Contrast Measure , Jinshan Tang et. al., Sensors (2011) sagt das
Viele Kontrastmessungen wurden für passiven AF verwendet ... Die Ergebnisse zeigen, dass räumliche 2D-Messmethoden wie Tenengrad, Prewitt Edge Detection und Laplacean die beste Leistung in Bezug auf Genauigkeit und Unimodalität liefern. Sie sind jedoch sehr empfindlich gegenüber Rauschen und nicht robust gegenüber unterschiedlichen Szenenbedingungen, wie z. B. schlechten Lichtverhältnissen.
Im Gegensatz dazu sind varianzbasierte Methoden schnell und robust. Die Grundidee besteht darin, die Varianz der Bildintensität zu berechnen. Das Bild ist am besten fokussiert, wenn die Varianz ein Maximum erreicht. Ein typisches Verfahren im Bereich der diskreten Kosinustransformation (DCT) besteht darin, die AC-Koeffizienten von Bildern zu berechnen, die auch verwendet werden können, um Informationen über die Varianzfunktion der Leuchtdichte darzustellen.
Da Sie nicht auf die Echtzeitleistung eines leistungsschwachen Prozessors in der Kamera beschränkt sind, könnten Sie wahrscheinlich mehrere Ansätze implementieren und versuchen, ihre Ergebnisse zu kombinieren. Sie sprechen von Stapeln, also nehme ich an, dass Sie mehrere Aufnahmen aus derselben Position bei ungefähr denselben Lichtverhältnissen gemacht haben: Es könnte sich lohnen, eher über das Zusammenfügen als über das Stapeln nachzudenken, damit Sie das Foto auswählen, das in einem Bereich den besten Kontrast aufweist. und das Foto, das den besten Kontrast zu einem anderen hat, und fügen Sie sie zusammen. Ich bin mir nicht sicher, inwieweit vorhandene Stitching-Software diese Art von Kontrastauswahlstich unterstützt.
1 Um genau zu sein, diejenigen, die den Kontrasterkennungs-Autofokus im Gegensatz zum Phasenerkennungs-Autofokus verwenden. Und ja, ich weiß, dass DSLRs mit Live-View PDAF mit heruntergeklapptem Spiegel und CDAF in Live-View verwenden.
Dies ist wahrscheinlich zu weit entfernt, um von großem Interesse zu sein, aber: Der Laplace-Operator verstärkt in einer Dimension den Hochfrequenzgehalt, indem er das Fourier-Spektrum mit dem Quadrat der Frequenz multipliziert. (Ich hoffe, ich habe das richtig verstanden.) Es verstärkt also sowohl das Rauschen als auch das Signal. Es könnte interessant sein zu sehen, ob ein Kantendetektor interessante Merkmale extrahieren könnte. Bei einem bestimmten Kantendetektor wäre vielleicht das Foto mit der längsten Gesamtkantenlänge von Interesse. Das könnte nur Schwanzjagd sein, aber vielleicht auch nicht?
twalberg
Benutzer21068
twalberg
Benutzer21068
Benutzer21068
scottbb
Michael C
Benutzer21068
Michael C
Mike Dixon
Benutzer21068
Mike Dixon
Benutzer50888
scottbb
scottbb