AviSynth - geeignet für Bildbearbeitung?

  • Uiiihh... das sieht ja richtig gut aus, Archimedes! :cheers:

    Ich habe beim Overlay den Fehler gemacht, anstelle der Maske nur den unteren abgedunkelten Bildausschnitt mit "blend" oder einiger anderer Alternativen hinzugefügt zu haben. Dadurch veränderte sich auch die Farbe des Originals und der abgedunkelte Ausschnitt fügte sich nicht so reibungslos wie bei Deinem Ansatz. :so-nicht: Bzgl. des Coverbildes habe ich Deine Vorgehensweise schon ausprobiert und es sieht prima aus. Heute abend werde ich mir mal sämtliche hellen Seiten des Buch vornehmen.

    Soweit so gut. Was mir immer nur mit Probieren gelingt, ist die Heranziehung des richtigen Farbraumes. Gibt es eigentlich ein Script, welches automatisch den richtigen Farbraum und die erforderliche mod-Grösse, je nach Filter, auswählt ?

    Gruss

    PS: .. Wege nach Rom.... lol... gut gesagt...passt hier wie das Faust auf's Auge!

  • Soweit so gut. Was mir immer nur mit Probieren gelingt, ist die Heranziehung des richtigen Farbraumes. Gibt es eigentlich ein Script, welches automatisch den richtigen Farbraum und die erforderliche mod-Grösse, je nach Filter, auswählt ?


    Wenn man die Vorlagen verwendet, muss man sich diesbezüglich keine Gedanken machen. Eine Farbraumumwandlung und Größenanpassung findet nur statt, wenn sie auch wirklich benötigt wird.

  • Problematisch kann es eigentlich nur dann werden, wenn man außerhalb der Vorlagen einen Filter einsetzt, der nicht im RGB-Farbraum, sondern im YV12-Farbraum arbeitet. Ein YV12-Bild wird innerhalb des Programms immer in der doppelten Größe angenommen (die Vorlagen sind darauf abgestimmt). Ein YV12-Filter muss somit immer speziell gefüttert werden (Halbierung des Helligkeitskanals, getrennte Verarbeitung des Farbkanals etc.). Nach der Filteranwendung muss das Bild dann wieder auf die doppelte Größe gebracht werden. Anschließend muss der (bearbeitete) Farbkanal wieder zugeführt werden. Das packt man am besten in eine Funktion.

    Beispiel:

    Code
    function ff_Ylevels(clip input, int input_low, float gamma, int input_high, int output_low, int output_high) {  input.PointResize(input.Width / 2, input.Height / 2).Ylevels(input_low, gamma, input_high, output_low, output_high).PointResize(input.Width, input.Height).MergeChroma(input, 1)}

    Nun will man sicherlich nicht für jeden neu zu testenden YV12-Filter gleich eine passende Funktion bzw. Vorlage schreiben. Den Verlust von Chrominanzinformationen in Kauf nehmend, kann man sich auch wie folgt behelfen (wichtig sind die Zeilen vor und nach der Filteranwendung):

    Code
    Import("lib\FritzPhoto\FritzPhoto.avs")
    
    
    isYV12() ? YV12toRGB().ConvertToYV12(matrix="pc.601") : ConvertToYV12(matrix="pc.601")
    # YV12-Filter 1
    # YV12-Filter 2
    ConvertToRGB32(matrix="pc.601")

    Auf diese Weise kollidiert man nicht mit den bestehenden Vorlagen.

  • Hallo Archimedes1,
    ich habe ein paar Fragen...
    1: YV12toRGB() ist doch eigentlich YV12toRGB32(), also mit Alphamaske. Ich hatte einmal das "Problem" das div. Programme das PNG mit Alphakanal nicht lesen wollten oder besser gesagt Falsch darstellten.

    2: wenn ich die Zielauflösung 640x480 einstelle, warum kommt überall nur 600x480 raus? Quell ist 720x576

    3: noch ne techn. Frage: gibts eine Möglichkeit, diese Verabeitungslog zu sehen, bei mir geht das zu schnell auf die letzte Seite und da steht ja dann nix.

  • 1: YV12toRGB() ist doch eigentlich YV12toRGB32(), also mit Alphamaske. Ich hatte einmal das "Problem" das div. Programme das PNG mit Alphakanal nicht lesen wollten oder besser gesagt Falsch darstellten.

    Falls das RGB32-Format Probleme macht, braucht man nur das entsprechende Script – hier ImageWriterPNG – abzuändern.

    2: wenn ich die Zielauflösung 640x480 einstelle, warum kommt überall nur 600x480 raus? Quell ist 720x576

    Liegt ein Bild mit einer Auflösung von 720x576 vor, so entspricht das einem Seitenverhältnis von 45:36. Und genau dieses Seitenverhältnis wird wieder erzeugt. Das Bild ist dabei immer kleiner, gleich der angegebenen Zielauflösung. Für Vergrößerungen müsste man die Resize-Scripts entsprechend anpassen.

    3: noch ne techn. Frage: gibts eine Möglichkeit, diese Verabeitungslog zu sehen, bei mir geht das zu schnell auf die letzte Seite und da steht ja dann nix.

    Was meinst du mit Verarbeitungslog? Auf der letzten Seite werden eigentlich nur die momentan bearbeiteten Bilder angezeigt - mehr auch nicht.

  • Da die ganze Logik bewusst in den Scripts enthalten ist (am Anfang hatte ich die Berechnung des richtigen Seitenverhältnisses noch im Programm gelöst), bietet sich ein entsprechender Schalter in den Resize-Scripts an. Werde die Resize-Scripts daraufhin mal abändern. Im Programm bietet sich dann natürlich auch ein entsprechender Schalter an. Ansonsten ist das Programm "dumm wie Stroh" (was aber nicht so bleiben muss) - es reicht die Parameter nur weiter (durch Suchen und Ersetzen von Schlüsselwörtern).

  • Hat schon jemand Erfahrungen mit dem Script "Super Slow Sharpen" gesammelt? Beim folgenden Bild, welches mit Spline36Resize von 3367x2525 auf 1200x899 verkleinert wurde, habe ich mal ganz bewusst die Default-Einstellungen nur "geringfügig" geändert, um den Effekt zu zeigen.

    Original
    [Blocked Image: http://www.bildercache.de/thumbnail/20081121-022756-987.jpg]

    SSSharp(rad=0.25, ssw=true, strength=2.2, iter=1, ss=true, denoise=1)
    [Blocked Image: http://www.bildercache.de/thumbnail/20081122-122156-561.jpg]

    Edited 2 times, last by Archimedes1 (November 22, 2008 at 12:23 PM).

  • Hab' mal wieder ein kleines Update hochgeladen.

    Unter Einstellungen sind die Schalter "Seitenverhältnis beibehalten" und "Pixelmaße exakt einhalten" hinzugekommen. Da ich das Programm hauptsächlich zum Verkleinern und Nachschärfen verwende, habe ich LimitedSharpenFaster nun ebenfalls in den Einstellungen integriert (siehe Anlage). Für's Verkleinern und Nachschärfen muss man nun nicht mehr in den jeweiligen Scripts herumhantieren. Häufig benutzte Scripts können in der INI-Datei unter "Job List" hinzugefügt werden. Beim Starten des Programms wird die Jobliste dann mit diesen Scripts gefüllt. Ich habe hier mal das Script "FritzPhotoResize" eingetragen.

    Das soll aber auch nur eine Zwischenlösung sein. Der Benutzer sollte generell die Möglichkeit haben, entweder in den Scripts selber zu hantieren oder die Parameter mit Hilfe eines "Objektinspektors" bzw. "Scriptinspektors" zu bearbeiten.

  • Vielen Dank für Deine Updates, Archimedes!

    Ich werde mich demnächst wieder ein wenig mit der Überarbeitung einiger Bilder beschäftigen... dann besteht die gute Gelegenheit, Deine neuen Tools auszuprobieren. ;)

    Gruss

  • Eigenartig, wenn ich im Zusammenhang mit Supersampling die Parameter dest_x und dest_y innerhalb von LimitedSharpenFaster verwende, dann hat das Script so gut wie keine Wirkung mehr.

    Zwischen der Ausgabe von (siehe 1. Bild im Anhang):

    Quote


    ConvertToYV12()
    LanczosResize(640, 480)
    ConvertToRGB()

    und (siehe 2. Bild im Anhang):

    Quote


    ConvertToYV12()
    LimitedSharpenFaster(Strength=80, dest_x=640, dest_y=480)
    ConvertToRGB()

    besteht fast kein Unterschied. Kann mir das jemand erklären?

    Dagegen bewirkt die vorherige Verkleinerung den (für mich) erwarteten Effekt (siehe 3. Bild im Anhang):

    Quote


    ConvertToYV12()
    LanczosResize(640, 480)
    LimitedSharpenFaster(Strength=80)
    ConvertToRGB()

    Eigentlich will ich ja Mehrfach-Resizing (bei Verwendung von Supersampling) verhindern.

  • Wie groß (Pixel) war denn das Originalbild? Wenn man z.B. mit 'nem 10 Megapixel-Foto anfängt, darauf LSF anwendet und dann auf 640x480 verkleinert, dann wäre es kein Wunder, wenn man kaum einen Unterschied sieht. ;)

  • Na ja ... 2048 * 1.5 / 640 = 4.8.

    Bei annähernd 500% Supersampling kann ein 3*3 Kernel nicht mehr allzu viel ausrichten, erst recht nicht wenn [nur] eine 3x3-Umgebung zum Limitieren verwendet wird.

  • Danke dir! Supersampling macht hier also nur in einem begrenzten Skalierungsbereich wirklich Sinn.

    Die Sache ist nämlich die, im Script "FritzPhotoResize" verkleinere ich die Bilder zunächst immer auf die gewünschte Zielgröße. Anschließend wird LimitedSharpenFaster darauf angewendet. Wenn nun Supersampling zum Einsatz kommt, dann wird das betreffende Bild ja wieder hochskaliert. Vereinfacht sieht das so aus:

    Code
    LanczosResize(640, 480)LimitedSharpenFaster()

    Demnach müsste die folgende Variante doch besser sein?

    Code
    LanczosResize(Round(640 * 1.5), Round(480 * 1.5))
    LimitedSharpenFaster(ss_x=1.0, ss_y=1.0, dest_x=640, dest_y=480)
  • Eben so, genau.

    LS/F ist da vllt. etwas unelegant angelegt. Es wäre meistens besser, wenn die Supersampling-Faktoren relativ zur Zielgröße arbeiten würden, statt relativ zur Eingangsgröße.
    Wenn mich nicht alles täuscht, wurde das vor urewigen Zeiten schon mal angesprochen, in einer Diskussion mit Soulhunter.

    Moment ...

    Die sehr aufwändige Änderung in LSF:

    Code
    xxs=round(ox*ss_x/8)*8yys=round(oy*ss_y/8)*8

    wird zu

    Code
    xxs=round(dest_x*ss_x/8)*8
    yys=round(dest_y*ss_y/8)*8

    Wenn man eine Zielauflösung != Eingangsauflösung vorgibt, wären die ss_x/y-Faktoren somit relativ zur Zielauflösung, was Sinn macht. Ohne spezielle Angabe von dest_x/y ändert sich nichts, was auch Sinn macht.

    Edited once, last by Didée: 20 Edits für 3 Tippfehlexiuztrr. (January 12, 2009 at 10:56 PM).

  • In meinem Fall - ohne einer Änderung in LSF - würde ich dafür sorgen, dass LSF mit einer Eingangsgröße von (dest_x x ss_x) x (dest_y x ss_y) und mit ss_x=ss_y=1 angesteuert wird. Werde die Scripte mal daraufhin abändern.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!