15 #ifdef LP_PCL_PATCH_ENABLED
26 #include <QMainWindow>
34 tr(
"Region Growing Segmentation"),
35 tr(
"Region Growing Segmentation"),
36 tr(
"Region Growing Segmentation from clouds"),
37 ":/toolbar/PclAlgorithms/icons/Regiongrowing.png")),
41 m_min_cluster_size(50),
42 m_max_cluster_size(100000),
43 m_neighbour_number(30),
44 m_smoothness_theta(0.052359878f),
46 m_min_cluster_size_rgb(100),
47 m_neighbors_distance(10.0f),
48 m_point_color_diff(6.0f),
49 m_region_color_diff(5.0f) {}
59 if (have_cloud != 1)
return -11;
72 m_dialog->rgRGBTab->setEnabled(
true);
75 m_dialog->rgRGBTab->setEnabled(
false);
87 switch (
m_dialog->rgTab->currentIndex()) {
91 m_dialog->min_cluster_size_input->text().toInt();
93 m_dialog->max_cluster_size_input->text().toInt();
96 m_dialog->smoothness_theta_input->text().toFloat();
103 m_dialog->min_cluster_size2_input->text().toInt();
105 m_dialog->neighbours_dist_input->text().toFloat();
107 m_dialog->point_color_diff_input->text().toFloat();
109 m_dialog->region_color_diff_input->text().toFloat();
119 if (!cloud)
return -1;
122 if (!sm_cloud)
return -1;
125 std::vector<pcl::PointIndices> clusters;
130 std::stringstream
name;
137 if (
result < 0)
return -1;
138 name <<
"RGB_RegionGrowing_clusters_" << clusters.size();
143 xyzCloud, clusters, cloudSegmented,
m_k_search,
146 if (
result < 0)
return -1;
147 name <<
"Basic_RegionGrowing_clusters_" << clusters.size();
153 if (out_cloud_sm.height * out_cloud_sm.width == 0) {
184 "Selected entity does not have any suitable scalar field "
188 "Wrong Parameters. One or more parameters cannot be "
192 "Region Growing Segmentation does not returned any point. "
193 "Try relaxing your parameters");
pcl::PointCloud< PointT > PointCloudT
pcl::PCLPointCloud2 PCLCloud
pcl::PointCloud< PointRGB > PointCloudRGB
Base abstract class for each implemented PCL filter.
int isFirstSelectedCcPointCloud()
Returns 1 if the first selected object is a ccPointCloud.
void newEntity(ccHObject *)
Signal emitted when a new entity is created by the filter.
ecvMainAppInterface * m_app
Associated application interface.
virtual QString getErrorMessage(int errorCode)
Returns the error message corresponding to a given error code.
ccPointCloud * getSelectedEntityAsCCPointCloud() const
Returns the first selected entity as a ccPointCloud.
RegionGrowingSegmentationDlg * m_dialog
RegionGrowingSegmentation()
virtual ~RegionGrowingSegmentation()
virtual QString getErrorMessage(int errorCode)
Returns the error message corresponding to a given error code.
float m_region_color_diff
unsigned int m_neighbour_number
int m_min_cluster_size_rgb
virtual int compute()
Performs the actual filter job.
virtual int checkParameters()
float m_neighbors_distance
virtual void getParametersFromDialog()
Collects parameters from the filter dialog (if openDialog is successful)
virtual int checkSelected()
Checks if current selection is compliant with the filter.
virtual int openInputDialog()
CC to PCL cloud converter.
PCLCloud::Ptr getAsSM(std::list< std::string > &requested_fields) const
ccHObject * getParent() const
Returns parent object.
virtual bool addChild(ccHObject *child, int dependencyFlags=DP_PARENT_OF_OTHER, int insertIndex=-1)
Adds a child.
virtual void setName(const QString &name)
Sets object name.
virtual void setEnabled(bool state)
Sets the "enabled" property.
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
bool hasColors() const override
Returns whether colors are enabled or not.
bool hasScalarFields() const override
Returns whether one or more scalar fields are instantiated.
virtual void setGlobalShift(double x, double y, double z)
Sets shift applied to original coordinates (information storage only)
virtual const CCVector3d & getGlobalShift() const
Returns the shift applied to original coordinates.
virtual void setGlobalScale(double scale)
virtual double getGlobalScale() const
Returns the scale applied to original coordinates.
virtual QWidget * getActiveWindow()=0
static ccMesh * Convert(PCLTextureMesh::ConstPtr textureMesh)
Converts a PCL point cloud to a ccPointCloud.
int GetRegionGrowingRGB(const PointCloudRGB::ConstPtr cloud, std::vector< pcl::PointIndices > &clusters, PointCloudRGB::Ptr cloud_segmented, int min_cluster_size, float neighbors_distance, float point_color_diff, float region_color_diff)
Color based Region Growing.
int GetRegionGrowing(const PointCloudT::ConstPtr cloud, std::vector< pcl::PointIndices > &clusters, PointCloudRGB::Ptr cloud_segmented, int k, int min_cluster_size, int max_cluster_size, unsigned int neighbour_number, float smoothness_theta, float curvature)
Basic Region Growing.