Что касается вашего конкретного вопроса о том, как вы можете конвертировать туда и обратно между 2-D и 3-D матрицами в соответствии с вашей диаграммой, я сначала предположу, что originalHeight
и originalWidth
могут бытьпоровну делится на numRows
и numCols
соответственно.Основываясь на решении, которое я дал для аналогичной проблемы , о которой ранее спрашивали, вот решение с использованием только перестановок и перестановок матриц:
%# Convert from 2-D to 3-D:
blocks = reshape(permute(reshape(originalImage,blockHeight,blockWidth,[]),...
[1 3 2]),blockHeight,blockWidth,[]);
%# Convert from 3-D to 2-D:
newImage = reshape(permute(reshape(blocks,blockHeight,[],blockWidth),...
[1 3 2]),originalHeight,originalWidth);
Примечаниечто блоки в трехмерной матрице сцеплены вдоль третьего измерения, поэтому blocks(:,:,i)
является блоком i th из двумерной матрицы.Также обратите внимание, что эти решения будут извлекать и заполнять блоки в двумерной матрице построчно.Другими словами, если originalImage = [A1 A2; A3 A4];
, то blocks(:,:,1) = A1;
, blocks(:,:,2) = A2;
и т. Д.