1 | initial version |

Loop & Zhang present a solution in this paper. They use a shearing transform to reduce the distortion introduced by the projective transform that mapped the epipoles to infinity (ie, that made the epipolar lines parallel). Consider the shearing transform

```
| k1 k2 0 |
S = | 0 1 0 |.
| 0 0 1 |
```

Let *w* and *h* be image width and height respectively. Consider the four midpoints of the image edges:

```
a = ((w-1)/2, 0, 1),
b = (w-1, (h-1)/2, 1),
c = ((w-1)/2, h-1, 1) and
d = (0, (h-1)/2, 1).
```

According to Loop & Zhang:

(...) we attempt to preserve

perpendicularityandaspect ratioof the lines bd and ca

Let `H`

be the rectification homography and let *a' = Ha* be a point in the affine plane by dividing through so that *a'[2] = 1* (note a'[2] is the **third** component, ie, *a' = (a'[0], a'[1], a'[2])*). Let

```
x = b' - d',
y = c' - a'
```

According to Loop & Zhang:

As the difference of affine points,

xandyare vectors in the euclidean image plane. Perpendicularity is preserved when (Sx)^T(Sy) = 0, and aspect ratio is preserved if [(Sx)^T(Sx)]/[(Sy)^T(Sy)] = w²/h².

The real solution presents a **closed-form**:

```
k1 = (h²x[1]² + w²y[1]²)/(hw(x[1]y[0] - x[0]y[1])) and
k2 = (h²x[0]x[1] + w²y[0]y[1])/(hw(x[0]y[1] - x[1]y[0]))
```

up to sign (the positive is preferred).

This is the result after applying shearing *S* on the left image:

Now the left and right images overlaped:

Finally, OpenCV stereo method `StereoBM`

can compute a reasonable result for disparity:

Copyright OpenCV foundation, 2012-2018. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.