[Dcmlib] GDCM et JPEG suite

Jean-Pierre Roux jpr at creatis.insa-lyon.fr
Fri Jan 14 13:48:33 CET 2005


Mathieu Malaterre wrote:

> Salut,
>
>     Bon mon patch pour BigEndian et JPEG n'est pas a l'epreuve des 
> balles. qd le flux decompresse est YBR tout casse...
>
>     J'aimerais donc faire des modifs assez grosses dans la 
> decompression jpeg. Au lieu d'une methode static, gdcm_read devrait 
> etre membre d'une classe pour avoir access a l'information si l'image 
> est YBR ou pas. Car tout l'interet est qu'ici ijg gere la 
> decompression de jpeg ybr *directement*. Je suppose que ca serait plus 
> rapide de faire ca que ce qu'on fais en deux passes en ce moment.


-->On en est arrives a un stade ou il faut se poser la question de place 
memoire, et de la vitesse d'execution.

-->On a toujours presents a l'esprit les examens medicaux tels qu'ils 
etaient il y a 5 ans ...
Typiquement : 200 images 256x256.
Aujourdh'ui, il faut plutot tabler sur 2000 images 1024x1024 (exam du 
Scanner 'Cardio')
Il y a dans gdcm une 'belle' image multiframe de 30 frames, qui fait 65 
MegaOctets ...
Lorsqu'on aura a faire a des images de 300 frames, ca va commencer a 
craindre, en mémoire !
600 Mega  (si elle est RGB, multiplier par 3, et si elle est YBR ...) si 
on bosse avec vtk, rajouter cette même taille pour le vtkImageData.
Autant eviter d'encombrer la mémoire avec des données de travail dont on 
n'a clairement pas besoin (par exemple, garder les pixels avant 
decompression, ou les pixels 'passes en BigEndian' -ou en little- et qui 
seraint la juste pour nous simplifier la vie lors de l'ecriture.

--> a propos du 'hack sauvage' de Mathieu.
ca va effectivement etre l'epouvante si on raffraichit l'image affichée 
pendant qu'on l'ecrit sur disque en changeant l'endianess.
La solution simple, mais dramatqie en termes de place, c'est , le 
PixelWrite convertor, d'allouer une image -encore une !- temporraire, de 
swapper les pixels dans cette image, et de la supprimer ensuite.
L'idee de Jean-Michel Rouet, qui me plaisait, bien d'allouer un buffer 
de taille raisonable (8 ou 16 k), et de faire un boucle de 
move-swap-write jusqu'a  avoir parcouru toute l'image n'est pas 
applicable dans l'etat actuel des chose :
 Lorsqu'on lance l'ecriture, tous les DocEntry sont ecrits, tels qu'ils 
sont en mémore.

Il faudrait, pour pouvoir faire la manip suggeree par Jean-Michel (et 
c'est sur qu'il faudra proceder par des move-swap-write ), creer une 
classe derivee de BinEntry (qui serait, par exemple PixelEntry), qui 
prendrait en compte, dans sa methode Write, l'endianess.
Pour le moment seul 7FE0,0010 serait dans ce cas.
A terme, les icones, overlays -qu'on s'est promis de traiter, un jour- l 
e seront egalement.

JPRx




>
>     Qu'est-ce que vous en pensez ?
>
> Mathieu
>
>
> _______________________________________________
> Dcmlib mailing list
> Dcmlib at creatis.insa-lyon.fr
> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
>



More information about the Dcmlib mailing list