コード例 #1
0
void BroadEstepper1::update_mean_broad()
  {
  int PPF=_opts.tune_pseudopoint_factor; 
  valarray<double>pmean(G);
  for (int k=0; k<G; k++) pmean[k] = _prior.mean(_cvec[k]);
  int num_pseudopoints = int(N/PPF);
  if (!num_pseudopoints) num_pseudopoints = 1;
  valarray<double>xmean(0.0,G);

  for (int k=0; k<G; k++)
    {
    double kwsum=0.0, wsum=0.0;
    for (int i=0; i<N; i++)
      {
      kwsum += _vals[i]*_prob.element(i,k);
      wsum += _prob.element(i,k);
      if (wsum > 0.0) xmean[k] = kwsum/wsum;
      }
    }

  for (int k=0; k<G; k++)
    {
    _mean[k] = xmean[k]*N*_prop[k] + pmean[k]*num_pseudopoints;
    _mean[k] /= N*_prop[k] + num_pseudopoints;
    }
  }
コード例 #2
0
	/*! @brief create a single bounding box around the detection from mean and standard deviation
	 *
	 * @return a bounding box
	 */
	cv::Rect boundingBoxNorm(void) const {
		const unsigned int nparts = parts_.size();
		cv::Mat_<int> xpts(cv::Size(1,nparts));
		cv::Mat_<int> ypts(cv::Size(1,nparts));
		for (unsigned int n = 0; n < nparts; ++n) {
			const cv::Point centroid = (parts_[n].tl() + parts_[n].br())*0.5;
			xpts(n) = centroid.x;
			ypts(n) = centroid.y;
		}
		cv::Scalar xmean, ymean, xstd, ystd;
		cv::meanStdDev(xpts, xmean, xstd);
		cv::meanStdDev(ypts, ymean, ystd);
		return cv::Rect(xmean(0)-1.5*xstd(0), ymean(0)-1.5*ystd(0), 3*xstd(0), 3*ystd(0));
	}