padarray矩阵高效快速的方法
Efficient and fast way to padarray matrix
我尝试 padarray
超过 1000 张图像。然而,当我为我的代码计时时,这条特定的线需要最多的时间才能完成
I=abs(padarray(I, [2, 2], 'replicate', 'both'));
主要是因为padarray
算法的第35行(inside profiler):images\private\padarray_algo
b = a(aIdx{:});
有什么提高效率的方法吗?也许使用另一种方法?谢谢!
您可以使用 repmat and matrix concatenation 得到相同的结果:
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);
我尝试 padarray
超过 1000 张图像。然而,当我为我的代码计时时,这条特定的线需要最多的时间才能完成
I=abs(padarray(I, [2, 2], 'replicate', 'both'));
主要是因为padarray
算法的第35行(inside profiler):images\private\padarray_algo
b = a(aIdx{:});
有什么提高效率的方法吗?也许使用另一种方法?谢谢!
您可以使用 repmat and matrix concatenation 得到相同的结果:
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);