Accueil > Forum > > > > creer une mosaique à partir d'une image
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
|
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 AsString Dim colo As Color EndStructure
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 AsInteger Dim y AsInteger Dim col As Color EndStructurepour 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
|
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|