Доступ к Матрице для начинающих в MATLAB


Во-первых, я даже не уверен, что это называется матрицей, и я новичок в MATLAB. Но предположим, что у меня есть "матрица", которая выглядит следующим образом:

for n=1:10
...
someImage = mat(:,:,n) %The "matrix"
...
end

Где n могут быть кадры в видео, например, и первые 2 ':' являются данными строки и столбца для 2D-изображения (кадра).

Если бы я хотел только первый ':' данных (строка? колонна? стихия?), как я могу получить доступ только к этому?

Интуитивно я думаю что-то вроде:

row1 = mat(:,0,0)
row2 = mat(0,:,0)
row3 = mat(0,0,:)

Но это не так. кажется, работает.

P.S. Я знаю, что это не совсем строки, терминология для всего этого также была бы очень признательна

Кроме того, это может не иметь ничего общего с этим, но я также использую графический интерфейс MATLAB, и" матрица " хранится следующим образом:

handles.mat(:,:,n)

Я не думаю, что это имеет какое-либо отношение к моему фактическому вопросу, но это может быть так, что я поставлю его здесь

- Спасибо!

1 2

1 ответ:

Один момент, который я хотел бы сделать перед началом: MATLAB начинает индексирование в 1, и нет 0. Это распространенная ошибка, которую большинство людей, имеющих опыт программирования на C / Java / Python, делают, переходя в MATLAB.

Также, делая:

row1 = mat(:,1,1);

Это открывает доступ ко всем строкам для первого столбца и первого кадра вашего видео. Имейте в виду, что это приведет к созданию вектора M x 1, где M обозначает количество строк для кадра в вашем видео.

Также:

row2 = mat(1,:,1);
Это позволяет получить доступ ко всем столбцам в первой строке первого кадра. Имейте в виду, что это создаст вектор 1 x N, где N обозначает количество столбцов для кадра в вашем видео.

Также:

row3 = mat(1,1,:);

Это обращение ко всем пикселям ввсей видеопоследовательности в строке 1 и столбце 1. Вы можете думать об этом как о временном срезе в верхнем левом углу видеоряда. Имейте в виду, что это приведет к Вектор 1 x 1 x T, где T - количество кадров в вашем видео. Если вы получаете доступ только к одному пикселю в вашем видео, первые два измерения являются излишними, и поэтому вы можете использовать команду squeeze, чтобы сжать все синглетные измерения так, чтобы они упростились до вектора T x 1. Другими словами, сделайте это:

row3 = squeeze(mat(1,1,:));

FWIW, у вас есть правильная терминология. Строки и столбцы используются в обработке изображений и видео постоянно. Что касается "матрицы", то ее можно назвать временная последовательность или последовательность кадровв терминах обработки видео. Это, конечно, трехмерная матрица, но люди в этой области обозначают ее как одну из двух, поскольку это действительно последовательность изображений / кадров, сложенных друг на друга.