2

我尝试padarray了超过 1000 张图像。但是,当我为我的代码计时时,这条特定的行需要最长的时间才能完成

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

主要是因为padarray算法的第35行(profiler里面):images\private\padarray_algo

b = a(aIdx{:});

有什么办法可以提高效率?也许使用另一种方法?谢谢!

4

1 回答 1

2

您可以使用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);
于 2017-05-24T06:56:30.930 回答