Overview

Panorama
Fundamental
Seeds
Projet


Sheet 1: Panorama



Panorama (/5)
IMA


BERRABAH Mouna 5 TB. Cependant tester une couleur particuliere (blanc) pour le recouvrement repose sur l'hypothese qu'aucun pixel de l'image 1 n'est blanc.
GASNIER Nicolas 4.5 Correct dans l'ensemble, mais ne pas utiliser de variable globale (button et click_position), ne pas non plus laisser plusieurs lignes blanches d'affilee. Un peu lent car inverse(H) est recalcule pour chaque pixel, alors que le resultat devrait etre stocke.
HARIZ Haifa 5 Bien, mais le critere de pixel blanc pour determiner la zone de recouvrement n'est pas le plus approprie. Le rapport est bien presente.
KHARRAT Ali 5 Bien, mais le nombre de points a cliquer ne devrait pas etre specifie a l'avance par l'utilisateur.
LAMDEL Anas ??? non recu
LASTIC Maud 5 TB, mais tester un pixel blanc pour le recouvrement n'est pas ideal, on peut avoir des pixels blancs dans l'image 2 des le depart.
VITI Mario 5 L'ensemble est bien, simplement le critere de pixel blanc pour la superposition n'est pas ideal.
XIONG Bian 3 Plusieurs erreurs dans la construction du panorama : il faut < width et non <=, un j+x0 au lieu de j+y0, pour la moyenne des deux couleurs il ne suffit pas d'aditionner les couleurs.
ZARAI Mohamed 4 C'est correct, mais il est dommage de verifier les zones de recouvrement en testant une couleur.




MVA


ARRAS Adam 5 TB
BERKES Valentin 5 TB, mais un clic droit pour finir l'input aurait ete preferable.
BONNET Clara 5 TB et remarques pertinentes dans le rapport. A noter que minimiser l'erreur Sampson n'apporte rien dans le cas minimal a 4 points, puisqu'il y a une solution exacte qui met toutes les erreurs a 0.
DARMON François 4 L'ordre de click des points est un peu contre-intuitif. La methode “push” pour le panorama provoque des artefacts qui sont compenses imparfaitement par le post-processing que tu effectues. La methode “pull” ne souffre pas de ce probleme et n'est pas plus compliquee.
DELLENBACH Pierre 5 TB. Merci de ne pas meler tabs et espaces pour la tabulation, ca ne passe pas bien si la taille des tabs n'est pas correcte.
DOUMERGUE Adrien 4.5 Probleme d'affichage des points, il faut faire le setActiveWindow avant le drawCircle. Il y avait un probleme de compilation, avec coords au lieu de coordsI. Le reste est bon.
DUSMANU Mihai 5 TB
ERDMANN Simon 5 TB
FAUQUETTE Alexandre 5 Excellent travail, bien plus que ce qui etait attendu !
HAJAIEJ Mhamed 5 TB et rapport pertinent.
HORACHE Sofiane 5 TB. Attention, le code que tu m'avais envoye ne compilait pas car en “nettoyant” tu avais commente une ligne critique. Il vaut mieux toujours verifier et recompiler avant de m'envoyer le code.
JACOB Étienne 5 TB
KAMTUE Kawisorn 5 Bon travail. Peut-etre un peu trop elabore pour l'interpolation par rapport a ce qui etait demande. Le test de pixel blanc n'est pas un tres bon critere pour le recouvrement.
KOZOLINSKY Jules 5 TB
LABBÉ Yann 5 TB, tu en fais meme plus que ce qui etait demande (methode push)
LESPINET Rémi 5 TB
MARC Gladys 4 Attention, les coefficients non remplis d'une matrice ont une valeur arbitraire, ne sont pas a 0. Du coup, la matrice A peut etre erronee. Modulo cela, le reste est juste, il manque simplement le moyennage pour les pixels communs.
MATTHYS Vincent 5 TB
MAYER Imke 4 Tu as choisi de tout mettre dans le repere de l'image 1, ce qui est legitime mais pas necessaire. Par contre, les marges blanches sont une erreur. Il y a un probleme dans la construction du panorama.
PHILBERT Alexandre 5 TB, meme si le processus de clicks des points est un peu fastidieux.
RAHMOUNI Nicolas 3 Apres application de l'homographie, il faut diviser par la 3eme coordonnee pour obtenir le point. De plus, le “et” logique est && et non &. Ces erreurs font que le programme s'arrete avant de produire l'homographie. Une fois ces bugs corriges, il reste un probleme d'overflow des unsigned char dans la somme de deux couleurs, ce qui fait des couleurs distordues.
RAMAMONJISOA Michaël 4.5 Le panorama fonctionne correctement si le coin en bas a droite de l'image est bien celui de l'image 2, ce qui est le cas ici mais n'est pas generalisable.
ROMERO Raphaël 4.5 Bien, mais le remplissage de l'image I2 dans I fonctionne dans ce cas particulier mais n'est pas general. Tester si un pixel est present dans l'image 2 par la couleur blanche n'est pas tres judicieux. Ordre des clics peu naturel. A noter: sur un mac, le clic a deux doigts permet de faire un clic droit.




