1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*
- * TI Voxel Lib component.
- *
- * Copyright (c) 2014 Texas Instruments Inc.
- */
- #ifndef VOXEL_POINTCLOUD_TRANSFORM_H
- #define VOXEL_POINTCLOUD_TRANSFORM_H
- #include "Point.h"
- #include "Common.h"
- #include "Frame.h"
- #include "VoxelExports.h"
- #include <float.h>
- #define POINT_INVALID FLT_MAX
- namespace Voxel
- {
- /**
- * \addtogroup Frm
- * @{
- */
- class VOXEL_EXPORT PointCloudTransform
- {
- public:
- uint32_t left, top; // Image top-left corner
- uint32_t width, height; // sensor width and height
- uint32_t rowsToMerge, columnsToMerge; // Binning
- float fx, fy; // x- and y- focal distance
- float cx, cy; // image center
- float k1, k2, k3; // radial distortion parameters
- float p1, p2; // tangential distortion parameters
-
- Vector<Point> directions; // Directional array
- // Clippings
- Point leftClippingNormal;
- Point rightClippingNormal;
- Point topClippingNormal;
- Point bottomClippingNormal;
- // Estimation errors
- float fxError, fyError;
- float cxError, cyError;
- float k1Error, k2Error, k3Error;
- float p1Error, p2Error;
- float pixelErrorX, pixelErrorY;
- // Checkerboard information
- int nCornersPerImages;
- int nImages;
- Point &getDirection(int row, int col);
- public:
- PointCloudTransform(uint32_t left, uint32_t top, uint32_t width, uint32_t height,
- uint32_t rowsToMerge, uint32_t columnsToMerge,
- float fx, float fy, float cx, float cy,
- float k1, float k2, float k3, float p1, float p2);
-
- void calcAperatureAngleRadians(int &horizontalAperatureAngle, float &verticalAperatureAngle);
- void rescaleParameters(int width, int height);
- Point worldToImage(const Point &p);
- Point imageToWorld(const Point &p, float depth);
-
- bool depthToPointCloud(const Vector<float> &distances, PointCloudFrame &pointCloudFrame);
-
- private:
- Point _screenToNormalizedScreen(const Point &screen, bool verify);
- Point _normalizedScreenToScreen(const Point &normalizedScreen);
- Point _lensCorrection(const Point &normalizedScreen);
- bool _computeConcaveMirrorBorders(int width, int height, double &minx, double &maxX,
- double &minY, double &maxY);
- bool _computeConcaveMirrorBordersOuter(int width, int height, double &minX, double &maxX,
- double &minY, double &maxY);
- void _computeConcaveMirror(int width, int height,
- Vector<double> &leftArr, Vector<double> &rightArr,
- Vector<double> &topArr, Vector<double> &bottomArr);
-
- void _init();
-
- Point _normalizedScreenToUnitWorld(const Point &normalizedScreen);
- void _computeClippingPlanes();
- };
- typedef Ptr<PointCloudTransform> PointCloudTransformPtr;
- /**
- * @}
- */
- }
- #endif // VOXEL_POINTCLOUD_TRANSFORM_H
|