2016-08-15 6 views
1

私は超音波装置から非圧縮のdicomビデオを作成しました。今、私はPythonアプリケーションでフレームごとにそれを読んで、今はファイルを保存したいと思います。後でいくつかの画像処理を追加したいと思います。これまでは、最初のフレームに属するバイトを抽出しようとしました。バイト配列から解凍されたイメージを読み取る

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)]) 

このバイタレイをファイル(ビットマップ、JPEGなど)にどうやって取得できますか?私はimage = Image.fromarray(byte_array)とpythonの画像ライブラリを使用しようとしましたが、エラーが発生しました。

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

私はどこかで画像の寸法を指定する必要がありますが、その方法は分かりません。

+1

私は、Pythonについてあまり知らないが、私は最近、多分あなたはそれが便利、同様の話題を扱うスレッドに投稿していたします。http://stackoverflow.com/questions/37847414/viewing-dicom -image-with-bokeh/37936986#37936986 –

+1

まず画像の寸法に合わせて配列のサイズを変更してみてください。 http://stackoverflow.com/questions/7694772/turning-a-large-matrix-into-a-grayscale-image私は出力を心配する前に、あなたのソースを確認するためにフレームの行、cols、バイトサイズとフレーム数をダンプします。 –

答えて

0

コメントのおかげで、私はそれを解決する方法を考え出しました。画像は「RGB」であり、アレイの形状は(3L、800L、376L)でした。それをバイト配列に変換する代わりに、pixel_arrayをnumpy配列として取り、それを(800L、376L、3L)に変形することができます。

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') 
関連する問題