| #include "RenderItemMatcher.hpp" |
| |
| |
| double |
| RenderItemMatcher::computeMatching (const RenderItemList & lhs, const RenderItemList & rhs) const |
| { |
| for (int i = 0; i < lhs.size();i++) { |
| int j; |
| for (j = 0; j < rhs.size();j++) |
| _weights[i][j] = _distanceFunction(lhs[i], rhs[j]); |
| for (; j < lhs.size();j++) |
| _weights[i][j] = RenderItemDistanceMetric::NOT_COMPARABLE_VALUE; |
| } |
| |
| |
| const double error = _hungarianMethod(_weights, lhs.size()); |
| //std::cout << "[computeMatching] total error is " << error << std::endl; |
| return error; |
| } |
| |
| |
| void |
| RenderItemMatcher::setMatches (const RenderItemList & lhs_src, const RenderItemList & rhs_src) const |
| { |
| for (int i = 0; i < lhs_src.size();i++) { |
| const int j = _hungarianMethod.matching(i); |
| |
| // hack |
| if (true || _weights[i][j] == RenderItemDistanceMetric::NOT_COMPARABLE_VALUE) { |
| _results.unmatchedLeft.push_back(lhs_src[i]); |
| _results.unmatchedRight.push_back(rhs_src[i]); |
| } else { |
| _results.matches.push_back(std::make_pair(lhs_src[i], rhs_src[j])); |
| } |
| } |
| } |