首页 > 解决方案 > Matlab:使用动态字段名编写 dicom 元数据

问题描述

我正在尝试将 dicom 元信息写入 dicom 文件。在这里,字段名根据给定的元信息动态变化。

for j = 1:obj.pln.propStf.numOfBeams
    eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.ReferencedBeamNumber = j;'])
    eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamDoseSpecificationPoint = [j,j,j];'])
    eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamDose = j;'])
    eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamMeterset = j;'])
    eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamDosePointDepth = j;'])
    eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamDosePointSSD = j;'])
end

正如您在此处看到的那样meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.ReferencedBeamNumber = j;,结构的字段名称会随着中给出的光束数量而动态变化obj.pln.propStf.numOfBeams

这种方法的问题是,如果我要尝试拥有类似的东西:eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.ReferencedBeamNumber = 'TEST';']). eval 函数尝试查找文本“TEST”。

所以问题是,对于给定的问题是否有不同的方法而不是使用 eval?

标签: matlabstructeval

解决方案


代替使用evalMATLAB,您可以使用字符串访问动态结构字段:

mystruct.hello=1;
mystruct.('hello')=1; % equivalent.

做就是了:

meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.(['Item_'num2str(j)']).ReferencedBeamNumber = j;

推荐阅读