float * inpaint_image_wrapper(float *inputImage, int nx, int ny, int nc, float *inputOcc, int nOccX, int nOccY, int nOccC, int patchSizeX, int patchSizeY, int nLevels, bool useFeatures) { // ****************************************** // // **** INITIALISE PATCHMATCH PARAMETERS **** // // ****************************************** // patchMatchParameterStruct *patchMatchParams = initialise_patch_match_parameters(patchSizeX, patchSizeY, nx, ny); // ****************************************** // // **** INITIALISE INPAINTING PARAMETERS **** // // ****************************************** // float residualThreshold = 0.1; int maxIterations = 10; inpaintingParameterStruct *inpaintingParameters = initialise_inpainting_parameters(nLevels, useFeatures, residualThreshold, maxIterations); // ******************************** // // ***** CREATE IMAGE STRUCTURES*** // // ******************************** // nTupleVolume *imgVolIn = new nTupleVolume(nc,nx,ny,patchSizeX,patchSizeY,IMAGE_INDEXING,inputImage); nTupleVolume *occVolIn; if (nOccC == 3) //if we need to convert the input occlusion { nTupleVolume *occVolTemp = new nTupleVolume(nOccC,nOccX,nOccY,patchSizeX,patchSizeY,IMAGE_INDEXING,inputOcc); occVolIn = rgb_to_grey(occVolTemp); delete(occVolTemp); } else occVolIn = new nTupleVolume(1,nOccX,nOccY,patchSizeX,patchSizeY,IMAGE_INDEXING,inputOcc); occVolIn->binarise(); // ***** CALL MAIN ROUTINE **** // nTupleVolume * imgOut = inpaint_image(imgVolIn, occVolIn, patchMatchParams, inpaintingParameters); return(imgOut->get_data_ptr()); }
static Errcode rgb_read_grey(Rgbctl *ctl, Rcel *cel) /***************************************************************************** * Read a rgb file into a cel in greys. ****************************************************************************/ { int y; int dy; Errcode err = Success; int height = ctl->height; int width = ctl->width; UBYTE *lbuf = ctl->rgb_bufs[0]; /* use red buffer for greys */ grey_cmap(cel->cmap); err = pdr_rgb_seekstart(ctl->ifile); if (err < Success) { goto OUT; } else if (err == Success) { /* picture is rightsideup in file */ y = 0; dy = 1; } else { /* picture is upsidedown in file */ y = ctl->height-1; dy = -1; } while (--height >= 0) { if (Success > (err = pdr_rgb_readline(ctl->ifile, ctl->linebuf))) { goto OUT; } rgb_to_grey(ctl->linebuf, lbuf, width); pj_put_hseg(cel, lbuf, 0, y, width); y += dy; } OUT: return err; }
void inpaint_image_wrapper(const char *fileIn,const char *fileOccIn, const char *fileOut, int patchSizeX, int patchSizeY, int nLevels, bool useFeatures, bool verboseMode) { // *************************** // // ***** READ INPUTS ********* // // ************************** // //read input image size_t nx,ny,nc; size_t nOccX,nOccY,nOccC; //read input image printf("Reading input image\n"); float *inputImage = read_image(fileIn,&nx,&ny,&nc); //read input occlusion printf("Reading input occlusion\n"); float *inputOcc = read_image(fileOccIn,&nOccX,&nOccY,&nOccC); // ****************************************** // // **** INITIALISE PATCHMATCH PARAMETERS **** // // ****************************************** // patchMatchParameterStruct *patchMatchParams = initialise_patch_match_parameters(patchSizeX, patchSizeY, nx, ny, verboseMode); if (check_patch_match_parameters(patchMatchParams) == -1) return; // ****************************************** // // **** INITIALISE INPAINTING PARAMETERS **** // // ****************************************** // float residualThreshold = 0.1; int maxIterations = 10; inpaintingParameterStruct *inpaintingParams = initialise_inpainting_parameters(nLevels, useFeatures, residualThreshold, maxIterations); // ******************************** // // ***** CREATE IMAGE STRUCTURES*** // // ******************************** // nTupleVolume *imgVolIn = new nTupleVolume(nc,nx,ny,patchSizeX,patchSizeY,IMAGE_INDEXING,inputImage); nTupleVolume *occVolIn; if (nOccC == 3) //if we need to convert the input occlusion { nTupleVolume *occVolTemp = new nTupleVolume(3,nx,ny,patchSizeX,patchSizeY,IMAGE_INDEXING,inputOcc); occVolIn = rgb_to_grey(occVolTemp); delete(occVolTemp); } else occVolIn = new nTupleVolume(1,nOccX,nOccY,patchSizeX,patchSizeY,IMAGE_INDEXING,inputOcc); occVolIn->binarise(); // ***** CALL MAIN ROUTINE **** // nTupleVolume * imgOut = inpaint_image(imgVolIn, occVolIn, patchMatchParams, inpaintingParams); //write output //write_image(imgOut,fileOut,255); write_image(imgOut,fileOut); delete(imgOut); }