2

假设我有 9 个 MxN 黑白图像,它们以某种方式相互关联(即某个事件的时间流逝)。有什么方法可以在一个曲面图上显示所有这些图像?

假设 MxN 矩阵仅包含 0 和 1。假设图像仅包含黑色背景上的白线(即,如果该像素是线的一部分,则像素值 == 1,否则为 0)。假设图像的排序方式可以暗示后续图像中线条的移动进程。我希望能够看到这些图像的“侧视图”(或体积表示),这将显示特定线在其在图像上的移动中“雕刻出”的表面。

编码在 MATLAB 中完成。我看过plot(但它只做 2D 绘图)和surf,它做 3D 绘图但不适用于我的 MxNx9 图像矩阵。我也尝试过contourslice,但不确定要传递什么参数。

谢谢!

玛丽亚

4

1 回答 1

2

这些图像是在“空白”字段上具有简单特征的黑白图像,还是具有更密集信息的灰度图像?

我可以看到几种方法。

您可以使用 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
于 2010-10-19T20:30:12.540 回答