Numpy/Redimensionner Redimensionner L'Image
Je voudrais prendre une image et de modifier l'échelle de l'image, alors que c'est un tableau numpy.
Par exemple, j'ai cette image d'une bouteille de coca-cola:
bouteille 1
Qui se traduit par un tableau numpy de forme (528, 203, 3)
et je veux redimensionner à dire la taille de cette deuxième image:
bouteille-2
Qui a une forme de (140, 54, 3)
.
Comment puis-je changer la taille de l'image à une certaine forme tout en conservant l'image d'origine? D'autres réponses suggèrent de décapage tous les autres ou troisième ligne, mais ce que je veux faire est fondamentalement rétrécir l'image de la façon dont vous le feriez via un éditeur d'image, mais dans le code python. Existe-il des bibliothèques pour ce faire, dans numpy/SciPy?
- pouvez-vous montrer le code de votre tableau numpy?
- scipy.misc.imresize
- Obsolète, selon la page que vous avez lié.
- Je ne peux pas obtenir IntelliJ pour imprimer le tableau numpy entièrement, pour une raison quelconque, quand les sorties sont grandes, il met ... dans tous les temps, donc je ne peux voir qu'une partie de la matrice de sortie dans la console
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez installer
opencv
(c'est une bibliothèque utilisée pour le traitement d'images et vision par ordinateur), et l'utilisation de lacv2.redimensionner
fonction. Et par exemple utiliser:Ici
img
est donc un tableau numpy contenant l'image d'origine, alors queres
est un tableau numpy contenant le redimensionnée image. Un aspect important est lainterpolation
paramètre: il existe plusieurs façons comment redimensionner une image. Surtout depuis la mise à l'échelle vers le bas de l'image, et la taille de l'image d'origine est pas un multiple de la taille de l'image redimensionnée. Possible d'interpolation schémas sont:Comme avec la plupart des options, il n'y a pas de "meilleure" option dans le sens que, pour chaque redimensionner schéma, il existe des scénarios où une stratégie peut être préférée à une autre.
dsize
devrait êtredsize=(54, 140)
comme il faut x, puis y, où, comme un tableau numpy montre en forme de y, alors x (y est le nombre de lignes et de x est le nombre de colonnes)skimage.io.imread('image.jpg')
etskimage.transform.resize(img)
. scikit-image.org/docs/dev/install.htmlAlors qu'il pourrait être possible d'utiliser numpy seul pour ce faire, l'opération n'est pas intégré. Cela dit, vous pouvez utiliser
scikit-image
(qui est construit sur numpy) pour faire ce genre de manipulation de l'image.Scikit-Image mise à l'échelle de la documentation est ici.
Par exemple, vous pouvez effectuer les opérations suivantes avec votre image:
Ce sera prendre soin des choses comme l'interpolation, l'anti-aliasing, etc. pour vous.
anti_aliasing
drapeau, on dirait qu'il a été retiré de la version la plus récente de la 0.13.1Pour les gens viennent ici de Google à la recherche d'un moyen rapide pour sous-échantillonner les images dans
numpy
tableaux pour l'utilisation de l'Apprentissage automatique des applications, voici une super méthode rapide (adapté de ici ). Cette méthode fonctionne uniquement lorsque l'entrée dimensions sont un multiple de la sortie dimensions.Les exemples suivants sous-échantillonner de 128x128 pixels à 64x64 (ce qui peut être facilement changé).
Canaux dernière commande
D'abord des canaux de commande
Pour les images en niveaux de gris il suffit de changer le
3
à un1
comme ceci:D'abord des canaux de commande
Cette méthode utilise l'équivalent de max de la mutualisation. C'est le moyen le plus rapide pour faire ce que j'ai trouvé.
SciPy est
imresize()
méthode a été une autre méthode de redimensionnement, mais il va être supprimé de départ avec SciPy v 1.3.0 . SciPy se réfère à PIL image redimensionner méthode:Image.resize(size, resample=0)
taille – La taille demandée en pixels, en tant que 2-tuple: (largeur, hauteur).
resample – Une option de filtre de resampling. Cela peut être l'un de PIL.Image.Le plus PROCHE (utilisation la plus proche voisin), PIL.Image.BILINÉAIRE (interpolation linéaire), PIL.Image.BICUBIQUE (interpolation spline cubique), ou PIL.Image.LANCZOS (haute qualité filtre de décimation). Si omis, ou si l'image est en mode “1” ou “P”, il est défini PIL.Image.La plus PROCHE.
Lien ici:
https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.resize
cv2
et utilise une bonne fonction de redimensionnement au lieu de réimplanter un "sous-optimal" la fonction de redimensionnement qui n'est pire que le plus proche voisin de l'interpolation.Sûr. Vous pouvez le faire sans OpenCV, scikit-image ou PIL.
De redimensionnement d'Image est fondamentalement la cartographie, les coordonnées de chaque pixel de l'image d'origine à son redimensionnée position.
Depuis les coordonnées d'une image doivent être des entiers (pensez-y comme une matrice), si le mappé coordonner a des valeurs décimales, vous devez interpoler la valeur de pixel pour la rapprocher de celle de la position de type entier (par exemple, obtenir le pixel le plus proche de cette position est connue comme L'interpolation du plus proche voisin).
Tous vous avez besoin est une fonction qui fait cela interpolation pour vous. SciPy a
interpoler.interp2d
.Vous pouvez l'utiliser pour redimensionner une image dans un tableau numpy, dire
arr
, comme suit:Bien sûr, si votre image est en RVB, vous devez effectuer l'interpolation pour chaque canal.
Si vous souhaitez comprendre plus, je vous suggère de regarder Le Redimensionnement D'Images - Computerphile.
Si quelqu'un est venu ici à la recherche d'une méthode simple pour redimensionner, redimensionner une image en Python, sans l'aide d'autres bibliothèques, en voici un très simple image, la fonction de redimensionnement:
Exemple d'utilisation: le redimensionnement d'une (30 x 30) image de (100 x 200):
De sortie:
Cela fonctionne pour réduire/agrandir les images, et fonctionne très bien avec les tableaux numpy.