# Scale problem with monocular visual odometry

Is monocular visual odometry able to estimate relative scale? Say I have a sequence of 10 images that are taken on a single track each 1 m after the previous. Can some mono odometry method distinguish relative scale when it processes image pairs that are in various distances from each other? I mean like processing 1st vs 10th image and 9th vs 10th image - will the fist give 10x relative scale than the second?

I am examining OpenCV based odometry code (https://github.com/avisingh599/mono-vo) but it only gives something like "translation vector" that always has a size of 1 regardless the distance measured. I know mono odometry can not do absolute scale but I thought it can do relative (question is what "relative" actually means here). Seems like OpenCV's recoverPose only do a translation vector that has always the same size (I guess the size is 1)?

## 1 Answer

processing 1st vs 10th image and 9th vs 10th image - will the fist give 10x relative scale than the second?

It depends. In the simplest perspective, 'relative' means what the transformation is from one view to another, given two images. So if you just use multiple view geometry techniques to find the transformation between any two images, you'll always end up with a unit vector. (This is what the OpenCV based odometry code is doing, through the findEssentialMat/recoverPose function). Without any additional initialization or accumulation of external information, relative translation will always be a unit vector: i.e., just the bearing/direction between the views, and the definition of 'relative' is "view 2 relative to view 1".

But let's say you capture 10 images with equal intervals in between, moving in a straight line. If you use the 1st and the 10th image (which, naturally, would be described through a relative translation of magnitude 1), you can reconstruct the environment you were observing in 3D up to (arbitrary) scale through triangulation. Now if you use this 3D set of points to localize the rest of the images and obtain the distance between 5 and 6, or view 9 and 10 for instance, you'll see that the relative distance now, is 0.1. Here, the definition of 'relative' becomes "relative distance between view x and view y with respect to a 3D environment that I've already triangulated".