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());
}
Example #2
0
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);
}