示例#1
0
/* This fuction traveres the table and add vint and time to the trajectory. */
int	recursiveMove(std::vector<classPoint2T> &traj, int t, int d, int vend_index, int v0_index, std::vector<std::vector<fSet> >& G, std::vector<std::vector<int> >  &T, std::vector<std::vector<int> > &D  ){
	// std::cout<<"t and d: "<<t<< " - "<<d<<std::endl; 
	if(t <= 0.1 && d <= 0.1){
		// std::cout<<" End recursive move!"<<std::endl;
		return 1; 
	} 
	  	// print T 
	std::cout<<"T table in recursive:"<<std::endl;
	for(int i=0; i<26; i++){
		for(int j = 0; j<26; j++)
			std::cout<<T[i][j]<<"\t";
		std::cout<<"\n";
	} 
	for(int vint_index=0; vint_index<M; vint_index++){
		int delta_d = d - D[v0_index][vint_index];
		if(delta_d >=0){
			int delta_t = t - T[v0_index][vint_index];
			classPoint2T point(delta_t, vend_index); 
			if(delta_t>=0 && point.inSet(G[vint_index][delta_d]) >=0){
				/* add point to the trajectory */
				std::cout<<"v0_index: "<<v0_index<<" vint_index: "<<vint_index<<" T[][]: "<<T[v0_index][vint_index]<<" D[][]: "<<D[v0_index][vint_index]<< " t:" <<t<<" d:"<<d<<std::endl;
				classPoint2T intPoint(T[v0_index][vint_index] + traj.back().time, vint_index); 
				traj.push_back(intPoint);
				// std::cout<<"\t recursiveMove: obtained an intermediate point:"<< intPoint.time <<"-"<<intPoint.vel<<std::endl; 
				// continue recursiveMove() with new ending time, ending distance and starting velocity
				recursiveMove(traj, delta_t, delta_d, vend_index, vint_index, G, T, D);
				break; 
			}
		}
	}
}
示例#2
0
void BtCircleTrain::train2DGaussian(BFImage& bfImage, BFImage& bfHist, const BFCircle& circle, BfGaussian2DPixelClassifier& classifier) {

	assert(bfImage.getColorMode() == BF_LAB);

	std::vector<BFCoordinate<int> > innerPoints;
	BFCircle::getInnerPoints(circle, innerPoints);
	int nPoints = innerPoints.size();

	Eigen::MatrixXd xT(nPoints,2);
	cv::Mat histImg = cv::Mat::zeros(histSize,histSize,CV_8U);

	for(int i=0; i<nPoints; i++) {
		BFCoordinate<unsigned int> intPoint(static_cast<int>(innerPoints[i].getX()), static_cast<int>(innerPoints[i].getY()));

		BFColor color = bfImage.getColor(intPoint);

		int aValue = color.getChannel(1);
		int bValue = color.getChannel(2);

		assert(aValue+abRange >= 0 && aValue+abRange < 2*abRange);
		assert(bValue+abRange >= 0 && bValue+abRange < 2*abRange);

		histImg.datastart[(bValue+abRange)*histSize + aValue+abRange]++;

		xT(i,0) = static_cast<double>(aValue);
		xT(i,1) = static_cast<double>(bValue);
	}

	double meanA = xT.col(0).mean();
	double meanB = xT.col(1).mean();

	Eigen::VectorXd meanVecA;
	Eigen::VectorXd meanVecB;
	meanVecA.setConstant(nPoints, meanA);
	meanVecB.setConstant(nPoints, meanB);

	xT.col(0) -= meanVecA;
	xT.col(1) -= meanVecB;

	Eigen::Matrix2d C = xT.transpose()*xT/static_cast<double>(nPoints-1);
	Eigen::Vector2d mu;
	mu << meanA, meanB;

	bfHist.setColorMode(BF_GRAYSCALE);
	cv::Mat& histNorm = bfHist.getImageMat();

	// just for visualization
	cv::normalize(histImg,histNorm,255.0,0.0,cv::NORM_INF,-1);

	classifier.setC(C);
	classifier.setMu(mu);
	classifier.calculateEllipse();
}
示例#3
0
TEyeXMaybeValue<FVector2D> FEyeXUtils::VirtualDesktopPixelToViewportPixel(FVector2D Point)
{
	auto viewport = GetViewport();
	if (viewport == nullptr)
	{
		return TEyeXMaybeValue<FVector2D>(FVector2D::ZeroVector, false);
	}

	FIntPoint intPoint((int32)Point.X, (int32)Point.Y);
	FVector2D viewportPoint = viewport->VirtualDesktopPixelToViewport(intPoint);

	auto viewportSize = viewport->GetSizeXY();
	FVector2D viewportPixels(viewportPoint.X * viewportSize.X, viewportPoint.Y * viewportSize.Y);
	return TEyeXMaybeValue<FVector2D>(viewportPixels);
}