Algo - point dans un rectangle
Résolu/Fermé
OConell
Messages postés
139
Date d'inscription
samedi 1 novembre 2008
Statut
Membre
Dernière intervention
13 octobre 2010
-
6 déc. 2009 à 16:00
loysacha Messages postés 3 Date d'inscription dimanche 13 juillet 2014 Statut Membre Dernière intervention 17 juin 2015 - 17 juin 2015 à 12:17
loysacha Messages postés 3 Date d'inscription dimanche 13 juillet 2014 Statut Membre Dernière intervention 17 juin 2015 - 17 juin 2015 à 12:17
A voir également:
- Algo - point dans un rectangle
- Comment inserer une video dans un power point - Guide
- Point de restauration - Guide
- Point de suite word - Guide
- Score snap qui augmente de 2 point - Forum Snapchat
- Point d'exclamation à l'envers ✓ - Forum Matériel & Système
7 réponses
Flachy Joe
Messages postés
2103
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
21 novembre 2023
260
6 déc. 2009 à 17:06
6 déc. 2009 à 17:06
Une idée comme ça :
- Classer les coins par y croissant (liste c(i))
- Tester si le point est compris entre y min et y max, si c'est pas le cas pas la peine d'aller plus loin.
- Tester si des coins ont des coordonnées en commun, si c'est le cas on est sur le problème trivial d'un carré parallèle aux axes.
Sinon :
- utiliser l'équation reliant c(1) à c(2) (fonction f12(x)) et déterminer si y > f12(x)
- pareil avec c(1) et c(3)
- utiliser l'équation reliant c(3) à c(4) (fonction f34(x)) et déterminer si y < f34(x)
- pareil avec c(2) et c(4)
Si ses 4 conditions sont vraies alors le point est dans le carré.
EDIT: orthographe...
- Classer les coins par y croissant (liste c(i))
- Tester si le point est compris entre y min et y max, si c'est pas le cas pas la peine d'aller plus loin.
- Tester si des coins ont des coordonnées en commun, si c'est le cas on est sur le problème trivial d'un carré parallèle aux axes.
Sinon :
- utiliser l'équation reliant c(1) à c(2) (fonction f12(x)) et déterminer si y > f12(x)
- pareil avec c(1) et c(3)
- utiliser l'équation reliant c(3) à c(4) (fonction f34(x)) et déterminer si y < f34(x)
- pareil avec c(2) et c(4)
Si ses 4 conditions sont vraies alors le point est dans le carré.
EDIT: orthographe...
OConell
Messages postés
139
Date d'inscription
samedi 1 novembre 2008
Statut
Membre
Dernière intervention
13 octobre 2010
8
6 déc. 2009 à 20:59
6 déc. 2009 à 20:59
l'erreur vient juste de la fonction : coefficientDroite
a=(p1(2)-p2(2))/ (p1(1)-p2(1)) ;
et voila ça marche.
Merci beaucoup Flachy Joe ;)
a=(p1(2)-p2(2))/ (p1(1)-p2(1)) ;
et voila ça marche.
Merci beaucoup Flachy Joe ;)
OConell
Messages postés
139
Date d'inscription
samedi 1 novembre 2008
Statut
Membre
Dernière intervention
13 octobre 2010
8
6 déc. 2009 à 17:15
6 déc. 2009 à 17:15
Tout d'abord merci
pour le premier point c'est toujours le cas dans mon problème
pour le deuxième ce n'est vrai qu'une voir deux fois (toujours pour mon pb)
et le 3ème est une solution possible sauf que si j'ai bien compris elle n'est pas universelle...
j'entends par la que je fais mes calculs sur des images d'une vidéo et le rectangle (qui d'ailleurs je viens de réalisé est plutôt un parallélogramme ) se déplace et tourne sur lui même à plus de 180°.
Ai je raison d'après toi?
pour le premier point c'est toujours le cas dans mon problème
pour le deuxième ce n'est vrai qu'une voir deux fois (toujours pour mon pb)
et le 3ème est une solution possible sauf que si j'ai bien compris elle n'est pas universelle...
j'entends par la que je fais mes calculs sur des images d'une vidéo et le rectangle (qui d'ailleurs je viens de réalisé est plutôt un parallélogramme ) se déplace et tourne sur lui même à plus de 180°.
Ai je raison d'après toi?
Flachy Joe
Messages postés
2103
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
21 novembre 2023
260
6 déc. 2009 à 17:22
6 déc. 2009 à 17:22
Je pense que ça fonctionne, il faut juste reclasser les coins dans le bon ordre pour chaque image de la vidéo.
OConell
Messages postés
139
Date d'inscription
samedi 1 novembre 2008
Statut
Membre
Dernière intervention
13 octobre 2010
8
6 déc. 2009 à 20:22
6 déc. 2009 à 20:22
pas faux... j'ai donc essayé mais ça marche pas (sans le test 'if' qui traduit les test de cette méthode dans le 'for' ,j'ai bien qlq chose qui s'affiche, mais aussi les parties n'étant pas dans le rectangle voulu... y a t-il une erreur?
picots_ord_y=sortrows(picots_ord,2)
[a1,b1]=coefficientDroite(picots_ord_y(1,:),picots_ord_y(2,:))
[a2,b2]=coefficientDroite(picots_ord_y(1,:),picots_ord_y(3,:))
[a3,b3]=coefficientDroite(picots_ord_y(3,:),picots_ord_y(4,:))
[a4,b4]=coefficientDroite(picots_ord_y(2,:),picots_ord_y(4,:))
height = size(photo2,1);
width = size(photo2,2);
xMax = xMin+width-1;
yMax =yMin+height-1;
for j=xMin:xMax
for i=yMin:yMax
if(i>(a1*j+b1) && i>(a2*j+b2) && i<(a3*j+b3) && i<(a4*j+b4))
img_vid(i,j,1)=double(photo2(i-yMin+1,j-xMin+1,1));
img_vid(i,j,2)=double(photo2(i-yMin+1,j-xMin+1,2));
img_vid(i,j,3)=double(photo2(i-yMin+1,j-xMin+1,3));
end
end
end
...
function [ a, b ] = coefficientDroite( p1,p2 )
a=(p1(2)-p2(2))/p1(1)-p2(1);
b=p1(2)-p1(1)*a;
end
picots_ord_y=sortrows(picots_ord,2)
[a1,b1]=coefficientDroite(picots_ord_y(1,:),picots_ord_y(2,:))
[a2,b2]=coefficientDroite(picots_ord_y(1,:),picots_ord_y(3,:))
[a3,b3]=coefficientDroite(picots_ord_y(3,:),picots_ord_y(4,:))
[a4,b4]=coefficientDroite(picots_ord_y(2,:),picots_ord_y(4,:))
height = size(photo2,1);
width = size(photo2,2);
xMax = xMin+width-1;
yMax =yMin+height-1;
for j=xMin:xMax
for i=yMin:yMax
if(i>(a1*j+b1) && i>(a2*j+b2) && i<(a3*j+b3) && i<(a4*j+b4))
img_vid(i,j,1)=double(photo2(i-yMin+1,j-xMin+1,1));
img_vid(i,j,2)=double(photo2(i-yMin+1,j-xMin+1,2));
img_vid(i,j,3)=double(photo2(i-yMin+1,j-xMin+1,3));
end
end
end
...
function [ a, b ] = coefficientDroite( p1,p2 )
a=(p1(2)-p2(2))/p1(1)-p2(1);
b=p1(2)-p1(1)*a;
end
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
OConell
Messages postés
139
Date d'inscription
samedi 1 novembre 2008
Statut
Membre
Dernière intervention
13 octobre 2010
8
9 déc. 2009 à 02:39
9 déc. 2009 à 02:39
Salut
encore moi, même si c'est résolu, en fait pas tout a fait.
En effet, comme je l'ai dit, la méthode ci dessus est appliquée sur 250 images d'une vidéo. Hors, pour certaines (très peu) je me retrouve avec une zone que je veux extraire grâce a la méthode... en gros ça ne marche pas tout le temps. Pourquoi, je ne comprend pas, j'ai fait les calculs mais ce n'est pas logique je trouve.
Avez vous une explication
NB : Les points du parallélogramme ne sont pas fixes entre tout au long de la vidéo.
encore moi, même si c'est résolu, en fait pas tout a fait.
En effet, comme je l'ai dit, la méthode ci dessus est appliquée sur 250 images d'une vidéo. Hors, pour certaines (très peu) je me retrouve avec une zone que je veux extraire grâce a la méthode... en gros ça ne marche pas tout le temps. Pourquoi, je ne comprend pas, j'ai fait les calculs mais ce n'est pas logique je trouve.
Avez vous une explication
NB : Les points du parallélogramme ne sont pas fixes entre tout au long de la vidéo.
Flachy Joe
Messages postés
2103
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
21 novembre 2023
260
11 déc. 2009 à 18:30
11 déc. 2009 à 18:30
Salut,
ben là je vois pas ce qui peux foirer, les points seraient-ils dans une configuration particulière ?
Aurais tu la possibilité de me fournir le code et les images qui posent problème ?
Si c'est ok envoie moi un MP avec ton adresse e-mail (ou MSN, GTalk, ICQ, Skype, ou MySpaceIM) pour que je te file la mienne.
ben là je vois pas ce qui peux foirer, les points seraient-ils dans une configuration particulière ?
Aurais tu la possibilité de me fournir le code et les images qui posent problème ?
Si c'est ok envoie moi un MP avec ton adresse e-mail (ou MSN, GTalk, ICQ, Skype, ou MySpaceIM) pour que je te file la mienne.
OConell
Messages postés
139
Date d'inscription
samedi 1 novembre 2008
Statut
Membre
Dernière intervention
13 octobre 2010
8
21 déc. 2009 à 18:07
21 déc. 2009 à 18:07
Salut
En ce qui me concerne, j'ai résolu mon problème avec une autre technique.
Pour résumer, sur chaque image d'une vidéo, je détectais 4 points.
Ensuite, je prenais une autre image et je réalisez une homographie afin que cette deuxième image correspondent à la zone définie par les 4 points détectés:
tform = cp2tform(coord_ini,picots_ord,'projective');
photo2 = imtransform(double(photo),tform,'Fill',-1);
Enfin, il fallait copier la deuxième image dans la première.
Je me servais de la technique des messages précédents pour l'incrustation.
Cependant, le paramètre en gras de la fonction imtransform m'a permis de définir les zone n'appartenant pas à l'image homographiée (car leur valeur valais -1 - -1 n'es pas un code couleur...)... enfin si je ne suis pas assez claire je vous invite à regarder l'aide.
sur ceux merci Flachy Joe
En ce qui me concerne, j'ai résolu mon problème avec une autre technique.
Pour résumer, sur chaque image d'une vidéo, je détectais 4 points.
Ensuite, je prenais une autre image et je réalisez une homographie afin que cette deuxième image correspondent à la zone définie par les 4 points détectés:
tform = cp2tform(coord_ini,picots_ord,'projective');
photo2 = imtransform(double(photo),tform,'Fill',-1);
Enfin, il fallait copier la deuxième image dans la première.
Je me servais de la technique des messages précédents pour l'incrustation.
Cependant, le paramètre en gras de la fonction imtransform m'a permis de définir les zone n'appartenant pas à l'image homographiée (car leur valeur valais -1 - -1 n'es pas un code couleur...)... enfin si je ne suis pas assez claire je vous invite à regarder l'aide.
sur ceux merci Flachy Joe
17 juin 2015 à 12:17
c'est le même cas que j'ai, mais mon rectangle a des coordonnées en communs