void ExtractFeatures(const TDataSet& data_set, TFeatures* features, bool sse_on) {
    Timer t;
    t.start();
    for (size_t image_idx = 0; image_idx < data_set.size(); ++image_idx) {
        vector<float> one_image_features;
        BMP *im = data_set[image_idx].first;
        uint h = im->TellHeight() - 2, w = im->TellWidth() - 2;
        Matrix <float>  Direct(h, w), Abs(h, w);
        if (sse_on){
            get_dir_abs_SSE(im, Direct, Abs);
            to_features(Direct, Abs, one_image_features);
        }
        else{
            get_dir_abs(im, Direct, Abs);
            to_features(Direct, Abs, one_image_features);
        }
        features->push_back(make_pair(one_image_features,  data_set[image_idx].second));
    }
    if (sse_on)
        t.check("SSE ON");
    else
        t.check("SSE OFF");
}