PhotoFiltre
http://www.photofiltre-studio.com/forum/

Comment Photofiltre détermine le nombre de couleur unique
http://www.photofiltre-studio.com/forum/viewtopic.php?f=13&t=23588
Page 1 of 1

Author:  LouReeD [ 22 Jan 2022 15:27 ]
Post subject:  Comment Photofiltre détermine le nombre de couleur unique

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

Author:  Antonio [ 22 Jan 2022 17:59 ]
Post subject:  Re: Comment Photofiltre détermine le nombre de couleur uniqu

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...

Author:  LouReeD [ 23 Jan 2022 17:13 ]
Post subject:  Re: Comment Photofiltre détermine le nombre de couleur uniqu

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

Author:  Antonio [ 23 Jan 2022 18:03 ]
Post subject:  Re: Comment Photofiltre détermine le nombre de couleur uniqu

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

Author:  LouReeD [ 25 Jan 2022 0:17 ]
Post subject:  Re: Comment Photofiltre détermine le nombre de couleur uniqu

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

Author:  Antonio [ 25 Jan 2022 11:12 ]
Post subject:  Re: Comment Photofiltre détermine le nombre de couleur uniqu

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

Author:  LouReeD [ 25 Jan 2022 22:24 ]
Post subject:  Re: Comment Photofiltre détermine le nombre de couleur uniqu

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

Author:  LouReeD [ 25 Jan 2022 23:01 ]
Post subject:  Re: Comment Photofiltre détermine le nombre de couleur uniqu

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

Author:  Antonio [ 25 Jan 2022 23:15 ]
Post subject:  Re: Comment Photofiltre détermine le nombre de couleur uniqu

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

Author:  LouReeD [ 27 Feb 2022 18:03 ]
Post subject:  Re: Comment Photofiltre détermine le nombre de couleur uniqu

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

Page 1 of 1 All times are UTC + 1 hour [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/