Étant donné un tableau numpy contenant une image en niveaux de gris d'un objet segmenté. Le tableau numpy a des dimensions (32,32). L'arrière-plan de cet objet est codé sous forme de zéros, l'objet lui-même a un nombre compris entre (0,255). Exemple (avec les dimensions (7,7)):
# Input
> np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,1,2,3,0,0],[0,0,2,2,2,0,0],[0,0,1,2,3,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]], dtype=np.uint8)
array([[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 2, 3, 0, 0],
[0, 0, 2, 2, 2, 0, 0],
[0, 0, 1, 2, 3, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
L'objet dans le tableau numpy peut avoir une forme arbitraire. J'aimerais étirer (déformer) l'objet de sorte qu'il devienne un cercle, quelle que soit sa forme précédente. Le cercle doit remplir tout le tableau 32x32. Les valeurs doivent être interpolées linéairement. Exemple (simplifié, sans interpolation linéaire) :
# Desired output = Circle with linearly interpolated values
array([[0, 0, 0, 2, 0, 0, 0],
[0, 1, 1, 2, 3, 3, 0],
[0, 1, 1, 2, 3, 3, 0],
[2, 2, 2, 2, 2, 2, 2],
[0, 1, 2, 2, 3, 3, 0],
[0, 1, 2, 2, 3, 3, 0],
[0, 0, 0, 2, 0, 0, 0]], dtype=uint8)
Comment ferais-je cela. Existe-t-il peut-être une fonction OpenCV pour déformer les objets en cercles?
Divisons votre problème en 3 étapes :
Redimensionnez votre image en 32x32
Vous pouvez utiliser le cv2.resize()pour faire le travail pour vous. Il fera toute l'interpolation nécessaire pour donner à l'image la taille que vous voulez
square = np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,1,2,3,0,0],[0,0,2,2,2,0,0],[0,0,1,2,3,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]], dtype=np.uint8)
resized_image = cv2.resize(square, (32, 32))

Remappez votre matrice d'un carré à un cercle
Mathématiquement parlant, il existe de nombreuses façons de créer une transformation d'une matrice carrée en un cercle. Il y a un sujet très intéressant à ce sujet ici . En gros, il faut définir une fonction pour passer d'un ensemble de points [x, y]à un autre ensemble de points [u, v], une solution possible évoquée par Ch Fong est :
u = x √(x² + y² - x²y²) / √(x² + y²)
v = y √(x² + y² - x²y²) / √(x² + y²)
Vous pouvez utiliser cette équation avec cv2.remap()fonction pour obtenir la transformation souhaitée. Cependant, il existe un outil appelé squirclequi fait tout le travail pour vous ! En lisant leur doc, vous pouvez faire un code simple pour faire cette transformation :
Importer avec :
from squircle import to_circle
from PIL import Image
Appelez la transformation après avoir ouvert l'image :
circle = to_circle(square)

Couper les bords et redimensionner si nécessaire
Maintenant, il vous suffit de supprimer tous les zéros de votre matrice et de la redimensionner à nouveau pour que toutes les matrices 32x32 aient du contenu à l'intérieur. Une solution que vous pouvez utiliser est décrite ici où circlese trouve votre image remappée. Après avoir coupé toutes les lignes et colonnes initiales et finales qui sont toutes des zéros, vous devez le redimensionner à nouveau à 32x32.
coords = np.argwhere(circle)
x_min, y_min = coords.min(axis=0)
x_max, y_max = coords.max(axis=0)
b = cropped = circle[x_min:x_max+1, y_min:y_max+1]
resized_cropped_image = cv2.resize(cropped, (32, 32))

Exemple 1 - Utilisation de votre tableau :

Exemple 2 - Utilisation d'une autre image :

