Je travaille avec des images TIF extrêmement importantes que je mesure dans une image unique. J'ai une bibliothèque créée par une collègue de mine qui génère la pyramide d'image et fournit un outil très pratique pour visualiser la pyramide d'image. Ce visualiseur est idéal pour prendre un pic à l'image importante et identifier visuellement les points d'intérêt, mais les clients sont plus intéressés par l'analyse d'image sur ces grandes images.
Ainsi, il est nécessaire d'exporter la très grande image en un seul déposer. Je trouve que cela devrait être gênant envisager ces images peut être de 800 Mo à plusieurs gbs de taille. Et juste la tâche de chargement de cette image unique à la mémoire est difficile, en particulier lorsque l'analyse de l'image est terminée. P>
Je me demandais, s'il était possible en Java d'écrire cette image de TIFF dans un bloc ou une ligne -by-ligne mode. Actuellement, mon application est à court de mémoire sur de petites machines (8 Go de RAM). p>
La méthode actuelle de composition de ces images est la suivante: p>
stocke les valeurs de pixels dans un puis écrivez l'image tamponnée sur le disque. Pour cette partie, j'utilise bufferedimage code> à l'aide d'un
WritaBeraster code> p>
// BufferedImage image; from above
...
ImagePlus img = new ImagePlus();
img.setImage(image);
FileSaver fs = new FileSaver(img);
fs.saveAsTiff(file.getAbsolutePath());
imagej code> pour écrire l'image en tant que TIF. S'il y a de meilleures façons de prendre en charge des images de GallesCAscale TIF de niveau 16 bits, je serai heureux de jeter un coup d'oeil p>
short[][]pixels = ...
BufferedImage image = new BufferedImage(width, height, type);
WritableRaster = image.getRaster();
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
raster.setSample(col, row, 0, pixel[row][col]);
}
}
4 Réponses :
Vous avez une double gamme de short. Au lieu de stocker cela en mémoire, vous devez le stocker sur le disque et le manipuler sur le disque. BuffereDimage ne va pas aider. Vous avez besoin d'une bibliothèque (ou d'écrire une bibliothèque) qui permet la manipulation d'une image sur le disque sans qu'il soit nécessaire de charger complètement l'image dans la mémoire. P>
Vous ne voulez pas accéder à chaque valeur individuellement. Au lieu de cela, vous voudrez faire quelque chose comme ceci: p>
Le problème principal ici est comment écrire Block-BLOCK pour une image TIF. Je cherche déjà à écrire mon propre écrivain TIF, mais TIF n'est pas le plus simple des protocoles de faire un écrivain.
Envisagez de créer l'image dans un format plus simple, puis utilisez un outil de conversion pour en faire un TIFF.
Contrairement à votre commentaire, ce n'est vraiment pas si difficile de mettre en œuvre votre propre écrivain TIFF. P>
La spécification est téléchargeable ici . Plus précisément, les pages 13-14 sont (presque) tout ce dont vous avez besoin pour comprendre ce que TIFF est et comment l'écrire. P>
Considérez que, selon la spécification 6.0 (courant à compter de septembre 2013), la taille maximale de l'image est de 4 Go. Je suggère de tourner vers Bigtiff . Les différences de spécifications sont énumérées sur le deuxième lien. P>
C'est très intéressant en effet. Je ne savais pas que l'en-tête est limité à des tailles 32 bits (4 Go). On dirait que je devrai passer de l'écriture Imagej pour utiliser l'écrivain de Fidji (ou simplement utiliser libtiff).
OK, j'ai trouvé une bonne solution pour le faire en Java. P>
Merci à @bdares pour indiquer Bigtiff. P>
mais emballé avec les Fidji, il y a le groupe de bioformats qui a mis en œuvre SCIFIO. P>
Ils fournissent un certain nombre de lecteurs / écrivains soutenus, l'un dans lequel étant un tiffreader / écrivain P>
et p>
J'ai édité mon message original. Merci à tous pour les commentaires, cela m'a aidé à regarder dans la bonne direction. P>
avec le Projet SCIFIO , nous généralisons le cadre d'E / S d'image Bio-formats pour cibler L'imagerie scientifique en général, au-delà de la microscopie et des sciences de la vie. L'API SCIFIO est en version bêta maintenant et Comprend TIFF qui peut bien sûr Lire et Écrivez dans des tuiles. Commentaires sur API et bugs sur le Liste de diffusion SCIFIO est toujours la bienvenue! P>
J'ai été assez dizie depuis cela, mais j'ai décidé de jeter un coup d'œil au projet SCIFIO. J'ai des problèmes de détermination exactement où commencer par écrire un tiff de zéro. Je vois le scifio.InitializeWriter, mais cela nécessite un objet de métadonnées, et ce n'est pas clair comment instancier cet objet de métadonnées. Y a-t-il des tutoriels supplémentaires sur la façon d'utiliser cela?
@JaMeshobbs Pourriez-vous s'il vous plaît poster votre question sur forum.image.sc? C'est la chaîne que le projet SCIFIO utilise pour soutenir ces jours-ci. Si vous mentionnez Ctrueden, je vais essayer de répondre rapidement ... merci!
Pouvez-vous travailler avec l'image dans les sections, disons les carrés de 10k px puis les fusionner ensemble?
Je n'ai aucun problème à travailler en carrés PX 10K, le problème est de savoir comment les écrire dans un fichier TIF.
Vous devriez peut-être diviser le problème. 1. Écris un grand fichier de données d'image brute. 2. Lisez cela et sauvegardez sous TIFF. Une fois que cela fonctionne, vous pouvez rechercher le faire en 1 passage.
Une autre suggestion, utilisez des fichiers mappés de mémoire de Java7 et 64 bits JVM, et épargnez-vous une tonne de maux de tête.
Pour votre filtre de mélange, avez-vous besoin de la photo entière? Ou juste une partie?
Encore une fois, le problème majeur ici est de savoir comment écrire une pièce TIF par pièce.
@ user2747970 Selon Wikipedia Un TIFF est composé de carreaux ou de rayures, il devrait donc être possible de casser les choses.
@ user2747970 Et je voulais dire, convertissez ce problème dans l'écriture de la pièce de fichier crue (mémoire mappée) par pièce, qui est triviale. Ensuite, résolvez la question de la lecture de données brutes et de la rédaction de tiff séquentiellement, ce qui devrait également être trivial.
@ortang Le filtre de mélange dans ce cas n'a pas besoin de l'ensemble de l'image (la résolution de ce problème devrait être triviale). Le problème principal que j'ai eu est de traiter avec le format de fichier TIF et de l'écriture d'images partielles sur la grande image TIF. Le mélange est requis parce que je traite avec des images superposées et que l'étape de la composition peut comprendre 8 images ou plus pour un pixel donné, chaque pixel de chaque image est mélangé pour ce pixel donné. Actuellement, j'utilise un mélange moyen. J'ai aussi une superposition, mais cela tend à avoir du bruit en raison de différences de luminosité entre les images.