dissabte, 4 de juliol del 2009

Nova calibracio

He ajustat el parámetre f de l'arxiu de calibrat per a les escenes 3D perque els valors calculats s'ajusten més als reals (tots eren 0.95 voltes mes xicotets que els reals). Despres he tornat a fer les grafiques on compare els valors reals amb els calculats, i aci estan els resultats:

Monos (textura=76.3319)



Bodegó (textura=59.7778)



Planeta (textura=7.07602)



Ciutat (textura=50.5576)



Les escenes amb les mitjes més grans (en valor absolut) corresponen a imatges amb distancies molt grans, on l'algorisme sempre tendeix a acurtar-les. Pareix ser que les imatges amb una textura prop de 50 tenen el minim als valors mitjos de CW, les que tenen mes el tenen per a valors xicotets de CW i les que menys textura tenen podria dir-se que que tenen els mínims per als valors més grans, aixi que potser es podría ajustar CW en funció de la textura per afinar millor el resultat de disparitat.

divendres, 3 de juliol del 2009

Comparant Z

Per fi he conseguit llegir el format OpenEXR. Blender exporta les Z correctament (al menys pel que he comprobat fins ara), i he comparat les Zs d'aquest arxiu OpenEXR amb les calculades per l'algorisme de calcul de disparitat píxel a píxel. El que he observat es que l'algorisme SVS sempre em dona Zs menors que les reals, potser siga per l'arxiu de calibrat, o potser no...
He calculat la mitja, la varianza i la desviació típica (que no es més que l'arrel quadrada de la varianza) de la diferencia de valors de la coordenada Z.

Aci un parell de resultats:







La mitja correspon al cálcul Zcalculada-Zreal, per tant els valors negatius indiquen una distancia calculada menor a la real. Podem observar que per a la imatge dels monos tant la mitja com la varianza son molt majors que per al bodego o el planeta. Aço pot ser perque hi ha un rang de distancies molt major, i com ja sabem l'algorisme SVS produeix molts errors a les vores dels objectes, per aço, on l'algorisme calcula una profunditat de 3 hi ha una real de 200. He probat aumentant el paràmetre Uniqueness, pero no influeix significativament en els resultats. Per supost el que busquem es una mitja i una varianza (o desviació típica) mínimes, pero no ho veig molt clar.

dimecres, 1 de juliol del 2009

Mesurant la textura

Per tal d'establir un valor per a Correlation Window anem a medir la quantitat de textura que te una imatge; es d'esperar que quanta més textura tinga més detalls hi hauràn i per tant es necessitarà una finestra menor per captar-los. Aço es molt bonico, pero no sempre ha de ser així. Per exemple, si tenim una esfera amb molta textura no es necessita una finestra xicoteta, amb una gran es faria igual de be. Bueno, aci unes quantes imatges i el valor calculat (el valor es calcula aplicant un filtre pas-alt amb un kernel de 3x3 i fent la mitja per als valors de tota la imatge):

Per aquesta imatge el valor ha sigut de 15.7913.


Per aquesta de 18.9529.


Per aquesta 78.0283.


Per aquesta 64.7264.


Per aquesta 59.7778.


I per aquesta 631.724.


La mesura dona el resultat que mes o menys s'esperava. Les escenes amb més objectes i per tant més textura obtenen valors mes alts. L'ultima imatge es una prova per veure un valor alt, pero pel que s'ha vist en les imatges anteriors (n'he calculat prou mes), no es solen obtindre valors superiors a 80. Ara tan sols queda establir una relació entre Correlation Window i aquesta mesura. Una bona aproximació que he probat i dona uns resultats acceptables es asignar el valor minim per a mesures de 70-80 i el maxim per a escenes amb una mesura inferior a 20.

Ajustant Uniqueness

Despres d'ajustar Horopter i NDisp per limitar el rang de distancies que volem capturar es necesari ajustar Uniqueness per eliminar les correspondencies erronies que s'hagen detectat. Per aixo he creat unes quantes grafiques on es mostren, per a tots els valors d'Uniqueness (0-79) el nombre de pixels que donen una profunditat dins del rang elegit, els que están més profunds i els que estan massa prop. Cal destacar que com que NDisp no es pot ajustar més que en intervals de 8, alomillor un pixel que esta massa prop en realitat no es un error, sino que esta dins del rang definit per NDisp. Es deuria doncs, considerar la distancia indicada pel valor final de NDisp i no l'especificat per l'usuari... pero no tinc masa temps.

















