Voir les messages sans réponses | Voir les sujets actifs Nous sommes le 21 Juil 2018, 15:40



Répondre au sujet  [ 8 messages ] 
probleme de fichier TIIF trop volumineux 
Auteur Message
P'tit timide
P'tit timide

Inscription: 19 Juil 2006, 14:30
Messages: 3
Répondre en citant le message
Message probleme de fichier TIIF trop volumineux
Bonjour
J'ai un gros probleme: je doit lire un fichier tiff qui contient une image satellite soit 450 mo (20600x20600 pixels)
J'ai essayé un premier programme mais ca ne marche pas le fichier est trop gros . ce programme lit bien les petits fichiers tiff mais la j'ai aucun resultat

Je veux juste pouvoir reccuperer les valeurs des pixels de l'image et les mettre dans un vecteur ou une matrice. Si quelq'un a une idée ??

Code:
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include "Matrice.h"
#include"..\tiff-3.8.2\libtiff\tiffio.h"
using namespace std;

int main()
{
   char *nom="OR.tif";
   uint32 w,h;
   TIFF *image;
   tsize_t stripSize;
   unsigned long imageOffset, result;
   int stripMax, stripCount;
   unsigned char *buffer;
   double *dest;
   unsigned long  MemoireTaille;
   uint32 i,n=1;

   // Open the TIFF image
   image = TIFFOpen(nom, "r");

   //Donne largeur et hauteur de l'image
   TIFFGetField(image, TIFFTAG_IMAGEWIDTH, &w);
   TIFFGetField(image, TIFFTAG_IMAGELENGTH, &h);

   stripSize = TIFFStripSize (image);
   stripMax = TIFFNumberOfStrips (image);
   imageOffset = 0;
   
   MemoireTaille = stripMax * stripSize;
   unsigned long t = MemoireTaille*sizeof(unsigned char);
   buffer = new unsigned char[t];
   for (stripCount = 0; stripCount < stripMax; stripCount++)
   {
      result = TIFFReadRawStrip (image, stripCount, buffer + imageOffset, stripSize);
      imageOffset += result;
   }
   unsigned long t2= MemoireTaille*sizeof(double);
   

             dest = new double[t2];
      
   for(i=0;i<MemoireTaille;i++)
      dest[i]=(double)buffer[i];



   TIFFClose(image);
   free(buffer);



   cout<<"nombre de colonnes: "<<h<<endl;
   cout<<"nombre de lignes: "<<w<<endl;
   system("pause");
return 0;
}
:? :? :?


19 Juil 2006, 14:33
Profil
Que quelqu'un le fasse taire!
Que quelqu'un le fasse taire!

Inscription: 27 Déc 2004, 01:57
Messages: 901
Localisation: Brest, Dijon
Répondre en citant le message
Message 
Salut et bienvenue chez nous,

« (20600x20600 pixels) », comme tu dis, ça fait 450 Mo. Et pour adresser tant de mémoire d'un coup, ça fait vraiment énorme. Pour quel type d'opérations as-tu besoin de récupérer les valeurs des pixels sous forme de matrice ? En fonction du type, tu dois pouvoir travailler par carreau dans ton image, par exemple 100x100, ce qui ne pose normalement aucun problème au niveau de la mémoire à réserver. @ bientôt.


19 Juil 2006, 15:04
Profil Site Internet
Moulin à paroles
Moulin à paroles

Inscription: 07 Sep 2005, 18:18
Messages: 464
Localisation: marseille
Répondre en citant le message
Message 
Code:
   unsigned long t = MemoireTaille*sizeof(unsigned char);
   buffer = new unsigned char[t];
   for (stripCount = 0; stripCount < stripMax; stripCount++)
   {
      result = TIFFReadRawStrip (image, stripCount, buffer + imageOffset, stripSize);
      imageOffset += result;
   }
   unsigned long t2= MemoireTaille*sizeof(double);
   dest = new double[t2];
     
   for(i=0;i<MemoireTaille;i++)
      dest[i]=(double)buffer[i];


OMG...

déjà aussi bien
Code:
unsigned long t = MemoireTaille*sizeof(unsigned char);
   buffer = new unsigned char[t];

que
Code:
unsigned long t2= MemoireTaille*sizeof(double);
   dest = new double[t2];

sont faux;
c'est:
Code:
 
buffer = new unsigned char[MemoireTaille];

et
Code:
 
dest = new double[MemoireTaille];


Ensuite.
Code:
for(i=0;i<MemoireTaille;i++)
      dest[i]=(double)buffer[i];

la conversion ne se fait pas toute seule...
le unsigned char est codé sur 8 octets: de 0x00 à 0xFF
tu as 3 à 4 valeurs unsigned char à chaque pixel. (rouge vert bleu eventuellement alpha)
ca te donne un double qui les regroupe.

ca fait aussi qu'au début peut étre que c'etait
buffer = new unsigned char[MemoireTaille*3 ou 4];

donc tu dois revoir les specs du tiff et tout le tralala avec google.

_________________
-Merci de modifier le titre de votre sujet en y ajoutant [Résolu] ou [Terminé] lorsque vous avez la réponse à vos questions.
-Le langage SMS est fortement réprouvé et sera durement réprimé


19 Juil 2006, 15:10
Profil
P'tit timide
P'tit timide

Inscription: 19 Juil 2006, 14:30
Messages: 3
Répondre en citant le message
Message KiBi
merci d'avoir répondu..
en fait je fait du traitement d'image j'ai deja fait un premier programme sous MATLAB qui marche effectivement avec des découpe de tuile dans l'image. seulement le but est de detourer des lacs dans les images avec les contours actifs ce qui utilise toutes les opérations matrice vecteurs... pour certain lacs (fleuves) il prenne toute l'image et dans beaucoup de cas il m'est plus avantageux de travailler sur toute l'image. Sinon beaucoup de cas seront intraitable enfin pas en 6 mois en tout cas

je dois maintenant recoder mon programme en c++ ou c mais je dois commencer par lire une image satellite et la ca bugggggg!!
MATLAB arrive a stocker l'image dans une matrice. ca devrait pouvoir se faire en c++ non ?


19 Juil 2006, 15:45
Profil
Que quelqu'un le fasse taire!
Que quelqu'un le fasse taire!

Inscription: 27 Déc 2004, 01:57
Messages: 901
Localisation: Brest, Dijon
Répondre en citant le message
Message 
MATLAB doit travailler à coup de cache, en fonction des données sur lesquelles tu travailles. C'est implémentable en C ou C++, mais ça demande un peu de travail (parce qu'allouer 450 Mo d'un coup, c'est assez irréaliste).


19 Juil 2006, 15:48
Profil Site Internet
Moulin à paroles
Moulin à paroles

Inscription: 07 Sep 2005, 18:18
Messages: 464
Localisation: marseille
Répondre en citant le message
Message 
tu veux stocker les pixels entiers ou les vals RGB(A) ?

_________________
-Merci de modifier le titre de votre sujet en y ajoutant [Résolu] ou [Terminé] lorsque vous avez la réponse à vos questions.
-Le langage SMS est fortement réprouvé et sera durement réprimé


19 Juil 2006, 15:48
Profil
P'tit timide
P'tit timide

Inscription: 19 Juil 2006, 14:30
Messages: 3
Répondre en citant le message
Message kibi
mais images sont en niveaux de gris.


19 Juil 2006, 15:51
Profil
Nouveau venu
Nouveau venu

Inscription: 05 Sep 2006, 15:09
Messages: 1
Répondre en citant le message
Message 
moi j'ai essayé matlab mais le probleme avec lu c'est qu'il ne gere pas la memoire, un 450 mo c'est trop gros pour lui , je conseille plutot c++

_________________
liste annuaires


05 Sep 2006, 15:43
Profil Site Internet
Afficher les messages postés depuis:  Trier par  
Répondre au sujet   [ 8 messages ] 

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Forum style by ST Software for PTF.
Traduction par: phpBB-fr.com