- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个 3D 阵列,然后对像 Lorenz Attractor 这样的奇怪吸引子(在其他软件或体积渲染包中)执行体积渲染。从数据点绘制吸引子并提供一个值来分配颜色并在 matplotlib 中可视化非常容易。
但是我想要一个填充的体积阵列。我尝试过像 griddata 这样的插值方法,但它没有给出预期的结果。我设想的是这样的:
来自维基百科页面。
这是我尝试过的方法,但如果您在简单的查看器中打开结果,它看起来不太好。我在想,也许只在构成 x、y、z 数组的点之间进行插值……玩了几个小时后我有点迷路了。我认为我需要的是取点并进行某种插值或填充到数组中,这里我调用 interp_im。然后可以在体积渲染中查看。非常感谢任何帮助!
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from scipy.interpolate import griddata
from scipy.interpolate import LinearNDInterpolator
from skimage.external import tifffile
rho = 28.0
sigma = 10.0
beta = 8.0 / 3.0
def f(state, t):
x, y, z = state # Unpack the state vector
return sigma * (y - x), x * (rho - z) - y, x * y - beta * z # Derivatives
state0 = [1.0, 1.0, 1.0]
t = np.arange(0.0, 40.0, 0.01) #t = np.arange(0.0, 40.0, 0.01)
states = odeint(f, state0, t)
# shift x,y,z positions to int for regular image volume
x = states[:, 0]
y = states[:, 1]
z = states[:, 2]
x_min = x.min()
y_min = y.min()
z_min = z.min()
states_int = states + [abs(x_min),abs(y_min),abs(z_min)] + 1
states_int = states_int * 10
states_int = states_int.astype(int)
# values will be in order of tracing for color
values = []
for i,j in enumerate(states_int):
values.append(i*10)
values = np.asarray(values)
fig = plt.figure()
ax = fig.gca(projection='3d')
sc = ax.scatter(states_int[:, 0], states_int[:, 1], states_int[:, 2],c=values)
plt.colorbar(sc)
plt.draw()
plt.show()
#print(x.shape, y.shape, z.shape, values.shape)
#Interpolate for volume rendering
x_ = np.linspace(0,999,500)
y_ = np.linspace(0,999,500)
z_ = np.linspace(0,999,500)
xx,yy,zz = np.meshgrid(x_,y_,z_, sparse = True)
#
# X = states_int.tolist()
#
interp_im = griddata(states_int, values, (xx,yy,zz), method='linear')
interp_im = interp_im.astype(np.uint16)
np.save('interp_im.npy', interp_im)
tifffile.imsave('LorenzAttractor.tif', interp_im)
最佳答案
您的数据在体积中,只是像素化。如果你模糊体积,例如用高斯,你会得到更有用的东西。例如:
from scipy import ndimage
vol = np.zeros((512, 512, 512), dtype=states_int.dtype)
# add data to vol
vol[tuple(np.split(states_int, vol.ndim, axis=1))] = values[:, np.newaxis]
# apply gaussian filter, sigma=5 in this case
vol = ndimage.gaussian_filter(vol, 5)
然后我会使用类似 napari 的东西以 3D 方式查看数据:
import napari
with napari.gui_qt():
napari.view_image(v)
为了使音量更平滑,您可能需要减小积分步长。
关于python - 如何最好地在 python 中创建 Lorenz Attractor 的填充体积以进行体积渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61688891/
我正在尝试让这段代码计算盒子的表面积和体积。它编译但不输出正确的数据。我认为问题可能出在 void Box::零件内,但碰壁了。或者它可能是 Height = Height 但我无法以任何其他方式让它
我需要一个使用 kinect 计算 body 体积(以立方米为单位)的算法。我知道我可以提取云和深度框架(通过使用骨架 NUI 的一些方法隔离 body )但我不知道如何从这个矩阵计算体积值。导出卷
我是 d3 的新手,并试图根据节点之间的连接数使链接的宽度动态化。比方说,我们有: "links": [ { "source": a, "target": b},
我要渲染 3D 数据,它是一个一维数组。此数据在将进行可视化的同一程序中预先计算。数据表示统一的 3D 网格。网格的每个单元格都由一个 vector 组成。 GridSize = dx * dy *
我尝试在 jupyter notebook 中使用 mayavi 渲染体积来测试下面的示例 from mayavi import mlab mlab.init_notebook() x, y, z =
我尝试了几种不同的方法。我需要使用继承来扩展这些类。每次我运行该程序时,它都会输出 0.0 的体积和面积。半径显示正确。输出在底部。 public class Base_HW04Q1 { pu
我参与了一个项目,我需要根据体积的一系列图像渲染 3D 体积。这些图像是通过多种技术创建的,因此它们是所讨论对象的垂直切片。 数据集类似于this question , 但提问者正在寻找 Matlab
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines准则。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,
我想知道是否有任何基于 numpy 的工具可以: 给定一个二值输入的 3D numpy 图像,找到它的凸包; 并返回索引列表或此 3D 凸包内的体素(3D 像素)的类似物。 一种可能是使用skimag
我要使用 Matlab 从灰度图像集创建一个 3D 体积。一组包含二维灰度图像的连续量化切片。我仍然认为自己是 Matlab 的菜鸟,但这是我目前的想法: 为 3D 体积创建一个空白空间。 在每张图片
我有一个 3D 体积和一个 2D 图像以及两者之间的近似映射(没有倾斜的仿射变换,已知缩放,旋转和平移近似已知并且需要拟合)。因为这个映射有错误,我想进一步将 2D 图像注册到 3D 体积。我以前没有
更新: 我创建了一个文档齐全的 ipython 笔记本。如果您只想要代码,请查看第一个答案。 问题 我有一个 40x40x40 体积的灰度值。这需要旋转/移动/剪切。 这是一组有用的齐次变换:http
看似简单的问题,没有图像处理/处理经验的人其实没那么容易。 我不只是想将 2D 阵列堆叠在一起,而是通过合并多个由空白分隔的二进制 2D 切片来创建 3D 体积。 例子: 用零定义一个 3D 矩阵:
我非常沮丧,因为几个小时后,我似乎无法在 python 中进行看似简单的 3D 插值。在 Matlab 中,我所要做的就是 Vi = interp3(x,y,z,V,xi,yi,zi) 使用 scip
我是一名优秀的程序员,十分优秀!