關(guān)豪然 宋衛(wèi)東 王志杰 張 悅 張豐收
(河南科技大學(xué)醫(yī)學(xué)技術(shù)與工程學(xué)院 洛陽 471023)
20 世紀(jì)80 年代以來,計(jì)算機(jī)斷層成像技術(shù)等數(shù)字成像技術(shù)得到快速發(fā)展,許多醫(yī)療設(shè)備制造商開發(fā)了大量的醫(yī)療成像設(shè)備,但不同的國家和不同的制造商都擁有各自的醫(yī)療圖像文件格式。不但給醫(yī)學(xué)圖像信息交流和共享帶來了極大的難題,也嚴(yán)重阻礙了圖像處理、存檔和傳輸系統(tǒng)的建立。針對這一問題,美國放射協(xié)會(American College of Radiology,ACR)和電器協(xié)會(National Electrica Manufacturers Association,NEMA)共同制定了統(tǒng)一的數(shù)字化影像設(shè)備的圖像數(shù)據(jù)格式,即DICOM 格式[1]。目前國內(nèi)外醫(yī)療成像設(shè)備上普遍遵循DICOM 作為存儲和交換醫(yī)學(xué)圖像數(shù)據(jù)的標(biāo)準(zhǔn)解決方案[2]。
區(qū)別于常見的圖像格式,DICOM 格式文件同時(shí)包含圖像信息和大量有用的醫(yī)療相關(guān)信息,這造就了其編碼方式和文件結(jié)構(gòu)的復(fù)雜性,因此DICOM 圖像的讀取和顯示比其他格式的圖像難度要大。本文對DICOM 文件結(jié)構(gòu)進(jìn)行了簡單的介紹,然后給出了常用的醫(yī)學(xué)圖像處理軟件和平臺(Matlab、Python、VTK、ITK)讀取和顯示DICOM 文件的步驟和代碼,使開發(fā)人員能夠快速準(zhǔn)確地找到解析DICOM 文件的方法,節(jié)省開發(fā)時(shí)間,能夠把更多的精力放在醫(yī)學(xué)圖像后處理和可視化研究當(dāng)中。
物聯(lián)網(wǎng)即是通過射頻識別(RFID)、紅外感應(yīng)器、全球定位系統(tǒng)和激光掃描器等信息傳感設(shè)備,按約定的協(xié)議,把任何物體與互聯(lián)網(wǎng)相連接,進(jìn)行信息交換和通信,以實(shí)現(xiàn)對物體的智能化識別、定位、跟蹤、監(jiān)控和管理的一種網(wǎng)絡(luò)。目前,發(fā)展物聯(lián)網(wǎng)是我國國民經(jīng)濟(jì)發(fā)展的大好機(jī)遇,其中一個(gè)能廣泛發(fā)揮作用的領(lǐng)域就是果蔬運(yùn)輸系統(tǒng)。基于物聯(lián)網(wǎng)的果蔬運(yùn)輸系統(tǒng)會真正實(shí)現(xiàn)果蔬運(yùn)輸?shù)男畔⒒⒅悄芑⒕W(wǎng)絡(luò)化,極大地提高果蔬運(yùn)輸效率,大大降低果蔬運(yùn)輸成本。
DICOM 文件主要由三部分組成[3],如圖1 所示。
焊接現(xiàn)場地理環(huán)境復(fù)雜,加上晝夜溫差,會給管道連頭組對、焊接增加了很大的困難。管道連頭施工中常見的焊接缺陷為氣孔、未熔合、裂紋、內(nèi)凹及夾渣等,出現(xiàn)幾率最高的是未熔合、未焊透和氣孔。

