从MATLAB中的函数返回4D数组

时间:2017-12-07 12:28:56

标签: image matlab multidimensional-array types return-type

我试图从MATLAB中的函数调用返回4D图像数据数组。我在MATLAB中不是很先进,我也不知道我必须从函数返回什么类型的数据。这是我的功能:

function classimg = loadImages(classdir,ext)
    % create array of all images in directory
    neg = dir([classdir ext]);
    % get size of array (to loop through images)
    numFileNeg = max(size(neg));
    % create a 4D array to store our images
    classimg = zeros(51,51,3,numFileNeg);
    % loop through directory
    for i=1:numFileNeg
        classimg(:,:,:,i) = imread([myDir neg(i).name]);
    end
end

这是函数调用:

negativeImgs = loadImages("C:\Users\example\Documents\TrainingImages\negatives\","*.jpg");

我找不到任何返回类型的在线文档?有谁知道这会是什么?正确填充classimg,以便代码内部工作。

2 个答案:

答案 0 :(得分:2)

将classimg初始化为51x51x3xnumFileNeg零的矩阵。您使用零功能,因此数据类型为double。要清楚地看到这一点,请从命令窗口调用您的函数,然后键入“whos”以查看classimg的大小和数据类型。

答案 1 :(得分:0)

As Mike correctly points out,因为您使用zeros初始化classimg,并且默认数据类型为double,您的图像数据将从任何数据类型转换为double {{ 3}}返回(imread)。

如果您希望classimg与图片的数据类型相同(我假设所有图片的类型相同),您可以加载一张图片,获取often uint8,并使用该特定类初始化classimg。以下是如何重写您的功能:

function classimg = loadImages(classdir, ext)
  neg = dir(fullfile(classdir, ext));
  numFileNeg = numel(neg);
  tempImage = imread(fullfile(classdir, neg(1).name));
  classimg = zeros(51, 51, 3, numFileNeg, class(tempImage));
  classimg(:, :, :, 1) = tempImage;
  for i = 2:numFileNeg
    classimg(:, :, :, i) = imread(fullfile(classdir, neg(i).name));
  end
end

请注意,我做了其他一些更改。我使用class而不是目录和文件名的连接,因为它为您处理fullfile的任何问题。我还使用file separators来获取文件数numel