Advertisement
benoitlahoz

OpenCV stereo variation map.

Sep 15th, 2014
792
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. - (void) computeStereoVarMapWithImageLeft:(CGImageRef)leftImage
  2.                                imageRight:(CGImageRef)rightImage
  3.                            minDisparities:(NSUInteger)minDisparities
  4.                            maxDisparities:(NSUInteger)maxDisparities
  5.                                iterations:(NSUInteger)iterations
  6.                                     polyN:(NSUInteger)polyN
  7.                                 polySigma:(double)polySigma
  8.                                        fi:(double)fi
  9.                                    lambda:(double)lambda
  10. {
  11.     /**
  12.      * Convert the CGImageRef to cv::Mat
  13.      */
  14.     cv::Mat left = [self CVMatWithCGImage:leftImage];
  15.     cv::Mat right = [self CVMatWithCGImage:rightImage];
  16.  
  17.     /**
  18.      * Initialization of cv::StereoVar
  19.      */
  20.     cv::StereoVar var;
  21.    
  22.     // Hard-coded
  23.     var.levels = 3;
  24.     var.pyrScale = 0.25;
  25.    
  26.     /**
  27.      * Stereo Variation parameters
  28.      */
  29.     var.nIt = (int)iterations;
  30.     var.minDisp = -(int)minDisparities;
  31.     var.maxDisp = (int)maxDisparities;
  32.     var.poly_n = (int)polyN;
  33.     var.poly_sigma = polySigma;
  34.     var.fi = fi;
  35.     var.lambda = lambda;
  36.     var.penalization =  cv::StereoVar::PENALIZATION_TICHONOV;
  37.     var.cycle = cv::StereoVar::CYCLE_V;
  38.     var.flags = cv::StereoVar::USE_SMART_ID | cv::StereoVar::USE_MEDIAN_FILTERING;
  39.    
  40.    
  41.     /**
  42.      * Need to downscale the original images to get a decent framerate.
  43.      */
  44.     cv::resize(left, left, cv::Size(), 0.25, 0.25, cv::INTER_CUBIC);
  45.     cv::resize(right, right, cv::Size(), 0.25, 0.25, cv::INTER_CUBIC);
  46.    
  47.     /**
  48.      * Initialize the disparity map cv::Mat.
  49.      */
  50.     cv::Mat disparity8 = cv::Mat(left.rows, left.cols, CV_8UC1);
  51.    
  52.     /**
  53.      * Compute the disparity map.
  54.      */
  55.     var(left, right, disparity8);
  56.    
  57.     /**
  58.      * Upscale the resulting disparity map.
  59.      */
  60.     cv::resize(disparity8, disparity8, cv::Size(640, 480), 0, 0, cv::INTER_CUBIC);
  61.    
  62.     /**
  63.      * Convert it to CGImageRef in order to be able to get a QC provider from the plug-ins.
  64.      */
  65.     _disparityImage = [self CGImageRefWith:disparity8];
  66.    
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement