# [3D] Depth map from 2 images

With this code written in matlab, you can get a depth map from 2 images or pictures. These two images should be the equivalent of the left eye and the right eye. This is DENSE mapping, SPARSE mapping is also possible, but you should use the VLSIFT matlab toolbox for that, for instance.

You can imput two images, it will procude a depth 3d map from the best match. This is **dense mapping**, that means that it could take up to half an hour to process! Also, it heavily depends on how you tune some of the variables.

`clc`

clear all

close all

`%Initialize images`

im_r=imread('Left_Checkerboard_rectified.bmp');

im_l=imread('Right_Checkerboard_rectified.bmp');</code></p>

`%Initialize variables`

`w=10;`

`dispmax=55;`

`%Resize images`

im_l_res=zeros(size(im_l,1)+2*w,size(im_l,2)+2*w+dispmax);

im_r_res=zeros(size(im_r,1)+2*w,size(im_r,2)+2*w+dispmax);

im_l_res(w:end-1-w,w:end-1-w-dispmax)=im_l;

im_r_res(w:end-1-w,w:end-1-w-dispmax)=im_r;

im_l_res=uint8(im_l_res);

im_r_res=uint8(im_r_res);

`%Initialize SAD`

`%SAD=zeros(size(im_l_res,1),size(im_l_res,2),dispmax+1);`

for y=w+1:1:size(im_l_res,1)-w %For each epipolar line (row)

`y %to see where it is`

for x=w+1:1:size(im_l_res,2)-w-dispmax %For each pixel on that row

left=im_l_res(y-w:y+w,x-w:x+w);

for disp=0:1:dispmax

right=im_r_res(y-w:y+w,x-w+disp:x+w+disp);

`%Take the sum of absolute difference`

SAD(y-5,x-5,disp+1)=sum(abs(left(:)-right(:)));

`end`

`end`

`end`

[SAD_min,SAD_min_loc]=min(SAD,[],3);

imagesc(SAD_min_loc)

while running this code i am getting the error like this

Assignment has more non-singleton rhs dimensions than non-singleton subscripts

Error in dense (line 23)

im_l_res(w:end-1-w,w:end-1-w-dispmax)=im_l;

im_l_res=263×395 double

im_l=243x320x3 double

Just use 8-bit gray-scale bitmaps as input or add rgb2gray(rgb_img) to convert images

hi..

i want to construct 3d from 2d face images…if i use u r code above am not getting 3d image..can u help me in this?

Hi, can I use the depth map generated by your code to obtain the stereo correspondence from a given point in the right image to the left one? and if, how? and with which level of accurancy (numerically) ?

thanks a lot!