Happy New Year
The most notable overall changes are:
- changed the default on the order of data in all Eigen matrices to be row major
-DEIGEN_DEFAULT_TO_ROW_MAJOR
(Eigen defaults to column major). Be careful if your code was using 1D index operators, as they might be broken! See http://eigen.tuxfamily.org/dox/TopicStorageOrders.html and http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2011/12/msg00062.html.
libpcl_common
- added float union to the pointXYZRGBL type, in order to aid PCD_viewer compatibility
- bugfix:
pcl::computeCovarianceMatrixNormalized
did not normalize for each implementation - fixed bug #421:
at(u,v)
should return a const reference - added
InitFailedException
andUnorganizedPointCloudException
. CreatedPCL_EXCEPTION
helper macro - added the GFPFH global descriptor point type
- added gaussian kernel class and utilities
- added
isTrivial
topcl::PointRepresentation
which allows avoiding copy operations in special cases, thus speeding up operations likerep->isValid (p)
- added
eigen33
for smallest eigenvalue/vector and only eigenvalues version - added
PointCloudColorHandlerHSVField
implementation - deleted wrong definition of density in
pcl::transformPointCloud
- added copy constructor for PCLBase
- fixed
PointCloud
's in range inserter: width and height were not updated - added
PCL_MAJOR_VERSION
andPCL_MINOR_VERSION
#defines per Ryan's request - fixed the
getMatrixXf
advanced user API call to return the correct values now that we are forcing Eigen Matrices to be row major in 1.x - moved the content of
win32_macros.h
intopcl_macros.h
- added an
isFinite
method to check for x/y/z = NaN in point_types.hpp - moved internal headers from
pcl/ros/point_traits.h
intopcl/point_traits.h
andpcl/ros/for_each_type.h
topcl/for_each_type.h
(these headers are for internal use only and should have never been imported by user code - however pcl_ros in perception_pcl_unstable will need to be modified when following trunk after this revision, as that is the only external piece of code that should import these headers) - fixed one of the constructors for
pcl::PointCloud<T> (cloud, indices)
that was incomplete - no longer checking "frame_id" parameters in header for operator += in
pcl::PointCloud<T>
- added operator + for
pcl::PointCloud<T>
- improved doxygen documentation all around
libpcl_common
- added new specialization for
pcl::PointCloud<Eigen::MatrixXf>
- for advanced users only! (expect the API to change in trunk if needed) - moved
NdCopyPointEigenFunctor
andNdCopyEigenPointFunctor
fromvoxel_grid.h
topoint_cloud.h
- added
CloudProperties
class for optional properties forpcl::PointCloud<Eigen::MatrixXf>
, and movedsensor_origin_
andsensor_orientation_
there (asproperties.sensor_origin
andproperties.sensor_orientation
), and removedheader
, while keepingheader.stamp
asproperties.acquisition_time
- fixed the copy constructor (vector<size_t> -> vector) and added an implementation for the + operator
- added a general convolution class. Convolution handles point cloud convolution in rows, columns and horizontal directions. Convolution allows for 3 policies: zero padding (default), borders mirroring and borders duplicating through
PointCloudSpring
class - refactorized
PointCorrespondence
andCorrespondence
into the same thing, per issue #458 - added
ChannelProperties
in preparation for 2.0 - fixed bug #445: Overloaded the setIndices method in PCLBase so that it can accept
boost::shared_ptr<const std::vector> >
- disabled unit test for
getMatrixXfMap
in DEBUG mode, as it was failing due to eigen's strictness on aligned/unaligned data, and added const+non consts versions
libpcl_filters
- fixed bug in
random_sample.cpp
; ThePointCloud2
filter wasn't working causing the unit test to fail - crop_box filter now supports
PointT
andPointCloud2
point clouds - added a normal space sampling filter
- fixed bug #433:
pcl::CropBox
doesn't updatewidth
andheight
member of output point cloud - fixed bug #423
CropBox
+VoxelGrid
filters, order changes behaviour (using openni grabber) - add
CropHull
filter for filtering points based on a 2D or 3D convex or concave hull. The ray-polygon intersection test is used, which relys on closed polygons/surfaces - added clipper3D interface and a draft plane_clipper3D implementation
- removed spurious old
ColorFilter
class (obsolete, and it was never implemented - the skeleton was just lurking around) - better Doxygen documentation to
PassThrough
,VoxelGrid
andFilter
- moved the
set/getFilterLimits
,set/getFilterFieldName
, andget/setFilterLimitsNegative
fromFilter
intoVoxelGrid
andPassThrough
, as they were the only filters using it. The rest were not, thus leading to user confusion and a bloated API.
libpcl_kdtree
- fixed bug #442: reversed template parameters preventing use of nearestKSearchT and radiusSearchT in
pcl::search::Search
andpcl::kdtree:KdTree
libpcl_search
- fixed a bug in
OrganizedNeighbor
where one of theradiusSearch
signatures was working only if the cloud is not organized (#420 - thanks Hanno!) - updated
pcl::search:OrganizedNeighbor
to be back functional, radiusSearch is working back, 4-6x faster then KdTree, Knearest still need to implement this - changed
pcl::search::FlannSearch
: fixed style of class and tests, moved impl to hpp - cleaning up
OrganizedNearestNeighbor
as well as implementing one of the missingradiusSearch
methods - improved documentation for libpcl_search and silenced all Doxygen warnings
- removed auto (it needs to be completely rewritten and was left in a very bad state)
- made sure all the output of the search method is consistently returning 0 in case the nearest neighbor search failed and not -1
- updated kdtree wrapper code for the latest FLANN release
libpcl_octree
- added method
getVoxelBounds
to octree iterator & removed result vector reserves - improved documentation for
libpcl_octree
and silenced all Doxygen warnings
libpcl_sample_consensus
- fixed an omission of the sample size declaration for
SACMODEL_PARALLEL_LINES
(thanks Benergy) - replaced rand () with boost random number generators and fixed all failing unit tests
- workaround to get rid of infinite loops if no valid model could be found
libpcl_io
- refactorization and consistent code indentation + make sure the timestamp is not set if we use PCL in ROS
- fixed an older issue where the
is_dense
flag was not set appropriately when reading data from a binary file (thanks Updog!) - fixed an issue in the
PLYWriter
class where the element camera was not correctly set thus leading to crashes in Meshlab (thanks Bruno!) - the VTK library loads vertex colors in PLY files as RGB. Added that to the polymesh loader.
- fixed 2 bugs in writing
PolygonMesh
and unpacking RGB - fixed a bug in the .OBJ exporter to strip the path from the material library filename (thanks Robert!)
- added support for exporting vertex normals to the .OBJ (
pcl::io::saveOBJFile
) file exporter (thanks Robert!) - fixed a 32bit/64bit issue in pointcloud compression
- added method to write obj files from
PolygonMesh
- added serial number support for Windows using mahisorns patch. Thanks to mahisorn
- overloaded callbacks for
OpenNIGrabber
to outputPointCloud<Eigen::MatrixXf>
datasets - added the possibility to write binary compressed Eigen data to disk using two new methods:
generateHeaderEigen
andwriteBinaryCompressedEigen
. Performance improvements to 30Hz I/O - fix for #463 (Missing Symbol rgb_focal_length_SXGA_)
- fix: rgb values need to be packed before saving them in PointCloud2 for
PLYWriter
- added example code for accessing synchronized image x depth data
- added support for the Stanford range_grid element and obj_info for PLY files. If you chosse to use range_grid instead of camera then only valid vertices will be written down to the PLY file.
lipcl_keypoints
- added refine method for
Harris3D
corner detector - rewrote big parts of the NARF keypoint extraction. Hopfully fixing some stability issues. Unfortunately still pretty slow for high resolution point clouds.
- fixed bug #461 (SIFT Keypoint result cloud fields not complete); cleaned up the line-wrapping in the error/warning messages
libpcl_surface
- fixed a bug in
MarchingCubes
'sgetIndexIn1D
which led to the result variable to overflow when the data_size was larger than something around 2^10 (thanks Robert!) - reviewed and slightly modified mls implementation. Added
MovingLeastSquaresOMP
OpenMP implementation - new architecture for the mesh processing algorithms using VTK:
MeshProcessing
- overloaded
reconstruction
andperformReconstruction
inSurfaceReconstruction
to output aPointCloud<T>
andvector<Vertices>
as well - added a new class called
MeshConstruction
per API design decision to split the surface reconstruction methods into topology preserving (EarClipping,
OrganizedFastMesh,
GreedyProjectionTriangulation) and the rest. The new class implements a
reconstruction/performReconstructionfor
PolygonMesh(for backwards compatibility purposes) and a faster set of the same methods for
vector` - refactorized
GreedyProjectionTriangulation
by making it inherit from the newMeshConstruction
base class, and removed a lot of old buggy code - overloaded
performReconstruction (PointCloud<T> &, vector<Vertices> &)
per the newSurfaceReconstruction
API - fixed a bug in
OrganizedFastMesh
where the x/y/z indices were assumed to be 0/1/2, and made it part of theMeshConstruction
API - optimizations for
OrganizedFastMesh
. Now in 30Hz+ flavor. - fixed a segfault from last night's
EarClipping
refactorization and improved the efficiency of the algorithm considerably - updated
ConvexHull
andConcaveHull
to inherit from the newMeshConstruction
class - renamed
mesh_processing.h
toprocessing.h
andperformReconstruction/reconstruct
toperformProcessing/process
for the newMeshProcessing
API
libpcl_features
- fixed bug #439: 3DSC unit test fails on MacOS
- fixed
IntegralImage2Dim
: setting first line to zero was buggy producing undefined output data. - fixing an issue in
PrincipalCurvaturesEstimation
where the pc1 and pc2 magnitudes were not normalized with respect to the neighborhood size, thus making comparisons of different neighborhoods impossible (thanks Steffen!) - fixed
ShapeContext3DEstimation
computation and unit tests by switching fromstdlib.h
's random () to Boost. - fixed a bug in
IntensityGradient
: need to demean also intensity values, otherwise its assumed that the hyperplane goes always through origin which is not true - overloaded
compute
inpcl::Feature
to save the output in anPointCloud<Eigen::MatrixXf>
. Added partial specialization onEigen::MatrixXf
to all features and implementedcomputeFeature (PointCloud<MatrixXf> &output)
- major doxygenization work
- added optimization checks for
is_dense
for some features, implemented NaN output for most (per http://dev.pointclouds.org/issues/457) - added new unit tests for the Eigen::MatrixXf output
- fixing the MacOS GCC 4.2.1 compiler segfault by removing the OpenMP #pragma (related to http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35364 ?).
- fixed bug #468: refactored to make floor explicit.
- added a
setUseInternalCache
method forPFHEstimation
to use the internal cache on demand only. Other fixes to PFH/FPFH/PPF signatures (histogram sums were not adding up to 100.0 in some cases) - major improvements for integral images + added template specialization for one dimensional integral images
libpcl_registration
- fixed some bugs in ELCH, thanks Frits for pointing them out
- Big ELCH cleanup.
- elch.h (API changes):
- Use Boost bundled properties for LoopGraph, every vertex stores a
pointer to the corresponding point cloud in graph[vertex].cloud. - loop_graph_ is now stored as a shared_ptr.
- loop_start_ and loop_end_ are saved as ints for now (will change in
the future). - loop_transform_ is not stored as a pointer (may change in the future).
- elch.hpp:
- Remove call to PCLBase::initCompute() as ELCH doesn't use a single
input cloud or indices. - Change loopOptimizerAlgorithm to use start and end of the loop as
stored in the object. - Adapt to API changes in elch.h.
- added 2D implementation of Normal Distributions Transform for registration (Biber, Strasser; 2003), including example tool program.
- reworked internal
Registration
API: Remove privatecomputeTransformation
without guess, makecomputeTransformation
with guess abstract, Adapt all classes implementingRegistration
accordingly. - implemented
SampleConsensusInitialAlignment
with initial guess (thanks Dennis Guse) - cleaned up the
CorrespondenceRejector
API, per #375 - apply Mourad's patch for #454; add more doc comments
libpcl_visualization
- fixed an issue in
pcl::visualization::PointPickingCallback
whereiren->GetMousePosition ()
didn't seem to work on some VTK versions/systems, so we replaced it instead withiren->GetEventPosition ()
(#444 - thanks Adam!) - fixed a bug in
PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2>
where one of the offsets for Z was incorrectly calculated thus leading to erroneous data (#404 - thanks Lucas!) - set the lighting off on
setShapeRenderingProperties
when the user tries to control the color of the object precisely (maybe add a different lighting on/off property later?) - revert
pcl::visualization::PCLVisualizer::setShapeRenderingProperties
vtk5.2, default in ubuntu LTS, doesn't support the SetLighting method on vtkActor - fixed an issue in
PointCloudColorHandlerRGBField
where using an "rgba" field was causing an error in pcd_viewer (#428 - thanks Maurice!) - added
PointCloudColorHandlerHSVField
- fixed the
PointPickingCallback
behavior on Windows 7:iren->GetShiftKey ()
returns 4 instead of 1 (thanks bepe) - added
updateFeatureHistogram
functionality toPCLHistogramVisualizer
, per #456 (thanks Asil!) - added patch from Adam Stambler (Bug #396)
- added
removePolygonMesh
to make the API more user friendly (addPolygonMesh
was already existing, but the polygon meshes were removed usingremoveShape
until now) - made the polygon meshes actually implement
CloudActor
structures internally, so that we can use different colors per vertex - added
updatePolygonMesh
and improved the efficiency ofaddPolygonMesh
for fast online rendering (i.e., produced viaOrganizedFastMesh
)