1 | initial version |
There's no single function solution. The final result depends on various conditions. I would do the folowing:
Compute disparity map with left and right images (with using cv::StereoSGBM). Note that disparity relates to the left image.
(Optional) postprocess disparity map. Fill gaps etc.
Recompute disparity to the middle view.
2 | No.2 Revision |
There's no single function solution. The final result depends on various conditions. I would do the folowing:
Compute disparity map with left and right images (with using cv::StereoSGBM). Note that disparity relates to the left image.
(Optional) postprocess disparity map. Fill gaps etc.
Recompute disparity map to the middle view.view (DispM). First init middle disparity with negative (invalid values). Then reproject left disparity to middle:
d = DispL[x,y] / 2 # divide by two because disparity for middle view less then for right view
if x-d > 0 and DispM[x-d,y] < d: DispM[x-d,y] = d
Possible postprocess DispM to fill gaps
Remap left image to the middle view with cv::remap. The tables for remapping calculated with folowing:
mapy[x,y] = y
mapx[x,y] = x - DispM[x,y]
3 | No.3 Revision |
There's no single function solution. The final result depends on various conditions. I would do the folowing:
Compute disparity map with left and right images (with using cv::StereoSGBM). Note that disparity relates to the left image.
(Optional) postprocess disparity map. Fill gaps etc.
Recompute disparity map to the middle view (DispM). First init middle disparity with negative (invalid values). Then reproject left disparity to middle:
d = DispL[x,y] / 2 # divide by two because disparity for middle view less then for right view
if x-d > 0 and DispM[x-d,y] < d: DispM[x-d,y] = d
Possible postprocess DispM to fill gaps
Remap left image to the middle view with cv::remap. The tables for remapping calculated with folowing:
mapy[x,y] = y
mapx[x,y] = x - DispM[x,y]