void CameraWorker::makeBlobImage(IplImage *src, IplImage *dst) { if(!src || !dst) { printf("src/dst is empty.\n"); return; } if(src->height != dst->height || src->width != dst->width) { printf("src - blobImage sizes dont match!\n"); return; } lutMutex->lock(); for (int i = 0; i < src->height; ++i) { for (int j = 0; j < src->width; ++j) { uchar *pin = &IMGDATA(src, i, j, 0); int b = *pin; int g = *(pin+1); int r = *(pin+2); IMGDATA(dst, i, j, 0) = lut->lookup(b, g, r); } } lutMutex->unlock(); }
float covariance(const IplImage* left,const IplImage* right,int il,int jl,int ir,int jr,const int blocksize) { float cov; float exy=0,ex=0,ey=0; int i,j; for(i=il;i<il+blocksize;i++) { for(j=jl;j<jl+blocksize;j++) { ex=ex+abs(*IMGDATA(left,i,j,0)); } } ex=ex/(blocksize*blocksize); for(i=ir;i<ir+blocksize;i++) { for(j=jr;j<jr+blocksize;j++) { ey=ey+abs(*IMGDATA(right,i,j,0)); } } ey=ey/(blocksize*blocksize); for(i=0;i<blocksize;i++) { for(j=0;j<blocksize;j++) { exy=exy+abs(*IMGDATA(left,il+i,jl+j,0))*abs(*IMGDATA(right,ir+i,jr+j,0)); } } exy=exy/(blocksize*blocksize); cov=exy-ex*ey; //printf("\n COVARIANCE ~ %f",cov); return cov; }
void CameraWorker::colorImage(IplImage *in, IplImage *out) { if(!in) { printf("input is empty.\n"); return; } if(in->height != out->height || in->width != out->width || in->nChannels != out->nChannels) { printf("input - output sizes dont match!\n"); return; } lutMutex->lock(); for (int i = 0; i < in->height; ++i) { for (int j = 0; j < in->width; ++j) { uchar *pin = &IMGDATA(in, i, j, 0); int b = *pin; int g = *(pin+1); int r = *(pin+2); CvScalar cs = lut->getScalar(lut->lookup(b, g, r)); if(lut->lookup(b, g, r) != UNDEF) { uchar *pout = &IMGDATA(out, i, j, 0); *pout = cs.val[0]; *(pout+1)=cs.val[1]; *(pout+2)=cs.val[2]; } } } lutMutex->unlock(); }
void CameraWorker::onMouseClicked(int x, int y)//WARNING: calibration now done on displayframe directly? { if(isArenaCalib) return; if(!frame) return; if(x >= frame->width || y>=frame->height || x<0 || y<0) return; int b = IMGDATA(calibFrame, y, x, 0); int g = IMGDATA(calibFrame, y, x, 1); int r = IMGDATA(calibFrame, y, x, 2); emit markBGR(b, g, r); }
int sumofsquaredaddition(IplImage* left,IplImage* right,int il,int jl,int ir,int jr,int blocksize) { int i,j; int sosa=0; int sd; for(i=0;i<blocksize;i++) { for(j=0;j<blocksize;j++) { sd=abs(*IMGDATA(left,il+i,jl+j,0))+abs(*IMGDATA(right,ir+i,jr+j,0)); sosa=sosa+abs(sd); } } return sosa; }
float sumofsquaredifference(const IplImage* left,const IplImage* right,int il,int jl,int ir,int jr,const int blocksize) { int i,j; float sosd=0; float sd; float sum=0; for(i=0;i<blocksize;i++) { for(j=0;j<blocksize;j++) { sd=abs(*IMGDATA(left,il+i,jl+j,0))-abs(*IMGDATA(right,ir+i,jr+j,0)); sosd=sosd+sd*sd; sum=sum+abs(*IMGDATA(left,il+i,jl+j,0)); } } return sosd/sum*sum; }
float variance(const IplImage* in,int il,int jl,const int blocksize) { float exx=0; float ex=0; float var=0; int i,j; for(i=il;i<il+blocksize;i++) { for(j=jl;j<jl+blocksize;j++) { exx=exx+abs(*IMGDATA(in,i,j,0))*abs(*IMGDATA(in,i,j,0)); ex=ex+abs(*IMGDATA(in,i,j,0)); } } ex=ex/(blocksize*blocksize); exx=exx/(blocksize*blocksize); var=exx-ex*ex; var=abs(var); printf("\n VARIANCE ~ %f",var); return var; }
float mean(const IplImage* in,const int iwindowstart,const int jwindowstart,const int blocksize) { int i,j; float mean=0; for(i=iwindowstart;i<(blocksize+iwindowstart);i++) { for(j=jwindowstart;j<(blocksize+jwindowstart);j++) { mean=mean+abs(*IMGDATA(in,i,j,0)); } } mean=mean/(blocksize*blocksize); return mean; }
float newcorr(const IplImage *left,const IplImage* right,const int il,const int jl,const int ir,const int jr ,const int blocksize) { float corr=0; int i,j; float mx,my; float vx,vy; mx=mean(left,il,jl,blocksize); my=mean(right,ir,jr,blocksize); vx=var(left,il,jl,blocksize); vy=var(right,ir,jr,blocksize); for(i=0;i<blocksize;i++) { for(j=0;j<blocksize;j++) { corr=corr+(abs(*IMGDATA(left,il+i,jl+j,0))-mx)*(abs(*IMGDATA(right,ir+i,jr+j,0))-my); } } //printf("\n CORRELATON ~ %f, VARIANCE ~ %f ,VARIANCE ~ %f",corr,vx,vy ); corr=corr/(sqrt(vx)*sqrt(vy)); corr=corr/(blocksize*blocksize); //printf("\n CORRELATON ~ %f",corr ); return corr; }
void initImage(IplImage* in,int k) { int w=in->width; int h=in->height; int i,j,l; for(i=0;i<w;i++) { for(j=0;j<h;j++) { for(l=0;l<in->nChannels;l++) { *IMGDATA(in,i,j,l)=k; } } } }
void assignDisparity(IplImage* in,int il,int jl,int blocksize,int value,int channel) { int i,j; value=value*255/in->width; //printf("\nPassed ij~%d jl~%d Value ~ %d",il,jl,value); for(i=il;i<il+blocksize;i++) { for(j=jl;j<jl+blocksize;j++) { //*IMGDATA(in,il+i,jl+j,channel)=value*255/in->width; *IMGDATA(in,i,j,channel)=value; } } }
float var(const IplImage*in,const int iwindowstart,const int jwindowstart,const int blocksize) { float vari=0; int i,j; float temp; float m; m=mean(in,iwindowstart,jwindowstart,blocksize); for(i=iwindowstart;i<(blocksize+iwindowstart);i++) { for(j=jwindowstart;j<(blocksize+jwindowstart);j++) { temp=(abs(*IMGDATA(in,i,j,0))-m); vari=vari+temp*temp; } } return vari; }