Forum Wiki Galerie Kontakt Wie man Fragen richtig stellt. Tutorial Forum
Zurück   GIMP-Forum 3.0 > Arbeiten mit Gimp > GIMP-Ressourcen

Hinweise
Alt 16.09.2004, 10:25   #1
flashnfantasy
Erfahrener Benutzer
 
Benutzerbild von flashnfantasy
 
Registriert seit: 14.05.2004
Beiträge: 380
Standard Erstellen von Panorama-Bildern. Script zum Zusammenfügen...

Gleich eine Warnung: Dieser Script hat absolut keine graphische Oberfläche, ist also nichts für Warmduscher

Die Idee hinter dem Script ist folgende:
Man sucht je zwei Referenzpunkten auf zwei Bildern. Das zweite Bild wird durch Drehung, Skalierung und Verschieben so hingebogen, daß die Referenzpunkte über denen des ersten Bildes liegen.

Der Script eignet sich zum Zusammenfügen von Bildern. Es sollte jedoch dabei ein ausreichend großer Bereich für die Deckung vorhanden sein.

Tipp zur praktischen Anwendung:
  • Ich lege mir zwei Bilder nebeneinander und suche mir zwei gut sichtbare Objekt auf beiden Bildern raus. Im GIMP-Fenster unten-links erscheint immer die Pixel-Koordinate, die notiere ich mir für beide Bilder. Auf diese Weise hole ich mir die Referenzpunkte.
  • Meist weisen die Bilder eine unterschiedliche Helligkeit auf. Das Angleichen geschieht mit dem Werkzeug 'Curves' (Menü Ebene-Farben) am besten.
  • Ein Pinsel mit weichen Kanten und den Radiergummi verwende ich, um den Übergang fliessend zu machen. Dazu stelle ich das obere Bild auf etwa 50% Transparenz und schaue, wo die Bilder am besten zu Deckung kommen. Gewöhnlicherweise ist das entlang der Linie über die Referenzpunkte.
  • Natürlich kann man mehr als nur Panoramas damit erzeugen - für die Bildmanipulation können jetzt ziemlich gute Deckungsdaten für zwei Bilder rausgesucht werden. Werde demnächst mal ein Beispiel dafür machen.



Manche werden jetzt wahrscheinlich behaupten, daß ich einfach nur atan und sqrt in scheme ausprobieren wollte
Zumindest werde ich mit der Digicam demnächst einige große Panoramas machen. Die Qualität der zusammengefügten Bilder ist auf jedenfall besser als bei all diesen kostenlosen Panorama-Programme, die ich bisher im Netz gefunden habe.

Das nachfolgende Bild besteht aus 6 Einzelbildern und war nach dem Zusammenfügen etwa 10000 Pixel breit.


