J'ai besoin de réduire l'échelle d'une image dans un facteur horizontalement et verticalement ( , < ).
Je veux utiliser un filtre passe-bas fini avant le sous-échantillonnage.
Comment dois-je déterminer les paramètres du filtre passe-bas ( et le gaussien ) pour l'obtenir en fonction de et ?
Plus précisément, je suis intéressant dans le cas où .
image-processing
gaussian
Ben-Uri
la source
la source
Réponses:
Vous devez penser au changement de fréquence de Nyquist entre les deux images. Si la fréquence de Nyquist de l'image d'origine est N, l'image sous-échantillonnée aura une fréquence de Nyquist inférieure, xN, où x est lié au rapport des tailles entre l'image finale et l'image initiale. Vous devez supprimer les fréquences spatiales supérieures à xN dans l'image d'origine avant de la sous-échantillonner.
Le spectre de puissance d'un gaussien dans l'espace image, est également un gaussien dans l'espace fréquentiel. Si nous ignorons un instant la deuxième dimension, la gaussienne dans l'espace image est définie comme exp (-x ^ 2 / s ^ 2), où x représente vos pixels. Ceci est mappé à l'espace de fréquence sous la forme exp (-w ^ 2 * s ^ 2), où w est la fréquence. Le ou les paramètres sigma montrent qu'un gaussien large dans l'espace image correspond à un gaussien étroit dans l'espace fréquentiel.
Vous souhaitez choisir un paramètre sigma qui donne une valeur très faible dans l'espace des fréquences à la fréquence qui correspond à la fréquence de Nyquist de l'image échantillonnée.
la source
Il a déjà été souligné que et m doivent être choisis en fonction de σ .n m σ
J'ai réfléchi à la meilleure façon de choisir . Voici mes considérations. tl; dr: J'ai peut - être fait une erreur, mais σ 2 ≈ 3,37 semble être un bon choix pour le sous-échantillonnage par le facteur 2.σ σ2≈ 3,37
la source
Si vous effectuez une réduction importante (disons 2x, 3x, 4x), vous pouvez faire la moyenne des pixels pour obtenir un bon anti-aliasing. C'est pourquoi l'anti-aliasing utilise beaucoup de CPU / GPU supplémentaires afin de rendre les jeux vidéo plus nets.
Puisque vous passez d'une image 1000x1000 à une image 707x707 (juste un exemple pour le facteur d'échelle), vous avez raison de penser que l'alias peut être un problème.
Heureusement, c'est un problème que beaucoup de gens ont déjà rencontré et ont fait pas mal de travail pour résoudre. Dans de nombreux cas, une interpolation bicubique est la voie à suivre. Voici quelques exemples de l'apparence des différentes méthodes d'interpolation:
http://www.compuphase.com/graphic/scale.htm
Le redimensionnement d'OpenCV intègre plusieurs de ces méthodes:
http://opencv.willowgarage.com/documentation/cpp/geometric_image_transformations.html#cv-resize
Si vous avez déjà joué avec plusieurs de ces méthodes d'interpolation et qu'elles ne fonctionnent pas bien, veuillez publier une sorte d'image source d'échantillon et d'image de résultat d'échantillon montrant le manque à gagner. Nous en aurons besoin pour diagnostiquer le problème et essayer de trouver une bonne solution.
la source
Je n'ai pas vraiment de bonne réponse pour vous, mais voici 2 options que vous pouvez essayer:
la source
la source