我正在尝试计算图像1和2之间的块函数。在下面的示例中,我试图将图像1的每个块与图像2的左上块相乘
Blocksize = 3;
fun = @(block) block.data .* im2(1:Blocksize, 1:Blocksize);
im3 = blockproc(im1,[Blocksize Blocksize],fun, 'TrimBorder', 1);
我一直收到Matrix dimensions must agree
错误,我不知道为什么。据我所知,这两个块都是3x3。
有谁知道我做错了什么?
答案 0 :(得分:2)
您只需使用索引编制即可:
im3 = im1.*im2(mod(0:size(im1,1)-1,BlockSize)+1, mod(0:size(im1,2)-1,BlockSize)+1);
答案 1 :(得分:1)
当MATALB尝试评估角块的功能时,问题就出现了。如果进入blockproc
函数,可以观察到错误发生,因为getBlock
函数返回3x1
块(?)。因此,您应将PadPartialBlocks
设置为true。
Blocksize = 3;
fun = @(block) block.data .* im2(1:Blocksize, 1:Blocksize);
im3 = blockproc(im1,[Blocksize Blocksize],fun, 'PadPartialBlocks',1,'TrimBorder', 1);
另外,你提到你想要与右上方的块相乘,但事实上你正在访问左上方的区块。