1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- """
- Perform other simple mathematical operation between 3D Volumes.
- Possible operations are: +, -, /, 1/x, sin, cos, exp, log, abs, **2, sqrt,
- min, max, atan, atan2, median, mag, dot, gradient, divergence, laplacian.
- Alphas defines the opacity transfer function in the scalar range.
- """
- from vedo import *
- printc(__doc__)
- plt = Plotter(N=4)
- v0 = Volume(dataurl+'embryo.slc').cmap(0).add_scalarbar3d()
- v0.scalarbar = v0.scalarbar.clone2d("center-right", 0.1) # substitute to a 2d scalarbar
- plt.at(0).show("original", v0)
- v1 = v0.clone().operation("gradient").operation("mag").add_scalarbar3d()
- v1.scalarbar = v1.scalarbar.clone2d("center-right", 0.1)
- plt.at(1).show("gradient", v1)
- v2 = v0.clone().operation("median").cmap(4).add_scalarbar3d()
- v2.scalarbar = v2.scalarbar.clone2d("center-right", 0.1)
- plt.at(2).show("median", v2)
- v3 = v0.clone().operation("dot", v0).cmap(7).add_scalarbar3d()
- v3.scalarbar = v3.scalarbar.clone2d("center-right", 0.1)
- plt.at(3).show("dot(v0,v0)", v3, zoom=1.3)
- plt.interactive().close()
- ####################################################################################
- #Start with creating a masked Volume then compute its gradient and probe 2 points
- msh = Ellipsoid()
- vol = msh.signed_distance(dims=[20, 20, 20])
- vol.threshold(above=0.0, replace=0.0) # replacing all values outside to 0
- vol.cmap("blue").alpha([0.9, 0.0]).alpha_unit(0.1).add_scalarbar3d()
- vol.scalarbar = vol.scalarbar.clone2d("center-right", 0.15)
- vgrad = vol.operation("gradient")
- printc(vgrad.pointdata, c='g')
- grd = vgrad.pointdata['ImageScalarsGradient']
- pts = vol.points # coords as numpy array
- arrs = Arrows(pts, pts + grd*0.1, c="jet")
- pts_probes = [[0.2,0.5,0.5], [0.2,0.3,0.4]]
- vpts_probes = Points(pts_probes).probe(vgrad)
- vects = vpts_probes.pointdata['ImageScalarsGradient']
- arrs_pts_probe = Arrows(pts_probes, pts_probes + vects, c='black')
- plt = Plotter(axes=1, N=2)
- plt.at(0).show("A masked Volume", vol)
- plt.at(1).show("..compute its gradient and probe 2 points", arrs, arrs_pts_probe)
- plt.interactive().close()
|