IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Renforcement du contraste image en niveau de gris à l'aide de transformations Top-hats [Python 3.X]


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Maintenance Prédictive
    Inscrit en
    Mars 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Maintenance Prédictive
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 39
    Par défaut Renforcement du contraste image en niveau de gris à l'aide de transformations Top-hats
    J'essaie d'améliorer le contraste des images de coronarographies à l'aide d'une operations aritméthiques entres les résultats de transformations Top-hats comme suit :
    κ = f +White Top-Hat − Black Top-Hat = f + f −γ B −φB + f .
    Mais je n'obtiens que les piètres résultats à partir de l'image originale,

    Nom : 20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084.png
Affichages : 2626
Taille : 97,4 Ko

    j'ajoute d'abord le résultat de la transformation White Top-Hat à l'image originale et ensuite soustrait au tout le résultat de la transformation Black Top-Hat de l'image originale :
    Nom : Figure_2_adddition_et_Soustraction_Top-Hat_Radius7.png
Affichages : 2836
Taille : 14,5 Ko

    Le résultat final est censé améliorer le contraste, mais ce n'est pas le cas :
    Nom : Figure3_contrastEnhancedImage_using_Tophats_adius7.png
Affichages : 2637
Taille : 3,4 Ko

    J'utilise personnellement une fonction de la bibliothèque scipy.ndimage.morphology qui permet de régler un peu plus de paramètres qu'uniquement le rayon du chapeau mais dont les combinaisons de leurs différents réglages permettent de nombreuses possibilités avant de trouver le compromise efficace.

    Est-ce que quelqu'un aurait l'expérience de ces réglages pour obtenir un résultat utile ?

    voici mon code :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    from __future__ import print_function
     
    # Top-Hat morphological transformation
     
    import cv2
    import pylab
    from pylab import *
    import numpy as np
    import matplotlib
    from matplotlib import pyplot as plt
    from matplotlib.pyplot import *
    from skimage.morphology import white_tophat, black_tophat, square
    from skimage.io import imread
    from skimage.color import rgb2gray
    import matplotlib.pylab as pylab
    from skimage.morphology import white_tophat, black_tophat, square, disk
    from skimage import io
    import argparse
    # https://skopas.pagesperso-orange.fr/Python%20et%20OpenCV-manuels/python_pratique.pdf
     
    from scipy import misc
    from scipy import ndimage
     
     
     
    def plot_image(image, title=''):
        pylab.title(title, size=20), pylab.imshow(image)
        #pylab.axis('off') # comment this line if you want axis ticks
     
    """ap = argparse.ArgumentParser()
    ap.add_argument("-i","--image", required = True, help = "Path to the image")
    args = vars(ap.parse_args())
    originalImage = cv2.imread(args["originalImage"])"""
     
    originalImage = cv2.imread('20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084.png',0)
     
    print("Affectation & affichage du type de :  originalImage ")
    originalImageType = originalImage.dtype
    print("originalImage est de Type : ")
    print(originalImageType)
    print("image est de Type : ")
    originalImageShape = np.shape(originalImage)
    print(originalImageShape)
    cv2.imshow("Original", originalImage)
     
     
    print("max of 255: {}".format(cv2.add(np.uint8([200]), np.uint8([100]))))
    print("min of 0: {}".format(cv2.subtract(np.uint8([50]), np.uint8([100]))))
    print("wrap around: {}".format(np.uint8([200]) + np.uint8([100])))
    print("wrap around: {}".format(np.uint8([50]) - np.uint8([100])))
     
    M = np.ones(originalImage.shape, dtype = "uint8")*100
    added = cv2.add(originalImage, M)
    cv2.imshow("Added", added)
     
    M = np.ones(originalImage.shape, dtype = "uint8")*50
    subtracted = cv2.subtract(originalImage, M)
    cv2.imshow("Subtracted", subtracted)
    cv2.waitKey(20000)
     
     
    #im = imread('../images/tagore.png')[...,3]
     
    #im = imread('20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084.png')[...,3]
    im_bis = imread('20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084.png')[...,3]
    im_ter = cv2.imread('20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084.png')[...,2]
    # pbl resolu via :  https://stackoverflow.com/questions/41196754/image-read-through-skimage-io-imread-have-suspicious-shape
    im = io.imread('20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084.png', plugin='matplotlib')
     
    #img = cv2.imread('20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084.png',0)
     
    print("Affectation & affichage du type de :  im_ter ")
    im_terType = im_ter.dtype
    print("im_ter est de Type : ")
    print(im_terType)
     
    print("im_ter est de Type : ")
    im_terShape = np.shape(im_ter)
    print(im_terShape)
     
    #a1d = np.ones((512))
    #a2d = np.expand_dims(a1d, axis=2)
    #im_bis2D = a2d.shape
    #print(im_bis2D)
     
     
    #-------------------------------------------------
    print("Affectation & affichage du type de :  im_bis ")
    im_bisType = im_bis.dtype
    print("im_bis est de Type : ")
    print(im_bisType)
     
    print("im_bis est de Type : ")
    im_bisShape = np.shape(im_bis)
    print(im_bisShape)
     
    #a1d = np.ones((512))
    #a2d = np.expand_dims(a1d, axis=2)
    #im_bis2D = a2d.shape
    #print(im_bis2D)
     
     
    #-------------------------------------------------
    print("Affectation & affichage du type de :  im ")
    imType = im.dtype
    print("im est de Type : ")
    print(imType)
     
    print("im_bis est de Type : ")
    imShape = np.shape(im)
    print(imShape)
     
     
    im[im <= 0.5] = 0
    im[im > 0.5] = 1
    #im[im <= 0.25] = 0
    #im[im > 0.25] = 1
    #im1 = white_tophat(im, square(5))
    #im2 = black_tophat(im, square(5))
     
    # doesn_t work
    #im1 = white_tophat(im, selem=None, disk(7)) # 37
    #im2 = black_tophat(im, selem=None, disk(7)) # 37
     
     
    #im1 = white_tophat(im, disk(7)) # 37
    #im2 = black_tophat(im, disk(7)) # 37
     
    # https://het.as.utexas.edu/HET/Software/Scipy/generated/scipy.ndimage.morphology.white_tophat.html#scipy.ndimage.morphology.white_tophat
    # scipy.ndimage.morphology.white_tophat(input, size=None, footprint=None, structure=None, output=None, mode='reflect', cval=0.0, origin=0)
    im1 = scipy.ndimage.morphology.white_tophat(im, size=(8,8), footprint=(2,5), structure=(4,3), mode='constant', cval=1.0, origin=2)
    # https://het.as.utexas.edu/HET/Software/Scipy/generated/scipy.ndimage.morphology.black_tophat.html#scipy.ndimage.morphology.black_tophat
    # scipy.ndimage.morphology.black_tophat(input, size=None, footprint=None, structure=None, output=None, mode='reflect', cval=0.0, origin=0)
    im2 = scipy.ndimage.morphology.white_tophat(im, size=(8,8), footprint=(2,5), structure=(4,3), mode='constant', cval=1.0, origin=2)
     
     
    print("Affectation & affichage du type de :  im1 ")
    im1Type = im1.dtype
    print("im1Type est de Type : ")
    print(im1Type)
     
    print("Affectation & affichage du type de :  im2 ")
    im2Type = im2.dtype
    print("im2Type est de Type : ")
    print(im2Type)
     
     
    pylab.figure(figsize=(20,15))
    pylab.subplot(1,2,1), plot_image(im1, 'white tophat')
    pylab.subplot(1,2,2), plot_image(im2, 'black tophat')
    pylab.show()
     
    # error message :
    # RuntimeError: sequence argument must have length equal to input rank
    # needed to be changed to a 3D one:
     
     
    # Contrast Enhancement using Top-Hats
    # Enhanced contrast image = f + WTH - BTH
    #M = np.ones(originalImage.shape, dtype = "uint8")*100
    f_WTH_added = cv2.add(im, im1)# M
    cv2.imshow("f_WTH_added", f_WTH_added)
     
    #M = np.ones(originalImage.shape, dtype = "uint8")*50
    fPlusWTH_BTH_subtracted = cv2.subtract(f_WTH_added, im2) # M
    cv2.imshow("fPlusWTH_BTH_subtracted", fPlusWTH_BTH_subtracted)
    cv2.waitKey(20000)
     
    # Saving the image
    im_out_ECI_converted = cv2.convertScaleAbs(fPlusWTH_BTH_subtracted, alpha=(255.0))
    cv2.imshow("im_out_ECI_converted", im_out_ECI_converted)
    cv2.waitKey(20000)
     
    cv2.imwrite('20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084_ECI_TH.png',im_out_ECI_converted)
    Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Il y a un moment donné aussi, où si vous écrivez

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    im[im <= 0.5] = 0
    im[im > 0.5] = 1
    ça devient un peu difficile d'obtenir autre chose que du noir ou du blanc en sortie !

    NB: Pensez à poster un code minimal. Vous charger l'image de plusieurs manières, on cherche ce qui est réellement fait en lisant votre code et quelle est la partie en lien avec l'image que vous présentez. Nous ne devriions pas

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Avec un filtre "Contrast stretching" j'obtiens ceci:
    Seuil 2.0 %
    Nom : coronaro_(1).png