Autre master


KABBAJ Hamza 4 L'utilisation du “push” pour le panorama cree les artefacts de striures sur l'image de gauche. Il vaut mieux utiliser un “pull”, qui n'est pas plus complique en terme de code. D'autre part, tester un pixel blanc pour le recouvrement n'est pas le mieux a faire.
QUEROL CRUZ Anaïs 5 Good job and good report. There is some redondant code to compute the bounding box of registered image 1, since the computations were already performed in the proposed code. The test of overlap with white color is not very elegant, as image could well have white pixels.

Sheet 2: Fundamental



Fundamental (/5)
IMA


BERRABAH Mouna 1 L'idee semble etre a peu pres comprise, mais la mise en oeuvre reste loin du compte. Il n'y a pas de discrimination entre inliers et outliers, plusieurs variables sont non definies, l'indentation du code est arbitraire... Concernant le rapport, on ne peut pas montrer le point correspondant d'un point clique dans l'autre image, la droite epipolaire sert justement a chercher ce point.
GASNIER Nicolas 3 Tout se passe bien au debut du calcul de F, puis ca derape: le premier F calcule est systematiquement retourne, il n'y a pas de mise a jour du nombre d'iterations, pas de raffinement final...
HARIZ Haifa 3.5 Il manque pas mal d'inliers, il y a un bug quelque part. Probablement une confusion entre F et sa transposee. Manque la mise a jour du nb d'iterations et le raffinement. Le rapport a un peu de substance, ca remonte la note.
KHARRAT Ali 3/2=1.5 Code fortement inspire de celui de Hariz! BestF est utilisee comme sa transposee dans le calcul des inliers. Pas d'ajustement de Niter. Pas de raffinement aux moindres carres de F avec tous les inliers.
LAMDEL Anas 3/2=1.5 cf Kharrat, il s'agit du meme code. La note est divisee par 2.
LASTIC Maud 3.5 Normaliser/Denormaliser tous les points est fastidieux, car ca ralentit le programme. Il faut prendre la derniere ligne de Vt, indice 8, pourquoi 5 ? Je n'ai pas d'explication pourquoi ca fonctionne correctement malgre ce bug. Il manque le raffinement avec tous les inliers.
VITI Mario 4 The refinement after all inliers are found is not done. The process to extract 8 matches is cumbersome. There is a bug with %(Nmatches+1) instead of %Nmatches, which can lead to out-of-bounds read.
XIONG Bian 1.5 Devoir tres incomplet. Il manque la normalisation, la discrimination inlier/outlier, la mise a jour du nombre d'iterations, le raffinement, le trace des lignes epipolaires. De plus, il faut la derniere colonne de V, donc la derniere ligne de Vt.
ZARAI Mohamed 4 Bon travail. Il est cependant preferable d'acceder aux elements d'une matrice par (i,j) plutot que par [i+j*...] pour des raisons de clarte




MVA


