Source code for cellcomplex.property_topomesh.utils.matching_tools
# -*- coding: utf-8 -*-
# -*- python -*-
#
# PropertyTopomesh
#
# Copyright 2014-2016 INRIA - CIRAD - INRA
#
# File author(s): Guillaume Cerutti <guillaume.cerutti@inria.fr>
#
# File contributor(s): Guillaume Cerutti <guillaume.cerutti@inria.fr>
#
# Distributed under the Cecill-C License.
# See accompanying file LICENSE.txt or copy at
# http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html
#
# OpenaleaLab Website : http://virtualplants.github.io/
#
###############################################################################
import numpy as np
from scipy.spatial import cKDTree
from scipy.cluster.vq import vq
[docs]def brute_force_match(obs, codebook):
distance_matrix = np.linalg.norm(obs[:,np.newaxis] - codebook[np.newaxis,:],axis=2)
return (np.argmin(distance_matrix,axis=1),np.min(distance_matrix,axis=1))
[docs]def kd_tree_match(obs, codebook, radius=1e-5):
data = cKDTree(obs)
res1 = data.query_ball_tree(cKDTree(codebook), radius, 2, radius)
res1 = np.array([r[np.argmin(np.linalg.norm(codebook[r] - o,axis=1))] if len(r)>0 else None for o,r in zip(obs,res1)])
return res1
[docs]def vector_quantization_match(obs, codebook):
return vq(obs, codebook)[0]