醫療圖像解析
Dicom
后綴: .dcm
、.DCM
Dicom中規定的坐標系是以人坐標系為絕對坐標系的,規定X軸正向指向病人的左側,Y軸正向指向病人的背部,Z軸正向指向病人的頭部。但是,坐標點的位置,每個廠商都有自己的看法
下圖展示了成像過程中對應的坐標系
成像坐標系
三視圖
圖片信息中的Tag說明
在DICOM中,是通過Image Position和Image Orientation來描述當前的圖像和人體坐標系的相對位置的。
解析舉例
import dicom
import pylab
import os
dcm_img_base_url = "/home/fan/datas/dcmFile"
ds = dicom.read_file(os.path.join(dcm_img_base_url, "N2D_0020.dcm"))
print("圖片中存在的屬性: ", ds.dir("pat"))
print("病人方位: ", ds.PatientOrientation)
# 以下兩個屬性標簽描述圖像位置信息
print("圖像病人方向: ", ds.ImageOrientationPatient)
print("圖像病人位置: ", ds.ImagePositionPatient)
# CT矩陣
pix = ds.pixel_array
# 打印圖片
pylab.imshow(pix, cmap=pylab.cm.bone)
pylab.show()
ds1 = dicom.read_file(os.path.join(dcm_img_base_url, "N2D_0140.dcm"))
pix1 = ds1.pixel_array
pylab.imshow(pix1, cmap=pylab.cm.bone)
pylab.show()
以上使用的圖片為ADNI數據集中的一個.nii
圖像轉換為Dicom圖像后的一個圖片
圖片中存在的部分信息為
ImageOrientationPatient: ['1', '-2.18345624778243e-11', '0', '2.1834562200241e-11', '1', '2.1834562200241e-11']
ImagePositionPatient: ['-101.501693725586', '-141.694915766789', '-90.989616394043']
之后我們需要使用這兩個量來進行定位線的計算,VR,MPR的空間計算
這兩個量使用的空間坐標系
原始坐標系為O,O1坐標系繞z軸以O系統的基礎上旋轉了θ的一個角度,我們可以把這個矩陣記錄為
通過一系列這樣的變換,我們可以得到最終的變換矩陣為
把T記為
我們的圖像是一個2維的量,由於當前圖像像素點的z方向坐標相對於當前圖像的坐標系的值都為0,當前圖像的坐標點可以用(x,y,0)的向量來表示,表示在齊次坐標方式就為(x,y,0,1),那么,這時想要計算出圖像上的某個點相對於原始坐標系的坐標,就直接和轉換矩陣T相乘即可,記為
Image Orientation的6個量就顯而易見為
Image Position中的三個量為
引用
Dicom中的Image Orientation/Position的理解和應用
醫學影像處理軟件之Image Orientation相關介紹
醫學圖像數據格式: DICOM