Tiefpassfilterparameter für das Bild-Downsampling

11

Ich muss ein Bild in einem Faktor von horizontal und vertikal ( , < ).s y s x s y 1sxsysxsy1

Ich möchte vor dem Downsampling einen endlichen Tiefpassfilter verwenden.n×m

Wie soll ich die Tiefpassfilterparameter ( und das Gaußsche ) bestimmen , um sie als Funktion von und ?σ s x s yn,mσsxsy

Insbesondere bin ich für den Fall interessant, dass .sx=sy=1/2

Ben-Uri
quelle
Frage im Zusammenhang mit [der hier gestellten] [1] [1]: stackoverflow.com/questions/3149279/…
isrish
1
Danke, aber bei dieser Frage geht es nicht darum, wie die Filterparameter als Funktion des Downscaling-Faktors bestimmt werden.
Ben-Uri
Wie viel möchten Sie filtern? Was ist dein Ziel?
1
Ich möchte vor dem Downsampling einen Tiefpassfilter verwenden, um Aliasing zu vermeiden. Ich möchte so viele Informationen wie möglich ohne Aliasing erhalten.
Ben-Uri
1
Sie müssen sich die Fourier-Transformation des Filters ansehen, um zu wissen, wie gut die Aliasing-Frequenzen abgeschnitten werden, während die Frequenzen unter der Nyquist-Grenze des abgetasteten Ergebnisses bleiben. Die Transformation eines Gaußschen ist ein weiterer Gaußscher, was bedeutet, dass es keinen scharfen Cutoff gibt. Es gibt fast immer eine bessere Wahl.
Mark Ransom

Antworten:

4

Sie müssen über die Änderung der Nyquist-Frequenz zwischen beiden Bildern nachdenken. Wenn die Nyquist-Frequenz des Originalbildes N ist, hat das heruntergetastete Bild eine niedrigere Nyquist-Frequenz xN, wobei x mit dem Größenverhältnis zwischen dem endgültigen Bild und dem ursprünglichen Bild zusammenhängt. Sie müssten die räumlichen Frequenzen entfernen, die im Originalbild höher als xN sind, bevor Sie es herunterabtasten.

Das Leistungsspektrum eines Gaußschen im Bildraum ist auch ein Gaußscher im Frequenzraum. Wenn wir die zweite Dimension für einen Moment ignorieren, wird der Gaußsche Wert im Bildraum als exp (-x ^ 2 / s ^ 2) definiert, wobei x Ihre Pixel darstellt. Dies wird auf den Frequenzraum als exp (-w ^ 2 * s ^ 2) abgebildet, wobei w die Frequenz ist. Die Sigma-Parameter zeigen, dass ein breiter Gaußscher Wert im Bildraum einem schmalen Gaußschen Wert im Frequenzraum entspricht.

Sie möchten einen Sigma-Parameter wählen, der einen sehr niedrigen Wert im Frequenzraum bei der Frequenz ergibt, die der Nyquist-Frequenz des heruntergetasteten Bildes entspricht.

NoNameNo
quelle
Richtig, aber wie übersetze ich das in einen diskreten Faltungskern? (Dies war die Frage)
Ben-Uri
siehe die bearbeiten pls ...
NoNameNo
Danke, aber gibt es trotzdem eine Formel, um das Sigma als Funktion der maximalen Frequenz zu finden, die im Ausgabeergebnis enthalten sein sollte?
Ben-Uri
Ich kenne keine Formeln.
NoNameNo
1

nmσ

σσ23.37

theV0ID
quelle
0

Wenn Sie eine große Verkleinerung vorgenommen haben (z. B. 2x, 3x, 4x), können Sie eine Pixelmittelung durchführen, um ein gutes Anti-Aliasing zu erzielen. Aus diesem Grund verwendet Anti-Aliasing viel zusätzliche CPU / GPU, um Videospiele klarer aussehen zu lassen.

Da Sie von einem 1000x1000-Bild zu einem 707x707-Bild wechseln (nur ein Beispiel für den Skalierungsfaktor), haben Sie Recht, dass Aliasing ein Problem sein kann.

Zum Glück ist dies ein Problem, auf das viele Menschen bereits gestoßen sind und das eine Menge Arbeit geleistet hat, um es zu lösen. In vielen Fällen ist eine bikubische Interpolation der richtige Weg. Es gibt einige Beispiele dafür, wie die verschiedenen Interpolationsmethoden hier aussehen:

http://www.compuphase.com/graphic/scale.htm

In der Größenänderung von OpenCV sind mehrere dieser Methoden integriert:

http://opencv.willowgarage.com/documentation/cpp/geometric_image_transformations.html#cv-resize

Wenn Sie bereits mit mehreren dieser Interpolationsmethoden herumgespielt haben und diese nicht gut funktionieren, veröffentlichen Sie bitte eine Art Beispielquellbild und ein Beispielergebnisbild, das den Mangel zeigt. Wir werden dies benötigen, um das Problem zu diagnostizieren und eine gute Lösung zu finden.


quelle
Beachten Sie, dass die Pixelmittelung zwar schnell ist, aber nicht die ideale Lösung für die Qualität ist. Bei der Pixelmittelung wird effektiv ein Rechteckfilter angewendet. Im Frequenzraum entspricht dies der Multiplikation mit einer Sinc-Funktion, die mit Nulldurchgängen an den Harmonischen von Nyquist oszilliert. Dies hat zwei Probleme: 1. Es dämpft die Hochfrequenz, aber nicht so stark. 2. Es invertiert die Phase an jeder anderen Nebenkeule. Sowohl (1) als auch (2) können zum Aliasing beitragen.
Thang
0

Ich habe keine wirklich gute Antwort für Sie, aber hier sind zwei Optionen, die Sie ausprobieren könnten:

  • σ3σ
  • Wenn Sie bereit sind, feine Signalabtastberechnungen durchzuführen, warum dann nicht die Fourier-Transformation verwenden? Nehmen Sie die FFT Ihres Bildes, behalten Sie nur den Teil bei, der Ihrer Zielgröße entspricht, und invertieren Sie die Transformation. Dadurch wird ein Anti-Aliasing-Filter auf Ihr Spektrum angewendet. Wenn zu viele Artefakte (Wellen, Klingeln) für Sie vorhanden sind, wenden Sie sie auf Ihr Spektrum des Gaußschen Filters an, dessen Breite Ihrer Zielgröße entspricht.
Sansuiso
quelle
0

s=1/2

[1,2,1]T[1,2,1]
nbubis
quelle
Sie liegen falsch. Haben Sie einen Skalierungsfaktor von 0,25 vergessen? ... und wenn ja, ist dies eine häufige Wahl für s = 1/2, nicht 1 / sqrt (0,5).
Ben-Uri
Irgendwelche Kommentare zu @ Ben-Uris Einstellung? Das System kennzeichnet diesen Beitrag aufgrund der Länge als minderwertig. Bitte überlegen Sie, ob Sie es überarbeiten oder entfernen möchten.
Peter K.
1
ss2
ssσσsx,sy