圖1 DICOM文件結(jié)構(gòu)
//聲明像素類型和圖像維數(shù),并以此實(shí)例化要讀取的圖像類型
這是蘇軾為“東坡餅”寫的一首詩,描寫了一位美人用纖纖素手搓出顏色均勻的面,放入油中慢慢煎,生動形象的寫出了此餅因陋就簡的制作過程,以及出鍋后金黃的色澤,玲瓏剔透的皮相和香甜酥脆的口感。作者巧妙地勾勒出餅的勻稱、酥脆、色美、味香的特點(diǎn)。最后一句運(yùn)用修辭,將餅的形狀比喻成美人的釵環(huán),引人遐想,令人回味無窮。從詩中可以看出詩人熱愛生活,善于發(fā)現(xiàn)生活樂趣的高尚品質(zhì)。
2. 《山陰陸氏族譜》:陸游“力學(xué)不仕,嘗至臨安,有詩云:‘世味年來薄似紗,誰令騎馬客京華,小樓一夜聽春雨,深巷明朝賣杏花。矮紙斜行閑作草,晴窗細(xì)乳戲分茶。素衣莫起風(fēng)塵嘆,猶及清明可到家。’都人傳入禁中,高宗稱賞不止,由是名振京師。高宗雖慕公才,為檜所阻,不能用。及檜死,始除敕令所刪定官,出赴福州寧德主簿……”④
2)前綴:前綴是DICOM 文件標(biāo)識符,占用4 個(gè)字節(jié),內(nèi)容是大寫字母的字符串“DICM”用來判斷是否為DICOM文件;
3)數(shù)據(jù)集:數(shù)據(jù)集是數(shù)據(jù)元素的有序集合。這些數(shù)據(jù)元素包含了文件元數(shù)據(jù)、私有數(shù)據(jù)、患者以及檢查數(shù)據(jù)等。每一個(gè)數(shù)據(jù)元素由標(biāo)識符(tag)、值表述(value representation)、數(shù)據(jù)長度(value length)和數(shù)據(jù)域(value field)四部分組成[4]。
小浪底水利樞紐管理中心堅(jiān)持服務(wù)民生的理念,科學(xué)調(diào)度小浪底和西霞院工程,在防洪、防凌、減淤、供水、灌溉、發(fā)電等方面發(fā)揮了顯著的綜合效益。在管好工程、服務(wù)民生的基礎(chǔ)上,充分發(fā)揮在水利水電工程建設(shè)管理方面的技術(shù)、人才優(yōu)勢,積極穩(wěn)妥推進(jìn)多元化發(fā)展,形成了以管好民生工程為基礎(chǔ)、水電開發(fā)建設(shè)為主業(yè),帶動相關(guān)產(chǎn)業(yè)多元化發(fā)展的戰(zhàn)略格局。
(2)值表述占用兩個(gè)字節(jié),指明該數(shù)據(jù)元素的數(shù)據(jù)類型和格式;
全縣近幾年來在水稻病蟲綠色防控工作中取得了防治效果好、農(nóng)藥用量減的成績,在防控上也得到了一些經(jīng)驗(yàn),主要是:
進(jìn)行環(huán)境測試以確定拉伸強(qiáng)度,模量和彎曲強(qiáng)度,模量和吸水率。已經(jīng)在不同的濕度和溫度下在環(huán)境室(Daihan-Brand,DWTH-155)中研究了復(fù)合材料的機(jī)械性能。表2顯示了作為測試矩陣的環(huán)境條件。
(3)數(shù)據(jù)長度規(guī)定了數(shù)據(jù)元素的數(shù)據(jù)域中數(shù)據(jù)的長度;
(4)數(shù)據(jù)域存放真正的數(shù)據(jù),包含偶數(shù)個(gè)字節(jié)。
Matlab 是由美國Mathwork 公司推出的具有科學(xué)計(jì)算、符號運(yùn)算和圖形圖像處理等多種功能的軟件。盡管DICOM 格式較為復(fù)雜,但Matlab 圖像處理工具箱提供了相應(yīng)的讀取函數(shù):dicominfo()函數(shù)用于讀取DICOM 文件的元數(shù)據(jù),dicomread()函數(shù)用于讀取圖像數(shù)據(jù)[5]。前者會返回一個(gè)結(jié)構(gòu)體,里面包含了例如患者信息、檢查信息等DICOM 文件成像信息,后者返回一個(gè)圖像數(shù)組,表示圖像本身的像素信息。
Matlab 圖像處理工具箱中提供了多種的圖像顯示函數(shù),桌面顯示圖像一般使用imshow()函數(shù)。該函數(shù)的基本語法為imshow(I,[low high]),其中I即為dicomread()函數(shù)返回的圖像數(shù)組,[low high]表示顯示灰度圖像的范圍,imshow()函數(shù)會將所有小于等于low 的值顯示為黑色,所有大于等于high的值顯示為白色,使用默認(rèn)數(shù)量的灰度級別顯示介于low 和high 的中間色調(diào)。如果指定空矩陣imshow(I,[]),則默認(rèn)I 中的最小值作為黑色,最大值作為白色。
VTK 的全稱是Visualization Toolkit,即可視化工具包,是一個(gè)用于三維計(jì)算機(jī)圖形,圖像處理和可視化的開源軟件類庫[8]。對于不同的數(shù)據(jù)類型,VTK 提供了相應(yīng)的類對圖像文件進(jìn)行讀取操作。比如類vtkJPEGRReader 用于讀取JPG 格式的圖像。自VTK5.0 版本新增了vtkDICOMImageRead 類用于對DICOM 文件的讀取。因此使用VTK工具包可以直接讀取DICOM 圖像和部分頭文件信息(vtk-DICOMImageReader類只提供了例如患者姓名等部分常用信息提取函數(shù)),避免了底層代碼的開發(fā)。讀取關(guān)鍵代碼如下:
其中,p(x,y)為原始CT 值,pw(x,y)為映射后灰度值,gm為設(shè)備顯示最大灰度值,對于8 位的顯示設(shè)備,gm為255。
DICOM序列圖像讀取關(guān)鍵代碼如下:
VTK 的出現(xiàn)與醫(yī)學(xué)圖像可視化息息相關(guān),但VTK 對DICOM 格式文件讀取功能卻并不完善,比

