Sans qu'il n'y ait de barres noires, je veux dire. 1080 n'est pas un multiple de 768, donc y a-t-il une sorte de perte de données?
Sans qu'il n'y ait de barres noires, je veux dire. 1080 n'est pas un multiple de 768, donc y a-t-il une sorte de perte de données?
Réponses:
En substance, une image est un groupe d'échantillons ponctuels (lire Un pixel n'est pas un petit carré 3 ). Lorsque vous transformez ou redimensionnez l'image, vous devez la rééchantillonner. Donc, ce que vous faites, théoriquement, c'est de prendre les échantillons ponctuels et de les convertir en une fonction continue. Ensuite, vous échantillonnez cette fonction continue et reconstruisez un signal. Donc, il y a deux ou trois phases différentes ici.
Notez qu'aucune de ces étapes n'a de forme fixe. En pratique, une fois optimisé, il est impossible de dire qu'il y a des étapes. La transformation ne doit pas vraiment être simple, il peut s'agir de cartographier la forme en spirale, etc.
Image 1 : Un signal 1-D reconstruit par différents filtres.
En pratique, on en sait beaucoup sur la reconstruction du signal dans le domaine du traitement du signal. Concevoir ces filtres et choisir le bon est une forme d'art en soi. Mais, en substance, le choix du filtre est un compromis entre le flou et la sonnerie . Bien sûr, l'algorithme a également d'autres qualités telles que le nombre d'instructions qu'il faut pour mettre en œuvre et la vitesse et la quantité de mémoire dont il a besoin, etc. Ce qui peut être très important dans les applications en temps réel ou intégrées.
Image 2 : Aperçu de l'ensemble du processus.
Il existe de nombreux algorithmes de mise à l'échelle et de réduction d'échelle disponibles pour mettre à l'échelle les images de toute résolution à toute autre résolution arbitraire. Chaque algorithme implique généralement un compromis entre efficacité, fluidité et netteté, avec différents degrés de chaque compromis pour différents algorithmes.
Consultez cet article Wikipedia pour de tels algorithmes et des exemples de tels algorithmes.
L'algorithme le plus connu (et utilisé) est l' algorithme d' interpolation bicubique . Il interpole entre des points 2D sur une grille rectangulaire. À l'aide de splines cubiques (ou interpolation cubique), il interpole d'abord sur une dimension (trouve la ligne / colonne interpolée), puis interpole la ligne / colonne interpolée dans l'autre dimension.
L'interpolation bilinéaire est similaire à l'interpolation bicubique, sauf que la première interpole à l'aide d'une fonction linéaire et ne peut interpoler qu'entre deux valeurs et que la seconde utilise une fonction cubique et peut interpoler entre quatre valeurs.
La fonction simple pour l'interpolation bicubique est la suivante:
f(f(p00, p01, p02, p03, y),
f(p10, p11, p12, p13, y),
f(p20, p21, p22, p23, y),
f(p30, p31, p32, p33, y),
x)
où (x, y) est la position interpolée et p [] [] est le tableau 2d représentant la grille 4 * 4.
Consultez ce lien pour plus d'informations et un exemple de code, ce qui aide vraiment beaucoup!
Bien que les autres réponses données soient correctes, je ne suis pas sûr qu'elles répondent entièrement à votre question. Afin de ne pas obtenir de barres noires, vous avez 2 options si la destination n'est pas la même forme (ou format d'image) que la source:
Il existe une autre option, mais elle ne correspond pas à vos critères - mettez à l'échelle uniformément, mais seulement jusqu'à ce qu'une dimension soit aussi grande que la destination. Dans ce cas, vous devez redimensionner à la fois horizontalement et verticalement 1,40625 pour obtenir un résultat de 1440x1080. Ceci est généralement appelé "échelle pour s'adapter".
Pour chacune de ces options, vous pouvez utiliser n'importe quel algorithme de mise à l'échelle répondant à vos besoins.