void evolve(unsigned char *img,double updt[][9],double *refhist,int w,int h) { double obj[8],hist[257*10],dist; exobj(updt,obj); IplImage *im,*im2; im2=cvCreateImage( cvSize(w,h), IPL_DEPTH_8U, 3); memcpy(im2->imageData,img,im2->imageSize); im=cvCloneImage(im2); cvCvtColor(im2,im, CV_RGB2HSV); crhist((unsigned char *)im->imageData,hist,w,h,obj); dist=(comphist(refhist,hist)); for(int i=0;i<N;i++) { updt[i][4]+=(rand()%((int)(60*dist))-(int)(30*dist)); updt[i][5]+=(rand()%((int)(60*dist))-(int)(30*dist)); updt[i][6]+=(rand()%((int)(60*dist))-(int)(30*dist)); updt[i][0]+=updt[i][4]; updt[i][1]+=updt[i][5]; updt[i][2]+=updt[i][6]; updt[i][3]=(updt[i][2]*60)/80; if((updt[i][0]<0 || updt[i][0]>320)) updt[i][0]=w/2;updt[i][4]=0; if((updt[i][1]<0 || updt[i][1]>240)) updt[i][1]=h/2;updt[i][5]=0; // if((updt[i][2]<=40 || updt[i][3]<=40)) // { // /*updt[i][2]=80; // updt[i][3]=60; // updt[i][6]=updt[i][7]=0;*/ // } } }
static void mapimage(void) /* map picture and send to stdout */ { COLOR *scan; comphist(); /* generate adaptation histogram */ check2do(); /* modify what2do flags */ if (what2do&DO_VEIL) compveil(); /* compute veil image */ if (!(what2do&DO_LINEAR)) if (mkbrmap() < 0) /* make tone map */ what2do |= DO_LINEAR; /* failed! -- use linear */ #if ADJ_VEIL else if (what2do&DO_VEIL) adjveil(); /* else adjust veil image */ #endif if (what2do&DO_LINEAR) { if (scalef <= FTINY) { if (what2do&DO_HSENS) scalef = htcontrs(Lb(0.5*(Bldmax+Bldmin))) / htcontrs(Lb(bwavg)); else scalef = Lb(0.5*(Bldmax+Bldmin)) / Lb(bwavg); scalef *= WHTEFFICACY/(inpexp*ldmax); } fputexpos(inpexp*scalef, stdout); /* record exposure */ if (lumf == cielum) scalef /= WHTEFFICACY; } fputformat(COLRFMT, stdout); /* complete header */ putchar('\n'); fputsresolu(&inpres, stdout); /* resolution doesn't change */ /* condition our image */ for (scan = firstscan(); scan != NULL; scan = nextscan()) if (fwritescan(scan, scanlen(&inpres), stdout) < 0) { fprintf(stderr, "%s: scanline write error\n", progname); exit(1); } }
void msrmtupdate(unsigned char *img,double updt[][9],IpVec *refpts,double *refhist,int w,int h) { long double tot=0,dist2=0; double hist[257 * 10]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static double ptr[4],p; int key[10][2]; IpVec pts,tpts; IplImage *cl,*tmp2; cl=cvCreateImage(cvSize(w,h),IPL_DEPTH_8U,3); memcpy(cl->imageData,(img),cl->imageSize); tmp2=cvCloneImage(cl); surfDetDes(cl,tpts ,false, 5, 4, 2, 0.00004f); IpPairVec matches; IpVec ipts, ref_ipts; CvPoint src_corners[4] = {cvPoint(0,0), cvPoint(80,0), cvPoint(80, 60), cvPoint(0, 60)}; CvPoint dst_corners[4]; getMatches(tpts,*refpts,matches); int tt=0; tt=translateCorners(matches, src_corners, dst_corners); if (translateCorners(matches, src_corners, dst_corners)) { // Draw box around object for(int i = 0; i < 4; i++ ) { CvPoint r1 = dst_corners[i%4]; CvPoint r2 = dst_corners[(i+1)%4]; cvLine( cl, cvPoint(r1.x, r1.y), cvPoint(r2.x, r2.y), cvScalar(255,255,255),3 ); } for (unsigned int i = 0; i < matches.size(); ++i) drawIpoint(cl, matches[i].first); } CvPoint cpt; cpt.x=((dst_corners[0].x)+(dst_corners[2].x))/2; cpt.y=((dst_corners[0].y)+(dst_corners[2].y))/2; p++; if(tt) { if((abs(ptr[2]-abs(dst_corners[0].x-dst_corners[1].x))>=30 || abs(ptr[3]-abs(dst_corners[0].y-dst_corners[3].y))>=30 || !isrect(dst_corners)) && p>3 ) { tt=0; } else { cvCvtColor(tmp2,cl ,CV_RGB2HSV); ptr[0]=cpt.x;ptr[1]=cpt.y;ptr[2]=abs(dst_corners[0].xst_corners[1].x);ptr[3]=abs(dst_corners[0].y-dst_corners[3].y); crhist((unsigned char *)cl->imageData,hist,w,h,ptr); dist2=.1*(double)exp(-2*pow(comphist(hist,refhist),2)); } } for(int i=0;i<N;i++) { if(tt && dist2>.05 ) { updt[i][0]=cpt.x; updt[i][1]=cpt.y; updt[i][2]=ptr[2]; updt[i][3]=ptr[3]; updt[i][4]=1; updt[i][5]=1; updt[i][8]=1; tot++; } else { double pt[4]; for(int k=0;k<4;k++) { pt[k]=updt[i][k]; } cvCvtColor(tmp2,cl, CV_RGB2HSV); crhist((unsigned char *)cl->imageData,hist,w,h,pt); dist2=.1*(double)exp(-100*pow(comphist(hist,refhist),2)); updt[i][8]=dist2; tot+=updt[i][8]; } } for(int i=0;i<N;i++) updt[i][8]/=(double)tot; }