2016-08-15 2 views
1

초음파 장치에서 압축되지 않은 dicom 비디오를 만들었습니다. 이제는 파이썬 응용 프로그램에서 프레임별로 프레임을 읽고 파일을 저장하려고합니다. 나중에 일부 이미지 처리를 추가하고 싶습니다. 지금까지 첫 번째 프레임에 속한 바이트를 추출하려고했습니다.바이트 배열에서 압축되지 않은 이미지 읽기

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

어떻게이 bytearray를 파일 (비트 맵, JPEG 파일)로 가져올 수 있습니까? 나는 image = Image.fromarray(byte_array)와 함께 파이썬 이미지 라이브러리를 사용해 보았지만 오류가 발생했습니다.

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

나는 어딘가에서 이미지의 크기를 지정해야하지만 어떻게 계산하지 않았는지를 추측합니다.

+1

내가 파이썬에 대해 잘 모르겠지만, 내가 최근에 비슷한 주제를 다루는 스레드에 게시했다, 어쩌면 당신이 찾아 도움이 : 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. 출력에 대해 걱정하기 전에 소스를 확인하기 위해 프레임 행, 열, 바이트 크기 및 프레임 수를 덤프합니다. –

답변

0

의견 덕분에 해결 방법을 찾아 냈습니다. 이미지는 'RGB'이고 배열의 모양은 (3L, 800L, 376L)입니다. 바이트 배열로 변환하는 대신 num33 배열로 pixel_array을 가져 와서 (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') 
관련 문제