注意多值获取
Value中如果有\\将两个值分开的,那么就表示这个值是多值,也就是由不只一个值构成,这时取值时需要用多值数据结构进行获取(如数组),否则会导致错误……
如PixelSpaing就是多值,获取时虽然也可以通过dataset.tryGetSingleValue<double>(DicomTag.PixelSacing,out double px)或dataset.GetSingleValue(DicomTag.PixelSacing)获取;然PixelSpacing也存在x轴的像素宽度与y轴的像素宽度不一致的情况,通过前述方法,则在后续使用PixelSpcing进行图像还原时可能导致图像与真实图像不相符的情况。
PixelSpacing: dataset.TryGetValues<double>(DicomTag.PixelSpacing, out double[] px);
通过此种方式获取到两个值,px[0]为像素在x轴上占用的空间大小 ,px[1]为像素在y轴上占用的空间大小。以此为基础再进行图像的还原,才能保证图像与原始图像一致。
层间距不要通过标签获取
实际来看,通过标签Spacing Between Slices获取到的层间距是不准确的:
- 可能获取不到;此标签可能不存在
- 可能大于或小于真实距离
层间距需要通过图片的位置数据来计算:通过ImagePositon来计算,如扫描是沿解剖学方位的Z轴(从脚到头为正方向)进行的,那么就获取前后两张图片的坐标,Z轴之差的绝对值即是层间距。此一定要注意层间距,是距离,是正值;而前后两张图片Z轴之差是可能为负值的。
单帧与多帧图像标签获取方法不一
单帧通过dataset.tryGetSingleValue<T>()或dataset.GryGetVales<T>()方法就能获取;但多帧时,一些标签这样是获取不到的。
如下为多帧时一些重要标签在获取时需要注意:
Intercept 、Slope、ImagePosition、PixelSpacing
详细获取可参考后续文章。
一些标签不要通过Tag获取
主要是这些标签可能是由人工录入或提前设置的,在扫描时并没有修改相应设置,此就会造成这些标签并不准确。
如:NumberOfSlices、PatientPosition、ImageOrientation
Dicom中 NumberOfSlices如果不能通过Tag获取时,则需要通过计算才能得到,其计算逻辑如下:
ImageOrientaion不一定与人体方向一致
特别是ImageOrientaion,此标签是表示图片方向的,此标签可能与实际的图像方向并不匹配,此一定要注意。若实际中需要用此标签时,一定要根据实际情况进行纠正,以保证后续计算的准确性。