int ImageRep::Sum(const IntRect& rRect, int channel) const { assert(rRect.XMin() >= 0 && rRect.YMin() >= 0 && rRect.XMax() <= m_images[0].cols && rRect.YMax() <= m_images[0].rows); return m_integralImages[channel].at<int>(rRect.YMin(), rRect.XMin()) + m_integralImages[channel].at<int>(rRect.YMax(), rRect.XMax()) - m_integralImages[channel].at<int>(rRect.YMax(), rRect.XMin()) - m_integralImages[channel].at<int>(rRect.YMin(), rRect.XMax()); }
void ImageRep::Hist(const IntRect& rRect, Eigen::VectorXd& h) const { assert(rRect.XMin() >= 0 && rRect.YMin() >= 0 && rRect.XMax() <= m_images[0].cols && rRect.YMax() <= m_images[0].rows); int norm = rRect.Area(); for (int i = 0; i < kNumBins; ++i) { int sum = m_integralHistImages[i].at<int>(rRect.YMin(), rRect.XMin()) + m_integralHistImages[i].at<int>(rRect.YMax(), rRect.XMax()) - m_integralHistImages[i].at<int>(rRect.YMax(), rRect.XMin()) - m_integralHistImages[i].at<int>(rRect.YMin(), rRect.XMax()); h[i] = (float)sum/norm; } }
int ImageRep::MeanHsv(const IntRect& rRect, int channel) const { assert(rRect.XMin() >= 0 && rRect.YMin() >= 0 && rRect.XMax() <= m_images[0].cols && rRect.YMax() <= m_images[0].rows); int sum_v = m_integralHsvImages[channel].at<int>(rRect.YMin(), rRect.XMin()) + m_integralHsvImages[channel].at<int>(rRect.YMax(), rRect.XMax()) - m_integralHsvImages[channel].at<int>(rRect.YMax(), rRect.XMin()) - m_integralHsvImages[channel].at<int>(rRect.YMin(), rRect.XMax()); return sum_v / rRect.Area(); }