begin process at 2010 02 09 00:40:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Multimédia

 > 

Image & Vidéo

 > 

creer une mosaique à partir d'une image


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

creer une mosaique à partir d'une image

samedi 20 juin 2009 à 23:48:11 | creer une mosaique à partir d'une image

gillardg

Bonjour, je suis occupé depuis un moment sur un programme pour créer des mosaiques à partir d'une image un peu comme celle ci http://gillardg.deviantart.com/art/Ann-so-M-126477495 j'ai donc commencé par me créer une liste d'images (Pix), avec la couleur dominante, le problème que je rencontre c'est au moment de comparer le pixel de l'image principale avec la couleur dominante des images de (pix) impossible de trouver 2 couleurs les mêmes pourtant je m'étais dit qu'avec 10000 images ça devrait marcher :) quelqu'un aurait il une idée??
dimanche 21 juin 2009 à 00:04:43 | Re : creer une mosaique à partir d'une image

Mayzz

Membre Club
Heu... je pige rien du tout la, tu peux détailler ? Pas de source, pas de programme, pas de code, Juste une image...
 
Peut être sur www.devinsfrance.com ^^

Plus serieusement, expose mieux ton problème si tu veux de l'aide.

@+ Mayzz.

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
<

dimanche 21 juin 2009 à 09:30:21 | Re : creer une mosaique à partir d'une image

gillardg

Bonjour,
bonjour , je pensais que l'image était parlante :) 1 chaque image à une couleur dominante que l'on peut déduire avec un algo simple et arbitraire
je fais donc un tableau avec la structure thumb avec 10000 images :) 

'struct thumb = filename + dominant color

PublicStructure thumb
Dim FilePath As
String
Dim colo As Color
End
Structure

maintenant j'ouvre une image  on va l'apeler bmp que je mets dans un tableau de structure pixel
'struct pixel = position + color
PublicStructure pixel
Dim x As
Integer
Dim y As
Integer
Dim col As Color
EndStructure
pour créer une mosaique à partir de bmp : mosaic qui sera une représentation de bmp ou chaque pixel de l'image sera un carré de 50*50 ( thumb )
 mosaic sera donc 50 X plus grand
pour chaque pixel trouver dans tableau thumb couleur correspondante  ( c'est la que j'ai un problème car tout le reste fonctionne )

j'ai un tableau de structure contennant  10000 images qui ont chacune une couleur dominante
j'ai un tableau de pixel  contenant  10000 pixel ce qui me donnera une mosaic de 5000*5000
mais impossible de trouver les couleurs correspondantes
j'ai pensé peut être limiter le nombre de couleurs aux couleur WEB mais comment trouver la couleur web la plus proche de la couleur thumb et la couleur web la plus proche de la couleur pixel ??

mettre thumb dans mosaic  position =
pixel.x*50 pixel.y*50


a+
dimanche 21 juin 2009 à 11:29:36 | Re : creer une mosaique à partir d'une image

Mayzz

Membre Club

Tu souhaite donc remplacer un pixel par une image, ok

Petite correction 10000 * 50 = 500 000 ^^

Pour commencer, tu peux travailler avec les pixels en mode RGB, ou en mode HSB, le problème vien du fait qu'il va faloir substituer des couleurs, car ta palette d'image est restreinte par rapport au couleurs 24Bits (je ne compte pas le Plan Alpha).

Si tu part du principe qu'un pixel est composé de 3Bytes (toujours sans compter le plan A), un pour le Rouge, un pour le vert, et un pour le bleu, cela te donne donc une palette de 255 ^ 3 = 16 581 375, on est donc loin de ta palette de 10 000...

Chacune des images de ton tableau devra donc être marqué pour appartenir non pas à une couleur, mais à une fourchette de couleur à fin de réduire cette palette, pour le calcul, je ne sais pas vraiement, et je t'avoue que ca m'a l'air assez complexe, de plus je n'ai pas le temps de me penché la dessus...

Petit conseil, récupere les pixels de ton image sous forme de System.Drawing.Color, celle ci te donnerai les infos sur le RGB/HSB sans avoir de code à saisir. Pour moi le plus simple serait de travailler avec le HSB étant donné que tu va subtituer des couleurs, je pense qu'il faut prendre en compte que la teinte devrat être respecté, mais ton image aura moins de précision quand à la saturation et à la luminosité.
 

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
<

dimanche 21 juin 2009 à 12:23:43 | Re : creer une mosaique à partir d'une image

gillardg

