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 :

Ca c'est la classe (numérique).


Sujet :

MATLAB

  1. #1
    Membre expert
    Avatar de Clotho
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2011
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 524
    Points : 3 383
    Points
    3 383
    Par défaut Ca c'est la classe (numérique).
    Hello,

    mon problème est relativement simple, et doit sans doute découler de mes connaissances parcellaires du monde du code (ce monde étrange plein de tentacules visqueux, de gens méchants, et de lignes de texte ressemblant à des insultes lues à voix haute).

    Je suis en train de bosser avec Matlab sur du traitement d'image, et vu que j'ai pas encore réussi à résoudre tous mes problèmes, j'ai pris le sujet d'un autre coté. à savoir plutot que de faire un code simple et fonctionnel au lieu de mon "machin" qui nécessiterait un serveur Cray pour tourner, j'incrimine Matlab, qui me fait des matrices d'entrée en format "Single" là ou de "l'int 16" suffirait, a priori, ce qui double ma quantité de mémoire vive nécessaire à l'éxecution.

    Modifier la taille des données, j'y arrive à peu près, mais j'aurais besoin d'un renseignement sur le fond: où est-il préférable de l'introduire? Schématiquement j'ai quelque chose ressemblant à:

    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
    load entree %typiquement un film, de 12 bits en noir et blanc
    boucles=size(entrée,1)*0.1;
    sortie_reduite=cell(1,boucles); %préalloc
     
    For i=1:boucles
    image_interessante=entree(:,:,i);
    [...]
    des lignes de codes avec des +, des -, des *, bref des maths compliquées
    [...]
    image_traitee=*résultat des actions précédentes*
    video_retaillee{i}=image_traitee;
     
    end
     
    sortie_reduite=cat(3,video_retaillee{1,:}); %pour pouvoir le lire comme un film
    sortie16=int16(sortie_reduite);
    Voilà grosso modo à quoi ca ressemble (pour ceux qui lisent pas le code et le copient/collent dans Matlab, je crains que ce que j'ai inscrit ci dessus ne tourne pas ).

    Le fond du code est pas intéressant en soi, c'est plutot une question sur la forme.

    Le passage de Single a int16 est effectué en fin de code, alors qu'il me semblerait plus optimisé de le faire en début (moins de place en mémoire, moins d'octet à considérer pour les calculs, etc...)

    Si je détemine le type de ma sortie lors de la préalloc, c'est écrasé quand j'y introduis les données du tableau de cellules.
    Comment puis-je faire pour que le type int16 soit pris définitivement en compte, et ce le plus tot possible dans mon code?

    Merci d'avance.
    Un message vous a aidé? Votez pour moi! J'aime qu'on me dise qu'on m'aime.

    Si la question a obtenu sa réponse, passez le sujet en résolu.

    "Citer les pensées des autres, c'est regretter de ne pas les avoir trouvées soi-même" S.Guitry

  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 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par Clotho Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    load entree %typiquement un film, de 12 bits en noir et blanc
    Je dirais plutôt "12bits en niveaux de gris" parce que "12 bits en noir et blanc", ben ça fait 11 bits en trop pour stocker l'information (0 ou 1)

    Comment as-tu obtenu les données contenue dans le fichier en entrée ?
    Comment as-tu enregistré ce fichier ?

    Comment sont caractérisées les valeurs dans le fichier d'entrée (quel ensemble, quelle plage de valeurs) ?

    Les opérations mathématiques que tu effectues dans la boucle sont-elles compatibles avec les classes contenant des entiers (problèmes d'arrondis, de dépassement de capacité...) ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre expert
    Avatar de Clotho
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2011
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 524
    Points : 3 383
    Points
    3 383
    Par défaut
    Oui, pardon 12 bits, du noir au blanc. Dans la boite on a beaucoup de gens ayant connu l'informatique à l'époque des cartes a trous et qui trouvent que "3 fois 4 bits c'est moche", c'était par opposition à la couleur.

    Le fichier d'entrée est généré à l'aide de Simulink, qui pilote 4 caméra ethernet, concatène les images et me sort un (très très) gros fichier .mat sans compression. Donc avec des valeurs entières sur chaque pixel comprises entre 0 et 4095.

    L'enregistrement c'est le bloc To Workspace (ou " To File )

    J'ai laissé les options des blocs simulink par défaut, car je pourrai être amené dans le cadre d'autres manips et d'un autre code, a travailler avec du 24 bits couleur.

    La suite d'opérations dans la boucle sont des calculs simples, uniquement avec des valeurs entières et/ou des booléens, pour des valeurs finales entières comprises entre 0 et 4095.

    J'ai comparé le résultat de la somme des valeurs dex pixels de sortie en Double, Single et Int 16 pour voir les erreurs d'arrondis, et j'obtiens un test d'égalité de 1, donc je suppose que j'ai exactement les mêmes chiffres point par point, ce qui ne serait pas le cas ave des soucis d'arrondis.

    Je n'ai pas compris ta question

    Comment sont caractérisées les valeurs dans le fichier d'entrée (quel ensemble, quelle plage de valeurs) ?
    Un message vous a aidé? Votez pour moi! J'aime qu'on me dise qu'on m'aime.

    Si la question a obtenu sa réponse, passez le sujet en résolu.

    "Citer les pensées des autres, c'est regretter de ne pas les avoir trouvées soi-même" S.Guitry

  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 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par Clotho Voir le message
    Le fichier d'entrée est généré à l'aide de Simulink, qui pilote 4 caméra ethernet, concatène les images et me sort un (très très) gros fichier .mat sans compression. Donc avec des valeurs entières sur chaque pixel comprises entre 0 et 4095.
    Ne connaissant pas Simulink je vais peut être dire une bêtise mais ne faudrait-il pas quand même prendre en compte la classe (ici uint16) avant l'exportation du fichier mat (ce qui en réduirait d'ailleurs la taille).

    Citation Envoyé par Clotho Voir le message
    La suite d'opérations dans la boucle sont des calculs simples, uniquement avec des valeurs entières et/ou des booléens, pour des valeurs finales entières comprises entre 0 et 4095.
    Dans ce cas, convertit les données juste après les avoir importées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    load entree
     
    entree = uint16(entree);
    Citation Envoyé par Clotho Voir le message
    Je n'ai pas compris ta question
    Tu as pourtant su donner la réponse dans ton message (voir la citation de ton message juste au dessus)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre expert
    Avatar de Clotho
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2011
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 524
    Points : 3 383
    Points
    3 383
    Par défaut
    Citation Envoyé par Dut Voir le message
    Ne connaissant pas Simulink je vais peut être dire une bêtise mais ne faudrait-il pas quand même prendre en compte la classe (ici uint16) avant l'exportation du fichier mat (ce qui en réduirait d'ailleurs la taille).
    Le format de base c'est le Double dans Simulink, mais si je lui mets un filtre de conversion en Single, ou Int 16 j'ai d'énormes pertes de performances, Or, à ce stade j'ai besoin de la totalité des capacités du PC (ca j'y suis pour rien, pa de code fait avec les pieds ni rien, mais les caméras qui sortent un débit élevé ca charge beaucoup le PC).

    Dans ce cas, convertit les données juste après les avoir importées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    load entree
     
    entree = uint16(entree);
    Oki, je convertirai ma vidéo en entrée dans Matlab, et a priori le reste devrait hériter ce format de nombre.
    Tu as pourtant su donner la réponse dans ton message (voir la citation de ton message juste au dessus)
    Vieille technique de Sioux dite du nuage de fumée, ou du tir de barrage: dans le doute tu réponds a tout ce qui a été demandé ou pas, ca donnera l'impression que tu as compris, et peut y avoir la réponse dedans. ca a marché.
    Un message vous a aidé? Votez pour moi! J'aime qu'on me dise qu'on m'aime.

    Si la question a obtenu sa réponse, passez le sujet en résolu.

    "Citer les pensées des autres, c'est regretter de ne pas les avoir trouvées soi-même" S.Guitry

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

Discussions similaires

  1. "resolves to a package" mais c'est une classe !
    Par Invité dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 18/04/2008, 11h50
  2. [PL/SQL] Tester si valeur est de type numérique
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 3
    Dernier message: 23/10/2006, 15h54
  3. WxWidget est-il classe
    Par black.out dans le forum wxWidgets
    Réponses: 1
    Dernier message: 22/07/2006, 07h59
  4. <input CLASS= qu'est ce class dans un formulaire?
    Par jamesleouf dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 31/08/2005, 12h36

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