NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
rad_distorter.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, United States Government, as represented by the
2  * Administrator of the National Aeronautics and Space Administration.
3  *
4  * All rights reserved.
5  *
6  * The Astrobee platform is licensed under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with the
8  * License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15  * License for the specific language governing permissions and limitations
16  * under the License.
17  */
18 #ifndef VISION_COMMON_RAD_DISTORTER_H_
19 #define VISION_COMMON_RAD_DISTORTER_H_
20 
23 
24 #include <Eigen/Core>
25 
26 #include <opencv2/core/eigen.hpp>
27 
28 namespace vision_common {
29 class RadDistorter : public Distorter<2, RadDistorter> {
30  public:
33 
34  template <typename T>
35  Eigen::Matrix<T, 2, 1> Distort(const T* distortion, const Eigen::Matrix<T, 3, 3>& intrinsics,
36  const Eigen::Matrix<T, 2, 1>& undistorted_point) const {
37  T radtan_distortion[4];
38  radtan_distortion[0] = distortion[0];
39  radtan_distortion[1] = distortion[1];
40  radtan_distortion[2] = T(0.0);
41  radtan_distortion[3] = T(0.0);
42  return radtan_distorter_.Distort(radtan_distortion, intrinsics, undistorted_point);
43  }
44 
45  cv::Mat Undistort(const cv::Mat& distorted_image, const Eigen::Matrix3d& intrinsics,
46  const Eigen::VectorXd& distortion) const final {
47  const Eigen::VectorXd radtan_distortion = RadTanDistortionVector(distortion);
48  return radtan_distorter_.Undistort(distorted_image, intrinsics, radtan_distortion);
49  }
50 
51  Eigen::Vector2d Undistort(const Eigen::Vector2d& distorted_point, const Eigen::Matrix3d& intrinsics,
52  const Eigen::VectorXd& distortion) const final {
53  const Eigen::VectorXd radtan_distortion = RadTanDistortionVector(distortion);
54  return radtan_distorter_.Undistort(distorted_point, intrinsics, radtan_distortion);
55  }
56 
57  private:
58  Eigen::VectorXd RadTanDistortionVector(const Eigen::VectorXd& rad_distortion) const {
59  Eigen::VectorXd radtan_distortion(4);
60  radtan_distortion[0] = rad_distortion[0];
61  radtan_distortion[1] = rad_distortion[1];
62  radtan_distortion[2] = 0;
63  radtan_distortion[3] = 0;
64  return radtan_distortion;
65  }
66 
67  RadTanDistorter radtan_distorter_;
68 };
69 } // namespace vision_common
70 
71 #endif // VISION_COMMON_RAD_DISTORTER_H_
vision_common::RadDistorter::Undistort
Eigen::Vector2d Undistort(const Eigen::Vector2d &distorted_point, const Eigen::Matrix3d &intrinsics, const Eigen::VectorXd &distortion) const final
Definition: rad_distorter.h:51
vision_common
Definition: brisk_feature_detector_and_matcher.h:25
vision_common::RadDistorter
Definition: rad_distorter.h:29
vision_common::Distorter
Definition: distorter.h:29
vision_common::RadDistorter::Distort
Eigen::Matrix< T, 2, 1 > Distort(const T *distortion, const Eigen::Matrix< T, 3, 3 > &intrinsics, const Eigen::Matrix< T, 2, 1 > &undistorted_point) const
Definition: rad_distorter.h:35
vision_common::RadTanDistorter::Distort
Eigen::Matrix< T, 2, 1 > Distort(const T *distortion, const Eigen::Matrix< T, 3, 3 > &intrinsics, const Eigen::Matrix< T, 2, 1 > &undistorted_point) const
Definition: radtan_distorter.h:37
distorter.h
vision_common::RadTanDistorter::Undistort
cv::Mat Undistort(const cv::Mat &distorted_image, const Eigen::Matrix3d &intrinsics, const Eigen::VectorXd &distortion) const final
Definition: radtan_distorter.h:66
vision_common::RadDistorter::Undistort
cv::Mat Undistort(const cv::Mat &distorted_image, const Eigen::Matrix3d &intrinsics, const Eigen::VectorXd &distortion) const final
Definition: rad_distorter.h:45
radtan_distorter.h