[Analyse d'image numérique]

[Analyse d'image numérique] - Algo - Programmation

Marsh Posté le 05-01-2006 à 14:34:30    

Bonjour,
 
J'ai un soucis que je souhaiterais résoudre avec matlab  (je n'ai aucune formation en programmation, ou alors si peu...) .
L'idée, c'est de définir l'endroit ou tape un laser rouge sur une feuille plus ou moins blanche (en fait, la multitude d'endroits, liée à une expérience type fentes d'young).
 
Mon premier problème, c'est de définir les zones irradiées par le laser. Au départ, je m'étais dit que j'allais récupérer la composante rouge, mais malheureusement, sur une feuille blanche, la composante rouge est, disons... elevée partout (quasi autant que les points rouge que je veux extraire).
 
Il me faut donc une solution pour réveler le rouge visible dans mon fichier parsé ( x, y, [r g b] ).
 
Une idée, des spécialistes ? :/

Reply

Marsh Posté le 05-01-2006 à 14:34:30   

Reply

Marsh Posté le 05-01-2006 à 14:42:32    

 :pt1cable:  Chercher des endroit ou il n'y a ni vert ni bleu ?   :pt1cable:


---------------
D3
Reply

Marsh Posté le 05-01-2006 à 14:47:04    

mechkurt a écrit :

:pt1cable:  Chercher des endroit ou il n'y a ni vert ni bleu ?   :pt1cable:


C'est pas con :/

Reply

Marsh Posté le 05-01-2006 à 14:50:00    

Mais je viens de vérifier, il y a plus de vert et de bleu dans mon rouge que sur la feuille :/

Reply

Marsh Posté le 05-01-2006 à 14:52:46    

http://img368.imageshack.us/img368/1695/pb3lw.th.jpg
 
voilà l'exemple directement :/
 
A l'avenir, je virerai la règle, mais le problème d'analyse sera le même.


Message édité par _pollux_ le 05-01-2006 à 14:53:31
Reply

Marsh Posté le 05-01-2006 à 14:59:20    

ouah, vu ton eclairage tout pourris tu n'as qu'a chercher les points lumineux par opposition a la feuille sombre c.a.d. ayant un r,g et b élevé...


---------------
D3
Reply

Marsh Posté le 05-01-2006 à 15:03:22    

mechkurt a écrit :

ouah, vu ton eclairage tout pourris tu n'as qu'a chercher les points lumineux par opposition a la feuille sombre c.a.d. ayant un r,g et b élevé...


HUm, il était pourri pour cette fois ci, mais a l'avenir, je pourrais augmenter l'eclairage sans problème je pense. Ce ne sont pas ici les données que je traiterai à l'avenir, mais je préfère me mettre dans les conditions les moins bonnes pour être sûr que ça marche ensuite.
 
En fait, en jouant avec les outils courbes de couleur dans gimp, je peux réussir à relever considérablement le rouge et à virer les autres couleurs. Problème, je ne sais pas comment gimp fonctionne pour faire celà, et je me vois mal analyser les ressources de gimp :/
 
ya personne qui a déjà fait ce genre de bidouille qui semble assez commune ?

Reply

Marsh Posté le 05-01-2006 à 17:42:43    

ça peut être compliqué....  
 
sinon vu que ton contexte est assez restreint (laser rouge/feuille blanche), y'a des méthodes crades qui peuvent marcher.
 
tu fais une comparaison de domaines, style tu donnes une plage de détection R[ de 255 à 100 ],V & B [de 150 à 0]
 
 
sinon par exemple tu prends ton triplet R,V,B, tu le considères comme un vecteur, tu le normalises: r,v,b / sqrt(R²+V²+B²) et plus le R s'approche de 1, plus tu tends vers le rouge pur....
 
sinon après y'a tout ce qui est fft...
 
enfin c'est pas top du tout ce que je te proposes, mais ça peut être un début....
 

Reply

Marsh Posté le 06-01-2006 à 01:41:36    

hum, je vais essayer le truc de la normalisation, merci pour l'aide :)

Reply

Marsh Posté le 06-01-2006 à 11:02:32    

Je viens de faire un premier test avec photoshop sur ton image telle quelle. Un seuillage noir/blanc à 128 donne un bon résultat mais y'a qq tâches qui restent. Le point rouge devient blanc. Un seuillage à 180 laisse uniquement le point rouge du centre. En améliorant un peu l'éclairage de la feuille, le seuillage devrait donner un meilleur résultat (avoir le point du laser plus la ligne horizontale diffuse).

Reply

Marsh Posté le 06-01-2006 à 11:02:32   

Reply

Marsh Posté le 06-01-2006 à 11:05:08    

bin c'est une idée, après regarde si tu peux pas trouver un truc limite plus simple et efficace. (y'a ptet moyen d'avoir un filtre qui fasse ressortir les élévations de rouge...)

Reply

Marsh Posté le 06-01-2006 à 11:17:50    

autre méthode (toujours testé avec Photoshop)
- passer la luminosité à -60 (je pense que ce sont des %)
- passer le contraste à +50 (% aussi je pense)
- seuil à 60 (là, ce sont pas des %, mais la valeur de la composante grise)
Voilà le résultat :  
http://img208.imageshack.us/img208/6123/pb3lwresult0la.th.jpg

Reply

Marsh Posté le 06-01-2006 à 12:10:01    

merci pour les tests. En fait, j'avais déjà essayé avec gimp, en jouant sur les seuils, il y a moyen d'obtenir un truc très bien. Mais je sais pas exactement ce que gimp fait dans ce cas.  
Donc, j'ai fait un truc à ma sauce. En fait, je prends sur chaque point le minimum de R, G ou B, et je le soustrait à l'ensemble. . Conséquence, tout ce qui était gris devient noir et le rouge est diminué (ce qui n'est pas trop génant). Ensuite, je récupère seulement le R et j'analyse tout ça :)
 
Maintenant, je me bats sur la détermination des pics obtenus, mais c'est une autre histoire :D


Message édité par _pollux_ le 06-01-2006 à 12:10:14
Reply

Marsh Posté le 07-01-2006 à 17:05:15    

Je suis sur le même genre de problème en ce moment, je cherche à détecter dans une image de webcam des diodes rouge/verte/bleue, et uniquement ces diodes. Le problème c'est que ca repose sur de la calibration très empirique pour empêcher que d'autres parties de l'image s oient vues comme les  diodes :/ En plus de face les diodes sont blanches pour la webcam, pas simple pour les différencier :/


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 08-01-2006 à 03:21:26    

Tu peux essayer d'utiliser un autre espace colorimétrique que le RGB
 
Essaye l' YCbCr (aussi appelé YUV).
La formule de conversion est assez simple (un produit de matrice je crois et vu que tu est en matlab, il y a peut etre une formule toute prête)
 
Le Y est la luminance (intensité lumineuse) elle doit être plutot élevée à l'endroit frappé par ton laser
Tu peux peut également extraire des informations de la composante Cr (chrominance rouge = différence entre la luminance et la couleur rouge)
 
Une manière simple pour voir si tu peux tirer qqch de cette méthode est de faire la conversion en YUV puis d'afficher séparément chaque composante.

Reply

Marsh Posté le 16-01-2006 à 18:19:11    

le Y contient plein de détails innoportuns...
 
Par contre le 'a' de Cielab contient uniquement le laser, ni la règle, ni l'ombre sur la feuille.
 
Sinon avec les Niveaux, Entrée 253, Sortie 255. Puis désaturation, à priori les pixels non-blancs viennent du laser.
 

Reply

Marsh Posté le 17-01-2006 à 01:07:49    

entre temps, j'ai fais ça :)
 

Code :
  1. jpg = imread(strcat(pathname,filename));
  2. taille_jpg = size(jpg);
  3. image(jpg,'parent',handles.axe_image)
  4. for i=1:taille_jpg(1,1)
  5.     for j=1:taille_jpg(1,2)
  6.         minimum = min(jpg(i,j,2),jpg(i,j,3));
  7.         jpg(i,j,1)=jpg(i,j,1)-minimum;
  8.         jpg(i,j,2)=jpg(i,j,2)-minimum;
  9.         jpg(i,j,3)=jpg(i,j,3)-minimum;
  10.         jpg=jpg;
  11.     end
  12. end


ça consiste simplement à retirer la valeur la plus faible de l'une des trois composantes R,G ou B
 
et le résultat est tout à fait correct (simplement, le spot saturé du laser devient noir, mais ça ne pose pas un problème trop important pour mes résultats finaux :) )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed