Overview

Panorama
Fundamental


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.
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.
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.
CHIBERRE Philippe 5 TB. L'inversion de matrice existe deja dans Imagine++, il aurait mieux valu s'en servir.
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.
MONTAUD Raphael 5 TB !
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.

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 !
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.
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.
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.
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.
MONTAUD Raphael 0 non rendu
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...