2017-08-23 55 views
0

私は圧縮されたDICOM画像で働いている私は解凍しthis exampleを使用していthis linksudo apt-get install python-gdcm圧縮されたDICOMイメージをgdcmとPythonで解凍するには?

次インストールしたUbuntuの私はgdcmを使用している14、上のPython 2.7で、解凍したいと思います(少なくともImageJはそれを開こうとすると "圧縮されたdicomイメージ"と呼ばれますが)私は解決できないエラーが発生します。コードはprint dimsマークプログラムで

import gdcm 
import sys 

if __name__ == "__main__": 
    file1 = sys.argv[1] 
    file2 = sys.argv[2] 

    r = gdcm.ImageReader() 
    r.SetFileName(cin) 

    if not r.Read(): 
    sys.exit(1) 

    image = gdcm.Image() 
    ir = r.GetImage() 

    image.SetNumberOfDimensions(ir.GetNumberOfDimensions()); 
    dims = ir.GetDimensions(); 
    print ir.GetDimension(0); 
    print ir.GetDimension(1); 
    print "Dims:",dims 

    image.SetDimension(0, ir.GetDimension(0)); 
    image.SetDimension(1, ir.GetDimension(1)); 

    pixeltype = ir.GetPixelFormat(); 
    image.SetPixelFormat(pixeltype); 

    pi = ir.GetPhotometricInterpretation(); 
    image.SetPhotometricInterpretation(pi); 

    pixeldata = gdcm.DataElement(gdcm.Tag(0x7fe0,0x0010)) 
    str1 = ir.GetBuffer() 
    #print ir.GetBufferLength() 
    pixeldata.SetByteValue(str1, gdcm.VL(len(str1))) 
    image.SetDataElement(pixeldata) 

    w = gdcm.ImageWriter() 
    w.SetFileName(path_save+"uncompressed.png") 
    w.SetFile(r.GetFile()) 

    w.SetImage(image) 

    if not w.Write(): 
    sys.exit(1) 

が実際に画像の正しい寸法を印刷する(それは単にリンクの例である)に従います。それはw.SetImage(image)に達した場合でも、私はエラーを取得し、私はまた、警告の束を得る:

Warning: In /build/gdcm-uIgnvq/gdcm-2.6.3/Source/MediaStorageAndFileFormat/gdcmOverlay.cxx, line 205, function void gdcm::Overlay::Update(const gdcm::DataElement&) 

Warning: In /build/gdcm-uIgnvq/gdcm-2.6.3/Source/MediaStorageAndFileFormat/gdcmPixmapReader.cxx, line 544, function bool gdcm::DoOverlays(const gdcm::DataSet&, gdcm::Pixmap&) 
Bits Allocated are wrong. Correcting. 


Error: In /build/gdcm-uIgnvq/gdcm-2.6.3/Source/MediaStorageAndFileFormat/gdcmOverlay.cxx, line 265, function bool gdcm::Overlay::GrabOverlayFromPixelData(const gdcm::DataSet&) 
Could not find Pixel Data. Cannot extract Overlay. 


Warning: In /build/gdcm-uIgnvq/gdcm-2.6.3/Source/MediaStorageAndFileFormat/gdcmPixmapReader.cxx, line 550, function bool gdcm::DoOverlays(const gdcm::DataSet&, gdcm::Pixmap&) 
Could not extract Overlay from Pixel Data 


Warning: In /build/gdcm-uIgnvq/gdcm-2.6.3/Source/MediaStorageAndFileFormat/gdcmPixmapReader.cxx, line 575, function bool gdcm::DoOverlays(const gdcm::DataSet&, gdcm::Pixmap&) 
Invalid BitPosition: 0 for overlay #0 removing it. 


python2.7: /build/gdcm-uIgnvq/gdcm-2.6.3/Source/Common/gdcmObject.h:58: virtual gdcm::Object::~Object(): Assertion `ReferenceCount == 0' failed. 

は、画像の特定の種類に対してのみ有効で、この例でますか?または私は何かを逃していますか?

答えて

1

あなたは、単にのpythonを使用して画像を解凍しようとしているので、なぜ使用しないで、単にこの:

import gdcm 
import sys 

if __name__ == "__main__": 
    file1 = sys.argv[1] # input filename 
    file2 = sys.argv[2] # output filename 

    reader = gdcm.ImageReader() 
    reader.SetFileName(file1) 

    if not reader.Read(): 
    sys.exit(1) 

    change = gdcm.ImageChangeTransferSyntax() 
    change.SetTransferSyntax(gdcm.TransferSyntax(gdcm.TransferSyntax.ImplicitVRLittleEndian)) 
    change.SetInput(reader.GetImage()) 
    if not change.Change(): 
    sys.exit(1) 

    writer = gdcm.ImageWriter() 
    writer.SetFileName(file2) 
    writer.SetFile(reader.GetFile()) 
    writer.SetImage(change.GetOutput()) 

    if not writer.Write(): 
    sys.exit(1) 

使用:

$ gdcminfo raw.dcm 
MediaStorage is 1.2.840.10008.5.1.4.1.1.4 [MR Image Storage] 
TransferSyntax is 1.2.840.10008.1.2 [Implicit VR Little Endian: Default Transfer Syntax for DICOM] 
NumberOfDimensions: 2 
Dimensions: (256,256,1) 
SamplesPerPixel :1 
BitsAllocated  :16 
BitsStored   :16 
HighBit   :15 
PixelRepresentation:1 
ScalarType found :INT16 
PhotometricInterpretation: MONOCHROME2 
PlanarConfiguration: 0 
TransferSyntax: 1.2.840.10008.1.2 
Origin: (-85,21.6,108.7) 
Spacing: (0.664062,0.664062,1.5) 
DirectionCosines: (1,0,0,0,0,-1) 
Rescale Intercept/Slope: (0,1) 
Orientation Label: CORONAL 

$ python decompress.py gdcm/Testing/Data/.002.050.dcm raw.dcm 

これはにつながります

更新すると、元のようですバグ

gdcmObject.h:58:仮想gdcm ::オブジェクト::〜オブジェクト():アサーション `ReferenceCountの== 0' に失敗しました。

は、ここでは、上流解決されました:

+0

グレート、おかげでたくさん!上流の問題を解決するための小道具 – Soltius

関連する問題