void TrueClusterHistogram::hbof(const patch &descriptor, Descriptor &histogram, bool histogram_first){ typedef patch_collection::const_iterator pcit; typedef Descriptor::iterator dcit; // find closest cluster size_t classification = 0; float min_distance = 0; bool first = true; for(pcit i = centers.begin(); i != centers.end(); ++i){ float current_distance = (*i).distance(descriptor); if(first == true || current_distance < min_distance){ min_distance = current_distance; classification = i - centers.begin(); } first = false; } // initialize histogram if applicable if(histogram_first) for(dcit i = histogram.begin(); i != histogram.end(); ++i) *i = 0; // increment closest center in the histogram histogram[classification] += 1; }
void TrueClusterHistogram::min(const patch &descriptor, Descriptor &histogram, bool first){ Descriptor::iterator h = histogram.begin(); patch_collection::iterator c = centers.begin(); while(h != histogram.end() && c != centers.end()){ float dist = descriptor.distance(*c); if(first || dist < *h) *h = dist; h++; c++; } }