如何将 HOG 特征添加到矩阵中(matlab)
How to add HOG features into matrix (matlab)
提取图像文件夹的HOG特征后,我想将所有这些结果添加到一个矩阵中。我该怎么做?这是我在 matlab 中的代码:
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);
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);
figure (n)
% Show all images
imshow(training_images); hold on;
plot(hogVisualization);
end
通过查看 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};
提取图像文件夹的HOG特征后,我想将所有这些结果添加到一个矩阵中。我该怎么做?这是我在 matlab 中的代码:
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);
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);
figure (n)
% Show all images
imshow(training_images); hold on;
plot(hogVisualization);
end
通过查看 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};