软件版本
dcmtk 3.6.7
自动纠错的全局变量
输入数据的自动纠错是一个全局变量,定义在dcmtk/dcmdata/dcobject.h
中,如下所示:
/** This flags defines whether automatic correction should be applied to input
* data (e.g.\ stripping of padding blanks, removal of blanks in UIDs, etc).
* Default is enabled.
*/
extern DCMTK_DCMDATA_EXPORT OFGlobal<OFBool> dcmEnableAutomaticInputDataCorrection; /* default OFTrue */
可以看出,它的默认值是true
。
识别DCM树形结构
识别dicomdir树形结构的方法,一般是进行遍历,按着PATIENT->STUDY->SERIES->IMAGE顺序进行的。
每当读起来一个记录节点的时候,首先判断记录类型,然后就更方便读取下去。
发生错误的地方
当我将dcmEnableAutomaticInputDataCorrection
设置成false
的情况下。发现原本应该读取类型为ERT_Patient
的记录类型识别成了ERT_Private
,导致不能正确进行下去。
注意:在默认值的情况下(自动纠错模式),这里是能够读取正确的。
分析
将数据打印出来进行分析。
使用自动纠错模式
看图上文字标记处,识别出来类型为“PATIENT”。
使用严格模式(不进行自动纠错)
看图上标记的文字,没能将类型识别出来,当成了一个私有类型。
记录类型为**[PATIENT ],而开启自动纠错模式的为[PATIENT]**,两者相差一个空格,细节如下所示:
结论
由于dcmtk自身的原因,使用非自动纠错模式会对于DICOMDIR识别产生错误的识别,需要使用默认的自动输入数据纠错模式。