Являются ли эти изображения черно-белый с простыми функциями на «пустой» поле, или в оттенках серого, с более плотной информации?
Я вижу пару подходов.
Вы можете использовать movie() для отображения последовательности изображений в виде анимации.
Для статического представления разреженных простых данных вы можете отображать каждое изображение как отдельный слой на одной фигуре, придавая каждому слою другой цвет для переднего плана и используя AlphaData, чтобы сделать фон прозрачным, чтобы все этапы в секвенциальном шоу. Градиент цветов соответствует положению в последовательности изображений. Вот пример.
function plotImageSequence
% Made-up test data
nLayers = 9;
x = zeros(100,100,nLayers);
for i = 1:nLayers
x(20+(3*i),:,i) = 1;
end
% Plot each image as a "layer", indicated by color
figure;
hold on;
for i = 1:nLayers
layerData = x(:,:,i);
alphaMask = layerData == 1;
layerData(logical(layerData)) = i; % So each layer gets its own color
image('CData',layerData,...
'AlphaData',alphaMask,...
'CDataMapping','scaled');
end
hold off
Непосредственно показывающий путь движения и «линия» вырежет трудно с растровыми данными, так как в Matlab не будет знать, какое «перемещено» пиксели в двух последовательных изображениях связаны друг с другом. Не предполагается, что у вас есть базовые векторные данные для геометрических объектов в изображениях? Plot3() может позволить вам показать свое движение со временем как ось z. Или вы можете использовать обычный сюжет() и некоторую ручную прокрутку для построения траекторий всех контрольных точек или вершин в геометрических функциях.
EDIT: Вот вариант, который использует патч(), чтобы нарисовать каждый пиксель как маленький многоугольник, плавающий в пространстве на уровне Z своего индекса в последовательности изображений. Я думаю, что это будет больше похоже на «поверхностные» сюжеты стиля, о которых вы просите. Вы можете поиграть с свойством FaceAlpha, чтобы сделать более плотные участки.
function plotImageSequencePatch
% Made-up test data
nLayers = 6;
sz = [50 50];
img = zeros(sz(1),sz(2),nLayers);
for i = 1:nLayers
img(20+(3*i),:,i) = 1;
end
% Plot each image as a "layer", indicated by color
% With each "pixel" as a separate patch
figure;
set(gca, 'XLim', [0 sz(1)]);
set(gca, 'YLim', [0 sz(2)]);
hold on;
for i = 1:nLayers
layerData = img(:,:,i);
[x,y] = find(layerData); % X,Y of all pixels
% Reshape in to patch outline
x = x';
y = y';
patch_x = [x; x+1; x+1; x];
patch_y = [y; y; y+1; y+1];
patch_z = repmat(i, size(patch_x));
patch(patch_x, patch_y, patch_z, i);
end
hold off
Сколько слоев хорошо написано в Matlab? Обычно я просто добавляю значения RGB для разных «слоев» в один массив mxnx3. – Jonas
Я ищу 3D-представление своих 2D-изображений, где 3-е измерение представляет время. Мои изображения просто содержат строки (так что только возможные значения матрицы равны 0 и 1). Моя конечная цель - уметь отслеживать конкретную линию между изображениями и определять ее путь (или из какого образа оно возникло). Я надеялся использовать подход «соседних пикселей», чтобы увидеть, имеет ли изображение в последовательности одна и та же линия в соответствующем районе. Но сначала я хотел бы визуализировать свои данные. Поэтому запишите каждый образ MxN, где одно изображение является продолжением предыдущего со временем. Таким образом, получается участок поверхности. – Myx
@ Джонас: зависит от размера и памяти сюжета; несколько десятков, прежде чем столкнуться с проблемами памяти для участков размером 500х500 в 2 ГБ оперативной памяти.Форма MxNx3 также должна работать нормально; пользователю просто нужно будет вычислить абсолютные значения цвета, где форма MxNx1 автоматически нормализуется к цветной карте фигуры. –