web-dev-qa-db-fra.com

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

Je veux savoir quel algorithme est le meilleur qui peut être utilisé pour réduire la taille d'une image raster. Avec le meilleur, je veux dire celui qui donne les meilleurs résultats. Je connais les bicubiques, mais y a-t-il encore quelque chose de mieux? Par exemple, certaines personnes m'ont dit qu'Adobe Lightroom avait 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, donc les secrets commerciaux soigneusement gardés d'Adobe ne feront pas l'affaire.

Ajoutée:

J'ai vérifié Paint.NET et à ma grande surprise, il semble que le super échantillonnage soit meilleur que bicubique lors de la réduction d'une image. Cela me fait me demander si les algorithmes d'interpolation sont la voie à suivre.

Cela m'a aussi rappelé un algorithme que j'avais moi-même "inventé", mais jamais implémenté. Je suppose qu'il a aussi un nom (car quelque chose d'aussi banal ne peut pas être l'idée de moi seul), mais je ne l'ai pas trouvé parmi les plus populaires. Le super échantillonnage était le plus proche.

L'idée est la suivante: pour chaque pixel de l'image cible, calculez où il se trouverait dans l'image source. Il recouvrirait probablement un ou plusieurs autres pixels. Il serait alors possible de calculer les zones et les couleurs de ces pixels. Ensuite, pour obtenir la couleur du pixel cible, il suffit de calculer la moyenne de ces couleurs, en ajoutant leurs zones en "poids". Donc, si un pixel cible couvrait 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).

Ce serait naturellement beaucoup de calcul, mais il devrait être aussi proche de l'idéal que possible, non?

Y a-t-il un nom pour cet algorithme?

68
Vilx-

Malheureusement, je ne trouve pas de lien vers l'enquête originale, mais comme les directeurs de la photographie hollywoodiens sont passés du film aux images numériques, cette question s'est souvent posée, donc quelqu'un (peut-être SMPTE, peut-être l'ASC) a réuni un tas de directeurs de la photographie professionnels et leur a montré des images qui avait été mis à l'échelle en utilisant un tas d'algorithmes différents. Les résultats ont été que pour ces pros qui regardent d’immenses films, le consensus était que Mitchell (également connu sous le nom de Catmull-Rom de haute qualité) est le meilleur pour augmenter l'échelle et sinc est le meilleur pour réduire l'échelle. Mais sinc est un filtre théorique qui va à l'infini et ne peut donc pas être complètement implémenté, donc je ne sais pas ce qu'ils ont réellement voulu dire par "sinc". Il fait probablement référence à une version tronquée de sinc. Lanczos est l'une des nombreuses variantes pratiques de sinc qui essaie d'améliorer simplement la tronquer et est probablement le meilleur choix par défaut pour réduire les images fixes. Mais comme d'habitude, cela dépend de l'image et de ce que vous voulez: rétrécir un dessin au trait pour préserver les lignes est, par exemple, un cas où vous préférerez peut-être mettre l'accent sur la préservation des bords qui ne seraient pas les bienvenus lors du rétrécissement d'une photo de fleurs.

Il existe un bon exemple des résultats de divers algorithmes à Cambridge in Color .

Les gens de fxguide ont rassemblé beaucoup d'informations sur les algorithmes de mise à l'échelle (ainsi que beaucoup d'autres choses sur la composition et d'autres traitements d'images) qui valent le coup d'œil à. Ils incluent également des images de test qui peuvent être utiles pour effectuer vos propres tests.

Maintenant, ImageMagick a un guide complet sur les filtres de rééchantillonnage si vous voulez vraiment vous lancer.

Il est assez ironique qu'il y ait plus de controverse sur la réduction d'une image, ce qui est théoriquement quelque chose qui peut être fait parfaitement puisque vous ne jetez que des informations, que sur la mise à l'échelle, où vous essayez d'ajouter des informations qui ne le font pas. n'existe pas. Mais commencez par Lanczos.

67
Old Pro

Il y a échantillonnage Lanczos qui est plus lent que bicubique, mais produit des images de meilleure qualité.

19
Greg Dean

Le rééchantillonnage (bi) linéaire et (bi) cubique n'est pas seulement moche mais horriblement incorrect lors de la réduction d'échelle d'un facteur inférieur à 1/2. Ils entraîneront un très mauvais aliasing semblable à ce que vous obtiendriez si vous sous-échantillonniez d'un facteur 1/2 puis utilisiez le sous-échantillonnage du plus proche voisin.

Personnellement, je recommanderais des échantillons de moyenne (de surface) pour la plupart des tâches de sous-échantillonnage. C'est très simple et rapide et presque optimal. Le rééchantillonnage gaussien (avec un rayon choisi proportionnel à l'inverse du facteur, par exemple le rayon 5 pour un sous-échantillonnage de 1/5) peut donner de meilleurs résultats avec un surcoût un peu plus calculatoire, et il est plus sain mathématiquement.

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

14
R..

J'ai vu un article sur Slashdot à propos de Seam Carving il y a quelque temps, cela pourrait valoir la peine d'être examiné.

La sculpture de couture est un algorithme de redimensionnement d'image développé par Shai Avidan et Ariel Shamir. Cet algorithme modifie les dimensions d'une image non pas en mettant à l'échelle ou en recadrant, mais plutôt en supprimant intelligemment des pixels (ou en ajoutant des pixels) à l'image qui ont peu d'importance.

7
Craz

L'algorithme que vous décrivez est appelé interpolation linéaire et est l'un des algorithmes les plus rapides, mais n'est pas le meilleur sur les images.

4
user175680

Y a-t-il un nom pour cet algorithme?

Il pourrait être appelé rééchantillonnage "boîte" ou "fenêtre" dans la littérature. Il est en fait moins coûteux en calcul que vous le pensez.

Il peut également être utilisé pour créer un bitmap intermédiaire qui est ensuite utilisé par interpolation bi-cubique pour éviter l'aliasing lorsqu'il est sous-échantillonné de plus de 1/2.

2
Thilo Köhler