Overview

Panorama
Fundamental
Seeds
Projet_Examen


Sheet 1: Panorama



Panorama (/5)
IMA


FARRESS Amal 4.5 Un petit probleme d'overflow des unsigned char dans la combinaison des couleurs. Il est dommage de recalculer l'inverse de H pour chaque point !
GULLO Robin 4.5 Il manque juste l'initialisation a 0 des coefficients de A qui ne sont pas remplis explicitement. Modulo ca, le programme marche tres bien.
LALARINDRIANA Ihainjanahary 0 non rendu
RIGAUD Clara 3 Il y a 3 erreurs dans ce code. 1) les coefficients non remplis de la matrice A ne sont pas mis a 0. 2) Il y a (i-x0,y-y0) au lieu de (i+x0,i+y0). 3) Tu multiplies par H pour faire un pull, au lieu de l'inverse de H. Dommage, car le code est clair.
SAIKI Mounia 0 non rendu
ZARAI Mohamed 4.5 Reperer un pixel hors image par sa couleur blanche est susceptible d'erreur. Il est dommage d'avoir a entrer le nombre de points a l'avance, cela devrait etre automatique avec un clic droit.




MVA


BAHI SLAOUI Reda 5 TB. Il est neanmoins un peu couteux d'appeler interpolate 3 fois au meme point, juste pour recuperer chaque canal.
BRICOUT Raphael 5 TB, bravo d'avoir ajoute des pts automatiques. La procedure de transparence est peut-etre un peu laborieuse, avec deux verifications si on est dans l'image 2.
BUJALANCE Jesus 4.5 Les pixels etant codes en unsigned char, il y a des overflow dans l'addition, d'ou ces couleurs psychedeliques. Sinon, tout va bien.
CHATILLON Pierrick 5 Pas de souci. Il est dommage d'avoir le code pour trouver le pixel dans l'image 1 duplique.
CLOAREC Nicolas 4.5 Les artefacts (courbes de pixels non remplis) sont dus a l'usage du push plutot que pull. Dommage, car ce n'est guere plus complique.
DE MONTBRUN Etienne 5 Bien. On peut quand meme arriver a de meilleurs resultats avec 4 pts bien choisis. Il est un peu dommage de verifier deux fois si on est dans l'image de droite.
DELORO Yonatan 5 Joli travail !
DEWIL Valery 2.5 Il manque le calcul de la troisieme coordonnee dans la multiplication par H. La bonne maniere de faire pour eviter de laisser des pixels blancs est le “pull”, pas “push”. La procedure de clic des points est peu naturelle. Il y a des overflow d'unsigned char en additionnant deux couleurs.
DUCHEMIN Quentin 5 TB !
DUCRET Marc 5 Presque parfait ! Seul petit defaut: les pixels de la zone commune sont ecrits 3 fois, la derniere etant la bonne (transparence).
GUTH Florentin 5 Ce qui etait demande. Ne pas abuser des auto pour des types simples, ca ne facilite pas le suivi du code.
HURAULT Samuel 5 TB !
KHELDOUNI Mohammed Amine 5 TB, mais il vaut mieux calculer l'inverse de H et le stocker une fois plutot qu'a chaque iteration de la boucle des pixels.
MEZGHANI Lina 3 Il y a une confusion entre l'image d'arrivee (decalee en x0,y0) et l'image 1. Quand on applique l'homographie, il faut diviser par la troisieme composante pour obtenir le point.
PETROVICH Mathis 5 TB !
PIERSON Emery 2 Comme tu remplis deux lignes a chaque point, il faut 2*i et 2*i+1 comme indices dans le remplissage de A et B. En plus de ca, un bug dans l'instruction I(i-x0,j-x0), ce qui provoque une erreur memoire. L'intention de l'interpolation bilineaire est bonne, mais il y a mieux a faire.
PROUVEUR Matthieu 5 TB !
RENGOT Juliette 4.5 Bon code, mais tu n'as pas tout a fait compris l'esprit du “pull”, il ne s'agit pas de changer l'image de reference, mais de parcourir l'image finale pour trouver ses antecedents dans les deux images.
RIU Clement 5 TB !
ROUCH Thomas 5 Bravo !
ROUSSEAU Tom 4 Il y a un petit defaut dans le “push” ou une condition du if oublie le decalage de x0. La moyenne dans le cas du “pull” provoque un overflow des unsigned char dans Color, il faut faire composante par composante. La procedure d'entree des points est laborieuse, il faut terminer le 4eme point par un clic droit.
RUFFEL Martin 5 TB !
THOMAS Guillaume 5 TB !
TOULEMONT Matthieu 5 Les coordonnees (0,0) de pixel sont licites. Sinon, tout va bien.
TREZZINI Louis 5 TB !
WILLEMS Lucas 4 Il vaut mieux faire un “pull” des pixels pour eviter des artefacts. La matrice Imark doit etre initialisee a 0, le constructeur ne le faisant pas. La procedure d'entree des clics nest pas intuitive (fenetre 2 puis 1), l'utilisateur pourrait etre guide par des instructions.




Auditeur libre


CHIBERRE Philippe 5 TB. L'inversion de matrice existe deja dans Imagine++, il aurait mieux valu s'en servir.

Sheet 2: Fundamental



Fundamental (/5)
IMA


FARRESS Amal 3.5 L'ensemble est correct, cependant inutile de raffiner F avec tous les inliers de facon repetee, une fois a la fin des iterations suffit ! Attention au risque numerique dans la mise a jour de Niter. Il manque displayEpipolar.
GULLO Robin 5 TB !
LALARINDRIANA Ihainjanahary 1.5 De multiples problemes: 1) Acceder aux matrices par [] n'est pas une bonne idee, il se trouve que les matrices sont codees par colonne et non par ligne. L'operateur () aurait ete plus judicieux. 2) Pourquoi les x et y sont-ils inverses dans le calcul de la distance a la ligne epipolaire? 3) Pourquoi sors-tu de la boucle quand le nombre d'inliers s'ameliore ? 4) Creer le generateur aleatoire et la distribution dans une fonction appelee de multiples fois est une erreur: cela repart toujours de la meme graine et du coup les echantillons sont toujours les memes.
RIGAUD Clara 0.5 Pour acceder aux champs d'un Match, utiliser directement x1, y1, x2 et y2. Ce ne sont pas des methodes, donc pas de parentheses. Le code ne montre pas que tu as compris le cours, il faut revoir tout ca.
SAIKI Mounia 0 non rendu
ZARAI Mohamed 2.5 Il y a une incoherence entre F et sa transposee: dans displayEpipolar, on multiplie par les points de l'image 2 par F et dans computeF ce sont les points de l'image 1. Le nombre d'iterations n'est pas mis a jour dynamiquement. Il manque le raffinement avec tous les inliers.




MVA


BAHI SLAOUI Reda 4 Il manque le raffinement avec tous les inliers. Attention au probleme numerique dans le calcul de Niter, on peut se retrouver avec moins l'inifini...
BRICOUT Raphael 4.5 Il manque les moindres carres avec les inliers a la fin. Il est un peu dommage de normaliser les points pour les denormaliser par la suite a chaque iteration.
BUJALANCE Jesus 4 Vu la facon dont A est remplie, tu calcules la transposee de F au lieu de F. Cela explique pourquoi le nombre d'inliers n'est pas plus grand. Attention aussi au risque numerique dans le calcul de Niter.
CHATILLON Pierrick 2 Il vaut mieux utiliser la SVD pour calculer F. Il manque la denormalisation dans le calcul de la distance point-ligne, ce qui fausse le seuil. Il manque le raffinement aux moindres carres. Il manque displayEpipolar.
CLOAREC Nicolas 4 Il y a un probleme du a une mauvaise comprehension de la fonction Zero: faire A.Zero(9,9) revient a ecrire Matrix<float>::Zero(9,9) et renvoie une nouvelle matrice, ne touche pas a A car c'est une methode statique. La verification numerique pour la mise a jour de Niter ne marche pas bien avec 1E-16, ce n'est pas la bonne valeur du epsilon en float.
DE MONTBRUN Etienne 4.5 Il manque le raffinement avec les inliers.
DELORO Yonatan 4.5 Le raffinement aux moindres carres se fait aussi par svd, pas besoin de poser un systeme lineaire. La denormalisation de F aurait pu se faire de facon plus compacte.
DEWIL Valery 1.5 Pas mal d'erreurs: des matrices dont les dimensions ne sont pas indiquees a la construction, l'operateur ^ n'est pas puissance (utiliser pow pour ca), etc.
DUCHEMIN Quentin 4 Une erreur bete dans le raffinement aux moindres carres avec tous les inliers: X(nbinliers,nbinliers) au lieu de X(nbinliers,9). Modulo cette correction, ca marche tres bien.
DUCRET Marc 5 Presque parfait. Seul petit probleme, intRandom peut retourner maches.size() car les bornes sont incluses.
GUTH Florentin 5 Bien, mais code difficile a suivre: beaucoup de fonctions de LinAlg sont redefinies, la normalisation intervient a des endroits inattendus, etc. A noter que svd existe aussi pour Matrix, pas seulement pour Fmatrix.
HURAULT Samuel 4.5 Il manque juste le raffinement de F aux moindres carres avec l'ensemble des inliers.
KHELDOUNI Mohammed Amine 3.5 Il manque un raffinement avec tous les inliers a la fin. Il y a une erreur dans la construction de A qui en fait est adaptee pour calculer la transposee de F.
MEZGHANI Lina 4 Il manque le raffinement aux moindres carres avec tous les inliers a la fin. Il faut faire la SVD de A et non de AtA pour des raisons numeriques.
PETROVICH Mathis 4 Il manque le raffinement avec tous les inliers a la fin. Utiliser les instructions Imagine++ pour tracer des lignes: drawLine. Crash quand on clique trop de points. Attention, intRandom peut renvoyer son deuxieme argument, donc il faut lui passer n-1.
PIERSON Emery 3.5 A quoi sert le distMin dans le RANSAC ? Il manque le raffinement aux moindres carres avec les inliers. Il y a une erreur dans le clic de l'image de droite, on doit multiplier par F et non sa transposee. Il n'etait effectivement pas demande de faire un Levenberg-Marquardt a la fin.
PROUVEUR Matthieu 4.5 Faire la SVD de A, pas de At A, on trouve le meme V mais c'est plus sur numeriquement. Il vaut mieux denormaliser F avant displayEpipolar. Le raffinement avec les inliers devrait se faire aussi par SVD.
RENGOT Juliette 4.5 Il manque simplement les moindres carres avec tous les inliers.
RIU Clement 4 Bon travail, code bien presente. Il manque le raffinement aux moindres carres. La facon dont A est construite, cela calcule la transposee de F et non F. Du coup le nombre d'inliers est plus faible qu'il ne devrait..
ROUCH Thomas 4 Il y a un bug: le vecteur inliers refere a des indices dans matches, alors que tu mets dans bestInliers des indices de randList. Du coup, le resultat des moindres carres est absurde. A noter que les moindres carres se calculent aussi par SVD, pas besoin de passer par un systeme lineraire.
ROUSSEAU Tom 4.5 Une toute petite erreur : dans le calcul de la distance point-ligne, il ne faut pas diviser par norm(v1) mais par sqrt(a*a+b*b) ou a et b sont les deux premieres composantes de v1. La troisieme ne doit pas intervenir dans la normalisation.
RUFFEL Martin 4.5 Tres bon travail. Parfait, si ce n'est un bug dans le clic de l'image de droite: line=Ft*pSrc au lieu de line=matrix*pSrc. Dommage, alors que tu avais fait tout ce qu'il fallait !
THOMAS Guillaume 4 Il est preferable d'utiliser la SVD pour trouver un vecteur du noyau de A. Il manque le raffinement aux moindres carres a la fin.
TOULEMONT Matthieu 4.5 A part le raffinement aux moindres carres, pour lequel il suffit d'utiliser Matrix au lieu de Fmatrix et de proceder comme tu le dis dans le README, tout va bien.
TREZZINI Louis 4 Attention, quand A est 8x9, la svd de A ne remplit pas Vt completement par defaut, il faut passer l'argument all=true. De plus, de la facon dont A est remplie, tu calcules la transposee de F au lieu de F.
WILLEMS Lucas 4.5 Bien, mais l'initialisation de la derniere ligne de A a 0 quand on n'a que 8 matchs n'est pas faite. Il y a donc utilisation de memoire non initialisee...




Auditeur libre


CHIBERRE Philippe 3.5 Il y a une confusion dans le nombre d'inliers lors du raffinement, d'ou une ecriture en-dehors des bornes. Il manque le forcage de rang 2 de la matrice F.