ARRAS Adam 4 Attention, m/n donne 0 (division euclidienne), donc le nombre d'iterations est mal calcule. La liste bestInliers est toujours le resultat de la derniere iteration, ce qui n'est pas forcement le cas ayant le plus d'inliers rencontre. Il manque le raffinement avec les inliers de F. Sinon, le code est bien ecrit.
BERKES Valentin 4 Le code est bien structure. Il semble y avoir une confustion entre F et sa transposee dans findInliers. Tu sembles utiliser la distance Sampson pour selectionner les inliers. C'est bien, mais il faudrait le preciser dans le code. Il aurait ete preferable d'arreter le trace des lignes au bord de leur image.
BONNET Clara 4 Il y a quelques petits soucis : A(j,1)=x1*y1 au lieu de x1*y2, ligne 7 de Vt_tilde au lieu de ligne 8. A part ca, tout va bien.
DARMON François 5 Bon code, ca fait ce qui est demande. Parfois, j'ai eu ton programme qui se terminait avec tres peu d'inliers (une dizaine), et un Niter a -2x10^9: en effet, 1-pow(float(cpt)/float(n),8) peut valoir 1 si cpt est trop petit (un resultat de pow de l'ordre de 10^-7), d'ou une division par 0. Passer en double aide, mais peut quand meme repeter le meme probleme. Le seul test solide est de verifier que Niter reste positif.
DELLENBACH Pierre 4 Pour compter les inliers, normFxp fait intervenir Fxp[2], ce qui ne devrait pas etre le cas. Comme tu calcules l'erreur en coordonnees normalisees, tu dois mettre un seuil non naturel (comment a-t-il ete fixe?) et la valeur de Fxp[2] se fait d'autant plus sensible dans le resultat.
DOUMERGUE Adrien 4 Il manque le raffinement avec tous les inliers. Il y a une petite confusion entre F et sa transposee, dans le rapport et dans le code, mais en fin de compte tout se compense, donc il n'y a pas de bug.
DUSMANU Mihai 5 Bien, pas de probleme. Le code pour calculer F a partir de 8 ou plus de points aurait cependant pu etre factorise.
ERDMANN Simon 4.5 La derniere ligne de Vt a l'indice 8 et non 7. C'est elle qui donne le noyau de A. A part ce probleme, bon travail, et l'observation qu'il vaut mieux faire plus d'iterations que le strict necessaire donne par la formule est tres pertinente.
FAUQUETTE Alexandre 4.5 Telle que ta matrice A est ecrite, tu calcules en fait la transposee de F, d'ou un nombre d'iterations grand avant de trouver suffisamment d'inliers (ce n'est pas flagrant dans ce cas car F et Ft ne sont pas si differentes). Sinon, tout est bon.
HAJAIEJ Mhamed 4.5 Il y a juste un petit defaut: norm(temp) n'est pas sqrt(temp[0]*temp[0]+temp[1]*temp[1]) car il y a temp[2] qui intervient. Sinon, tout va bien.
HORACHE Sofiane 5 Pas de probleme, le programme fonctionne bien. Le seuil a sqrt(10) pour inlier/outlier est peut-etre un peu laxiste. Merci de ne pas mettre de tabs pour l'indentation, melanger espaces et tabs pour ca oblige a fixer le bon nombre d'espaces pour un tab correctement.
JACOB Étienne 4 Ton probleme vient du fait que quand tu transposes Vt en Ft, tu ecris en fait la transposee de F. A noter, pour les matrices de taille variable, il faut utiliser Matrix et non Fmatrix (il y aussi SVD sur Matrix).
KAMTUE Kawisorn 4 Tout est presque bon, sauf dans le calcul de Niter: max_inlier/matches.size() donne toujours 0 (division euclidienne), donc on a une division par 0. Il est un peu maladroit de se limiter a 125 pour le raffinement, il faut utiliser une Matrix et non une Fmatrix.
KOZOLINSKY Jules 4.5 Tout est bon, mis a part que la derniere ligne de Vt a l'indice 8 et non 7.
LABBÉ Yann 5 Bon travail, le code est clair et le rapport succint mais informatif.
LESPINET Rémi 5 Tres bon travail. Pas de souci a prendre la transposee de la definition du cours tant que tout est fait en coherence. En fait, la convention que tu as adoptee est la plus courante, mais pas celle que j'enseigne, car je trouve plus logique de mettre les points de l'image de gauche (=1ere image) a gauche de F dans l'equation.
MARC Gladys 4.5 Il manque simplement le raffinement. Attention, SfMat n'est pas initialisee, certains coefficients pourraient avoir des valeurs arbitraires. Bon rapport.
MATTHYS Vincent 3.5 C'est bien la derniere ligne de Vt qu'il faut garder (indice 8) et non indice 7. On a fait expres de rajouter une equation 0f=0 pour avoir acces a cette ligne 8. Dans norm2(x_prime), il y a le 1 qui reste, donc la formule n'est pas exacte (impact faible, car les x et y sont grands pour la plupart). Le seuil inlier est fixe trop bas, il faut typiquement 1 pixel. Pour l'affichage, tu aurais pu stopper les lignes a leur image. Concernant l'interpretation du rejet des points de la pelouse, je ne suis pas d'accord, ce n'est pas les points SIFT qui sont en cause, c'est peut-etre une distorsion residuelle dans les images.
MAYER Imke 4.5 Tu normalise en fait par 0.01, ce qui est acceptable mais le code n'est pas clair a ce sujet, avec des 10E-3. Plus embetant, tu testes l'erreur algebrique xFx' au lieu de distances point-ligne. Neanmoins, c'est bien d'avoir fait plusieurs experiences avec differents seuils.
PHILBERT Alexandre 5 Quelques maladresses dans le code, mais pas d'erreur. Bon travail.
RAHMOUNI Nicolas 3.5 Il manque une valeur absolue dans le calcul de la distance point-ligne. La derniere ligne de Vt a comme indice 8 et non 7. Il est inutile de calculer AtA, c'est meme deconseille pour des raisons numeriques, il vaut mieux faire la SVD de A directement.
RAMAMONJISOA Michaël 4.5 Pourquoi le nombre d'iterations n'est-il pas mis a jour dynamiquement ? Pourtant tu calcules la formule comme il faut. Sinon, tout va bien.
ROMERO Raphaël 5 Le programme fonctionne bien. Le code est un peu redondant, la partie sur le calcul de F a partir des 8 points ou des n inliers aurait pu etre factorisee.




