【问题标题】:Data Storage and Export From MatlabMatlab 中的数据存储和导出
【发布时间】:2017-08-31 21:05:35
【问题描述】:

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

1) 输出是一个元胞数组,每个元胞包含一个大小 = 1024 x 1024 的矩阵,类型 = double

2) labelbout 是一个与输出相同的元胞数组,只是每个矩阵都经过了二值化处理。

3) 我正在使用函数 regionprops 来提取每个输出单元格的 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) 当信息被存储到 props 中时,它会覆盖每个矩阵的值。如何使道具成为 5 x n(其中 n = 输出中的单元数)?

请帮忙!!

【问题讨论】:

    标签: excel matlab matrix


    【解决方案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 步骤,这真的会减慢速度;更不用说您需要减少您的 writetable 调用,以便将结果表放置在'advanced_test.xlsx' 的非重叠区域中。

    【讨论】:

    • 非常感谢您的帮助!我想对数据进行一项更改,但是,我不确定如何实现它...目前,meanValues 中的每个单元格都包含所有平均强度。因此,meanValues 是一个 1 x n(输出中的单元数)元胞数组。我想在 meanValues 列中打印平均强度,以便它是 5(每个矩阵中 ROI 的数量)x 4 数组。如果我不清楚,请告诉我。再次感谢!!!!
    • 我想通了!谢谢你的帮助:)
    • 抱歉,现在才看到这个。我很高兴你解决了!你是用reshape 还是别的什么?如果你现在都准备好了,你能接受这个答案吗?我想你也可以得到一些分数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2015-08-29
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多