圖2 Matlab顯示DICOM圖像
通常DICOM 圖像都有較高的空間分辨率來滿足臨床診斷需要,一般DICOM 圖像的最大灰度值不低于12bit,而一般的顯示設(shè)備只可以顯示8bit,因此對于醫(yī)學(xué)圖像顯示時(shí),常通過窗位和窗寬的調(diào)節(jié)用于顯示不同密度的部位,即臨床上所稱的肺窗、骨窗等[6]。CT 圖像的顯示中,可以通過調(diào)節(jié)窗寬和窗位來觀察不同的組織結(jié)構(gòu),若用w表示窗寬,l表示窗位,通過以下映射函數(shù)將CT 值轉(zhuǎn)換為灰度值:
VTK 圖像可視化的基本過程使用了管線機(jī)制(如圖3 所示),其中包括兩個(gè)基本模塊:可視化管線和渲染管線。可視化管線主要用于獲取或創(chuàng)建數(shù)據(jù)、處理數(shù)據(jù)、將數(shù)據(jù)寫入文件或?qū)?shù)據(jù)傳遞到渲染管線進(jìn)行顯示,渲染管道主要負(fù)責(zé)數(shù)據(jù)的可視化表達(dá)[9]。

圖3 VTK圖像流水線可視化流程

圖4 VTK顯示腦部MR圖像圖4 VTK顯示腦部MR圖像

