Ask Your Question

Indoor navigation with OpenCV

asked 2013-02-11 06:06:46 -0600

htrees gravatar image

Hi there! I am creating indoor navigating system for smartphone(Android) based only on its sensors (accelerometer, magnetometer and gyro) and camera. Three sensors well with rotation detection, but the calculation of linear movement are based on double integration of accelerometer reading with all its noise, and here we get big and fast growing error. So linear movement I decided to detect with camera and OpenCV, and here is some questions:

How precise linear movement detection can be using a single camera? What precision can be achieved with stereo camera? Is it possible to connect external stereo camera to the android phone?

System will work in quite close room with a lot of objects in it.

From Russia with love, and sorry for my English:).

edit retag flag offensive close merge delete


Objects in the room are static. The idea is to create system for 3d positioning in small room, so the precision must be 1-2 cm, I think.

htrees gravatar imagehtrees ( 2013-02-11 06:14:57 -0600 )edit

1 answer

Sort by ยป oldest newest most voted

answered 2013-02-11 07:43:58 -0600

You have two types of solution:

  1. Using SLAM (Simultaneous Localization And Mapping) to create a navigation map. You can use optical flow directly to infer displacement from camera.
  2. Using interest points to see the global displacement.

SLAM is quite complex, and difficult to use on smart phone. Optical flow is directly available in OpenCV (CalcOpticalFlowLK, CalcOpticalFlowHS, CalcOpticalFlowBM, ...). It shows pixels than are ``moving'' one image to the other. Samples on OpenCV show the vector of displacement. You can average it to infer global displacement. Performances of all optical flow as to be benchmarked on your mobile device. Interest points can be used in a similar way of optical flow, but you need a matching process of two successive images. After, you average the displacement of all interesting point, but you are not sure of the matching process. You probably need to remove outliers of matching (compute median of displacement, and keep only the 75% around the mean, as example).

Good luck, your problem isn't easy...

edit flag offensive delete link more

Question Tools


Asked: 2013-02-11 06:06:46 -0600

Seen: 2,437 times

Last updated: Feb 11 '13