如何以 imageSet 或 imageDataStore 的形式向 MATLAB 中的 BagOfFeatures() 函数提供输入?

How to provide input to BagOfFeatures() function in MATLAB in the form of imageSet or imageDataStore?

我想使用 MATLAB 的 bagOfFeatures() 函数。但它需要以 imageSet 或 imageDataStore 的形式输入。我想要 运行 的代码如下:

Dataset = 'D:\dsktop\kinect_leap_dataset\acquisitions';
thresh1 = 0;
thresh2 = 20;

k = dir(fullfile(Dataset,'\P*\G*\*_depth.png')); 
kf = {k(~[k.isdir]).folder};
kn = {k(~[k.isdir]).name};

for j=1:length(k)
% Applying thresholding to the original image
    full_name = horzcat(kf{j},filesep,kn{j});
    image = imread(full_name);
    image_bin1 = (image < thresh2);
    image_bin2 = (thresh1 < image);
    image_bin = abs(image_bin2- image_bin1);
    sequence{i} = image_bin;
end
% Bag of Features
bag = bagOfFeatures(sequence);

但是 "sequence" 是一个单元格 class,所以 bagOfFeatures() 给我错误。所以我尝试了这个:

Dataset = 'D:\dsktop\kinect_leap_dataset\acquisitions';
imgFolder = fullfile(Dataset);
imgSets = imageSet(imgFolder, 'recursive');
imgSets.Description

但现在的问题是如何对保存在imgSets中的图像进行处理(阈值化)。此外,在处理如何将所有 "image_bin" 图像保存在 imageSet class 中以便我可以将它们作为 BagOfFeatures() 函数的输入。

我自己解决了这个问题。要将输入作为 imageSet 或 imageStrore 提供给 BagOfFeatures(),我们必须将所有 "image_bin" 图像存储在 PC 的文件夹中。 为此,我们必须在所需位置创建该文件夹

mkdir D:\.............\cropped

然后,我们必须将 "image_bin" 循环保存在该文件夹中作为

file_name = sprintf('D:/............/cropped/image_bin_%d.png',j);
imwrite(image_bin, file_name);

然后,上述文件夹中的数据在 MATLAB 内存中读取为

imds = imageDatastore('D:/.............../cropped', 'Labels', label);
% label is an array of labels made by the user 
[trainingSet, validationSet] = splitEachLabel(imds, 0.3, 'randomize');

% Bag of Features
bag = bagOfFeatures(trainingSet);

完成了。