我有一张256*256大小的图像。根据以下给定的重叠规则,我必须将该图像分成大小为W * W的子块,其中W=3,4,.....27:
如果W<8,则不重叠块 如果8<=W<=13,则50%重叠块 如果W>13,则75%重叠块 如何在Matlab中实现它,特别是在第2和第3规则中。
如果W<8,则不重叠块 如果8<=W<=13,则50%重叠块 如果W>13,则75%重叠块 如何在Matlab中实现它,特别是在第2和第3规则中。
实现类似您感兴趣的功能最快且最简单的方法如下:
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
的值。