Bonjour,
Tout d'abord merci de lire ce message je sais que c'est mal de poser des questions sans se présenter mais là j'ai vraiment besoin d'aide !
J'ai suis actuellement sur un projet où il faut que je seuil une image en format .raw et le réécrive dans ce format-là.
Le fichier Raw est une acquisition constituée de plusieurs images (dans mon cas 238) et c'est le problème.
Ma question est comment je peux faire pour dans une boucle ouvrir chaque image séparément, faire un seuillage et l'enregister dans un fichier Raw qui aura les mêmes caractéristiques que mon image initiale tout ça en C tout ça avec la fonction fopen.
Ps : Quand j'affiche l'header (fichier en .mhd) voilà ce qu'il me donne "Dim Sise 512 512 138". C'est donc un ensemble de 238 images chacun de 512 par 512 pixels que j'arrive très bien à visualiser avec imageJ.
Merci encore pour vos futures réponses ou aide
Cordialement
Voici le code que j'ai fait pour l'instant (il fonctionne avec une image raw n'ayant que 1 image)
Code pour ouvrir l'image :
Le code pour écrire le fichier raw
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 void LireImageRAW(unsigned char** imageRaw, int height, int width) { FILE * fic_image; int i, j; fic_image = fopen("/home/elric/Documents/Images patient/Bernicot.raw","rb"); if (fic_image == NULL) { printf("Erreur a l'ouverture de l'image\n"); exit(0); } else printf("Image ouverte avec succes\n"); for(i=0;i<height;i++) for(j=0;j<width;j++) fread(&imageRaw[i][j],1,1,fic_image); fclose(fic_image); }
Le code pour le seuillage
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 void EcrireImageRAW(unsigned char** imageRaw, int height, int width) { FILE * fic_image; int i, j; fic_image = fopen("/home/elric/Documents/test image-ouverture/Bernicot+seuil.raw","wb"); if (fic_image == NULL) { printf("Erreur a la creation de l'image ...\n"); exit(0); } else printf("Image cree avec succes ...\n"); for(i=0;i<height;i++) for(j=0;j<width;j++) fwrite(&imageRaw[i][j],1,1,fic_image); fclose(fic_image); }
et enfin le main
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 void SeuilImageRAW(unsigned char** imageRaw, int height, int width, int seuil) { int i, j; for(i=0;i<height;i++){ for(j=0;j<width;j++) { if (imageRaw[i][j] < seuil) imageRaw[i][j] = 0; else imageRaw[i][j] = 255; } } printf("i vaut %d",i); printf("j vaut %d\n",j); }
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 int height,width; height=width=512; unsigned char ** imageRaw; int seuil; imageRaw = allocation(height,width); if (imageRaw != NULL) { LireImageRAW(imageRaw,height,width); printf("Seuil a appliquer : \n"); scanf("%d",&seuil); SeuilImageRAW(imageRaw,height,width,seuil); EcrireImageRAW(imageRaw,height,width); desallocation(imageRaw,height); } else { printf("Erreur lors de l'allocation memoire! Sortie du programme.\n"); return 1; }
Partager