From 4d3758593aaf9a2b7a717bf1c2b006dea6ad70bb Mon Sep 17 00:00:00 2001
From: Martin Genet <martin.genet@polytechnique.edu>
Date: Mon, 20 May 2019 16:32:14 +0200
Subject: [PATCH] k-space resampling with and without discretization change

---
 __init__.py                     |   4 +-
 downsample_images.py            | 275 ++++++++++++++++++++++++++++++++
 generate_images.py              |  64 ++++----
 generate_undersampled_images.py |   6 +-
 normalize_images.py             |  18 +--
 resample_images.py              | 151 ------------------
 6 files changed, 327 insertions(+), 191 deletions(-)
 create mode 100644 downsample_images.py
 delete mode 100644 resample_images.py

diff --git a/__init__.py b/__init__.py
index 089a12d..3ac733e 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,5 +1,6 @@
 #this file was generated by __init__.py.py
 
+from generate_images_Mapping import *
 from fedic import *
 from plot_binned_strains_vs_radius import *
 from NonlinearSolver import *
@@ -14,7 +15,6 @@ from Energy_Regularization import *
 from compute_warped_images import *
 from plot_strains import *
 from image_expressions_cpp import *
-from resample_images import *
 from Energy import *
 from compute_warped_mesh import *
 from Energy_WarpedImage import *
@@ -32,5 +32,7 @@ from compute_displacements import *
 from generate_images import *
 from ImageSeries import *
 from compute_displacement_error import *
+from downsample_images import *
 from project import *
 from compute_strains import *
