Поскольку blockproc
(и устаревший blkproc
) являются обеими функциями Toolbox для обработки изображений , я решил добавить базовое решение MATLAB, которое не требует дополнительных Инструментарии ...
Если вы хотите разделить матрицу на подматрицы, один из способов - использовать mat2cell
, чтобы разбить матрицу и сохранить каждую подматрицу в ячейке массива ячеек. Для вашего случая синтаксис будет выглядеть так:
C = mat2cell(I, [128 128], [128 128]);
C
теперь представляет собой массив ячеек 2 на 2, в каждой ячейке которого хранится подматрица 128 на 128, равная I
. Если вы хотите выполнить операцию с каждой ячейкой, вы можете использовать функцию cellfun
. Например, если вы хотите взять среднее значение в каждой подматрице, вы должны сделать следующее:
meanValues = cellfun(@(x) mean(x(:)), C);
Первый аргумент - это дескриптор функции для анонимной функции , которая сначала преобразует каждую подматрицу в вектор столбца, а затем принимает среднее значение. Выходными данными является матрица 2 на 2 средних значений для каждой подматрицы. Если функция, которую вы передаете в cellfun
, создает выходные данные разных размеров или типов для каждой ячейки, то cellfun
будет иметь проблему с их объединением и выдаст ошибку:
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
Если вы добавите ..., 'UniformOutput', false);
в конец вашего звонка к cellfun
, то в приведенном выше случае вместо этого будет массив ячеек размером 2 на 2 , содержащий результаты выполнения операция на каждой подматрице.