diff options
| -rw-r--r-- | Core/inpainters_CPU/Diffusion_Inpaint_core.c | 9 | ||||
| -rw-r--r-- | Wrappers/Python/ccpi/filters/regularisers.py | 3 | ||||
| -rw-r--r-- | Wrappers/Python/demos/demo_cpu_inpainters.py | 40 | 
3 files changed, 32 insertions, 20 deletions
diff --git a/Core/inpainters_CPU/Diffusion_Inpaint_core.c b/Core/inpainters_CPU/Diffusion_Inpaint_core.c index e6972ab..56e0421 100644 --- a/Core/inpainters_CPU/Diffusion_Inpaint_core.c +++ b/Core/inpainters_CPU/Diffusion_Inpaint_core.c @@ -47,13 +47,19 @@ int signNDF_inc(float x) {  float Diffusion_Inpaint_CPU_main(float *Input, unsigned char *Mask, float *Output, float lambdaPar, float sigmaPar, int iterationsNumb, float tau, int penaltytype, int dimX, int dimY, int dimZ)  { -    int i; +    int i,pointsone;      float sigmaPar2;      sigmaPar2 = sigmaPar/sqrt(2.0f);      /* copy into output */      copyIm(Input, Output, dimX, dimY, dimZ); +    pointsone = 0; +    for (i=0; i<dimY*dimX*dimZ; i++) if (Mask[i] == 1) pointsone++; +         +    if (pointsone == 0) printf("%s \n", "Nothing to inpaint, zero mask!"); +    else { +          if (dimZ == 1) {      /* running 2D diffusion iterations */      for(i=0; i < iterationsNumb; i++) { @@ -68,6 +74,7 @@ float Diffusion_Inpaint_CPU_main(float *Input, unsigned char *Mask, float *Outpu              else NonLinearDiff_Inp_3D(Input, Mask, Output, lambdaPar, sigmaPar2, tau, penaltytype, dimX, dimY, dimZ);  		}  	} +	}      return *Output;  }  /********************************************************************/ diff --git a/Wrappers/Python/ccpi/filters/regularisers.py b/Wrappers/Python/ccpi/filters/regularisers.py index e62c020..8120f72 100644 --- a/Wrappers/Python/ccpi/filters/regularisers.py +++ b/Wrappers/Python/ccpi/filters/regularisers.py @@ -113,5 +113,4 @@ def NDF(inputData, regularisation_parameter, edge_parameter, iterations,  def NDF_INP(inputData, maskData, regularisation_parameter, edge_parameter, iterations,                       time_marching_parameter, penalty_type):          return NDF_INPAINT_CPU(inputData, maskData, regularisation_parameter,  -        edge_parameter, iterationsNumb,  -        time_marching_parameter, penalty_type) +        edge_parameter, iterations, time_marching_parameter, penalty_type) diff --git a/Wrappers/Python/demos/demo_cpu_inpainters.py b/Wrappers/Python/demos/demo_cpu_inpainters.py index a022bc8..b067b11 100644 --- a/Wrappers/Python/demos/demo_cpu_inpainters.py +++ b/Wrappers/Python/demos/demo_cpu_inpainters.py @@ -20,30 +20,36 @@ def printParametersToString(pars):                  txt += "{0} = {1}".format(key, value.__name__)              elif key == 'input':                  txt += "{0} = {1}".format(key, np.shape(value)) -            elif key == 'refdata': +            elif key == 'maskData':                  txt += "{0} = {1}".format(key, np.shape(value))              else:                  txt += "{0} = {1}".format(key, value)              txt += '\n'          return txt  ############################################################################### -#%% +  # read sinogram and the mask  filename = os.path.join(".." , ".." , ".." , "data" ,"SinoInpaint.mat")  sino = io.loadmat(filename) -sino_no_cut = sino.get('Sinogram') +sino_full = sino.get('Sinogram')  Mask = sino.get('Mask') -[angles_dim,detectors_dim] = sino_no_cut.shape -sinogram = sino_no_cut/np.max(sino_no_cut) +[angles_dim,detectors_dim] = sino_full.shape +sino_full = sino_full/np.max(sino_full)  #apply mask to sinogram -sino_cut = sinogram*(1-Mask) +sino_cut = sino_full*(1-Mask) +sino_cut_new = np.zeros((angles_dim,detectors_dim),'float32') +#sino_cut_new = sino_cut.copy(order='c') +sino_cut_new[:] = sino_cut[:] +mask = np.zeros((angles_dim,detectors_dim),'uint8') +#mask =Mask.copy(order='c') +mask[:] = Mask[:]  plt.figure(1)  plt.subplot(121) -plt.imshow(sino_cut,vmin=0.0, vmax=1) +plt.imshow(sino_cut_new,vmin=0.0, vmax=1)  plt.title('Missing Data sinogram')  plt.subplot(122) -plt.imshow(Mask) +plt.imshow(mask)  plt.title('Mask')  plt.show()  #%% @@ -56,15 +62,15 @@ fig = plt.figure(2)  plt.suptitle('Performance of linear inpainting using the CPU')  a=fig.add_subplot(1,2,1)  a.set_title('Missing data sinogram') -imgplot = plt.imshow(sino_cut,cmap="gray") +imgplot = plt.imshow(sino_cut_new,cmap="gray")  # set parameters  pars = {'algorithm' : NDF_INP, \ -        'input' : sino_cut,\ -        'maskData' : Mask,\ -        'regularisation_parameter':6000,\ +        'input' : sino_cut_new,\ +        'maskData' : mask,\ +        'regularisation_parameter':1000,\          'edge_parameter':0.0,\ -        'number_of_iterations' :5000 ,\ +        'number_of_iterations' :1000 ,\          'time_marching_parameter':0.000075,\          'penalty_type':1          } @@ -78,7 +84,7 @@ ndf_inp_linear = NDF_INP(pars['input'],                pars['time_marching_parameter'],                 pars['penalty_type']) -rms = rmse(sinogram, ndf_inp_linear) +rms = rmse(sino_full, ndf_inp_linear)  pars['rmse'] = rms  txtstr = printParametersToString(pars) @@ -107,8 +113,8 @@ imgplot = plt.imshow(sino_cut,cmap="gray")  # set parameters  pars = {'algorithm' : NDF_INP, \ -        'input' : sino_cut,\ -        'maskData' : Mask,\ +        'input' : sino_cut_new,\ +        'maskData' : mask,\          'regularisation_parameter':80,\          'edge_parameter':0.00009,\          'number_of_iterations' :1500 ,\ @@ -125,7 +131,7 @@ ndf_inp_nonlinear = NDF_INP(pars['input'],                pars['time_marching_parameter'],                 pars['penalty_type']) -rms = rmse(sinogram, ndf_inp_nonlinear) +rms = rmse(sino_full, ndf_inp_nonlinear)  pars['rmse'] = rms  txtstr = printParametersToString(pars)  | 