+from generate_images_Image import *
diff --git a/downsample_images.py b/downsample_images.py
new file mode 100644
index 0000000..20f0163
--- /dev/null
+++ b/downsample_images.py
@@ -0,0 +1,275 @@
+#coding=utf8
+
+################################################################################
+###                                                                          ###
+### Created by Martin Genet, 2016-2019                                       ###
+###                                                                          ###
+### École Polytechnique, Palaiseau, France                                   ###
+###                                                                          ###
+################################################################################
+
+import glob
+import math
+import numpy
+import os
+import random
+import vtk
+
+import myPythonLibrary as mypy
+import myVTKPythonLibrary as myvtk
+
+import dolfin_dic as ddic
+
+################################################################################
+
+def downsample_images(
+        images_folder,
+        images_basename,
+        downsampling_factors,
+        images_ext="vti",
+        keep_resolution=0,
+        write_temp_images=0,
+        verbose=0):
+
+    mypy.my_print(verbose, "*** downsample_images ***")
+
+    images_filenames = glob.glob(images_folder+"/"+images_basename+"_[0-9]*"+"."+images_ext)
+    images_nframes = len(images_filenames)
+    images_zfill = len(images_filenames[0].rsplit("_",1)[-1].split(".",1)[0])
+
+    image = myvtk.readImage(
+        filename=images_folder+"/"+images_basename+"_"+str(0).zfill(images_zfill)+"."+images_ext,
+        verbose=0)
+    images_ndim = myvtk.getImageDimensionality(
+        image=image,
+        verbose=0)
+    images_spacing = image.GetSpacing()
+    images_origin = image.GetOrigin()
+    images_nvoxels = myvtk.getImageDimensions(
+        image=image,
+        verbose=0)
+    mypy.my_print(verbose, "images_nvoxels = "+str(images_nvoxels))
+    assert (len(images_nvoxels) == images_ndim)
+    images_npoints = numpy.prod(images_nvoxels)
+    # mypy.my_print(verbose, "images_npoints = "+str(images_npoints))
+    assert (images_npoints == image.GetNumberOfPoints())
+
+    images_downsampled_nvoxels = numpy.array(images_nvoxels)/numpy.array(downsampling_factors)
+    images_downsampled_nvoxels = numpy.ceil(images_downsampled_nvoxels)
+    images_downsampled_nvoxels = [int(n) for n in images_downsampled_nvoxels]
+    mypy.my_print(verbose, "images_downsampled_nvoxels = "+str(images_downsampled_nvoxels))
+    downsampling_factors = numpy.array(images_nvoxels)/numpy.array(images_downsampled_nvoxels)
+    mypy.my_print(verbose, "downsampling_factors = "+str(downsampling_factors))
+    downsampling_factor = numpy.prod(downsampling_factors)
+    mypy.my_print(verbose, "downsampling_factor = "+str(downsampling_factor))
+    images_downsampled_npoints = numpy.prod(images_downsampled_nvoxels)
+    # mypy.my_print(verbose, "images_downsampled_npoints = "+str(images_downsampled_npoints))
+
+    if   (images_ext == "vtk"):
+        reader = vtk.vtkImageReader()
+        writer = vtk.vtkImageWriter()
+        if (write_temp_images):
+            writer_fft  = vtk.vtkImageWriter()
+            if (keep_resolution):
+                writer_mul = vtk.vtkImageWriter()
+            else:
+                writer_sel = vtk.vtkImageWriter()
+    elif (images_ext == "vti"):
+        reader = vtk.vtkXMLImageDataReader()
+        writer = vtk.vtkXMLImageDataWriter()
+        if (write_temp_images):
+            writer_fft  = vtk.vtkXMLImageDataWriter()
+            if (keep_resolution):
+                writer_mul = vtk.vtkXMLImageDataWriter()
+            else:
+                writer_sel = vtk.vtkXMLImageDataWriter()
+    else:
+        assert 0, "\"ext\" must be \".vtk\" or \".vti\". Aborting."
+
+    fft = vtk.vtkImageFFT()
+    fft.SetDimensionality(images_ndim)
+    fft.SetInputConnection(reader.GetOutputPort())
+    if (write_temp_images): writer_fft.SetInputConnection(fft.GetOutputPort())
+
+    if (keep_resolution):
+        image_filename = images_folder+"/"+images_basename+"_"+str(0).zfill(images_zfill)+"."+images_ext
+        mask_image = myvtk.readImage(
+            filename=image_filename,
+            verbose=0)
+        mask_scalars = myvtk.createDoubleArray(
+            name="ImageScalars",
+            n_components=2,
+            n_tuples=images_npoints,
+            verbose=0)
+        mask_image.GetPointData().SetScalars(mask_scalars)
+        # print mask_image.GetScalarType()
+        # print mask_image.GetPointData().GetScalars()
+        if (images_ndim == 1):
+            for k_x in xrange(images_nvoxels[0]):
+                if ((k_x >                     images_downsampled_nvoxels[0]/2) \
+                and (k_x < images_nvoxels[0] - images_downsampled_nvoxels[0]/2)):
+                    mask_scalars.SetTuple(k_x, [0, 0])
+                else:
+                    mask_scalars.SetTuple(k_x, [1, 1])
+        if (images_ndim == 2):
+            for k_y in xrange(images_nvoxels[1]):
+                for k_x in xrange(images_nvoxels[0]):
+                    k_point = k_y*images_nvoxels[0] + k_x
+                    if (((k_x >                     images_downsampled_nvoxels[0]/2)  \
+                    and  (k_x < images_nvoxels[0] - images_downsampled_nvoxels[0]/2)) \
+                    or  ((k_y >                     images_downsampled_nvoxels[1]/2)  \
+                    and  (k_y < images_nvoxels[1] - images_downsampled_nvoxels[1]/2))):
+                        mask_scalars.SetTuple(k_point, [0, 0])
+                    else:
+                        mask_scalars.SetTuple(k_point, [1, 1])
+        if (images_ndim == 3):
+            for k_z in xrange(images_nvoxels[2]):
+                for k_y in xrange(images_nvoxels[1]):
+                    for k_x in xrange(images_nvoxels[0]):
+                        k_point = k_z*images_nvoxels[1]*images_nvoxels[0] + k_y*images_nvoxels[0] + k_x
+                        if (((k_x >                     images_downsampled_nvoxels[0]/2)  \
+                        and  (k_x < images_nvoxels[0] - images_downsampled_nvoxels[0]/2)) \
+                        or  ((k_y >                     images_downsampled_nvoxels[1]/2)  \
+                        and  (k_y < images_nvoxels[1] - images_downsampled_nvoxels[1]/2)) \
+                        or  ((k_z >                     images_downsampled_nvoxels[2]/2)  \
+                        and  (k_z < images_nvoxels[2] - images_downsampled_nvoxels[2]/2))):
+                            mask_scalars.SetTuple(k_point, [0, 0])
+                        else:
+                            mask_scalars.SetTuple(k_point, [1, 1])
+        if (write_temp_images): myvtk.writeImage(
+            image=mask_image,
+            filename=images_folder+"/"+images_basename+"_mask"+"."+images_ext,
+            verbose=0)
+
+        mult = vtk.vtkImageMathematics()
+        mult.SetOperationToMultiply()
+        mult.SetInputConnection(0, fft.GetOutputPort())
+        mult.SetInputData(1, mask_image)
+        if (write_temp_images): writer_mul.SetInputConnection(mult.GetOutputPort())
+    else:
+        image_downsampled = vtk.vtkImageData()
+
+        if   (images_ndim == 1):
+            extent = [0, images_downsampled_nvoxels[0]-1, 0,                               0, 0,                               0]
+        elif (images_ndim == 2):
+            extent = [0, images_downsampled_nvoxels[0]-1, 0, images_downsampled_nvoxels[1]-1, 0,                               0]
+        elif (images_ndim == 3):
+            extent = [0, images_downsampled_nvoxels[0]-1, 0, images_downsampled_nvoxels[1]-1, 0, images_downsampled_nvoxels[2]-1]
+        image_downsampled.SetExtent(extent)
+        mypy.my_print(verbose, "extent = "+str(extent))
+
+        if   (images_ndim == 1):
+            spacing = [images_spacing[0]*downsampling_factors[0],                                        1.,                                        1.]
+        elif (images_ndim == 2):
+            spacing = [images_spacing[0]*downsampling_factors[0], images_spacing[1]*downsampling_factors[1],                                        1.]
+        elif (images_ndim == 3):
+            spacing = [images_spacing[0]*downsampling_factors[0], images_spacing[1]*downsampling_factors[1], images_spacing[2]*downsampling_factors[2]]
+        image_downsampled.SetSpacing(spacing)
+        mypy.my_print(verbose, "spacing = "+str(spacing))
+
+        if   (images_ndim == 1):
+            origin = [spacing[0]/2,           0.,           0.]
+        elif (images_ndim == 2):
+            origin = [spacing[0]/2, spacing[1]/2,           0.]
+        elif (images_ndim == 3):
+            origin = [spacing[0]/2, spacing[1]/2, spacing[2]/2]
+        image_downsampled.SetOrigin(origin)
+        mypy.my_print(verbose, "origin = "+str(origin))
+
+        image_downsampled_scalars = myvtk.createDoubleArray(
+            name="ImageScalars",
+            n_components=2,
+            n_tuples=images_downsampled_npoints,
+            verbose=0)
+        image_downsampled.GetPointData().SetScalars(image_downsampled_scalars)
+        I = numpy.empty(2)
+
+        if (write_temp_images):
+            writer_sel.SetInputData(image_downsampled)
+
+    rfft = vtk.vtkImageRFFT()
+    rfft.SetDimensionality(images_ndim)
+    if (keep_resolution):
+        rfft.SetInputConnection(mult.GetOutputPort())
+    else:
+        rfft.SetInputData(image_downsampled) # MG20190520: Not sure why this does not work.
+
+    writer.SetInputConnection(rfft.GetOutputPort())
+
+    if (keep_resolution):
+        for k_frame in xrange(images_nframes):
+            mypy.my_print(verbose, "k_frame = "+str(k_frame))
+
+            reader.SetFileName(images_folder+"/"+images_basename+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
+
+            if (write_temp_images):
+                writer_fft.SetFileName(images_folder+"/"+images_basename+"_fft"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
+                writer_fft.Write()
+
+            if (write_temp_images):
+                writer_mul.SetFileName(images_folder+"/"+images_basename+"_mul"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
+                writer_mul.Write()
+
+            writer.SetFileName(images_folder+"/"+images_basename+"_downsampled"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
+            writer.Write()
+    else:
+        for k_frame in xrange(images_nframes):
+            mypy.my_print(verbose, "k_frame = "+str(k_frame))
+
+            reader.SetFileName(images_folder+"/"+images_basename+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
+            reader.Update()
+            # print "reader.GetOutput() = "+str(reader.GetOutput())
+
+            fft.Update()
+            if (write_temp_images):
+                writer_fft.SetFileName(images_folder+"/"+images_basename+"_fft"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
+                writer_fft.Write()
+            # print "fft.GetOutput() = "+str(fft.GetOutput())
+            # print "fft.GetOutput().GetScalarType() = "+str(fft.GetOutput().GetScalarType())
+            # print "fft.GetOutput().GetPointData().GetScalars() = "+str(fft.GetOutput().GetPointData().GetScalars())
+
+            image_scalars = fft.GetOutput().GetPointData().GetScalars()
+            if (images_ndim == 1):
+                for k_x_downsampled in xrange(images_downsampled_nvoxels[0]):
+                    k_x = k_x_downsampled if (k_x_downsampled <= images_downsampled_nvoxels[0]/2) else k_x_downsampled+(images_nvoxels[0]-images_downsampled_nvoxels[0])
+                    image_scalars.GetTuple(k_x, I)
+                    I /= downsampling_factor
+                    image_downsampled_scalars.SetTuple(k_x_downsampled, I)
+            if (images_ndim == 2):
+                for k_y_downsampled in xrange(images_downsampled_nvoxels[1]):
+                    k_y = k_y_downsampled if (k_y_downsampled <= images_downsampled_nvoxels[1]/2) else k_y_downsampled+(images_nvoxels[1]-images_downsampled_nvoxels[1])
+                    for k_x_downsampled in xrange(images_downsampled_nvoxels[0]):
+                        k_x = k_x_downsampled if (k_x_downsampled <= images_downsampled_nvoxels[0]/2) else k_x_downsampled+(images_nvoxels[0]-images_downsampled_nvoxels[0])
+                        k_point_downsampled = k_y_downsampled*images_downsampled_nvoxels[0] + k_x_downsampled
+                        k_point             = k_y            *images_nvoxels[0]             + k_x
+                        image_scalars.GetTuple(k_point, I)
+                        I /= downsampling_factor
+                        image_downsampled_scalars.SetTuple(k_point_downsampled, I)
+            if (images_ndim == 3):
+                for k_z_downsampled in xrange(images_downsampled_nvoxels[2]):
+                    k_z = k_z_downsampled if (k_z_downsampled <= images_downsampled_nvoxels[2]/2) else k_z_downsampled+(images_nvoxels[2]-images_downsampled_nvoxels[2])
+                    for k_y_downsampled in xrange(images_downsampled_nvoxels[1]):
+                        k_y = k_y_downsampled if (k_y_downsampled <= images_downsampled_nvoxels[1]/2) else k_y_downsampled+(images_nvoxels[1]-images_downsampled_nvoxels[1])
+                        for k_x_downsampled in xrange(images_downsampled_nvoxels[0]):
+                            k_x = k_x_downsampled if (k_x_downsampled <= images_downsampled_nvoxels[0]/2) else k_x_downsampled+(images_nvoxels[0]-images_downsampled_nvoxels[0])
+                            k_point_downsampled = k_z_downsampled*images_downsampled_nvoxels[1]*images_downsampled_nvoxels[0] + k_y_downsampled*images_downsampled_nvoxels[0] + k_x_downsampled
+                            k_point             = k_z            *images_nvoxels[1]            *images_nvoxels[0]             + k_y            *images_nvoxels[0]             + k_x
+                            image_scalars.GetTuple(k_point, I)
+                            I /= downsampling_factor
+                            image_downsampled_scalars.SetTuple(k_point_downsampled, I)
+            # print "image_downsampled = "+str(image_downsampled)
+            # print "image_downsampled_scalars = "+str(image_downsampled_scalars)
+
+            if (write_temp_images):
+                # writer_sel.SetInputData(image_downsampled)
+                writer_sel.SetFileName(images_folder+"/"+images_basename+"_sel"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
+                writer_sel.Write()
+
+            rfft = vtk.vtkImageRFFT()             # MG20190520: Not sure why this is needed.
+            rfft.SetDimensionality(images_ndim)   # MG20190520: Not sure why this is needed.
+            rfft.SetInputData(image_downsampled)  # MG20190520: Not sure why this is needed.
+            rfft.Update()
+
+            writer.SetInputData(rfft.GetOutput()) # MG20190520: Not sure why this is needed.
+            writer.SetFileName(images_folder+"/"+images_basename+"_downsampled"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
+            writer.Write()
diff --git a/generate_images.py b/generate_images.py
index 63ebfa1..cde5c46 100644
--- a/generate_images.py
+++ b/generate_images.py
@@ -52,7 +52,7 @@ def set_I_wGrad(
     G = numpy.dot(G, Finv)
     vtk_gradient_vectors.SetTuple(k_point, G)
 
-def generateImages(
+def generate_images(
         images,
         structure,
         texture,
@@ -62,13 +62,13 @@ def generateImages(
         generate_image_gradient=False,
         verbose=0):
 
-    mypy.my_print(verbose, "*** generateImages ***")
+    mypy.my_print(verbose, "*** generate_images ***")
 
     assert ("n_integration" not in images),\
-        "\"n_integration\" has been deprecated. Use \"resampling\" instead. Aborting."
+        "\"n_integration\" has been deprecated. Use \"upsampling\" instead. Aborting."
 
-    if ("resampling_factors" not in images):
-        images["resampling_factors"] = [1]*images["n_dim"]
+    if ("upsampling_factors" not in images):
+        images["upsampling_factors"] = [1]*images["n_dim"]
     if ("zfill" not in images):
         images["zfill"] = len(str(images["n_frames"]))
     if ("ext" not in images):
@@ -92,30 +92,37 @@ def generateImages(
 
     vtk_image = vtk.vtkImageData()
 
+    delta = numpy.array(images["L"])/numpy.array(images["n_voxels"])
+
+    images["n_voxels_upsampled"] = numpy.array(images["n_voxels"])*numpy.array(images["upsampling_factors"])
+    delta_upsampled = numpy.array(images["L"])/numpy.array(images["n_voxels_upsampled"])
+
     if   (images["n_dim"] == 1):
-        vtk_image.SetExtent([0, images["n_voxels"][0]*images["resampling_factors"][0]-1, 0,                                               0, 0,                                               0])
+        extent = [0, images["n_voxels_upsampled"][0]-1, 0,                                 0, 0,                                 0]
     elif (images["n_dim"] == 2):
-        vtk_image.SetExtent([0, images["n_voxels"][0]*images["resampling_factors"][0]-1, 0, images["n_voxels"][1]*images["resampling_factors"][1]-1, 0,                                               0])
+        extent = [0, images["n_voxels_upsampled"][0]-1, 0, images["n_voxels_upsampled"][1]-1, 0,                                 0]
     elif (images["n_dim"] == 3):
-        vtk_image.SetExtent([0, images["n_voxels"][0]*images["resampling_factors"][0]-1, 0, images["n_voxels"][1]*images["resampling_factors"][1]-1, 0, images["n_voxels"][2]*images["resampling_factors"][2]-1])
-    else:
-        assert (0), "n_dim must be \"1\", \"2\" or \"3\". Aborting."
+        extent = [0, images["n_voxels_upsampled"][0]-1, 0, images["n_voxels_upsampled"][1]-1, 0, images["n_voxels_upsampled"][2]-1]
+    vtk_image.SetExtent(extent)
+    mypy.my_print(verbose, "extent = "+str(extent))
 
     if   (images["n_dim"] == 1):
-        spacing = numpy.array([images["L"][0]/images["n_voxels"][0]/images["resampling_factors"][0],                                                           1.,                                                           1.])
+        spacing = [delta_upsampled[0],                 1.,                 1.]
     elif (images["n_dim"] == 2):
-        spacing = numpy.array([images["L"][0]/images["n_voxels"][0]/images["resampling_factors"][0], images["L"][1]/images["n_voxels"][1]/images["resampling_factors"][1],                                                           1.])
+        spacing = [delta_upsampled[0], delta_upsampled[1],                 1.]
     elif (images["n_dim"] == 3):
-        spacing = numpy.array([images["L"][0]/images["n_voxels"][0]/images["resampling_factors"][0], images["L"][1]/images["n_voxels"][1]/images["resampling_factors"][1], images["L"][2]/images["n_voxels"][2]/images["resampling_factors"][2]])
+        spacing = [delta_upsampled[0], delta_upsampled[1], delta_upsampled[2]]
     vtk_image.SetSpacing(spacing)
+    mypy.my_print(verbose, "spacing = "+str(spacing))
 
     if   (images["n_dim"] == 1):
-        origin = numpy.array([spacing[0]/2,           0.,           0.])
+        origin = [delta[0]/2,         0.,         0.]
     elif (images["n_dim"] == 2):
-        origin = numpy.array([spacing[0]/2, spacing[1]/2,           0.])
+        origin = [delta[0]/2, delta[1]/2,         0.]
     elif (images["n_dim"] == 3):
-        origin = numpy.array([spacing[0]/2, spacing[1]/2, spacing[2]/2])
+        origin = [delta[0]/2, delta[1]/2, delta[2]/2]
     vtk_image.SetOrigin(origin)
+    mypy.my_print(verbose, "origin = "+str(origin))
 
     n_points = vtk_image.GetNumberOfPoints()
     vtk_image_scalars = myvtk.createFloatArray(
@@ -155,7 +162,7 @@ def generateImages(
 
     for k_frame in xrange(images["n_frames"]):
         t = images["T"]*float(k_frame)/(images["n_frames"]-1) if (images["n_frames"]>1) else 0.
-        print "t = "+str(t)
+        mypy.my_print(verbose, "t = "+str(t))
         mapping.init_t(t)
         for k_point in xrange(n_points):
             vtk_image.GetPoint(k_point, x)
@@ -176,23 +183,26 @@ def generateImages(
                 image=vtk_gradient,
                 filename=images["folder"]+"/"+images["basename"]+"-grad"+"_"+str(k_frame).zfill(images["zfill"])+"."+images["ext"],
                 verbose=verbose-1)
-    print "global_min = "+str(global_min)
-    print "global_max = "+str(global_max)
+    # mypy.my_print(verbose, "global_min = "+str(global_min))
+    # mypy.my_print(verbose, "global_max = "+str(global_max))
 
-    if (images["resampling_factors"] == [1]*images["n_dim"]):
-        resampling = False
+    if (images["upsampling_factors"] == [1]*images["n_dim"]):
+        downsampling = False
     else:
-        resampling = True
-        ddic.resample_images(
+        downsampling = True
+        ddic.downsample_images(
             images_folder=images["folder"],
             images_basename=images["basename"],
-            resampling_factors=images["resampling_factors"],
-            write_temp_images=1)
+            downsampling_factors=images["upsampling_factors"],
+            keep_resolution=0,
+            write_temp_images=0,
+            verbose=verbose)
 
     if (images["data_type"] in ("float")):
         pass
     elif (images["data_type"] in ("unsigned char", "unsigned short", "unsigned int", "unsigned long", "unsigned float", "uint8", "uint16", "uint32", "uint64", "ufloat")):
         ddic.normalize_images(
             images_folder=images["folder"],
-            images_basename=images["basename"]+("_resampled"*(resampling)),
-            images_datatype=images["data_type"])
+            images_basename=images["basename"]+("_downsampled"*(downsampling)),
+            images_datatype=images["data_type"],
+            verbose=verbose)
diff --git a/generate_undersampled_images.py b/generate_undersampled_images.py
index 50418df..5ba1a0d 100644
--- a/generate_undersampled_images.py
+++ b/generate_undersampled_images.py
@@ -39,7 +39,7 @@ def generateUndersampledImages(
         images["n_voxels"][2] /= undersampling_level
     images["basename"] = images_basename+"-X"
     texture["type"] = "taggX"
-    fedic.generateImages(
+    ddic.generate_images(
         images=images,
         structure=structure,
         texture=texture,
@@ -55,7 +55,7 @@ def generateUndersampledImages(
         images["n_voxels"][2] /= undersampling_level
     images["basename"] = images_basename+"-Y"
     texture["type"] = "taggY"
-    fedic.generateImages(
+    ddic.generate_images(
         images=images,
         structure=structure,
         texture=texture,
@@ -71,7 +71,7 @@ def generateUndersampledImages(
         images["n_voxels"][1] /= undersampling_level
         images["basename"] = images_basename+"-Z"
         texture["type"] = "taggZ"
-        fedic.generateImages(
+        ddic.generate_images(
             images=images,
             structure=structure,
             texture=texture,
diff --git a/normalize_images.py b/normalize_images.py
index edc7296..5de154c 100644
--- a/normalize_images.py
+++ b/normalize_images.py
@@ -26,7 +26,10 @@ def normalize_images(
         images_folder,
         images_basename,
         images_datatype,
-        images_ext="vti"):
+        images_ext="vti",
+        verbose=0):
+
+    mypy.my_print(verbose, "*** normalize_images ***")
 
     images_filenames = glob.glob(images_folder+"/"+images_basename+"_[0-9]*"+"."+images_ext)
     images_nframes = len(images_filenames)
@@ -49,19 +52,19 @@ def normalize_images(
 
     global_min = float("+Inf")
     global_max = float("-Inf")
-    I = numpy.empty(2)
     for k_frame in xrange(images_nframes):
         reader.SetFileName(images_folder+"/"+images_basename+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
         reader.Update()
 
         image_scalars = reader.GetOutput().GetPointData().GetScalars()
+        I = numpy.empty(image_scalars.GetNumberOfComponents())
         for k_point in xrange(images_npoints):
             image_scalars.GetTuple(k_point, I)
 
             global_min = min(global_min, I[0])
             global_max = max(global_max, I[0])
-    print "global_min = "+str(global_min)
-    print "global_max = "+str(global_max)
+    mypy.my_print(verbose, "global_min = "+str(global_min))
+    mypy.my_print(verbose, "global_max = "+str(global_max))
 
     shifter = vtk.vtkImageShiftScale()
     shifter.SetInputConnection(reader.GetOutputPort())
@@ -85,11 +88,8 @@ def normalize_images(
     writer.SetInputConnection(shifter.GetOutputPort())
 
     for k_frame in xrange(images_nframes):
-        reader.SetFileName(images_folder+"/"+images_basename+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
-        reader.Update()
-
-        shifter.Update()
+        mypy.my_print(verbose, "k_frame = "+str(k_frame))
 
+        reader.SetFileName(images_folder+"/"+images_basename              +"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
         writer.SetFileName(images_folder+"/"+images_basename+"_normalized"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
-        writer.Update()
         writer.Write()
diff --git a/resample_images.py b/resample_images.py
deleted file mode 100644
index 6488ec7..0000000
--- a/resample_images.py
+++ /dev/null
@@ -1,151 +0,0 @@
-#coding=utf8
-
-################################################################################
-###                                                                          ###
-### Created by Martin Genet, 2016-2019                                       ###
-###                                                                          ###
-### École Polytechnique, Palaiseau, France                                   ###
-###                                                                          ###
-################################################################################
-
-import glob
-import math
-import numpy
-import os
-import random
-import vtk
-
-import myPythonLibrary as mypy
-import myVTKPythonLibrary as myvtk
-
-import dolfin_dic as ddic
-
-################################################################################
-
-def resample_images(
-        images_folder,
-        images_basename,
-        resampling_factors,
-        images_ext="vti",
-        write_temp_images=False):
-
-    images_filenames = glob.glob(images_folder+"/"+images_basename+"_[0-9]*"+"."+images_ext)
-    images_nframes = len(images_filenames)
-    images_zfill = len(images_filenames[0].rsplit("_",1)[-1].split(".",1)[0])
-
-    image_filename = images_folder+"/"+images_basename+"_"+str(0).zfill(images_zfill)+"."+images_ext
-    image = myvtk.readImage(
-        filename=image_filename,
-        verbose=0)
-    images_npoints = image.GetNumberOfPoints()
-    images_nvoxels = myvtk.getImageDimensions(
-        image=image,
-        verbose=0)
-    images_ndim = len(images_nvoxels)
-
-    if   (images_ext == "vtk"):
-        reader = vtk.vtkImageReader()
-        writer = vtk.vtkImageWriter()
-        if (write_temp_images):
-            writer_fft  = vtk.vtkImageWriter()
-            writer_mult = vtk.vtkImageWriter()
-    elif (images_ext == "vti"):
-        reader = vtk.vtkXMLImageDataReader()
-        writer = vtk.vtkXMLImageDataWriter()
-        if (write_temp_images):
-            writer_fft  = vtk.vtkXMLImageDataWriter()
-            writer_mult = vtk.vtkXMLImageDataWriter()
-    else:
-        assert 0, "\"ext\" must be \".vtk\" or \".vti\". Aborting."
-
-    fft = vtk.vtkImageFFT()
-    fft.SetDimensionality(images_ndim)
-    fft.SetInputConnection(reader.GetOutputPort())
-    if (write_temp_images): writer_fft.SetInputConnection(fft.GetOutputPort())
-
-    image_filename = images_folder+"/"+images_basename+"_"+str(0).zfill(images_zfill)+"."+images_ext
-    mask_image = myvtk.readImage(
-        filename=image_filename,
-        verbose=0)
-    mask_scalars = myvtk.createDoubleArray(
-        name="ImageScalars",
-        n_components=2,
-        n_tuples=images_npoints,
-        verbose=0)
-    mask_image.GetPointData().SetScalars(mask_scalars)
-    # print mask_image.GetScalarType()
-    # print mask_image.GetPointData().GetScalars()
-    if (images_ndim == 1):
-        for k_point in xrange(images_npoints):
-            if ((k_point >                     images_nvoxels[0]/resampling_factors[0]/2) \
-            and (k_point < images_nvoxels[0] - images_nvoxels[0]/resampling_factors[0]/2)):
-                mask_scalars.SetTuple(k_point, [0, 0])
-            else:
-                mask_scalars.SetTuple(k_point, [1, 1])
-    if (images_ndim == 2):
-        for k_point in xrange(images_npoints):
-            # print "k_point = "+str(k_point)
-            k_y = math.floor(k_point/images_nvoxels[0])
-            k_x = k_point - k_y*images_nvoxels[0]
-            # print "k_x = "+str(k_x)
-            # print "k_y = "+str(k_y)
-            if (((k_x >                     images_nvoxels[0]/resampling_factors[0]/2)  \
-            and  (k_x < images_nvoxels[0] - images_nvoxels[0]/resampling_factors[0]/2)) \
-            or  ((k_y >                     images_nvoxels[1]/resampling_factors[1]/2)  \
-            and  (k_y < images_nvoxels[1] - images_nvoxels[1]/resampling_factors[1]/2))):
-                mask_scalars.SetTuple(k_point, [0, 0])
-            else:
-                mask_scalars.SetTuple(k_point, [1, 1])
-    if (images_ndim == 3):
-        for k_point in xrange(images_npoints):
-            k_z = math.floor(k_point/images_nvoxels[0]/images_nvoxels[1])
-            k_y = math.floor((k_point - k_z*images_nvoxels[0]*images_nvoxels[1])/images_nvoxels[0])
-            k_x = k_point - k_z*images_nvoxels[0]*images_nvoxels[1] - k_y*images_nvoxels[0]
-            if (((k_x >                     images_nvoxels[0]/resampling_factors[0]/2)  \
-            and  (k_x < images_nvoxels[0] - images_nvoxels[0]/resampling_factors[0]/2)) \
-            or  ((k_y >                     images_nvoxels[1]/resampling_factors[1]/2)  \
-            and  (k_y < images_nvoxels[1] - images_nvoxels[1]/resampling_factors[1]/2)) \
-            or  ((k_z >                     images_nvoxels[2]/resampling_factors[2]/2)  \
-            and  (k_z < images_nvoxels[2] - images_nvoxels[2]/resampling_factors[2]/2))):
-                mask_scalars.SetTuple(k_point, [0, 0])
-            else:
-                mask_scalars.SetTuple(k_point, [1, 1])
-    if (write_temp_images): myvtk.writeImage(
-        image=mask_image,
-        filename=images_folder+"/"+images_basename+"_mask"+"."+images_ext,
-        verbose=0)
-
-    mult = vtk.vtkImageMathematics()
-    mult.SetOperationToMultiply()
-    mult.SetInputData(0, mask_image)
-    mult.SetInputConnection(1, fft.GetOutputPort())
-    if (write_temp_images): writer_mult.SetInputConnection(mult.GetOutputPort())
-
-    rfft = vtk.vtkImageRFFT()
-    rfft.SetDimensionality(images_ndim)
-    rfft.SetInputConnection(mult.GetOutputPort())
-
-    writer.SetInputConnection(rfft.GetOutputPort())
-
-    for k_frame in xrange(images_nframes):
-        reader.SetFileName(images_folder+"/"+images_basename+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
-        reader.Update()
-
-        fft.Update()
-        if (write_temp_images):
-            writer_fft.SetFileName(images_folder+"/"+images_basename+"_fft"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
-            writer_fft.Update()
-            writer_fft.Write()
-        # print fft.GetOutput().GetScalarType()
-        # print fft.GetOutput().GetPointData().GetScalars()
-
-        mult.Update()
-        if (write_temp_images):
-            writer_mult.SetFileName(images_folder+"/"+images_basename+"_mult"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
-            writer_mult.Update()
-            writer_mult.Write()
-
-        rfft.Update()
-        writer.SetFileName(images_folder+"/"+images_basename+"_resampled"+"_"+str(k_frame).zfill(images_zfill)+"."+images_ext)
-        writer.Update()
-        writer.Write()
-- 
GitLab