93 votes

Quel est le meilleur algorithme de réduction d'échelle d'image (en termes de qualité) ?

Je voudrais savoir quel est le meilleur algorithme à utiliser pour réduire la taille d'une image matricielle. Par meilleur, j'entends celui qui donne les meilleurs résultats. Je connais l'algorithme bicubique, mais y a-t-il quelque chose de mieux ? Par exemple, j'ai entendu dire par certaines personnes qu'Adobe Lightroom possède une sorte d'algorithme propriétaire qui produit de meilleurs résultats que le bicubique standard que j'utilisais. Malheureusement, j'aimerais utiliser cet algorithme moi-même dans mon logiciel, et les secrets commerciaux soigneusement gardés d'Adobe ne suffiront pas.

Ajouté :

J'ai consulté Paint.NET et, à ma grande surprise, il semble que le Super Sampling soit meilleur que le bicubique lorsqu'il s'agit de réduire la taille d'une image. Cela m'amène à me demander si les algorithmes d'interpolation sont la bonne solution.

Cela m'a également rappelé un algorithme que j'avais moi-même "inventé", mais que je n'avais jamais mis en œuvre. Je suppose qu'il a également un nom (car quelque chose d'aussi trivial ne peut être l'idée de moi seul), mais je n'ai pas pu le trouver parmi les noms les plus courants. Super Sampling était celui qui s'en rapprochait le plus.

L'idée est la suivante : pour chaque pixel de l'image cible, calculez l'endroit où il se trouverait dans l'image source. Il se superposera probablement à un ou plusieurs autres pixels. Il serait alors possible de calculer les surfaces et les couleurs de ces pixels. Ensuite, pour obtenir la couleur du pixel cible, il suffirait de calculer la moyenne de ces couleurs, en ajoutant leurs surfaces comme "poids". Ainsi, si un pixel cible couvre 1/3 d'un pixel source jaune et 1/4 d'un pixel source vert, j'obtiendrais (1/3*jaune + 1/4*vert)/(1/3+1/4).

Il s'agirait naturellement d'un calcul intensif, mais il devrait être aussi proche de l'idéal que possible, non ?

Existe-t-il un nom pour cet algorithme ?

95voto

Old Pro Points 7826

Malheureusement, je ne trouve pas de lien vers l'étude originale, mais comme les directeurs de la photographie d'Hollywood sont passés de la pellicule aux images numériques, cette question s'est souvent posée. Quelqu'un (peut-être la SMPTE, peut-être l'ASC) a donc réuni un groupe de directeurs de la photographie professionnels et leur a montré des séquences qui avaient été redimensionnées à l'aide d'une série d'algorithmes différents. Les résultats ont montré que pour ces professionnels qui regardaient d'énormes films, le consensus était le suivant Mitchell (également connu sous le nom de Catmull-Rom de haute qualité) est le meilleur pour la mise à l'échelle et l'amélioration de la qualité. sincère est le meilleur pour la réduction d'échelle. Mais sinc est un filtre théorique qui va jusqu'à l'infini et ne peut donc pas être complètement implémenté, donc je ne sais pas ce qu'ils voulaient dire par "sinc". Il s'agit probablement d'une version tronquée de sinc. Lanczos est l'une des nombreuses variantes pratiques de sinc qui tentent d'améliorer la simple troncature et constitue probablement le meilleur choix par défaut pour la mise à l'échelle d'images fixes. Mais comme d'habitude, cela dépend de l'image et de ce que vous voulez : réduire un dessin au trait pour préserver les lignes est, par exemple, un cas où vous pourriez préférer mettre l'accent sur la préservation des bords, ce qui ne serait pas souhaitable pour réduire une photo de fleurs.

Un bon exemple des résultats de divers algorithmes se trouve à l'adresse suivante Cambridge en couleur .

Les responsables de fxguide assembler beaucoup d'informations sur les algorithmes de mise à l'échelle (ainsi que beaucoup d'autres choses sur le compositing et d'autres traitements d'images) qui vaut la peine d'être consultée. Ils incluent également des images de test qui peuvent être utiles pour effectuer vos propres tests.

ImageMagick dispose désormais d'une fonction guide complet sur le rééchantillonnage des filtres si vous voulez vraiment vous y intéresser.

Il est assez ironique de constater que la réduction d'échelle d'une image, qui peut théoriquement être réalisée parfaitement puisque vous ne faites que perdre de l'information, suscite plus de controverse que l'augmentation d'échelle, où vous essayez d'ajouter de l'information qui n'existe pas. Mais commençons par Lanczos.

25voto

Greg Dean Points 12048

Il y a Échantillonnage de Lanczos qui est plus lente que la méthode bicubique, mais qui produit des images de meilleure qualité.

18voto

R.. Points 93718

Le rééchantillonnage (bi-)linéaire et (bi-)cubique n'est pas seulement laid, il est aussi terriblement incorrect lorsqu'il s'agit de réduire l'échelle d'un facteur inférieur à 1/2. Ils entraînent un très mauvais repliement, semblable à celui que l'on obtiendrait en réduisant l'échelle d'un facteur de 1/2, puis en utilisant le rééchantillonnage du plus proche voisin.

Personnellement, je recommanderais le calcul de la moyenne des échantillons (de zone) pour la plupart des tâches de sous-échantillonnage. C'est très simple, rapide et presque optimal. Le rééchantillonnage gaussien (avec un rayon choisi proportionnellement à l'inverse du facteur, par exemple un rayon de 5 pour un sous-échantillonnage de 1/5) peut donner de meilleurs résultats avec une charge de calcul un peu plus importante, et il est plus solide sur le plan mathématique.

Une raison possible d'utiliser le rééchantillonnage gaussien est que, contrairement à la plupart des autres algorithmes, il fonctionne correctement (sans introduire d'artefacts/crénelage) à la fois pour le rééchantillonnage ascendant et descendant, tant que vous choisissez un rayon approprié au facteur de rééchantillonnage. Sinon, pour prendre en charge les deux directions, il faut deux algorithmes distincts : la moyenne de zone pour le sous-échantillonnage (qui se dégraderait en plus proche voisin pour le suréchantillonnage) et quelque chose comme le (bi-)cubique pour le suréchantillonnage (qui se dégraderait en plus proche voisin pour le sous-échantillonnage). Une façon de voir mathématiquement cette propriété intéressante du rééchantillonnage gaussien est que la gaussienne à très grand rayon se rapproche de la moyenne aréolaire, et la gaussienne à très petit rayon se rapproche de l'interpolation (bi-)linéaire.

8voto

Craz Points 3664

J'ai vu un article sur Slashdot à propos de Sculpture des coutures il y a quelque temps, cela pourrait valoir la peine d'y jeter un coup d'œil.

Le découpage des coutures est une im développé par Shai Avidan et Ariel Shamir. Cet algorithme modifie les dimensions d'une image non pas en par une mise à l'échelle o en supprimant intelligemment des pixels (ou en (ou en ajoutant des pixels) à l'image qui n'ont peu d'importance.

4voto

L'algorithme que vous décrivez s'appelle l'interpolation linéaire. C'est l'un des algorithmes les plus rapides, mais ce n'est pas le meilleur pour les images.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X