Restruct (Ver. 0.6) / (Ver. 0.7) ist ein Filter, der versucht,
Strukturen im Bild ausfindig zu machen und 'falsche' Pixel
entsprechend zu ersetzen. Bei großen Werten für die
Parameter geht der Filter dabei nicht zimperlich mit dem Bild um,
läßt Pixel verschwinden und zeichnet andere einfach
hinzu. Im Extremfall bekommt das Bild den Touch einer
Animation.
Sind die Parameter richtig ausbalanciert, wird
Pixelrauschen (Mosquito-Noise) deutlich vermindert und das Bild
bekommt einen verbesserten Schärfeeindruck.
Die jetzige Version arbeitet ohne jede Assembler-
und SSE-Optimierung. Einige Verbesserungen sind da sicher noch
möglich - und ich hoffe, mir fallen nicht noch Dinge ein, die
den Filter langsamer machen ...
Für interlaced Material (also z.B. PAL)
empfehle ich folgendes Vorgehen:
A=AviSource("meinfilm.avi").ConvertToYUY2()
A.Bob(0,6).Restruct().SeparateFields().SelectEvery(4,0,3).Weave()
Auf meinem AMD 2400 erreiche ich damit eine
'Geschwindigkeit' von (schrecklich langsamen) 4 Bildern pro
Sekunde.
Es ist auch möglich, auf Bob() zu verzichten,
wobei man sich aber leichter Artefakte einhandelt, allerdings auch
besser entrauschen kann; und natürlich ist es dann auch
deutlich schneller.
A.SeparateFields().Restruct(0,7).Weave()
Zur Veranschaulichung der Arbeitsweise des Filters
habe ich einen kleinen Testfilm erstellt (testfilm.avi).
Die entsprechende avs-Datei könnte dann etwa so
aussehen:
V0=AviSource("testfilm.avi")
V1=V0.ConvertToYUY2().Restruct(0,15,24)
Interleave(V0,V1).PointResize(512,512)
Parameter:
Restruct(clip,tolerance,surr_var,intensity,threshold)
tolerance beeinflußt den Glätteeindruck des Bildes.
Für maximale Rauschbeseitigung sollte er auf 0 gesetzt
werden.
Vorgabewert: 0
surr_var betrifft die Genauigkeit der
Bildanalyse; kleine Werte (unter 15)
führen zu geringeren Bildveränderungen, aber auch zu
größerem Restrauschen. Arbeitet man mit Halbbildern
(also nach SeparateFields(), sollte der Wert auf ca. 7 gesetzt
werden.
Vorgabewert: 15
intensity beeinflußt den Suchaufwand und damit auch die
Verarbeitungsgeschwindigkeit des Filters. Sinnvolle Werte liegen
zwischen 8 und 32, wobei mir 16 als guter Kompromiß zwischen
Geschwindigkeit und Filterintensität erscheint.
Werte oberhalb 32 machen den Filter zwar langsamer, bringen aber
keine größere Veränderung mehr gegenüber dem
Wert 32.
Vorgabewert: 16
threshold ist
für alle die, die unbedingt ein Limit für die
Bildveränderung haben wollen; man könnte diesen Parameter
als Sicherheitsnetz gegen übermäßige
Bildverunstaltung betrachten. Die maximale Veränderung jedes
Pixels bleibt unterhalb des hier angegebenen Wertes.
Vorgabewert: 255
History
Version |
Beschreibung |
0.7 |
Durch
einige zusätzlich Arbeitsschritte konnte die Zahl der
entstehenden Bildfehler weiter gesenkt werden, jedoch ist das Ganze
nun um einiges langsamer. Der YV12-Teil ist immer noch deaktiviert. |
0.6 |
Nach
einigem Herumfeilen tut der Filter nun das, was ich
ursprünglich wollte; der Testfilm (testfilm.avi) zeigt die Arbeitsweise des
Filters. Der YV12-Teil arbeitet nicht fehlerfrei und wurde deaktiviert. |
0.5 |
einen
Format-Konversions-Fehler beseitigt, der dazu führte,
daß negative Werte falsch interpretiert wurden; das Ergebnis:
nun arbeitet der Filter sorgfältiger, aber auch
langsamer. |
0.4 |
kleinere
Fehler beseitigt, Verbesserte Glättung, immer noch
langsam |
0.3 |
jetzt auch
Unterstützung für YV12 weitere Verringerung von Artefakten, statt dessen leichter Weichzeichner-Effekt bei höheren Werten für surr_var |
0.2 |
Verringerung von Artefakten durch kleinere
Veränderungen Teilbarkeit der Bildweite durch 4 wird jetzt geprüft |
0.1 |
Erste
Veröffentlichung |