Sortie de Scilab 5.5.0 !

Scilab Enterprises vient tout juste d’annoncer la sortie de Scilab 5.5.0 (Windows, Linux et Mac)

Logo Scilab 5.5.0

La construction des IHM et l’interaction avec les graphiques semblent avoir été améliorées dans cette version.

Je ne manquerai pas de tester tout ça et de faire un retour dans un prochain billet.

:arrow: Téléchargez Scilab 5.5.0

:arrow: Consultez la Release Note pour la liste de toutes les nouveautés et des corrections de bugs.

Améliorez vos développements avec le « MATLAB Style Guidelines 2.0 »

Le développeur MATLAB se limite souvent à obtenir un code fonctionnel (« qui marche »). Il cherchera ensuite parfois à optimiser ses performances. En dernier lieu, il ajoutera sans doute des tests pour améliorer la robustesse.

Par contre, la lisibilité et de la maintenabilité du code sont rarement prise en compte. Pour corriger cela, il est nécessaire d’adopter un style de programmation cohérent et pragmatique.

Le 27 mars dernier, Richard Johnson a mis à jour son document « MATLAB Style Guidelines » disponible sur le File Exchange (http://www.mathworks.com/matlabcentral/fileexchange/46056-matlab-style-guidelines-2-0).

Je vous invite fortement à le télécharger et à le lire avec attention.

En suivant ces recommandations, vos codes MATLAB gagneront en lisibilité.

D’autres sources en français sur le même thème :

MATLAB R2014a : amélioration des fonctions rot90, flipud et fliplr pour les tableaux 3D

La prise en charge de tableaux 3D par les fonctions rot90, flipud et fliplr est une des améliorations apportées par la dernière version R2014a de MATLAB. Celle-ci va rendre un service à ceux qui manipulent des images et qui ne possèdent pas l’Image Processing Toolbox.

La prise en charge des tableaux 3D va permettre de simplifier les codes pour faire pivoter une image en couleurs vraies (RGB par exemple) ou pour lui appliquer une transformation miroir.

Analysons ce changement avec l’image « ngc6543a.jpg » livrée avec toutes les versions de MATLAB :

>> I = imread('ngc6543a.jpg', 'jpg');
>> whos I
  Name        Size                 Bytes  Class    Attributes

  I         650x600x3            1170000  uint8

Avec MATLAB R2013b ou versions plus anciennes

Jusqu’à présent, il n’était pas possible d’appliquer directement les fonctions :

>> Ir = rot90(I);
Error using rot90 (line 21)
A must be a 2-D matrix.
 
>> Iflr = fliplr(I);
Error using fliplr (line 18)
X must be a 2-D matrix.
 
>> Ifud = flipud(I);
Error using flipud (line 19)
X must be a 2-D matrix.

Pour l’effet miroir avec fliplr et flipud, il est possible de travailler avec les indices :

>> Iflr = I(:,end:-1:1,:);
>> Ifud = I(end:-1:1,:,:);

Mais pour la rotation, il faut nécessairement décomposer l’image selon ses trois composantes et recomposer l’image à la fin :

>> I = imread('ngc6543a.jpg', 'jpg');
>> R = I(:,:,1);
>> G = I(:,:,2);
>> B = I(:,:,3);
>> Rr = rot90(R);
>> Gr = rot90(G);
>> Br = rot90(B);
>> Ir = cat(3, Rr, Gr, Br);
>> clear Rr Gr Br

ou plus directement :

>> I = imread('ngc6543a.jpg', 'jpg');
>> Rr = rot90(I(:,:,1));
>> Gr = rot90(I(:,:,2));
>> Br = rot90(I(:,:,3));
>> Ir = cat(3, Rr, Gr, Br);
>> clear Rr Gr Br

Tout ceci n’est pas très optimisé, nuit à la lisibilité du code et nécessite (temporairement) le double de quantité de mémoire.

Avec MATLAB R2014a

Avec les améliorations apportées par la R2014a, il suffit maintenant de faire :

>> I = imread('ngc6543a.jpg', 'jpg');
>> Ir = rot90(I);
>> Iflr = fliplr(I);
>> Ifud = flipud(I);

La lisibilité du code est clairement améliorée.

C’est nettement mieux !

Compatibilité descendante

Seul bémol, les codes développés avec la R2014a ne fonctionneront pas avec les versions plus anciennes.

Pour résoudre ce problème, vous pourrez utiliser la fonction verLessThan disponible depuis MATLAB R2007a.

Par exemple pour effectuer une rotation avec rot90 :

I = imread('ngc6543a.jpg','jpg');

if verLessThan('matlab', '8.3')
   
    Rr = rot90(I(:,:,1));
    Gr = rot90(I(:,:,2));
    Br = rot90(I(:,:,3));
    Ir = cat(3, Rr, Gr, Br);
   
    clear Rr Gr Br
   
else
   
    Ir = rot90(I);
   
end

Conclusion

La prise en charge des tableaux 3D par les fonctions rot90, fliplr et flipud était attendue de longue date. C’est chose faite.

Il faudra néanmoins prendre en compte la compatibilité descendante si vous comptez diffuser vos codes à des utilisateurs qui n’auraient pas encore migré vers la R2014a.