PhotoFiltre

Le forum officiel de PhotoFiltre
It is currently 27 Sep 2022 3:26

All times are UTC + 1 hour [ DST ]




Post new topic Reply to topic  [ 10 posts ] 
Author Message
 Post subject: Comment Photofiltre détermine le nombre de couleur unique
PostPosted: 22 Jan 2022 15:27 
Offline
Nouveau(elle)
Nouveau(elle)|Nouveau|Nouvelle

Joined: 22 Jan 2022 15:22
Posts: 6
Gender: None specified
Bonjour,

Je programme un peu sous VBA pour Excel, et je cherche à savoir comme photofiltre détermine le nombre de couleur unique d'une image ?
En effet, j'ai essayé d'extraire les méta données d'une image, mais aucune de celles que j'ai trouvées n'indique cette donnée.
Alors je me demande si c'est un algorithme interne à photofiltre qui le calcul "en direct" ou est-ce une méta donnée particulière dont je ne sais comment l'extraire ?

Merci @ vous de vous penchez sur mon message.

@ bientôt

LouReeD


Top
 Profile  
 
 Post subject: Re: Comment Photofiltre détermine le nombre de couleur uniqu
PostPosted: 22 Jan 2022 17:59 
Offline
Administrateur(trice)
Administrateur(trice)|Administrateur|Administratrice

Joined: 28 Oct 2003 23:49
Posts: 12293
Gender: None specified
oui c'est algorithme interne qui nécessite pas mal de mémoire. Normalement il doit y en avoir sur le net vu que c'est là que je l'ai trouvé à l'époque...


Top
 Profile  
 
 Post subject: Re: Comment Photofiltre détermine le nombre de couleur uniqu
PostPosted: 23 Jan 2022 17:13 
Offline
Nouveau(elle)
Nouveau(elle)|Nouveau|Nouvelle

Joined: 22 Jan 2022 15:22
Posts: 6
Gender: None specified
Bonjour,

Merci pour la réponse et dommage pour moi ! :(
J'ai cherché sur le net, j'ai bien trouvé un site qui parle de ce genre d'algorithme mais le langage ne correspond pas à celui sur lequel j'aimerais l'utilisé...
Je cherche à le faire en VBA et ce que j'ai trouvé c'est sur Delphi (je crois) par contre c'est prometteur :
Quote:
En effet, elle est plus rapide, elle renvoie le résultat en (environ) 200 ms. Elle fonctionne sur le principe du cube de couleurs. C'est la solution "idéale" en terme de traitement d'image, mais le problème est la taille prohibitive d'un cube "complet" (16 Mo au bas mot !!), ou la lourdeur de gestion d'un cube optimisé (listes chaînées hyper lourdes).

Mais le principe m'est complètement inconnu...

Merci comme même, je vais essayé de comprendre et adapter.

@ bientôt

LouReeD


Top
 Profile  
 
 Post subject: Re: Comment Photofiltre détermine le nombre de couleur uniqu
PostPosted: 23 Jan 2022 18:03 
Offline
Administrateur(trice)
Administrateur(trice)|Administrateur|Administratrice

Joined: 28 Oct 2003 23:49
Posts: 12293
Gender: None specified
j'ai pas mes sources sous la main mais le principe est très simple :

1) on cré un tableau de Boolean à 3 dimensions correspondant au 16 millions de couleurs possibles. En partant du principe qu'on travaille sur des composantes R, G, B de 0 à 255 (8 bits)

Colors = Array [0..255, 0..255, 0.255] of Boolean

2) On initialise toutes le valeurs à False

3) On parcourt chaque pixel de l'image et on récupère les composantes R, G, B de notre pixel.

a) Si le tag dans notre tableau Colors[R, G, B] est à False, ça signifie que c'est une nouvelle couleur
==> on incrémente le nombre de couleurs et on passe le tag à True

b) si le tag est déjà à True on ne fait rien, ça signifie que la couleur est déjà comptabilisée


Top
 Profile  
 
 Post subject: Re: Comment Photofiltre détermine le nombre de couleur uniqu
PostPosted: 25 Jan 2022 0:17 
Offline
Nouveau(elle)
Nouveau(elle)|Nouveau|Nouvelle

Joined: 22 Jan 2022 15:22
Posts: 6
Gender: None specified
Bonsoir,

en fait sous VBA on peut récupérer la couleur par sa valeur "long" de 0 à 16777255.
il existe aussi un objet Dictionary qui n'accepte pas de doublon, donc à chaque pixel trouvé j'essaie de mettre sa couleur dans le dictionnaire, s'il n'existe pas, cela l'ajoute, si c'est un doublons, on passe à l'autre pixel. En fin de procédure il suffit de compter le nombre d'occurrence dans le dictionnaire. mais je trouve que cela ne va pas vite.

