#pragma once #include #include #include "data_def_api.h" #include "data_def.h" #include "logger.h" #include "imstorage_manager.h" namespace graft_cv { class CRootStockGrabPoint { public: CRootStockGrabPoint(ConfigParam&c, CGcvLogger*pLog = 0); ~CRootStockGrabPoint(); int grab_point_detect( int dtype, PositionInfo& posinfo); float* get_raw_point_cloud(int &data_size); int load_data(float*pPoint, int pixel_size, int pt_size, const char* fn = 0); void set_image_saver(CImStoreManager** ppis) { m_ppImgSaver = ppis; } private: //global configure parameters ConfigParam& m_cparam; CGcvLogger * m_pLogger; int m_dtype; string m_pcdId; CImStoreManager** m_ppImgSaver; pcl::PointCloud::Ptr m_raw_cloud; int read_ply_file(const char* fn); double compute_nearest_neighbor_distance(pcl::PointCloud::Ptr); void find_seedling_position( pcl::PointCloud::Ptr in_cloud, std::vector &first_seedling_cloud_idx, pcl::PointXYZ&xz_center ); void crop_nn_analysis( pcl::PointCloud::Ptr in_cloud, pcl::PointCloud::Ptr seed_cloud, double dist_mean, std::vector&mass_indices, std::vector& idx ); void euclidean_clustering_ttsas( pcl::PointCloud::Ptr in_cloud, double d1, double d2, std::vector&cluster_center, std::vector> &clustr_member ); void cal_obb_2d( pcl::PointCloud::Ptr in_cloud, int axis, double &dx_obb, double &dy_obb, double &angle_obb); void get_optimal_seed( pcl::PointCloud::Ptr, pcl::PointXYZ&pt, int &pt_idx); void viewer_cloud(pcl::PointCloud::Ptr, std::string&winname); void viewer_cloud(pcl::PointCloud::Ptr, std::string&winname); void viewer_cloud_debug(pcl::PointCloud::Ptr cloud, pcl::PointXYZ&p, std::string&winname); }; };