Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
841 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Etendre un mask (image) progressivement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Etendre un mask (image) progressivement

n°2465573
azubal
Posté le 06-03-2024 à 13:36:37  profilanswer
 

Bonjour,
Je cherche un moyen d'étendre un mask (noir/blanc) mais de manière progressive (nuance de gris du blanc vers le noir) sur un nombre de pixels donné.
Voici un exemple (approximatif) :  
https://i.ibb.co/1JzVCvv/Sans-titre-2.png
 
L'idée est d'avoir une fonction en python qui prends l'image de gauche et qui calcule l'image de droite en lui donnant un nombre de pixel à etendre.
 
Je bloque sur ce problème depuis un moment et google ne m'aide guère :(

mood
Publicité
Posté le 06-03-2024 à 13:36:37  profilanswer
 

n°2465604
azubal
Posté le 06-03-2024 à 16:54:57  profilanswer
 

Bon, j'ai réussi à bricoler une implémentation qui donne un résultat satisfaisant mais c'est pas du tout optimisé car la fonction prends plus d'une seconde à s'exécuter sur une image de 768px :(

Code :
  1. def dilate_mask(mask, dilation_amt):
  2.     mask_out = mask.copy()
  3.     for i in range(dilation_amt):
  4.         x, y = np.meshgrid(np.arange(i + 1), np.arange(i + 1))
  5.         center = (i + 1) // 2
  6.         dilation_kernel = ((x - center)**2 + (y - center)**2 <= center**2).astype(np.uint8)
  7.         #dilation_kernel = np.ones((i+1, i+1))
  8.    
  9.         img_np_dilated = binary_dilation(mask, structure=dilation_kernel, iterations=2)
  10.         img_np_dilated_with_color = img_np_dilated * ((1 - (i / dilation_amt)) * 255)
  11.         img_np_dilated_mask = (mask_out == 0)
  12.        
  13.         mask_out[img_np_dilated_mask] = img_np_dilated_with_color[img_np_dilated_mask]
  14.     dilated_mask = Image.fromarray(mask_out.astype(np.uint8) * 255)
  15.     return dilated_mask, mask_out
  16.    
  17. def dilate_and_colorize(image_path, kernel_size):
  18.     img_np = np.array(Image.open(image_path).convert('L'))
  19.     img_np_dilated = dilate_mask(img_np, kernel_size)[1]
  20.    
  21.     return Image.fromarray(img_np_dilated)
  22.    
  23.    
  24. # Utilisation de la fonction
  25. image_path = "mask.png"
  26. kernel_size = 64  # Plus c'est grand, plus c'est long :(
  27. dilate_and_colorize(image_path, kernel_size).save("mask3.png" )

n°2465611
rat de com​bat
attention rongeur méchant!
Posté le 06-03-2024 à 18:12:06  profilanswer
 

Peut-être le terme que tu cherches c'est genre "filtre flou" / "flouter" / ... ?? :??:


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°2465614
azubal
Posté le 06-03-2024 à 18:18:11  profilanswer
 

J'ai pensé au filtre gaussien (qui est très rapide).
Le soucis du flou, c'est qu'il prends la moyenne des pixels (sur une taille donnée). Hors moi je souhaite étendre la zone. Autrement dit, la partie blanche doit rester blanche et s'étendre progressivement vers le noir dans la partie noir.

n°2465616
azubal
Posté le 06-03-2024 à 19:10:57  profilanswer
 

Ahhhh. Par contre ca m'a donné une idée :  
 
 
dilated = (input * dilatation binaire * (facteur * 2)))
output = (dilated * flou gaussien * facteur) | dilated


Message édité par azubal le 06-03-2024 à 20:13:07

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Etendre un mask (image) progressivement

 

Sujets relatifs
Compter le nb de polygones dans une imageRassembler plusieurs image en une seule
Image=point d’interrogation sur fond bleu.Afficher une image selon la date et avec lien hyper texte
[Résolu] Suivre un contour dans une imageRecherche et Remplacement devant une image
Extraire image lien avec Beautiful SoupPourquoi j'ai cette erreur lorsque je met une image dans un bouton ou
Comment charger une image ?Image décorative qui pixelise avec mise a l'échelle de windows
Plus de sujets relatifs à : Etendre un mask (image) progressivement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR