VarExprReturnSP LitMatrixExprReturn::convertToVarExprReturn( VarExprReturn &varExprReturn ) { SFC::DT dt = getDT(); // assert( dt == varExprReturn.getDT() ); SFCTypesManager::DimensionVector dimensionVector = SFCTypesManager::getDimensions( dt ); if ( dimensionVector.empty() ) { Exprs exprs = DE( getSequence().front() ); VarExprReturnSP varExprReturnSP = VarExprReturn::create( getBlock(), exprs, ExprsProxyVector(), SFCTypesManager::getSingleton().getBasicType( "double" ) ); varExprReturn.combine( "=", varExprReturnSP )->collapse(); return VarExprReturn::create( varExprReturn ); } SFCTypesManager::DimensionVector countVector( dimensionVector.size(), 0 ); for( Sequence::iterator sqnItr = getSequence().begin() ; sqnItr != getSequence().end() ; ++sqnItr ) { for( unsigned int ix = 0 ; ix < (unsigned int) dimensionVector.size() ; ++ix ) { varExprReturn.getExprsProxyVector()[ ix ].setExprs( IE( countVector[ ix ] ) ); } Exprs exprs = BE( varExprReturn.getExprs(), "=", DE( *sqnItr ) ); exprs.buildUdm( getBlock(), SFC::CompoundStatement::meta_stmnt ); for( int ix = dimensionVector.size() ; --ix >= 0 ;) { if ( ++countVector[ix] < dimensionVector[ix] ) break; countVector[ix] = 0; } } return VarExprReturn::create( varExprReturn ); }
Image makeComplexImage(const Image jetImage){ Image complexImage = makeImage(jetImage->width, jetImage->height, jetImage->channels/2); int x,y,c; DEBUG_CHECK(jetImage->channels%2 == 0,"jetImage must have an even number of channels"); for(x = 0; x < complexImage->width; x++){ for(y = 0; y < complexImage->height; y++){ for(c = 0; c < complexImage->channels; c++){ IE(complexImage,x,y,c) = sqrt(SQR(IE(jetImage,x,y,c*2))+ SQR(IE(jetImage,x,y,c*2+1))); } } } return complexImage; }
/* GraphView::LoadImage(Image img) * This fuction copies data from an Image into a QImage that is displayed in the * widget. */ void GraphView::loadImage(Image img){ im = img; image = QImage(width(),height(),32); if(im){ float min = IE(im,0,0,0); float max = IE(im,0,0,0); for(int x = 0; x < im->width; x++){ for(int y = 0; y < im->height; y++){ for(int c = 0; c < im->channels; c++){ if(min > IE(im,x,y,c)) min = IE(im,x,y,c); if(max < IE(im,x,y,c)) max = IE(im,x,y,c); } } } double iScale = im->width/(double)image.width(); double jScale = im->height/(double)image.height(); for(int i = 0; i < image.width(); i++){ for(int j = 0; j < image.height(); j++){ int level = ROUND(255.0 * (interpLinear(im,i*iScale,j*jScale,0) - min )/(max-min)); image.setPixel(i,j,(uint)qRgb(level,level,level)); } } } repaint(TRUE); }
SS DFStatement::buildSS( const StringList &inVarNameList, const DoubleList &inCoefList, const StringList &outVarNameList, const DoubleList &outCoefList ) { // // FIRST, BUILD THE FILTER EQUATION // StringList::const_iterator inVarNameItr = inVarNameList.begin(); DoubleList::const_iterator inCoefItr = inCoefList.begin(); StringList::const_iterator outVarNameItr = outVarNameList.begin(); DoubleList::const_iterator outCoefItr = outCoefList.begin(); BE be( 0, "+", BE( *inCoefItr, "*", *inVarNameItr ) ); while( ++inVarNameItr != inVarNameList.end() ) { (void)++inCoefItr; be = BE( be, "+", BE( *inCoefItr, "*", *inVarNameItr ) ); } while( ++outVarNameItr != outVarNameList.end() ) { (void)++outCoefItr; be = BE( be, "-", BE( *outCoefItr, "*", *outVarNameItr ) ); } be = BE( be, "/", outCoefList.front() ); be = BE( outVarNameList.front(), "=", be ); // // SHIFT THE VARIABLES // SS ss( IE( 1 ), be ); (void)--inVarNameItr; while( inVarNameItr != inVarNameList.begin() ) { StringList::const_iterator nxtInVarNameItr = inVarNameItr; (void)--nxtInVarNameItr; ss = SS( ss, BE( *inVarNameItr, "=", *nxtInVarNameItr ) ); inVarNameItr = nxtInVarNameItr; } (void)--outVarNameItr; while( outVarNameItr != outVarNameList.begin() ) { StringList::const_iterator nxtOutVarNameItr = outVarNameItr; (void)--nxtOutVarNameItr; ss = SS( ss, BE( *outVarNameItr, "=", *nxtOutVarNameItr ) ); outVarNameItr = nxtOutVarNameItr; } return ss; }
Image makeJetImage(const JetMasks masks, Image im){ Image jets = makeImage(im->width,im->height,im->channels*(masks->size)); int n,x,y,c; for(y = 0; y < im->height; y++){ for(x = 0; x < im->width; x++){ for(c = 0; c < im->channels;c++){ for(n = 0; n < masks->size; n++){ IE(jets,x,y,c*masks->size+n) = convolvePoint(x,y,c,im,masks->masks[n]); } } } } return jets; }
VarExprReturnSP LitMatrixExprReturn::convertToVarExprReturn( SFC::ArgDeclBase argDeclBase ) { // IF TYPE ISN'T ARRAY, THEN IT MUST BE BASIC if ( getDT().type() != SFC::Array::meta ) { double value = getSequence().front(); // SEE IF value IS CAN BE ACCURATELY REPRESENTED AS AN INTEGER Exprs exprs; if ( int(value) <= INT_MAX && int( value ) == value ) exprs = IE( (int) value ); else exprs = DE( value ); return VarExprReturn::create( getBlock(), exprs, ExprsProxyVector(), getDT() ); } if ( argDeclBase == Udm::null ) { argDeclBase = SFCManager::createUniqueLocalVar( getBlock(), "result" ); argDeclBase.dt() = getDT(); } VarExprReturnSP varExprReturnSP = VarExprReturn::create( getBlock(), argDeclBase, getDT() ); return convertToVarExprReturn( *varExprReturnSP ); }
/* This function performs a 3X3 two dimentional perspective transform to an image This is used to perform geomentric normalization */ Image transformImage(Image source, int newWidth, int newHeight, const Matrix m){ Image dest = makeImage(newWidth, newHeight, source->channels); Matrix point = makeMatrix(3,1); Matrix inv; Matrix pt; int x, y, c; assert(m->row_dim == 3); assert(m->col_dim == 3); /* initialize homogenius point */ ME(point,2,0) = 1; /* find the inverse transformation to convert from dest to source */ inv = invertRREF(m); for(x = 0; x < dest->width; x++){ for(y = 0; y < dest->height; y++){ /* calculate source point */ ME(point,0,0) = x; ME(point,1,0) = y; ME(point,2,0) = 1.0; pt = multiplyMatrix(inv, point); ME(pt,0,0) = ME(pt,0,0) / ME(pt,2,0); ME(pt,1,0) = ME(pt,1,0) / ME(pt,2,0); for(c = 0; c < dest->channels; c++){ /* interpolate value */ IE(dest,x,y,c) = interpLinear(source, ME(pt,0,0),ME(pt,1,0),c); } /* clean up */ freeMatrix(pt); } } freeMatrix(point); freeMatrix(inv); return dest; }
Image makeGaborMask(FTYPE lambda, FTYPE theta, FTYPE phi, FTYPE gamma, FTYPE sigma,int size) { Image mask = makeImage(size,size,1); int i, j; for(j = 0; j < size; j++){ for(i = 0; i < size; i++){ FTYPE x = size/2.0 - size + i; FTYPE y = size/2.0 - size + j; FTYPE xp = x*cos(theta)+y*sin(theta); FTYPE yp = -x*sin(theta)+y*cos(theta); FTYPE tmp1 = -(xp*xp+gamma*gamma*yp*yp)/(2*sigma*sigma); FTYPE tmp2 = (2*PI*xp/lambda)+phi; IE(mask,i,j,0) = exp(tmp1)*(cos(tmp2)-(phi == 0.0)*(WiskottDCFree)*exp(-sigma*sigma*0.5)); } } /* Rescale the pixel values to have a standard total length */ ZeroMeanUnitLength(mask); return mask; }
void convertImages(Arguments* args){ FILE* list; JetMasks masks; int x, y,i,j; char imagename[MAX_FILENAME_LENGTH]; char filename[MAX_FILENAME_LENGTH]; MESSAGE("Creating gabor masks."); masks = readMasksFile(args->maskFile); if(args->saveMasks){ for(y = 0; y < masks->size; y++){ char outname[MAX_FILENAME_LENGTH]; sprintf(outname, "mask%03d.pgm",y); writePGMImage(masks->masks[y],outname,0); } } list = fopen(args->imageList,"r"); if(!list){ printf("Error opening file: %s\n", args->imageList); exit(1); } while(fscanf(list, "%s", imagename) == 1){ Image im; Image grid; sprintf(filename, "%s/%s", args->inputDir, imagename); im = readRawImage(filename); MESSAGE1ARG("Processing file: %s",filename); /* Find the number of points in the grid */ i = 0; for( x = args->gridStartX; x < im->width; x += args->gridSpaceX){ for( y = args->gridStartY; y < im->height; y+= args->gridSpaceY){ i++; } } grid = makeImage(i,masks->size,1); /* Compute convolutions */ i = 0; for( x = args->gridStartX; x < im->width; x += args->gridSpaceX){ for( y = args->gridStartY; y < im->height; y+= args->gridSpaceY){ for(j = 0; j < masks->size; j++){ if( i < grid->width ) IE(grid,i,j,0) = convolvePoint(x, y, 0, im, masks->masks[j]); } i++; } } sprintf(filename, "%s/%s", args->sfiDir, imagename); writeRawImage(grid,filename); freeImage(grid); freeImage(im); } fclose(list); }