Объединение данных в трехмерную матрицу:
Вы можете использовать функцию CAT для укладки матриц одинакового размера по заданному измерению. Например, если у вас есть ваши матрицы яркости 4 8 на 8 в переменных L1
, L2
, L3
и L4
, следующий код объединит их в 8 на 8 на 4 матрица:
luminance = cat(3,L1,L2,L3,L4);
Вы также можете добавить дополнительные матрицы Cb
и Cr
для создания матрицы 8 на 8 на 6 :
macroBlock = cat(3,L1,L2,L3,L4,Cb,Cr);
%# OR...
macroBlock = cat(3,luminance,Cb,Cr); %# Using luminance variable from above
Вы можете затем индексировать macroBlock
следующим образом, чтобы получить доступ к любым 8 на 8 матрицам, которые вам нужны:
L2 = macroBlock(:,:,2); %# Get the second luminance matrix
Cb = macroBlock(:,:,5); %# Get the Cb matrix
Хранение данных в массиве ячеек:
Поскольку все ваши матрицы имеют одинаковый размер, описанный выше вариант конкатенации, вероятно, является лучшим. Однако другой вариант (который особенно полезен, если вы хотите хранить данные различного размера, типа или размера) - это использовать массивы ячеек . Далее создается массив ячеек 1 на 6 , содержащий вышеуказанные матрицы:
macroBlock = {L1 L2 L3 L4 Cb Cr};
Затем вы можете индексировать macroBlock
следующим образом, чтобы получить доступ к любой матрице 8 на 8 , которая вам нужна:
L2 = macroBlock{2}; %# Get the second luminance matrix
Cb = macroBlock{5}; %# Get the Cb matrix
Хранение данных в структуре:
Другой вариант - использовать структуру для хранения матриц 8 на 8 . Преимущество структуры заключается в том, что вы можете получить доступ к данным по имени поля , а не запоминать значение индекса. Вот как вы бы инициализировали структуру:
macroBlock = struct('L1',L1,'L2',L2,'L3',L3,'L4',L4,'Cb',Cb,'Cr',Cr);
%# OR...
macroBlock = struct();
macroBlock.L1 = L1;
macroBlock.L2 = L2;
macroBlock.L3 = L3;
macroBlock.L4 = L4;
macroBlock.Cb = Cb;
macroBlock.Cr = Cr;
Два приведенных выше синтаксиса создают структуру с именами полей 'L1'
, 'L2'
, 'L3'
, 'L4'
, 'Cb'
и 'Cr'
. Затем вы можете индексировать macroBlock
следующим образом, чтобы получить доступ к любым 8 на 8 матрицам, которые вам нужны:
L2 = macroBlock.L2; %# Get the second luminance matrix
Cb = macroBlock.Cb; %# Get the Cb matrix