ZED Open Capture  v0.6.0
Low level camera driver for the ZED stereo camera family
stereo.hpp
Go to the documentation of this file.
1 #ifndef STEREO_HPP
2 #define STEREO_HPP
3 
4 #include <iostream>
5 #include <opencv2/opencv.hpp>
6 #include "calibration.hpp"
7 
8 namespace sl_oc {
9 namespace tools {
10 
14 const std::string STEREO_PAR_FILENAME = "zed_oc_stereo.yaml";
15 
20 {
21 public:
26  {
28  }
29 
34  bool load();
35 
40  bool save();
41 
45  void setDefaultValues();
46 
50  void print();
51 
52 public:
53  int blockSize;
56  int mode;
57  int P1;
58  int P2;
64 
65  double minDepth_mm;
66  double maxDepth_mm;
67 };
68 
70 {
71  blockSize = 3;
72  minDisparity = 0;
73  numDisparities = 96;
74  mode = cv::StereoSGBM::MODE_SGBM_3WAY; // MODE_SGBM = 0, MODE_HH = 1, MODE_SGBM_3WAY = 2, MODE_HH4 = 3
75  P1 = 24*blockSize*blockSize;
76  P2 = 4*P1;
77  disp12MaxDiff = 96;
78  preFilterCap = 63;
79  uniquenessRatio = 5;
80  speckleWindowSize = 255;
81  speckleRange = 1;
82 
83  minDepth_mm = 300.;
84  maxDepth_mm = 10000.;
85 }
86 
88 {
89  std::string path = getHiddenDir();
90  std::string par_file = path + STEREO_PAR_FILENAME;
91 
92  cv::FileStorage fs;
93  if(!fs.open(par_file, cv::FileStorage::READ))
94  {
95  std::cerr << "Error opening stereo parameters file. Using default values." << std::endl << std::endl;
97  return false;
98  }
99 
100  fs["blockSize"] >> blockSize;
101  fs["minDisparity"] >> minDisparity;
102  fs["numDisparities"] >> numDisparities;
103  fs["mode"] >> mode;
104  fs["disp12MaxDiff"] >> disp12MaxDiff;
105  fs["preFilterCap"] >> preFilterCap;
106  fs["uniquenessRatio"] >> uniquenessRatio;
107  fs["speckleWindowSize"] >> speckleWindowSize;
108  fs["speckleRange"] >> speckleRange;
109  P1 = 24*blockSize*blockSize;
110  P2 = 96*blockSize*blockSize;
111 
112  fs["minDepth_mm"] >> minDepth_mm;
113  fs["maxDepth_mm"] >> maxDepth_mm;
114 
115  std::cout << "Stereo parameters load done: " << par_file << std::endl << std::endl;
116 
117  return true;
118 }
119 
121 {
122  std::string path = getHiddenDir();
123  std::string par_file = path + STEREO_PAR_FILENAME;
124 
125  cv::FileStorage fs;
126  if(!fs.open(par_file, cv::FileStorage::WRITE))
127  {
128  std::cerr << "Error saving stereo parameters. Cannot open file for writing: " << par_file << std::endl << std::endl;
129  return false;
130  }
131 
132  fs << "blockSize" << blockSize;
133  fs << "minDisparity" << minDisparity;
134  fs << "numDisparities" << numDisparities;
135  fs << "mode" << mode;
136  fs << "disp12MaxDiff" << disp12MaxDiff;
137  fs << "preFilterCap" << preFilterCap;
138  fs << "uniquenessRatio" << uniquenessRatio;
139  fs << "speckleWindowSize" << speckleWindowSize;
140  fs << "speckleRange" << speckleRange;
141 
142  fs << "minDepth_mm" << minDepth_mm;
143  fs << "maxDepth_mm" << maxDepth_mm;
144 
145  std::cout << "Stereo parameters write done: " << par_file << std::endl << std::endl;
146 
147  return true;
148 }
149 
151 {
152  std::cout << "Stereo SGBM parameters:" << std::endl;
153  std::cout << "------------------------------------------" << std::endl;
154  std::cout << "blockSize:\t\t" << blockSize << std::endl;
155  std::cout << "minDisparity:\t" << minDisparity << std::endl;
156  std::cout << "numDisparities:\t" << numDisparities << std::endl;
157  std::cout << "mode:\t\t" << mode << std::endl;
158  std::cout << "disp12MaxDiff:\t" << disp12MaxDiff << std::endl;
159  std::cout << "preFilterCap:\t" << preFilterCap << std::endl;
160  std::cout << "uniquenessRatio:\t" << uniquenessRatio << std::endl;
161  std::cout << "speckleWindowSize:\t" << speckleWindowSize << std::endl;
162  std::cout << "speckleRange:\t" << speckleRange << std::endl;
163  std::cout << "P1:\t\t" << P1 << " [Calculated]" << std::endl;
164  std::cout << "P2:\t\t" << P2 << " [Calculated]" << std::endl;
165 
166  std::cout << "minDepth_mm:\t" << minDepth_mm << std::endl;
167  std::cout << "maxDepth_mm:\t" << maxDepth_mm << std::endl;
168  std::cout << "------------------------------------------" << std::endl << std::endl;
169 }
170 
171 } // namespace tools
172 } // namespace sl_oc
173 
174 #endif // STEREO_HPP
175 
The StereoSgbmPar class is used to store/retrieve the stereo matching parameters.
Definition: stereo.hpp:20
int P1
[default: 24*blockSize*blockSize] The first parameter controlling the disparity smoothness....
Definition: stereo.hpp:57
int disp12MaxDiff
[default: 96] Maximum allowed difference (in integer pixel units) in the left-right disparity check....
Definition: stereo.hpp:59
int speckleWindowSize
[default: 255] Maximum size of smooth disparity regions to consider their noise speckles and invalida...
Definition: stereo.hpp:62
int uniquenessRatio
[default: 5] Margin in percentage by which the best (minimum) computed cost function value should "wi...
Definition: stereo.hpp:61
double minDepth_mm
[default: 300] Minimum value of depth for the extracted depth map
Definition: stereo.hpp:65
int minDisparity
[default: 0] Minimum possible disparity value. Normally, it is zero but sometimes rectification algor...
Definition: stereo.hpp:54
void setDefaultValues()
set default stereo matching parameters
Definition: stereo.hpp:69
bool save()
save stereo matching parameters
Definition: stereo.hpp:120
bool load()
load stereo matching parameters
Definition: stereo.hpp:87
int numDisparities
[default: 96] Maximum disparity minus minimum disparity. The value is always greater than zero....
Definition: stereo.hpp:55
int mode
Set it to StereoSGBM::MODE_HH to run the full-scale two-pass dynamic programming algorithm....
Definition: stereo.hpp:56
int speckleRange
[default: 1] Maximum disparity variation within each connected component. If you do speckle filtering...
Definition: stereo.hpp:63
StereoSgbmPar()
Default constructor.
Definition: stereo.hpp:25
int blockSize
[default: 3] Matched block size. It must be an odd number >=1 . Normally, it should be somewhere in t...
Definition: stereo.hpp:53
double maxDepth_mm
[default: 10000] Maximum value of depth for the extracted depth map
Definition: stereo.hpp:66
void print()
print the current stereo matching parameters on standard output
Definition: stereo.hpp:150
int preFilterCap
[default: 63] Truncation value for the prefiltered image pixels. The algorithm first computes x-deriv...
Definition: stereo.hpp:60
int P2
[default: 4*PI]The second parameter controlling the disparity smoothness. The larger the values are,...
Definition: stereo.hpp:58
const std::string STEREO_PAR_FILENAME
STEREO_PAR_FILENAME default stereo parameter configuration file.
Definition: stereo.hpp:14