数据存储和从Matlab导出
这里是我遇到的问题的背景信息:
1)输出是一个单元格数组,每个单元格包含一个大小= 1024 x 1024的matrix,type = double
2)labelbout是一个与输出相同的单元arrays,只是每个matrix都被二进制化了。
3)我正在使用函数regionprops为每个输出单元提取ROI的平均强度和质心值(每个图像中有多个ROI)
4)道具是一个5×1结构与2个领域(质心和平均强度)
问题:我想在每个matrix中获取每个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命令不工作,并得到错误:“索引超过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'
非重叠区域。