Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Convert a vector of non-homogeneous 2D points to a vector of homogenehous 2D points.
- void to_homogeneous(const std::vector< cv::Point2f >& non_homogeneous, std::vector< cv::Point3f >& homogeneous)
- {
- homogeneous.resize(non_homogeneous.size());
- for (size_t i = 0; i < non_homogeneous.size(); i++)
- {
- homogeneous[i].x = non_homogeneous[i].x;
- homogeneous[i].y = non_homogeneous[i].y;
- homogeneous[i].z = 1.0;
- }
- }
- // Convert a vector of homogeneous 2D points to a vector of non-homogenehous 2D points.
- void from_homogeneous(const std::vector< cv::Point3f >& homogeneous, std::vector< cv::Point2f >& non_homogeneous)
- {
- non_homogeneous.resize(homogeneous.size());
- for (size_t i = 0; i < non_homogeneous.size(); i++)
- {
- non_homogeneous[i].x = homogeneous[i].x / homogeneous[i].z;
- non_homogeneous[i].y = homogeneous[i].y / homogeneous[i].z;
- }
- }
- // Transform a vector of 2D non-homogeneous points via an homography.
- std::vector<cv::Point2f> transform_via_homography(const std::vector<cv::Point2f>& points, const cv::Matx33f& homography)
- {
- // Convert 2D points from Cartesian coordinate to homogeneous coordinate
- std::vector<cv::Point3f> ph;
- to_homogeneous(points, ph);
- // Applied homography
- for (size_t i = 0; i < ph.size(); i++)
- {
- ph[i] = homography*ph[i];
- }
- // Convert (Normalised) the points back to Cartesian coordinate system
- std::vector<cv::Point2f> r;
- from_homogeneous(ph, r);
- return r;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement