匯入需要用的模組
import ******itk
from scipy import ndimage as ndi
from skimage.segmentation import clear_border
from skimage.measure import label, regionprops
from skimage.morphology import disk, dilation, binary_erosion, binary_closing
from skimage.filters import roberts, sobel
import cv2
影象中很多不是我們需要的區域,需要對影象中的有效區域進行提取,大致的思路是先轉化成二值影象,清除影象邊界的小塊區域,分割影象,保留2個最大的連通區域,影象腐蝕操作,影象閉環操作,將肺區小孔進行填充,二值化影象疊加到輸出影象
def
get_pixels_hu_by_******itk
(dicom_dir)
:'''
讀取某資料夾內的所有dicom檔案,並提取畫素值(-4000 ~ 4000)
:param src_dir: dicom資料夾路徑
:return: image array
'''reader = ******itk.imageseriesreader(
) dicom_names = reader.getgdcmseriesfilenames(dicom_dir)
reader.setfilenames(dicom_names)
image = reader.execute(
) img_array = ******itk.getarrayfromimage(image)
img_array[img_array ==
-2000]=
0return img_array
defnormalize_hu
(image)
:'''
將輸入影象的畫素值(-4000 ~ 4000)歸一化到0~1之間
:param image 輸入的影象陣列
:return: 歸一化處理後的影象陣列
'''min_bound =
-1000.0
max_bound =
400.0
image =
(image - min_bound)
/(max_bound - min_bound)
image[image >1]
=1. image[image <0]
=0.return image
defget_segmented_lungs
(im)
:'''
對輸入的影象進行肺部區域分割,提取有效的肺部區域,用於模型訓練
:param 輸入的影象
:return: 返回分割結果
'''# step 1: 轉換為二值化影象
binary = im <
-400
# step 2: 清除影象邊界的小塊區域
cleared = clear_border(binary)
# step 3: 分割影象
label_image = label(cleared)
# step 4: 保留2個最大的連通區域
areas =
[r.area for r in regionprops(label_image)
] areas.sort()if
len(areas)
>2:
for region in regionprops(label_image)
:if region.area < areas[-2
]:for coordinates in region.coords:
label_image[coordinates[0]
, coordinates[1]
]=0 binary = label_image >
0# step 5: 影象腐蝕操作,將結節與血管剝離
selem = disk(2)
binary = binary_erosion(binary, selem)
# step 6: 影象閉環操作,保留貼近肺壁的結節
selem = disk(10)
binary = binary_closing(binary, selem)
# step 7: 進一步將肺區殘餘小孔區域填充
edges = roberts(binary)
binary = ndi.binary_fill_holes(edges)
# step 8: 將二值化影象疊加到輸入影象上
get_high_vals = binary ==
0 im[get_high_vals]=-
2000
print
('lung segmentation complete.'
)return im, binary
if __name__ ==
'__main__'
: dicom_dir =
'./data/dicom_demo/'
# 提取dicom檔案中的畫素值
image = get_pixels_hu_by_******itk(dicom_dir)
im, binary = get_segmented_lungs(image[
133]
) org_img = normalize_hu(image[
133]
) cv2.imwrite(
'./temp_dir/chapter3_segmentation_im.png'
, org_img*
255)
cv2.imwrite(
'./temp_dir/chapter3_segmentation_binary.png'
, binary*
255)
SCI 收錄醫學影像學期刊分析
放射學 radiology 影像學 neuroimage 超聲學 ultrasound in obstetrics and gynecology 核醫學 journal of nuclear medicine 其中影像學著名期刊如下,其他方向請參照 1 期刊名稱期 年出版國08影響因子 neuroi...
AI 醫學影像的現狀 機遇與挑戰
王立威 有三個領域會與深度學習進行緊密的結合 乙個是無人駕駛 乙個是金融領域 再乙個則是醫學領域。無人駕駛在計算機視覺的識別技術已經趨於成熟,具備可以與機器學習進行深入結合的條件,但作為乙個與汽車實體緊密相關的應用方向,在高校內做研究的空間相對受限 此外,駕駛作為一種動態活動,相對於靜態影象識別的難...
FDA首次批准iPad成為醫學影像診斷輔助產品
美國食品和藥物管理局已經首次批准了蘋果ipad iphone作為醫療影像診斷放射學的輔助產品使用,之前,該應用榮獲蘋果 最佳iphone醫療保健及健身應用 設計獎。fda表示,該程式可以再沒有醫療工作站時替代使用,但並非要取代工作站裝置。fda中心器械首席醫學專家威廉梅塞爾博士還認為,ipad重要的...