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

MATLAB Discussion :

erreur au niveau imwrite [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Par défaut erreur au niveau imwrite
    j'ai un erreur au niveau de mon code présenté ci-dessous:
    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
     
       image = imread('0002_m_l_04.jpg');
       figure,imshow(image);
       Wnbre=7;
       [a,b]=size(image);
       unit=int16(b/Wnbre);
     
    %Construction de chaque region pour récupérer ses caractéristiques
     
    VH=[];
    rect1=[];
    cv=1;
    D=0;
    for k = 1:Wnbre
        for j = 1:Wnbre
            D=D+1
        rect=[(j-1)*unit,(k-1)*unit,unit,unit];
        rect1=[rect1 rect];
        CropWind = imcrop(image, rect);
        taille=size(CropWind)
        figure,imshow(CropWind),title('Fenêtre'); 
        ix1=['./ImageTest/' D+48 '.jpg']
        imwrite(CropWind, ix1,'jpg')
     
        end;
    end;
    il me fait l'enregistrement de 9 images uniquement et il me lance cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ix1 =
     
    ./ImageTest/:.jpg
     
    ??? Error using ==> imwrite at 411
    Can't open file "./ImageTest/:.jpg" for writing.
    You may not have write permission.
     
    Error in ==> EssayeSIFT at 47
        imwrite(CropWind, ix1,'jpg')
    Pouvez-vous m'aidez à résoudre ce problème??

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Par défaut
    J'ai résolu l'erreur précedent en remplaçant l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ix1=['./ImageTest/' D+48 '.jpg']
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ix1=['./ImageTest/' int2str(D) '.jpg']
    maintenant j'ai un autre problème:
    après l'enregistrement de chaque région, je veut appliquer le descripteur SIFT pour extraire les caractéristiques.
    en ajoutant la ligne de commande de la fonction SIFT comme ceci:
    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
     
     image = imread('0002_m_l_04.jpg');
       figure,imshow(image);
       Wnbre=7;
       [a,b]=size(image);
       unit=int16(b/Wnbre);
     
    %Construction de chaque region pour récupérer ses caractéristiques
     
    VH=[];
    rect1=[];
    cv=1;
    D=0;
    for k = 1:Wnbre
        for j = 1:Wnbre
            D=D+1
        rect=[(j-1)*unit,(k-1)*unit,unit,unit];
        rect1=[rect1 rect];
        CropWind = imcrop(image, rect);
        taille=size(CropWind)
        figure,imshow(CropWind),title('Fenêtre'); 
       ix1=['./ImageTest/' int2str(D) '.jpg']
        imwrite(CropWind, ix1,'jpg')
        ix1
         [image, descriptors, locs] = sift(ix1);
        descriptors
     
        end;
    end;
    il fait l'enregistrement d'une seule image uniquement et il me lance cet erreur:
    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
     
     
    D =
     
         1
     
     
    taille =
     
        26    26
     
     
    ix1 =
     
    ./ImageTest/1.jpg
     
     
    ix1 =
     
    ./ImageTest/1.jpg
     
    Finding keypoints... 
    0 keypoints found. 
     
    descriptors =
     
       Empty matrix: 0-by-128
     
     
    D =
     
         2
     
     
    taille =
     
        26     1
     
     
    ix1 =
     
    ./ImageTest/2.jpg
     
     
    ix1 =
     
    ./ImageTest/2.jpg
     
    Finding keypoints... 
    0 keypoints found. 
     
    descriptors =
     
       Empty matrix: 0-by-128
     
     
    D =
     
         3
     
     
    taille =
     
         0     0
     
     
    ix1 =
     
    ./ImageTest/3.jpg
     
    ??? Error using ==> imwrite at 384
    Image data can not be empty.
     
    Error in ==> EssayeSIFT at 47
        imwrite(CropWind, ix1,'jpg')
    Voila le code de la fonction SIFT que j'utilise:
    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
     
    % [image, descriptors, locs] = sift(imageFile)
    %
    % This function reads an image and returns its SIFT keypoints.
    %   Input parameters:
    %     imageFile: the file name for the image.
    %
    %   Returned:
    %     image: the image array in double format
    %     descriptors: a K-by-128 matrix, where each row gives an invariant
    %         descriptor for one of the K keypoints.  The descriptor is a vector
    %         of 128 values normalized to unit length.
    %     locs: K-by-4 matrix, in which each row has the 4 values for a
    %         keypoint location (row, column, scale, orientation).  The 
    %         orientation is in the range [-PI, PI] radians.
    %
    % Credits: Thanks for initial version of this program to D. Alvaro and 
    %          J.J. Guerrero, Universidad de Zaragoza (modified by D. Lowe)
     
    function [image, descriptors, locs] = sift(imageFile)
     
    % Load image
    image = imread(imageFile);
     
    % If you have the Image Processing Toolbox, you can uncomment the following
    %   lines to allow input of color images, which will be converted to grayscale.
    % if isrgb(image)
    %    image = rgb2gray(image);
    % end
     
    [rows, cols] = size(image); 
     
    % Convert into PGM imagefile, readable by "keypoints" executable
    f = fopen('tmp.pgm', 'w');
    if f == -1
        error('Could not create file tmp.pgm.');
    end
    fprintf(f, 'P5\n%d\n%d\n255\n', cols, rows);
    fwrite(f, image', 'uint8');
    fclose(f);
     
    % Call keypoints executable
    if isunix
        command = '!./sift ';
    else
        command = '!siftWin32 ';
    end
    command = [command ' <tmp.pgm >tmp.key'];
    eval(command);
     
    % Open tmp.key and check its header
    g = fopen('tmp.key', 'r');
    if g == -1
        error('Could not open file tmp.key.');
    end
    [header, count] = fscanf(g, '%d %d', [1 2]);
    if count ~= 2
        error('Invalid keypoint file beginning.');
    end
    num = header(1);
    len = header(2);
    if len ~= 128
        error('Keypoint descriptor length invalid (should be 128).');
    end
     
    % Creates the two output matrices (use known size for efficiency)
    locs = double(zeros(num, 4));
    descriptors = double(zeros(num, 128));
     
    % Parse tmp.key
    for i = 1:num
        [vector, count] = fscanf(g, '%f %f %f %f', [1 4]); %row col scale ori
        if count ~= 4
            error('Invalid keypoint file format');
        end
        locs(i, :) = vector(1, :);
     
        [descrip, count] = fscanf(g, '%d', [1 len]);
        if (count ~= 128)
            error('Invalid keypoint file value.');
        end
        % Normalize each input vector to unit length
        descrip = descrip / sqrt(sum(descrip.^2));
        descriptors(i, :) = descrip(1, :);
    end
    fclose(g);
    J'ai pas compris d'ou vient cette erreur et comment le corrigé?? Pouvez-Vous m'aider SVP??

  3. #3
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    C'est ta fonction sift qui a retourné un descripteur vide.

    Il faut que tu exécutes cette fonction pas à pas pour comprendre ce qui se passe. A distance, on peut pas trop t'aider car la fonction sift est un "wrapper" d'un exécutable externe.

    question annexe de curiosité : dans quel domaine travailles-tu ? (je suis moi aussi utilisateur indirect de SIFT, qui est encapsulé dans un logiciel de photogrammétrie que j'utilise)

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Par défaut
    merci ol9245 pour la réponse,

    Il m'ont dit que le problème provient du fait que la taille de la région d'intérêt est trops petit (26*26) pixels. j'ai fait une redimensionnement de la taille (300*300) pixels, il me résout l'erreur (matlab ne me lance pas un erreur). Mais, le descripteur est toujours vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Finding keypoints... 
    0 keypoints found.
    J'ai pas compris pourquoi??
    voila le code que j'utilise:
    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
     
    image = imread('0002_m_l_04.jpg');
       figure,imshow(image);
       Wnbre=7;
       [a,b]=size(image);
       unit=int16(b/Wnbre);
     
    %Construction de chaque region pour récupérer ses caractéristiques
     
    VH=[];
    rect1=[];
    cv=1;
    D=0;
    for k = 1:Wnbre
        for j = 1:Wnbre
            D=D+1
        rect=[(j-1)*unit,(k-1)*unit,unit,unit];
        rect1=[rect1 rect];
        CropWind = imcrop(image, rect);
        taille=size(CropWind)
        figure,imshow(CropWind),title('Fenêtre'); 
       im=imresize(CropWind, [300 300]);
        ix1=['./ImageTest/' int2str(D) '.jpg']
        imwrite(im, ix1,'jpg')
       [image, descriptors, locs] = sift(ix1);
        end;
    end;
    ya-il quelqu'un qui peut m'aider à corriger cet erreur??


    Pour ol9245, je travaille sur la thématique de la biométrie et plus précisément sur la reconnaissance par l'empreinte de la paume de la main. Je veux utiliser SIFT comme un descripteur pour ma ROI. Si vous avez besoin de quelque chose vous pouvez me contacter

  5. #5
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    Si SIFT ne truve pas de descripteur MATLAB n'y peut rien (image blanche par exemple).
    est-ce que tu as essayé de calculer les descripteurs de cette image par SIFT sans MATLAB ?

    Encore une fois, ta fonction sift.m n'est qu'un wrapper autour du programme sift.exe (ou autre), lequel est probalement écrit en C ou C++.

    Question annexe : peux-tu me passer le programme sift que tu utilises ? ou mieux son code source ? (je parle du programme lui-même, pas de son wrapper en Matlab) ? J'en ai pas un besoin immédiat masi dans l'avenir ça me sera bien utile. Merci++

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Par défaut
    pour ol9245:
    mon image n'est pas blanche c'est pour cela je m'étonne de ne pas trouver aucun descripteur .
    est-ce que tu as essayé de calculer les descripteurs de cette image par SIFT sans MATLAB ?
    j'ai pas compris comment faire ceci??

    Encore une fois, ta fonction sift.m n'est qu'un wrapper autour du programme sift.exe (ou autre), lequel est probalement écrit en C ou C++.
    J'ai pas compris ce que tu dis?? Pouvez-vous m'expliquez??

    Ci-joint vous trouvez un dossier qui contient les fonctions dont j'utilise. Vous pouvez faire l’exécution avec le fichier "EssayeSIFT.m" pour voir le résultat.

    Test.rar
    Pouvez-vous m'aidez à résoudre ce problème car me sent bloqué??

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/06/2007, 11h42
  2. Réponses: 11
    Dernier message: 11/11/2006, 12h20
  3. [VBA] erreur au niveau du code
    Par torNAdE dans le forum Access
    Réponses: 9
    Dernier message: 26/07/2006, 14h33
  4. [phpBB] Erreur au niveau de la base suite à mise à jour
    Par Goundy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 05/03/2006, 14h50
  5. [EJB] Erreur au niveau de la récuperation du home
    Par ujoodha dans le forum Java EE
    Réponses: 3
    Dernier message: 05/10/2005, 13h50

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