Since blockproc
(and the deprecated blkproc
) are both functions in the Image Processing Toolbox, I thought I’d add a basic MATLAB solution that requires no additional toolboxes…
If you want to divide a matrix into submatrices, one way is to use mat2cell
to break the matrix up and store each submatrix in a cell of a cell array. For your case, the syntax would look like this:
C = mat2cell(I, [128 128], [128 128]);
C
is now a 2-by-2 cell array with each cell storing a 128-by-128 submatrix of I
. If you want to perform an operation on each cell, you could then use the function cellfun
. For example, if you wanted to take the mean of the values in each submatrix, you would do the following:
meanValues = cellfun(@(x) mean(x(:)), C);
The first argument is a function handle to an anonymous function which first reshapes each submatrix into a column vector and then takes the mean. The output is a 2-by-2 matrix of the mean values for each submatrix. If the function you pass to cellfun
creates outputs of different sizes or types for each cell, then cellfun
will have a problem concatenating them and will throw an error:
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
If you add ..., 'UniformOutput', false);
to the end of your call to cellfun
, then the output in the above case will instead be a 2-by-2 cell array containing the results of performing the operation on each submatrix.