Wellenmuster durch schlechte Skalierung korrigieren

  • In einem Beitrag im VideoHelp-Forum hat jemand DVD-Material, das anscheinend mit der falschen Methode vertikal skaliert wurde, wodurch es leichte, aber störend merkliche Wellen in der Chrominanz gibt. Nun dachte ich mir, man könnte die vermutlich mit DeFreq beheben; in der Analyse erkennt man auch sehr schön regelmäßige Frequenzmuster in der U- und V-Ebene:

    SeparateFields()
    DeFreq(fx=0.0, fy=-14.0, dx=3, dy=12.0, plane={1|2}, show=1, info=true)

    So, und hier stecke ich fest; was mache ich nun damit? Wie bekomme ich die optimalen Werte zur Korrektur heraus (fx=0.0 sollte offensichtlich sein, aber fy?), und wie wende ich sie letztendlich an?

    Vielleicht gibt es ja noch andere Verfahren, die für dieses Material einfacher zu verwenden sind?

  • fx und fy sind die Positionen im Frequenzspektrum, während dx und dy den Frequenzbereich darstellen.

    Sprich man hat z.B. ein Frequenzbereich von dx = 1.5 und dy von 2. Macht ein Rechteck Bereich von 1.5 und 2 im Gesamtspektrum auf der Position fx, fy.

    Mit show 1 oder 2 kannst du dir das entsprechend anschauen. Du kannst auch noch weitere Bereiche hinzufügen. Glaube 4 Stück an der Zahl.

    Der Bereich und Position ergeben letztendlich ein Muster, was ebenfalls mit Show=1 und 2 angezeigt wird. Dieses Muster ist dann selektiert und wird entfernt.
    Unter show= 1 bzw. auch 2, musst du nach bestimmten Mustern dann suchen. Wie diese aussehen, hängt von der Quelle immer ab und auch vom Typ der Frequenz die man sucht.

    Mit Plane sagst du an welchen Kanal er nehmen soll dafür. 0 = Y, 1 = U, 2 = V. Also auf welchen Kanal diese Frequenzmuster sind, die gelöscht werden sollen.

    Ich habe mir mal das Video angeschaut und den YUV Farbraum mal zerlegt. Ich denke der Fokus sollte auf den Y Kanal gelegt werden. Denn dieser gibt das Muster aus, was ihr bei Videohelp gesucht habt. Während der U und V Kanal absolut ok wirken.

    Wenn ich mir die Quelle direkt anschaue bemerke ich eher die Horizontalen Linien darin. Und die sind im Luma Kanal enthalten. Würde da eher sagen das man da nicht sonderlich viel mehr machen kann. Höstens mit nem starken Denoiser das Bild etwas stabilisieren. Ansonsten... kA... ich würde da eher ein ein Interlaced <-> Deinterlaced Verfahren anwenden mit Augenmerk auf den Y Kanal.

    Daher mein Vorschlag was das Video auch für mich annehmbar gemacht hat mit etwas Bluring und Schärfen des Y Kanals:

    Code
    clip0 = DGDecode_mpeg2source("G:\FFmpeg\Neuer Ordner (2)\test lines dvd quality.d2v", info=3)
    
    
    Y=ColorYUV(clip0,off_u=-256, off_v=-256).ColorYUV(off_u=128, off_v=128)
    U=UtoY(clip0)
    V=VtoY(clip0)
    y=y.blur(1.3).Sharpen(0.5)
    
    
    YtoUV(U, V, Y)

    Der Chroma blieb dabei unangetastet. Der muss ja nicht extra darunter leiden, weil der war ja ok meiner Meinung nach.

    Kannst es dir ja mal anschauen.

  • Ich habe mir mal das Video angeschaut und den YUV Farbraum mal zerlegt. Ich denke der Fokus sollte auf den Y Kanal gelegt werden. Denn dieser gibt das Muster aus, was ihr bei Videohelp gesucht habt. Während der U und V Kanal absolut ok wirken.

    Sehe ich nach Benutzung von DeFreq im Analysemodus nicht so. Hier mal Ergebnisse:

    Code
    SeparateFields()DeFreq(fx=0.0, fy=30.0, dx=2.0, dy=28.0, plane=[B]0[/B], show=1, info=true)


    dvdlines_Y.png

    Code
    SeparateFields()DeFreq(fx=0.0, fy=30.0, dx=2.0, dy=28.0, plane=[B][COLOR='#0000FF']1[/COLOR][/B], show=1, info=true)


    dvdlines_U.png

    Code
    SeparateFields()DeFreq(fx=0.0, fy=30.0, dx=2.0, dy=28.0, plane=[B][COLOR='#FF0000']2[/COLOR][/B], show=1, info=true)


    dvdlines_V.png

    Ich könnte nun nicht gerade behaupten, dass man in den U- und V-Kanälen keinerlei Muster erkennen kann.

    Vielleicht sollte ich noch einmal betonen, dass die Störungen gegenphasisch sind und erst nach SeparateFields() klar in ihrer Ausprägung als Sinuswelle erkennbar werden (das Verweben zu einem Vollbild mischt sie in einem Muster, das den Verlauf durch Aliasing schlechter erkennbar macht).

    Die allgemeinen Ausführungen habe ich nun verstanden. Mir ist klar, was fx/fy und dx/dy bedeuten. Was mir nicht klar ist: Woran erkenne ich, welche Werte dafür vernünftig sind (ich vermute mal, mindestens ein Rechteck festlegen, welches "Hotspots" in der Analyse möglichst eng einschließt, was aber bei fx=0.0 nicht leicht erkennbar ist), und welche Werte benutze ich dann zum Herausfiltern der Störung?

    Code
    DeFreq(fx=0.0, fy=1.4, sharp=200.0)

    mit den aus der Analyse abgeschriebenen Werten sorgt jedenfalls nicht für ein korrigiertes Video.

  • Also als ich das analysiert habe, hat eher der Y Kanal dieses Muster enthalten.

    [Blockierte Grafik: http://fs5.directupload.net/images/160613/zolsvteb.png]


    Und da das Muster Hauptsächlich im Y Kanal liegt und eine Art von Kinescope zu sein scheint das dazu auch noch ein sehr detailliertes Muster aufweisen tut, wird es recht schwer da mit DeFreq beizukommen.

    Den U und V Kanal kannste ausschließen an sich, da du diese Kanäle so massiv Bluren und Denoisen kannst wie du willst, bzw. sogar andere Farben geben mit BlankClip, das du trotzdem noch das Muster drin hast. Und das kommt definitiv massiv vom Y Kanal.

    Siehe: http://what-when-how.com/digital-imagin…imaging-part-1/

    Figur 11.4

    Würde sagen das das schon dem entsprechen würde. Nur das es bei dem jetzigen Video hier nur geradliniger ist. Weil es ist ja nun keine Wellenform ist, sondern bei genauerem Betrachten eher schnurgerade Linien von links nach rechts.


    Edit:
    An sich sieht das Video halt aus wie eine Mischung aus normalen Rauschen (Kann man im DeFreq beobachten) und diesen Linien die sich Spalte für Spalte ändern und so eine Art kurioses Interlacing bilden. Eventuell kann es eine Flächenform vom Regenbogeneffekt sein. Denn wenn man mit Selectodd bzw. Selecteven da ran geht nach SeparateFields, dann sieht man eigentlich das die Linien konstant sind und sich nicht bewegen. Einzig und allein das Rauschen (Noise) ist dann noch vorhanden.

    Und mehr erkenne ich da nicht.

    Vllt. hilft das ja schon mal zur Problemfindung.

    2 Mal editiert, zuletzt von SagaraS (13. Juni 2016 um 14:26)

  • Ich glaube, du hast noch nicht verstanden, worauf ich hinauswollte, als ich von unnötiger Skalierung im Interlaced-Modus gesprochen habe.

    Selbstverständlich sind die Störungen exakt horizontal. Wenn sie so entstanden sind, wie ich mir das vorstelle, müssen sie das zwangsweise sein, denn hier geht es nicht um eine analoge Störung eines analogen Videosignals, sondern um eine fehlerhafte digitale Verarbeitung im Wechsel zwischen fieldbasierter und framebasierter Betrachtung des Materials.

    Schau dir mal bitte das Ergebnis des folgenden Skriptes an:

    PHP
    even = BlankClip(10, 720, 240, "YUY2", 25, 1, color=$888888)
    odd = BlankClip(10, 720, 240, "YUY2", 25, 1, color=$777777)
    Interleave(even, odd) # fieldweises Flackern
    AssumeFieldBased()
    Weave() # Frames mit Nadelstreifen
    LanczosResize(720, 576) # Frames mit Interpolations-Wellen
    SeparateFields()
    BilinearResize(720, 240) # noch mehr Interpolation
    Weave()

    Ich hoffe, dir fällt auf, wie schwachsinnig das ist, was da passiert. Aber es ist wichtig, dass du nachvollziehen kannst, was Schritt für Schritt in dieser Demonstration berechnet wird.

    Nun vergleiche mal das entstehende Muster mit den Störungen im MPEG-Clip aus dem verlinkten Beitrag, am besten in vergrößerter Ansicht in VirtualDubMod (Rechtsklick in das linke Fenster, 200% oder 300%). Sieht das so ähnlich aus?

    Jetzt lass mal das letzte Weave() weg, und dann geh mal Feld für Feld durch das Demo. Hoch und runter springende Wellenmuster, richtig?

    Und jetzt schau dir mal den MPEG-Clip mit zusätzlichem SeparateFields() an. Hoch und runter springende Wellenmuster, richtig?

    Die Frequenz stimmt letztendlich nicht genau überein. Bei mir sind es 5 Zeilen (480:576 = 4:5), in dem MPEG-Clip was kleineres, rationalzahliges. Aber das Entstehungsprinzip dürfte gleich sein: Mehrfach skaliert, abwechselnd frameweise hin und fieldweise zurück (wobei dabei auch noch eine Abweichung der Helligkeit dazukam). Selbstverständlich gibt es durch eine solche Ursache bei feldweiser Betrachtung exakt vertikale Wellen (also exakt horizontal sichtbare Streifen).

  • Das Muster hab ich doch im Video auch schon gesehen.

    Und halt genau aus dem Grund wird das mit DeFreq sehr schwer das Gegenmuster heraus zu bekommen, damit es aufgelöst werden kann.
    Da es Geradlinig müssten alle fx bei 0 beginnen. Du wirst mehrere Frequenzen benutzen müssen.

    Ich teste ja auch schon mit Avspmod rum, weil ich mir das via den Slidern besser bedienen lässt:

    Code
    DeFreq(fx=[<'fx', 0.00, 100.00, 0.0>], fy=[<'fy', -100.00, 100.00, 100.0>], dx=[<'dx', 0.00, 50.00, 0.3>], dy=[<'dy', 0.00, 50.00, 16.67>],sharp=[<'sharp', 0, 100, 80>], fx2=[<'fx2', 0.00, 100.00, 0.0>], fy2=[<'fy2', -100.00, 100.00, 100.0>], dx2=[<'dx2', 0.00, 50.00, 1.96>], dy2=[<'dy2', 0.00, 50.00, 2.94>],sharp2=[<'sharp2', 0, 100, 55>], plane=[<'plane', 0, 2, 0>], show=[<'show', 0, 2, 1>], info=true)

    An sich muss nur die Gegenfrequenz gefunden werden. Sprich das Muster im Oberen Feld bei der Show = 1 bzw. 2 Ansicht müssen dem Muster entsprechen den du versuchst aufzulösen.

    Und dazu kann man mehrere Frequenzen angeben. max. 4.

    Und das Muster muss auf Plane 0 dann getilgt werden. Aber ich finde das es eine Sisyphusarbeit ist. Wenn das Plugin dann auch so arbeitet wie es beschrieben ist.

    Ich denke aber das man dieses "Brightness Interlacing" wie man es ja eigentlich nennt, nicht zu 100% entfernen kann. Das zeigt ja schon dein Beispiel mit dem erzeigten Muster. Reduzieren... ja, durch Verwischen oder oder oder... aber das eigentliche Problem ist da eher die Quelle.

    Wenn du es aber mit DeFreq hinbekommen solltest, was ich eher nicht so recht glaube das du da das Muster triffst, wäre das auf jedenfall gut, aber ist dann auch nur auf dieses Video dann bezogen nur. Das nächste Video kann schon wieder ein anderes Muster haben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!