from collections import OrderedDict
import numpy as np
from ..base import validate_input, connectivity_from_array, labeller_func
[docs]@labeller_func(group_label="hand_ibug_39")
def hand_ibug_39_to_hand_ibug_39(pcloud):
r"""
Apply the IBUG 39-point semantic labels.
The semantic labels applied are as follows:
- thumb
- index
- middle
- ring
- pinky
- palm
"""
from menpo.shape import LabelledPointUndirectedGraph
n_expected_points = 39
validate_input(pcloud, n_expected_points)
thumb_indices = np.arange(0, 5)
index_indices = np.arange(5, 12)
middle_indices = np.arange(12, 19)
ring_indices = np.arange(19, 26)
pinky_indices = np.arange(26, 33)
palm_indices = np.hstack((np.array([32, 25, 18, 11, 33, 34, 4]), np.arange(35, 39)))
thumb_connectivity = connectivity_from_array(thumb_indices, close_loop=False)
index_connectivity = connectivity_from_array(index_indices, close_loop=False)
middle_connectivity = connectivity_from_array(middle_indices, close_loop=False)
ring_connectivity = connectivity_from_array(ring_indices, close_loop=False)
pinky_connectivity = connectivity_from_array(pinky_indices, close_loop=False)
palm_connectivity = connectivity_from_array(palm_indices, close_loop=True)
all_connectivity = np.vstack(
[
thumb_connectivity,
index_connectivity,
middle_connectivity,
ring_connectivity,
pinky_connectivity,
palm_connectivity,
]
)
mapping = OrderedDict()
mapping["thumb"] = thumb_indices
mapping["index"] = index_indices
mapping["middle"] = middle_indices
mapping["ring"] = ring_indices
mapping["pinky"] = pinky_indices
mapping["palm"] = palm_indices
new_pcloud = LabelledPointUndirectedGraph.init_from_indices_mapping(
pcloud.points, all_connectivity, mapping
)
return new_pcloud, mapping