Autre master


KABBAJ Hamza 4.5 Il y a une confusion entre F et sa transposee dans le calcul des inliers. Inutile de calculer AtA, il vaut mieux faire la SVD sur A directement.
QUEROL CRUZ Anaïs 4.5 There is a single defect in the code, but it is annoying: when you compute distance point-line for inliers, you are working with normalized coordinates, where distances are much smaller than in the image. Therefore you get no outliers, which is wrong. Apart from that, the code is fine and well written. Besides, great report!

Sheet 3: Seeds



Seeds (/5)
IMA


BERRABAH Mouna 4 Bon ensemble, mais la propagation est un peu imprudente car elle ne verifie pas que le voisin (x,y) decale est bien le centre d'une fenetre incluse dans l'image de droite. De plus, il faut faire attention de ne pas deborder des disparites admissibles dans la propagation.
GASNIER Nicolas 1 C'est tres incomplet, il y a juste les fonctions sum et correl d'implementees.
HARIZ Haifa 1 MaxNcc n'est pas reinitialise pour chaque nouveau point. La condition pour calculer une graine que toutes les fenetres centrees en x+dMin jusqu'a x+dMax soient incluses est trop restrictive, il faut juste ignorer celles parmi les fenetres qui debordent. Le fait de modifier x et y (indices de boucle) apres avoir trouve une meilleure disparite fait faire n'importe quoi a l'algorithme. La propagation ne s'arrete jamais, car elle ne marque pas les nouvelles graines (x,y) dans seeds. Enfin, il manquait la definition des types de NccMilieu et autres pour pouvoir compiler...
KHARRAT Ali 3.5 Dans correl, il y a i1+i,j2+j) au lieu de j1. Dans find_seeds, ne pas eliminer d'office les points dont une des disparites entraine une fenetre non contenue dans l'image droite. Il faut mettre la graine en (x,y), pas en (x_best,y), sinon ca fausse la propagation. Dans la propagation, il faut verifier que s+d+1 est entre [dMin,dMax], et de meme pour les deux autres.
LAMDEL Anas 0 non rendu
LASTIC Maud 3 Dans le calcul des graines, tu attribues la disparite trouvee en (xmax,y) et non en (x,y), ce qui est faux. Dans la propagation, l'affectation de la disparite des nouvelles graines est fausse.
VITI Mario 3.5 Il faut mettre la graine en (x,y) et non en (x0,y0) pour que la propagation soit correcte. De plus, ne pas exiger que toutes les fenetres centrees en x+d avec d dans [dMin,dMax] soit dans l'image 2, il suffit d'ignorer les disparites qui font sortir. Dans la propagation, verifier qu'on reste dans [dMin,dMax].
XIONG Bian 2 Les graines doivent etre placees en (x,y), pas en (x0,y0). De plus, le if avant le for(d0) empeche de calculer la disparite pour les pixels x<30, alors qu'ils ont quand meme des disparites possibles amenant une fenetre incluse dans l'image de droite. La propagation est infinie, car les nouvelles graines ne sont pas marquees dans le tableau seeds.
ZARAI Mohamed 0 Plagiat: sum,correl tires de Kharrat, find_seeds de Viti




