首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用MATLAB从二维地图绘制三维立体数据?

利用MATLAB从二维地图绘制三维立体数据?
EN

Stack Overflow用户
提问于 2020-10-06 23:42:35
回答 2查看 495关注 0票数 0

我有一张热图

并希望将此2D矩阵转换为三维体积/形状/表面数据点,以便进一步处理。而不仅仅是使用surf在3D中显示它。

做这件事的好方法是什么?

有了这个社区的大量帮助,我可以走得更近:

为了简单起见,我将尺寸缩小到45x45px。

代码语言:javascript
复制
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点时,循环可以得到改进,以运行得更快。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-07 07:50:55

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

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

0和1的

  1. ,对于图像中的(i,j)-th像素,该体积的(i,j)-the堆的所有体素均为0,除了在中的一个

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

代码语言:javascript
复制
    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')

票数 3
EN

Stack Overflow用户

发布于 2020-10-07 00:23:24

所显示的等高线图不能用"2D“数据生成。它需要以下三项投入:

代码语言:javascript
复制
[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都是定义每个点的X值、Y值和Z值的NxN矩阵。

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

代码语言:javascript
复制
surf(XGrid,YGrid,C)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64235246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档