这些图像是在“空白”字段上具有简单特征的黑白图像,还是具有更密集信息的灰度图像?
我可以看到几种方法。
您可以使用 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 轴来显示它们的运动。或者,您可以使用常规 plot() 和一些手动操作来绘制几何特征中所有控制点或顶点的路径。
编辑:这是一个变体,它使用 patch() 将每个像素绘制为一个小多边形,在图像序列中其索引的 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