Sheet 3: Seeds



Seeds (/5)
IMA


FARRESS Amal 5 TB
GULLO Robin 5 Tres bon travail ! Bonne idee de lisser a la fin, la visualisation 3D est bien plus plaisante, meme si c'est un peu tricher.
LALARINDRIANA Ihainjanahary 1 win est le rayon de la fenetre, donc on ne fait pas win/2. La fenetre dans l'image 2 est en x+d, pas x-d. L'utilisation d'une std::map est inutilement compliquee.
RIGAUD Clara 0 non rendu
SAIKI Mounia 0 non rendu
ZARAI Mohamed 0 non rendu




MVA


BAHI SLAOUI Reda 5 C'est tres bien. Une toute petite erreur dans find_seeds, x+currentd=win est licite, remplacer donc le <=win par <win.
BRICOUT Raphael 4 Il faut aller jusqu'a +win inclus dans sum et correl, sinon cela fausse le calcul de la moyenne, qui suppose 2win+1 pixels dans chaque dimension. Dans find_seeds, le calcul des bornes est trop conservatif: x+p>=win est OK, x+p+win est dans l'image 2, pas l'image 1, dMax est une disparite admissible.
BUJALANCE Jesus 4.5 Dans la propagation, il faut verifier que d+k reste entre dMin et dMax. Modulo cela, tout va bien.
CHATILLON Pierrick 4.5 Lors de la propagation, il faut aussi considerer la disparite s.d-1. De plus, verifier que la disparite ne sort pas de [dMin,dMax].
CLOAREC Nicolas 3/2=1.5 cf devoir de Tom Rousseau. Dans correl, il y a une erreur dans les min(min) et les dy sont egalement faux. Dans find_seeds, tu mets en graine des points ayant juste un ncc positif, alors qu'on veut ncc>ncSeed. Enfin, la propagation doit verifier qu'on ne sort pas des bornes dMin et dMax.
DE MONTBRUN Etienne 4.5 Dans la propagation, verfier qu'on reste entre dMin et dMax. De plus, les tests pour verifier que la fenetre est dans l'image ne sont pas generiques, ils fonctionnent ici parce que dMin et dMax sont negatifs.
DELORO Yonatan 5 Tres bon travail, et bravo pour ces tests de taille de patch !
DEWIL Valery 4 Dommage, c'etait presque tout bon: il manque juste l'initialisation des variables S dans correl et l'affectation disp(x,y) dans la propagation. A noter qu'il vaut mieux ignorer les fenetres de l'image 2 qui debordent plutot que de les translater de force sans changer la disparite associee.
DUCHEMIN Quentin 5 TB
DUCRET Marc 5 TB, bonne idee d'eviter les racines carrees pour accelerer le calcul.
GUTH Florentin 5 TB.
HURAULT Samuel 3.5 Il y a un bug dans la propagation, la ligne ncc=s.ncc est fausse, car on est a un voisin de la graine s. Il faut aussi verifier que x+d+k reste entre dMin et dMax.
KHELDOUNI Mohammed Amine 5 Il manque juste une verification que x+d+k est bien le centre d'une fenetre incluse dans l'image lors de la propagation : on le sait juste pour x+d.
MEZGHANI Lina 4 Il faut etre plus prudent sur les bords de l'image: il ne suffit pas de verifier que x+d est dans l'image, mais que la fenetre centree en x+d l'est. De meme pour la propagation, verifier pour x+s.d+k. Dans la propagation l'initialisation du meilleur ncc a 0 n'est pas le plus judicieux, car on veut affecter une disparite meme si en fin de compte le ncc est entre -1 et 0. Du point de vue programmation pure, faire Q.push(*(new Seed(...))) provoque une fuite memoire car une Seed est allouee, copiee dans Q puis laissee a l'abandon. Il suffit de Q.push(Seed(...)) qui n'alloue pas de memoire dynamiquement.
PETROVICH Mathis 5 Presque parfait, il y a juste x+disp+win<=width au lieu de <, ce qui ici ne pose pas de probleme en fait car dMax est negatif.
PIERSON Emery 3.5 Le fait de vouloir traiter dans correl et sum le cas ou la fenetre est partiellement visible te conduit a des bugs: d'une part, il faut imax=min(i+win+1,width) pour ne pas manquer les pixels d'abscisse i+win; d'autre part, la moyenne est biaisee dans ccorrel puisque de toute facon on divise par le nombre de pixels d'une fenetre, sans tenir compte du fait qu'elle n'est pas completement visible. Dans la propagation, il faut verifier qu'on reste entre dMin et dMax.
PROUVEUR Matthieu 4.5 Lors de la propagation, plutot que de projeter la meilleure disparite dans l'intervalle [dMin,dMax], il vaut mieux simplement ignorer les disparites hors de l'intervalle.
RENGOT Juliette 4.5 Dans sum, il manque les pixels d'abscisse i+win ou d'ordonnee j+win, qui doivent pourtant etre inclus. Lors de la propagation, ne pas tester des disparites hors de [dMin,dMax]. Bravo pour le rapport de bonne qualite.
RIU Clement 4 Les fonctions sum et correl doivent aller jusqu'a +win inclus, sinon le calcul de la moyenne est faux car on considere qu'il y a (2*win+1)^2 pixels. Dans la propagation, il faut autoriser les bornes dMin et dMax. Enfin, il faut verifier que la disparite s.d+ind envoie bien dans une fenetre incluse dans l'image 2.
ROUCH Thomas 5 Il manque juste une verification que x+dp+k est bien le centre d'une fenetre incluse dans l'image 2 lors de la propagation.
ROUSSEAU Tom 3/2=1.5 cf devoir de Nicolas Cloarec
RUFFEL Martin 5 TB
THOMAS Guillaume 3.5 Deux bugs “betes” qui perturbent pas mal les resultats: inversion de largeur et hauteur de l'image dans sum (ca explique la carte absurde sur la droite); d<s.d+1 au lieu de <= dans propagate. Enfin, il faut verifier qu'on reste entre dMin et dMax dans propagate.
TOULEMONT Matthieu 3 Dans sum et correl, il faut aller jusqu'a win inclus, sinon la normalisation par (2*win+1)^2 ne marche pas. Pourquoi aller jusqu'a dmax+1 dans BestNccD? La verification d'inclusion de la fenetre dans l'image n'est pas faite correctement. Dans la propagation, ne pas depasser les bornes dMin et dMax.
TREZZINI Louis 5 Dans find_seed, x+dMax reste licite. Dans gestBestSeed, il faut en plus verifier que x+trialDisparity amene bien a une fenetre dans l'image 2. A part ca, c'est tres bien.
WILLEMS Lucas 4.5 Il y a juste un d<= au lieu de d< dans find_seeds, ce qui fait que certains pixels prennent la disparite (illicite) dMax+1. Dans la propagation, il manque une verification que la fenetre centree en x+s.d+eps avec eps=-1,0,1 est bien entierement dans l'image.




