通过查看documentation,调用extractHOGFeatures 计算给定输入图像的1 x N 向量。因为计算它的输出大小可能有点麻烦,这还取决于您为 HOG 检测器设置的参数,最好先创建一个空矩阵并在每次迭代时动态连接特征。通常,如果您想在迭代的基础上填充元素,您会预先分配一个矩阵以提高性能。不这样做会使性能略有下降,但考虑到您的情况,它是最适应的。您可能想要调整 HOG 参数,如果我们以动态方式进行调整,则无需确定矩阵的总大小应该是多少。
所以做这样的事情。我已将 %//New 标签放在我修改过您的代码的位置:
training_female = 'E:\Training Set\Female Images';
% read all images with specified extention, its jpg in our case
filenames = dir(fullfile(training_female, '*.jpg'));
% count total number of photos present in that folder
total_images = numel(filenames);
featureMatrix = []; %// New - Declare feature matrix
for n = 1:total_images
% Specify images names with full path and extension
full_name= fullfile(training_female, filenames(n).name);
% Read images
training_images = imread(full_name);
[featureVector, hogVisualization] = extractHOGFeatures(training_images);
%// New - Add feature vector to matrix
featureMatrix = [featureMatrix; featureVector];
figure(n);
% Show all images
imshow(training_images); hold on;
plot(hogVisualization);
end
featureMatrix 将包含您的 HOG 特征,其中每一行代表每个图像。因此,对于特定图像i,您可以通过以下方式确定 HOG 特征:
feature = featureMatrix(i,:);
警告
我需要提一下,上面的代码假定您目录中的所有图像大小相同。如果不是,那么每个 HOG 调用的输出向量大小将会不同。如果是这种情况,您将需要一个元胞数组来适应不同的大小。
因此,请执行以下操作:
training_female = 'E:\Training Set\Female Images';
% read all images with specified extention, its jpg in our case
filenames = dir(fullfile(training_female, '*.jpg'));
% count total number of photos present in that folder
total_images = numel(filenames);
featureMatrix = cell(1,total_images); %// New - Declare feature matrix
for n = 1:total_images
% Specify images names with full path and extension
full_name= fullfile(training_female, filenames(n).name);
% Read images
training_images = imread(full_name);
[featureVector, hogVisualization] = extractHOGFeatures(training_images);
%// New - Add feature vector to matrix
featureMatrix{n} = featureVector;
figure(n);
% Show all images
imshow(training_images); hold on;
plot(hogVisualization);
end
要访问特定图像的功能或图像i,请执行以下操作:
feature = featureMatrix{i};