繁体   English   中英

从 MATLAB 中的 2D 地图绘制体积 3D 数据?

[英]Volumetric 3D data plotting from 2D map in MATLAB?

我有热图

在此处输入图片说明

并希望将此 2D 矩阵转换为 3D 体积/形状/表面数据点以进行进一步处理。 不是简单地使用surf以 3D 方式显示它。

这样做的好方法是什么?

在这个社区的大量帮助下,我可以更接近:

为简单起见,我将尺寸缩小到 45x45 像素。

I = (imread("TESTGREYPLASTIC.bmp"))./2+125;
Iinv = 255-(imread("TESTGREYPLASTIC.bmp"))./2-80;%

for i = 1:45
for j = 1:45
A(i, j, I(i,j) ) = 1;
A(i, j, Iinv(i,j) ) = 1;
end
end
volshow(A)

它并不理想,但矩阵是我现在想要的。 也许可以改进循环以在处理 1200x1200 点时运行得更快。

在此处输入图片说明

我现在如何创建一个真正的封闭曲面?

显示的等高线图无法使用“2D”数据生成。 它需要三个输入,如下所示:

[XGrid,YGrid] = meshgrid(-4:.1:4,-4:.1:4);
C = peaks(XGrid,YGrid);

contourf(XGrid,YGrid,C,'LevelStep',0.1,'LineStyle','none')
colormap('gray')
axis equal

其中XGridYGridC都是 NxN 矩阵,分别定义了每个点的 X 值、Y 值和 Z 值。

等高线图

如果您希望这是“3D”,只需使用surf

surf(XGrid,YGrid,C)

曲面图

在您与@BoilermakerRV 的对话之后,我猜您正在寻找以下两个结果之一:

  1. 3d 点的列表,其中 x 和 y 是图像中像素的索引,z 是相应像素的值。 结果将是一个m*n by 3矩阵。

  2. 一个m by n by 256的零和一的体积,对于图像中的 (i,j)-th 像素,(i, j)-体积堆的所有体素都是 0,除了在I(i, j)

看一下生成这两个结果的以下示例:

    close all; clc; clear variables;
    I = rgb2gray(imread('data2.png'));
    imshow(I), title('Data as image') 

    % generating mesh grid
    [m, n] = size(I);
    [X, Y] = meshgrid(1:n, 1:m);

    % converting image to list of 3-d points
    P = [Y(:), X(:), I(:)];
    figure 
    scatter3(P(:, 1), P(:, 2), P(:, 3), 3, P(:, 3), '.')
    colormap jet
    title('Same data as a list of points in R^3')

    % converting image to 256 layers of voxels
    ind = sub2ind([m n 256], Y(:), X(:), I(:));
    V = zeros(m, n, 256);
    V(ind) = 1.0;
    figure
    h = slice(V, [250], [250], [71]) ;
    [h.EdgeColor] = deal('none');
    colormap winter
    camlight
    title('And finally, as a matrix of 0/1 voxels')

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM