blockproc le permite iterar solamente sobre una sola imagen, pero no le impide operar de todos los datos que le gustaría. La firma de la función de usuario toma como entrada una "estructura de bloque", que contiene no solo el campo de datos (que se usa en todos los ejemplos de bloque de proceso) sino también varios otros campos, uno de los cuales es "ubicación". Puede usar esto para determinar "dónde se encuentra" en su imagen de entrada y para determinar qué otros datos necesita para operar en ese bloque.
por ejemplo, a continuación se explica cómo podría multiplicar los elementos por 2 imágenes del mismo tamaño. Este es un ejemplo bastante torpe, pero aquí sólo para demostrar cómo esto podría parecer:
im1 = rand(100);
im2 = rand(100);
fun = @(bs) bs.data .* ...
im2(bs.location(1):bs.location(1)+9,bs.location(2):bs.location(2)+9);
im3 = blockproc(im1,[10 10],fun);
im4 = im1 .* im2;
isequal(im3,im4)
Utilizando el campo "localización" de la estructura de bloque se puede averiguar las partes pertinentes de un segundo, tercero, cuarto, etc. conjunto de datos que necesita para ese bloque en particular.
Espero que esto ayude!
-brendan
Kudos para comenzar su cuenta de Stack Overflow con una respuesta competente y elaborada :) – ypnos
gracias mucho. ¡Soy fanático de blockproc! – brendan