/* 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; } } } }
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(); }
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); }