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 :

Matlab > Java


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut Matlab > Java
    Bonjour,

    j'ai trouvé un algorithm de "hill shading" que j'aimerai utiliser.
    Seulement mon application est en java.

    J'ai essayé de traduire l'algorithm mais j'ai du mal a comprendre la syntaxe de matlab.

    Si quelqu'un pouvait m'eclaircir je lui en serais reconnaissant. Je ne demande pas de le traduire en java bien sur mais une explication des divers fonctions ainsi que des lignes comme asp(asp<pi)=asp(asp<pi)+(pi/2); serait bien.

    merci

    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
     
    function h = hillshade(dem,X,Y,varargin)
    % PUPROSE: Calculate hillshade for a digital elevation model (DEM)
    % -------------------------------------------------------------------
    % USAGE: h = hillshade(dem,X,Y,varagin)
    % where: dem is the DEM to calculate hillshade for
    %        X and Y are the DEM coordinate vectors
    %        varargin are parameters options
    %
    % OPTIONS: 
    %        'azimuth'  is the direction of lighting in deg (default 315)
    %        'altitude' is the altitude of the lighting source in
    %                   in degrees above horizontal (default 45)
    %        'zfactor'  is the DEM altitude scaling z-factor (default 1)
    %        'plotit'   creates a simple plot of the hillshade
    %
    % EXAMPLE:
    %       h=hillshade(peaks(50),1:50,1:50,'azimuth',45,'altitude',100,'plotit')
    %       - calculates the hillshade for an example 50x50 peak surface.
    %       - changes the default settings for azimuth and altitude.
    %       - creates an output hillshade plot
     
    % See also: GRADIENT, CART2POL
    %
    % Note: Uses simple unweighted gradient of 4 nearest neighbours for slope
    %       calculation (instead of Horn's method) with ESRIs hillshade
    %       algorithm.
    %
    % Felix Hebeler, Dept. of Geography, University Zurich, February 2007.
    % modified by Andrew Stevens (astevens@usgs.gov), 5/04/2007
     
    %% configure inputs
    %default parameters
    azimuth=315;
    altitude=45;
    zf=1;
    plotit=0;
     
    %parse inputs
    if isempty(varargin)~=1     % check if any arguments are given
        [m1,n1]=size(varargin);
        opts={'azimuth';'altitude';'zfactor';'plotit'};
        for i=1:n1;             % check which parameters are given
            indi=strcmpi(varargin{i},opts);
            ind=find(indi==1);
            if isempty(ind)~=1
                switch ind
                    case 1
                        azimuth=varargin{i+1};
                    case 2
                        altitude=varargin{i+1};
                    case 3
                        zf=varargin{i+1};
                    case 4
                        plotit=1;
                end
            end
        end
    end
     
    %% Initialize paramaters
    dx=abs(X(2)-X(1));  % get cell spacing in x and y direction
    dy=abs(Y(2)-Y(1));  % from coordinate vectors
     
    % lighting azimuth
    azimuth = 360.0-azimuth+90; %convert to mathematic unit 
    azimuth(azimuth>=360)=azimuth-360;
    azimuth = azimuth * (pi/180); %  convert to radians
     
    %lighting altitude
    altitude = (90-altitude) * (pi/180); % convert to zenith angle in radians
     
    %% calc slope and aspect (radians)
    [fx,fy] = gradient(dem,dx,dy); % uses simple, unweighted gradient of immediate neighbours
    [asp,grad]=cart2pol(fy,fx); % convert to carthesian coordinates
    %grad = grad/d; % multiply w cellsize
    grad=atan(zf*grad); %steepest slope
    % convert asp
    asp(asp<pi)=asp(asp<pi)+(pi/2);
    asp(asp<0)=asp(asp<0)+(2*pi);
     
    %% hillshade calculation
    h = 255.0*( (cos(altitude).*cos(grad) ) + ( sin(altitude).*sin(grad).*cos(azimuth-asp)) ); % ESRIs algorithm
    h(h<0)=0; % set hillshade values to min of 0.
     
    h=setborder(h,1,NaN); % set border cells to NaN
     
    %% plot results if requested
    if plotit==1
        figure
        imagesc(X,Y,h)
        axis image
        set(gca,'ydir','normal')
        colormap(gray)
    end
     
    %% -- Subfunction--------------------------------------------------------------------------
    function grid = setborder(grid,bs,bvalue)
    grid(1:bs,:)=bvalue; %toprows
    grid(size(grid,1)-bs+1:size(grid,1),:)=bvalue; %bottom rows
    grid(:,1:bs)=bvalue; %left cols
    grid(:,size(grid,2)-bs+1:size(grid,2))=bvalue;

  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 317
    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 317
    Par défaut
    Citation Envoyé par eclesia Voir le message
    asp(asp<pi)=asp(asp<pi)+(pi/2); serait bien.
    C'est de l'indexage logique.

    Par exemple si tu souhaites faire des opérations uniquement sur les valeurs inférieures à 0.5 dans un vecteur contenant des valeurs aléatoires [0 1]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    asp = rand(1,5)
     
    asp<0.5
     
    asp(asp<0.5)
     
    asp(asp<0.5) = asp(asp<0.5) + 100
    Ce qui donne pour chaque ligne :
    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
    asp =
     
        0.8235    0.6948    0.3171    0.9502    0.0344
     
     
    ans =
     
         0     0     1     0     1
     
     
    ans =
     
        0.3171    0.0344
     
     
    asp =
     
        0.8235    0.6948  100.3171    0.9502  100.0344
    Voir la : Qu'est-ce que l'indexage logique ?

    Dans ton cas ici, la variable pi vaut pi

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Ensuite pour les fonctions, il suffit souvent de chercher dans la documentation : http://www.mathworks.com/access/help.../helpdesk.html

    Elle est assez bien fournie avec à chaque fois des exemples et les algorithmes utilisés

    Exemple : cart2pol

  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 317
    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 317
    Par défaut
    Pour la sous fonction setborder, tu devrais lire ceci : http://briot-jerome.developpez.com/m...tricesgestion/ (et plus particulièrement le chapitre III)

  5. #5
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    Merci, ca m'aide deja pas mal

    une autre question de syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [asp,grad]=cart2pol(fy,fx);
    Comment est ce que ca marche ? qu'est ce que je vais avoir dans les variables asp et grad (quel type surtout).

    Venant du monde Java je suis habitué a avoir les types des variables ecrit (string, int, double ...) et a n'avoir qu'un seul objet possible en retour d'une fonction.

  6. #6
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Citation Envoyé par eclesia Voir le message
    une autre question de syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [asp,grad]=cart2pol(fy,fx);
    Comment est ce que ca marche ? qu'est ce que je vais avoir dans les variables asp et grad (quel type surtout).
    Ben pour moi ça me semble plus naturel que java... (j'aime pas java...)

    Il te dit juste que tu auras 2 sorties nommées asp et grad.
    Le type sera déterminé par ce qui se sera passé dans la fonction cart2pol.

    En regardant l'aide ce sont des doubles a priori, enfin des nombres quoi ça ne va pas plus loin.

    Ça transforme les coordonnées cartésiennes [fy,fx] (bizarre l'ordre inversé y, x d'ailleurs, le choix des noms de variables est étrange) en coordonnées polaires avec asp l'angle en radian et grad la distance (unité : la même que fx et fy).

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    (bizarre l'ordre inversé y, x d'ailleurs, le choix des noms de variables est étrange)
    C'est généralement le cas quand on travaille sur des images

    Généralement le repère est (ligne,colonne), or l'axe des lignes est verticale, on les associent donc à l'axe des ordonnées y et l'axe des colonnes est horizontale, donc correspond à l'axe des abscisses x

    Je suis clair ?

Discussions similaires

  1. Appel de routine MATLAB depuis Java
    Par habasque dans le forum MATLAB
    Réponses: 4
    Dernier message: 24/09/2007, 18h56
  2. Matlab et Java
    Par Marcusss dans le forum MATLAB
    Réponses: 2
    Dernier message: 30/05/2007, 15h55
  3. intégration de matlab dans java
    Par Invité dans le forum Langage
    Réponses: 9
    Dernier message: 07/05/2007, 10h22
  4. Utilliser du code matlab dans Java
    Par Invité dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/05/2007, 11h36
  5. MatLab en java
    Par CNoob dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 08/02/2006, 23h56

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