Hallo,
Kenn jemand einen anständigen Filter (Avisynth-Plugin) der was ähnliches macht wie z.B. Adobe Photoshops "Unscharf maskieren" ?
Gruß Gunnar
Plugin - Unscharf maskieren ?
-
-
Von Tritical gibt's TUnsharp.dll, mit verschiedenen Schärfefiltern, auch Unscharfer Maskierung.
Und, "seit alters her", ist UnsharpMask() im großen WarpSharp-Paket enthalten. (WarpSharp.dll importieren, dann steht neben WarpSharp() auch UnsharpMask() und XSharpen() zur Verfügung.)
Im Prinzip kann man sich das auch selber sehr einfach zusammenbauen - Unscharfe Maskierung ist ja nix anderes als ein Gaussian Blur "verkehrt herum" (Vorzeichen der Operation wird umgedreht).
(Und wenn man's eh' schon selber zusammenbaut, z.B. mit BicubicResize und YV12Lutxy, dann lassen sich dabei noch ein paar vorteilhafte Kniffe anwenden ) -
Danke für die Links. Ich denke "TUnsharp.dll" reicht für mich aus ohne eine Aspirin nehmen zu müssen.
Gruß Gunnar -
TUnsharp.dll hab ich getestet. Finde ich nicht so richtig gut, wobei die GUI nett ist.
Wie kann man mit AviSynth selber Unscharf maskieren? Hat jemand ein Beispiel?
-
Avisynth "selber" hat keinen Filter zur Unscharfen Maskierung.
Wenn Dir TUnsharp nicht gefällt, nimm doch UnsharpMask aus dem WarpSharp Paket. Siehe Post#2 oben - ist zwar anderthalb Jahre alt, gilt aber immer noch.
Das Plugin "VariableBlur" von tsp hat auch noch einen Filter zur Unscharfen Maskierung. (Benötigt fftw3.dll im /system32 Verzeichnis von Windows.)
Vielleicht liegt das "Nichtgefallen" auch einfach daran, dass komprimierte Video-Dateien zumeist reichlich Artefakte haben, die dann durch die USM in voller Pracht erblühen ... ?
-
Avisynth "selber" hat keinen Filter zur Unscharfen Maskierung.
Das weiß ich. Du meintest nur, das man es mit den vorhandenen Filtern leicht selber bauen könnte. Deswegen hab ich nach einem Beispiel gefragt, wie das geht. -
Code
source = last GaussianBlur = source.YourGaussFilterOfChoice() UnsharpMasked = source.mt_adddiff( mt_makediff(source,GaussianBlur) , U=2,V=2)
So geht das. Wie gesagt, Unscharfe Maskierung ist einfach nur die "Umkehrung" eines Gaussian-Blur Filters. (Zumindest heute in der digitalen Welt, nicht im ursprünglichen Photo-Chemischen Original.)
Als Blur-Filter kann man nehmen, was einem gerade passt. Blur(1) ist der einfachste, für eine Unschärfemaskierung mit Radius=1.
Für größere Radii kann man BinomialBlur() (schnell) oder GaussianBlur() (langsam) aus dem genannten VariableBlur - Paket nehmen. Allerdings kann man dann auch gleich den dort integrierten Schärfungs-Filter nehmen, kommt aufs gleiche raus.Für eine nicht völlig exakte (aber meist hinreichend genaue) und dafür sehr schnelle Variante kann man auch
BicubicResize(x_klein,y_klein, .33,.33) .BicubicResize(x_orig,y_orig, 1,0)
als Annäherung eines Gauss-Filters heranziehen. Eine entsprechende Funktion hatte ich schon vor laaanger Zeit hier und da gepostet ... hab' jetzt nicht nur keine Lust, sondern auch keine Zeit (muss nämlich gleich weg, Arzttermin) zum 'rauskramen. Am besten also selber suchen ... es geht nichts über persönliche Erfolgserlebnisse
-
Für eine nicht völlig exakte (aber meist hinreichend genaue) und dafür sehr schnelle Variante kann man auch
BicubicResize(x_klein,y_klein, .33,.33) .BicubicResize(x_orig,y_orig, 1,0)
als Annäherung eines Gauss-Filters heranziehen.
Ich bin mal so frech und bringe "GaussResize" ins Spiel...
-
Jalogischdoch! (benutz' ich auch recht oft in diesem Sinne ... schau' doch z.B. mal in das z.Zt. aktuelle Script von TempGaussMC_beta1...)
Was mich an GaussResize ~etwas~ stört, ist dass die Korrelation bzw. "Skalierung" des Schärfe-Parameters "p" nicht so recht klar ist. Bei BicubicResize andererseits ist man mit 1./3,1./3 down und 1,0 up auf jeden Fall einigermaßen nahe an der Gauss-Verteilung dran.---
Alte Funktion, tut aber immer noch ihren Dienst:
-
Anderes Video, selbes Problem
Ich mach es nun so:
Code# Benötigt:# MaskTools - http://manao4.free.fr/mt_masktools.html# variable blur - http://forum.doom9.org/showthread.php?t=88645source = lastGaussianBlur = source.BinomialBlur(8,8,3,3,3)UnsharpMasked = source.mt_adddiff(mt_makediff(source,GaussianBlur))Overlay(source, UnsharpMasked, mode="blend", opacity=0.5)
Man muß das ursprungs Material schon um einiges Bluren, wenn man nicht das Rauschen verstärken will, sondern nur die groben Kanten.
Mit dem letzten Overlay() (opacity Parameter) kann man die Stärke beeinflussen...Je nach Material kann man noch das einfügen:
-
Zu dumm, letztens hat es noch funktioniert. Nun bekomme ich von den MaskTools ein:
ZitatEvaluate: System exception - Integer Divide by Zero
Weiß jemand warum?
-
Äh, nö, ich schon mal nicht. Wie genau sieht das Script aus? Ist der Input auch YV12?
Zu Deinem oben geposteten Script - ist in Ordnung, geht aber einfacher: anstelle von adddiff(makediff()) kann man ein einziges lutxy verwenden. Wenn man ein lutxy verwendet, dann kann man auch gleich einen Multiplikator mit einbauen, und somit den finalen Overlay() überflüssig machen:
-
Äh, nö, ich schon mal nicht. Wie genau sieht das Script aus? Ist der Input auch YV12?
Ah, prima, das war der Fehler! Mit einem ConvertToYV12() geht's wieder!
Sieht nett aus, funktioniert aber nicht wie erwartet. Ich sehe sowas wie eine Maske, aber kein zusammen gerechnetes Bild. -
Hoppala, hatte den Multiplikator verdappt ... Formel in voriger Post ist korrigiert, jetzt stimmt's.
-
Hab jetzt sowas gebastelt:
Code
Alles anzeigenfunction UnsharpMasking(clip source, int radius, float strength, bool debug) { # benötigt: # MaskTools - http://manao4.free.fr/mt_masktools.html # variable blur - http://forum.doom9.org/showthread.php?t=88645 # in YV12 konvertieren, falls es nicht schon YV12 ist. # (Wenn es kein YV12 ist, gibt es einen "Integer Divide by Zero" Fehler) c = IsYV12(source) ? source : source.ConvertToYV12() blured = c.BinomialBlur(radius,radius,3,3,3) final = debug ? mt_makediff(blured, c) : c.mt_lutxy(blured ,"x x y - " + string(strength) + " * +",U=2,V=2) return final }
-
Kleine Anmerkung:
Blindes ConvertToYV12() ist nicht empfehlenswert, insbesondere falls die Quelle doch "interlaced" (combed) ist. Leider kann AviSynth das nicht einfach so feststellen; man muss wissen, ob die Aufnahme interlaced aufgezeichnet wurde, wenn man von einer Quelle mit feinerer vertikaler Chroma-Auflösung (RGB24 / YUY2) in das planare YV12-Format heruntersampelt. Ansonsten kann es unangenehme Mischfarben geben, wenn U/V-Komplementärfarben sich voreinander vertikal bewegen (z.B. roter Ball vor blauem Himmel).
-
Also mein Quell Material ist interlaced. Es ist DV Material. Ich öffne die AVI Datei mit DirectShowSource()
info() zeigt mit an, das es YUY2 ist.
Sollte ich es dann besser so machen:
1. vor dem Filter mit ConvertToYV12() nach YV12 konvertieren
2. UnscharfFilter einsetzten
3. Nach dem Filter mit ConvertBackToYUY2() wieder zurück wandeln -
Ich öffne die AVI Datei mit DirectShowSource()
Wieso - hast du keinen DV-VfW-Codec für AviSource?
-
Au weia. Wenn der Input interlaced ist, dann ist eh' alles anders. Von der YUY2<->YV12 Konvertiererei einmal ganz abgesehen, die muss dann natürlich mit "interlaced=true" vorgenommen werden ...
... man sollte nun wirklich nicht mit einem Schärfe-Filter auf einen interlacten Frame (für LigH: einen combed Frame) 'draufgehen. Beim besten Willen nicht. Da in so einem Frame die vertikal-räumlich benachbarten Pixel in Wahrheit zeitliche Nachbarn sind, würde man damit ja eine Art "temporales Schärfen" durchführen. Und das wäre ziemlicher Käse.Daher: für interlacten Input *mindestens* dieses:
separatefiels() - XYSharpen - weave()
oder
bob(0,0.5) - XYSharpen - SeparateFields() - SelectEery(4,0,3) - weave()
-
Nein und nein
Also ich hab keinen wfv DV Codec installiert. Deswegen geht AVISource nicht.
Ich pansche auch nicht im interlace Material rum. Mein Skript sieht im groben so aus:
Code
Alles anzeigenDirectShowSource("FooBar.avi") UnfoldFieldsVertical() TemporalSoften(1, 4, 6) UnsharpMasking(8, 0.5, false) FoldFieldsVertical() Load_Stdcall_plugin("c:\AviSynth 2.5\plugins\yadif.dll") Yadif() fft3dfilter(sigma=3, plane=4, sharpen=0.6, ncpu=4)
UnfoldFieldsVertical() und FoldFieldsVertical() kommen von http://avisynth.org/stickboy/ :
http://www.afterdawn.com/guides/archive…rial_page_6.cfm
http://avisynth.org/stickboy/jdl-interlace.avsi
http://forum.doom9.org/showthread.php?s=&threadid=59029 -
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!