문제

DICOM 파일을 구문 분석하는 가장 단순하고 가장 큰 방법은 무엇입니까?

비 파이썬 라이브러리를 사용하지 않는 기본 파이썬 구현이 훨씬 선호됩니다. DICOM은 디지털 의료 이미징의 표준 파일 형식입니다 (보기 여기 자세한 내용은).

DICOM 파일의 읽기 (서브 세트)를 지원하는 C/C ++ 라이브러리가 있습니다. 그들 중 2 ~ 3 개는 파이썬 바인딩도 가지고 있습니다. 네이티브 파이썬 파서는 두 가지 목적을 제공 할 것입니다.

  1. 외부 C/C ++ 라이브러리를 빌드 할 필요가 없습니다.
  2. DICOM 파일 형식에 대해 알아보십시오.
도움이 되었습니까?

해결책

그리고 오늘부터 DICOM 파일을 읽는 또 다른 순수한 Python 패키지가 있습니다. Pydicom

다른 팁

사용 중입니다 Pydicom 요즘 크게, 그것은 흔들린다.

게임을 시작하는 것은 매우 쉽습니다.

import dicom 
data = dicom.read_file("yourdicomfile.dcm")

그 "데이터"객체에서 흥미로운 것들을 얻으려면 어떻게 든 닮았습니다. dcmdump 산출:

for key in data.dir():        
    value = getattr(data, key, '')
    if type(value) is dicom.UID.UID or key == "PixelData":
        continue

    print "%s: %s" % (key, value)

DICOM 형식에 대해 더 많이 배울 수있는 좋은 방법은 유사한 파일을 열고 코드를 작성하여 다양한 측면에 따라 비교하는 것입니다. 연구 설명, 창 너비 및 중앙, 픽셀 표현 등.

재미있게 보내세요! :)

