python對(duì)DICOM圖像的讀取方法詳解
DICOM介紹
DICOM3.0圖像,由醫(yī)學(xué)影像設(shè)備產(chǎn)生標(biāo)準(zhǔn)醫(yī)學(xué)影像圖像,DICOM被廣泛應(yīng)用于放射醫(yī)療,心血管成像以及放射診療診斷設(shè)備(X射線(xiàn),CT,核磁共振,超聲等),并且在眼科和牙科等其它醫(yī)學(xué)領(lǐng)域得到越來(lái)越深入廣泛的應(yīng)用。在數(shù)以萬(wàn)計(jì)的在用醫(yī)學(xué)成像設(shè)備中,DICOM是部署最為廣泛的醫(yī)療信息標(biāo)準(zhǔn)之一。當(dāng)前大約有百億級(jí)符合DICOM標(biāo)準(zhǔn)的醫(yī)學(xué)圖像用于臨床使用。
看似神秘的圖像文件,究竟是如何讀取呢?網(wǎng)上隨便 一搜,都有很多方法,但缺乏比較系統(tǒng)的使用方法,下文綜合百度資料,結(jié)合python2.7,講解如何讀取及使用DICOM圖像。
讀取DICOM圖像,需要以下幾個(gè)庫(kù):pydicom、CV2、numpy、matplotlib。pydicom專(zhuān)門(mén)處理dicom圖像的python專(zhuān)用包,numpy高效處理科學(xué)計(jì)算的包,依據(jù)數(shù)據(jù)繪圖的庫(kù)。
安裝:
pip install matplotlib
pip install opencv-python #opencv的安裝,小度上基本都是要下載包,安裝包后把包復(fù)制到某個(gè)文件夾下, #后來(lái)我在https://pypi.python.org/pypi/opencv-python找到這種pip的安裝方法,親測(cè)可用
pip install pydicom
pip install numpy
如果沒(méi)有記錯(cuò),安裝pydicom時(shí),也會(huì)自動(dòng)把numpy安裝上。
安裝好這些庫(kù)后,就可以對(duì)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)信息的字典,我們可以通過(guò)dir查看DICOM文件有什么信息,可以通過(guò)字典返回相關(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é)
以上就是這篇文章的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
使用Python和Plotly繪制各種類(lèi)型3D圖形的方法
Python語(yǔ)言擁有豐富的數(shù)據(jù)可視化庫(kù),其中Plotly是一款流行的工具,提供了繪制高質(zhì)量三維圖形的功能,本文將介紹如何使用Python和Plotly來(lái)繪制各種類(lèi)型的3D圖形,并給出代碼實(shí)例,需要的朋友可以參考下2024-05-05python調(diào)用API接口實(shí)現(xiàn)登陸短信驗(yàn)證
在本篇文章里小編給大家整理的是關(guān)于python調(diào)用API接口實(shí)現(xiàn)登陸短信驗(yàn)證的實(shí)例內(nèi)容,需要的朋友們可以參考下。2020-05-05在Python中操作字符串之startswith()方法的使用
這篇文章主要介紹了在Python中操作字符串之startswith()方法的使用,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05編寫(xiě)Python爬蟲(chóng)抓取暴走漫畫(huà)上gif圖片的實(shí)例分享
這篇文章主要介紹了編寫(xiě)Python爬蟲(chóng)抓取暴走漫畫(huà)上gif圖片的實(shí)例分享,示例代碼為Python3,利用到了urllib模塊、request模塊和BeautifulSoup模塊,需要的朋友可以參考下2016-04-04Python??reduce()函數(shù)的用法示例代碼
reduce函數(shù)原本在python2中也是個(gè)內(nèi)置函數(shù),不過(guò)在python3中被移到functools模塊中,這篇文章主要介紹了Python reduce()函數(shù)的用法,需要的朋友可以參考下2023-05-05關(guān)于pip安裝opencv-python遇到的問(wèn)題
這篇文章主要介紹了關(guān)于pip安裝opencv-python遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02python調(diào)用webservice接口的實(shí)現(xiàn)
這篇文章主要介紹了python調(diào)用webservice接口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07