2013-12-13 7 views
0

Я пытаюсь вычислить функцию блока между изображением 1 и 2. В примере, приведенном ниже, я пытаюсь умножить каждый блок изображения 1 с верхним левым блоком изображения 2blockproc между двумя изображениями

Blocksize = 3; 

fun = @(block) block.data .* im2(1:Blocksize, 1:Blocksize); 
im3 = blockproc(im1,[Blocksize Blocksize],fun, 'TrimBorder', 1); 

Я продолжаю получать ошибку Matrix dimensions must agree, и я не знаю почему. Насколько я понимаю, оба блока - 3х3.

Кто-нибудь знает, что я делаю неправильно?

ответ

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

Кроме того, вы говорите, что вы хотите, чтобы умножить в верхнем правом блоке, но на самом деле вы обращаетесь к верхнему левому блока.

+0

Это звучит хорошо, не против левой опечатки, установил ее. Благодаря! –

2

Вы можете сделать это только с индексацией:

im3 = im1.*im2(mod(0:size(im1,1)-1,BlockSize)+1, mod(0:size(im1,2)-1,BlockSize)+1); 
Смежные вопросы