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 :

[Débutante] Créer une boucle pour enregistrer des images


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut [Débutante] Créer une boucle pour enregistrer des images
    Bonjour à tous,

    je travaille actuellement sur un programme qui permet d'extraire des données sous format netcdf puis de creer des cartographie à partir de ces données. Les fichier netcdf de base sont des données journalières me donnant les concentrations en chlorophylle et en matière en suspension en fonction de la latitude et de la longitude. Le programme me permet actuellement d'obtenir les deux cartographies pour chaque fichier mais il faut pour cela que je rentre pour chaque image le nom du fichier . Ce que je souhaiterai c'est creer une boucle qui me permette de lire et d'enregistrer automatiquement toutes les cartes que je fabrique. Je possède des données du 1er janvier 1997 à l'actuel (et j'actualise régulièrement ma base de donnée), sachant que les noms de fichiers sont tous sous la même forme: "20010110" pour le 10/01/2001. Je voudrais égalemnt savoir s'il est possible de préciser ou je souhaite enregistrer les images?

    Merci d'avance pour votre aide!


    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
     
    function LireEtProfil(nom)
    % nom est le le nom du fichier .nc (sans l'extension) que l'on veut lire 
    % il doit être entre cottes
     
    file=[nom,'.nc']
     
     
    SuspMatt1=nc_varget(file,'suspended_matters');
    chlorophyll_a1=nc_varget(file,'chlorophyll_a');
    RejFlag1=nc_varget(file,'rejection_flag');
    lon1=nc_varget(file,'lon');
    lat1=nc_varget(file,'lat');
     
     
    % Sélection de la zone d'intérêt
    [SuspMatt,lon,lat]=SelectZoneDefaut(SuspMatt1,lon1,lat1);
    [chlorophyll_a,lon,lat]=SelectZoneDefaut(chlorophyll_a1,lon1,lat1);
    [RejFlag,lon,lat]=SelectZoneDefaut(RejFlag1,lon1,lat1);
     
    Nlon=size(SuspMatt,2)
    Nlat=size(SuspMatt,1)
     
     
    % RejFlag = 1 pour la terre et 0 pour le reste
    for i=1:Nlon
      for j=1:Nlat
        if RejFlag(j,i)~=1 
          RejFlag(j,i)=0 ;
        end
      end
    end
     
    % Statistiques sur toute la zone
    MaxiSuspMatt=max(max(SuspMatt))
    MiniSuspMatt=min(min(SuspMatt))
    [MoySuspMatt]=MoyenneZone(SuspMatt)
     
    MaxiChlorophyll_a=max(max(chlorophyll_a))
    MiniChlorophyll_a=min(min(chlorophyll_a))
    [MoyChlorophyll_a]=MoyenneZone(chlorophyll_a)
     
     
    % Figure matière en suspension
    fig=figure;
    set(fig,'DoubleBuffer','on','Position',[50 50 600 600]);
    niveaux=[0,0,1,0.5,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50];
    [C,h]=contourf(lon,lat,SuspMatt,niveaux,'Color','k');
    caxis([0 30])
    clabel(C,h,'FontSize',6,'Color','k','BackgroundColor',[1 1 1],'EdgeColor',[1 1 1],'Rotation',0)
    colormap(jet(128));
    colorbar
    axis equal
    axis([-2.1 -1.4 43.4 44.2])
    hold on
    contourf(lon,lat,1000*RejFlag, [1000 1000],'LineColor','k');%,'LineWidth',2);
    hold off
    title('Niveaux de matière en suspension')
    saveas(gcf,'mes','bmp')
     
    % Figure Chlorophylle a
    fig2=figure;
    set(fig2,'DoubleBuffer','on','Position',[50 50 600 600]);
    niveaux=[0,0,1,0.5,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50];
    [C,h]=contourf(lon,lat,chlorophyll_a,niveaux,'Color','k');
    caxis([0 30])
    clabel(C,h,'FontSize',6,'Color','k','BackgroundColor',[1 1 1],'EdgeColor',[1 1 1],'Rotation',0)
    colormap(jet(128));
    colorbar
    axis equal
    axis([-2.1 -1.4 43.4 44.2])
    hold on
    contourf(lon,lat,1000*RejFlag,[1000 1000],'LineColor','k');
    hold off
    title('Niveaux de chlorophylle a')
    saveas(gcf,'chlorophylle','bmp')

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 883
    Points
    52 883
    Par défaut
    Citation Envoyé par Krokro00
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    % RejFlag = 1 pour la terre et 0 pour le reste
    for i=1:Nlon
      for j=1:Nlat
        if RejFlag(j,i)~=1 
          RejFlag(j,i)=0 ;
        end
      end
    end
    Déjà, ceci peut s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RejFlag=RejFlag.*(RejFlag==1)
    Ensuite, je ne vois pas vraiment que tu cherches à automatiser ?
    Si j'ai bien compris, la variable nom contient par exemple '20010110' donc tu voudrais enregistrer les figures sous 'mes_20010110.bmp' et 'chlorophylle_20010110.bmp' ? Ou bien mettre les deux images dans un répertoire 20010110 ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Deja , merci pour la simplification!

    Je vais essayer de mieux m'expliquer! En fait, à partir de mon fichier '20010110.nc', je crée deux images, une qui donne les concentrations en matière en suspension, une qui donne les concentration en chlorophylle et je souhaite enregistrer les figures respectivement sous "20010110MES" et "20010110CHL". Ensuite ce que je voudrais c'est qu'après, de manière automatique le programme lise le fichier suivant qui sera pour cet exemple '20010111.nc' et m'enregistre les figures sous "20010111MES" et "20010110CHL" et ainsi de suite sachant que j'ai des données de 19970101 à 20070101 (et que je vais en récuperer d'autres!). Mon problème principal est que pour le moment je dois rentrer à chaque fois le nom du fichier à lire au début et je ne sais pas comment faire pour que cela se fasse automatiquement. Pour l'enregistrementje voulais juste savoir si je pouvais préciser un dossier où enregistrer mes images (mes et chl peuvent être dans le même, ce n'est pas très important!). J'espère que je suis un peux plus claire...

    Merci encore!

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 883
    Points
    52 883
    Par défaut
    Voici l'idée :
    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
    d=datenum('01/01/1997',23):datenum('01/01/2007',23); % tous les jours entre les deux dates.
     
    for n=1:numel(d)
     
       filename=datestr(d(n),26); %  date en yyyy/mm/dd
       filename=[strrep(filename,'/','') '.nc']; date en yyyymmdd + ".nc"
     
       <...>
     
       saveas(gcf,strrep(filename,'.nc','MES.bmp'),'bmp'); date en yyyymmdd + "MES.bmp"
     
       <...>
     
       saveas(gcf,strrep(filename,'.nc','CHL.bmp'),'bmp'); date en yyyymmdd + "CHL.bmp"
     
    end
    Ensuite, pour la gestion du répertoire, lis la documentation de la fonction FULLFILE

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut ça marche pas...
    J'ai fait un essai avec mes données du 01/01/2003 au 31/01/2003 et ça ne marche pas, matlab me dit :
    ??? DATENUM failed.
    Failed to parse date string.
    Error using ==> datevec
    31 is too large to be a month.

    Error in ==> cartoauto at 7
    d=datenum('01/01/2003',23):datenum('31/01/2003',23); % tous les jours entre les deux dates.
    Donc j'ai surement du faire une erreur quelque part (je découvre seulement matlab depuis un mois... )Faut t'il laisser 'file=[nom,'.nc']' au début? ou sinon comment lance tu le programme? Je ne comprend pas non plus ce que signifie le 23 et le 26 dans (=datenum('01/01/2003',23):datenum('31/01/2003',23) et filename=datestr(d(n),26)...


    Je te remet le code après modification...

    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
     
    function LireEtProfil(nom)
    % nom est le le nom du fichier .nc (sans l'extension) que l'on veut lire 
    % il doit être entre cottes
     
    file=[nom,'.nc']
     
    d=datenum('01/01/2003',23):datenum('31/01/2003',23); % tous les jours entre les deux dates.
     
    for n=1:numel(d)
     
       filename=datestr(d(n),26); %  date en yyyy/mm/dd
       filename=[strrep(filename,'/','') '.nc']; %date en yyyymmdd + ".nc"
     
     
    SuspMatt1=nc_varget(file,'suspended_matters');
    chlorophyll_a1=nc_varget(file,'chlorophyll_a');
    RejFlag1=nc_varget(file,'rejection_flag');
    lon1=nc_varget(file,'lon');
    lat1=nc_varget(file,'lat');
     
     
    % Sélection de la zone d'intérêt
    [SuspMatt,lon,lat]=SelectZoneDefaut(SuspMatt1,lon1,lat1);
    [chlorophyll_a,lon,lat]=SelectZoneDefaut(chlorophyll_a1,lon1,lat1);
    [RejFlag,lon,lat]=SelectZoneDefaut(RejFlag1,lon1,lat1);
     
    Nlon=size(SuspMatt,2)
    Nlat=size(SuspMatt,1)
     
     
    % RejFlag = 1 pour la terre et 0 pour le reste
    RejFlag=RejFlag.*(RejFlag==1);
     
     
    % Figure matière en suspension
    fig=figure;
    set(fig,'DoubleBuffer','on','Position',[50 50 600 600]);
    niveaux=[0,0,1,0.5,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50];
    [C,h]=contourf(lon,lat,SuspMatt,niveaux,'Color','k');
    caxis([0 30])
    clabel(C,h,'FontSize',6,'Color','k','BackgroundColor',[1 1 1],'EdgeColor',[1 1 1],'Rotation',0)
    colormap(jet(128));
    colorbar
    axis equal
    axis([-2.1 -1.4 43.4 44.2])
    hold on
    contourf(lon,lat,1000*RejFlag, [1000 1000],'LineColor','k');%,'LineWidth',2);
    hold off
    title('Niveaux de matière en suspension')
    saveas(gcf,strrep(filename,'.nc','MES.bmp'),'bmp'); %date en yyyymmdd + "MES.bmp"
    % saveas(gcf,'mes','bmp')
     
     
    % Figure Chlorophylle a
    fig2=figure;
    set(fig2,'DoubleBuffer','on','Position',[50 50 600 600]);
    niveaux=[0,0,1,0.5,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50];
    [C,h]=contourf(lon,lat,chlorophyll_a,niveaux,'Color','k');
    caxis([0 30])
    clabel(C,h,'FontSize',6,'Color','k','BackgroundColor',[1 1 1],'EdgeColor',[1 1 1],'Rotation',0)
    colormap(jet(128));
    colorbar
    axis equal
    axis([-2.1 -1.4 43.4 44.2])
    hold on
    contourf(lon,lat,1000*RejFlag,[1000 1000],'LineColor','k');
    hold off
    title('Niveaux de chlorophylle a')
    saveas(gcf,strrep(filename,'.nc','CHL.bmp'),'bmp'); %date en yyyymmdd + "CHL.bmp"
    %saveas(gcf,'chlorophylle','bmp')
     
    end

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 883
    Points
    52 883
    Par défaut
    Désolé... j'ai raté une ligne dans la doc de DATESTR

    Les dates doivent être écrites en dd/mm/yyyy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d=datenum('01/01/2003',23):datenum('01/31/2003',23);
    Pour comprendre le code, il faut le réduire un peu c'est vrai. Regardes juste ce que produit ce simple code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    d=datenum('01/01/2003',23):datenum('01/03/2003',23);
     
    for n=1:numel(d)
     
       file=datestr(d(n),26)
       file=[strrep(filename,'/','') '.nc']
     
       strrep(file,'.nc','MES.bmp')
     
       strrep(file,'.nc','CHL.bmp')
     
    end
    Pour le reste, commences par la documentation...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Quand je rentre le code que tu viens de me fournir , mon copain matlab me répond ainsi de suite jusqu'au 20030103)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    filename =
    2003/01/01
     
    filename =
    20030101.nc
     
    ans =
    20030101MES.bmp
     
    ans =
    20030101CHL.bmp
    donc si je comprend bien , ces lignes servent à nommer les images crées et à les enregistrer sous le nom crée. Mais ce que je ne comprend pas c'est comment ces lignes s'integrent dans le programme...Je m'explique (mal, mais j'essai!). Dans le programme de base ma première ligne est file=[nom,'.nc'] donc, pour demarer la création de la cartographie, j'écrit: cartoauto'20030101' (cartoauto c'est le nom de mon programme)et le programme va récuperer les données de chlorophylle et de matière en suspension dans le fichier netCDF et me crée la cartographie. La je ne comprend pas comment la ligne de commande va récuperer les données de base dans le fichier net cdf.....

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 883
    Points
    52 883
    Par défaut
    Si je comprends tout, tu as deux fichiers : cartoauto.m et LireEtProfil.m ? Ou bien tu as programé différemment ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Bon en fait mon programme s'appelait LireEtProfil au début mais comme j'ai essayé de bidouiller pas mal de formules, j'ai changé le nom et maintenant c'est cartoauto! J'ai juste oublié de changé la ligne de présentation au début du programme! Donc en fait c'est la même chose!!!

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 883
    Points
    52 883
    Par défaut
    OK, donc tu veux appeler cette fonction plusieurs fois pour qu'elle analyse tous les fichiers 19970101 => 20070101 ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Oui, je veux appeler la fonction pour tous mes fichiers de 1997 à 2007 puis enregistrer les fichiers sous les noms que je t'ai dit...

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 883
    Points
    52 883
    Par défaut
    Donc tu créer une autre fonction dans un autre fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function bouclage
     
    d=datenum('01/01/2003',23):datenum('01/03/2003',23); % en mettant les bonnes dates
     
    for n=1:numel(d)
     
       file=datestr(d(n),26);
       file=[strrep(filename,'/','') '.nc'];
     
       cartoauto(file);
     
    end
    Et dans cartoauto :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function cartoauto(file)
     
       SuspMatt1=nc_varget(file,'suspended_matters');
     
       <etc...>
     
       saveas(gcf,strrep(file,'.nc','MES.bmp'),'bmp'); date en yyyymmdd + "MES.bmp"
     
       <etc...>
     
       saveas(gcf,strrep(file,'.nc','CHL.bmp'),'bmp'); date en yyyymmdd + "CHL.bmp"
     
       <etc...>

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut tjs pas..
    J'ai crée le programme bouclage, modifié mon programme cartoauto mais ca ne marche tjs pas. Apparement il y a un problème avec la fonction saveas...ça fait la même chose pour la chlorophylle...

    ??? Error using ==> date
    Too many input arguments.

    Error in ==> cartoauto at 38
    saveas(gcf,strrep(file,'.nc','MES.bmp'),'bmp'); date en yyyymmdd + "MES.bmp";

    Error in ==> bouclage at 11
    cartoauto(file);


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    function bouclage
     
    d=datenum('01/15/2003',23):datenum('01/17/2003',23); % en mettant les bonnes dates
     
    for n=1:numel(d)
     
       file=datestr(d(n),26);
       file=[strrep(file,'/','') '.nc'];
     
       cartoauto(file);
     
    end
    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
     
    function cartoauto(file)
     
    SuspMatt1=nc_varget(file,'suspended_matters');
    chlorophyll_a1=nc_varget(file,'chlorophyll_a');
    RejFlag1=nc_varget(file,'rejection_flag');
    lon1=nc_varget(file,'lon');
    lat1=nc_varget(file,'lat');
     
     
    % Sélection de la zone d'intérêt
    [SuspMatt,lon,lat]=SelectZoneDefaut(SuspMatt1,lon1,lat1);
    [chlorophyll_a,lon,lat]=SelectZoneDefaut(chlorophyll_a1,lon1,lat1);
    [RejFlag,lon,lat]=SelectZoneDefaut(RejFlag1,lon1,lat1);
     
    Nlon=size(SuspMatt,2)
    Nlat=size(SuspMatt,1)
     
     
    % RejFlag = 1 pour la terre et 0 pour le reste
    RejFlag=RejFlag.*(RejFlag==1);
     
     
    % Figure matière en suspension
    fig=figure;
    set(fig,'DoubleBuffer','on','Position',[50 50 600 600]);
    niveaux=[0,0,1,0.5,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50];
    [C,h]=contourf(lon,lat,SuspMatt,niveaux,'Color','k');
    caxis([0 30])
    clabel(C,h,'FontSize',6,'Color','k','BackgroundColor',[1 1 1],'EdgeColor',[1 1 1],'Rotation',0)
    colormap(jet(128));
    colorbar
    axis equal
    axis([-2.1 -1.4 43.4 44.2])
    hold on
    contourf(lon,lat,1000*RejFlag, [1000 1000],'LineColor','k');%,'LineWidth',2);
    hold off
    title('Niveaux de matière en suspension');
    saveas(gcf,strrep(file,'.nc','MES.bmp'),'bmp'); date en yyyymmdd + "MES.bmp";
    % saveas(gcf,'mes','bmp')
     
     
    % Figure Chlorophylle a
    fig2=figure;
    set(fig2,'DoubleBuffer','on','Position',[50 50 600 600]);
    niveaux=[0,0,1,0.5,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50];
    [C,h]=contourf(lon,lat,chlorophyll_a,niveaux,'Color','k');
    caxis([0 30])
    clabel(C,h,'FontSize',6,'Color','k','BackgroundColor',[1 1 1],'EdgeColor',[1 1 1],'Rotation',0)
    colormap(jet(128));
    colorbar
    axis equal
    axis([-2.1 -1.4 43.4 44.2])
    hold on
    contourf(lon,lat,1000*RejFlag,[1000 1000],'LineColor','k');
    hold off
    title('Niveaux de chlorophylle a');
    saveas(gcf,strrep(file,'.nc','CHL.bmp'),'bmp'); date en yyyymmdd + "CHL.bmp"
    %saveas(gcf,'chlorophylle','bmp')
     
    end

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 883
    Points
    52 883
    Par défaut
    Ben oui, mais faut pas oublier que les commentaires doivent commencer par % (je me parle à moi-même là, vu que c'est moi qui me suis gauffré ) donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saveas(gcf,strrep(file,'.nc','MES.bmp'),'bmp'); % date en yyyymmdd + "MES.bmp";

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    vraiment désolé... je suis vraiment débutante et je me perd vite dans la masse d'information.... Je viens de tester sur 3 jours, ca à l'air de fonctionner!! Je vais essayer ce soir sur plusieures années et je te tient au courant!


    Merci beaucoup pour ton aide et encore désolé pour les questions idiotes!

    bonne soirée!

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Bonjour tous le monde, bonjour Dutmatlab,

    suite à la conversation d'hier, j'ai testé le programme sur plusieures années et ça marche....mais j'ai deux problèmes:

    - Déja il y a certaines années ou il manque certaines données journalières, du coup le programme plante puisqu'il ne trouve pas la date à traiter... Est t'il possible d'indiquer quelque chose qui lui dise de continuer même si la date n'existe pas?

    - ensuite, quand je lance le programme les images s'enregistrent mais également s'affichent sur mon ordi, donc si je lance le programme sur 5ans ça rique de planter mon ordi non? Est t'il possible de lui dire de ne pas afficher l'image?

    merci encore beaucoup pour l'aide!

  17. #17
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 883
    Points
    52 883
    Par défaut
    Pour le premier point, il faut utiliser la fonction EXIST.

    Pour la deuxième question, le problème vient du fait que tu fais appel de nombreuses fois à la fonction FIGURE. Donc tu génères un grand nombres de fenêtre. L'idéal serait de ne créer qu'une seule fenêtre et de la nettoyer avant chaque affichage d'image.

    Donc voici les codes :
    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
    function bouclage
     
    d=datenum('01/15/2003',23):datenum('01/17/2003',23); % en mettant les bonnes dates
     
    figure('DoubleBuffer','on','Position',[50 50 600 600]);
    colormap(jet(128));
     
    for n=1:numel(d)
     
       file=datestr(d(n),26);
       file=[strrep(file,'/','') '.nc'];
     
       if exist(file,'file')==2
          cartoauto(file);
       end
     
    end
    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
    function cartoauto(file)
     
    SuspMatt1=nc_varget(file,'suspended_matters');
    chlorophyll_a1=nc_varget(file,'chlorophyll_a');
    RejFlag1=nc_varget(file,'rejection_flag');
    lon1=nc_varget(file,'lon');
    lat1=nc_varget(file,'lat');
     
     
    % Sélection de la zone d'intérêt
    [SuspMatt,lon,lat]=SelectZoneDefaut(SuspMatt1,lon1,lat1);
    [chlorophyll_a,lon,lat]=SelectZoneDefaut(chlorophyll_a1,lon1,lat1);
    [RejFlag,lon,lat]=SelectZoneDefaut(RejFlag1,lon1,lat1);
     
    Nlon=size(SuspMatt,2)
    Nlat=size(SuspMatt,1)
     
     
    % RejFlag = 1 pour la terre et 0 pour le reste
    RejFlag=RejFlag.*(RejFlag==1);
     
     
    % Figure matière en suspension
    clf
    niveaux=[0,0,1,0.5,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50];
    [C,h]=contourf(lon,lat,SuspMatt,niveaux,'Color','k');
    caxis([0 30])
    clabel(C,h,'FontSize',6,'Color','k','BackgroundColor',[1 1 1],'EdgeColor',[1 1 1],'Rotation',0)
    colorbar
    axis equal
    axis([-2.1 -1.4 43.4 44.2])
    hold on
    contourf(lon,lat,1000*RejFlag, [1000 1000],'LineColor','k');%,'LineWidth',2);
    hold off
    title('Niveaux de matière en suspension');
    saveas(gcf,strrep(file,'.nc','MES.bmp'),'bmp'); %date en yyyymmdd + "MES.bmp";
     
     
    % Figure Chlorophylle a
    clf
    niveaux=[0,0,1,0.5,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50];
    [C,h]=contourf(lon,lat,chlorophyll_a,niveaux,'Color','k');
    caxis([0 30])
    clabel(C,h,'FontSize',6,'Color','k','BackgroundColor',[1 1 1],'EdgeColor',[1 1 1],'Rotation',0)
    colorbar
    axis equal
    axis([-2.1 -1.4 43.4 44.2])
    hold on
    contourf(lon,lat,1000*RejFlag,[1000 1000],'LineColor','k');
    hold off
    title('Niveaux de chlorophylle a');
    saveas(gcf,strrep(file,'.nc','CHL.bmp'),'bmp'); %date en yyyymmdd + "CHL.bmp"
     
    end
    En plus, je pense que la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RejFlag=RejFlag.*(RejFlag==1);
    peut encore être simplifiée en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RejFlag=(RejFlag==1); % ou double(RejFlag==1) ?

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut ca marche!... et dernière petite question...
    Salut dutmatlab,

    Merci pour la rapidité de tes réponses;
    Je viens de tester tes solutions et tout fonctionne à merveille en ce qui concerne le manque de données et la création des carto . J'ai égalemnt testé tes propositions pour le masque de la terre (RejFlag=(RejFlag==1); % ou double(RejFlag==1)) mais ca ca ne marche pas!

    Je t'embete une dernière fois avec une dernière petite question (et oui, maintenant que j'ai mes images il faut que je les traite!). J'ai essayé d'adapté ta boucle sur un programme qui me calcule des statistiques (simple pour le moment!) sur les concentrations en MES et en chlorophylle à l'embouchure de l'adour. En fait le principe c'est que je défini une concentration max en MES et en chl (niveau MES et niveau chlorophylle) et apres je calcul les moyenne et les max dans ces zones. apparement tout fonctionne. Mon seul problème concerne l'enregistrement des fichiers donnant les valeurs statistiques calculées. Pour chaque journée de donnée, le logiciel me crée un fichier texte de la forme :

    MaxMESPlumeMES MoyMESPlumeMES MaxCHLPlumeMES MoyCHLPlumeMES MaxMESPlumeCHL MoyMESPlumeCHL MaxCHLPlumeCHL MoyCHLPlumeCHL
    6.79 2.36 3.55 1.27 6.79 0.60 9.65 1.02

    Ce que je voudrais c'est que l'ensemble des statistiques calculées pour les différentes images se mettent dans le même fichier txt
    c'est à dire que la première colonne donne la date du premier fichier puis les stats calculées, la deuxième colonne la date du deuxième fichier....
    Je sais pas si je suis très claire et si c'est possible???

    Merci encore pour tout !


    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
     
    function statplume(file)
     
     
    SuspMatt1=nc_varget(file,'suspended_matters');
    chlorophyll_a1=nc_varget(file,'chlorophyll_a');
    RejFlag1=nc_varget(file,'rejection_flag');
    lon1=nc_varget(file,'lon');
    lat1=nc_varget(file,'lat');
     
     
    % Sélection de la zone d'intérêt
    [SuspMatt,lon,lat]=SelectZoneDefaut(SuspMatt1,lon1,lat1);
    [chlorophyll_a,lon,lat]=SelectZoneDefaut(chlorophyll_a1,lon1,lat1);
    [RejFlag,lon,lat]=SelectZoneDefaut(RejFlag1,lon1,lat1);
     
    Nlon=size(SuspMatt,2)
    Nlat=size(SuspMatt,1)
     
     
    % Sélection d'une plume par seuil sur un niveau 
        niveauMES=1  
        niveauCHL=0.5
     
     
      Nlon=length(lon);
      Nlat=length(lat);
      [PlumeMES]=SelectPlume(niveauMES,SuspMatt,lon,lat);
      [PlumeCHL]=SelectPlume(niveauCHL,chlorophyll_a,lon,lat);
     
      % Statistiques sur la plume
      % statistique des MES
     
      MaxMESPlumeMES=max(max(SuspMatt.*PlumeMES))
      [MoyMESPlumeMES]=MoyennePlumeMES(SuspMatt,PlumeMES)
      MaxCHLPlumeMES=max(max(chlorophyll_a.*PlumeMES))
      [MoyCHLPlumeMES]=MoyennePlumeMES(chlorophyll_a,PlumeMES)
     
      % statistique de la chlorophylle
     
      MaxMESPlumeCHL=max(max(SuspMatt.*PlumeCHL))
      [MoyMESPlumeCHL]=MoyennePlumeCHL(SuspMatt,PlumeCHL)
      MaxCHLPlumeCHL=max(max(chlorophyll_a.*PlumeCHL))
      [MoyCHLPlumeCHL]=MoyennePlumeCHL(chlorophyll_a,PlumeCHL)
     
     
       % Impression des données de la plume dans un fichier texte
     
       %fichier qui donne les valeurs de MES et de chlorophylle dans la zone
       %définie (>niveauMES)
      NumFich=fopen(['PlumeMES_',num2str(niveauMES),'_',file,'.txt'],'w');
      fprintf(NumFich,'LON LAT Suspended_Matters chlorophyll_a\n');
      for i=1:Nlon
        for j=1:Nlat
          if PlumeMES(j,i)==1  
            fprintf(NumFich,'%6.2f %6.2f %7.2f% 7.2f\n',lon(i),lat(j),SuspMatt(j,i),chlorophyll_a(j,i));
          end
        end
      end
      status=fclose(NumFich);
     
      %fichier qui donne les valeurs de MES et de chlorophylle dans la zone
       %définie (>niveauCHL)
      NumFich=fopen(['PlumeCHL_',num2str(niveauCHL),'_',file,'.txt'],'w');
      fprintf(NumFich,'LON LAT chlorophyll_a Suspended_Matters\n');
      for i=1:Nlon
        for j=1:Nlat
          if PlumeCHL(j,i)==1  
            fprintf(NumFich,'%6.2f %6.2f %7.2f% 7.2f\n',lon(i),lat(j),chlorophyll_a(j,i),SuspMatt(j,i));
          end
        end
      end
      status=fclose(NumFich);
     
     
      %fichier qui donne les valeurs statistiques calculées
     
      NumFich=fopen(['statistiques','_',file,'.txt'],'w');
      fprintf(NumFich,'MaxMESPlumeMES MoyMESPlumeMES MaxCHLPlumeMES MoyCHLPlumeMES MaxMESPlumeCHL MoyMESPlumeCHL  MaxCHLPlumeCHL MoyCHLPlumeCHL\n');
      fprintf(NumFich,'%6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f\n',MaxMESPlumeMES,MoyMESPlumeMES,MaxCHLPlumeMES,MoyCHLPlumeMES,MaxMESPlumeCHL,MoyMESPlumeCHL,MaxCHLPlumeCHL,MoyCHLPlumeCHL);
      status=fclose(NumFich);

  19. #19
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 883
    Points
    52 883
    Par défaut
    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
    function bouclage
     
    d=datenum('01/15/2003',23):datenum('01/17/2003',23); % en mettant les bonnes dates
     
    figure('DoubleBuffer','on','Position',[50 50 600 600]);
    colormap(jet(128));
     
    fid=fopen('PlumeMES.txt','wt');
    fprintf(fid,'MaxMESPlumeMES MoyMESPlumeMES MaxCHLPlumeMES MoyCHLPlumeMES MaxMESPlumeCHL MoyMESPlumeCHL MaxCHLPlumeCHL MoyCHLPlumeCHL\n');
     
    for n=1:numel(d)
     
       file=datestr(d(n),26);
       file=[strrep(file,'/','') '.nc'];
     
       if exist(file,'file')==2
          cartoauto(file);
          statplume(file,fid)
       end
     
    end
    fclose(fid);
    Et dans statplume, à la place de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       %fichier qui donne les valeurs de MES et de chlorophylle dans la zone
       %définie (>niveauMES)
      NumFich=fopen(['PlumeMES_',num2str(niveauMES),'_',file,'.txt'],'w');
      fprintf(NumFich,'LON LAT Suspended_Matters chlorophyll_a\n');
      for i=1:Nlon
        for j=1:Nlat
          if PlumeMES(j,i)==1  
            fprintf(NumFich,'%6.2f %6.2f %7.2f% 7.2f\n',lon(i),lat(j),SuspMatt(j,i),chlorophyll_a(j,i));
          end
        end
      end
      status=fclose(NumFich);
    Tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       %fichier qui donne les valeurs de MES et de chlorophylle dans la zone
       %définie (>niveauMES)
      for i=1:Nlon
        for j=1:Nlat
          if PlumeMES(j,i)==1  
            fprintf(fid,'%6.2f %6.2f %7.2f% 7.2f\n',lon(i),lat(j),SuspMatt(j,i),chlorophyll_a(j,i));
          end
        end
      end
    Je sais que ce n'est pas exactement la solution mais c'est l'idée... à toi de jouer pour l'adapter

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    J'arrive maintenant à avoir tous les fichiers statistiques dans le même fichiers txt , mais je n'arrive pas à afficher la date correspondante en premiere colonne ....searait t'il possible de rajouter une variable "file" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fid,'superficieMES superficieCHL MaxMESPlumeMES MoyMESPlumeMES MaxCHLPlumeMES MoyCHLPlumeMES MaxMESPlumeCHL MoyMESPlumeCHL  MaxCHLPlumeCHL MoyCHLPlumeCHL\n');
    et dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(fid,' %6.0f %6.0f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f\n',superficieMES,superficieCHL,MaxMESPlumeMES,MoyMESPlumeMES,MaxCHLPlumeMES,MoyCHLPlumeMES,MaxMESPlumeCHL,MoyMESPlumeCHL,MaxCHLPlumeCHL,MoyCHLPlumeCHL);
    J'ai essayé pas mal de trucs mais a chaque fois matlab me dit que la variable 'file' n'est pas définie....je ne sais pas comment faire...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Créer une boucle pour copie des tableaux de plusieurs feuilles sur une seule
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/09/2009, 17h12
  2. Réponses: 10
    Dernier message: 26/03/2008, 22h37
  3. réaliser une boucle pour afficher des sources
    Par cloridriks dans le forum Langage
    Réponses: 9
    Dernier message: 17/03/2008, 15h21
  4. Réponses: 3
    Dernier message: 12/06/2007, 13h47

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