【发布时间】:2011-09-22 02:48:09
【问题描述】:
我想计算沿给定轴方向的翻译图像的最大值。我知道ordfilt2,但是我想避免使用图像处理工具箱。
所以这是我到目前为止的代码:
imInput = imread('tire.tif');
n = 10;
imMax = imInput(:, n:end);
for i = 1:(n-1)
imMax = max(imMax, imInput(:, i:end-(n-i)));
end
是否可以避免使用 for 循环来加快计算速度,如果可以,如何避免?
第一次编辑:使用 Octave 的 im2col 代码实际上慢了 50%。
第二次修改:预分配似乎不足以改善结果。
sz = [size(imInput,1), size(imInput,2)-n+1];
range_j = 1:size(imInput, 2)-sz(2)+1;
range_i = 1:size(imInput, 1)-sz(1)+1;
B = zeros(prod(sz), length(range_j)*length(range_i));
counter = 0;
for j = range_j % left to right
for i = range_i % up to bottom
counter = counter + 1;
v = imInput(i:i+sz(1)-1, j:j+sz(2)-1);
B(:, counter) = v(:);
end
end
imMax = reshape(max(B, [], 2), sz);
第三次修改:我将展示时间安排。
【问题讨论】:
标签: performance matlab for-loop max vectorization