störende Pixel vor Transparentem Hintergrund entfernen

Marius Heil

Erfahrenes Mitglied
Hi,

ich hab hier ne Bilderserie von ca 150 Bildern bei denen ich bisher an die 80 freigestellt hab. Auf den Bildern ist eine Figur, die jedes mal ausgeschnitten wurde und mit transparentem Hintergrund gespeichert wird.
In ner Batchverarbeitung mag ich hinterher ein wenig Comicfilter usw drüberhauen, das Problem ist, dass beim Ausschneiden immer einzelne halbtransparente Pixel übrigbleiben die man sicher mit viel Aufwand wegradieren könnte.
am liebsten wärs mir jedoch, ich könnte mit irgendnem Filter rauskillen, sprich: alles entefernen was nur aus 2 zusammenhängenden Pixeln besteht.
Geht das mit Photoshop Bordmitteln oder gibts da was anderes?

marius
 
Welche Methode nutzt du denn, um die Figur auszuschneiden?

Soviel ich weiß, gibt es keinen Filter, der das Beschriebene macht.

Allerdings kannst du bei der Ebene mit der ausgeschnittenen Figur bei den Fülloptionen eine Kontur erstellen, die wird dann um alle Pixel, auch die mit viel Transparenz, erstellt, sodass du alle störenden Pixel leichter finden kannst.
 
Hi,

für den großteil benutz ich den Zauberstab, ist relati einfach, weil die Figuren vor rotem Hintergrund aufgenommen wurden. Störendes entferne ich dann noch mit dem Radiergummi, manchmal Magnetlasso, Auswahl, etc...
Ich hab ich internet ein Script gefunden, welches wie folgt aussieht:
PHP:
   Layer2Selection = function() 
   { 
      if( app.activeDocument.activeLayer.isBackgroundLayer ) return 

      var desc   = new ActionDescriptor() 
      var ref      = new ActionReference() 
      ref.putProperty( charIDToTypeID( "Chnl" ), charIDToTypeID( "fsel" ) ) 
      desc.putReference( charIDToTypeID( "null" ), ref ) 
      var ref1   = new ActionReference() 
      ref1.putEnumerated( charIDToTypeID( "Chnl" ), charIDToTypeID( "Chnl" ), charIDToTypeID( "Trsp" ) ) 
      desc.putReference( charIDToTypeID( "T   " ), ref1 ) 
      executeAction( charIDToTypeID( "setd" ), desc, DialogModes.NO ) 
   } 

   AddLayer2Selection = function() 
   { 
      if( app.activeDocument.activeLayer.isBackgroundLayer ) return 

      var desc   = new ActionDescriptor() 
      var ref      = new ActionReference() 
      ref.putEnumerated( charIDToTypeID( "Chnl" ), charIDToTypeID( "Chnl" ) , charIDToTypeID( "Trsp" ) ) 
      desc.putReference( charIDToTypeID( "null" ), ref ) 
      var ref1   = new ActionReference() 
      ref1.putProperty( charIDToTypeID( "Chnl" ), charIDToTypeID( "fsel" ) ) 
      desc.putReference( charIDToTypeID( "T   " ), ref1 ) 
      executeAction( charIDToTypeID( "Add " ), desc, DialogModes.NO ) 
   } 

   var doc          = activeDocument 
   var layersToClip   = doc.artLayers.length - 1      // don't count the background 
   doc.crop([0, 0, doc.width, doc.height])            // clear everything that is outside of the document's boundaries 

   doc.activeLayer      = doc.artLayers[0]            // start with top layer 
   Layer2Selection()                                 // and make the first selection 

   for( i = 1; i < layersToClip; i++)               // don't cound the top layer 
   { 
      doc.activeLayer = doc.artLayers[i]            // switch to next layer 
      activeDocument.quickMaskMode = true            // set the QuickMask mode 
      activeDocument.activeLayer.threshold(128)      // apply a mid grey threshold 
      activeDocument.quickMaskMode = false            // and get out of the QM mode 
      doc.selection.clear()                           // clear the layer of unwanted pixels 
      AddLayer2Selection()                           // add remaining pixels to the selection 
   } 

   doc.selection.deselect()                           // and clear the traces 
   doc.activeLayer = doc.artLayers[0]               // and select the top layer
Ich muss jedoch gestehen, ich habs nicht zum Laufen bekommen. Hab noch nie was mit Photoshop Skripts erstellt. Das Script spult sich zwar ab, aber Änderungen merk ich keine. Bin mir nicht sicher, ob es damit zusammenhängt, dass ich die deutsche Photoshopversion benutze.
Die Methode mit der Kontor hab ich auch teilweise benutzt, wär halt schöner gewesen, wenn ich mir da einige Arbeit ersparen hätte können, es dürften noch an die 200-300 Bilder sin, die ich machen muss.


Marius
 
Moin. Das Scipt läuft eigentlich (fast) perfekt. Es werden alle Pixel gelöscht, deren Transparenz >50% ist (Sollte ja sicher umgedreht sein.

Ich habe ein ähnliches roblem mal folgendermaßen gelöst (Das Prinzip ist äquivalent zum Script):

- per Strg+Klick auf die Ebene Auswahl erstellen
- Ebenenmaske hinzufügen
- Schwellenwert auf Ebenenmaske anwenden

Der einzustellende Schwellenwert hängt vom vorhaben ab. Bei 255 werden alle Pixel ausgeblendet, deren Deckkraft nicht 100% beträgt wodurch es natürlich auch zu harten Kanten kommt. Bei 128 (wie im Script) bleiben nur Pixel sichtbar, deren Deckkraft >50% ist etc.

Gruß hotschen
 
Hi,
die Idee ist super, dank dir, werd ich ausprobieren, das lässt sich tollerweise auch als Aktion umsetzen. Die Ebenenselektion funktioniert allerdings nur bis CS1, CS2 und 3 unterstützen STRG+Klick meines Wissens nach nciht mehr, kann ich das irgendwie umgehen?


Marius
 
Zurück