MVA


ARRAS Adam 4.5 Petit defaut dans find_seeds lorsque nccSeed=-1: pour les pixels a gauche de l'image n'ayant aucune fenetre incluse dans l'image de droite, on a quand meme nccMax=nccSeed et on met la disparite bestd, qui n'a pas ete initialisee.
BERKES Valentin 5 Exactement ce qui etait demande.
BONNET Clara

DARMON François 3.5 Dans sum et correl, ton calcul invoque win*win*3*3 termes au lieu de (2*win+1)*(2*win+1), il y a donc erreur. Du coup, les resultats ne sont pas tres bons. Sinon, le reste est correct.
DELLENBACH Pierre 3 Dans sum, il faut aller de -win a win inclus (dont <=win, pas <win). Dans correl, pourquoi de -win+1 a win-1? A noter que numeric_limits<float>::min retourne le plus petit float positif, donc mettre 0 revient au meme. Dans la propagation, il faut verifier a la fois que les disparites dp+c avec c=-1,0,1 sont entre dMin et dMax et en plus que x+dp+c est le centre d'une fenetre incluse entierement dans l'image droite.
DOUMERGUE Adrien 4 Dans find_seeds, inverser le if(x-win+d) et le for(d) pour ne pas eleminer trop de pixels a gauche. Dans propagate, il manque la verification que dp+i reste dans [dMin,dMax]
DUSMANU Mihai 4.5 find_seeds ne calcule pas de disparite aux pixels tels que la fenetre centree en (x+dMin,y) sorte partiellement de l'image car la condition du for est directement fausse. Cependant, il se peut que d'autres (x+d,y) soient corrects.
ERDMANN Simon 4.5 Seul petit probleme: <win au lieu de <=win dans la fonction sum. Ca fausse legerement la moyenne.
FAUQUETTE Alexandre 5 TB a la fois pour le code et pour le rapport.
HAJAIEJ Mhamed 5 Tout est bon. Cependant, dans la propagation, il aurait mieux valu laisser inconnue la disparite vers le bord gauche ou aucune des fenetres centrees en x+dp+d avec d=-1,0,1 n'est dans l'image droite.
HORACHE Sofiane 2.5 Il ne faut pas calculer les correlations avec des fenetres dont la disparite n'est pas dans [dMin,dMax], c'est beaucoup trop long. De plus, dans la propagation, il faut aussi verifier qu'on ne depasse pas ces bornes.
JACOB Étienne 5 Puisque tu as pris l'option de rendre l'image periodique dans tes calculs de sum et correl, tu aurais pu modifier find_seeds et propagate pour aller jusqu'aux bords gauche et droite de l'image. Ceci dit, ce principe de periodicite ne provoque que des erreurs dans cette tache, car cela cree une discontinuite forte au bord qui va se payer cher en correlation. A noter que le programme n'est pas lent en mode Release.
KAMTUE Kawisorn 4 Dans la carte de disparites initiale, tu mets les points qui n'ont aucune fenetre admissible incluse dans la deuxieme image a la disparite dMin, puisque best_ncc-0>nccSeed=-1. Lors de la propagation, il manque la verification qu'on ne sort pas des bornes de la plage de disparites.
KOZOLINSKY Jules 4.5 Dans find_seeds, il est possible d'avoir une disparite non initialisee bestd. Lors de la propagation, verifier qu'on reste entre dMin et dMax.
LABBÉ Yann 5 Rien a redire, exactement ce qu'il fallait.
LESPINET Rémi 5 Tres bon travail a nouveau !
MARC Gladys 4 Dans find_seeds, tu elimines d'office les points qui a sont a moins de 30 pixels du bord gauche: il faut mettre un if pour verifier que la fenetre est correcte, pas comme condition d'arret de la boucle. Dans la propagation, attention a ne pas sortir des bornes [dMin,dMax].
MATTHYS Vincent 2 Tes fenetres s'arretent a win-1 a droite au lieu de win. Ce n'est pas grave en soi, sauf que le calcul de la moyenne est faux car le nombre de points est incoherent. Les fonctions sum et correl inversent l'interpretation des x et y passes en parametres. Dans la propgation, tu ne verifies pas que la fenetre est incluse dans l'image et qu'on ne sort pas des bornes admissibles [dMin,dMax].
MAYER Imke 5 Tout est correct, mais le code de propagate pourrait etre grandement simplifie, plutot que ces if else imbriques.
PHILBERT Alexandre 4.5 Dans la propagation, il n'y a pas de verification qu'on reste entre [dMin,dMax]. Les tests de securite dans sum et correl sont un peu trop laxistes, car il faut <w et non <=w par exemple.
RAHMOUNI Nicolas 4.5 Lors de la propagation, verifier que s.d+add+to_d reste dans les bornes [dMin,dMax]. De plus, on n'est pas oblige de rejeter systematiquement si l'un des s.d+add_to_d amene a une fenetre incomplete, seulement si tous le font.
RAMAMONJISOA Michaël 4 Lors de la propagation, tu ne verifies pas que la fenetre centree en (x+s.d-1+k,y) est bien dans incluse dans l'image de gauche. Si ce n'est pas le cas, la fonction ccorrel peut deborder du tableau des pixels.
ROMERO Raphaël 4 Dans find_seeds, tu peux ajouter plusieurs fois la graine avec differentes disparites, ce qui est au mieux inutile. De plus, certains points peuvent se retrouver avec dOpt=0 car tu compares avec le NCC a disparite 0 (qui est en-dehors des bornes admissibles). Dans la propagation, tu ne verifies qu'on reste dans les bornes [dMin,dMax].




