让我们考虑尺寸为512x512的图像Y.
下面的代码用于将图像Y分割成块,其中每个块的大小为8x8。
Matlab Code:
for m = 1:64
for n = 1:64
subX = Y(8*(m-1)+1:8*m,8*(n-1)+1:8*n);
end
end
我在这个问题上需要的是解决下面的两个问题:
1)将图像X分割成8 x 8个块(不是大小为8x8,但块数必须是8x8)。在这种情况下,图像将被分割成64个块,其中每个块包含512/64像素= 8个像素。
2)它与1)的概念相同,但在这种情况下,我想将图像分割成10x10个块。因此图像将被分割成100个块。但我们现在可以注意到每个块包含512/100 = 5.12像素!!所以它漂浮了!
请帮我写一个独特的代码,可以同时解决我的两个问题。
最诚挚的问候,
克里斯蒂娜。
答案 0 :(得分:4)
尝试使用mat2cell
将图像分成块:
bsX = 10; bsY = 10;
[m,n] = size(Y);
numFullBlocksX = floor(n/bsX); numFullBlocksY = floor(m/bsY);
xBlocks = [repmat(bsX,numFullBlocksX,1); mod(n,bsX)*ones(mod(n,bsX)>0)];
yBlocks = [repmat(bsY,numFullBlocksY,1); mod(m,bsY)*ones(mod(m,bsY)>0)];
blockCell = mat2cell(Y,yBlocks,xBlocks)
要改为从块数到块大小,请使用这两行代替 bsX = 10; bsY = 10;
:
numBlocksX = 10; numBlocksY = 10;
bsX = ceil(n/numBlocksX); bsY = ceil(m/numBlocksY);