#include "stdafx.h" #using using namespace System; using namespace System::Drawing; using namespace System::Drawing::Imaging; //using namespace System::Drawing::Internal; using namespace std::tr1; extern simula_Poisson_noise poi; extern all_trash AT; extern im_GL Image_0, Image_1, Image_2; // (2d+t)-input RGBA image, extern unsigned char BUF_R[LT_3D][X_IM_OP_F][Y_IM_OP_F], //3d input image BUF_G[LT_3D][X_IM_OP_F][Y_IM_OP_F], //in the processing format BUF_B[LT_3D][X_IM_OP_F][Y_IM_OP_F]; extern int2v im0dms, im1dms, // storage for dimensions of input images im2dms; // aquired from files; currently unused extern bool to_filter; extern double C_extrema_disparity_fltr; extern real4v k1, k2; extern double PI, ro_noise, ro_coef, mega1, mega2, shift_per_frm_X, // shift/frame in simulated sequence shift_per_frm_Y; // extern image_3D im_sequence; extern tst_wnd_3D tw3D; extern th_FM_3D flow_S, flow, flow_L; extern GLfloat colv[4], range_for_visualization,fStep, ctrlpoints_R[SCALE_2D][SCALE_2D][3], ctrlpoints_G[SCALE_2D][SCALE_2D][3], ctrlpoints_B[SCALE_2D][SCALE_2D][3]; extern mt19937 eng; // a core engine cl void init_im_0( unsigned char * BUFR, unsigned char * BUFG, unsigned char * BUFB, int2v &imdms) { System::Drawing::Bitmap btmp = Bitmap::FromFile(IM_0_NAME); /*bad_000.gif gor30.jpg tvety01.jpg kot08.jpg 53_14_sm.tif taxi01.pgm kuhnya8.jpg */ unsigned char *wrkR, *wrkG, *wrkB; int i,j, bright=0, dark=0, points=0; double max=-1., min=256./*, supp_bright, supp_dark*/; double wR,wG,wB; imdms.y=btmp.Height; imdms.x=btmp.Width; for( i=0; icurrent)min=current; //if(current>210.*210.) //{bright++;} //if(current<1.*1.) // dark++; */ Image_0.Im[i][j][3] = (GLubyte) 255; } /*supp_bright=(double)bright/(double)(points); supp_dark=(double)dark/(double)(points); max=sqrt(max); min=sqrt(min);*/ return; } void init_im_1( unsigned char * BUFR, unsigned char * BUFG, unsigned char * BUFB, int2v &imdms) { System::Drawing::Bitmap btmp = Bitmap::FromFile(IM_1_NAME); /*bad_001.gif tvety03.jpg kot09.jpg gor31.jpg 53_15_sm.tif taxi02.pgm kuhnya8_25.jpg */ unsigned char *wrkR, *wrkG, *wrkB; int i,j; imdms.y=btmp.Height; imdms.x=btmp.Width; double wR,wG,wB; for( i=0; i=X_IM_OP_F)i0=X_IM_OP_F-1; if(j0<0)j0=0; if(j0>=Y_IM_OP_F)j0=Y_IM_OP_F-1; BUF_R[time][i0][j0]=BUF_R[1][i][j]; BUF_G[time][i0][j0]=BUF_G[1][i][j]; BUF_B[time][i0][j0]=BUF_B[1][i][j]; switch(time){ case 0:{ Image_0.Im[i0][j0][0] = (GLubyte)BUF_R[1][i][j]; Image_0.Im[i0][j0][1] = (GLubyte)BUF_G[1][i][j]; Image_0.Im[i0][j0][2] = (GLubyte)BUF_B[1][i][j]; Image_0.Im[i0][j0][3] = (GLubyte) 255; break; } case 2:{ Image_2.Im[i0][j0][0] = (GLubyte)BUF_R[1][i][j]; Image_2.Im[i0][j0][1] = (GLubyte)BUF_G[1][i][j]; Image_2.Im[i0][j0][2] = (GLubyte)BUF_B[1][i][j]; Image_2.Im[i0][j0][3] = (GLubyte) 255; break; } } } } double brightness(int i, int j, int time) { double fi,fj, r, mean; //mega1=3./PI, mega2=3./DVA_PI; fi=i; fj=j; /*real4v k1, k2; k1.u=cos(3.*PI/10.); k1.v=sin(3.*PI/10.); k2.u=cos(3.*PI/20.); k2.v=- sin(3.*PI/20.); */ //noise level is presented by 'ro_noise'; it belongs to [0; ro_max] r=0.25*(2.+ sin(DVA_PI*(k1.u*fi+k1.v*fj)/12. +mega1*time/*/(LT_3D-1)*/)+ sin(DVA_PI*(k2.u*fi+k2.v*fj)/18. +mega2*time/*/(LT_3D-1)*/) ); //mean=Bro_noise+(Wro_noise-Bro_noise)*r; mean=poi.EXPECT_Photons(r); poisson_distribution poisson(mean); //r= (1.-2.*ro_noise)*r+ro_noise; // ro_noise255.)br=255.;*/ br/=255; // this operation is introduced to avoid corrections // in the following texts of a previous version // end: corrected signal to fit Poisson model *(wrkR+j)= (unsigned char) (br* 255. +0.5); *(wrkG+j)= (unsigned char) (br* 255.+0.5); *(wrkB+j)= (unsigned char) (br* 255.+0.5); switch(time){ case 0:{ Image_0.Im[i][j][0] = (GLubyte)(br* 255.+0.5); Image_0.Im[i][j][1] = (GLubyte)(br* 255.+0.5); Image_0.Im[i][j][2] = (GLubyte)(br* 255.+0.5); Image_0.Im[i][j][3] = (GLubyte) 255; break; } case 1:{ Image_1.Im[i][j][0] = (GLubyte)(br* 255.+0.5); Image_1.Im[i][j][1] = (GLubyte)(br* 255.+0.5); Image_1.Im[i][j][2] = (GLubyte)(br* 255.+0.5); Image_1.Im[i][j][3] = (GLubyte) 255; break; } case 2:{ Image_2.Im[i][j][0] = (GLubyte)(br* 255.+0.5); Image_2.Im[i][j][1] = (GLubyte)(br* 255.+0.5); Image_2.Im[i][j][2] = (GLubyte)(br* 255.+0.5); Image_2.Im[i][j][3] = (GLubyte) 255; break; } default: break; } } }