Oleg Pianykh의 Dicom 형식, "DICOM (Digital Imaging and Communications in Medicine) : DICOM (Digital Imaging and Communications in Medicine) : 실용적인 소개 및 생존 가이드"에 대해 배우고 싶다면 핵심 DICOM 개념에 대한 좋은 소개를 제공합니다. Springer-Verlag는이 책의 출판사입니다. 전체 DICOM 표준은 물론 다소 위협적이지만 궁극적 인 참조입니다. NEMA에서 구할 수 있습니다 (http://medical.nema.org).

파일 형식은 실제로 당신이 상상할 수있는 것보다 덜 난해하고 일련의 데이터 요소로 구성됩니다. 서문에는 ASCII 텍스트 "DICM"과 사용되지 않은 몇 가지 예약 바이트가 포함되어 있습니다. 서문을 따르는 것은 일련의 데이터 요소입니다. 각 데이터 요소는 요소의 크기, 값 표현, DICOM 태그 및 값을 나타내는 2 자식 ASCII 코드로 구성됩니다. 파일의 데이터 요소는 DICOM 태그 번호로 주문됩니다. 이미지 자체는 크기, 값 표현 등을 가진 또 다른 데이터 요소 일뿐입니다.

값 표현은 값을 해석하는 방법을 정확하게 지정합니다. 숫자입니까? 문자열입니까? 캐릭터 문자열 인 경우 짧은 또는 긴 문자열입니까? 값 표현 코드가이를 알려줍니다.

DICOM 태그는 2 바이트 "그룹"번호와 2 바이트 "요소"숫자로 구성된 4 바이트 16 진 코드입니다. 그룹 번호는 태그가 적용되는 정보 엔티티를 알려주는 식별자입니다 (예 : 그룹 0010은 환자를 말하고 그룹 0020은 연구를 나타냅니다). 요소 번호는 값의 해석 (환자의 ID 번호, 시리즈 설명 등)의 해석을 식별합니다. 값을 해석 해야하는 방법을 찾으려면 코드가 사전 파일로 DICOM 태그를 찾습니다.

다른 세부 사항이 포함되어 있지만 그것이 본질입니다. 파일 형식에 대해 배울 수있는 가장 유익한 일은 예제 DICOM 파일을 가져 가서 육각 편집기와 함께보고 정신적으로 구문 분석하는 과정을 거치는 것입니다. 기존 오픈 소스 구현을 살펴보면 DICOM에 대해 배우려고하는 것에 대해 조언 할 것입니다. 깨달음 대신 혼동 될 가능성이 높습니다. 큰 그림을 얻는 것이 더 중요합니다. 큰 그림이 있으면 미묘함으로 내려갈 수 있습니다.

도서관 Pydicom 위에서 언급 한 것은 DICOM 데이터 구조에 액세스하기위한 훌륭한 라이브러리처럼 보입니다. 예를 들어 RT 복용량 데이터에 액세스하는 데 사용하려면

import dicom,numpy
dose = dicom.ReadFile("RTDOSE.dcm")
d = numpy.fromstring(dose.PixelData,dtype=numpy.int16)
d = d.reshape((dose.NumberofFrames,dose.Columns,dose.Rows))

그리고 만약 당신이 Mayavi에 있다면

from enthought.mayavi import mlab
mlab.pipeline.scalar_field(d)

이것은 잘못된 좌표와 복용량 스케일링을 제공하지만 원리는 소리가되어야합니다.

CT 데이터는 매우 유사해야합니다.

새로운 GDCM 개발이 이제 여기에서 발생합니다.

http://gdcm.sourceforge.net/

파이썬 위에 Java와 C#을 지원합니다.

왜 쓰기 또 다른 단일 C ++ 구현을 중앙 집중화하고 다양한 언어에 액세스 할 수있는 DICOM 구현

몇 년 전에 나는 같은 것을 찾고 있었고 이것을 발견했습니다.파이썬 Dicom Lib

나는 코드에 너무 감동하지 않았지만 DICOM 파일을 읽는 기본 Python입니다.

DICOM은 진정한 고통입니다 ... 제조업체가 표준을 고수하더라도. 자신의 DICOM 라이브러리를 작성하면 다른 제조업체 Dicoms는 다른 공급 업체와 효과적으로 호환되지 않습니다 [인용이 필요합니다].

나는 (여가 시간에) 멋진 작은 루비 파서에서 크게 빌린 C Dicom 파서를 쓰려고 시도했다.루비-다이 콤'. 실제로 매우 읽기 쉬운 코드입니다 (더 작은 이전 버전 중 하나를 보았습니다).

가장 큰 두통은 예상 데이터 유형을 갖춘 헤더 태그 라이브러리를 모으는 것이 었습니다. 표준 정의 태그와 공급 업체 태그가 있습니다. Ruby-Dicom 파일에는 쉽게 검사 할 수있는 텍스트 형식의 태그 라이브러리가 포함되어 있습니다.

나는 파일 형식에만 관심이 있었기 때문에 공식 문헌을 포기했는데,이 파일 형식에만 관심이 있었는데, 이는 10 개 정도의 거대한 PDF 중 하나에 불과합니다.

내 로컬 DICOM 파일은 압축되지 않으며 표준에 따라 쉽게 코딩하는 비트 확산을 따르지만, 엔지니어가 크거나 작은 패딩 비트가없는 8 비트 컨테이너에 저장된 다양한 압축 및 이상한 12 비트 이미지에 대비하십시오.

나는 한 번도 매우 부족한 한 번 포기했다.

파이썬은 아마도이 스타일의 헤더 구문 분석에 대해 C보다 훨씬 더 나은 선택 일 것입니다 ...

Python 바인딩이있는 일부 라이브러리 (C/C ++에서 대부분 구현)가 있습니다.

그러나 DICOM 파일 형식에 대한 자세한 내용은 기본 Python 구현을 찾고 있습니다.

원래 포스터가 무엇을 시도했는지, 어떤 방법이 작동했는지 궁금합니다. 나는 Dicom과 함께 일한 적이 없지만 "Dicom Python"에 대한 빠른 Google 검색은 몇 가지 흥미로운 결과를 얻었습니다. 이 프로젝트는 다음과 같습니다. http://www.creatis.univ-lyon1.fr/public/gdcm/ 원하는 것을 전달해야합니다. 파이썬 바인딩과 꽤 활발한 메일 링리스트가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top