¿Hay un sustituto para blockproc en Matlab?

He estado usando blockproc para procesar imágenes en bloque. Desafortunadamente, blockproc es parte de Image Processing Toolbox, que no tengo en mi computadora personal.

¿Existe una combinación de funciones en la base Matlab que pueda sustituir a blockproc ?


Mi conjetura inicial fue usar im2col para transformar cada bloque en columnas, y luego arrayfun una arrayfun para procesar cada columna. Luego me di cuenta de que im2col también es parte de la Caja de herramientas de procesamiento de imágenes, por lo que no resuelve mi problema.

Aquí hay un ejemplo usando MAT2CELL. Dividir la imagen en mosaicos N por M, y maneja el caso cuando el tamaño de la imagen no es divisible de manera uniforme por el número de mosaicos.

 %# 2D grayscale image I = imread('coins.png'); %# desird number of horizontal/vertical tiles to divide the image into numBlkH = 4; numBlkW = 4; %# compute size of each tile in pixels [imgH,imgW,~] = size(I); szBlkH = [repmat(fix(imgH/numBlkH),1,numBlkH-1) imgH-fix(imgH/numBlkH)*(numBlkH-1)]; szBlkW = [repmat(fix(imgW/numBlkW),1,numBlkW-1) imgW-fix(imgW/numBlkW)*(numBlkW-1)]; %# divide into tiles, and linearize using a row-major order C = mat2cell(I, szBlkH, szBlkW)'; C = C(:); %# display tiles i subplots figure, imshow(I) figure for i=1:numBlkH*numBlkW subplot(numBlkH,numBlkW,i), imshow( C{i} ) end 

La imagen de entrada y los mosaicos resultantes:

input_imageazulejos

¿No mat2tiles junto con cellfun y cell2mat hacen más o menos lo que hace blockproc ?

Puedes escribir un contenedor para que use los mismos argumentos que blockproc , no creo que sea tan difícil de hacer.