圖4 VTK顯示腦部MR圖像圖4 VTK顯示腦部MR圖像
可視化管線中的vtkSource(數(shù)據(jù)源)是可視化流水線的數(shù)據(jù)源,負(fù)責(zé)數(shù)據(jù)的創(chuàng)建或者獲取,vtk-Filter(過濾器)主要負(fù)責(zé)對數(shù)據(jù)進(jìn)行處理,vtkMapper(映射器)是可視化管線的終點(diǎn),負(fù)責(zé)將圖像數(shù)據(jù)映射為圖形數(shù)據(jù),是可視化管線和渲染管線之間的橋梁。
渲染管線中的vtkActor(演員)是渲染場景中的實(shí)體數(shù)據(jù),vtkRender(繪制器)負(fù)責(zé)圖像的渲染繪制,一個(gè)繪制器可以繪制多個(gè)數(shù)據(jù),vtkRenderwindow(窗口)負(fù)責(zé)可視化窗口的渲染繪制[10]。VTK顯示圖像的關(guān)鍵代碼如下:
(1)標(biāo)識符占用四個(gè)字節(jié),前兩個(gè)字節(jié)是組號,后兩個(gè)字節(jié)是元素號,組號和元素號組成標(biāo)識符唯一標(biāo)識特定的數(shù)據(jù)元素(例如:0010|0010 代表患者姓名,0008|0015 代表檢查部位)。相應(yīng)的標(biāo)識符檢索出來的數(shù)據(jù)可以在DICOM數(shù)據(jù)字典中查詢;
VTK 作為一個(gè)強(qiáng)大的圖像處理和可視化工具包,顯示圖形不用每次經(jīng)過如此繁瑣的流程。VTK提供了vtkImageViewer2 類實(shí)現(xiàn)圖像的顯示。該類封裝了以上所提到的可視化管線和渲染管線,提供了窗位窗寬調(diào)節(jié)、切片及切片方向選擇等設(shè)置接口,可以方便的完成圖像的顯示和交互。尤其適用于醫(yī)學(xué)切片顯示。主要代碼如下:如不能讀取多幀DICOM 圖像,而且也沒有實(shí)現(xiàn)對DICOM 圖像的寫操作。顯然使用VTK 現(xiàn)有的類并不滿足實(shí)際應(yīng)用的需求,對DICOM 圖像的讀寫操作支持較好的函數(shù)庫是GDCM 和DCMITK,而ITK就是封裝了GDCM 函數(shù)庫對DICOM 圖像進(jìn)行讀寫。ITK是一個(gè)使用C++語言,面向?qū)ο螅捎媚0寰幊碳夹g(shù)的跨平臺開源軟件開發(fā)包,是針對醫(yī)學(xué)影像領(lǐng)域開發(fā)的圖像處理和配準(zhǔn)的算法平臺[11]。
在ITK 中,讀寫DICOM 文件的功能是由GDCM函數(shù)庫提供的。ITK 封裝了itk::GDCMImageIO 類對象建立與GDCM 庫的連接,從而實(shí)現(xiàn)讀取DICOM 圖像的功能[11]。雖然ITK 在DICOM 圖像的讀寫、后處理方面功能更加全面,但是ITK 沒有集成可視化的功能,在實(shí)際應(yīng)用中經(jīng)常與VTK 結(jié)合,以便觀察結(jié)果和進(jìn)行交互操作[12]。ITK 和VTK 相結(jié)合的流程圖如圖5 所示,由于ITK 和VTK 使用的是不同編程風(fēng)格和數(shù)據(jù)處理方式,所以使用itktovtkImageFiltre 類實(shí)現(xiàn)數(shù)據(jù)的連接和交換,即該類是實(shí)現(xiàn)ITK到VTK的橋梁。ITK和VTK的坐標(biāo)系的Y軸方向是相反的,所以使用vtkImageFlip 類對圖像進(jìn)行翻轉(zhuǎn)。最后將圖像送入VTK 可視化管線,完成圖像的顯示功能[13]。

圖5 ITK和VTK結(jié)合流程圖圖5 ITK和VTK結(jié)合流程圖

