我正在开发一个项目,我使用的图像大小为(512x512),然后我将整个图像分割为8,这样就会有64x64块,然后我将每个8x8图像补丁重新排列成一列我的新尺寸是64x4069。 现在我想恢复原来的尺寸,即512x512,请帮我如何使用for循环取代它而不是' col2im'
a=imread('lena.png');
b=double(a);
[m,n] = size(b);
bl=8;
br=m/bl;
bc=n/bl;
out = zeros(size(reshape(b,bl*bl,[])));
count = 1;
for i = 1:br
for j= 1:bc
block = b((j-1)*bl + 1:(j-1)*bl + bl, (i-1)*bl + 1:(i-1)*bl + bl);
out(:,count) = block(:);
count = count + 1;
end
end
答案 0 :(得分:0)
这基本上是你向后写的脚本。必须做出一些假设,因为不是每个矩形矩阵都可能来自您描述的过程,也因为原始矩阵的尺寸不能从块集中唯一确定。所以,我假设原始矩阵是方形矩阵,块也是正方形。
顺便说一下,在你的代码中,你在行索引的公式中使用j,在列中使用i;我认为这是一个错误,并在下面进行了修改。
out = kron((0:3)', 1:16); % for testing; you would have a 64x4096 matrix here
[m,n] = size(out);
osize = sqrt(n*m);
bl = sqrt(m);
br = osize/bl;
bc = br;
original = zeros(osize);
count = 1;
for i = 1:br
for j = 1:bc
block = zeros(bl);
block(:) = out(:,count);
original(1+(i-1)*bl : i*bl, 1+(j-1)*bl : j*bl) = block;
count = count + 1;
end
end
测试输入:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32
3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48
输出:
0 2 0 4 0 6 0 8
1 3 2 6 3 9 4 12
0 10 0 12 0 14 0 16
5 15 6 18 7 21 8 24
0 18 0 20 0 22 0 24
9 27 10 30 11 33 12 36
0 26 0 28 0 30 0 32
13 39 14 42 15 45 16 48