Matlab:使用动态字段名编写 dicom 元数据

Matlab: writting dicom metadata with dynamic fieldnames

我正在尝试将 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?

MATLAB 允许您使用字符串访问动态结构字段,而不是使用 eval

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

就这样:

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