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 searcher_->setInputCloud (cloud_projected);
103 indices.resize (indices_->size ());
104 removed_indices_->resize (indices_->size ());
105 int oii = 0, rii = 0;
107 std::vector<bool> point_is_max (indices_->size (),
false);
108 std::vector<bool> point_is_visited (indices_->size (),
false);
113 for (
const auto& iii : (*indices_))
122 if (point_is_visited[iii] && !point_is_max[iii])
125 if (extract_removed_indices_) {
126 (*removed_indices_)[rii++] = iii;
130 indices[oii++] = iii;
136 point_is_max[iii] =
true;
137 point_is_visited[iii] =
true;
141 std::vector<float> radius_dists;
142 PointT p = (*cloud_projected)[iii];
143 if (searcher_->radiusSearch (p, radius_, radius_indices, radius_dists) == 0)
145 PCL_WARN (
"[pcl::%s::applyFilter] Searching for neighbors within radius %f failed.\n", getClassName ().c_str (), radius_);
150 if (radius_indices.size () == 1)
152 point_is_max[iii] =
false;
156 float query_z = (*input_)[iii].z;
157 for (
const auto& radius_index : radius_indices)
159 if ((*input_)[radius_index].z > query_z)
162 point_is_max[iii] =
false;
169 if (point_is_max[iii])
171 for (
const auto& radius_index : radius_indices)
173 point_is_visited[radius_index] =
true;
179 if ((!negative_ && point_is_max[iii]) || (negative_ && !point_is_max[iii]))
181 if (extract_removed_indices_)
183 (*removed_indices_)[rii++] = iii;
190 indices[oii++] = iii;
194 indices.resize (oii);
195 removed_indices_->resize (rii);