Paramètres de filtre passe-bas pour le sous-échantillonnage d'image

11

J'ai besoin de réduire l'échelle d'une image dans un facteur horizontalement et verticalement ( , < ).sXsysXsy1

Je veux utiliser un filtre passe-bas fini avant le sous-échantillonnage.n×m

Comment dois-je déterminer les paramètres du filtre passe-bas ( et le gaussien ) pour l'obtenir en fonction de et ?n,mσsXsy

Plus précisément, je suis intéressant dans le cas où .sX=sy=1/2

Ben-Uri
la source
question relative à [celle qui est posée ici] [1] [1]: stackoverflow.com/questions/3149279/…
isrish
1
Merci, mais cette question ne porte pas sur la façon de déterminer les paramètres du filtre en fonction du facteur de réduction d'échelle.
Ben-Uri
Combien voulez-vous filtrer? Quel est ton but?
1
Je souhaite utiliser un filtre passe-bas avant de procéder à un échantillonnage pour éviter l'aliasing. Je souhaite conserver autant d'informations que possible sans alias.
Ben-Uri
1
Vous devez regarder la transformée de Fourier du filtre pour savoir dans quelle mesure il réduira les fréquences de repliement tout en gardant les fréquences en dessous de la limite de Nyquist du résultat échantillonné. La transformation d'un gaussien est un autre gaussien, ce qui signifie qu'il n'y a pas de coupure nette. Il y a presque toujours un meilleur choix.
Mark Ransom

Réponses:

4

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.

NoNameNo
la source
D'accord, mais comment traduire cela en un noyau de convolution discret? (c'était la question)
Ben-Uri
voir les pls d'édition ...
NoNameNo
Merci, mais existe-t-il toujours une formule pour trouver le sigma en fonction de la fréquence maximale qui devrait être dans le résultat de sortie?
Ben-Uri
je ne connais aucune formule.
NoNameNo
1

Il a déjà été souligné que et m doivent être choisis en fonction de σ .nmσ

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 σ 23,37 semble être un bon choix pour le sous-échantillonnage par le facteur 2.σσ23,37

theV0ID
la source
0

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
remarquez que, bien qu'elle soit rapide, la moyenne des pixels n'est pas la solution idéale pour la qualité. la moyenne des pixels applique efficacement un filtre rect. dans l'espace des fréquences, cela équivaut à multiplier par une fonction sinc qui oscille avec des passages par zéro aux harmoniques de Nyquist. cela pose deux problèmes: 1. il atténue les hautes fréquences mais pas tant que cela 2. il inverse la phase à chaque autre lobe latéral. (1) et (2) peuvent tous deux contribuer à l'aliasing.
thang
0

Je n'ai pas vraiment de bonne réponse pour vous, mais voici 2 options que vous pouvez essayer:

  • σ3σ
  • si vous êtes prêt à faire des calculs d'échantillonnage de signal fins, alors pourquoi ne pas utiliser la transformée de Fourier? Prenez la FFT de votre image, ne conservez que la sous-partie qui correspond à votre taille cible et inversez la transformation. Cela appliquera un filtre anti-aliasing sur votre spectre. S'il y a trop d'artefacts (ondulations, sonneries) pour vous, alors appliquez sur votre spectre de filtre gaussien dont la largeur correspond à votre taille cible.
sansuiso
la source
0

s=1/2

[1,2,1]T[1,2,1]
nbubis
la source
Vous avez tort. Avez-vous oublié un facteur d'échelle de 0,25? ... et si c'est le cas, c'est un choix courant pour s = 1/2 et non 1 / sqrt (0,5).
Ben-Uri
Un commentaire sur la prise de @ Ben-Uri? Le système signale ce message comme de mauvaise qualité en raison de la longueur. Veuillez envisager de le réviser ou de le supprimer.
Peter K.
1
ss2
ssσσsX,sy