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

C Discussion :

Redimensionner image en langage C [DICOM]


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut Redimensionner image en langage C [DICOM]
    Bonjour a tous !

    j'ai besoin d'une aide pour cette question comme toujours je travaille en C sous devc++ sans bibliothéque
    je posséde une image de taille 512*512(CT) et une autre 128*128(TEP)
    Il me faut fusionner ces images mais avant cela il me faut arriver a dimensionner l'image 128*128(TEP) en 512*512 pour que la fusion ce fasse parfaitement
    je compte alors faire un programme qui suivent ces parametres :
    Fusion(i,j)(512*512)
    CT(512) (i1,j1)->(i1=i,j1=j)
    TEP(128) (i2,j2)->(i2=i/4,j2=j/4)

    Quel sont les fonctions a utilisé,comment arriver a retranscrire ces paramétres en langage C ?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Salut

    Déjà tu es en train de réinventer la roue car il existe un tas de librairies de manipulation d'images (comme gd)
    En plus tu parles d'une image comme d'un rectangle mais c'est pas tout à fait ça. Une image ça a un format, un en-tête, un codage. Le tiff c'est pas du jpeg et le jpeg c'est pas du bmp. Te faut impérativement savoir ce que tu manipules pour le manipuler. Tu n'irais pas ouvrir un .doc avec excel et un .pdf avec word ; ben là c'est pareil...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut Redimensionnement
    Bonjour ,

    J'ai une question j'ai compris quel déroulement je devai arriver a faire pour avoir mon image redimensionner

    -Je doit dans un premier temps crée une image vide de 512*512

    -Puis lire mon image 128*128 pour lire les pixels un à un

    -Pour chaque pixels de mon image 128*128 je multiplie par 4 les pixels pour les inserer dans l'image crée 512*512

    Le probléme c'est que je c'est pas quelle fonction utilisé pour crée une image vide et encore moin pour copier des pixels d'une image vers une autre

    Merci d'avance

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    En supposant que ton algorithme soit aussi trivial que ca, et que ton format d'image n'ait pas d'en-tete (ce qui serait tout de meme tres surprenant), alors c'est tres simple :
    • ton fichier image est un fichier, que tu peux ouvrir avec fopen
    • Ensuite, tu parcours ton fichier de 128*128 (fread par exemple), et pour chaque point lu, tu l'ecris 4 fois (fwrite).
    • tu fermes ton fichier avec fclose.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut Redimensionnement
    Merci gangsoleil

    j'ai quelques petites questions pour redimensionner mon image je doit bien crée une image vide ou ce n'est pas la peine ? et si il le faut je fais comment pour la crée ?

    et la 2éme questions c'est pour pour lire mon fichier 128*128 comment je fait pour lui dire que pour chaque point lu il doit le multiplier par 4 ?

    Et si il faut bien une image vide il me faut une fonction qui me permette d'inserer ces pixels *4 a l'intérieur

    merci d'avance

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Quel est le format de ton image ? JPG ? TIFF ? PNG ? EPS ? ......

    Une fois que tu auras le format de ton image, tu pourras trouver les caracteristiques de ce format, qui t'indiqueront comment est code un pixel d'image.
    Ensuite, il faut que tu ecrives l'algorithme qui te permettra de dupliquer ces points.

    Par exemple (mais ce n'est pas un vrai format de fichier que je montre ici) :
    Ton format de fichier precise que l'encodage du fichier est le suivant : 4 octets pour la largeur de l'image, puis 4 pour la hauteur, et ensuite chaque point est code sur 3 octets.
    Dans ce cas, tu vas devoir creer un nouveau fichier dans lequel tu mettras d'abord la largeur de ta nouvelle image (512), puis sa hauteur (512 aussi), puis tu devras lire les octets 3 par 3, et les ecrire 4 fois.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut
    Ok je t'avout que j'ai pas tout compris mais moi je travaille sur cette exemple :

    http://scinti.etud.univ-montp1.fr/fi...rogramme-C.pdf

    j'ai suprimé le filtrage et a partire de ce code j'essaye d'arriver a redimensionner mon image !

    Short int *dicom ; //pointeur sur le fichier image dicom complet, avec ses entetes, sur 2 octets

  8. #8
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Je ne vois nulle part dans le code le besoin de suréchantillonner (zoomer d'un facteur 4) l'image. Ce n'est pas plutôt l'image résultat (après application du filtre) qu'on te demande d'écrire (il y a même un commentaire qui l'indique). Bref : c'est quoi le problème ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut
    Non enfaite j'utilise code pour ouvrire une image dicom
    le code qui et présenter pour réaliser un filtrage ne m'interesse pas .

    Moi je doit a terme fusionner 2 images mais avant cela je doit redimensionner une image de taille 128*128 en 512*512 !

  10. #10
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Déjà, ça ne m'a pas l'air d'être un format d'image très courant (voire carrément du "local"). Donc on peut oublier, dans ce cas, la proposition judicieuse de Sve@r.

    Le code fourni dans le pdf ne te donne pas trop d'infos (pas du tout même) sur le format de l'entête. Dans l'exemple, seules les radiométries ("couleurs") des pixels changent et, à la fin, l'entête, dans sa globalité est recopiée dans la nouvelle image (rien n'a changé si ce n'est les "couleurs" des pixels).

    Pour créer une image de taille différente, tu vas avoir quelques problèmes (je suppose que les nombres de lignes et de colonnes sont présents dans l'entête) sauf à "deviner" l'entête sur un exemple, si elle n'est pas trop tarabiscotée.

    D'un autre côté, le programme demande à l'utilisateur de rentrer la taille (le côté) de l'image ??? Alors entête avec taille ou pas ? ou programme "balot" ? Image dicom forcément carrée ?

    Par contre on sait que les images "dicom" ne sont pas des images "couleur" (pas de triplet R,G,B) et que chaque pixel est codé sur 2 octets (short)


    Sinon, pour tes question concernant la création d'une nouvelle image, ben tout a l'air de se faire à la mano. C'est de l'allocation dynamique pure et dure (voir, dans l'exemple, l'allocation du "tampon" en tout début de la 2nde page

    Pour une image zoomée d'un facteur 4, tu aurais un équivalent avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tampon = (short *)malloc(16*cote2*sizeof(short))

    à toi de remplir correctement les éléments.

    Mais restera le problème de l'entête !

    Enfin, ce que tu veux faire c'est un zoom 4 en "PPV" (plus proche voisin). C'est bien ce que tu veux obtenir pour, ensuite faire une "fusion" ? Le PPV, c'est simple mais, comment dire, c'est du brutal ! Est-ce suffisant dans ton cas ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut
    Merci pour cette réponse détaillée !

    Tu me dit : à toi de remplir correctement les éléments.
    ces éléments pour étre sur ce sera les fwrite fread ...)

    Je connaissais pas le ppv mais c'est ce que je veut faire oui ^^
    Si tu connais un peu ça m'interesserais !

    Enfaite tout ce que je c'est sur l'entete dicom c'est que pour trouver la taille de cette entete il faut faire:

    la taille du fichier dicom - (512*512*2 octets)

    si c'est une image de 512!

    merci beaucoup en tous cas !

  12. #12
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ces éléments pour étre sur ce sera les fwrite fread
    L'écriture de l'image zoomée peut effectivement (se fera surement) via des fwrite mais la difficulté ne réside pas là. Il faut surtout écrire chaque pixel de l'image en entrée 4 fois en colonnes et 4 fois en lignes.

    Le mieux c'est de traiter ton image en entrée ligne par ligne.

    En remplaçant chaque valeur de pixel par un caractère pour que ce soit visuel :

    soit une ligne en entrée "abcde"
    tu dois créer une ligne 4 fois plus longue contenant "aaaabbbbccccddddeeee" et l'écrire 4 fois.

    Après, c'est une sordide histoire d'offsets et d'indices dans les buffers d'entrée (dicom + entete + ...) et de sortie (la ligne 4 fois plus grance), du style :

    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
     
     
        short *ligne_en_sortie = (short *)malloc(4*cote*sizeof(short));
        /* je passe les déclarations de compteurs évidentes ! */
        ...
        for (l=0;l<cote;l++)
        {
            /* decalage buffer entree pour ligne courante */
            int offset_entree = entete + l * cote;
            for (c=0;c<cote;c++)
                for (i=0;i<4;i++)
                    ligne_en_sortie[c*4+i] = dicom[offset_entree+c];
     
            for (i=0;i<4;i++)
                fwrite(ligne_en_sortie,4*cote,sizeof(short),fpout);
        }
    Après, pour l'entête, les seules indications que tu as sont maigres : on connait sa taille ... ouais ... sans plus d'info, tu buteras toujours là dessus.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut
    Merci beaucoup !!!

    Pour l'entête si je dit qu'il commence la reconversion des pixels après l'entête ça devrai aller non ?

    du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(option==0) fread(dicom-entete,taille,sizeof(short int),fichier);

  14. #14
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Pour l'entête si je dit qu'il commence la reconversion des pixels après l'entête ça devrai aller non ?
    Je ne décode pas !

    et le "fread(dicom-entete,...)" me fait peur : c'est supposé faire quoi ? dicom-entete est une adresse qui ne correspond pas à la zone allouée lors du chargement de l'image

    Si tu n'es pas à l'aise avec les offsets, les indices dans les buffers, je pense que tu vas au casse-pipe ! revoir les bases ? ...

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut
    En faite ça doit lire l'image dicom en passant l'entête

    puisque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //cote -> taille de l'image en pixels par cote
    //taille -> taille du fichier image dicom
    //dicom -> pointeur sur le fichier image dicom complet, avec ses entêtes, sur 2 //octets
    //entete -> entier contenant le nombre de mots dans l'entete dicom
     
    entete = taille - cote*cote
    if(option==0) fread(dicom-entete,taille,sizeof(short int),fichier);

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut
    Salut,

    Dans ton code tu mais
    mais a quoi correspond ce "C" en faite ?
    merci d'avance
    et tu a rasion je vais revoir les offsets, les indices dans les buffers !

  17. #17
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Dans les deux boucles imbriquées, l est le compteur de lignes, c celui des colonnes. Les boucles for avec i comme compteur ne servent qu'à appliquer le facteur de zoom (4 ici) : la première boucle pour écrire 4 fois le même pixel dans une même ligne, la seconde boucle pour écrire 4 fois la même ligne.

  18. #18
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    Je viens de m'apercevoir que les images "dicom" ne sont pas, comme je le supposais (mais personne ne m'a détrompé), des images ayant un format très "local" mais des images utilisées dans le domaine médical et dont le format (et l'entête) sont à priori clairement spécifiés.

    Toutes les réponses que j'ai fournies étaient, du coup, faites dans ce contexte : format pas "standard" mais plutôt à "deviner" en fonction du source fourni dans le pdf. Même si je ne renie pas le détail des réponses, je ne suis pas sur que l'approche utilisée (attaquer l'image comme un "vulgaire" fichier) soit la plus pertinente ...

  19. #19
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par plxpy Voir le message
    Bonjour

    Je viens de m'apercevoir que les images "dicom" ne sont pas, comme je le supposais (mais personne ne m'a détrompé), des images ayant un format très "local" mais des images utilisées dans le domaine médical et dont le format (et l'entête) sont à priori clairement spécifiés.

    Toutes les réponses que j'ai fournies étaient, du coup, faites dans ce contexte : format pas "standard" mais plutôt à "deviner" en fonction du source fourni dans le pdf. Même si je ne renie pas le détail des réponses, je ne suis pas sur que l'approche utilisée (attaquer l'image comme un "vulgaire" fichier) soit la plus pertinente ...
    Bah, si le format (bien que "spécial") est déjà clairement défini, peut-être que les fonctions de manipulation existent déjà...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  20. #20
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bah, si le format (bien que "spécial") est déjà clairement défini, peut-être que les fonctions de manipulation existent déjà...
    exactement ! d'où mon petit rectificatif

Discussions similaires

  1. Redimensionnement de beaucoup d'images : Quel langage choisir ?
    Par thenaoh dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 11/02/2010, 19h45
  2. Redimensionner image avant de la charger
    Par nou366 dans le forum Delphi
    Réponses: 2
    Dernier message: 11/05/2006, 13h05
  3. Redimensionner image dans MDI
    Par DEFITOP dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 10/05/2006, 20h02
  4. [MFC - GDI] Redimensionnement Image
    Par Ben A. dans le forum MFC
    Réponses: 3
    Dernier message: 02/02/2006, 11h54
  5. Traitement d'images : quel langage?
    Par belasri dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/10/2005, 09h59

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