234 #include <condition_variable>
241 #include <yarp/os/all.h>
242 #include <yarp/dev/all.h>
243 #include <yarp/sig/all.h>
244 #include <yarp/math/Math.h>
246 #include <iCub/ctrl/math.h>
247 #include <iCub/iKin/iKinFwd.h>
248 #include <iCub/stereoVision/stereoCamera.h>
250 #include "fastBilateral.hpp"
253 #include <iCub/stereoVision/utils.h>
260 using namespace yarp::os;
261 using namespace yarp::dev;
262 using namespace yarp::sig;
263 using namespace yarp::math;
264 using namespace iCub::ctrl;
265 using namespace iCub::iKin;
268 class SFM:
public yarp::os::RFModule
272 Mat leftMat, rightMat;
280 yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelRgb> > leftImgPort;
281 yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelRgb> > rightImgPort;
282 BufferedPort<ImageOf<PixelRgbFloat> > worldCartPort;
283 BufferedPort<ImageOf<PixelRgbFloat> > worldCylPort;
286 BufferedPort<ImageOf<PixelMono> > outDisp;
287 BufferedPort<ImageOf<PixelBgr> > outMatch;
289 BufferedPort<ImageOf<PixelRgb> > outLeftRectImgPort;
290 BufferedPort<ImageOf<PixelRgb> > outRightRectImgPort;
296 int speckleWindowSize;
298 int numberOfDisparities;
305 double sigmaColorBLF;
306 double sigmaSpaceBLF;
308 mutex mutexRecalibration;
310 mutex mtx_calibEndEvent;
311 condition_variable cv_calibEndEvent;
313 PolyDriver headCtrl,gazeCtrl;
316 yarp::sig::Vector eyes0,eyes;
322 bool loadIntrinsics(yarp::os::ResourceFinder &rf, Mat &KL, Mat &KR, Mat &DistL, Mat &DistR);
323 Mat buildRotTras(
const Mat& R,
const Mat& T);
324 Matrix getCameraHGazeCtrl(
int camera);
325 void convert(Matrix& matrix, Mat& mat);
326 void convert(Mat& mat, Matrix& matrix);
327 void fillWorld3D(ImageOf<PixelRgbFloat> &worldCartImg, ImageOf<PixelRgbFloat> &worldCylImg);
328 void floodFill(
const Point &seed,
const Point3f &p0,
const double dist, set<int> &visited, Bottle &res);
329 bool loadExtrinsics(yarp::os::ResourceFinder& rf, Mat& Ro, Mat& To, yarp::sig::Vector& eyes);
330 bool updateExtrinsics(Mat& Rot, Mat& Tr, yarp::sig::Vector& eyes,
const string& groupname);
331 void updateViaGazeCtrl(
const bool update);
332 void updateViaKinematics(
const yarp::sig::Vector& deyes);
337 bool configure(ResourceFinder &rf);
341 bool interruptModule();
342 bool respond(
const Bottle& command, Bottle& reply);
344 void setDispParameters(
bool _useBestDisp,
int _uniquenessRatio,
int _speckleWindowSize,
345 int _speckleRange,
int _numberOfDisparities,
int _SADWindowSize,
346 int _minDisparity,
int _preFilterCap,
int _disp12MaxDiff);
347 Point3f get3DPoints(
int u,
int v,
const string &drive=
"LEFT");
348 Point3f get3DPointsAndDisp(
int u,
int v,
int &uR,
int &vR,
const string &drive);
350 Point3f get3DPointMatch(
double u1,
double v1,
double u2,
double v2,
const string &drive=
"LEFT");
351 Point2f projectPoint(
const string &camera,
double x,
double y,
double z);
The base class defining stereo camera.