首页 > 解决方案 > 如何修改一组向量以使其具有相同的大小?

问题描述

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

标签: matlab

解决方案


您的问题是所有向量的大小都不同。不要试图通过零填充或插值(我认为这两个都是坏主意)来强制它们成为芝麻大小,而是改变你的计算,使输出向量的长度不依赖于图像的大小。

这是您当前的代码:

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在除法中使用,因为我认为有必要有一个整数大小。但我不确定这里是否需要ceilor flooror round,并且我无权访问此函数来测试它。有点试验并且错误应该显示哪种方法可以提供一致的输出大小。)


推荐阅读