Самый быстрый и простой способ достижения чего-то похожего на то, что вас интересует, это:
function blocks = DivideImage(im, W)
if W <= 7
step = W;
elseif W <= 13
step = round(0.25 * W);
else
step = round(0.125 * W);
end
startPos = 0:step:size(im,1)-W;
blocks = cell(numel(startPos), numel(startPos));
for i = 1:numel(startPos)
for j = 1:numel(startPos)
blocks{i,j} = im(startPos(i)+(1:W), startPos(j)+(1:W));
end
end
Обратите внимание, что когда W
не делится точно на size(im,1)
, тогда он отбрасывает некоторые точки с правого и нижнего краев, поэтому вы захотите еще раз взглянуть на то, как он устанавливает значения startPos
.