Autre master


KABBAJ Hamza 4.5 Lors de la propagation, tu ne verifies pas que la fenetre centree en (s.d+q,x) est bien incluse dans l'image de gauche. Ce ne cause pas d'erreur memoire car tes fonctions sum et correl font des verifications, mais c'est quand meme une erreur logique car la taille de la fenetre dans le calcul de la moyenne peut etre faux.
QUEROL CRUZ Anaïs 5 Nice, clear and compact code and good report.

Sheet 4: Projet



Projet (/20)
Sujet
IMA



BERRABAH Mouna

Robust Rotation and Translation Estimation in Multiview Reconstruction
GASNIER Nicolas

An Algebraic Approach to Lens Distortion by Line Rectification
HARIZ Haifa

A Simple and Efficient Rectification Method for General Motion
KHARRAT Ali

Multi-camera scene reconstruction via graph cuts
LAMDEL Anas

An Algebraic Approach to Lens Distortion by Line Rectification
LASTIC Maud


VITI Mario

Robust Rotation and Translation Estimation in Multiview Reconstruction
XIONG Bian

Robust Global Translations with 1DSfM
ZARAI Mohamed



































































JACOB Étienne

Computing Visual Correspondence with Occlusions via Graph Cuts




























































Autre master



KABBAJ Hamza


QUEROL CRUZ Anaïs