Affichages : 3535
Taille : 167,2 Ko

    Seuil 3.0 %
    Nom : coronaro_(3).png
Affichages : 3530
Taille : 169,5 Ko

    Malheureusement, il faudra que tu cherches pour trouver ce filtre, il n'est pas dans les filtres d'OpenCV.
    Comme l'image est petite (512 x 512) ça peut se faire en Python mais évidement, avec un temps d'exécution assez long.

  4. #4
    Membre averti
    Homme Profil pro
    Maintenance Prédictive
    Inscrit en
    Mars 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Maintenance Prédictive
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 39
    Par défaut Réponse à la réaction de VinsS
    Citation Envoyé par VinsS Voir le message
    Salut,

    Avec un filtre "Contrast stretching" j'obtiens ceci:
    Seuil 2.0 %
    Nom : coronaro_(1).png
Affichages : 3535
Taille : 167,2 Ko

    Seuil 3.0 %
    Nom : coronaro_(3).png
Affichages : 3530
Taille : 169,5 Ko

    Malheureusement, il faudra que tu cherches pour trouver ce filtre, il n'est pas dans les filtres d'OpenCV.
    Comme l'image est petite (512 x 512) ça peut se faire en Python mais évidement, avec un temps d'exécution assez long.
    Merci VinsS,
    En effet, avec 3% ca m'a l'air bien renforcé. Je suppose que ce filtre est disponible dans un logiciel de traitement d'images ? Si oui lequel car je ne l'ai pas trouvé en natif sur Gimp ni ImageJ mais j'imagine que ces 2 là ne sont pas la panacée ou peut-être que des plugins existent pour eux. Dans tous les cas je vais chercher une librairie disponible pour Python.

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par CaRoule Voir le message
    Merci VinsS,
    En effet, avec 3% ca m'a l'air bien renforcé. Je suppose que ce filtre est disponible dans un logiciel de traitement d'images ? Si oui lequel car je ne l'ai pas trouvé en natif sur Gimp ni ImageJ mais j'imagine que ces 2 là ne sont pas la panacée ou peut-être que des plugins existent pour eux. Dans tous les cas je vais chercher une librairie disponible pour Python.
    L'algorithme de ce filtre a été présenté ici: http://www.ipol.im/pub/art/2011/llmps-scb/

    ipol ou Image Processing online est une excellente source de documentation et d'idées pour qui travaille dans l'imagerie.

    Au vu de ces résultats, j'ai voulu l'implémenter dans mon logiciel Oqapy, mais je ne l'ai trouvé dans aucune lib existante, donc je l'ai implémenté moi-même.

    Seulement c'est du C++ accompagné d'un binding que j'ai créé avec sip pour des raisons pratiques.

    C'est là : https://bazaar.launchpad.net/~vincen...iles/head:/lib

    C'est très aisément compilable sous Linux et OSX mais sous Windows je ne pourrais pas aider.

    Demain je ferai une version Python avec Pillow mais ce sera pour de petites images parce que la différence de temps d'exécution est du simple au décuple si pas plus.

  6. #6
    Membre averti
    Homme Profil pro
    Maintenance Prédictive
    Inscrit en
    Mars 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Maintenance Prédictive
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 39
    Par défaut Réponse à la réaction de VinsS
    Merci VinsS !

    ipol ou Image Processing online est effectivement très intéressant.
    Oui en Python j'ai testé N4Bias Correction, Frangi et j'ai pu constater qu'ils prennaient un temps de traitement inutilisable sur un grand jeu de données (j'ai 2 jeux, l'un de 541.789 et l'autre de 275.590 et je suis obligé de travailler sur des jeux réduits avec ces filtres). Je suppose qu'en Pyhton cela est du au fait que Python n'est pas un langage compilable ?

    Une fois le contraste renforcé, il faut encore pouvoir comparer l'efficacité des méthodes ou optimiser les paramètres d'une méthode, j'ai lu dans cette publication qu'ils utilisaient le Contrast Improvement Ratio (CIR) pour mesurer l'amélioration des techniques de renforcement du contraste :
    https://www.sciencedirect.com/scienc...78603X15000054
    A toutes fins utiles si cela peut vous intéresser mais à mon avis vous devez déjà connaître.

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    S'il s'agit simplement d'augmenter le contraste, le module externe pillow (https://pypi.org/project/Pillow/) fait ça très simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from PIL import Image, ImageEnhance
     
    # ouvre l'image
    im = Image.open("coronaires.png")
     
    # augmente le contraste
    facteur = 2 # facteur d'augmentation du contraste
    im2 = ImageEnhance.Contrast(im).enhance(facteur)
     
    # enregistre l'image modifiée
    im2.save('coronaires2.png')
    Ce qui donne:

    Nom : coronaires2.png
