两个图像之间的blockproc

时间:2013-12-13 20:17:55

标签: matlab block matrix-multiplication

我正在尝试计算图像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。

有谁知道我做错了什么?

2 个答案:

答案 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);

另外,你提到你想要与右上方的块相乘,但事实上你正在访问左上方的区块。