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;
}
Example #2
0
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();

}
Example #3
0
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());
}
Example #4
0
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;
		}
	}
}
Example #5
0
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());
}
Example #6
0
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());
}