Доступ к Матрице для начинающих в 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 ответ:
Один момент, который я хотел бы сделать перед началом: 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, у вас есть правильная терминология. Строки и столбцы используются в обработке изображений и видео постоянно. Что касается "матрицы", то ее можно назвать временная последовательность или последовательность кадровв терминах обработки видео. Это, конечно, трехмерная матрица, но люди в этой области обозначают ее как одну из двух, поскольку это действительно последовательность изображений / кадров, сложенных друг на друга.