如何将一组向量修改为相同大小?

时间:2019-05-20 09:56:42

标签: matlab

我正在尝试提取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

2 个答案:

答案 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} }是必需的,我无权使用此功能对其进行测试。通过反复试验,应该可以看出哪种方法可以提供一致的输出大小。)