matlab for循环
答案:3 悬赏:0 手机版
解决时间 2021-05-06 21:06
- 提问者网友:我们很暧昧
- 2021-05-05 23:40
怎样将一个256×256的矩阵分为大小为8×8的不重叠矩阵,再将一个32×32的矩阵中的每个数依次取出与8×8矩阵中的每个数做运算,最后再放回8×8的矩阵中?
最佳答案
- 五星知识达人网友:一袍清酒付
- 2021-05-06 00:04
假设256x256的矩阵是img, 32x32的矩阵是coeff,
你的意思是在img最左上角的8x8矩阵和coeff(1, 1)做运算,
左上 img(1:8, 9:16)的和coeff(1, 2)运算
等等如此类推?
如果是的话
blockSize = [8, 8];
for ii = 1 : size(img, 1)/blockSize(1)
index1 = ((ii - 1) * blockSize(1) + 1) : ii * blockSize(1);
for jj = 1 : size(img, 2)/blockSize(2)
index2 = ((jj - 1) * blockSize(2) + 1) : jj * blockSize(2);
block = img(index1, index2);
% block 和 coeff(ii, jj) 进行运算, 结果存在modifiedBlock
img(index1, index2) = modifiedBlock;
end
end
你的意思是在img最左上角的8x8矩阵和coeff(1, 1)做运算,
左上 img(1:8, 9:16)的和coeff(1, 2)运算
等等如此类推?
如果是的话
blockSize = [8, 8];
for ii = 1 : size(img, 1)/blockSize(1)
index1 = ((ii - 1) * blockSize(1) + 1) : ii * blockSize(1);
for jj = 1 : size(img, 2)/blockSize(2)
index2 = ((jj - 1) * blockSize(2) + 1) : jj * blockSize(2);
block = img(index1, index2);
% block 和 coeff(ii, jj) 进行运算, 结果存在modifiedBlock
img(index1, index2) = modifiedBlock;
end
end
全部回答
- 1楼网友:第四晚心情
- 2021-05-06 02:17
你可以把那个32×32的变成256×256的再乘会比较快点 a是个32×32的矩阵的话, 先repmat,然后用permute转一下,然后reshape
b = repmat(a, [1 1 8 8]); b = permute(b, [3 1 4 2]); b = reshape(b, [256 256]);
然后用这个b跟那个大矩阵 .*就好了 如果结果有问题的话你自己看着调整一下转的顺序什么的吧
- 2楼网友:痴妹与他
- 2021-05-06 00:50
系统对矩阵嵌套有限制
例如,a,b,c,d均为4*4矩阵,则e=[a,b;c,d]=8*8矩阵
如果想完成的是区域乘积,楼上的主意不错。
但似乎按你的题意,直接32*32的矩阵与256*256的矩阵做乘法,那不是更简单么?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