Noise besser sichtbar machen?

  • Gibt es eigentlich ein Script das Noise besser sichtbar macht? Oder kann man sowas basteln?

    Hab das nur hier gesehen --> http://www.animemusicvideos.org/guides/avtechbeta/avspostqual.html

    [Blockierte Grafik: http://img19.myimg.de/lightorigd3be8_thumb.jpg]
    [Blockierte Grafik: http://img19.myimg.de/lightenhanced6e963_thumb.jpg]
    Leider steht da nicht dabei, wie er das erstellt hat. Hab jetzt auch nicht wirklich was gefunden, wie er das erstellt haben könnte.

    Würd mich halt interessieren, dadurch kann man ja dann Noise besser Filtern oder genauer? Denn wenn ich das 1. Bild sehe, würd ich da nichtmal Noise sehen und auf gut glück einfach einen Denoiser verwenden, wo ich nicht genau weiß ob das für die Quelle auch gut ist, find ich schon problematisch.

    Hoffe mir kann jemand helfen. ^^

  • Mir würde da durchaus ein Ansatz einfallen... man bräuchte dafür einen "Video-Equalizer", der in der Lage ist, das Video in Frequenzspektren zu verarbeiten und hohe Frequenzen zu verstärken, aber niedrige zu kompensieren. Ein Filter auf der Basis der DCT, FFT oder WLT wäre wahrscheinlich brauchbar.

    Kontraststeigerung allein würde nicht wirklich helfen; der Levels-Filter z.B. hätte zwar eine kontraststeigernde Wirkung, wenn man will, aber könnte immer nur einen schmalen Helligkeitsbereich anzeigen. Es fehlt eine Automatik, die in jedem Bereich des Bildes die mittlere Helligkeit "ignoriert" und nur Abweichungen von der Mitte - also den "lokalen Kontrast" - verstärkt.

    Ob das ganze nützlich ist, wage ich allerdings zu bezweifeln. Sicher kann man besser sehen, was ein Rauschfilter jeweils mit dem Rauschen anstellt; jedoch hat ein Bild mit übersteigertem Kontrast kaum Aussagekraft darüber, ob das ursprüngliche Bild störend wirkt.
    __

    [Blockierte Grafik: http://www.ligh.de/pics/j_p_smilie.gif] Ich hab da mal was vorbereitet...

    PHP
    LoadPlugin("VagueDenoiser.dll")
    original = AviSource("*.avi") # .NoiseFilter(...)
    filtered = VagueDenoiser(original, threshold=256, chromaT=256, method=2, nsteps=6)
    Subtract(original, filtered)
    Levels(96, 1.0, 160, 0, 255)

    Nicht perfekt, die Wavelet-Dekomposition schlägt immer noch durch - aber es zeigt doch den Ansatz der Idee: Subtrahiere eine sehr stark weichgezeichnete Version des Videos von der nach Wunsch gefilterten.

    Ein Threshold von 256 ist wahrscheinlich total übertrieben. Viel Spaß beim Spielen mit den Thresholds, der Methode, den nsteps, dem Level-Bereich (rund um 128 bei den Parametern Nr. 1 und 3)...

    Und mit dem Jean-Pütz-Smilie... ;)

  • Mit dem Level Filter hatte ich es kurz probiert, aber hatte nix anständiges rausbekommen, das es aber normalerweise nix gibt, was es sichtbarer macht, wusste ich garnicht.
    Ich dacht mir so selber, das man dann klarer sieht, was sich verändert. Hatte zwar ein Script, was Videos vergleicht, wo man dann auch sieht, was Filter A am Video verändert, was ich schon richtig gut fand, aber sowas extra für noise, was mir auch auf die sprünge hilft, hatte ich nicht.
    Dann müsste ich auch nicht 20+ Filter auf Kompression/Verwaschen der Quelle prüfen, weil ja auch jede Quelle anders ist und es mir dann schon schwer vorkam einen richtigen Denoiser zu verwenden.
    --------------

    Beispiel z.B. [Blockierte Grafik: http://img19.myimg.de/Testbebe4_thumb.jpg]

    So sieht das Ergebnis deines Scripts aus, wenn ich es Schwarz/Weiß mache.

    Wenn ich es mit FFT3dgpu filtere (als Beispiel) sieht man es schon, was sich ändert. Werde aber mit den Werten noch etwas rumspielen. Finds schon richtig gut, zwar nicht perfekt, aber ein super ansatz.

    Danke für das Script... :)

  • Wer die Diskrete Cosinus-Transformation, die Basis für JPEG und MPEG 1-4 ist, in ihrer grundsätzlichen Wirkung verstanden hat, dem wird auch der Ansatz klar:

    "Rauschen" ist der Anteil hoher Frequenzen. Wer nur Rauschen sehen will, der muss dafür sorgen, dass er nur hohe Frequenzen zu sehen bekommt. Weichzeichner löschen gerade die hohen Frequenzen aus dem Bild - entsprechend läßt die Subtraktion mit einem weichgezeichneten Video eben diese hohen Frequenzen übrig.

    Und dann erst kommt die Levelspreizung auf diesen Rausch-Rest zum Einsatz, dann sind nämlich auch großflächige Helligkeitsschwankungen (eben die niederfrequenten Bildanteile) durch eben diese Subtraktion reduziert worden. Ich vermute, bei dem Bild mit dem Hund wurde einfach nur eine Levelspreizung durchgeführt, es wurde dafür eben nach der mittleren Helligkeit gesucht, bis es vernünftig aussah.

    Jetzt kommt es eigentlich nur noch auf den "Weichzeichner" an, wie geeignet der für das Vorhaben ist. Ich habe hier nur VagueDenoiser verwendet, weil dessen Wirkung schnell sehr drastisch sein kann. Gaußsche Weichzeichner mit großem Radius sind vielleicht geeigneter - mal testen, wie z.B. ein "Resize : 4 * 4" im Vergleich abschneidet... mit Sicherheit erheblich schneller.

    PHP
    original = AviSource("*.avi")
    filtered = original.GaussResize(original.width/4, original.height/4).GaussResize(original.width, original.height)
    Subtract(original, filtered)
    Levels(96, 1.0, 160, 0, 255)

    Auf gute Zusammenarbeit:

    REGELN befolgen | SUCHE benutzen | FAQ lesen | STICKIES beachten

    Einmal editiert, zuletzt von LigH (20. November 2008 um 07:11)

  • Ahh muss noch viel lesen, aber die erklärung ist gut, danke.

    Das neue Script find ich jetzt nicht so sonderlich gut, da die Höhe/Breite durch 4 Teilbar sein muss, aber das Script ist gut.

    [Blockierte Grafik: http://img19.myimg.de/hme7825_thumb.jpg]

    Da du den Ansatz ja gut erklärt hast, könnte man ja auch Theoretisch mit dem FFT3dgpu/Filter nur die Hohen Sigma Werte filtern? Also für den Gaußsche Weichzeichner.
    z.B. Sigma=3, sigma2=0, sigma3=0, sigma4=0
    [Blockierte Grafik: http://img19.myimg.de/fft8cbd9_thumb.jpg]
    Oder wäre das wieder völlig falsch gedacht?

    Aufjedenfall werd ich mich mal nach deinem 1. Script richten.

  • Das neue Script find ich jetzt nicht so sonderlich gut, da die Höhe/Breite durch 4 Teilbar sein muss...

    Warum?! Die Originalgröße wird doch wiederhergestellt, egal ob die ein Vielfaches von 4 war. Und beim Verkleinern wird doch wohl gerundet, nicht wahr...

    Da du den Ansatz ja gut erklärt hast, könnte man ja auch Theoretisch mit dem FFT3dgpu/Filter nur die Hohen Sigma Werte filtern?

    Wahrscheinlich ja. Hätte ich keine Schwierigkeiten gehabt, die FFTW3.dll zu laden, hätte ich das auch schon probiert.

  • Warum?! Die Originalgröße wird doch wiederhergestellt, egal ob die ein Vielfaches von 4 war. Und beim Verkleinern wird doch wohl gerundet, nicht wahr...

    Öhm das Video ist 704x396 (einfach nur ein Test) und ich bekomm beim 2. Script Fehlermeldung "YV12 destination height must be multiple of 2"

    Hm, hatte ich wohl selber nicht richtig gelesen, aber ein vielfaches von 2 in der Höhe. 396, wäre ja ein vielfaches von 2.

    Also gaussresize(original.width/4, original.height/4).GaussResize(original.width, original.height

    704/4 = 176 : 396/4 =99 <- dann war es wohl deswegen.

    Aber ist jetzt auch nicht wichtig. Wie gesagt, vielen dank, hier im Forum bekommt man echt gut hilfe. :)

Jetzt mitmachen!

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