98 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
 | 
						|
stereo callback()
 | 
						|
 | 
						|
	create image pyramids
 | 
						|
		_Constructs the image pyramid which can be passed to calcOpticalFlowPyrLK._
 | 
						|
.
 | 
						|
	if first Frame:
 | 
						|
		*initialize first Frame ()
 | 
						|
 | 
						|
	else:
 | 
						|
		*track Features ()
 | 
						|
 | 
						|
		*addnewFeatures ()
 | 
						|
 | 
						|
		*pruneGridFeatures()
 | 
						|
			_removes worst features from any overflowing grid_
 | 
						|
 | 
						|
	publish features (u1, v1, u2, v2)
 | 
						|
		_undistorts them beforehand_
 | 
						|
 | 
						|
addnewFeatures()
 | 
						|
	*mask existing features
 | 
						|
	*detect new fast features
 | 
						|
	*collect in a grid, keep only best n per grid
 | 
						|
	*stereomatch()
 | 
						|
	*save inliers into a new feature with u,v on cam0 and cam1
 | 
						|
 | 
						|
 | 
						|
track Features()
 | 
						|
	*integrateIMUData ()
 | 
						|
		_uses existing IMU data between two frames to calc. rotation between the two frames_
 | 
						|
 | 
						|
	*predictFeatureTracking()
 | 
						|
		_compensates the rotation between consecutive frames - rotates previous camera frame features to current camera rotation_
 | 
						|
 | 
						|
	*calcOpticalFlowPyrLK()
 | 
						|
		_measures the change between the features in the previous frame and in the current frame (using the predicted features)_
 | 
						|
 | 
						|
	*remove points outside of image region
 | 
						|
		_how does this even happen?_
 | 
						|
 | 
						|
	*stereo match()
 | 
						|
		_find tracked features from optical flow in the camera 1 image_
 | 
						|
		_remove all features that could not be matched_
 | 
						|
 | 
						|
	*twoPointRansac(cam0)
 | 
						|
	*twoPointRansac(cam1)
 | 
						|
		_remove any features outside best found ransac model_
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
twoPointRansac()
 | 
						|
	*mark all points as inliers
 | 
						|
	*compensate rotation between frames
 | 
						|
	*normalize points
 | 
						|
	*calculate difference bewteen previous and current points
 | 
						|
	*mark large distances (over 50 pixels currently)
 | 
						|
	*calculate mean points distance
 | 
						|
	*return if inliers (non marked) < 3
 | 
						|
	*return if motion smaller than norm pixel unit
 | 
						|
	*ransac
 | 
						|
		*optimize with found inlier after random sample
 | 
						|
 | 
						|
	*set inlier markers
 | 
						|
 | 
						|
initialize first Frame()
 | 
						|
 | 
						|
	features = FastFeatureDetector detect ()
 | 
						|
 | 
						|
	*stereo match ()
 | 
						|
 | 
						|
	group features into grid
 | 
						|
		- according to position in the image
 | 
						|
		- sorting them by response
 | 
						|
		- save the top responses
 | 
						|
		- save the top responses
 | 
						|
 | 
						|
 | 
						|
stereo match ()
 | 
						|
 | 
						|
	*undistort cam0 Points
 | 
						|
	*project cam0 Points to cam1 to initialize points in cam1
 | 
						|
 | 
						|
	*calculate lk optical flow
 | 
						|
		_used because camera calibrations not perfect enough_
 | 
						|
		_also, calculation more efficient, because LK calculated anyway_
 | 
						|
 | 
						|
	*compute relative trans/rot between cam0 and cam1*
 | 
						|
 | 
						|
	*remove outliers based on essential matrix
 | 
						|
		_essential matrix relates points in stereo image (pinhole model)_
 | 
						|
		for every point:
 | 
						|
			- calculate epipolar line of point in cam0
 | 
						|
			- calculate error of cam1 to epipolar line 
 | 
						|
			- remove if to big
 |