问题标签 [isosurface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - 如何在等值面的 3D 渲染叠加中避免线状、尖锐的伪影?
我在 Matlab 中对多个等值面进行了 3D 渲染。它看起来像(屏幕截图,稍后添加的箭头):
我使用如下代码实现了它:
它迭代一系列 3D 值堆栈,每个堆栈都有不同的阈值和不同的颜色和 alpha 值,并将它们全部绘制在一个图中。特别是在这里,我有四个内表面颜色为黄色、蓝色、绿色、洋红色,alpha 等于 1,四个外表面颜色相同但 alpha 等于 0.1。
它看起来不错,但显示了一些我想摆脱的伪影。
- 红色箭头描绘的是线状伪影,可能来自外表面的交叉点。
- 由青色箭头描绘的是在内表面交叉处的非常清晰的颜色边界。
我希望渲染输出更平滑,不会过多强调交叉点。
我不希望红色箭头描绘的线状伪影,我希望青色箭头描绘的锐利边缘更平滑。当然,我的目标是在 Matlab 中找到解决方案。
我尝试对原始数据进行插值以将其放在更精细的网格上,但这没有任何区别,也没有尝试减少补丁的数量(使用reducepatch
)。等值面相交线(青色箭头)始终是非常硬的线,并且将值设置为感兴趣区域之外的 NaN(即低于使用的最低阈值)也没有任何影响。
有评论建议渲染为矢量格式(如 eps/pdf)可能会有所帮助。使用 Matlab 2019b 则不然。使用print
,saveas
不允许选择painters
渲染器,因此输出实际上是矢量图形确实会导致伪影。epsc 的输出不尊重透明度,pdf 的输出不会完全呈现所有补丁。那是他们自己的问题,我在这里对他们不感兴趣。
只是为了完整性,这里的 pdf 输出(我不感兴趣):
python - 在标量场上映射 3D 等值面的色标
假设我们有一些 3D复值函数 f(x,y,z)。使用 Plotly,我试图绘制大小的等值面 |f(x,y,z)| 的这种功能。到目前为止,一切正常,我的代码似乎运行良好,请在下面找到有关原子轨道函数的工作示例:
此时,图形的色标取决于幅值|f(x,y,z)|的值,因此单个等值面的颜色始终是均匀的。
现在,为了将色标映射到幅度 |f(x,y,z)|,我希望它映射到相位Ф(x,y,z) = arg(f(x ,y,z)),因此绘制的等值面的每个点的颜色告诉我们字段 Ф(x,y,z) 的值(理想情况下分布在 [-π,π] 上)而不是|f(x,y,z)| 在这一点。
基本上,如果可能的话,我想用 Plotly 而不是 Mayavi来做这件事。
在我看来,所有这些都与设置函数的cmin
和cmax
参数的特殊方式有关Isosurface
,但我不知道如何做到这一点。
python - 是否有 Python 函数来计算等值面端盖几何形状,如 Matlab 中的“isocaps”函数?
我想获得一些由隐式函数定义的 3D 模型,例如 F(x,y,z)=0。
可以使用 MATLAB 中的“isosurface”和“isocaps”函数来完成。
就我而言,构建的模型需要在 Python 中进行后处理,因此如果可以在 Python 中完成建模会更好。 'mayavi.mlab.Contour3d'和'plotly.graph_objects.Isosurface'能够显示等值面,而'skimage.measure.marching_cubes'可用于提取 trangler 网格。
谁能帮我在 Python 中找到一种方法来获得等值面端盖?
vtk - 在 VTK 中获取特定轮廓
我喜欢从图像数据中获取特定的轮廓。我的主要目标是以网格形式重新划分多数据。所以我遵循以下管道:
使用 PolyDataToImageData 将多数据转换为图像
将上述图像输出转换为 vtkImageDataGeometryFilter
使用 vtkImplicitPolyDataDistance 计算与原始多数据的距离
在步骤 2 中将距离值复制到图像输出标量
结果如下:
然后我尝试使用 vtkContourFilter 通过 SetValue(0, 0.0) 获取 polydata。如您所见,结果并不完全正确:
距离数组的值是https://pastebin.ubuntu.com/p/2mZsgdrcmX/它永远不是 0 所以我认为我在 SetValue 中做错了,但我也不确定如何获得特定的绿色轮廓。
有没有办法得到那些绿点轮廓?
java - 如何为每个像素制作更好的嵌套循环?
我正在尝试创建的是高分辨率元球。这是我的算法:
Blob 类非常简单,它只是一个从屏幕反弹的球:
问题是嵌套循环中有太多的迭代,它会导致严重的冻结。我想不出其他方法来检查从屏幕的每个像素到所有斑点的中心点的距离,因此,高分辨率图片和大量斑点使它成为幻灯片。另外我知道将所有内容转换为 BufferedImage 并不是一个完美的主意,但我不知道将光栅转换为图形对象的其他方法。提前感谢您的帮助)(编辑:getSum() 找到所有 blob 的所有距离的总和,将其映射到颜色范围,并将其限制为 255 这个函数当然不是问题,但理解起来有点复杂,这就是为什么我没有包括它)(编辑2:感谢@ThatOtherGuy,现在这种方式更加优化,但可能还有其他一些错误)
c# - 如何使用 C# 中的行进立方体算法从 CT 切片(.raw)生成 3D 网格?
我正在尝试使用行进立方体算法从 CT 切片(.raw 文件)生成 3D 网格(等值面提取)。RAW 数据为 8 位 512x512 像素和 207 个切片。所以输入是 CT 原始数据,输出是 CT 对象的 3D 网格你能帮帮我吗?因为我被困在这里超过 1 周你能不能给我编程工作流程来实现这一点?
接下来是我从http://paulbourke.net/geometry/polygonise/转换而来的 C# 类
}
}
现在的问题是,如何处理输入的 CT 数据(.raw 文件)?我不知道如何准备数据,我可以将行进立方体算法应用于它。这是我第一次使用这种数据类型。我真的很感谢你的帮助!
python - 找到无限互连等值面的最小值
输入如下:点数组 (x,y,z,f)。都是 np.arrays。这些 (x,y,z) 只是单元格的网格,f 是每个网格点的能量值。我正在尝试解决以下任务:构造渗透此单元格的等值面(包含 (x,y,z) 点的表面,其 f 值与某些容差值相同),即您可以绘制路径(在这个表面中)它是连续的并且接触单元的相对(不相交)平面(或相对的顶点,边缘)。无限互连是指我有周期性的边界条件(但那是另一回事)。我想到了以下伪代码:
那么,你能推荐一些工具来解决它吗?
java - 使用 Java 从 .raw 卷文件中读取和索引数据
我正在处理原始格式的卷数据。我认为它基本上是我想要加载到 3D 数组中的体素的 3D 矩阵。我没有这方面的经验,我无法找到有关如何完成的太多信息。我的主要问题是我并不真正了解数据代表什么。
所以我真正要问的是是否有人可以帮助我理解数据并将其加载到使用 Java 的 3D 数组中。
python - 从 3D 数据和相应的索引中获取等值面
我在网格上有一个 3D numpy 温度值数组。由此我可以使用dTdx, dTdy, dYdz = np.gradient(T)
. 现在我只对温度为 900 的等值面上的梯度值感兴趣。我想做的是(伪 codish):
我试过了:
效果很好,但仅适用于 2D 数据。我正在寻找3D等价物。我发现了以下内容:
但我对绘制它不感兴趣。我想知道温度为 T=900 的指数,以便我可以在梯度上使用它。有任何想法吗?