圖5 ITK和VTK結(jié)合流程圖圖5 ITK和VTK結(jié)合流程圖
Matlab 讀取和顯示DICOM 圖像關(guān)鍵代碼如下。
1)導(dǎo)言:導(dǎo)言是用于存放文件的相關(guān)說明,共有128個(gè)字節(jié);
由于CT圖像的成像信號是轉(zhuǎn)化為灰度值保存在DICOM 文件中,所以用dicominfo 函數(shù)讀取到截距(Rescal Intrcept)和斜率(Rescale Slope)元素進(jìn)行線性變換,將原圖像像素?cái)?shù)據(jù)轉(zhuǎn)換為有實(shí)際意義的ct值。如圖2(a)、(b)所示,兩幅圖從視覺上沒有明顯差異,但原始圖像的像素值都為正值,沒有實(shí)際意義,轉(zhuǎn)化ct 值圖像像素值有正有負(fù),表示人體不同組織對X 射線的吸收率,一般空氣的CT 值為-1000,水的CT 值為0,致密骨的CT 值為1000[7]。沒有醫(yī)學(xué)背景的圖像處理研究者易在此犯錯(cuò),把原始圖像的像素值直接當(dāng)作圖像的ct 值處理。圖2(c)是窗位為60HU、窗寬360HU 腹腔窗口圖像(該CT 圖像默認(rèn)的窗口,窗位和窗寬信息在元數(shù)據(jù)中可以讀取)圖像。圖2(d)窗位為700HU,窗寬為1500HU的肺窗口圖像。
PBL教學(xué)是將基礎(chǔ)理論知識和實(shí)踐有機(jī)結(jié)合起來,打破學(xué)科界限,以問題為主線、以學(xué)生為中心進(jìn)行小組討論或教學(xué)。PBL教學(xué)能夠讓學(xué)生在情景中、在教師指導(dǎo)下思考、分析實(shí)際問題,進(jìn)而解決問題。在整個(gè)過程中,學(xué)生主動參與,自行收集資料,構(gòu)建有用的知識框架。這種探索式學(xué)習(xí)歷程不僅使學(xué)生學(xué)到有用的知識,而且能培養(yǎng)其探索意識,以及發(fā)現(xiàn)問題、思考問題和解決問題能力,對科研思維的培養(yǎng)、科研能力的提高至關(guān)重要。
VTK 作為一個(gè)強(qiáng)大的圖像處理和可視化工具包,顯示圖形不用每次經(jīng)過如此繁瑣的流程。VTK提供了vtkImageViewer2 類實(shí)現(xiàn)圖像的顯示。該類封裝了以上所提到的可視化管線和渲染管線,提供了窗位窗寬調(diào)節(jié)、切片及切片方向選擇等設(shè)置接口,可以方便的完成圖像的顯示和交互。尤其適用于醫(yī)學(xué)切片顯示。主要代碼如下:
VTK 的出現(xiàn)與醫(yī)學(xué)圖像可視化息息相關(guān),但VTK 對DICOM 格式文件讀取功能卻并不完善,比如不能讀取多幀DICOM 圖像,而且也沒有實(shí)現(xiàn)對DICOM 圖像的寫操作。顯然使用VTK 現(xiàn)有的類并不滿足實(shí)際應(yīng)用的需求,對DICOM 圖像的讀寫操作支持較好的函數(shù)庫是GDCM 和DCMITK,而ITK就是封裝了GDCM 函數(shù)庫對DICOM 圖像進(jìn)行讀寫。ITK是一個(gè)使用C++語言,面向?qū)ο螅捎媚0寰幊碳夹g(shù)的跨平臺開源軟件開發(fā)包,是針對醫(yī)學(xué)影像領(lǐng)域開發(fā)的圖像處理和配準(zhǔn)的算法平臺[11]。
在ITK 中,讀寫DICOM 文件的功能是由GDCM函數(shù)庫提供的。ITK 封裝了itk::GDCMImageIO 類對象建立與GDCM 庫的連接,從而實(shí)現(xiàn)讀取DICOM 圖像的功能[11]。雖然ITK 在DICOM 圖像的讀寫、后處理方面功能更加全面,但是ITK 沒有集成可視化的功能,在實(shí)際應(yīng)用中經(jīng)常與VTK 結(jié)合,以便觀察結(jié)果和進(jìn)行交互操作[12]。ITK 和VTK 相結(jié)合的流程圖如圖5 所示,由于ITK 和VTK 使用的是不同編程風(fēng)格和數(shù)據(jù)處理方式,所以使用itktovtkImageFiltre 類實(shí)現(xiàn)數(shù)據(jù)的連接和交換,即該類是實(shí)現(xiàn)ITK到VTK的橋梁。ITK和VTK的坐標(biāo)系的Y軸方向是相反的,所以使用vtkImageFlip 類對圖像進(jìn)行翻轉(zhuǎn)。最后將圖像送入VTK 可視化管線,完成圖像的顯示功能[13]。
DICOM序列圖像讀取關(guān)鍵代碼如下:
//聲明像素類型和圖像維數(shù),并以此實(shí)例化要讀取的圖像類型
幼兒的主體意識是在生活中逐漸形成并獲得發(fā)展的,家庭氛圍在寶寶主體意識的發(fā)展中起到重要作用。以下是3種類型家庭對寶寶主體意識發(fā)展的影響:
由于Python第三方庫功能強(qiáng)大,越來越多的學(xué)者熱衷于Python 語言做醫(yī)學(xué)圖像處理研究。本文實(shí)驗(yàn)用pydicom 庫讀取20 張肺部CT 圖像,并采用cv 庫的Otsu 閾值分割法分割出肺實(shí)質(zhì),結(jié)果如圖8和圖9所示。pydicom庫可以讀取DICOM文件的全部頭文件信息,由于篇幅限制只給出部分頭文件信息,如圖10所示。

