2017-12-08 1 views
1

는 나는 다음과 같은 코드를 사용하여 DICOM 파일을 볼 수 있습니다 알고멀티 프레임 DICOM 파일의 모든 프레임을 추출 /보기하는 방법은 무엇입니까?

그러나
import dicom 
from dicom.contrib.pydicom_PIL import show_PIL 

f = "CT-MONO2-8-abdo.dcm" 
ds = dicom.read_file(f, force=True) 
show_PIL(ds) 

, 내가 어떻게 추출하고 멀티 프레임 DICOM 파일에서 모든 프레임을 볼 수 있습니까? 나는 위의 코드를 사용하여 시도하지만, 다음과 같은 오류 있어요 : 나는 http://www.barre.nom.fr/medical/samples/에있는 일부 멀티 프레임 파일을 시도했다

File "/home/auser/.local/lib/python3.5/site-packages/dicom/dataset.py", line 399, 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 

합니다. 이 파일들은 픽셀 크기 등을 사용할 수 있습니다.

멀티 프레임 DICOM 파일의 다른 프레임을 어떻게 추출 및/또는 볼 수 있습니까?

$ gdcmconv --raw compressed.dcm uncompressed.dcm 

는 (I 추출 후 http://www.barre.nom.fr/medical/samples/files/US-PAL-8-10x-echo.gz 파일을 사용하여) : 편집


: gdcm를 사용하여 명령에 따라 리눅스에서 작동 비 압축 파일이 변환합니다.

위의 파이썬 코드에서 읽은 다음 첫 번째 프레임 만 표시합니다. 다른 프레임을 어떻게 추출하고 볼 수 있습니까?

+0

어떤 이미지를 사용하셨습니까? 오류 메시지가 나에게 분명히 보입니다. 픽셀 데이터가 압축되어 있고 압축 해제 할 적절한 코덱이 pydicom에서 사용할 수 없습니다. 해결 방법으로 dcmtk 명령 줄 도구 (예 : dcmdjpeg)를 사용하여 형식 (전송 구문)을 변경하려고 할 수 있습니다. www.dcmtk.org –

+0

위의 질문에 편집을 참조하십시오. – rnso

+0

나는 조시가 포괄적 인 anwer를 (지금, 나는 upvoted) 제공했다고 생각한다. –

답변

3

pydicom은 픽셀 데이터 읽기를 지원합니다. 문서 this을 참조하십시오. pixel_array 소개

pydicom tends to be “lazy” in interpreting DICOM data. For example, by default it doesn’t do anything with pixel data except read in the raw bytes:

import dicom 
ds=dicom.read_file("MR_small.dcm") 
ds.PixelData 
'\x89\x03\xfb\x03\xcb\x04\xeb\x04\xf9\x02\x94\x01\x7f ... 
... 

A property of Dataset called pixel_array provides more useful pixel data for uncompressed images. The NumPy numerical package must be installed on your system to use this property, because pixel_array returns a NumPy array:

import dicom 
ds=dicom.read_file("MR_small.dcm") 
ds.pixel_array 
array([[ 905, 1019, 1227, ..., 302, 304, 328], 
     [ 628, 770, 907, ..., 298, 331, 355], 
     [ 498, 566, 706, ..., 280, 285, 320], 
     ..., 
     [ 334, 400, 431, ..., 1094, 1068, 1083], 
     [ 339, 377, 413, ..., 1318, 1346, 1336], 
     [ 378, 374, 422, ..., 1369, 1129, 862]], dtype=int16) 
ds.pixel_array.shape 
(64, 64) 

문서는 http://pydicom.readthedocs.io/en/stable/viewing_images.html에서 이미지를 볼에 대해 설명합니다.

오류 메시지 (및 주석의 @kritzel_sw)에서 설명한 것처럼 pydicom은 원본 이미지의 전송 구문을 아직 지원하지 않습니다. 프레임을 추출하기 전에 다른 도구를 사용하여 전송 구문을 변경하십시오.

RONY의 또 다른 도움이 블로그 http://dicomiseasy.blogspot.in/2012/08/chapter-12-pixel-data.html

또한 this 스택 오버플로 질문을 확인; 그것은 오래된 버전에 관한 것이지만 도움이 될 수 있습니다.

+0

위의 질문에 편집을 참조하십시오. – rnso

+0

편집을 보면 전송 구문이 성공적으로 변경되었으며 pydicom이 픽셀 데이터를 디코딩 할 수 있습니다. 내 대답에서 언급했듯이 pydicom은 기본적으로 첫 번째 프레임 만 읽습니다. 편집에서 언급 한 내용과 일치합니다. 대답 ** pixel_array ** 섹션을 읽으십시오. 또한 언급 한 기사를 참조하십시오. –

관련 문제