uncalibrated_photometric_stereo
— Rekonstruieren einer Oberfläche von mehreren, unterschiedlich beleuchteten
Bildern.
uncalibrated_photometric_stereo(Images : NormalField, Gradient, Albedo : ResultType : )
Der Operator uncalibrated_photometric_stereo
kann benutzt werden
um die feinen Details einer Oberfläche eines gegebenen Objektes
zu extrahieren, ohne dass man Wissen über die Beleuchtung, Geometrie und
Spiegelungseigenschaften des Objektes hat. Die Geometrien von Interesse
können z.B. Dellen, Falten oder Kratzer sein. Der Operator kann normalerweise
nicht verwendet werden, um die allgemeine Form eines Objektes zu vermessen.
Der Operator liefert die Normalen der Oberfläche in NormalField
als
ein 3-kanaliges Bild, wobei jedes Bild eine Komponente der Normalen kodiert.
Dieses Bild wird für die Visualisierung des Ergebnisses als farbkodiertes
Bild verwendet. Außerdem werden die Gradienten und die Albedo der
Objektoberfläche in Gradient
bzw. Albedo
zurückgegeben.
Welches Ergebnis berechnet werden soll kann mit Hilfe von ResultType
eingestellt werden. Dieser Operator ist ähnlich zu photometric_stereo
,
benötigt jedoch keine kalibrierten Lichtrichtungen. Es ist zu beachten, dass
photometric_stereo
schneller und genauer ist, aber die Lichtrichtungen
bekannt sein müssen. Für sinnvolle Ergebnisse muss, sowohl für den kalibrierten
wie auch den unkalibrierten Fall, eine orthografische Projektion der Kamera
angenommen werden. Dies wird erreicht, indem ein telezentrisches Objektiv
oder zumindest ein Objektiv mit langer Brennweite verwendet wird.
Der Operator benötigt mindestens drei unterschiedlich beleuchtete Bilder eines Objekts, welches mit einer statischen Kamera aufgenommen wurde und für jedes Bild eine unterschiedliche Beleuchtungsrichtung. Die besten Resultate werden erzielt, wenn das Objekt sog. Lambert'sche Reflexionseigenschaften und keine Reflexionen oder Schattenwurf aufweist.
Images
(input_object) singlechannelimage(-array) →
object (byte / uint2)
Eingabebilder mit jeweils unterschiedlicher Beleuchtungsrichtung.
NormalField
(output_object) image(-array) →
object (real)
Oberflächennormalen pro Pixel.
Gradient
(output_object) image →
object (vector_field)
Gradienten der Oberfläche in x,y Richtung.
Albedo
(output_object) image →
object (real)
Anteil der Strahlung, der von der Oberfläche reflektiert wird.
ResultType
(input_control) string-array →
(string)
Zu berechnende ikonische Ergebnisse.
Defaultwert: 'all'
Werteliste: [], 'albedo' , 'all' , 'gradient' , 'normal_field' , 'normalized_gradient'
* read severally illuminated images FName := 'photometric_stereo/pharma_braille_0' + [1:4] + '.png' read_image(Images, FName) * extract surface normals, gradients and albedo from images uncalibrated_photometric_stereo(Images, NormalField, Gradient, Albedo, 'all') derivate_vector_field (Gradient, Result, 0.1, 'mean_curvature') reconstruct_height_field_from_gradient (Gradient, HeightField, 'poisson', \ [], [])
Sind die Parameterwerte korrekt, dann liefert
uncalibrated_photometric_stereo
den Wert TRUE, sonst eine
Fehlermeldung.
H. Hayakawa: „Photometric stereo under a light source with arbitrary motion“. Journal Optical Society America, Vol. 11, No. 11/November 1994.
3D Metrology