Affichages : 3477
Taille : 103,5 Ko

  8. #8
    Membre averti
    Homme Profil pro
    Maintenance Prédictive
    Inscrit en
    Mars 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Maintenance Prédictive
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 39
    Par défaut Réponse à la réaction de Tyrtamos
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    S'il s'agit simplement d'augmenter le contraste, le module externe pillow (https://pypi.org/project/Pillow/) fait ça très simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from PIL import Image, ImageEnhance
     
    # ouvre l'image
    im = Image.open("coronaires.png")
     
    # augmente le contraste
    facteur = 2 # facteur d'augmentation du contraste
    im2 = ImageEnhance.Contrast(im).enhance(facteur)
     
    # enregistre l'image modifiée
    im2.save('coronaires2.png')
    Ce qui donne:

    Nom : coronaires2.png
Affichages : 3477
Taille : 103,5 Ko
    Merci Tyrtamos,

    En effet, c'est simple et succinct tout en étant tout aussi efficace que mes operations Top-Hats. Je vais faire varier le facteur de renforcement, mettre cela dans une boucle et appliquer à un jeu de données pour voir si le contraste renforcé améliore mon modèle CNN.

  9. #9
    Membre averti
    Homme Profil pro
    Maintenance Prédictive
    Inscrit en
    Mars 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Maintenance Prédictive
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 39
    Par défaut Renforcement du contraste d'une image médicale en niveaux de gris
    Bonjour,

    Merci pour la réponse rapide. Oui, désolé de vous avoir fait subir mon code brouillon, j'ai nettoyé une bonne partie qui était de l'affichage inutile suite à des essais. J'en ai également profité pour commenter les deux lignes de codes qui transformaient l'image en noir et blanc simplement, inutile également. Enfin j'ai aussi commenté 2 lignes de transformations Top-Hat de Scipy qui avaient certes plus de paramètres à tuner pour ces transformations mais qui n'étaient pas encore optimisés et bloquaient le code.
    Le voici, j'espère qu'il est un peu plus clair.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    from __future__ import print_function
     
    # Top-Hat morphological transformation
     
    import cv2
    import pylab
    from pylab import *
    import numpy as np
    import matplotlib
    from matplotlib import pyplot as plt
    from matplotlib.pyplot import *
    from skimage.morphology import white_tophat, black_tophat, square
    from skimage.io import imread
    from skimage.color import rgb2gray
    import matplotlib.pylab as pylab
    from skimage.morphology import white_tophat, black_tophat, square, disk
    from skimage import io
    import argparse
    # https://skopas.pagesperso-orange.fr/Python%20et%20OpenCV-manuels/python_pratique.pdf
    import scipy
    from scipy import misc
    from scipy import ndimage
     
     
    def plot_image(image, title=''):
        pylab.title(title, size=20), pylab.imshow(image)
        #pylab.axis('off') # comment this line if you want axis ticks
     
     
    im = io.imread('20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084.png', plugin='matplotlib')
    #------------------------------------------------------
    # Printing type of im variable with original image
    print("Affectation & affichage du type de :  im ")
    imType = im.dtype
    print("im est de Type : ")
    print(imType)
    print("im_bis est de Type : ")
    imShape = np.shape(im)
    print(imShape)
    #-----------------------------------------------------
     
    # Following instructions commented in reason of black & white results
    #im[im <= 0.5] = 0
    #im[im > 0.5] = 1
     
    # Top-hats transforms operations
    im1 = white_tophat(im, disk(7))
    im2 = black_tophat(im, disk(7))
    #------------------------------------------------------
    # Printing type of im1 & im2 variables
    print("Affectation & affichage du type de :  im1 ")
    im1Type = im1.dtype
    print("im1Type est de Type : ")
    print(im1Type)
    print("Affectation & affichage du type de :  im2 ")
    im2Type = im2.dtype
    print("im2Type est de Type : ")
    print(im2Type)
    #------------------------------------------------------
    # Showing Top-Hats transforms results
    pylab.figure(figsize=(20,15))
    pylab.subplot(1,2,1), plot_image(im1, 'white tophat')
    pylab.subplot(1,2,2), plot_image(im2, 'black tophat')
    pylab.show()
     
    # Alternatives commented to Top-hats transforms operations with more parameters still to test, to tune & optimize
    #im1 = scipy.ndimage.morphology.white_tophat(im, size=(8,8), footprint=(2,5), structure=(4,3), mode='constant', cval=1.0, origin=2)
    #im2 = scipy.ndimage.morphology.white_tophat(im, size=(8,8), footprint=(2,5), structure=(4,3), mode='constant', cval=1.0, origin=2)
     
     
     
     
    # Contrast Enhancement using Top-Hats
    # Enhanced contrast image = f + WTH - BTH
    #M = np.ones(originalImage.shape, dtype = "uint8")*100
    f_WTH_added = cv2.add(im, im1)# M
    cv2.imshow("f_WTH_added", f_WTH_added)
     
    #M = np.ones(originalImage.shape, dtype = "uint8")*50
    fPlusWTH_BTH_subtracted = cv2.subtract(f_WTH_added, im2) # M
    cv2.imshow("fPlusWTH_BTH_subtracted", fPlusWTH_BTH_subtracted)
    cv2.waitKey(20000)
    # Convert the enhanced image
    im_out_ECI_converted = cv2.convertScaleAbs(fPlusWTH_BTH_subtracted, alpha=(255.0))
    # Showing the enhanced image
    cv2.imshow("im_out_ECI_converted", im_out_ECI_converted)
    cv2.waitKey(20000)
    # Saving the enhanced image
    cv2.imwrite('20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084_ECI_TH.png',im_out_ECI_converted)
    Le résultat de votre remarque sur les 2 lignes de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    im[im <= 0.5] = 0
    #im[im > 0.5] = 1
    se manifeste de suite par une image au contraste renforé nettemment améliorée par rapport à ce que je fournissais :
    Nom : 20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084_ECI_TH.png
Affichages : 2480
Taille : 133,6 Ko

    J'ignore si c'est en tunant les paramètres des Top-Hats que je pourrais l'améliorer soit par la function basique (ici j'ai pris un rayon de 7) soit par une function un peu plus évoluée comme celles de Scipy, mais lorsque je regarde les résultats intermédiaires :
    Nom : Figure_2_White&BlackTop-Hat_Radius7.png
Affichages : 2467
Taille : 637,8 Ko
    il y a encore beaucoup de bleu. Donc peut-être faudrait-il combiner un filtre et si oui lequel ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/03/2007, 15h39
  2. image en niveau de gris 16 bits
    Par kekeauboulot dans le forum Delphi
    Réponses: 2
    Dernier message: 16/06/2006, 19h25
  3. Réponses: 1
    Dernier message: 30/11/2005, 17h12
  4. Réponses: 8
    Dernier message: 17/04/2005, 19h58
  5. Image en niveau de gris
    Par SteelBox dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/10/2003, 17h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo