数据存储和从Matlab导出

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

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

2)labelbout是一个与输出相同的单元arrays,只是每个matrix都被二进制化了。

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

4)道具是一个5×1结构与2个领域(质心和平均强度)

问题:我想在每个matrix中获取每个ROI的平均强度值并导出为ex​​cel。 这是我到目前为止:

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命令不工作,并得到错误:“索引超过matrix尺寸”

2)当信息被存储到道具中时,它覆盖每个matrix的值。 我如何制作道具5 xn(其中n =输出单元格的数量)?

请帮忙!!

1)我的getfield命令不工作,并得到错误:“索引超过matrix尺寸”

从结构数组的相同字段中获取数值的更简单的方法是将数组作为[structArray.fieldName] 。 在你的情况下,这将是:

  meanValues = [props.MeanIntensity]; 

2)当信息被存储到道具中时,它覆盖每个matrix的值。 我如何制作道具5 xn(其中n =输出中的单元格数量)? 一种select是预先分配必要维度的空单元格,然后用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 ... 

另一个select是将你的循环结合起来,这样你可以在覆盖之前使用你的matrix数据。 喜欢这个:

 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 (eg append) % writetable(struct2table(props), 'advanced_test.xlsx'); end 

第二件坏事是在你的循环里有一个文件I / O步骤,这可能会让事情变慢。 更何况你将需要削减你的可写呼叫,所以它把结果表放置在'advanced_test.xlsx'非重叠区域。