Доступ к матрице для начинающих в MATLAB
-
20-12-2019 - |
Вопрос
Теперь, во-первых, я даже не уверен, что это называется матрицей, и я новичок в 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)
Я не думаю, что это имеет какое-либо отношение к моему фактическому вопросу, но это возможно, поэтому я изложу его здесь
-Спасибо!
Решение
Прежде чем начать, я хотел бы сделать одно замечание: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,:));
ФУ-у-у, у вас действительно правильная терминология.Строки и столбцы постоянно используются при обработке изображений / видео.Что касается "матрицы", вы можете назвать это временная последовательность или последовательность кадров с точки зрения обработки видео.Это, конечно, трехмерная матрица, но люди в этой области обозначают ее как одно из двух, поскольку на самом деле это последовательность изображений / кадров, наложенных друг на друга.