Vous pouvez trouver un Jupyter Notebook pour cet exemple dans ma page Github. Le code complet peut être vu ci-dessous
import numpy as np
import cv2
import matplotlib.pyplot as plt
from squircle import to_circle, to_square
from PIL import Image
square = np.asarray(Image.open('Picture.png').convert('L'))
#square = np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,1,2,3,0,0],[0,0,2,2,2,0,0],[0,0,1,2,3,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]], dtype=np.uint8)
resized_image = cv2.resize(square, (32, 32))
circle = to_circle(resized_image)
coords = np.argwhere(circle)
x_min, y_min = coords.min(axis=0)
x_max, y_max = coords.max(axis=0)
b = cropped = circle[x_min:x_max+1, y_min:y_max+1]
resized_cropped_image = cv2.resize(cropped, (32, 32))
fig, axs = plt.subplots(2, 2, figsize=(10,10))
axs[0, 0].imshow(square)
axs[0, 0].set_title('Original')
axs[0, 1].imshow(resized_image)
axs[0, 1].set_title('Resized to 32x32')
axs[1, 0].imshow(circle)
axs[1, 0].set_title('Remapped to cicle')
axs[1, 1].imshow(resized_cropped_image)
axs[1, 1].set_title('Trimmed')
Jana Duggar a été ouverte sur sa recherche de l'amour. Voici tout ce qu'elle a dit sur le sujet et sa fenêtre de mariage de cinq ans.
La star d'Outlander, Sam Heughan, a récemment révélé ce qu'il retirera du tournage pour se souvenir de Jamie Fraser, le rôle qui a fait de lui une star.
"She Loves You" a été écrite en une heure, enregistrée en une journée, et a été la chanson des Beatles avec l'une de leurs meilleures performances de leur carrière.
Dolly Parton et sa grand-mère Bessie avaient une relation spéciale. Grand-mère Parton était très malade, mais cela n'a pas empêché Dolly de lui faire des farces.
Les origines de l'islam remontent au début du VIIe siècle dans la péninsule arabique. L'islam a débuté dans la ville de La Mecque, où un homme nommé Mahomet, un marchand prospère issu d'une puissante tribu, reçut une révélation divine.
Vous pensez peut-être que le chêne ou le noyer sont résistants, mais en matière de bois les plus durs au monde, ils sont loin derrière.
L'océan regorge de beauté, mais il abrite aussi certaines des créatures marines les plus terrifiantes de la planète. Nombre de ces animaux vivent dans les profondeurs obscures et sous haute pression des abysses.
Que vous affrontiez des créatures hostiles ou vous prépariez pour des affrontements PvP, connaître les meilleurs enchantements d'épée dans Minecraft peut vous donner un avantage considérable. Enchanter vos épées vous permet d'infliger plus de dégâts, d'augmenter le butin des créatures et d'accroître leur durabilité.
« Enfants » laisse tomber un caméo de grand nom et des nouvelles dévastatrices
Ce RAV4 est déclaré en excellent état et est prêt pour un jeu de chaises musicales.
Des images de drones ont montré des pompiers semblant lutter pour éteindre l'incendie.
Eyes of Wakanda est directement lié au MCU, ainsi que des mises à jour sur X-Men '97, What If..., Daredevil, et plus encore.
La rédactrice en chef de longue date, qui a rejoint Vogue américain en 1988, a annoncé la nouvelle lors d'une réunion du personnel le jeudi 26 juin au matin.
Le pape François, chef de l'Église catholique et chef spirituel des quelque 1,3 milliard de catholiques à travers le monde, est décédé. Il avait 88 ans.
Ava Gardner a été mariée à Mickey Rooney et Frank Sintra, et a fréquenté plusieurs autres stars d'Hollywood. Voici un aperçu de l'histoire amoureuse d'Ava Gardner.
John Cleese a épousé sa femme, Jennifer Wade, en 2012. Voici tout ce qu'il faut savoir sur la femme de John Cleese, Jennifer Wade.
Ça me frappe tout à coup, comme c'est si souvent le cas C'est à nouveau le milieu du chemin <Non, pas celui du Pacifique, toi marron, celui du carnaval> Chaque gros titre fort… ..
En 2022, avec la sortie de GPT-3, la compétence en écriture semble devenir moins importante. Avec l'IA, les personnes ayant une mauvaise écriture peuvent également générer du personnel de qualité.
Dans le monde rapide et compétitif d'aujourd'hui, la carrière d'une personne joue un rôle important dans la croissance personnelle, la stabilité financière et la satisfaction globale de la vie. Cependant, de nombreuses personnes se retrouvent prises dans un cycle incessant de stagnation et d'insatisfaction, dépérissant progressivement dans leur vie professionnelle.
La semaine dernière, j'ai remarqué un communiqué de presse, envoyé via PressGazette (un site Web d'information britannique). L'article annonçait qu'Acast, la société d'hébergement et de publicité de podcasts de Scandi, dirigerait un consortium d'éditeurs "probablement les plus influents" du podcasting.