MATLAB将结构转换为表格,并输出为csv

MATLAB将结构转换为表格,并输出为csv,matlab,csv,image-processing,Matlab,Csv,Image Processing,作为使用Matlab中“regionprops”的图像处理管道的一部分,我生成结构: vWFfeatures = 1631x1 struct array with fields: Area Centroid MajorAxisLength MinorAxisLength Eccentricity EquivDiameter 其中,“质心”是包含[x,y]的向量,例如[12.4,26.2]。我想将此结构转换为表并另存为CSV文件。目标是将“质心”向量分为表中的两列,例如标记为质心X和质心

作为使用Matlab中“regionprops”的图像处理管道的一部分,我生成结构:

vWFfeatures = 


1631x1 struct array with fields:

Area
Centroid
MajorAxisLength
MinorAxisLength
Eccentricity
EquivDiameter
其中,“质心”是包含[x,y]的向量,例如[12.4,26.2]。我想将此结构转换为表并另存为CSV文件。目标是将“质心”向量分为表中的两列,例如标记为质心X和质心Y。我不知道如何做到这一点

到目前为止,我已经研究了如何使用“struct2table”函数。这会将“质心”输出为一列。此外,当我尝试将输出分配给变量时,会出现一个错误:

table = struct2table(vWFfeatures)
Error using struct2table
Too many output arguments.

我无法理解这一点,请提供任何帮助?

由于原始的
struct2table
不适用于您,您可能需要具体实现您试图实现的行为。
在这种情况下,这意味着提取要保存的值(拆分数组),然后保存数据:

data_Centroid = vertcat(vWFfeatures.Centroid); %// contains the centroid data
Centroid_X = data_Centroid(:,1); %// The first column is X
Centroid_Y = data_Centroid(:,2); %// the second column is Y
csvwrite('centroid.csv',data_Centroid); %// writes values into csv
如果您希望在csv中包含列标题,则会变得复杂,因为csvwrite只能处理数字数组:

celldata = num2cell(num2str(data_Centroid)); %// create cell array
celldata(:,3) = celldata(:,4); %// copy col 4 (y data) into col 3 (spaces)
for i=1:length(celldata)
    celldata{i,2} = ','; %// col 2 has commas
    celldata{i,4} = '\n'; %// col 4 has newlines
end
celldata = celldata'; %'// transpose to make the entries come columnwise
strdata = ['Centroid_X,Centroid_Y\n',celldata{:}]; %// contains all as string

fid = fopen('centroid.csv','w'); % writing the string into the csv
fprintf(fid,strdata);
fclose(fid);

最后我就是这样解决的:从struct中提取每个字段,使用horzcat连接到一个新数组中,然后定义头并使用csvwrite_和_头,输出到csv

wpbFeatures = regionprops(vWFlabelled, 'Area','Centroid', 'MajorAxisLength', 'MinorAxisLength', 'Eccentricity', 'EquivDiameter');
wpbArea = vertcat(wpbFeatures.Area);
wpbCentroid = vertcat(wpbFeatures.Centroid);
wpbCentroidX = wpbCentroid(:,1);
wpbCentroidY = wpbCentroid(:,2);
wpbFeret = max(imFeretDiameter(vWFlabelled, linspace(0,180,201)), [], 2);
wpbMajorAxisLength = vertcat(wpbFeatures.MajorAxisLength);
wpbMinorAxisLength = vertcat(wpbFeatures.MinorAxisLength);
wpbEccentricity = vertcat(wpbFeatures.Eccentricity);
wpbEquivDiameter = vertcat(wpbFeatures.EquivDiameter);
wpbFeatures = horzcat(wpbArea, wpbCentroidX, wpbCentroidY, wpbFeret, wpbMajorAxisLength, wpbMinorAxisLength, wpbEccentricity, wpbEquivDiameter);
headers = {'Area','CentroidX','CentroidY', 'Feret', 'MajorAxisLength', 'MinorAxisLength', 'Eccentricity', 'EquivDiameter'};
csvwrite_with_headers(strcat(PlateName, '_ResultsFeatures.csv'),wpbFeatures,headers);

您是否尝试过将
'AsArray',true
作为
struct2table
的附加参数?你的结构看起来可能有不可接受的维度。是的,我试过了,但没有成功。我想问题可能出在struct2table版本中,因为我运行的是Matlab R2013a,所以这个函数不可用,所以我下载了它:但是文档与我阅读的不同。我仍然得到了错误太多的输出参数是的,这是一个用户提交,这不是最初的
struct2table
包含在以后的MATLAB构建中。链接到的版本不支持输出参数,这意味着您无法将结果分配给变量。您必须找到与官方行为相匹配的版本,或者重新编写您下载的版本以包含此功能。因此,默认情况下,此功能不包含在Matlab R2013a中?因为它没有
struct2table
,没有。可能有一种方法可以通过默认函数获得相同的结果,但是自己写一本不应该太难。我现在正在写一些提示,给我一点时间。