从Matlab进行数据存储和导出

时间:2017-08-31 21:05:36

标签: excel matlab matrix

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

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

2)labelbout是一个与输出相同的单元格数组,除了每个矩阵已被二值化。

3)我使用函数regionprops为每个输出单元提取ROI的平均强度和质心值(每个图像中有多个ROI)

4)道具是一个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)当信息存储到props中时,它会覆盖每个矩阵的值。如何制作5 x n的道具(其中n =输出中的单元格数量)?

请帮助!!

1 个答案:

答案 0 :(得分:1)

  

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'的非重叠区域。