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 :

l'ACP des images


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 67
    Par défaut l'ACP des images
    Salut tous le monde .
    j'ai des images médical de format " *.dcm ",
    j'ai appliqué les différentes traitement pour réduire le bruit introduit maintenant je veux appliquer l’analyse en composante principale (PCA)
    la taille des images que j'ai c'est (128,128)
    quand j'ai applique l'ACP
    ca me bloque en dimension
    ValueError: Found array with dim 3. Estimator expected <= 2.

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 619
    Par défaut
    Désolé, j'ai égaré ma boule de cristal.

  3. #3
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 67
    Par défaut
    salut et merci pour la réponse
    est ce que ce que j'ai fais c juste
    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
     
     
    #Load data set
     
     
    data_path ="/home/data/"
    output_path = working_path = "/home/data_output/"
     
    def load_scan(path):
        paths = glob.glob(os.path.join(path,"*.dcm"))
        slices = [dicom.read_file(s) for s in paths]
       slices.sort(key = lambda x: float(x.ImagePositionPatient[2]))
        try:
            slice_thickness = np.abs(slices[0].ImagePositionPatient[2] - slices[1].ImagePositionPatient[2])
        except:
            slice_thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation)
     
        for s in slices:
            s.SliceThickness = slice_thickness
     
        return slices
     
    def get_pixels_hu(slices):
        image = np.stack([s.pixel_array for s in slices])
        # Convert to int16 (from sometimes int16), 
        # should be possible as values should always be low enough (<32k)
        image = image.astype(np.int16)
     
        # Set outside-of-scan pixels to 0
        # The intercept is usually -1024, so air is approximately 0
        image[image == -2000] = 0
     
        # Convert to Hounsfield units (HU)
        for slice_number in range(len(slices)):
     
            intercept = slices[slice_number].RescaleIntercept
            slope = slices[slice_number].RescaleSlope
     
            if slope != 1:
                image[slice_number] = slope * image[slice_number].astype(np.float64)
                image[slice_number] = image[slice_number].astype(np.int16)
     
            image[slice_number] += np.int16(intercept)
     
        return np.array(image, dtype=np.int16)
     
    id=0
    patient = load_scan(data_path) 
    imgs = get_pixels_hu(patient)
     
    np.save(output_path + "fullimages_%d.npy" % (id), imgs)
    file_used=output_path+"fullimages_%d.npy" % id
    X = np.load(file_used).astype(np.float64) 
     
     
     
    pca = PCA(n_components=4)
    pca.fit(X)
     
     
    print(pca.explained_variance_ratio_) 
     
     
    pca = PCA(n_components=2, svd_solver='full')
    pca.fit(X)                 
     
     
    print(pca.explained_variance_ratio_) 
     
     
    pca = PCA(n_components=1, svd_solver='arpack')
    pca.fit(X)
     
     
    print(pca.explained_variance_ratio_)

    et voila mon message d'erreurs

    File "essay-pca.py", line 94, in <module>
    pca.fit(X)
    File "/usr/local/lib/python2.7/dist-packages/sklearn/decomposition/pca.py", line 307, in fit
    self._fit(X)
    File "/usr/local/lib/python2.7/dist-packages/sklearn/decomposition/pca.py", line 346, in _fit
    copy=self.copy)
    File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 405, in check_array
    % (array.ndim, estimator_name))

    ValueError: Found array with dim 3. Estimator expected <= 2.


  4. #4
    Membre éclairé
    Homme Profil pro
    Cocher moderne
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Oman

    Informations professionnelles :
    Activité : Cocher moderne

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Par défaut
    Bonjour,

    Citation Envoyé par hadjira10 Voir le message
    est ce que ce que j'ai fais c juste
    Non, puisque tu obtiens un message d'erreur ! Qui te dit par ailleurs qu'un array de dimension 3 est passé à la fonction fit(), alors que celle-ci attend un array de dimension maximum 2. Donc il faut voir ce que contient X, qui provient d'un fichier, etc...

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 619
    Par défaut
    Plusieurs choses :
    - premièrement, on ne peut pas reproduire ton erreur chez nous.
    - deuxièmement, je pense que ton erreur n'est pas celle de ton fichier : pb de numéro de lignes.

  6. #6
    Membre émérite

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Billets dans le blog
    2
    Par défaut
    Je suppose

    Qu'en générale pour ce type de problème sur les images il faut passer l’image en niveau de gris pour avoir deux dimensions et non trois avec la couleur.

    Au palisir

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    Si tu as un tableau X de taille (n_image, 128, 128), ce qui correspond à n_images images empilées, il faut transformer chaque image en un vecteur en la dépliant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X_ = X.reshape(n_images, 128 * 128)
    pca.fit(X_)
    Et si tu veux visualiser la première composante par exemple, il faut faire la transformation inverse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import matplotlib.pyplot as plt
    plt.imshow(pca.components_[0].reshape(128, 128))
    plt.show()

Discussions similaires

  1. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 13h07
  2. Permutter des images dans ImageList ?
    Par GoustiFruit dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/12/2003, 10h07
  3. Interbase 6 et le type des images?
    Par AnestheziE dans le forum InterBase
    Réponses: 6
    Dernier message: 30/10/2003, 11h48
  4. question sur le format des images ..
    Par vbcasimir dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 28/08/2003, 13h08
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 14h57

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