Re: [Dcmlib] [Fwd: Possible bug in sample file] : jpeg lib gdcm *un peu moins* petée ?
Jean-Pierre Roux
jpr at creatis.insa-lyon.fr
Fri Nov 5 18:29:11 CET 2004
Mathieu Malaterre wrote:
> Salut JP,
>
> Bon ca y est qlqu'un a repere' que j'ai /un peu/ pete' la lecture
> des lossless jpeg ;)
>
> Plus serieusement je fais maintenant:
>
> else if ( BitsStored == 16)
> {
> // Reading Fragment pixels
> if ( ! gdcm_read_JPEG_file16 ( fp, localDecompressed ) )
> {
> return false;
> }
> //assert( IsJPEGLossless );
> }
>
La manip, c'est de remplacer :
else if ( BitsStored == 12 )
par
else if ( BitsStored <= 12 ) --> Ca traitera BitsStored = 9, 10, 11,
12 comme du 12.
=======
else if ( BitsStored <= 12 )
{
// Reading Fragment pixels
if ( ! gdcm_read_JPEG_file12 ( fp, localDecompressed ) )
{
return false;
}
=======
Ca lit, ca affiche, mais on voit que la jpeg lib a un pb (et non plus
qu'elle n'est pas appellee ...)
L'image a l'air cassée en deux, comme si un fragment de ligne manquait ...
Quant a gdcm-JPEG-LossLessThoravision.dcm, on a un message :
Corrupt JPEG data: bad Huffman code
>
> 1. TOUS les tests continues de passer correctement
> 2. En plus tu peux lire les images de dclunie ?
MG1_JPLY.dcm --> Invalid SOS parameters for sequential JPEG
MR1_JPLY.dcm --> OK
MR2_JPLY.dcm --> image cassee en 2
MR3_JPLY.dcm --> OK
MR3_JPLY.dcm --> image presque blanche (tres faible dynamique)
NM1_JPLY.dcm --> OK
RG2_JPLY.dcm --> Invalid SOS parameters for sequential JPEG
RG2_JPLY.dcm --> image cassee en 2
SC1_JPLY.dcm --> Invalid SOS parameters for sequential JPEG
XA1_JPLY.dcm --> OK
> Mathieu
> La lib que clunie utilise est
>
> http://www.devarchives.com/archive/newsgroups/comp.protocols.dicom/2023/Re-truly-lossless-jpeg-
>
Si elle a une bonne licence, il faut sauter lui dessus ;-)
>
>
> I had no trouble reading this image using either the Stanford
> PVRG codec or the Sun Java JAI JIIO codecs that both support
> lossless JPEG.
>
>
> Jean-Pierre Roux wrote:
>
>> Mathieu Malaterre wrote:
>>
>>> -------- Original Message --------
>>> Subject: Possible bug in sample file
>>> Date: Wed, 03 Nov 2004 13:10:37 +0200
>>> From: Anthony Patrinos <patrinos at escape.gr>
>>>
>> [...]
>>
>>>
>>> The decompression was performed with the 12 bit version the JPEG_2B
>>> library. [...] While going through the test data sets kindly
>>> provided by Dr Clunie I
>>> encountered a minor problem with the RG3_JPLY file from the
>>> ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/compsamples_jpeg.tar
>>> file set.
>>
>>
>>
>> Il en a, de la chance, lui, de pouvoir s'interroger sur la
>> vraisemblnace du contenu de certains champs....
>>
>> --> La version actuelle de vtkgdcmViewer pete sur :
>>
>> Debug: In /home/jpr/junk/gdcm/vtk/vtkGdcmReader.cxx, line 614
>> vtkGdcmReader (0x8addb08): Copying to memory image [RG3_JPLY.dcm]
>> gdcm::PixelConvert::ReadAndDecompressJPEGFile: unknown jpeg lossy
>> compression
>>
>> --> la version 'avant tremblement de terre' affichait l'image ...
>>
>>
>> Bon ...
>> A part ça, il y a un truc qui me laisse vraiment reveur, c'est la
>> difficulté qu'il y a pour trouver une jpeg lib qui ... lise le jpeg !
>> (Mathieu en sait plus la dessus que nous tous réunis)
>>
>> avec Cornwell lib, vtkgdcmViewer partait en Seg Fault sur :
>> gdcm-JPEG-LossLessThoravision.dcm
>> alors qu'avec l'actuelle jkpeg lib, il se contente d'afficher :
>> gdcm::PixelConvert::ReadAndDecompressJPEGFile: unknown jpeg lossy
>> compression
>>
>> David Clunie disait que sa library n'avait aucun soucis avec cette
>> image.
>> Nous, nous avons des soucis avec *chaque* image du data set
>> compression de D. Clunie
>>
>> C'est quoi, la lib JPEG_2B qu'il utilise, Anthony Patrinos?
>> Google n'a pas l'air de connaitre, et "JPEG 2B" conduit tout droit a
>> un 'pornomotore' de la Madona Porca !
>>
>>
>>
>>
>> D'autre part, la version actuelle de PrintFile se termine par :
>>
>> > PrintFile RG3_JPLY.dcm
>> [...]
>> ===========================================
>> --- Pixel information -------------------------
>> Pixel Data: offset 1614 x64e length 92470 x16936
>>
>> ===========================================
>> ce qui ne donne pas plus d'information que la derniere ligne du
>> Header :
>> 7fe0|0010 lg : x(16936) 92470 Off.: x(64e) 1614 [OB]
>>
>> La version avant tremblement de terre, se terminait par :
>>
>> > PrintFile RG3_JPLY.dcm
>> [...]
>> ===========================================
>> Checking the Dicom-encapsulated Jpeg/RLE Pixels
>> at 64e : ItemTag (should be fffe,e000): fffe,e000
>> at 652 : Basic Offset Table Item Length (??) 0 x(00000000)
>> at 656 : ItemTag (should be fffe,e000 or e0dd): fffe,e000
>> at 65a : fragment length 65536 x(00010000)
>> at 1065e : ItemTag (should be fffe,e000 or e0dd): fffe,e000
>> at 10662 : fragment length 26902 x(00006916)
>> at 16f7c : ItemTag (should be fffe,e000 or e0dd): fffe,e0dd
>> =========================================== RG3_JPLY.dcm is Readable
>>
>> qui permettait de s'assurer que les fragments, items, offset table,
>> etc étaient bons.
>>
>>
>>>
>>> This file specifies 10 bits stored (data element 0x0028, 0x0101), so
>>> the pixel values should have an allowed range of 0 to 1023 (1024
>>> values). However, this file's pixel data range from 0 to 1024. The
>>> discrepancy was caught by a sanity check in our code for the range
>>> actual pixel values (as in the data) vs the nominally allowed ones (as
>>> calculated from the bits used data element).
>>>
>>> The decompression was performed with the 12 bit version the JPEG_2B
>>> library. With the 16 bit version of the library the resulting pixel
>>> value range was 30711 to 31744, i.e. 1034 values. In both cases the
>>> resulting image is visually identical to the reference image RG3_UNC
>>> available at
>>> ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/compsamples_refanddir.
>>>
>>> tar.bz2 .
>>>
>>> This is most likely a decompression artifact caused by the fact that
>>> the available output range from the jpeg library is 12/16 bits
>>> respectively.
>>>
>>> This particular case is not much of a problem, but does raise the
>>> question of how one (an application or toolkit) is supposed to handle
>>> such situations.
>>>
>>> Is a re-scaling of the data values to the correct range appropriate or
>>> could one just ignore the overshoot (since the data values would be
>>> embedded in a 16 bit buffer anyway) or maybe clamp the overshooting
>>> pixel values to the maximum allowed? I'm inclined to prefer the second
>>> or third approach because (not quite sure which one yet) because
>>> a. Re-scaling by 1023/newMaxPixelValue would probably cause more
>>> artifacts due to aliasing of the data values.
>>> b. More significantly, re-scaling would move the mean of the pixel
>>> values, thus introducing a systematic bias to the resulting image.
>>>
>>> Best regards to all,
>>>
>>> Tony Patrinos, PhD
>>> Escape Information Services
>>> http://www.escape.gr/dicom/
>>>
>>>
>>> _______________________________________________
>>> Dcmlib mailing list
>>> Dcmlib at creatis.insa-lyon.fr
>>> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
>>>
>> _______________________________________________
>> 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