圖8 原始肺部CT序列

圖9 分割肺實(shí)質(zhì)序列

圖10 pydicom讀取的部分頭文件信息
Matlab 安裝便捷,功能強(qiáng)大,語言簡潔,使用圖像處理工具箱中的醫(yī)學(xué)圖像處理函數(shù)可以方便快捷地實(shí)現(xiàn)醫(yī)學(xué)圖像的讀寫和簡單處理。Dicominfo()可以讀取DICOM 文件的全部頭文件信息,另外Matlab 可以支持多幀DICOM 圖像和壓縮格式DICOM 圖像的讀取。Matlab 內(nèi)置工具箱可應(yīng)用領(lǐng)域廣泛,功能強(qiáng)大,一直以來都是圖像處理應(yīng)用的主流軟件之一。
VTK 和ITK 本來就是針對醫(yī)學(xué)影像領(lǐng)域開發(fā)的圖像處理和可視化工具,ITK 主要用于圖像預(yù)處理、分割、配準(zhǔn)和分析,而VTK 在圖像渲染、交互和三維可視化表現(xiàn)出色。但VTK對于DICOM 圖像的讀取功能不是特別完善,不支持多幀DICOM 圖像和壓縮格式DICOM 圖像的讀取,也不支持DICOM格式圖像的寫操作。得益于GDCM 函數(shù)庫,ITK 在DICOM圖像的讀寫功能更加全面,而ITK不支持?jǐn)?shù)據(jù)的可視化,所以在實(shí)際應(yīng)用中,經(jīng)常把VTK 和ITK 結(jié)合使用,例如:ITK-SNAP、MITK 等醫(yī)學(xué)圖像處理平臺的開發(fā)。ITK 和VTK 的安裝與環(huán)境配置過程比較復(fù)雜,且兩者開發(fā)所采用的編程風(fēng)格差異較大,這對使用者在編程方面有較高的要求。不過,ITK 和VTK 提供了豐富的程序接口(C++、Matlab、JAVA、Python等),使用者可以使用熟悉的語言進(jìn)行開發(fā)。
Python 因其簡便易懂的語言和眾多軟件庫的支撐而成為最受歡迎的編程語言之一。pydicom是一個(gè)讀寫DICOM 格式文件方面很成熟的庫,可以讀寫所有標(biāo)準(zhǔn)DICOM 文件,包括嵌套序列,還可以讀取全部DICOM 頭文件信息,而且讀取速度非常快,每百張圖片大約需要3s[15]。Python在人工智能和深度學(xué)習(xí)方面的成就也使得越來越多的研究人員將Python 作為醫(yī)學(xué)圖像處理相關(guān)應(yīng)用的開發(fā)語言,再結(jié)合醫(yī)療數(shù)據(jù)樣本量巨大的優(yōu)勢,開發(fā)一些輔助醫(yī)療的設(shè)備和應(yīng)用。
DICOM 標(biāo)準(zhǔn)作為醫(yī)學(xué)圖像文件的國際標(biāo)準(zhǔn),是部署最廣泛的醫(yī)療信息標(biāo)準(zhǔn)之一,目前有百億級符合DICOM 標(biāo)準(zhǔn)的醫(yī)學(xué)圖像用于臨床,是專業(yè)醫(yī)學(xué)圖像處理和分析人員必須掌握的一種圖像格式。而且不論是做醫(yī)學(xué)圖像后處理、可視化還是人工智能,正確讀取標(biāo)準(zhǔn)DIOCM 文件信息往往是第一步。本文介紹了目前常用的可以解析DICOM 文件的第三方庫和讀寫方法,在工程中引入它們能夠高效地進(jìn)行項(xiàng)目開發(fā),而不需要使用者了解過多的底層解析操作,把精力可以集中在新技術(shù)理論研發(fā)上。