changed anchor feature position calculation
This commit is contained in:
		| @@ -121,6 +121,15 @@ struct Feature { | ||||
|   inline bool checkMotion( | ||||
|       const CamStateServer& cam_states) const; | ||||
|  | ||||
|  | ||||
|   /* | ||||
|    * @brief AnchorPixelToPosition projects an undistorted point in the | ||||
|    *        anchor frame back into the real world using the rho calculated  | ||||
|    *        based on featur position | ||||
|    */ | ||||
|   inline Eigen::Vector3d AnchorPixelToPosition(cv::Point2f in_p, const CameraCalibration& cam); | ||||
|  | ||||
|  | ||||
|   /* | ||||
|    * @brief InitializeAnchor generates the NxN patch around the | ||||
|    *        feature in the Anchor image | ||||
| @@ -745,6 +754,20 @@ Eigen::Vector3d Feature::projectPixelToPosition(cv::Point2f in_p, const CameraCa | ||||
|   //printf("%f, %f, %f\n",PositionInWorld[0], PositionInWorld[1], PositionInWorld[2]); | ||||
| } | ||||
|  | ||||
|  | ||||
| Eigen::Vector3d Feature::AnchorPixelToPosition(cv::Point2f in_p, const CameraCalibration& cam) | ||||
| { | ||||
|   // use undistorted position of point of interest | ||||
|   // project it back into 3D space using pinhole model | ||||
|   // save resulting NxN positions for this feature | ||||
|  | ||||
|   Eigen::Vector3d PositionInCamera(in_p.x/anchor_rho, in_p.y/anchor_rho, 1/anchor_rho); | ||||
|   Eigen::Vector3d PositionInWorld = T_anchor_w.linear()*PositionInCamera + T_anchor_w.translation(); | ||||
|   return PositionInWorld; | ||||
|   //printf("%f, %f, %f\n",PositionInWorld[0], PositionInWorld[1], PositionInWorld[2]); | ||||
| } | ||||
|  | ||||
|  | ||||
| //@test center projection must always be initial feature projection | ||||
| bool Feature::initializeAnchor(const CameraCalibration& cam, int N) | ||||
| { | ||||
| @@ -772,27 +795,19 @@ bool Feature::initializeAnchor(const CameraCalibration& cam, int N) | ||||
|   cv::Point2f und_pix_p = image_handler::distortPoint(cv::Point2f(u, v),  | ||||
|                                                     cam.intrinsics,  | ||||
|                                                     cam.distortion_model,  | ||||
|                                                     0); | ||||
|                                                     cam.distortion_coeffs); | ||||
|   // create vector of patch in pixel plane | ||||
|   std::vector<cv::Point2f>und_pix_v; | ||||
|   for(double u_run = -n; u_run <= n; u_run++) | ||||
|     for(double v_run = -n; v_run <= n; v_run++) | ||||
|       und_pix_v.push_back(cv::Point2f(und_pix_p.x+u_run, und_pix_p.y+v_run)); | ||||
|       anchorPatch_real.push_back(cv::Point2f(und_pix_p.x+u_run, und_pix_p.y+v_run)); | ||||
|  | ||||
|  | ||||
|   //create undistorted pure points     | ||||
|   std::vector<cv::Point2f> und_v; | ||||
|   image_handler::undistortPoints(und_pix_v, | ||||
|   image_handler::undistortPoints(anchorPatch_real, | ||||
|                                 cam.intrinsics, | ||||
|                                 cam.distortion_model, | ||||
|                                 0, | ||||
|                                 und_v); | ||||
|  | ||||
|   //create distorted pixel points | ||||
|   anchorPatch_real = image_handler::distortPoints(und_v, | ||||
|                                                    cam.intrinsics, | ||||
|                                                    cam.distortion_model, | ||||
|                                                    cam.distortion_coeffs); | ||||
|                                 cam.distortion_coeffs, | ||||
|                                 anchorPatch_ideal); | ||||
|  | ||||
|  | ||||
|   // save anchor position for later visualisaztion | ||||
| @@ -800,19 +815,16 @@ bool Feature::initializeAnchor(const CameraCalibration& cam, int N) | ||||
|  | ||||
|   // save true pixel Patch position | ||||
|   for(auto point : anchorPatch_real) | ||||
|   { | ||||
|     if(point.x - n < 0 || point.x + n >= cam.resolution(0) || point.y - n < 0 || point.y + n >= cam.resolution(1)) | ||||
|       return false; | ||||
|   } | ||||
|  | ||||
|   for(auto point : anchorPatch_real) | ||||
|     anchorPatch.push_back(PixelIrradiance(point, anchorImage)); | ||||
|  | ||||
|   // project patch pixel to 3D space in camera  coordinate system | ||||
|   for(auto point : und_v) | ||||
|   { | ||||
|     anchorPatch_ideal.push_back(point); | ||||
|     anchorPatch_3d.push_back(projectPixelToPosition(point, cam)); | ||||
|   } | ||||
|   for(auto point : anchorPatch_ideal) | ||||
|     anchorPatch_3d.push_back(AnchorPixelToPosition(point, cam)); | ||||
|  | ||||
|   is_anchored = true; | ||||
|   return true; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user