void ProcessVector(std::vector<double> & numbers) { double minimalNumber = *(std::min_element(numbers.begin(), numbers.end())); //boost::transform(numbers, numbers.begin(), arg1 * minimalNumber); transform(numbers.begin(), numbers.end(), numbers.begin(), [minimalNumber](double current) { return (current * minimalNumber); }); sort(numbers.begin(), numbers.end()); }
int global_smooth(ImagePyramid& v_copy, LinkPyramid& w_copy, const level_t lv, const floating_t thresh1, const floating_t thresh2, const size_t top_level) { using boost::transform; using boost::adaptors::filter; using common::pars; using std::back_inserter; using stats::print_roots; using std::vector; using util::fmt; using std::cout; using std::endl; auto root_cnt = 0; auto is_weak = [&w_copy, &thresh1](const auto& par, const auto& desc) { return w_copy(par, desc) < thresh1; }; auto is_strong = [&w_copy, &thresh2](const auto& par, const auto& desc) { return w_copy(par, desc) > thresh2; }; auto is_root = [&w_copy, top_level](const auto& node) { return node.level >= top_level || util::is_zero(sum_upward_links(w_copy, node)); }; erase_weak_links(w_copy, lv, is_weak); normalize(w_copy, lv); for (const Node& node : w_copy.nodes(lv)) { if (is_root(node) /*|| 1./util::condition(v_copy(node)) < 1e-6*/) { root_cnt++; continue; } else { auto buf = std::vector<Mat3c> {}; buf.reserve(4); auto is_accepted = [is_strong, &node](auto& par) { return is_strong(par, node); }; transform(filter(pars(node), is_accepted), back_inserter(buf), [&](auto par) { return v_copy(par); }); if (buf.empty()) { auto par = strongest_parent(w_copy, node); buf.push_back(v_copy(par)); } v_copy(node) = util::average(buf, Mat3c::Zero(3, 3)); } } // Print some information auto node_range = w_copy.nodes(lv); cout << endl; stats::print_roots(node_range, is_root); stats::print_accepted(node_range, is_strong, is_root); cout << " weak: <" << util::fmt(thresh1, 5) << endl << "accepted: >" << util::fmt(thresh2, 5) << endl << " nodes: " << node_range.size() << endl; return root_cnt; } /* smooth_core */