How to select the varifold kernel using characteristic lengths?#
Before, we presented a decimated-based kernel tuning approach that suffers from dependency on the characteristic length of the mesh.
Here we present a more robust approach.
[1]:
import numpy as np
import polpo.preprocessing.dict as ppdict
from polpo.mesh.surface import PvSurface
from polpo.mesh.varifold.tuning import SigmaBisecSearch, SigmaFromLengths
from polpo.preprocessing.load.pregnancy.jacobs import MeshLoader
[KeOps] Warning : CUDA was detected, but driver API could not be initialized. Switching to CPU only.
[2]:
session_subset = np.random.choice(np.arange(1, 27))
mesh_loader = (
MeshLoader(
subject_subset=["01"],
struct_subset=["L_Hipp"],
session_subset=[session_subset],
derivative="enigma",
as_mesh=True,
)
+ ppdict.ExtractUniqueKey(nested=True)
+ PvSurface
)
mesh = mesh_loader()
session_subset
[2]:
np.int64(13)
[3]:
sigma_search = SigmaFromLengths(
ratio_charlen_mesh=2.0,
ratio_charlen=0.25,
)
[4]:
sigma_search.fit([mesh, mesh])
sigma_search.sigma_
[4]:
np.float64(5.483330425019285)
Quick comparison with decimation-based approach.
[5]:
ref_value = 0.1
grid_search = SigmaBisecSearch(
ref_value=ref_value,
decimator=True,
)
grid_search.fit([mesh])
grid_search.sigma_, grid_search.sdist_
[5]:
(np.float64(3.2128889209097373), np.float64(0.09260475849441718))