Page 1 sur 1

Analyser une image

Publié : ven. 26/févr./2010 11:33
par Jenova
Salut tout le monde :D
J'aurais bien besoin de vos lumières encore une fois :idea:
En fait voila ce que j'aimerai pouvoir faire :
à partir d'une acquisition de scanner, comparer l'image scannée avec un lot d'image que j'ai sur mon disque dur et essayer de déterminer l'image qui correspond le plus sachant bien évidemment que mon image scannée ne correspondra pas à 100% avec celle de mon HDD (scan oblige, autre luminosité, autre ton, pliures dans le papier, orientation non parfaite, etc...)
Qu'elles sont les meilleures méthodes selon vous pour arriver à un tel prodige ?
J'ai déjà fait une recherche sur le net mais en plus de ne pas être sur que certaines méthodes soient adaptées à mon cas, je dois bien avouer que je n'y ai pas compris grand chose :mrgreen: :oops:

Re: Analyser une image

Publié : ven. 26/févr./2010 11:47
par cederavic
la reconnaissance d'image complex n'est pas une tache simple (meme celle d'image simple remarque...). Ca depend du type de tes images : Beaucoup de formes geometrique? Plutot brouillon? Couleurs? Nuances? Plusieurs plan? etc...
Y a pas mal de sujet sur le net (surtout en anglais), essaye de cibler surtout la reconnaissance de forme dans tes recherches :)

Re: Analyser une image

Publié : ven. 26/févr./2010 12:08
par Jenova
Salut :)
En fait c'est pour toutes sortes d'images, de celles d'un paysage ciel/lac/foret à celle d'un bulldozer faisant une parade en ville en passant par l'image macro d'une mouche qui rigole sur un tronc d'arbre :mrgreen:
Si il n'y a que des sites anglais je suis bien dans la mélasse alors, moi et l'anglais ça fait 8 :oops:

Re: Analyser une image

Publié : ven. 26/févr./2010 12:10
par lepiaf31
aurait tu deux une image scannée et son équivalent non scannée ?

Re: Analyser une image

Publié : ven. 26/févr./2010 12:20
par Cool Dji
Hello,

Il n'y a vraiment que la reconnaissance de forme qui puisse t'aider.
Car un scan peut très bien avoir une taille différente de l'image originale.
Même sans parler de scan, prends 2 photos numérique d'un paysage.
Prends une photo en 1600*1200 et la même photo avec une résolution différente en pivotant légèrement ton objectif (2 ou 3 degrés).
A vue d'oeil, ce sont les mêmes photos mais difficile de les comparer sans algorithme vraiment évolué (ne compte même pas sur une comparaison point par point).
Tu pourrais peut etre réussir à trier sur la proportion de couleur (bleu, vert, noir, rouge...) contenues dans chaque image.

Au millénaire dernier, j'avais bossé sur une comparaison fractale de zones urbaines.
Les images devaient être en noir et blanc (O ou 1) et c'était l'organisation des vides qui permettait de comparer tout ça. Mais je serai incapable de t'en dire plus...

Bon courage !!

Re: Analyser une image

Publié : ven. 26/févr./2010 12:23
par Backup
...

Re: Analyser une image

Publié : ven. 26/févr./2010 18:51
par Fig
Si ma mémoire est bonne, il faudrait un réseau de neurones artificiel type "perceptron".
C'est complexe à mettre en oeuvre, tu dois "l'entrainer" sur l'image que tu recherche (cad lui proposer des images approchante, que tu classerai comme similaire, et d'autre comme différente, puis faire évoluer les valeurs des synapses par rétropropagation de gradient pour obtenir la bonne réponse.)
c'est une méthode utilisée pour lire les adresses sur les lettres à la poste... Réseau entrainé pour la reconnaissance des lettres et chiffres manuscrits.
Bref, dans ton cas ce n'est pas réalisable, l'entrainement serait trop long pour chaque image avant d'être satisfait. (je te laisse imaginer, un neurone par pixel en entrée, dans couches cachées de neurones puis en sortie 2 neurones ... Des liaisons innombrable entre chaque couche... )

Par contre, je crois qu'il existe des programmes qui sont capable de reconnaitre des images prise par le même type d'appareil photo le même jour, dans une même pièce... etc... en fonction de la luminance, couleur etc... Mais, si toutes tes images ne proviennent pas du scanner, mais de source différente, ca va être difficile, je pense.

