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

Images Discussion :

traitement image bmp [Débutant]


Sujet :

Images

  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Par défaut traitement image bmp
    Bonjour, je développe un programme sur la compression de l'image sous Matlab en suivant les étapes suivantes :
    1- conversion RVB->YCbCr;
    2- downsample;
    3- passage par une matrice de transformation(ma touche parsonnelle);
    4- quantification;
    5- codages RLE et Huffman.
    Le problème qui se pose actuellement est le suivant:"J'ai récuperé mes images de chrominance rouge et chrominance bleu issues de l'étape1 que j'ai fait passer pour l'étape2, j'obtiens certes un résultat mais l'image affichée est toute blanche, on ne remarque plus aucun niveau de gris"
    Je voudrais donc savoir si cela est normal ? si non, que dois-je faire pour que l'image s'affiche ?
    Aidez moi svp!!!

    voici mon programme:

    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
    function chrominence_bleu2_Callback(hObject, eventdata, handles)
    global res;
    [m,n,p]=size(res);
    for i=1:m
        for j=1:n
            B(i,j)=res(i,j,2);
        end
    end
    figure(1), imshow(B);
    Be= blocksof16(B,m,n,p);
    figure(2),imshow(Be);
    bdwn = downsample(Be);
    [m1,n1,p1]=size(bdwn);
    for i=1:m1
        for j=1:n1
            if bdwn(i,j)~=0
               BL(i,j)=bdwn(i,j);
            end
        end
    end
    [m1,n1,p1]=size(BL);
    for i=m1+1:m
        for j=1:n
            BL(i,j)=128;
        end
    end
    for i=1:m
        for j=n1+1:n
            BL(i,j)=128;
        end
    end
    figure(3),imshow(BL);
     
    set(handles.axes9,'visible','on');
    axes(handles.axes9);
    imshow(bdwn);
    imwrite(bdwn,'totob','bmp');
    imwrite(res,'Toto4','bmp');
    axis off;
    info9 =imfinfo('totob');
    size9 =fix(info9.FileSize/1024);
    %set(handles.format,'String',info.Format);
    set(handles.capacite9,'String',size9);
    voici le programme du downsample

    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
    function matrice = downsample(m)
    [q,n,p] = size(m);
    res = [];
    ligne=1;
    col =1;
    for i=1:2:q-1
        for j=1:2:n-1
            moy = 0;
            for l=i:i+1
                for k = j:j+1
                   moy=moy+(m(l,k)/4);
                end
            end
            res(ligne,col)=round(moy);
            col = col+1;
        end
        ligne = ligne+1;
        col = 1;
    end
    matrice = res;
    end
    programme de decoupage de la matrice en block de 16

    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
    function matrice = blocksof16(m,p,q,r)
     
    if p<16
        r1=16;
    else
        r1 = mod(p,16);
        if r1~=0
            r1 = 16*(fix(p/16)+1);
        end
    end
    if q<16
        r2 = 16;
    else
        r2 = mod(q,16);
        if r2~=0
            r2=16*(fix(q/16)+1);
        end
    end
    for i=p+1:r1
        for j=1:r2
            m(i,j)=0;
        end
    end
    for i=1:r1
        for j=q+1:r2
            m(i,j)=0;
        end
    end
    matrice = m;
    end
    Merci d'avance pour votre aide !!!!

  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
    C'est certainement un problème de conversion de classe fait implicitement par MATLAB...

    Vérifie que si tes données initiales sont en classe entières non signée (uintX) et si les données finales ne sont pas en classe Double avec la fonction CLASS

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Par défaut traitement des images sous matlab
    Bonjour Dut,

    J'ai effectué la verification que tu m'a demandé et voici les resultats:
    -En entrée, mes données initiales sont en classe entiere non signée "uint8"
    -En sortie, mes données finales sont en classe "double"
    A présent, je souhaiterai avoir des eclaircissement sur cette difference de classe et quel impact cela a pour l'affichage de mon image et surtout comment y remedier?

    Merci encore pour cette aide

  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
    C'est écrit dans le paragraphe Class Support de la documentation de la fonction IMWRITE :

    If the input array is of class double, and the image is a grayscale or RGB color image, imwrite assumes the dynamic range is [0,1] and automatically scales the data by 255 before writing it to the file as 8-bit values.
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    X = uint8(rand(200)*255);
    Xd = double(X);
     
    imwrite(X,'test_uint8.bmp','bmp');
    imwrite(Xd,'test_double.bmp','bmp');
    imwrite(X*255,'test_uint8_x255.bmp','bmp');
    imwrite(uint8(Xd),'test_double_uint8.bmp','bmp');

  5. #5
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Par défaut Traitement_image_reponse_finale
    Salut Dut,
    J'ai essayé le code que tu m'a proposé et j'ai été satisfait, ça marche!!! et mon image s'affiche correctement avec une capacité reduite tel que je l'ai souhaité.
    Encore une fois merci
    t'es un véritable génie.

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

Discussions similaires

  1. traitement d'image BMP en C++
    Par HH.HalimK dans le forum C++
    Réponses: 6
    Dernier message: 30/12/2012, 02h40
  2. Traitement d'image BMP
    Par Hitonari dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/05/2008, 23h36
  3. Matrice de filtrage ?
    Par gimlithedwarf dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/08/2002, 09h44
  4. Impression d'image bmp
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2002, 09h38
  5. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

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