コード例 #1
0
ファイル: VectorProcessor.cpp プロジェクト: OlgaKurzeneva/OOP
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());
}
コード例 #2
0
ファイル: Smoothing.cpp プロジェクト: mforner/wpl-polsar
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 */