Lors du sous-échantillonnage d'une image par un facteur entier , la méthode évidente consiste à définir les pixels de l'image de sortie à la moyenne des n × n blocs correspondants dans l'image d'entrée.
Je me souviens vaguement d'avoir lu quelque part que cette méthode n'est pas optimale (désolé, je ne me souviens d'aucun détail)
Est-il vrai qu'il existe une meilleure méthode (et si oui, où échoue la méthode ci-dessus, même si elle semble "évidemment" correcte)? Je ne connais pas grand-chose au traitement du signal, cette question m'intéresse.
image-processing
sampling
Styg Oldenbaum
la source
la source
Réponses:
Le sous-échantillonnage d'une image réduit le nombre d'échantillons pouvant représenter le signal. En termes de domaine de fréquence, lorsqu'un signal est sous-échantillonné, la partie haute fréquence du signal sera aliasée avec la partie basse fréquence. Lorsqu'il est appliqué au traitement d'image, le résultat souhaité est de ne conserver que la partie basse fréquence. Pour ce faire, l'image d'origine doit être prétraitée (filtrée par alias) pour supprimer la partie haute fréquence afin qu'aucun alias ne se produise.
Le filtre numérique optimal pour supprimer la partie haute fréquence (avec la coupure la plus nette) est une fonction sinc . La raison en est que la représentation du domaine fréquentiel de la fonction Sinc est un 1 presque constant sur toute la région basse fréquence, et presque 0 constant sur toute la région haute fréquence.
La réponse impulsionnelle du filtre sinc est infinie. Le filtre Lanczos est un filtre sinc modifié qui atténue les coefficients sinc et les tronque une fois que les valeurs tombent à l'insignifiance.
Cependant, être optimal dans le domaine fréquentiel ne signifie pas être optimal aux yeux humains. Il existe des méthodes de suréchantillonnage et de sous-échantillonnage qui n'obéissent pas aux transformations linéaires mais produisent de meilleurs résultats que les transformations linéaires.
L'exigence minimale dans la correspondance des coordonnées est que
la source
Vous avez raison de dire que la moyenne de l'aire est assez proche de la "plus correcte" que vous pouvez obtenir, mais le problème est un comportement incohérent lors de la réduction d'échelle d'une ligne nette de largeur N d'un facteur N. Si l'emplacement de la ligne est aligné modulo N, vous obtiendrez une ligne nette de 1 pixel, mais si c'est à peu près N / 2 mod N, vous obtiendrez une ligne très floue (2 pixels de large à demi-intensité). Cela peut sembler très mauvais, et avec un gamma non linéaire, cela entraînera même des différences d'intensité. (Idéalement, tout rééchantillonnage doit avoir lieu avec un gamma corrigé pour une échelle d'intensité linéaire, mais en pratique, presque personne ne le fait parce que c'est vraiment cher.)
Si vous voulez améliorer cela, vous devez d'abord accepter le fait qu'il est impossible de réduire le flou dans certains cas, donc la seule façon d'obtenir une sortie uniforme consiste à augmenter le flou. L'idéal est d'utiliser un noyau gaussien de rayon supérieur à N / 2, plutôt qu'une fonction pas à pas, comme fonction de convolution avec l'image source. Cependant, si vous disposez déjà de votre implémentation de moyenne de zone N par N, il suffit d'appliquer une convolution de flou (1 / 4,1 / 2,1 / 4) au sous-échantillonnage résultant. image.
la source