Auditeur libre


CHIBERRE Philippe 4 Un bug dans find_seeds, ou la derniere disparite trouvee avec NCC>nccSeed est gardee. Ca ne perturbe pas pour la correlation grace au fait que tu ajoutes plusieurs graines au meme pixel. Le test de sortie de l'image est d+x+win>=im2.width().

Sheet 4: Projet_Examen



Projet (/20)

IMA



FARRESS Amal


GULLO Robin


LALARINDRIANA Ihainjanahary

A Simple and Efficient Rectification Method for General Motion
RIGAUD Clara


SAIKI Mounia

Robust Global Translations with 1DSfM
ZARAI Mohamed







MVA
Examen (/20)

BAHI SLAOUI Reda


BRICOUT Raphael


BUJALANCE Jesus


CHATILLON Pierrick


CHIBERRE Philippe


CLOAREC Nicolas


DE MONTBRUN Etienne


DELORO Yonatan


DEWIL Valery


DUCHEMIN Quentin


DUCRET Marc


GUTH Florentin


HURAULT Samuel


KHELDOUNI Mohammed Amine


MEZGHANI Lina


PETROVICH Mathis


PIERSON Emery


PROUVEUR Matthieu


RENGOT Juliette


RIU Clement


ROUCH Thomas


ROUSSEAU Tom


RUFFEL Martin


THOMAS Guillaume


TOULEMONT Matthieu


TREZZINI Louis


WILLEMS Lucas