【问题标题】:How to save a single .mat file of features for many images (loop for)?如何为多个图像保存单个 .mat 特征文件(循环)?
【发布时间】:2018-01-10 18:09:13
【问题描述】:

我为 18 个图像训练了具有 15 个特征的二分类 (svmtrain),并且我在单个图像中有许多对象。我想保存这些图像特征的单个 .mat 文件。我的问题是当我运行这段代码时,我只有最后一张图片的变量。

这是我的代码:

NbIm = size(names1,1);
n1 = 1;
n2 = NbIm;
for n = n1:n2
    %1- Read the original image
    %2- Processing :  Segmentation
    %3- characterization :
    [B3,L3,N3] = bwboundaries(ICellules); (see picture)
    CC = bwconncomp(L3);
    BW = bwlabel(L3);
    stats1 = regionprops(CC,'Area','Centroid','Eccentricity','Perimeter','ConvexArea','ConvexHull','ConvexImage','MajorAxisLength','MinorAxisLength','Orientation','Solidity','BoundingBox');
    for k = 1:length(B3),
        V = [];    glcm = [];
        V = Im_originale(BW==k);
        glcm = graycomatrix(V,'Offset',[2 0],'Symmetric', true);
        stats= graycoprops(glcm);
        Contrast_Cellule = stats.Contrast;
        Correlation_Cellule = stats.Correlation;
        Energy_Cellule = stats.Energy;
        Homogeneity_Cellule = stats.Homogeneity;
        Area_cellule = stats1(k).Area;
        Perimeter_cellule = stats1(k).Perimeter;
        Circularity_cellule = (4*pi*Area_cellule)/Perimeter_cellule^2;
        Centroid_cellule = stats1(k).Centroid;
        Compactness_cellule = Perimeter_cellule^2/(4*pi*Area_cellule);
        MajorAxis_cellule = stats1(k). MajorAxisLength;
        MinorAxis_cellule = stats1(k). MinorAxisLength;
        Orientation_cellule = stats1(k).Orientation;
        Eccentricity_cellule = stats1(k).Eccentricity;
        Solidity_cellule = stats1(k).Solidity;
        boundary3 = B3{k};
        [cc] = chaincode(boundary3);
        ai = cc.code;
        ai = ai.';
        output = calc_harmonic_coefficients(ai,30);
        Ampl = 0.5*sqrt((output(1)^2)+(output(2)^2)+(output(3)^2)+(output(4)^2));
        Feat(k,:) = [Area_cellule,Perimeter_cellule,Circularity_cellule,Compactness_cellule, Solidity_cellule,Eccentricity_cellule,MajorAxis_cellule,MinorAxis_cellule, Centroid_cellule,Ampl,Contrast_Cellule,Correlation_Cellule,Energy_Cellule,Homogeneity_Cellule];
    end
end
save('FeatTrain.mat', 'Feat');

【问题讨论】:

  • 您的代码重复n2-n1 次完全相同的操作。问题不在于保存,问题在于Feat 总是被完全相同的值覆盖。
  • 您好 Ander Biguri,感谢您的回复...我该如何解决这个问题?
  • 我们不知道,您没有提供任何解释或数据。您的代码不完整,所以我们无能为力。阅读How to Askminimal reproducible example
  • edit您的问题添加代码
  • @Ander Biguri 我编辑我的问题

标签: matlab for-loop matrix


【解决方案1】:

每次运行内部循环 (k=...) 时,都会覆盖 Feat,而不会保存它。

如果您想为Feat 保存一个变量,而不是保存多个.mat 文件,有两种方法:

  1. 如果每次运行内部循环时Feat 的大小都相同,则可以通过将行更改为Feat(n-n1+1,k,:)=[... 来使其成为3D 矩阵。这将创建一个 3D 矩阵,其中每个 Feat(n,:,:) 将是每个图像的特征。
  2. 如果每次运行内部循环时Feat 可以更改大小,则使用元胞数组,如Feat{n-n1+1}(k,:)=[...

【讨论】:

  • 嗨,@Ander Biguri 感谢您的回复...我将 Feat(k,:) = [... 改成 Feat{n-n1+1}=[.... 因为Feat 的大小可以从一个图像更改为另一个图像(例如,图像 number13 有 4 个对象,数字 12 有 2 个对象,第一个有一个对象),我测试了 13 个图像的代码,但我对所有图像都有 1x15 双倍而不是 4x15 或 2x15一些图片!
  • @ Ander Biguri 我试试你的建议 2 “如果每次运行内部循环时 Feat 都可以改变大小,那么使用单元数组,如 Feat{n-n1+1}=[ ...." 我给你建议的结果
  • @Ander Biguri 没问题...我要感谢您的帮助:) 但它不起作用:(
  • @Ander Biguri 你能帮我解决这个问题吗,因为你的建议不起作用:
  • @Ander Biguri 非常感谢您在解决问题方面的帮助。非常感谢您的帮助 :)
猜你喜欢
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
相关资源
最近更新 更多