Note
Go to the end to download the full example code
Multiscaling and signal propagationΒΆ
This example shows how a signal a signal can be propagated across scales on a multiscale representation.
The rules for signal propagation are defined by the FineToCoarsePolicy and CoarseToFinePolicy classes.
import pyvista as pv
import pyvista.examples
import skshapes as sks
bunny = sks.PolyData(pyvista.examples.download_bunny())
multiscale_bunny = sks.Multiscale(shape=bunny, ratios=[0.1, 0.01, 0.005])
Define a signal on the high resolution mesh
signal = multiscale_bunny.at(ratio=1).points[:, 1]
multiscale_bunny.at(ratio=1).point_data["height"] = signal
Propagate the signal from fine to coarse resolutions
# define a fine_to_coarse propagation scheme
fine_to_coarse_policy = sks.FineToCoarsePolicy(
reduce="mean",
)
# propagate the signal from the high resolution to the lower resolutions
multiscale_bunny.propagate(
signal_name="height",
from_ratio=1,
fine_to_coarse_policy=fine_to_coarse_policy,
)
Propagate a signal from the lower resolutions to the higher resolution
signal_low = multiscale_bunny.at(ratio=0.005).points[:, 1]
multiscale_bunny.at(ratio=0.005).point_data["height_low_constant"] = signal_low
multiscale_bunny.at(ratio=0.005).point_data["height_low_smoothing"] = signal_low
# define a coarse_to_fine propagation scheme
coarse_to_fine_policy = sks.CoarseToFinePolicy(
smoothing="constant",
)
# propagate the signal from the lower resolutions to the higher resolution
multiscale_bunny.propagate(
signal_name="height_low_constant",
from_ratio=0.005,
coarse_to_fine_policy=coarse_to_fine_policy,
)
# define a coarse_to_fine propagation scheme
coarse_to_fine_policy = sks.CoarseToFinePolicy(smoothing="mesh_convolution")
# propagate the signal from the lower resolutions to the higher resolution
multiscale_bunny.propagate(
signal_name="height_low_smoothing",
from_ratio=0.005,
coarse_to_fine_policy=coarse_to_fine_policy,
)
Visualize the multiscale representation
plotter = pv.Plotter(shape=(3, 4))
row = 0
plotter.subplot(row, 0)
plotter.add_mesh(multiscale_bunny.at(ratio=1).to_pyvista(), scalars="height")
plotter.view_xy()
plotter.subplot(row, 1)
plotter.add_mesh(multiscale_bunny.at(ratio=0.1).to_pyvista(), scalars="height")
plotter.view_xy()
plotter.subplot(row, 2)
plotter.add_mesh(
multiscale_bunny.at(ratio=0.01).to_pyvista(), scalars="height"
)
plotter.view_xy()
plotter.subplot(row, 3)
plotter.add_mesh(
multiscale_bunny.at(ratio=0.005).to_pyvista(), scalars="height"
)
plotter.view_xy()
row = 1
plotter.subplot(row, 0)
plotter.add_mesh(
multiscale_bunny.at(ratio=1).to_pyvista(), scalars="height_low_constant"
)
plotter.view_xy()
plotter.subplot(row, 1)
plotter.add_mesh(
multiscale_bunny.at(ratio=0.1).to_pyvista(), scalars="height_low_constant"
)
plotter.view_xy()
plotter.subplot(row, 2)
plotter.add_mesh(
multiscale_bunny.at(ratio=0.01).to_pyvista(), scalars="height_low_constant"
)
plotter.view_xy()
plotter.subplot(row, 3)
plotter.add_mesh(
multiscale_bunny.at(ratio=0.005).to_pyvista(),
scalars="height_low_constant",
)
plotter.view_xy()
row = 2
plotter.subplot(row, 0)
plotter.add_mesh(
multiscale_bunny.at(ratio=1).to_pyvista(), scalars="height_low_smoothing"
)
plotter.view_xy()
plotter.subplot(row, 1)
plotter.add_mesh(
multiscale_bunny.at(ratio=0.1).to_pyvista(), scalars="height_low_smoothing"
)
plotter.view_xy()
plotter.subplot(row, 2)
plotter.add_mesh(
multiscale_bunny.at(ratio=0.01).to_pyvista(),
scalars="height_low_smoothing",
)
plotter.view_xy()
plotter.subplot(row, 3)
plotter.add_mesh(
multiscale_bunny.at(ratio=0.005).to_pyvista(),
scalars="height_low_smoothing",
)
plotter.view_xy()
plotter.show()
Total running time of the script: (0 minutes 1.546 seconds)