Kann nicht dicom Bild für die Anzeige in Python bekommen

Ich versuche, ein DICOM-Bild in opencv-python anzuzeigen.Ich verwende die pydicom-Bibliothek, und dann das Hinzufügen von APIs, um einen vollwertigen DICOM-Viewer mit DOTNET zu erstellen, der Python läuft (C # ruft python mit Prozessinstanz natürlich !!) . Ich kann das unkomprimierte DICOM-Bild nicht umwandeln oder sehen. Wann immer ich versuche, das pixel_array zu laden oder zu modifizieren. Ich bekomme falsche meldungen.

import dicom import cv2 import numpy df=dicom.read_file("IM-0001-0002.dcm") df.pixel_array Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> df.pixel_array File "C:\Python27\lib\site-packages\dicom\dataset.py", line 394, in pixel_array return self._get_pixel_array() File "C:\Python27\lib\site-packages\dicom\dataset.py", line 376, in _get_pixel_array raise NotImplementedError("Pixel Data is compressed in a format pydicom does not yet handle. Cannot return array") NotImplementedError: Pixel Data is compressed in a format pydicom does not yet handle. Cannot return array 

Bitte schlagen Sie mir eine gute Möglichkeit vor, das Bild zu konvertieren cv2.imshow () Funktion o das Bild anzeigen

Danke im Voraus!!

3 Solutions collect form web for “Kann nicht dicom Bild für die Anzeige in Python bekommen”

Da pydicom keine komprimierten Dicom-Dateien unterstützt, musst du es zuerst dekomprimieren. Sie können GDCM verwenden , um das zu tun.

Sie können die python GDCM-Bindung verwenden, um die Datei zuerst zu dekomprimieren, siehe hier zB

Sie müssen in RGB vorher konvertieren, schauen Sie sich das für eine monochrome Dicom-Datei an: https://github.com/twanmal/dicom_monochrome_to_opencv

 # import the necessary packages from imutils import contours import scipy from skimage import measure import numpy as np # numeric library needed import pandas as pd #for datafrome import argparse # simple argparser import imutils import cv2 # for opencv image recognising tool import dicom filename = askopenfilename() dicom_file = dicom.read_file(filename) ## original dicom File #### a dicom monochrome-2 file has pixel value between approx -2000 and +2000, opencv doesn't work with it##### #### in a first step we transform those pixel values in (R,G,B) ### to have gray in RGB, simply give the same values for R,G, and B, ####(0,0,0) will be black, (255,255,255) will be white, ## the threeshold to be automized with a proper quartile function of the pixel distribution black_threeshold=0###pixel value below 0 will be black, white_threeshold=1400###pixel value above 1400 will be white wt=white_threeshold bt=black_threeshold ###### function to transform a dicom to RGB for the use of opencv, ##to be strongly improved, as it takes to much time to run, ## and the linear process should be replaced with an adapted weighted arctan or an adapted spline interpolation. def DicomtoRGB(dicomfile,bt,wt): """Create new image(numpy array) filled with certain color in RGB""" # Create black blank image image = np.zeros((dicomfile.Rows, dicomfile.Columns, 3), np.uint8) #loops on image height and width i=0 j=0 while i<dicomfile.Rows: j=0 while j<dicomfile.Columns: color = yaxpb(dicom_file.pixel_array[i][j],bt,wt) #linear transformation to be adapted image[i][j] = (color,color,color)## same R,G, B value to obtain greyscale j=j+1 i=i+1 return image ##linear transformation : from [bt < pxvalue < wt] linear to [0<pyvalue<255]: loss of information... def yaxpb(pxvalue,bt,wt): if pxvalue < bt: y=0 elif pxvalue > wt: y=255 else: y=pxvalue*255/(wt-bt)-255*bt/(wt-bt) return y image=DicomtoRGB(dicom_file,bt=0,wt=1400) ## loading the RGB in a proper opencv format gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ## look at the gray file cv2.imshow("gray", gray) cv2.waitKey(0) cv2.destroyWindow("gray") 
Python ist die beste Programmiersprache der Welt.