Bonjour,

Dans le cadre d'un script d'entraînement d'un CNN, je souhaiteras appliquer une fonction de prétraitement personnalisée en utilisant la classe ImageDataGenerator de Keras.

Après avoir créé 2 instances de type ImageDataGenerator dans lesquelles je fais appel à cette fonction de prétraitement personnalisée appelée "N4" via un paramètre à passer lors de l'instanciation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
# data Augmentation
train_datagen = ImageDataGenerator(
    #preprocessing_function=preprocess_input,
    preprocessing_function=N4, # CLAHE_fct # preprocess_input,
    width_shift_range=0.4,
            shear_range=0.2,# dans train-ai.py shear_range=0.4,
    zoom_range=0.1,# dans train-ai.py zoom_range=0.4
    #rotation_range=random.randrange(-25, 25, 2),# dans train-ai.py pas de rotation_range
    horizontal_flip=True,
    vertical_flip=True
)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
# data Augmentation
valid_datagen = ImageDataGenerator(
    #preprocessing_function=preprocess_input,
    preprocessing_function=N4, #CLAHE_fct # preprocess_input,
    width_shift_range=0.4,
    shear_range=0.2,# dans train-ai.py shear_range=0.4,
    zoom_range=0.1,# dans train-ai.py zoom_range=0.4
    #rotation_range=random.randrange(-25, 25, 2),# dans train-ai.py pas de rotation_range
    horizontal_flip=True,
    vertical_flip=True
)
la fonction de prétraitement personnalisée est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def N4(img):
    print("N4 bias correction runs.")
    inputImage = img
    print("Affectation & affichage du type de img au sortir de ImageDataGenerator et en entrée de la fonction N4 : ")
    imgType = img.dtype
    print("img est de Type : ")
    print(imgType)
    my_inputImage_float32 = img
    my_inputImage_unint8 = tf.cast(my_inputImage_float32, dtype=tf.uint8)
    print("Affectation & affichage du type de my_inputImage_unint8 avant d_etre traitee par la fonction N4 : ")
    my_inputImage_unint8Type = my_inputImage_unint8.dtype
    print("my_inputImage_unint8 est de Type : ")
    print(my_inputImage_unint8Type)
    maskImage = sitk.OtsuThreshold(my_inputImage_unint8, 0, 1, 200)
    """sitk.WriteImage(maskImage,
                    "20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084_mask3_N4_bias_corrected.png")"""
    my_inputImage_unint8 = sitk.Cast(inputImage, sitk.sitkFloat32)  # Float32 car sinon fct n'accepte pas
 
    corrector = sitk.N4BiasFieldCorrectionImageFilter()
 
    N4_output = corrector.Execute(my_inputImage_unint8, maskImage)
    N4_output = sitk.Cast(N4_output, sitk.sitkUInt8)  # ajoute pour sauver en .PNG
    N4_output_float32 = np.float32(output)  # Convert image from unsigned 8 bit to 32 bit float
    print("Affectation & affichage du type de N4_output_float32 avant d_etre retourne par la fonction CLAHE et de rentrer dans ImageDataGenerator : ")
    N4_output_float32Type = N4_output_float32.dtype
    print("N4_output_float est de Type : ")
    print(N4_output_floatType)
    return N4_output_float32
    print("Finished N4 Bias Field Correction.....")
Et voici le message d'erreur retourné :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
File "C:\Users\QTR7701\AppData\Roaming\Python\Python37\site-packages\SimpleITK\SimpleITK.py", line 54421, in OtsuThreshold
    return _SimpleITK.OtsuThreshold(*args)
NotImplementedError: Wrong number or type of arguments for overloaded function 'OtsuThreshold'.
  Possible C/C++ prototypes are:
    itk::simple::OtsuThreshold(itk::simple::Image const &,itk::simple::Image const &,uint8_t,uint8_t,uint32_t,bool,uint8_t)
    itk::simple::OtsuThreshold(itk::simple::Image const &,uint8_t,uint8_t,uint32_t,bool,uint8_t)
Malgré avoir effectué les conversions des types de données dans la fonction :
Fonction type d'image traitée type de l'image passée à la function de prétraitement personnalisée
N4 8 bits Unsigned Integer float32

je ne parviens pas à trouver une solution à ce message d'erreur. Est-ce que quelqu'un peut m'aider ?