2016-08-15 4 views
1

Ich habe ein unkomprimiertes dicom-Video von einem Ultraschallgerät erstellt. Jetzt möchte ich es Frame für Frame in einer Python-Anwendung lesen und vorerst die Datei speichern. Später möchte ich etwas Bildverarbeitung hinzufügen. Bisher habe ich versucht, die zum ersten Frame gehörenden Bytes zu extrahieren.Unkomprimiertes Bild aus Byte-Array lesen

import dicom 
import array 
from PIL import Image 

filename = 'image.dcm' 
img = dicom.read_file(filename) 
byte_array = array.array('B', img.PixelData[0:(img.Rows * img.Columns)]) 

Wie bekomme ich jetzt dieses Bytearray in eine Datei (Bitmap, JPEG was auch immer)? Ich habe versucht, die Python-Bild-Bibliothek mit image = Image.fromarray(byte_array), aber habe einen Fehler.

AttributeError: 'str' object has no attribute 'array_interface'

Ich denke, irgendwo muss ich auch die Abmessungen des Bildes angeben, aber habe nicht herausgefunden, wie.

+1

Ich weiß nicht viel über Python, aber ich hatte vor kurzem zu einem Thread gepostet mit einem ähnlichen Thema beschäftigen, vielleicht finden Sie, dass nützlich: http: //stackoverflow.com/questions/37847414/viewing-dicom -image-with-bokeh/37936986 # 37936986 –

+1

Versuchen Sie die Größe des Arrays zuerst zu ändern, um den Bildabmessungen zu entsprechen; http://stackoverflow.com/questions/7694772/turning-a-large-matrix-into-a-grayscale-image. Ich würde die Frame-Zeile, die Spalten, die Byte-Größe und die Frame-Anzahl ausgeben, um Ihre Quelle zu bestätigen, bevor Sie sich über die Ausgabe Gedanken machen. –

Antwort

0

Dank der Kommentare habe ich herausgefunden, wie man es löst. Das Bild war in 'RGB' und die Form des Arrays war (3L, 800L, 376L). Anstatt es in ein Byte-Array umzuwandeln, kann ich das pixel_array als ein numpiges Array nehmen und es zu (800L, 376L, 3L) umformen.

import dicom 
from PIL import Image 

filename = 'image.dcm' 
img = dicom.read_file(filename) 
output = img.pixel_array.reshape((img.Rows, img.Columns, 3)) 
image = Image.fromarray(output).convert('LA') 
image.save('output.png')