Je propose que dans tous tes scannes tu trace les angles en noir. Ca sera un repère pour que le programme remette l'image droite.
Ensuite, le prog partage en zone dont tu calcules la moyenne. tu fais pareil pour tes images sur le hdd avec les même formes de zones. Et tu les compare, avec un peu de chance ça peut marcher je pense.

Re: Analyser une image

Publié : ven. 26/févr./2010 21:27
par venom
Pas con l'idée de Dobro ( la plus abordable je pense )

mais il reste le problème de luminosité non car un scanner bas de gamme doit perdre en qualité non ?








@++

Re: Analyser une image

Publié : ven. 26/févr./2010 22:21
par Backup
la luminosité ne change pas le pourcentage de R de V ou de B

elle change leur valeurs mais de façon globale !

une couleur R=255,V=125,B=100 ==>couleur

plus foncé aura comme valeur R=235 , V=105 , B=80==> couleur

pour cette exemple j'ai retiré 20 points a chaque composante , ce qui est énorme !

on voit que la couleur plus foncé va garder la proportion de rouge , de vert et de bleu
si on compare le rouge avec le Vert

couleur clair
255-125=130 (R-V=130)
la couleur foncé :
235-105=130 (R-V=130)

si on compare le V avec le bleu
couleur clair
125-100=25

la couleur foncé
105-80=25 aussi !

il suffit de faire ce genre de verifs sur plusieurs points eparpillé sur l'image
et de faire une moyenne des resultats trouvé pour en deduire si l'image est la meme !
plus on aura de points de vérif, moins on se trompera :)

en tout cas la technique de vérification de plusieurs point marcherai tres bien pour mettre en évidence la présence de plusieurs images identiques dans un dossier par exemple :)

Re: Analyser une image

Publié : ven. 26/févr./2010 22:22
par venom
après si ça peut aidé voici un code qui récupéré chaque pixel et qui re dessine complètement l'image.

Code : Tout sélectionner

Structure img
  x.l
  y.l
  color.l
EndStructure
UseJPEGImageDecoder()

file$ = OpenFileRequester("fichier image", "", "image |*.bmp;*.jpg", 0) ; <---- ont choisit une image bitmap
If LoadImage(1, file$) ; <--- ont charge l'image du dessus
  If StartDrawing(ImageOutput(1))
      width = ImageWidth(1) ; <--- ont prend la largeur de l'image
      height = ImageHeight(1) ; <--- ont prend la hauteur de l'image
      size = width * height ; <--- ont multiplie la largeur par la hauteur pour savoir le nombre de pixels au total
      Dim Array.img(size)
      
      ; <------------------------- ont récupère la  couleur de chaque pixel -----------------------
      i = 0
      For y = 0 To height - 1
        For x = 0 To width - 1
          color = Point(x, y)
          Array(i)\x = x
          Array(i)\y = y
          Array(i)\color = color
          i + 1
        Next
      Next
      ; <------------------------------------------------------------------------------------------
    StopDrawing()
    
  EndIf
EndIf

If OpenWindow(0, 0, 0, ImageWidth(1), ImageHeight(1), "") ; <------------------------- ont ouvre une fenêtre a la taille de l'image
  If CreateImage(0, ImageWidth(1), ImageHeight(1)) ; <------------------------- ont charge l'environnement image
    If StartDrawing(ImageOutput(0))
        
        For i = 0 To size - 1
          i = 0
          For y = 0 To height - 1
            For x = 0 To width - 1
              i + 1
              Plot(Array(i)\x = x, Array(i)\y = y, RGB(Red(Array(i)\color), Green(Array(i)\color), Blue(Array(i)\color))) ; <----- ici ont redessine pixel par pixel sur le Drawing()
            Next
          Next
        Next
        
      StopDrawing()
    EndIf
  EndIf
  
  ImageGadget(0, 0, 0, 0, 0, ImageID(0))
  
  Repeat
    EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow
EndIf
; <------------------------- et ont quitte
mais exécuter cette opération sur des centaine d'image risque d'être un peut fastidieux pour la machine non ? :D

@Dobro

oui pas faux a tester.






@++

Re: Analyser une image

Publié : sam. 27/févr./2010 4:19
par Jenova
Grand merci à tout le monde, je vais creuser la dessus ce week-end et faire quelques tests :D