gpt4 book ai didi

matlab - 在 Matlab 中生成几何形状的 3D 二元掩码

转载 作者:行者123 更新时间:2023-12-02 07:23:55 25 4
gpt4 key购买 nike

我想生成一个 3D 二进制掩码,它表示一个以 xc、yc、zc 为中心,以 xr、yr、zr 为半径的椭圆体。

我注意到函数 ellipsoid 在给定这些参数的情况下生成点网格。但是,我希望数据由二进制矩阵表示(在我的例子中,大小为 [100,100,100]),而不是网格。

我的参数是:

mask = zeros(100,100,100);
xc = 50; yc = 50; zc = 50;
xr = 15; yr = 15; zr = 15;

提前致谢!

最佳答案

要生成可以使用方程式的二进制形状掩码,您可以按照以下步骤操作:

  • 生成网格(使用 ndgrid)。确保域限制包括体积/表面掩模,并根据您的需要选择网格分辨率。
  • 通过对坐标与方程进行简单的逻辑比较,使用体积/表面方程生成二元掩膜。

简单的二维示例:

让我们定义一个简单的椭圆(二维)。

%% // Simple 2D example
xc = 5 ; yc = 6 ; %// ellipse center = (5,6)
xr = 3 ; yr = 2 ; %// ellipse radiuses

xbase = linspace(0,10,11) ; %// temporary variable used to send to "ndgrid"
[xm,ym] = ndgrid( xbase , xbase ) ; %// generate base mesh

mask = ( ((xm-xc).^2/(xr.^2)) + ((ym-yc).^2/(yr.^2)) <= 1 ) %// get binary mask

给你二进制掩码:

mask =
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 1 1 0 0 0
0 0 0 0 0 1 1 1 0 0 0
0 0 0 0 1 1 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0 0
0 0 0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

虽然您几乎无法识别 mask 中的椭圆,但我将分辨率保持在较低水平以便能够将其显示为文本。您可以通过定义更精细的网格轻松提高分辨率。


3D 椭球体:

好吧,除了我们要向网格添加一维,并使用椭球体的 3D 方程外,方法完全相同。因此,对于您的确切情况:

%% // 3D ellipsoid
xc = 50; yc = 50; zc = 50;
xr = 15; yr = 15; zr = 15;

xbase = linspace(1,100,100) ;
[xm,ym,zm] = ndgrid( xbase , xbase , xbase) ;

mask = ( ((xm-xc).^2/(xr.^2)) + ((ym-yc).^2/(yr.^2)) + ((zm-zc).^2/(zr.^2)) <= 1 ) ;

我无法向您显示此类 3D 数组的文本输出,但您的 mask 现在是一个 3D 逻辑数组,包含椭圆内的 truefalse 别处。

关于matlab - 在 Matlab 中生成几何形状的 3D 二元掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36420023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com