Как я могу изменить набор векторов, чтобы иметь одинаковый размер? - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь извлечь 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 голосов
/ 20 мая 2019

У вас проблема в том, что все ваши векторы имеют разный размер.Вместо того, чтобы пытаться заставить их принять размер кунжута путем заполнения нулями или интерполяции (обе я считаю плохими идеями), измените ваши вычисления так, чтобы длина выходного вектора не зависела от размера изображения.

Это ваш текущий код:

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 или round здесь, и у меня нет доступа к этой функции, чтобы проверить ее. Немного проб и ошибок должно показать, какой метод дает согласованный размер вывода.)

0 голосов
/ 20 мая 2019

Вы можете дополнить каждый из них нулями, чтобы они были длиннее самого длинного:

например. поместить два вектора, v1 и v2, в матрицу M:

M = zeros(2,max(length(v1),length(v2)));
M(1,1:length(v1)) = v1;
M(2,1:length(v2)) = v2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...