Carte de disparité

Fermé
warda_had Messages postés 1 Date d'inscription mardi 20 mars 2012 Statut Membre Dernière intervention 20 mars 2012 - 20 mars 2012 à 15:35
Bonjour,

mon projet est de calculer la carte de disparité de deux image en début j'ai compare les pixels de deux images par la méthode census qui donner comme résultat deux tableaux et calculer après la distance de hamming , le problème est dans l'affichage de deux tableaux et dans la distance ces quelqu'un peut m'aider (j'ai programmer par c++ et opencv)
voici mon programme :


#include <iostream>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <cstdlib>
#include <stdio.h>

using namespace std;
using namespace cv;
struct tableau { int tab[];
} ;
main()
{ tableau M,D;
int d=0,f,a,i,n,dh=0;

//f: lataille de fenetre; a:centre de cens_gauche;n: la taille de cens
//i:cpt de cens_g; x,y : cpt pour parcourir l'image gauche

IplImage* img_g=cvLoadImage("im1.png"); // charger image
IplImage* img_d=cvLoadImage("im2.png");

cvNamedWindow("image gauche",CV_WINDOW_AUTOSIZE); // creer fenetre
cvShowImage("image gauche",img_g);// afficher image

cvNamedWindow("image droite",CV_WINDOW_AUTOSIZE); // creer fenetre
cvShowImage("image droite",img_d);// afficher image
cvWaitKey(0);


cout << "donner la taille de la fenetre :"<< endl;
cin >>f;

n=(f*f);

CvScalar centre_d = cvGet2D(img_d,f/2,f/2);
a = centre_d.val[0];
cout << " calculer census droite "<< endl;
cout << "la valeur de pixel central est :"<< a << endl;


int y,x=0;///// x,y : compteur de l'image
i=0;
while(i<n)
{while ( x<f)
{ y=0;
while ( y<f)
{ CvScalar pix = cvGet2D(img_d,x,y);
if (pix.val[0]!=a)

{ if (a<pix.val[0]) {cout << pix.val[0] << endl; M.tab[i]=1;}
else { cout << pix.val[0] << endl; M.tab[i]=0;}



cout <<M.tab[i]<< endl;}y++;}

x++;}i++;}


CvScalar centre_g = cvGet2D(img_g,f/2,f/2);
int b = centre_g.val[0];
cout << " calculer census gauche "<< endl;
cout << "la valeur de pixel central est :"<< b << endl;

int z,t;///// x,y : compteur de l'image
int j=0;
z=0;
while(j<n)
{
while ( z<f)
{ t=0;
while ( t<f)
{ CvScalar pixl = cvGet2D(img_g,z,t);

if ( pixl.val[0]!=b )
{ if (b < pixl.val[0]) {cout << pixl.val[0] << endl; D.tab[j]=1;}
if (b > pixl.val[0]) {cout << pixl.val[0] << endl; D.tab[j]=0;}
cout << D.tab[j] << endl;}
t++;}z++;}
j++;}

while (d<n)
{
cout << D.tab[d] << M.tab[d] << endl;
d++;
}

for(d=0;d<n;d++)
{
if(D.tab[d] !=M.tab[d]) {dh++;}
}