我正在尝试提取HOG_features进行数学符号分类(我将使用SVM分类器)。我得到一个1xn向量,然后必须将所有向量放在一个矩阵中。问题在于每个图像的特征向量大小都不同,因此我无法将它们连接起来。 有没有办法使所有向量具有相同的大小? 预先谢谢你。
代码如下:
rep1 = 'D:\mémoire MASTER\data';
ext = '*.tif' ;
chemin = fullfile(rep1, ext);
list = dir(chemin);
for i=1:length(list)
I = imread(fullfile(rep1, list(i).name), ext(3:end));
if size(I,3)==3 % RGB image
I = rgb2gray(I);
end
I1 = imbinarize(I);
% Extract HOG features data
HOG_feat = extractHOGFeatures(I1,'CellSize', [2 2]);
HOG_feat1 = HOG_feat';
end
答案 0 :(得分:0)
您可以将每个零填充为最长的零:
例如将两个向量v1和v2放入矩阵M:
M = zeros(2,max(length(v1),length(v2)));
M(1,1:length(v1)) = v1;
M(2,1:length(v2)) = v2;
答案 1 :(得分:0)
您遇到的问题是所有向量的大小都不同。更改您的计算方式,以使输出矢量的长度不依赖于图像的大小,而不是试图通过零填充或内插来将它们逼成芝麻大小(我都认为这是个坏主意)。
这是您当前的代码:
HOG_feat = extractHOGFeatures(I1,'CellSize', [2 2]);
% ^^^
% the image is split in cells of 2x2 pixels
无论如何,2x2单元对于这种方法来说太小了。您可以将图像分成一定数量的单元格,例如100个单元格:
cellSize = ceil(size(I1)/10);
HOG_feat = extractHOGFeatures(I1,'CellSize', cellSize);
(我在该部门中使用ceil
是因为我认为有必要使用整数大小。但是我不确定ceil
还是floor
还是{{1} }是必需的,我无权使用此功能对其进行测试。通过反复试验,应该可以看出哪种方法可以提供一致的输出大小。)