Ich muss ein Bild in einem Faktor von horizontal und vertikal ( , < ).s y s x s y 1
Ich möchte vor dem Downsampling einen endlichen Tiefpassfilter verwenden.
Wie soll ich die Tiefpassfilterparameter ( und das Gaußsche ) bestimmen , um sie als Funktion von und ?σ s x s y
Insbesondere bin ich für den Fall interessant, dass .
image-processing
gaussian
Ben-Uri
quelle
quelle
Antworten:
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.
quelle
quelle
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
Ich habe keine wirklich gute Antwort für Sie, aber hier sind zwei Optionen, die Sie ausprobieren könnten:
quelle
quelle