@ bientôt

LouReeD


Last edited by LouReeD on 25 Jan 2022 22:24, edited 1 time in total.

Top
 Profile  
 
 Post subject: Re: Comment Photofiltre détermine le nombre de couleur uniqu
PostPosted: 25 Jan 2022 11:12 
Offline
Administrateur(trice)
Administrateur(trice)|Administrateur|Administratrice

Joined: 28 Oct 2003 23:49
Posts: 12293
Gender: None specified
c'est clair que parcourir une liste à chaque insertion est très long voir inexploitable sur une grande image, la méthode que j'ai décris plus haut est très rapide vu qu'il n'y a aucun tri


Top
 Profile  
 
 Post subject: Re: Comment Photofiltre détermine le nombre de couleur uniqu
PostPosted: 25 Jan 2022 22:24 
Offline
Nouveau(elle)
Nouveau(elle)|Nouveau|Nouvelle

Joined: 22 Jan 2022 15:22
Posts: 6
Gender: None specified
Bonsoir,

Faut que je fasse des tests mais pour moi l'objet Dictionary justement permet de ne pas tester les valeurs internes, il n'accepte pas deux données identiques...
ou bien c'est moi qui ne le comprend pas correctement : il se peut que nativement cet objet fasse la recherche de doublon et que du coup il fasse un scan de ses données malgré tout. pour moi je l'avais vu comme étant "instantané" on veut y mettre une donnée, elle existe paf on lui interdit l'entrée, je vais de ce pas faire un test sur une image qui ne comportera pas beaucoup de couleur unique.

@ bientôt

LouReeD


Top
 Profile  
 
 Post subject: Re: Comment Photofiltre détermine le nombre de couleur uniqu
PostPosted: 25 Jan 2022 23:01 
Offline
Nouveau(elle)
Nouveau(elle)|Nouveau|Nouvelle

Joined: 22 Jan 2022 15:22
Posts: 6
Gender: None specified
Voici les deux codes VBA :
Code:
Sub une()
    ' on compte le nombre de couleur de l'image
    For I = 0 To Max_X
        For J = 0 To Max_Y
            c = GetPixel(DeskHdc, J, I)
            r = Int(c Mod 256)
            g = Int((c Mod 65536) / 256)
            b = Int(c / 65536)
            If tabcoul(r, g, b) = False Then
                tabcoul(r, g, b) = True
                nbcoul = nbcoul + 1
            End If
            DoEvents
        Next J
    Next
End Sub

Sub deux()
    ' on compte le nombre de couleur de l'image
    For I = 0 To Max_X
        For J = 0 To Max_Y
            MonDico(GetPixel(DeskHdc, J, I)) = ""
            DoEvents
        Next J
    Next
End Sub

Les deux mon sortis le même nombre de couleur unique 49792 pour une image de 560 x 200 pixels et les deux codes ont mis environs 40 secondes.
Conclusion 1 : l'objet dictionary est aussi rapide que tester si une valeur existe dans un tableau à trois entrées.
Conclusion 2 : ce doit être l'instruction GetPixel qui ralenti les procédures, en effet celle-ci interroge les pixels écran et l'accès à cette donnée doit être chronophage ! Il me faudrait mettre l'image en mémoire et travailler le code dans la mémoire plutôt que sur l'écran...

je cherche encore, mais quand je vois que le clic sur propriété de photofilte, les données s'affichent instantanément, je me dis que j'ai de la marge de progression !

@ bientôt

LouReeD


Top
 Profile  
 
 Post subject: Re: Comment Photofiltre détermine le nombre de couleur uniqu
PostPosted: 25 Jan 2022 23:15 
Offline
Administrateur(trice)
Administrateur(trice)|Administrateur|Administratrice

Joined: 28 Oct 2003 23:49
Posts: 12293
Gender: None specified
n'ayant pas fait de vba depuis un moment je ne connaissais pas l’objet Dictionary et ça a l'air intéressant :wink:

si la procédure GetPixel de vba appelle l'api windows correspondante, c'est en effet assez long, il faut travailler sur le bitmap en mémoire pour optimiser


Top
 Profile  
 
 Post subject: Re: Comment Photofiltre détermine le nombre de couleur uniqu
PostPosted: 27 Feb 2022 18:03 
Offline
Nouveau(elle)
Nouveau(elle)|Nouveau|Nouvelle

Joined: 22 Jan 2022 15:22
Posts: 6
Gender: None specified
Bonjour,
voilà, je n'ai pas réussi à faire mieux en VBA...
Mon application de mosaïque aura donc un fonctionnement "ralentis" mais le résultat est là malgré tout.

Merci encore à vous pour la direction de recherche.

@ bientôt

LouReeD


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 10 posts ] 

All times are UTC + 1 hour [ DST ]


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group