salut , merci pour ta réponse , j'ai trouvé plus simple , une petite classe qui trouve la webcolor la plus proche, ça limite évidement le résultat mais c'est pas trop grave :) voici le code mais c'est pas parfait , à mon sens on peut faire encore mieux ' ' * This code is provided "as is". Without any warranty. ' Imports System Imports System.Collections Imports System.Drawing Imports System.Reflection Public NotInheritable Class ColorManagement Private Shared WebColors As ArrayList ''' ''' Returns the "nearest" color from a given "color space" ''' ''' The color to be approximated ''' The nearest color Private Sub New() End Sub Public Shared Function GetNearestWebColor(ByVal input_color As Color) As Color ' get the colorspace as an ArrayList WebColors = GetWebColors() ' initialize the RGB-Values of input_color Dim dbl_input_red As Double = Convert.ToDouble(input_color.R) Dim dbl_input_green As Double = Convert.ToDouble(input_color.G) Dim dbl_input_blue As Double = Convert.ToDouble(input_color.B) ' the Euclidean distance to be computed ' set this to an arbitrary number ' must be greater than the largest possible distance (appr. 441.7) Dim distance As Double = 500.0 ' store the interim result Dim temp As Double ' RGB-Values of test colors Dim dbl_test_red As Double Dim dbl_test_green As Double Dim dbl_test_blue As Double ' initialize the result Dim nearest_color As Color = Color.Empty For Each o As Object In WebColors ' compute the Euclidean distance between the two colors ' note, that the alpha-component is not used in this example dbl_test_red = Math.Pow(Convert.ToDouble((CType(o, Color)).R) - dbl_input_red, 2.0) dbl_test_green = Math.Pow(Convert.ToDouble((CType(o, Color)).G) - dbl_input_green, 2.0) dbl_test_blue = Math.Pow(Convert.ToDouble((CType(o, Color)).B) - dbl_input_blue, 2.0) temp = Math.Sqrt(dbl_test_blue + dbl_test_green + dbl_test_red) ' explore the result and store the nearest color If temp < distance Then distance = temp nearest_color = CType(o, Color) End If Next o ' done :-) Return nearest_color End Function ''' ''' Returns an ArrayList filled with "WebColors" ''' ''' WebColors ''' Many thanks to Julijan Sribar for his excellent article (http://www.codeproject.com/cs/miscctrl/MultiTabColorPicker.asp) Private Shared Function GetWebColors() As ArrayList Dim color As Type = (GetType(Color)) Dim propertyInfos() As PropertyInfo = color.GetProperties(BindingFlags.Public Or BindingFlags.Static) Dim colors As New ArrayList() For Each pi As PropertyInfo In propertyInfos If pi.PropertyType.Equals(GetType(Color)) Then Dim c As Color = CType(pi.GetValue(CObj(GetType(Color)), Nothing), Color) colors.Add(c) End If Next pi Return colors End Function End Class
dimanche 21 juin 2009 à 12:27:31 | Re : creer une mosaique à partir d'une image

gillardg

décidément la freetxtbox n'aime pas chrome , ou est ce le contraire ??? svp pourrais on avoir une freetextbox compatible chrome ??mdr je vais poser la question à google pour voir si on peut rendre chrome compatible avec la freetextbox
dimanche 21 juin 2009 à 13:02:02 | Re : creer une mosaique à partir d'une image

Mayzz

Membre Club
D'après une infos des admins le nouveau site est en cours de développement... (Ya pas que chrome, ya Opéra et IE8 en mode normal aussi...)

Sinon pour le code, d'après ce que je peux voir il convertit les couleurs 24/32 en couleurs web ? Mais cela ne va pas trop réduire ta palette ???

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
<

dimanche 21 juin 2009 à 13:27:06 | Re : creer une mosaique à partir d'une image

gillardg

ça réduit à 141 :( mais j'ai pas d'autres idées pour l'instant. si tu vois un moyen simple de faire une palette de disons 2560 couleurs, je suis preneur :)
dimanche 21 juin 2009 à 13:37:14 | Re : creer une mosaique à partir d'une image

Mayzz

Membre Club
ben heu... en fait non, mis à part ce que j'ai posté plus haut...

Sinon diviser les Bytes de couleur / 16, ce qui donne 256 / 16 = 16

Puis une palette de 4096 soit 16 ^ 3


                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
<

dimanche 21 juin 2009 à 13:56:19 | Re : creer une mosaique à partir d'une image

gillardg

ben oui l'idée est vraiment bonne :) faut juste trouver les images pour ce faire vais essayer :)


Cette discussion est classée dans : images, creer, partir, image, mosaique


Répondre à ce message

Sujets en rapport avec ce message

comment creer une image a partir d'une matrice en memoire [ par thebob ] je cherche un procede rapide qui permettrer de convertir la matrice d'une image en image(que je pourrais afficher a partir de la procedure paint pictu creer image a partir d une zone de texte [ par smoron ] salutje voudrais creer une image contenant le texte d un textbox.comment faire? Creer des images dynamiquement [ par Xneo ] Voila, je vous explique mon souci! Je suis sous VB6.0. J'ai une image "Image1" que j'aimerai dupliquer dynamiquement afin que chacune des images est l Lien pour images dan un dossier [ par medpurple ] Bonjour a touss voila j'ais un ptit prob je voudrai faire une chose pour mon module de news je voudrai crer un bouton apeler image pour incerer une im Lien pour images dan un dossier [ par medpurple ] Bonjour a touss voila j'ais un ptit prob je voudrai faire une chose pour mon module de news je voudrai crer un bouton apeler image pour incerer une im Ouvrir une image dans l'aperçu d'image windaube? [ par turlututuchapopointu ] Salut à tous,J'ai intégré dans ma base de donnée Access un aperçu d'image associé à mes enregistrements. Comme ce n'est qu'un aperçu, j'aimerai que l' Comment faire pour ... [ par Danyelk ] Salut,Comment faire pour definir un nom d'objet a partir d'une donnee string ?Je m'explique :Je recupere par une routine, le nom d'un objet image, dan Aide : Détection d'une image et récupération de sa position [ par Warnings ] Hello, Je débute en VB donc je ne sais même pas s'il est possible de faire cela. Je cherche en faite une source ou un bout de code qui permet de dét Creer repertoire a partir de la date de fichier [ par acornuez ] Bonjour, J'ai un repertoire avec plusieurs photos. Je souhaite ranger mes photos par date. Pour ce faire, il faudrait créer un repertoire par date et <tr> + images [ par kyript ] peut on charger une image dans une balise ? en je veut une seul image pour mes 6 cases et pas 6 images qui en font une


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,172 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales