123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #pragma once
- #include <pcl\point_types.h>
- #include <pcl\point_cloud.h>
- #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<pcl::PointXYZ>::Ptr m_raw_cloud;
- int read_ply_file(const char* fn);
- double compute_nearest_neighbor_distance(pcl::PointCloud<pcl::PointXYZ>::Ptr);
- ////////////////////////////////////////////////
- //---> 2023-8-8优化,seedling order识别错误问题
- /*void CRootStockGrabPoint::find_tray_top_edge(
- pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
- float & tray_top_edge_y
- );
- void CRootStockGrabPoint::find_seedling_position_line_based(
- pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
- std::vector<int> &first_seedling_cloud_idx,
- pcl::PointXYZ&xz_center
- );
- void segement_line(
- pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud
- );*/
- //<---------
- /////////////////////////////////////////////////
- void find_seedling_position(
- pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
- std::vector<int> &first_seedling_cloud_idx,
- pcl::PointXYZ&xz_center
- );
- void crop_nn_analysis(
- pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
- pcl::PointCloud<pcl::PointXYZ>::Ptr seed_cloud,
- double dist_mean,
- std::vector<double>&mass_indices,
- std::vector<int>& idx
- );
- void euclidean_clustering_ttsas(
- pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
- double d1, double d2,
- std::vector<pcl::PointXYZ>&cluster_center,
- std::vector<std::vector<int>> &clustr_member
- );
- void cal_obb_2d(
- pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
- int axis,
- double &dx_obb,
- double &dy_obb,
- double &angle_obb);
- void get_optimal_seed(
- pcl::PointCloud<pcl::PointXYZ>::Ptr,
- pcl::PointXYZ&pt,
- int &pt_idx);
- //在一株苗的空间范围内找出直线(茎,假设茎是直线分布的),并返回直线上的点index
- void find_line_in_cube(
- pcl::PointCloud<pcl::PointXYZ>::Ptr, //输入,整体点云
- pcl::PointXYZ& min_pt_ex, //输入,
- pcl::PointXYZ& max_pt_ex, //输入,
- std::vector<int>& out_idx //输出,直线上点的index, 基于输入整体点云
- );
- void viewer_cloud(pcl::PointCloud<pcl::PointXYZ>::Ptr, std::string&winname);
- void viewer_cloud(pcl::PointCloud<pcl::PointXYZRGB>::Ptr, std::string&winname);
- void viewer_cloud_debug(
- pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud,
- pcl::PointXYZ&p,
- pcl::PointXYZ &root_pt,
- std::string&winname);
- void viewer_cloud_cluster(pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud, std::vector<pcl::PointXYZ>cluster_center, std::string&winname);
- void viewer_cloud_cluster_box(
- pcl::PointCloud<pcl::PointXYZ>::Ptr cloud,
- std::vector<pcl::PointXYZ>&cluster_center,
- std::vector<pcl::PointXYZ>&cluster_box,
- std::vector<std::vector<int> >& clt_line_idx,
- std::string&winname);
- };
- };
|