Observem que mentre per a les imatges sintètiques no es genera cap pixel amb una Z més llunyana que la definia (que es el que s'esperava), per a les imatges reals si que hi apareixen . Potser tinga relació amb el calibrat i el fet que les càmeres no siguen perfectes. Si les cameres no estan perfectament paraleles, el calcul fet per a l'horopter i ndisp no es correcte. El que ja no se es si al rectificar les imatges aço es compensa o no, pero crec que mai ho podre saber.
Amés podem observar que la mesura de correctes-incorrectes si que presenta un màxim per a les imatges sintètiques, pero no per a les reals, en les que sempre decreix, per tant no seria correcte optimitzar aquesta mesura per trobar el valor d'Uniqueness.
Haure de buscar altra forma d'ajustar el paràmetre...

dimarts, 9 de juny del 2009

Mesurant Distancies

He mesurat unes distancies sobre distintes escenes, pero aquesta vegada despres de calibrar la camera (de nou) no he tocat ni el focus ni l'obertura. Les distancies obteses ara tenen prou sentit (algunes no tinc una forma exacta de mesurar-les en el mon real). El problema que hi havia abans era que al ajustar el focus i l'obertura de la camera es movia l'eix central de cada camera, per la qual cosa la calibracio que s'aplicava a les imatges no tenia cap sentit. Aci es poden veure els resultats per a escenes amb diferents distancies:


dilluns, 30 de març del 2009

Hill Climbing

Ha arribat el moment de provar si la mesura de qualitat descrita abans es bona o no.
Per buscar els paràmetres (Horopter i NDisp) que obtinguen una millor imatge de disparitat he implementat l'algorisme Hill Climbing. El problema es que aquest algorisme no garantitza un màxim global, sino local (i els resultats ho demostraven).
Per tractar de solucionar açò he implementat la variant Random-Restart Hill Climbing (o Shotgun Hill Climbing) que bàsicament realitza la búsqueda del Hill Climbing repetides voltes des de punts inicials diferents (aleatoris) i es queda amb el millor resultat.
L'algorisme es deté si:
  • Es realitzen un màxim de 20 iteracions.
  • No es millora el resultat obtingut en les 3 búsquedes següents.
  • No es troba un punt inicial que no haja sigut usat ja.
Cada cop que s'aplica s'obté un resultat diferent, però sempre amb un valor de qualitat similar (sol variar en unes poques centèsimes).
Per fer les búsquedes s'ha aplicat un treshold de 30. Supose que el que tocaria ara es traure les imatges de disparitat amb els mateixos paràmetres per diferents valors de treshold.










dissabte, 21 de març del 2009

Corregint cosetes

Ja he solucionat un problema per el qual el calcul de les imatges de disparitat a partir d'imatges enmagatzemades en disc eixia erroni.
Pareix ser que hi havia un conflicte entre el proces de captura de video i el de captura des d'arxiu. He modificat el codi perque no puguen estar els 2 actius a l'hora, i les imatges de disparitat son ja correctes (i per tant els calculs sobre elles). Aci una xicoteta mostra (amb una imatge generada amb Blender):


Ara ja es poden fer els calculs que s'expliquen en el post anterior. Quines ganes tinc d'acabar!!!

dimecres, 25 de febrer del 2009

Quasi quasi

Despres de probar les diferents mesures de qualitat (post anterior) vaig recordar un paràmetre que tenia la camera: treshold.
Aquest paràmetre defineix la confiança mínima que deu tindre un pixel per ser considerat vàlid. Aixi doncs, una definició per a una bona imatge de disparitat sería:

  • Aquella que té el major nombre de pixels amb informació correcta.

Tan sols cal ajustar aquest valor per obtindre una imatge suficientment correcta (amb la camera no es poden obtindre imatges correctes al 100% mai). He fet unes gràfiques per a un parell d'escenes (amb diferents iluminacions). Les grafiques mesuren la qualitat con el % de pixels útils. De cada escena s'han creat 6 grafiques, cadascuna amb un valor diferent per al treshold (0,10,20,30,40 i 50). De cada grafica s'ha obtingut el major i el menor valor. Aquest es el resultat per a una escena curta:



Com es pot observar al incrementar el treshold el valor màxim disminueix, aixi com el minim.
Per tant cal establir un treshold que ens done un equilibri entre error i % de pixels utils.
Una estimació d'aquest valor seria aquella en la qual el valor minim es 0. En l'anterior escena tots els objectes es troben proxims a la camera (menys de 1,5 metres), per tant per a valors de NDisp i horopter alts no deuria obtindre cap pixel (ja que busquem objectes llunyans i no hi han), per tant en algun punt de la grafica el valor mínim deuria ser 0.
Aquells valors de treshold que donen com a valor mínim >0 estan donant com a vàlids resultats (pixels de disparitat) que no ho son. Així si prenem aquells valors de treshold que obtenen un mínim en la gràfica de 0 ens assegurem que al menys, per algunes combinacions de paràmetres, s'obté un resultat correcte, i per a la resta al menys l'error estarà restringit, i així assegurem un nombre màxim de pixels correctes.
No és una estimació perfecta, però es la que més informació ens dona fins ara (ja que no disposem d'una imatge de disparitat correcta al 100% per calcular errors).
En totes les gràfiques que s'han realitzat s'observa que a partir d'un valor de 30, el mínim es igual o molt pròxim a 0. Si aquesta mesura obté uns resultats acceptables es podria deixar aquesta mesura com a correcta i passar ja a implementar l'algorisme de busqueda i acabar l'ajust automàtic de paràmetres, i anar acabant ja, que ja toca.

divendres, 23 de gener del 2009

Grafiques

Despres de crear unes quantes grafiques per a diferents mesures sobre les imatges de disparitat he fet aquest video on es pot veure que totes representen, més o menys, la mateixa informació.
En el video no hi han etiquetes, pero les grafiques representen, en aquest ordre:
1.- Tamany en pixels de la illa major.
2.- Nombre de illes.
3.- % de pixels utils.
4.- Varianza dels valors de la imatge.



Com es pot observar, les grafiques 1 i 3 son molt paregudes, ja que, com és llogic, quan major siga la illa més gran, més pixels útils hi haurà a la imatge. També es pot observar que la grafica 2 es pareix a la 1 i la 4 negades, ja que quantes més illes hi hagen, menor serà la illa més gran. En la grafica 4 també s'observa un patró similar a la 2, ja que quantes més illes hi haja hi haurà més diferencia entre els valors d'aquestes (més varianza).

Per tant he de buscar alguna mesura diferent que aporte més informació sobre les imatges.