Эффективный и быстрый способ матрицы матрицы

Я пытался padarray более 1000 изображений. Однако, когда я определяю время своего кода, эта конкретная строка занимает наибольшее количество времени для завершения

I=abs(padarray(I, [2, 2], 'replicate', 'both'));

Главным образом из-за линии 35 padarray алгоритм (внутри профилировщика): images \ private \ padarray_algo

b = a(aIdx{:});

Есть ли способ повысить эффективность? Возможно, используя другой метод? Спасибо!

1 ответ

Решение

Вы можете использовать repmat и матричную конкатенацию, чтобы получить тот же результат:

r=@repmat;
pad=@(I,d)[r(I(1),d)    r(I(1,:),d(1),1)   r(I(1,end),d)
       r(I(:,1),1,d(2)) I                  r(I(:,end),1,d(2))
       r(I(end,1),d)    r(I(end,:),d(1),1) r(I(end),d)];

Использование:

pad(I,[2 2])

Если все изображения имеют одинаковый размер, вы можете создать матрицу линейных индексов изображения и применить padarray затем используйте дополненный индексный массив для дополнения изображений:

%create matrix of indices
Idx = reshape(1:numel(I),size(I));
%pad the index
Idx_padded = padarray(Idx, [2, 2], 'replicate', 'both'); 
%use the padded index to pad images
result = I(Idx_padded);
result2 = I2(Idx_padded);
Другие вопросы по тегам