Sous-échantillonnage d'une image par un facteur entier

16

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.nn×n

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.

Styg Oldenbaum
la source
si vous n'avez pas d'expérience en traitement du signal, l'explication profane est la suivante: il existe de meilleures méthodes de sous-échantillonnage. Votre algorithme de sous-échantillonnage réduira techniquement la taille des pixels de l'image de N MAIS l'algorithme décrit ci-dessus sera considérablement dégradé en qualité par rapport à de meilleurs algorithmes de sous-échantillonnage.
Trevor Boyd Smith,

Réponses:

16

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.

sinc(X)=péché(πX)πX

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.


n×n

L'exigence minimale dans la correspondance des coordonnées est que

  1. Le suréchantillonnage d'une image contenant des valeurs aléatoires arbitraires par un facteur entier, puis le sous-échantillonnage par le même facteur entier, devrait donner la même image avec un changement numérique minimal.
  2. Le suréchantillonnage / sous-échantillonnage d'une image composée d'une seule valeur uniforme, suivie de l'opération opposée, devrait donner une image composée de la même valeur uniformément, avec des écarts numériques minimaux.
  3. L'application répétée de paires de suréchantillonnage / sous-échantillonnage devrait minimiser autant que possible le décalage du contenu de l'image.
rwong
la source
Que voulez-vous dire par la transformation de la fonction sinc étant "presque" 1 et 0 dans les régions respectives?
@Tim: Phénomène de Gibbs près de la fréquence de coupure du filtre sinc.
rwong
2
Le rééchantillonnage Sinc n'a de sens que sur les signaux qui sont perçus / traités dans le domaine fréquentiel, tels que l'audio. Les images sont perçues, au moins approximativement, dans le domaine spatial (ceci est discutable; il est possible qu'une certaine perception de motifs répétés se trouve dans le domaine fréquentiel) et toute transformation basée sur le domaine fréquentiel produit des distorsions désagréables (sonnerie, etc.) dans le domaine spatial. Fondamentalement, toute opération de convolution / linéaire avec des coefficients négatifs produira des artefacts désagréables, et toute opération avec tous les coefficients non négatifs produira un flou.
R .. GitHub STOP HELPING ICE
6

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.

R .. GitHub ARRÊTEZ D'AIDER LA GLACE
la source