| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * SimpleCamera.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Created on: Aug 16, 2009 | 
					
						
							|  |  |  |  *      Author: dellaert | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef SIMPLECAMERA_H_
 | 
					
						
							|  |  |  | #define SIMPLECAMERA_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-20 01:23:19 +08:00
										 |  |  | #include <gtsam/geometry/CalibratedCamera.h>
 | 
					
						
							|  |  |  | #include <gtsam/geometry/Cal3_S2.h>
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace gtsam { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * A simple camera class with a Cal3_S2 calibration | 
					
						
							|  |  |  | 	 * Basically takes a Calibrated camera and adds calibration information | 
					
						
							|  |  |  | 	 * to produce measurements in pixels. | 
					
						
							|  |  |  | 	 * Not a sublass as a SimpleCamera *is not* a CalibratedCamera. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	class SimpleCamera { | 
					
						
							|  |  |  | 	private: | 
					
						
							|  |  |  | 		CalibratedCamera calibrated_; // Calibrated camera
 | 
					
						
							|  |  |  | 		Cal3_S2 K_; // Calibration
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public: | 
					
						
							| 
									
										
										
										
											2009-08-29 14:54:10 +08:00
										 |  |  | 		SimpleCamera(const Cal3_S2& K, const CalibratedCamera& calibrated); | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 		SimpleCamera(const Cal3_S2& K, const Pose3& pose); | 
					
						
							|  |  |  | 		virtual ~SimpleCamera(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		const Pose3& pose() const { | 
					
						
							|  |  |  | 			return calibrated_.pose(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		const Cal3_S2& calibration() const { | 
					
						
							|  |  |  | 			return K_; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-14 00:09:54 +08:00
										 |  |  | 		/**
 | 
					
						
							|  |  |  | 		 * project a 3d point to the camera and also check the depth | 
					
						
							|  |  |  | 		 */ | 
					
						
							|  |  |  | 		std::pair<Point2,bool> projectSafe(const Point3& P) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-19 16:32:55 +08:00
										 |  |  | 		/**
 | 
					
						
							|  |  |  | 		 * backproject a 2d point from the camera up to a given scale | 
					
						
							|  |  |  | 		 */ | 
					
						
							|  |  |  | 		Point3 backproject(const Point2& projection, const double scale) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-29 14:54:10 +08:00
										 |  |  | 		/**
 | 
					
						
							|  |  |  | 		 * Create a level camera at the given 2D pose and height | 
					
						
							| 
									
										
										
										
											2009-09-12 04:51:49 +08:00
										 |  |  | 		 * @param pose2 specifies the location and viewing direction | 
					
						
							|  |  |  | 		 * (theta 0 = looking in direction of positive X axis) | 
					
						
							| 
									
										
										
										
											2009-08-29 14:54:10 +08:00
										 |  |  | 		 */ | 
					
						
							| 
									
										
										
										
											2009-08-29 15:39:20 +08:00
										 |  |  | 		static SimpleCamera level(const Cal3_S2& K, const Pose2& pose2, double height); | 
					
						
							| 
									
										
										
										
											2009-08-29 14:54:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-23 05:45:53 +08:00
										 |  |  | 		/**
 | 
					
						
							|  |  |  | 		 * This function receives the camera pose and the landmark location and | 
					
						
							|  |  |  | 		 * returns the location the point is supposed to appear in the image | 
					
						
							|  |  |  | 		 */ | 
					
						
							|  |  |  | 		Point2 project(const Point3& point, | 
					
						
							|  |  |  | 			    boost::optional<Matrix&> H1 = boost::none, | 
					
						
							|  |  |  | 			    boost::optional<Matrix&> H2 = boost::none) const; | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* SIMPLECAMERA_H_ */
 |