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))

Further reading#