Ich schreibe ein Programm (Qt Widgets / C ++) zum Entfernen von Bildrauschen. Als Entrauschungsmethode habe ich die Methode der nicht lokalen Mittel gewählt . Diese Methode hat eine unglaubliche Qualität wiederhergestellter Bilder (deshalb ist sie die einzige Entrauschungsmethode in OpenCV), hat aber enorme Berechnungskosten, so dass ich viele modifizierte Varianten dieser Methode erstellt habe (einige mit Multithreading, einige mit Algorithmus). Aber ich habe ein Problem mit dem, der FFT betrifft
Ich habe alle Schritte dieses Artikels befolgt (nur eine Seite, 1430) und alles funktioniert perfekt, außer dem FFT-Teil, es gibt nur 2 Zeilen darüber in der Zeitung und ich kann nicht verstehen, wie man fft verwenden soll
Dieses Problem hat mich seit Monaten beschäftigt, jede Hilfe oder Einsicht wäre sehr dankbar.
Verkürzte Version der Frage: Wie kann ich schnell die summierte quadratische Differenz zweier Arrays auf dem Bild (eines oben und eines in der Mitte, Werte sind Farben) ermitteln? (O (n ^ 2) ist sehr kostspielig, es gibt viele dieser Arten von Operationen, wie oben in Papier angegeben, die über FFT mit O (n * log n) durchgeführt werden können (sagt, dass diese 2 Arrays irgendwie eine kreisförmige Faltung bilden) )
Antworten:
Der Trick im Papier ist der folgende:
Die Fourier-Transformation ist offensichtlich eine 2D-Transformation, da Sie mit 2D-Daten arbeiten. Was Sie für ein bestimmtes Patch erhalten, ist ein 2D-Array komplexer Werte.
Zusätzliche Bemerkungen
Meiner Meinung nach ist dieser Artikel nicht die beste NL-Mittel-Beschleunigungsstrategie. Experimente, die ich bereits 2007/2008 durchgeführt habe, zeigen, dass die Vorauswahl von Patches besser ist (sowohl hinsichtlich der Geschwindigkeit als auch der Qualität der Ergebnisse). Ich habe begonnen , diese Blogging über hier , aber leider für Zeit , die ich bin auf der Suche , die Beiträge zu beenden.
Die ursprünglichen NL-Mittel-Papiere erwähnen blockweise Implementierungen, die interessant sein können. Grundsätzlich gibt es zwei Möglichkeiten, NL-Mittel zu implementieren:
Die erste Impolementation ist der ursprüngliche Ansatz, da 2005 Speicher- und Multicore-CPUs teuer waren. Ich habe mich andererseits für die Nummer 2 der letzten Hardware in den letzten 2 Jahren entschieden. Dies hängt von Ihrer typischen Bildgröße ab und davon, ob Sie Domänentransformationen wie DFT / DCT berechnen möchten (wie im vorgeschlagenen Dokument und in BM3D).
quelle