譯者簡介:ASCE1885抗楔, 《Android 高級進階》作者鲸湃。
原文鏈接:https://medium.com/@taposhdr/medical-image-analysis-with-deep-learning-i-23d518abf531
基于深度學習技術對圖像和視頻進行分析讽坏,并將其應用到自動駕駛溃列,無人機等各種領域中,已經成為新的研究前沿履澳。最近的一篇研究論文 “A Neural Algorithm of Artistic Style”(https://arxiv.org/abs/1508.06576)嘶窄,展示了如何將一個藝術家的風格經過轉換后,應用到一張圖像中距贷,從而生成一張具備這個風格的新的圖像柄冲。其他的論文例如 “Generative Adversarial Networks”(GAN,生成式對抗網絡忠蝗,https://arxiv.org/abs/1406.2661) 和 “Wasserstein GAN”(https://arxiv.org/pdf/1701.07875) 為我們開發(fā)能夠基于輸入數(shù)據(jù)自我學習創(chuàng)造新數(shù)據(jù)的模型鋪平了道路现横。從而開啟了半監(jiān)督學習的時代并為未來的無監(jiān)督學習鋪平道路。
這些研究領域著重點仍然在通用圖像上阁最,而我們的目標是將這些研究成果應用到醫(yī)學圖像中戒祠,以幫助醫(yī)療保健行業(yè)。我們會從基礎知識開始介紹速种。本文首先以圖像處理的基礎知識為切入點姜盈,接著介紹醫(yī)學圖像數(shù)據(jù)格式,最后以可視化的方式對醫(yī)學數(shù)據(jù)進行展示配阵。在下一篇文章馏颂,我們將深入介紹一些卷積神經網絡算法并使用 Keras(https://keras.io/) 來預測肺癌。
圖像處理基礎(基于 Python)
雖然有很多圖像處理函數(shù)庫棋傍,但 OpenCV(open computer vision救拉,https://opencv.org/)以其龐大的社區(qū)支持和對 C++,Java 和 Python 的可用性支持瘫拣,已然成為主流的選擇亿絮。我個人喜歡在 Jupyter notebook(http://jupyter.org/index.html)中使用 OpenCV。
OpenCV 的安裝有兩種方式:
- 命令行中執(zhí)行命令:
pip install opencv-python
- 從 opencv.org 下載源碼進行安裝
現(xiàn)在打開 Jupyter notebook 并確定你導入了 cv2 函數(shù)庫,同時你還需要導入 numpy 和 matplotlib 函數(shù)庫從而在 Jupyter 中可以看到繪制出來的圖像派昧。
接著使用下面的代碼黔姜,讓我們來看看在 Jupyter 中是否可以打開一張圖片并顯示它。
基本的人臉檢測
接下來讓我們做一些有趣的實驗斗锭,例如人臉檢測地淀。人臉檢測中我們將使用一個開源的 xml stump-based 20x20 的 gentle adaboost 正臉檢測器,它是由 Rainer Lienhart 所創(chuàng)建的岖是。關于 Haar 級聯(lián)檢測的細節(jié)可以參見這篇文章:https://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html帮毁。
關于更多使用 OpenCV 進行圖像處理的例子可以參見這份文檔:http://docs.opencv.org/trunk/d6/d00/tutorial_py_root.html。讀者可以自己嘗試其他的例子〔虺牛現(xiàn)在我們已經了解基本的圖像處理烈疚,接下來我們來認識下醫(yī)學圖像數(shù)據(jù)格式。
醫(yī)學圖像數(shù)據(jù)格式
醫(yī)學圖像遵循醫(yī)學數(shù)字成像和通信(DICOM)標準(https://en.wikipedia.org/wiki/DICOM)聪轿,實現(xiàn)圖像數(shù)據(jù)的存儲和交換爷肝。該標準的第一個版本發(fā)布于 1985 年,從那以后經歷了幾次改進陆错,這個標準使用了自定義的文件格式和通信協(xié)議灯抛。
- 文件格式:所有患者的醫(yī)學圖像都以 DICOM 文件格式進行存儲。這個格式包含關于患者的 PHI(protected health information音瓷,https://en.wikipedia.org/wiki/Protected_health_information)信息对嚼,例如姓名,性別绳慎,年齡纵竖,以及其他圖像相關信息比如捕獲并生成圖像的設備信息,醫(yī)療的一些上下文相關信息等杏愤。醫(yī)學圖像設備生成 DICOM 文件靡砌,醫(yī)生使用 DICOM 閱讀器(能夠顯示 DICOM 圖像的計算機軟件)閱讀并對圖像中發(fā)現(xiàn)的問題進行診斷。
- 通信協(xié)議:DICOM 通信協(xié)議用于檢索存檔中的包含檢查信息的圖像數(shù)據(jù)珊楼,并將這個數(shù)據(jù)還原到工作站上予以顯示通殃。所有連接到醫(yī)院網絡中的醫(yī)學圖像應用都使用 DICOM 協(xié)議來進行信息的交換,這些信息大部分是 DICOM 圖像數(shù)據(jù)厕宗,當然也會包含一些患者和流程相關的信息邓了。DICOM 通信協(xié)議還包含更高級的網絡命令,可以用來控制和跟蹤治療媳瞪,調度流程,報告狀態(tài)和分擔醫(yī)生和影像設備之間的工作量照宝。
關于 DICOM 標準細節(jié)可以參見這個博客:http://dicomiseasy.blogspot.com/蛇受。
解析 DICOM 文件
pydicom(https://pypi.python.org/pypi/pydicom) 是一個用來解析 DICOM 圖像的很棒的 python 函數(shù)庫。本節(jié)我們來看看如何利用它在 Jupyter notebook 中渲染 DICOM 圖像厕鹃。
使用命令 pip install pydicom
安裝 pydicom兢仰,安裝完成后乍丈,打開 Jupyter notebook,如下代碼所示導入 dicom 函數(shù)庫和其他需要的一些函數(shù)庫:
同時我們也需要用到像 pandas把将,scipy轻专,skimage,mpl_toolkit 等函數(shù)庫來進行數(shù)據(jù)的處理和解析察蹲。
網上有大量免費可用的 DICOM 數(shù)據(jù)集请垛,但這里有一些可以幫助你入門的數(shù)據(jù)集:
- Kaggle 競賽和數(shù)據(jù)集(https://www.kaggle.com/):我個人的最愛,從這里(https://www.kaggle.com/c/data-science-bowl-2017/data)可以獲取肺癌和糖尿病視網膜病變競賽的數(shù)據(jù)集洽议。
- DICOM Library(https://www.dicomlibrary.com/):免費的在線醫(yī)學 DICOM 圖像和視頻文件共享服務宗收,為了教育和科研目的。
- Osirix 數(shù)據(jù)集(http://www.osirix-viewer.com/resources/dicom-image-library/):通過多種成像方式提供大量的人體 DICOM 圖像數(shù)據(jù)集亚兄。
- 可視化人體數(shù)據(jù)集(https://mri.radiology.uiowa.edu/visible_human_datasets.html):作為可視化人體項目(http://www.nlm.nih.gov/research/visible/visible_human.html)的一部分混稽,這個地址的數(shù)據(jù)集可以自由下載和發(fā)布,這點顯得有點奇怪审胚,因為整個可視化人體項目的數(shù)據(jù)獲取不是免費的匈勋,而且也很麻煩,詳情可以參見這里:https://www.nlm.nih.gov/research/visible/getting_data.html膳叨。
- The Zubal Phantom(http://noodle.med.yale.edu/zubal/):這個網站提供了兩個人類男性關于 CT 和 MRI 的多個數(shù)據(jù)集洽洁,這些數(shù)據(jù)是可以自由下載和發(fā)布的。
從上面這些地方可以下載 DICOM 文件懒鉴,下載完成后可以使用 jupyter notebook 進行加載诡挂,代碼如下所示:
接著將 DICOM 圖像加載進一個列表中:
步驟一:在 Jupyter 中進行 DICOM 圖像的基本閱讀
第一行代碼我們加載數(shù)組中第一張 DICOM 文件,并將其引用保存在變量 RefDs
中临谱,進而利用它獲取元數(shù)據(jù)璃俗,它的文件名位于 lstFilesDCM
列表的開頭。
我們接著沿著 x悉默,y 和 z 笛卡爾坐標軸計算三維 NumPy 數(shù)組的總尺寸城豁,等于:(一張切片中像素行的數(shù)量)x (一張切片中像素列的數(shù)量)x(切片的數(shù)量)。最后使用 DICOM 文件中的 PixelSpacing
和 SliceThickness
屬性計算三個坐標軸中像素的間距(spacing)抄课。我們將數(shù)組的尺寸存放在 ConstPixelDims
變量中唱星,將像素間距存放在 ConstPixelSpacing
中。
步驟二:深入 DICOM 文件格式的細節(jié)
CT 掃描中的測量單位是亨氏單位(Hounsfield Unit跟磨,HU)间聊,它是用來衡量放射密度的。為了得到精確的測量結果抵拘,CT 掃描儀需要經過嚴格的校準哎榴。關于 CT 掃描測量的細節(jié)內容可以在這里找到:https://web.archive.org/web/20070926231241/http://www.intl.elsevierhealth.com/e-books/pdf/940.pdf。
每一個像素都被賦予了一個數(shù)值(CT 值),它是包含在相應體素(voxel)中的所有衰減值的平均值尚蝌。這個數(shù)字是和水的衰減值相比較得到的迎变,并按比例進行顯示,單位是 Hounsfield units(HU)飘言,為紀念亨斯菲爾德爵士衣形,以他的名字命名。
這個測量方式將水的衰減值設定為零(HU)姿鸿。CT 取值范圍一般是 2000 HU谆吴,雖然一些現(xiàn)代掃描儀有更大的范圍能達到 4000 HU。每個數(shù)值代表一種灰度陰影般妙,這個光譜的兩端分別是 +1000(白色)和 -1000(黑色)纪铺。
有些掃描儀有柱面掃描邊界,但輸出的圖像是正方形的碟渺。在這些邊界之外的像素將被設置為固定的值 -2000鲜锚。
第一步通常是將這些值設置為 0。接下來苫拍,把這些值乘以重新調節(jié)過的斜率芜繁,再加上截距(通常方便的存儲在掃描得到的元數(shù)據(jù)中),就得到以 HU 為單位的取值绒极。
在下一篇文章中骏令,我們將使用 Kaggle 的肺癌數(shù)據(jù)集和并使用 Keras 提供的卷積神經網絡。我們將在本文介紹的知識基礎上進行下一篇文章的講解垄提。