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

Hinweise
Alt 25.12.2005, 17:35   #1
flashnfantasy
Erfahrener Benutzer
 
Benutzerbild von flashnfantasy
 
Registriert seit: 14.05.2004
Beiträge: 380
Standard Farbauswahl in Abhängigkeit der Farbabweichung

Habe das erstemal versucht, mit einer Bluescreen (also einem einfarbigen Hintergrund) zu arbeiten, und habe das Problem, daß ich mit einem Color-Select den Hintergrund zwar erfasse, aber der Übergang von Hintergrund zum Gegenstand ist sehr hart und erzeugt eine sichtbare Kante.

Zu Anfang habe ich ein wenig mit dem Schwellwert gearbeitet oder die Auswahlmaske ein wenig weichgezeichnet.
Jedoch entstehen dann dort, wo der Übergang vom Hintergrund zum Objekt scharf sind, entweder Farbsäume, oder der scharfe Übergang wird weich.

Was ich also brauchte ist eine Blue-Screen-Funktion, die berücksichtigt, daß der Übergang von der Bluescreen zum Objekt nicht scharf, sondern meist eher weich ist.
Gerade bei Menschen und Haar bräuchte ich sowas wie einen angepassten weichen Übergang.

Das folgende Bild zeigt die Idee mal rein technisch.
Alles, was grün ist, soll ersetzt werden durch ein Muster.
Jedoch ist der Grünbereich unterschiedlich scharf abgegrenzt zu allen anderen Farben.

Galeriebild

Der Script ist ähnlich dem Color-Select, hat also auch die Schwäche, daß das ganze Image berücksichtigt wird.
Daher habe ich neben der ganz normalen Auswahl die Möglichkeit geschaffen, das Ergebniss als SW-Layer und SA-Layer darzustellen.

Das Anwenden des Scriptes geht folgendermaßen.
Man wählt mit der Pipette die Farbe der Bluescreen vom Bild.
Man ruft den Script auf, und legt als Ergebniss die BW-Darstellung.

Meist ist die Bluescreen nicht 100% eine Farbe, bedingt durch Vignettierung und verschiedene Helligkeiten muß man eventuell an mehreren Stellen der Bluescreen die Farbe nehmen und eine BW-Ergebniss des Scriptes anlegen.

Auf diese Weise bekommt man mehrere BW-Ergebnisse für unterschiedliche Stellen des Bluescreens.
Mit 'darken-only' kann man diese Ergebniss zu einem Ergebniss zusammenfassen.

Mit einem Pinsel und weißer Farbe entferne dann die Stellen im Bild, die fälschlicherweise dazugenommen wurden.
Das BW-Bild mache ich zu Maske, und die Maske zur Auswahl.
Mit der Auswahl füge ich dann den Hintergrund ein.

Code:
(script-fu-register "script-fu-colsel"
                    _"<Image>/Script-Fu/Selection/Fuzzy Color Select"
                    "selection depending on the difference from the foregroundcolor, low and highvalue are tresholds for the difference"
                    "Mathias Weitz"
                    "Mathias Weitz"
                    "25/12/05"
                    ""
                    SF-IMAGE "Image" 0
                    SF-DRAWABLE "Drawable" 0
                    SF-ADJUSTMENT _"Low-Value" '(0 0 1 0.05 0.05 2 0)
                    SF-ADJUSTMENT _"High-Value" '(0.1 0 1 0.05 0.05 2 0)
                    SF-OPTION     _"Result" '(_"Black White"
                                            _"Black Alpha"
                                            _"Selection")
                    )

(define (script-fu-colsel image drawable low high result)

  (set! theWidth (car (gimp-image-width image)))
  (set! theHeight (car (gimp-image-height image)))

  (set! worklayer (car (gimp-layer-copy drawable 1)))
  (gimp-image-add-layer image worklayer -1)
  (gimp-selection-none image)

  (set! highBorder (trunc (* 255 high)))
  (set! lowBorder (trunc (* highBorder low)))

  (set! bluescreen (car (gimp-layer-new image theWidth theHeight 1 "BlueScreen" 100 NORMAL)))
  (gimp-image-add-layer image bluescreen -1)
  (gimp-drawable-fill bluescreen 0)
  (gimp-layer-set-mode bluescreen 6)
  (set! bluescreen (car (gimp-image-merge-down image bluescreen 0)))
  (gimp-desaturate bluescreen)
  (gimp-levels bluescreen 0 lowBorder highBorder 1 0 255)
  (if (or (= result 1) (= result 2))
  (begin
    (set! bluescreenmask (car (gimp-layer-create-mask bluescreen 5)))
    (gimp-selection-load bluescreenmask)
    (gimp-layer-remove-mask bluescreen 1)
    (gimp-selection-invert image)
    (if (= result 1)
    (begin
      (gimp-edit-clear bluescreen)
      (gimp-selection-none image)
      (gimp-levels bluescreen 0 0 255 1 0 0)
    ))
    (if (= result 2)
    (begin
      (gimp-image-remove-layer image bluescreen)
    ))
  ))


  (gimp-image-set-active-layer image drawable)
  (gimp-image-clean-all image)
  (gimp-displays-flush)
)
__________________
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:45 Uhr.


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