Code:
(define (script-fu-panorama2d image drawable1 xp1Start yp1Start xp1Ende yp1Ende drawable2 xp2Start yp2Start xp2Ende yp2Ende)
 (gimp-image-undo-group-start image)

 (set! dim2x (car (gimp-drawable-width drawable2)))
 (set! dim2y (car (gimp-drawable-height drawable2)))

 (set! dimx (car (gimp-image-width image)))
 (set! dimy (car (gimp-image-height image)))

 ; das zweite Bild schon mal zu dem ersten Bild dazubringen.
 (set! image3layer (car (gimp-layer-new image dim2x dim2y 0 "Bild 2" 50 NORMAL)))
 (gimp-image-add-layer image image3layer 0)
 (gimp-drawable-fill image3layer 2)

 (gimp-selection-none image)
 (gimp-selection-clear image)
 (gimp-layer-set-preserve-trans image3layer TRUE)
 (gimp-edit-copy drawable2)
 (gimp-edit-clear image3layer)
 (set! floating_sel (car (gimp-edit-paste image3layer 0)))
 (gimp-floating-sel-anchor floating_sel)

 ; Die Winkeldrehung und Skalierung berechnen
 ; 1. Bild
 (set! d1x (- xp1Ende xp1Start))
 (set! d1y (- yp1Ende yp1Start))
 (if (= 0 d1x)
 (set! wi1 (/ *pi* 2))
 (set! wi1 (atan (/ d1y d1x)))
 )
 (if (< d1x 0) (set! wi1 (+ (/ *pi* 1) wi1)))
 (set! wi1grad (/ (* wi1 180) *pi*))
 (set! dist1 (sqrt (+ (* d1x d1x) (* d1y d1y))))
 ; 2. Bild
 (set! d2x (- xp2Ende xp2Start))
 (set! d2y (- yp2Ende yp2Start))
 (if (= 0 d2x)
 (set! wi2 (/ *pi* 2))
 (set! wi2 (atan (/ d2y d2x)))
 )
 (if (< d2x 0) (set! wi2 (+ (/ *pi* 1) wi2)))
 (set! wi2grad (/ (* wi2 180) *pi*))
 (set! dist2 (sqrt (+ (* d2x d2x) (* d2y d2y))))

 (set! dwi (- wi1 wi2))
 (set! scaleF (/ dist1 dist2))

 ; Berechnen des Referenzpunktes
 ; um die Bilder zur Deckung bringen
 ;-------------------------------
 ; 1. Mitte des Drawables, als Ursprung der Rotation
 (set! mittex (/ dim2x 2))
 (set! mittey (/ dim2y 2))
 ; 2. Referenzpunkt relativ zur Mitte
 (set! refx (- xp2Start mittex))
 (set! refy (- yp2Start mittey))
 ; 3. Scaling
 (set! refax (* refx scaleF))
 (set! refay (* refy scaleF))
 ; 4. die Drehung wird nachgebildet
 (set! nrefx (- (* (cos dwi) refax) (* (sin dwi) refay)))
 (set! nrefy (+ (* (sin dwi) refax) (* (cos dwi) refay)))
 ; 5. Schritt, der Referenzpunkt wird wieder auf oben-links gerechnet
 (set! grefx (+ nrefx (* mittex scaleF)))
 (set! grefy (+ nrefy (* mittey scaleF)))
 (set! movex (- xp1Start grefx))
 (set! movey (- yp1Start grefy))

 ; Nur für Testzwecke die Linien zeichnen
 (set! segment (cons-array 4 'double))
 (aset segment 0 xp1Start)
 (aset segment 1 yp1Start)
 (aset segment 2 xp1Ende)
 (aset segment 3 yp1Ende)
 ;(gimp-pencil drawable1 4 segment)
 (aset segment 0 xp2Start)
 (aset segment 1 yp2Start)
 (aset segment 2 xp2Ende)
 (aset segment 3 yp2Ende)
 ;(gimp-pencil image3layer 4 segment)

 ; Hier kommen die wenigen wirklichen GIMP-Befehle
 (gimp-layer-scale image3layer (* dim2x scaleF) (* dim2y scaleF) 0)
 (gimp-selection-none image)
 (gimp-rotate image3layer 1 dwi)
 (gimp-layer-translate image3layer movex movey)

 ; die Dimension des neuen Bildes werden berechnet...
 (set! dim1x (car (gimp-drawable-width drawable1)))
 (set! dim1y (car (gimp-drawable-height drawable1)))
 (set! dim3x (car (gimp-drawable-width image3layer)))
 (set! dim3y (car (gimp-drawable-height image3layer)))
 (set! offs3x (car (gimp-drawable-offsets image3layer)))
 (set! offs3y (cadr (gimp-drawable-offsets image3layer)))
 (set! offsx (min 0 offs3x))
 (set! offsy (min 0 offs3y))
 (set! dim2x (+ dim3x offs3x))
 (set! dim2y (+ dim3y offs3y))
 (set! newdimx (- (max dim2x dim1x) (min 0 offs3x)))
 (set! newdimy (- (max dim2y dim1y) (min 0 offs3y)))
 (gimp-image-resize image newdimx newdimy (- 0 offsx) (- 0 offsy))

 ; Layers anordnen
 (set! dim4x (car (gimp-image-width image)))
 (set! dim4y (car (gimp-image-height image)))

 (set! image4layer (car (gimp-layer-new image dim4x dim4y 0 "Hintergrund" 100 NORMAL)))
 (gimp-image-add-layer image image4layer 0)
 (gimp-drawable-fill image4layer 2)

 (set! image5layer (car (gimp-layer-copy drawable1 1)))
 (gimp-image-add-layer image image5layer 0)
 (gimp-layer-set-opacity image5layer 100);
 (gimp-image-raise-layer-to-top image image3layer)

 (gimp-layer-resize-to-image-size image5layer)
 (gimp-layer-resize-to-image-size image3layer)

 (gimp-image-clean-all image)
 (gimp-image-undo-group-end image)
 (gimp-displays-flush)
)


(script-fu-register "script-fu-panorama2d"
                    _"<Image>/Script-Fu/Panorama/Panorama 2P"
                    "Fuegt zwei Bilder zusammen. Ueber zwei Referenzpunkte bei beiden Bilder wird eine Skalierung und Drehung berechnet. Gedacht eigentlich fuer Panorama, aber auch fuer das Zusammenfuegen von Bildern zur Manipulation geeignet..."
                    "Mathias Weitz"
                    "Mathias Weitz"
                    "13sep2004"
                    ""
                    SF-IMAGE       "Image"             0
                    SF-DRAWABLE    "Drawable" 0
                    SF-ADJUSTMENT _"Bild1: p1x"      '(10 0 20000 1 1 0 1)
                    SF-ADJUSTMENT _"Bild1: p1y"      '(10 0 20000 1 1 0 1)
                    SF-ADJUSTMENT _"Bild1: p2x"      '(10 0 20000 1 1 0 1)
                    SF-ADJUSTMENT _"Bild1: p2y"      '(90 0 20000 1 1 0 1)
                    SF-DRAWABLE      _"zweites Bild" 0
                    SF-ADJUSTMENT _"Bild2: p1x"      '(10 0 20000 1 1 0 1)
                    SF-ADJUSTMENT _"Bild2: p1y"      '(10 0 20000 1 1 0 1)
                    SF-ADJUSTMENT _"Bild2: p2x"      '(10 0 20000 1 1 0 1)
                    SF-ADJUSTMENT _"Bild2: p2y"      '(90 0 20000 1 1 0 1)

                    )
Würde mich über Feedback freuen.

Vorankündigung: Panorama 3P ist in der Vorbereitung. Im Unterschied zu Panorama 2P benutzt er drei Referenzpunkte.
Damit werden Fluchtperspektiven berücksichtigt. Die Grundidee dieses Scriptes beruht auf dem Prinzip der 'Scherung'...
__________________
meine Website
flashnfantasy ist offline   Mit Zitat antworten
 

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Gefunden Photoshop Effekte script MichaJo GIMP-Ressourcen 23 14.12.2005 08:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:51 Uhr.


Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.