Skip to content

Commit efbf54e

Browse files
authored
[filters] Use Eigen instead of handwritten logic in SamplingSurfaceNormal::findXYZMaxMin (#4243)
1 parent bd1057d commit efbf54e

File tree

1 file changed

+11
-48
lines changed

1 file changed

+11
-48
lines changed

filters/include/pcl/filters/impl/sampling_surface_normal.hpp

Lines changed: 11 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -66,56 +66,19 @@ pcl::SamplingSurfaceNormal<PointT>::applyFilter (PointCloud &output)
6666
template<typename PointT> void
6767
pcl::SamplingSurfaceNormal<PointT>::findXYZMaxMin (const PointCloud& cloud, Vector& max_vec, Vector& min_vec)
6868
{
69-
float maxval = cloud[0].x;
70-
float minval = cloud[0].x;
71-
72-
for (std::size_t i = 0; i < cloud.points.size (); i++)
73-
{
74-
if (cloud[i].x > maxval)
75-
{
76-
maxval = cloud[i].x;
77-
}
78-
if (cloud[i].x < minval)
79-
{
80-
minval = cloud[i].x;
81-
}
82-
}
83-
max_vec (0) = maxval;
84-
min_vec (0) = minval;
85-
86-
maxval = cloud[0].y;
87-
minval = cloud[0].y;
88-
89-
for (std::size_t i = 0; i < cloud.points.size (); i++)
90-
{
91-
if (cloud[i].y > maxval)
92-
{
93-
maxval = cloud[i].y;
94-
}
95-
if (cloud[i].y < minval)
96-
{
97-
minval = cloud[i].y;
98-
}
69+
// 4f to ease vectorization
70+
Eigen::Array4f min_array =
71+
Eigen::Array4f::Constant(std::numeric_limits<float>::max());
72+
Eigen::Array4f max_array =
73+
Eigen::Array4f::Constant(std::numeric_limits<float>::lowest());
74+
75+
for (const auto& point : cloud) {
76+
min_array = min_array.min(point.getArray4fMap());
77+
max_array = max_array.max(point.getArray4fMap());
9978
}
100-
max_vec (1) = maxval;
101-
min_vec (1) = minval;
102-
103-
maxval = cloud[0].z;
104-
minval = cloud[0].z;
10579

106-
for (std::size_t i = 0; i < cloud.points.size (); i++)
107-
{
108-
if (cloud[i].z > maxval)
109-
{
110-
maxval = cloud[i].z;
111-
}
112-
if (cloud[i].z < minval)
113-
{
114-
minval = cloud[i].z;
115-
}
116-
}
117-
max_vec (2) = maxval;
118-
min_vec (2) = minval;
80+
max_vec = max_array.head<3>();
81+
min_vec = min_array.head<3>();
11982
}
12083

12184
///////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)