complete the metris functions
[trackerpp.git] / src / hungarian.cpp
index 85b49e5..e8f49e3 100644 (file)
@@ -57,6 +57,11 @@ int linear_sum_assignment(const MatrixXi& cost_matrix, VectorXi& row_ind, Vector
 {
     // The algorithm expects more columns than rows in the cost matrix.
     MatrixXi correct_matrix = cost_matrix;
+    if (cost_matrix.cols() == 0 || cost_matrix.rows() == 0){
+        row_ind = VectorXi::Zero(0);
+        col_ind = VectorXi::Zero(0);
+        return 0;
+    }
     bool is_transposed = false;
     if (cost_matrix.cols() < cost_matrix.rows()){
         cout << "cols < rows, transpose." << endl;
@@ -301,3 +306,15 @@ int step_six(Hungary& state)
         }
     return 4;
 }
+
+////////////////////////////////////////////////////////////////////////////////
+double distance_cosine(const VectorXd& u, const VectorXd& v)
+{
+    return (1 - u.dot(v) / std::sqrt(u.dot(u) * v.dot(v)));
+}
+
+double distance_euclidean(const VectorXd& u, const VectorXd& v)
+{
+    VectorXd d = u - v;
+    return std::sqrt(d.dot(d));
+}