python對DICOM圖像的讀取方法詳解
DICOM介紹
DICOM3.0圖像,由醫(yī)學(xué)影像設(shè)備產(chǎn)生標(biāo)準(zhǔn)醫(yī)學(xué)影像圖像,DICOM被廣泛應(yīng)用于放射醫(yī)療,心血管成像以及放射診療診斷設(shè)備(X射線,CT,核磁共振,超聲等),并且在眼科和牙科等其它醫(yī)學(xué)領(lǐng)域得到越來越深入廣泛的應(yīng)用。在數(shù)以萬計的在用醫(yī)學(xué)成像設(shè)備中,DICOM是部署最為廣泛的醫(yī)療信息標(biāo)準(zhǔn)之一。當(dāng)前大約有百億級符合DICOM標(biāo)準(zhǔn)的醫(yī)學(xué)圖像用于臨床使用。
看似神秘的圖像文件,究竟是如何讀取呢?網(wǎng)上隨便 一搜,都有很多方法,但缺乏比較系統(tǒng)的使用方法,下文綜合百度資料,結(jié)合python2.7,講解如何讀取及使用DICOM圖像。
讀取DICOM圖像,需要以下幾個庫:pydicom、CV2、numpy、matplotlib。pydicom專門處理dicom圖像的python專用包,numpy高效處理科學(xué)計算的包,依據(jù)數(shù)據(jù)繪圖的庫。
安裝:
pip install matplotlib
pip install opencv-python #opencv的安裝,小度上基本都是要下載包,安裝包后把包復(fù)制到某個文件夾下, #后來我在https://pypi.python.org/pypi/opencv-python找到這種pip的安裝方法,親測可用
pip install pydicom
pip install numpy
如果沒有記錯,安裝pydicom時,也會自動把numpy安裝上。
安裝好這些庫后,就可以對dicom文件操作。
具體看下面代碼:
#-*-coding:utf-8-*-
import cv2
import numpy
import dicom
from matplotlib import pyplot as plt
dcm = dicom.read_file("AT0001_100225002.DCM")
dcm.image = dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept
slices = []
slices.append(dcm)
img = slices[ int(len(slices)/2) ].image.copy()
ret,img = cv2.threshold(img, 90,3071, cv2.THRESH_BINARY)
img = numpy.uint8(img)
im2, contours, _ = cv2.findContours(img,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
mask = numpy.zeros(img.shape, numpy.uint8)
for contour in contours:
cv2.fillPoly(mask, [contour], 255)
img[(mask > 0)] = 255
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(2,2))
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
img2 = slices[ int(len(slices)/2) ].image.copy()
img2[(img == 0)] = -2000
plt.figure(figsize=(12, 12))
plt.subplot(131)
plt.imshow(slices[int(len(slices) / 2)].image, 'gray')
plt.title('Original')
plt.subplot(132)
plt.imshow(img, 'gray')
plt.title('Mask')
plt.subplot(133)
plt.imshow(img2, 'gray')
plt.title('Result')
plt.show()
在DICOM圖像里,包含了患者的相關(guān)信息的字典,我們可以通過dir查看DICOM文件有什么信息,可以通過字典返回相關(guān)的值。
import dicom
import json
def loadFileInformation(filename):
information = {}
ds = dicom.read_file(filename)
information['PatientID'] = ds.PatientID
information['PatientName'] = ds.PatientName
information['PatientBirthDate'] = ds.PatientBirthDate
information['PatientSex'] = ds.PatientSex
information['StudyID'] = ds.StudyID
information['StudyDate'] = ds.StudyDate
information['StudyTime'] = ds.StudyTime
information['InstitutionName'] = ds.InstitutionName
information['Manufacturer'] = ds.Manufacturer
print dir(ds)
print type(information)
return information
a=loadFileInformation('AT0001_100225002.DCM')
print a
總結(jié)
以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Python 判斷是否為質(zhì)數(shù)或素數(shù)的實例
下面小編就為大家?guī)硪黄狿ython 判斷是否為質(zhì)數(shù)或素數(shù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
Python中如何使用多線程優(yōu)化For循環(huán)
這篇文章主要為大家詳細(xì)介紹了在Python中如何使用多線程實現(xiàn)優(yōu)化For循環(huán),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01
tensorflow實現(xiàn)將ckpt轉(zhuǎn)pb文件的方法
這篇文章主要介紹了tensorflow實現(xiàn)將ckpt轉(zhuǎn)pb文件的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
python模塊shutil函數(shù)應(yīng)用示例詳解教程
這篇文章主要為大家介紹了python模塊中shutil函數(shù)的應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-10-10

