void HistogramFeatures::UpdateFeatureVector(const Sample& s) { //IntRect rect = s.GetROI(); // note this truncates to integers //cv::Rect roi(rect.XMin(), rect.YMin(), rect.Width(), rect.Height()); //cv::resize(s.GetImage().GetImage(0)(roi), m_patchImage, m_patchImage.size()); m_featVec.setZero(); VectorXd hist(kNumBins); int histind = 0; for (int il = 0; il < kNumLevels; ++il) { int nc = il+1; float w = s.GetROI().Width()/nc; float h = s.GetROI().Height()/nc; FloatRect cell(0.f, 0.f, w, h); for (int iy = 0; iy < nc; ++iy) { cell.SetYMin(s.GetROI().YMin()+iy*h); for (int ix = 0; ix < nc; ++ix) { cell.SetXMin(s.GetROI().XMin()+ix*w); s.GetImage().Hist(cell, hist); m_featVec.segment(histind*kNumBins, kNumBins) = hist; ++histind; } } } m_featVec /= histind; }
void HsvFeatures::UpdateFeatureVector(const Sample &s) { IntRect rect = s.GetROI(); cv::Rect roi(rect.XMin(), rect.YMin(), rect.Width(), rect.Height()); m_featVec.setZero(); cv::Mat hsv_img = s.GetImage().GetHsvImage()(roi); int height = rect.Height(); int width = rect.Width(); // continuous? if(hsv_img.isContinuous()) { width *= height; height = 1; } int ix, iy; uchar *p; for(iy=0; iy < height; ++iy) { p = hsv_img.ptr<uchar>(iy); for(ix=0; ix < width; ++ix) { cv::Vec3b pixel(p[3*ix+0], p[3*ix+1], p[3*ix+2]); auto bin_idx = compBinIdx(pixel); m_featVec[bin_idx]++; } } m_featVec /= rect.Area(); }
float HaarFeature::Eval(const Sample& s) const { const ImageRep& image = s.GetImage(); const FloatRect& roi = s.GetROI(); float value = 0.f; for (int i = 0; i < (int)m_rects.size(); ++i) { const FloatRect& r = m_rects[i]; IntRect sampleRect((int)(roi.XMin() + r.XMin()*roi.Width() + 0.5f), (int)(roi.YMin() + r.YMin()*roi.Height() + 0.5f), (int)(r.Width()*roi.Width()), (int)(r.Height()*roi.Height())); value += m_weights[i] * image.Sum(sampleRect); } return value / (m_factor * roi.Area() * m_bb.Area()); }
void RawFeatures::UpdateFeatureVector(const Sample& s) { IntRect rect = s.GetROI(); // note this truncates to integers cv::Rect roi(rect.XMin(), rect.YMin(), rect.Width(), rect.Height()); cv::resize(s.GetImage().GetImage(0)(roi), m_patchImage, m_patchImage.size()); //equalizeHist(m_patchImage, m_patchImage); int ind = 0; for (int i = 0; i < kPatchSize; ++i) { uchar* pixel = m_patchImage.ptr(i); for (int j = 0; j < kPatchSize; ++j, ++pixel, ++ind) { m_featVec[ind] = ((double)*pixel)/255; } } }
float SingFeature::Eval(const Sample& s) const { const ImageSto& image = s.GetImage(); const FtRec& roi = s.GetROI(); float value = 0.f; for (int i = 0; i < (int)o_rects.size(); ++i) { const FtRec& r = o_rects[i]; ItRec sampleRect((int)(roi.XMin()+r.XMin()*roi.Width()+0.5f), (int)(roi.YMin()+r.YMin()*roi.Height()+0.5f), (int)(r.Width()*roi.Width()), (int)(r.Height()*roi.Height())); value += o_weights[i]*image.Sum(sampleRect); } return value / (o_factor*roi.Area()*o_bb.Area()); }
float MFEval(const Sample& s, petuum::Table<float>& Fec_table, int ind) { //Get table petuum::RowAccessor fec_acc; Fec_table.Get(ind, &fec_acc); const petuum::DenseRow<float>& ref_fec = fec_acc.Get<petuum::DenseRow<float> >(); const ImageSto& image = s.GetImage(); const FtRec& roi = s.GetROI(); float mf_factor = 0; float value = 0.f; switch((int)ref_fec[0]) { case 0: { ItRec sampleRect_1((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]*roi.Width()), (int)(ref_fec[4]/2*roi.Height())); value += 1.f*image.Sum(sampleRect_1); ItRec sampleRect_2((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+(ref_fec[2]+ref_fec[4]/2)*roi.Height()+0.5f), (int)(ref_fec[3]*roi.Width()), (int)(ref_fec[4]/2*roi.Height())); value += -1.f*image.Sum(sampleRect_2); mf_factor = 255*1.f/2; break; } case 1: { ItRec sampleRect_1((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]/2*roi.Width()), (int)(ref_fec[4]*roi.Height())); value += 1.f*image.Sum(sampleRect_1); ItRec sampleRect_2((int)(roi.XMin()+(ref_fec[1]+ref_fec[3]/2)*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]/2*roi.Width()), (int)(ref_fec[4]*roi.Height())); value += -1.f*image.Sum(sampleRect_2); mf_factor = 255*1.f/2; break; } case 2: { ItRec sampleRect_1((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]/3*roi.Width()), (int)(ref_fec[4]*roi.Height())); value += 1.f*image.Sum(sampleRect_1); ItRec sampleRect_2((int)(roi.XMin()+(ref_fec[1]+ref_fec[3]/3)*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]/3*roi.Width()), (int)(ref_fec[4]*roi.Height())); value += -2.f*image.Sum(sampleRect_2); ItRec sampleRect_3((int)(roi.XMin()+(ref_fec[1]+2*ref_fec[3]/3)*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]/3*roi.Width()), (int)(ref_fec[4]*roi.Height())); value += 1.f*image.Sum(sampleRect_3); mf_factor = 255*2.f/3; break; } case 3: { ItRec sampleRect_1((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]*roi.Width()), (int)(ref_fec[4]/3*roi.Height())); value += 1.f*image.Sum(sampleRect_1); ItRec sampleRect_2((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+(ref_fec[2]+ref_fec[4]/3)*roi.Height()+0.5f), (int)(ref_fec[3]*roi.Width()), (int)(ref_fec[4]/3*roi.Height())); value += -2.f*image.Sum(sampleRect_2); ItRec sampleRect_3((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+(ref_fec[2]+2*ref_fec[4]/3)*roi.Height()+0.5f), (int)(ref_fec[3]*roi.Width()), (int)(ref_fec[4]/3*roi.Height())); value += 1.f*image.Sum(sampleRect_3); mf_factor = 255*2.f/3; break; } case 4: { ItRec sampleRect_1((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]/2*roi.Width()), (int)(ref_fec[4]/2*roi.Height())); value += 1.f*image.Sum(sampleRect_1); ItRec sampleRect_2((int)(roi.XMin()+(ref_fec[1]+ref_fec[3]/2)*roi.Width()+0.5f), (int)(roi.YMin()+(ref_fec[2]+ref_fec[4]/2)*roi.Height()+0.5f), (int)(ref_fec[3]/2*roi.Width()), (int)(ref_fec[4]/2*roi.Height())); value += 1.f*image.Sum(sampleRect_2); ItRec sampleRect_3((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+(ref_fec[2]+ref_fec[4]/2)*roi.Height()+0.5f), (int)(ref_fec[3]/2*roi.Width()), (int)(ref_fec[4]/2*roi.Height())); value += -1.f*image.Sum(sampleRect_3); ItRec sampleRect_4((int)(roi.XMin()+(ref_fec[1]+ref_fec[3]/2)*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]/2*roi.Width()), (int)(ref_fec[4]/2*roi.Height())); value += -1.f*image.Sum(sampleRect_4); mf_factor = 255*1.f/2; break; } case 5: { ItRec sampleRect_1((int)(roi.XMin()+ref_fec[1]*roi.Width()+0.5f), (int)(roi.YMin()+ref_fec[2]*roi.Height()+0.5f), (int)(ref_fec[3]*roi.Width()), (int)(ref_fec[4]*roi.Height())); value += 1.f*image.Sum(sampleRect_1); ItRec sampleRect_2((int)(roi.XMin()+(ref_fec[1]+ref_fec[3]/4)*roi.Width()+0.5f), (int)(roi.YMin()+(ref_fec[2]+ref_fec[4]/4)*roi.Height()+0.5f), (int)(ref_fec[3]/2*roi.Width()), (int)(ref_fec[4]/2*roi.Height())); value += -4.f*image.Sum(sampleRect_2); mf_factor = 255*3.f/4; break; } } return value / (mf_factor*roi.Area()*mf_bb.Area()); }