来自MATLAB的数据存储和导出



这是我遇到的问题的背景信息:

1)输出是一个单元格数组,每个单元格包含一个大小的矩阵= 1024 x 1024,type = double

2)LabelBout是一个与输出相同的单元格数组,除了每个矩阵都已二进制。

3)我正在使用函数区域来提取ROI的平均强度和质心值(每个图像中都有多个ROI)

的每个单元格

4)Props是一个5 x 1结构,具有2个字段(质心和平均强度)

问题:我想在每个矩阵中使用每个ROI的平均强度值并导出到Excel。这是我到目前为止所拥有的:

for i = 1:size(output,2)
    props = regionprops(labelboutput{1,i},output{1,i},'MeanIntensity','Centroid');  
end 
for i = 1:size(output,2)
    meanValues = getfield(props(1:length(props),'MeanIntensity'));
end 
writetable(struct2table(props), 'advanced_test.xlsx');

似乎有一些问题:

1)我的getfield命令无法正常工作,并且出现错误:"索引超过矩阵维度"

2)当信息存储到道具中时,它会覆盖每个矩阵的值。如何使道具为5 x n(其中n =输出中的单元格数)?

请帮助!

1)我的getfield命令无法正常工作,并且出现错误:"索引超过矩阵维度"

在构造数组中,将数字值从同一字段中获取的一种更简单的方法,因为数组是: [structArray.fieldName]。在您的情况下,这将是:

  meanValues = [props.MeanIntensity];

2)当信息存储到道具中时,它会覆盖每个矩阵的值。如何使Props为5 x n(其中n =输出中的单元格数)? 一种选项是在必要维度的空单元格中进行预先分配,然后用regionprops输出填充它。这样:

props = cell(size(output,1),1);
for k = 1:size(output,2)
    props{k} = regionprops(labelboutput{1,k},output{1,k},'MeanIntensity','Centroid');
end
for k = 1:size(output,2)
    meanValues = [props{k}.MeanIntensity];
end
...

另一个选项是将循环组合起来,以便您可以在覆盖矩阵之前使用矩阵数据。这样:

for i = 1:size(output,2)
    props = regionprops(labelboutput{1,i},output{1,i},'MeanIntensity','Centroid');  
    meanValues = [props.MeanIntensity];
   % update this call to place props in non-overlapping parts of your file (e.g. append)
   % writetable(struct2table(props), 'advanced_test.xlsx');
end 

第二个的坏事是它在循环内有一个文件I/O步骤,这确实可以放慢速度;更不用说您需要减少可写的电话,以便将结果表放在'advanced_test.xlsx'的非重叠区域。

最新更新