Depth-map creation from stereo images implemented using python
What is depth map?
A depth map is an image that contains information about the distance between the surface of objects from a given viewpoint generally from the camera by which the photo has been taken. A depth map is generated from a greyscaled source images. When merged with the source images, a three-dimensional image is created. It can be seen as a depth buffer that stores the distance of the pixel form camera. In an image, there are 2D pixel array consists of pixel color data, unlike depth map which only stores depth i.e. Z-axis data.
A depth map can be easily calculated from a stereo image with OpenCV in python. There is a library function to calculate disparity between two images taking a block of pixel once. the disparity is itself is depth map as derived from the concept of parallax.
The following python program can be used to calculate disparities between two images.
import numpy as np import cv2 #reading images from a stereo snap i.e. left and right snap seperately #reading as a greyscaled image to calcualte disparity #the images must be of exaclty same size i.e. dimension left_image = cv2.imread('left.jpg',0) right_image = cv2.imread('right.jpg',0) #setting stereo options numDisparities=16 and blockSize=15 #numDisparities must be multiple of 16 #blockSize must be an odd number between 5 and 255 (inclusive) stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15) #calculating disparities between two images namely left_image and right_image img_disparity = stereo.compute(left_image,right_image) #disparity as output cv2.imshow(img_disparity)
here left, right images and output disparities are as given below
Output: disparity as the depth map
more to be added very soon. we are working on it.