Quel est le meilleur algorithme de downscaling d'image (qualité-sage)?

Je veux savoir quel algorithme est le meilleur qui peut être utilisé pour réduire une image raster. Avec le meilleur, je veux dire celui qui donne les résultats les plus beaux. Je connais bicubic, mais y a-t-il encore quelque chose de mieux? Par exemple, j'ai entendu parler de certaines personnes Qu'Adobe Lightroom a une sorte d'algorithme propriétaire qui produit de meilleurs résultats que Bicubic standard que j'utilisais. Malheureusement, je voudrais utiliser cet algorithme moi-même dans mon logiciel, Adobe soigneusement gardée les secrets commerciaux ne feront pas l'affaire.

Ajouté:

J'ai vérifié Paint.NET et à ma grande surprise, il semble que le super échantillonnage est 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 (comme quelque chose de si trivial ne peut pas être l'idée de moi seul), mais je ne pouvais pas le trouver parmi les populaires. Super L'é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 superposerait probablement un ou plusieurs autres pixels. Il serait alors possible de calculer les aires 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 tant que "Poids". Donc, si un pixel cible couvrirait 1/3 d'un pixel source jaune et 1/4 d'une source verte pixel, je recevrais (1/3 * jaune + 1/4 * Vert)/(1/3 + 1/4).

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

Est-il un nom pour cet algorithme?

53
demandé sur Pokechu22 2008-12-22 00:40:56

6 réponses

Malheureusement, je ne trouve pas de lien vers l'enquête originale, mais comme les cinéastes hollywoodiens sont passés du film aux images numériques, cette question a été soulevée beaucoup, alors quelqu'un (peut-être SMPTE, peut-être L'ASC) a rassemblé un groupe de cinéastes professionnels et leur a montré des images qui avaient été rééchelonnées en utilisant un tas Les résultats étaient que pour ces pros regardant des films énormes, le consensus était queMitchell (également connu sous le nom de Catmull-Rom de haute qualité) est le meilleur pour l'élargissement et la sinc est le meilleur pour la mise à l'échelle vers le bas. 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 entendaient réellement par "sinc". Il se réfère probablement à une version tronquée de sinc. Lanczos est l'une des nombreuses variantes pratiques de sinc qui tente d'améliorer simplement le 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 ce que vous voulez: rétrécir un dessin de ligne 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 seraient indésirables lors de la réduction d'une photo de fleurs.

Il est un bon exemple des résultats de plusieurs algorithmes à Cambridge en Couleur.

Les gens de fxguide ont rassemblé beaucoup d'Informations sur les algorithmes de mise à l'échelle (avec beaucoup d'autres choses sur la composition et d'autres traitements d'image) qui est la peine de prendre un coup d'oeil. Ils comprennent également des images de test qui peuvent être utiles pour faire vos propres tests.

Maintenant, ImageMagick a un guide complet sur le rééchantillonnage des filtres si vous voulez vraiment y entrer.

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 n'existe pas. Mais commencez par Lanczos.

56
répondu Old Pro 2013-04-27 18:47:50

Le rééchantillonnage (Bi-)linéaire et (bi-)cubique ne sont pas seulement laid mais horriblement incorrect lors d'une réduction d'échelle d'un facteur inférieur à 1/2. Ils se traduiront par un très mauvais aliasing semblable à ce que vous obtiendriez si vous avez downscampled par un facteur de 1/2 puis utilisé le downsampling le plus proche voisin.

Personnellement, je recommanderais des échantillons de moyenne (area -) pour la plupart des tâches de sous-échantillonnage. C'est très simple et rapide et quasi-optimale. Rééchantillonnage gaussien (avec rayon choisi proportionnel à la réciproque du facteur, par exemple, radius 5 pour le sous-échantillonnage de 1/5) peut donner de meilleurs résultats avec un peu plus de surcharge de calcul, et c'est plus mathématiquement sain.

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 sous-échantillonnage (qui se dégraderait en voisin le plus proche pour le suréchantillonnage), et quelque chose comme (bi-)cubique pour le suréchantillonnage (qui se dégraderait en voisin le plus proche pour le sous-échantillonnage). Une façon de voir mathématiquement cette belle propriété du rééchantillonnage gaussien est que gaussien avec un très grand rayon se rapproche de la moyenne de surface, et gaussien avec un très petit rayon se rapproche de l'interpolation (bi-)linéaire.

12
répondu R.. 2010-10-24 04:23:27

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

Seam carving est une image redimensionnée algorithme développé par Shai Avidan et Ariel Shamir. Cet algorithme modifie les dimensions d'une image non par mise à l'échelle ou recadrage, mais plutôt par suppression intelligente des pixels de (ou ajout de pixels à) l'image qui porte peu d'importance.

7
répondu Craz 2008-12-21 22:20:47

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
répondu 2009-09-18 17:55:15

Est-il un nom pour cet algorithme?

Il pourrait être appelé" boîte "ou" fenêtre " rééchantillonnage dans la littérature. Il est en fait moins coûteux de 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 lorsque sous-échantillonné de plus de 1/2.

1
répondu Thilo Köhler 2011-06-08 15:40:40