AERIAL DEPTH MAPPING

// Fletcher Bach 2014

PROJECT GOALS

  • Working System
  • Interoperable System
  • Usable System

INTERACTION

(back of enclosure)

ENCLOSURE

 

ENCLOSURE

CONTENTS

- Raspberry Pi

- Pi Camera

- Battery

- Circuit for OFF/ON and LEDs

LID + BODY

PROTOTYPE

(status update)

import gab.opencv.*;
import org.opencv.core.Mat;
import org.opencv.calib3d.StereoBM;
import org.opencv.core.CvType;
import org.opencv.calib3d.StereoSGBM;

OpenCV ocvL, ocvR;
PImage  imgL, imgR, depth1, depth2;

void setup() {

  imgL = loadImage("scene_l.jpg");
  imgR = loadImage("scene_r.jpg");
  ocvL = new OpenCV(this, imgL);

  ocvR = new OpenCV(this, imgR);

  size(ocvL.width * 2, ocvL.height*2);

  ocvL.gray();
  ocvR.gray();
  Mat left = ocvL.getGray();
  Mat right = ocvR.getGray();

  Mat disparity = OpenCV.imitate(left);

  StereoSGBM stereo =  new StereoSGBM(0, 32, 3, 128, 256, 20, 16, 1, 100, 20, true);
  stereo.compute(left, right, disparity );

  Mat depthMat = OpenCV.imitate(left);
  disparity.convertTo(depthMat, depthMat.type());

  depth1 = createImage(depthMat.width(), depthMat.height(), RGB);
  ocvL.toPImage(depthMat, depth1);

  StereoBM stereo2 = new StereoBM();
  stereo2.compute(left, right, disparity );
  disparity.convertTo(depthMat, depthMat.type());


  depth2 = createImage(depthMat.width(), depthMat.height(), RGB);
  ocvL.toPImage(depthMat, depth2);
}

void draw() {
  image(imgL, 0, 0);
  image(imgR, imgL.width, 0);

  image(depth1, 0, imgL.height);
  image(depth2, imgL.width, imgL.height);

  fill(255, 0, 0);
  text("left", 10, 20);
  text("right", 10 + imgL.width, 20);
  text("stereo SGBM", 10, imgL.height + 20);
  text("stereo BM", 10 + imgL.width, imgL.height+ 20);
}

HARDWARE

CALIBRATED

UNCALIBRATED

GOING FORWARD

  • Calibrate current (early) firmware prototypes for cleaner depth data.
  • Build first enclosure prototype
  • Continue to iterate on both fronts.
Made with Slides.com