c'est bon j'ai trouvé !!!!
La première fois que je trouve un truc lol
Mais j'aurai très certainement besoin de votre aide très prochainement !!!!
c'est bon j'ai trouvé !!!!
La première fois que je trouve un truc lol
Mais j'aurai très certainement besoin de votre aide très prochainement !!!!
Me revoila
Alors voila j'arrive à faire une régression linéaire en utilisant dans tools basic fitting
mais j'aimerai pouvoir le coder comme ça en lançant mon programme ça se ferait directement
j'essaie d'utiliser la fonction polyfit mais je n'arrive pas à avoir le même résultat qu'avec l'autre façon
Sachant que ma fonction pour avoir une arete du billet s'écrit :
je n'arrive pas à voir ce que je dois mettre comme arguments dans la fonction polyfit pour obtenir au final la pente de l'arete en question?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 arete[]; for l=1:haut_gauche(:,1) for c=1:haut_droit(:,2) if noirblanc(l,c)~=0 arete=[arete;l c]; break end end end
vous auriez une idée?
merci d'avance
j'ai trouvé merci, désolé de vous avoir dérangé
(Je crois que c'est ici que je dois m'adresser pour cette question)
Alors voila j'essaie de superposer 2 billets presque identiques.
J'avais une idée mais j'ai un petit problème de code (comme toujours )
En prennant une partie de l'image commune aux deux billets (le cinq en haut à gauche) je pratique la méthode d'autocorrelation et j'obtiens les coordonnées des points ou se trouve le 5 en haut à gauche.
Je fais ça pour les deux billets
genre xbegin1= , xend1= ,ybegin1= yend =
xbegin2= xend2= ybegin2= yend2=... et donc j'aimerai pour les superposer faire coïncider les coordonnées de la deuxième image avec celles de la première
mais j'ai un problème de syntaxe comment je pourrais écrire ça( que le point qui a pour coordonnée xbegin2 doit en fait se trouver sur x begin1)?
C'est donc une translation que tu veux faire?
Si oui, tu peux soit utiliser imtranslate de la boite à outils traitement image.
ou faire toi-même la translation :
Avec deux boucles imbriquées (si je me souviens bien tu préférais faire des boucles, mais sache que des solutions sans boucle sont possibles), tu devrais y arriver si tu connais le vecteur de translation (il suffit de décaler les affectations sur une nouvelle matrice image).
Faire de la programmation, ce n'est pas simplement mettre bout à bout des codes que l'on récupère sur des forums...
Ce morceau de code qu'on t'a soumis dans le forum Algorihtme est écrit en C++... donc peu de chose à voir avec la syntaxe MATLAB
Le plus important est de comprendre ce qu'est une interpolation bilinéaire... rien à voir avec la programmation, mais plutôt avec les mathématiques
Alors en fait j'ai mal posé la question lol
J'ai fait un peu de C++ à la fac donc je sais que int permet de prendre la partie entière, nous permet d'avoir un entier mais je ne sais pas comment prendre la partie entière en matlab
je pense que la question a déjà été posée mais je trouve pas, je vais continuer à chercher dans le forum
bonjour, je dois soustraire mes deux images pour cela je fais:
Je voulais poster le résultat mais l'image est trop grande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 %comparer en niveaux de gris biller=imread('Billet.tif'); >> billet=rgb2gray(biller); >> %binariser l'image m=size(billet,1); n=size(billet,2); for i=1:m for j=1:n if billet(i,j)>180 noirblanc(i,j)=256; else noirblanc(i,j)=0; end end end >> figure;imshow(noirblanc) %trouver les pixels blancs [e,d]=find(noirblanc>180); hold on idx = d==min(d); sommet1 = [e(idx) d(idx)]; haut_gauche = sommet1(sommet1(:,1)==min(sommet1(:,1)),:); plot(haut_gauche(:,2),haut_gauche(:,1),'g>') idx=d==max(d); sommet2 = [e(idx) d(idx)]; bas_droit = sommet2(sommet2(:,1)==max(sommet2(:,1)),:); plot(bas_droit(:,2),bas_droit(:,1),'y>'); billet([1:(haut_gauche(1)-1) (bas_droit(1)+1):end],:)=[]; >> billet(:,[1:(haut_gauche(2)-1) (bas_droit(2)+1):end])=[]; >> figure,imshow(billet) %image tordue billet2=imread('billet2.tif'); >> billet2=rgb2gray(billet2); >> %Binariser l'image m=size(billet2,1); n=size(billet2,2); for i=1:m for j=1:n if billet2(i,j)>180 noirblanc2(i,j)=256; else noirblanc2(i,j)=0; end end end >> %trouver les pixels blancs [e,d]=find(noirblanc2>180); bord_haut2=[];for c =1:size(noirblanc2,2) for r=1:size(noirblanc2,1) if noirblanc2(r,c)~=0 bord_haut2=[bord_haut2;r c]; break end end end figure;imshow(noirblanc2) hold on plot(bord_haut2(:,2),bord_haut2(:,1),'r*') idx = e==min(e); sommet2 = [e(idx) d(idx)]; haut_droit2 = sommet2(sommet2(:,2)==max(sommet2(:,2)),:); plot(haut_droit2(:,2),haut_droit2(:,1),'b>') idx = d==min(d); sommet1 = [e(idx) d(idx)]; haut_gauche2 = sommet1(sommet1(:,1)==min(sommet1(:,1)),:); plot(haut_gauche2(:,2),haut_gauche2(:,1),'g>') arete2=[];for l=1:haut_gauche2(:,1) for c=1:haut_droit2(:,2) if noirblanc2(l,c)~=0 arete2=[arete2;l c]; break end end end plot(arete2(:,2),arete2(:,1),'g+') hold off plot(arete2(:,2),arete2(:,1),'g+') p=polyfit(arete2(:,2),arete2(:,1),1); %intersection avec l'axe des abscisses %quand y=0 equation=p(1)*arete2(:,2)+p(2); alpha=atan(p(2)/(-p(2)/p(1)))*180/pi image=imrotate(billet2,-alpha); >> figure;imshow(image) %définir le sommet en haut à gauche et le sommet en bas à droite [e,d]=find(image>180); idx = d==min(d); sommet1 = [e(idx) d(idx)]; haut_gauche2 = sommet1(sommet1(:,1)==min(sommet1(:,1)),:); idx=d==max(d); sommet3 = [e(idx) d(idx)]; bas_droit2 = sommet3(sommet3(:,1)==max(sommet3(:,1)),:); figure;imshow(image) hold on plot(bas_droit2(:,2),bas_droit2(:,1),'y>'); plot(haut_gauche2(:,2),haut_gauche2(:,1),'g>'); image([1:(haut_gauche2(1)-1) (bas_droit2(1)+1):end],:)=[]; image(:,[1:(haut_gauche2(2)-1) (bas_droit2(2)+1):end])=[]; >> figure;imshow(image) un=[size(billet,1) size(billet,2)] >> for i=1:size(billet,1) for j=1:size(billet,2) if i<size(image,1) un(i,j)=image(i,j); else un(i,j)=256; end end end g=imsubtract(billet,uint8(un)); >> figure;imshow(g);
Le problème c'est qu'il s'agit du même billet donc quand je soustrais je devrais avoir une image complètement noire ou presque mais ce n'est pas le cas
Vous auriez une idée pour avoir un meilleur résultat?
Bonjour,en fait j'essaie toujours d'améliorer mon programme.
Donc pour ça je prends mon billet d'origine, je le fais tourner de 30° avec la fonction imrotate et après de -30° pour qu'il retrouve sa position initiale.
Après je soustrais le billet du départ avec celui qui a subit une double rotation et je devrais avoir une image complètement noire, néanmoins ce n'est pas le cas on voit qu'il y a un léger décalage.
Auriez vous une idée? utiliser autre chose que imrotate (mais quoi) ou améliorer le résultat pour que j'ai vraiment un fond noir???
imrotate effectue une interpolation de l'image, ce qui est normale, si tu tournes une images, tu te rends bien comptes que certains pixels doivent être interpolés...
Mais si tu as bien recadré ton image, l'erreur entre l'image reconstruite et l'image originale ne devrait pas être très grande... peux-tu mettre ton code?
D'où peut être l'intérêt de faire :
plutôt que
Code : Sélectionner tout - Visualiser dans une fenêtre à part abs(image1-image2)<seuil)==0
Mais encore une fois je le répète, le problème n'est pas simple car les données de départ ne me semble guères reproductibles...
Code : Sélectionner tout - Visualiser dans une fenêtre à part (image1-image2) == 0
A la rigueur si les deux billets à comparer sont neufs ou si le second est une image test obtenue en "déformant" l'image du premier billet.
Donc les opération de soustractions ne me semblent pas très robustes ici...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager