80 coefficients->values.resize (4);
81 coefficients->values[0] = coefficients->values[1] = 0;
82 coefficients->values[2] = 1.0;
83 coefficients->values[3] = 0;
90 proj.
filter (*cloud_projected);
95 if (input_->isOrganized ())
100 if (!searcher_->setInputCloud (cloud_projected))
102 PCL_ERROR (
"[pcl::%s::applyFilter] Error when initializing search method!\n", getClassName ().c_str ());
104 removed_indices_->clear ();
109 indices.resize (indices_->size ());
110 removed_indices_->resize (indices_->size ());
111 int oii = 0, rii = 0;
113 std::vector<bool> point_is_max (indices_->size (),
false);
114 std::vector<bool> point_is_visited (indices_->size (),
false);
119 for (
const auto& iii : (*indices_))
128 if (point_is_visited[iii] && !point_is_max[iii])
131 if (extract_removed_indices_) {
132 (*removed_indices_)[rii++] = iii;
136 indices[oii++] = iii;
142 point_is_max[iii] =
true;
143 point_is_visited[iii] =
true;
147 std::vector<float> radius_dists;
148 PointT p = (*cloud_projected)[iii];
149 if (searcher_->radiusSearch (p, radius_, radius_indices, radius_dists) == 0)
151 PCL_WARN (
"[pcl::%s::applyFilter] Searching for neighbors within radius %f failed.\n", getClassName ().c_str (), radius_);
156 if (radius_indices.size () == 1)
158 point_is_max[iii] =
false;
162 float query_z = (*input_)[iii].z;
163 for (
const auto& radius_index : radius_indices)
165 if ((*input_)[radius_index].z > query_z)
168 point_is_max[iii] =
false;
175 if (point_is_max[iii])
177 for (
const auto& radius_index : radius_indices)
179 point_is_visited[radius_index] =
true;
185 if ((!negative_ && point_is_max[iii]) || (negative_ && !point_is_max[iii]))
187 if (extract_removed_indices_)
189 (*removed_indices_)[rii++] = iii;
196 indices[oii++] = iii;
200 indices.resize (oii);
201 removed_indices_->resize (rii);