int main() { int c; target=imread("../archivos/pozo_real_big.png",CV_32FC3); target.convertTo(target,CV_32FC3,1.0/255); fuente.initSpectrum(DEFAULT_START_LAMDA,DEFAULT_END_LAMDA,1000); fuente.setGausian(1,LAMDA_0,10e-9); muestra.initMuestra(163e-6,163e-6,7.030674847e6); muestra.setMuestraPlain(1,IN_VISIBILITY); muestra.setMuestraFromFile("../archivos/pozo.png",1,IN_DEPTH,0,0); if (camara.setSpectrumsFiles("../archivos/r1.dat","../archivos/g1.dat","../archivos/b1.dat")){ return -1; }; camara.initFPS(1146,1146,30,COLOR); interf.initInterferometro(&muestra,&fuente,&camara,camara.exposureTime()); srand ( time(NULL) ); ag.PoblacionAleatoria(10,nBytes); //creo una poblacion de 200 individuos, de longitud 'nBytes' cada string ag.FuncionEvaluacion(eval); //defino cual es la funcion que evalua cada cromosoma y devuelve el fitnes entre 0 y 1 (Es llamada automaticamante por al AG ag.dTasaMutacion = 0.05; //tasa de mutacion de 0 a 1 CLASECromosoma *ap,alfa,beta; while(1) { imshow("target",target); c = cvWaitKey(2); if ((char)c==27){ break; } } printf("comienza\n"); do { ag.Generacion(); //creo una nueva generacion de individuos ap = ag.SeleccionarMejor(); if (!(ag.Edad()%1)) {//cada 500 iteraciones muestre la mejor solucion printf ("\n[%d] ",(int)ag.Edad()); printf ("Best: %.3f\tPob:%.3f",ap->Fitness(),ag.Fitness()); imshow("eval",getImg(ap->Cromosoma)); } c = cvWaitKey(2); if ((char)c==27){ break; } } while (ap->Fitness()<0.9 && (ag.Edad()<10000)); //condicion de parada el fitness de la mejor solucion printf ("\n\tGen: %d",(int)ag.Edad()); //imprimo la edad de la poblacion: numero de iteraciones totales ejecutadas (generaciones) for (;;) { c = cvWaitKey(2); if ((char)c==27){ break; } } return 0; }
int main(){ //clock_t begin,end; Mat img ; int c; Spectrum fuente; fuente.initSpectrum(1e-9,1001e-9,1001); //fuente.initSpectrum(DEFAULT_START_LAMDA,DEFAULT_END_LAMDA,10000); //fuente.setPlain(0.5e-9,1000e-9,2); //Fuente plana todo el espectro double lamda=546e-9; fuente.setGausian(20,lamda,1e-9); //Fuente Lab con Filtro Expectral //fuente.setDelta(200,lamda,0); //Fuente Lab con Filtro Expectral //fuente.setDelta(10,632.8e-9,0); //Laser He-Ne //fuente.setBlackbody(3000,1.18); Camara camara; Muestra muestra; //camara.initCamara(30,1/30,COLOR); //Pozo /* muestra.initMuestra(163e-6,163e-6,7.030674847e6); muestra.setMuestraFromFile("../archivos/pozo.png",2.75e-6,IN_DEPTH,0,0); muestra.setMuestraPlain(1,IN_VISIBILITY); */ //Plano muestra.initMuestra(5e-3,5.e-3,100e3); muestra.setMuestraPlain(0,IN_DEPTH); muestra.setMuestraPlain(1,IN_VISIBILITY); // camara.initFPS(1146,1146,30,COLOR); //Pozo camara.initFPS(300,300,60,COLOR); //Plano if (camara.setSpectrumsFiles("../archivos/r1.dat","../archivos/g1.dat","../archivos/b1.dat")){ return -1; }; //camara.gain=2; camara.setChannelGain(1.5,1,1.392); /*----------------------INICIO SOLO IMAGEN------------------------------*/ //float fps=camara.fps(); float exposureTime=camara.exposureTime(); float timeStep=exposureTime/EXPOSURE_STEP; float notExposureTime=camara.getNotIntegrationTime(); Interferometro interf; interf.initInterferometro(&muestra,&fuente,&camara,timeStep); interf.inclinacionX=1e-6; interf.inclinacionY=0e-6; float step=(lamda/2); float copt=0; namedWindow("simulador",CV_WINDOW_NORMAL | CV_WINDOW_KEEPRATIO |CV_GUI_EXPANDED); bool dibuja=true; //interf.getInterferograma(copt); //imshow( "simulador", interf.valores); Mat imgw; string filename; Ruido ruido; float rAmp=(00.0*M_PI/180.0)*(lamda/2.0)/(M_PI*2.0); //ruido.initRuido("../archivos/ruido2.txt",rAmp,1); // float rFreq=1; Mat im[5]; Mat num,den,cosa; int imagen=0; float alpha; float fase; bool toma=false; int pasos=36; int veces=2; int p,v; float pi,dp; dp=10; pi=10; p=0; v=0; bool corre=false; bool video=false; char filename2[50]; double tstep=interf.timeStep(); double t=tstep; double tiempo=tstep; double ta=0; double r; int j=0; // bool exporta=false; while(1){ c = cvWaitKey(2); if (c!=-1){ cout << "c = "<<(int)((char)c)<<endl; switch ((char)c){ case 81: //Izquierda interf.inclinacionX-=step; dibuja=true; // cout <<"incl(X,Y) = ("<<interf.inclinacionX << " , "<< interf.inclinacionY <<")"<<endl; break; case 82: //Arriba interf.inclinacionY+=step; dibuja=true; //cout <<"incl(X,Y) = ("<<interf.inclinacionX << " , "<< interf.inclinacionY <<")"<<endl; break; case 83: //derecha interf.inclinacionX+=step; dibuja=true; //cout <<"incl(X,Y) = ("<<interf.inclinacionX << " , "<< interf.inclinacionY <<")"<<endl; break; case 84: //abajo interf.inclinacionY-=step; dibuja=true; //cout <<"incl(X,Y) = ("<<interf.inclinacionX << " , "<< interf.inclinacionY <<")"<<endl; break; case -85: //+ step+=1e-9; cout<<"Step = "<<step<<endl; break; case -83: //- step-=1e-9; cout<<"Step = "<<step<<endl; break; case 114: //R step=10e-9; dibuja=true; interf.inclinacionX=6.1e-7; interf.inclinacionY=-1.775e-6; muestra.resDepth=3.375e-6; camara.gain=4; camara.offset=-0.1; copt=-2.75e-7; rAmp=9e-8; //cout<<"Step = "<<step<<endl; break; //Depth case 103: //G muestra.resDepth+=step; dibuja=true; break; case 98: //B muestra.resDepth-=step; dibuja=true; break; //Ganancia case 102: //F camara.gain+=0.1; dibuja=true; break; case 118: //V camara.gain-=0.1; dibuja=true; break; //Camino Optico case 97: //A copt+=step; dibuja=true; break; case 122: //Z copt-=step; dibuja=true; break; //Amp Ruido case 109: //M rAmp+=step; dibuja=true; break; case 110: //N rAmp-=step; dibuja=true; break; //Camara Offset case 46: //. camara.offset+=0.05; dibuja=true; break; case 44: //, camara.offset-=0.05; dibuja=true; break; case 115: cout<<endl<<"Ingrese el nombre del archivo"<<endl; cin>>filename; interf.valores.convertTo(imgw,CV_16UC3,65535); if(imwrite(filename,imgw)){ cout <<"Guardado satisfactorio"<<endl; } else { cout <<"Ha ocurrido un error al guardar"<<endl; } break; case 32: //espacio corre=true; cout<<endl<<"Ingrese el nombre del archivo de texto"<<endl; cin>>filename; break; case 10: //ENTER video=!video; break; default: break; } if ((char)c==27 || (char)c==113){ break; } } if (corre){ if (v<veces){ alpha=p*dp+pi; fase=(alpha*M_PI/180)*(lamda/2)/(M_PI*2); copt=(imagen-2)*fase; toma=true; dibuja=true; sprintf(filename2,"%s%.2f-%d-%d.txt",filename.c_str(),alpha,v,0); } else { p++; v=0; } if (p>=pasos){ corre=false; } } if (dibuja || video){ dibuja=false; while (1){ r=ruido.getUnif(rAmp); if (t<exposureTime){ //r=ruido.getRuido(tiempo);//,rAmp,rFreq); interf.integra(r,(t-ta)/tstep); ta=t; tiempo+=tstep; t+=tstep; } else if(t>=exposureTime) { //r=ruido.getRuido(tiempo-(t-exposureTime));//,rAmp,rFreq); interf.integra(r,(exposureTime-ta)/tstep); interf.getInterferograma(copt); imshow( "simulador", interf.valores); if (t>=(exposureTime+notExposureTime)){ tiempo=tiempo; t=t-(exposureTime+notExposureTime); ta=0; } else { float tnof=notExposureTime-(t-exposureTime); int skipsteps=1+(int)(tnof/tstep); tiempo+=tstep*skipsteps; t=tstep*skipsteps-tnof; ta=0; } j++; if (toma){ if (imagen>=5){ num=im[4]-im[0]; den=2*(im[3]-im[1]); cosa=num/den; imagen=0; FILE * pFile; pFile = fopen (filename2,"w"); if (pFile!=NULL) { float val[3]; for (int w=0;w<num.cols;w++){ for (int h=0;h<num.rows;h++){ val[0]=get2D32F(num,w,h,1); val[1]=get2D32F(den,w,h,1); val[2]=get2D32F(cosa,w,h,1); fprintf(pFile,"%.3f\t%.3f\t%.3f\n",val[0],val[1],val[2]); } } fclose (pFile); } else { cout << "Unable to open file"; } v++; } else { interf.valores.copyTo(im[imagen]); //interf.valores.convertTo(im[imagen],CV_8UC3,255); imagen++; } toma=false; } break; } } cout<<"j = "<< j <<endl; // interf.getInterferograma(copt); // imshow( "simulador", interf.valores); cout<<endl<<"Listo"<<endl; cout<<"Gain: "<<camara.gain<<endl; cout<<"Offset: "<<camara.offset<<endl; cout<<"Incl X: "<<interf.inclinacionX<<endl; cout<<"Incl Y: "<<interf.inclinacionY<<endl; cout<<"Res Depth: "<<muestra.resDepth<<endl; cout<<"Camino Óptico: "<<copt<<endl; cout<<"Amplitud Ruido: "<<r<<endl; cout<<endl; } }