79 coefficients->values.resize (4);
80 coefficients->values[0] = coefficients->values[1] = 0;
81 coefficients->values[2] = 1.0;
82 coefficients->values[3] = 0;
89 proj.
filter (*cloud_projected);
96 else if (!searcher_->setInputCloud (cloud_projected))
98 PCL_ERROR (
"[pcl::%s::applyFilter] Error when initializing search method!\n", getClassName ().c_str ());
100 removed_indices_->clear ();
105 indices.resize (indices_->size ());
106 removed_indices_->resize (indices_->size ());
107 int oii = 0, rii = 0;
109 std::vector<bool> point_is_max (indices_->size (),
false);
110 std::vector<bool> point_is_visited (indices_->size (),
false);
115 for (
const auto& iii : (*indices_))
124 if (point_is_visited[iii] && !point_is_max[iii])
127 if (extract_removed_indices_) {
128 (*removed_indices_)[rii++] = iii;
132 indices[oii++] = iii;
138 point_is_max[iii] =
true;
139 point_is_visited[iii] =
true;
143 std::vector<float> radius_dists;
144 PointT p = (*cloud_projected)[iii];
145 if (searcher_->radiusSearch (p, radius_, radius_indices, radius_dists) == 0)
147 PCL_WARN (
"[pcl::%s::applyFilter] Searching for neighbors within radius %f failed.\n", getClassName ().c_str (), radius_);
152 if (radius_indices.size () == 1)
154 point_is_max[iii] =
false;
158 float query_z = (*input_)[iii].z;
159 for (
const auto& radius_index : radius_indices)
161 if ((*input_)[radius_index].z > query_z)
164 point_is_max[iii] =
false;
171 if (point_is_max[iii])
173 for (
const auto& radius_index : radius_indices)
175 point_is_visited[radius_index] =
true;
181 if ((!negative_ && point_is_max[iii]) || (negative_ && !point_is_max[iii]))
183 if (extract_removed_indices_)
185 (*removed_indices_)[rii++] = iii;
192 indices[oii++] = iii;
196 indices.resize (oii);
197 removed_indices_->resize (rii);