grab_point_rs.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #pragma once
  2. #include <pcl\point_types.h>
  3. #include <pcl\point_cloud.h>
  4. #include "data_def_api.h"
  5. #include "data_def.h"
  6. #include "logger.h"
  7. #include "imstorage_manager.h"
  8. namespace graft_cv {
  9. class CRootStockGrabPoint {
  10. public:
  11. CRootStockGrabPoint(ConfigParam&c, CGcvLogger*pLog = 0);
  12. ~CRootStockGrabPoint();
  13. int grab_point_detect( int dtype, PositionInfo& posinfo);
  14. float* get_raw_point_cloud(int &data_size);
  15. int load_data(float*pPoint, int pixel_size, int pt_size, const char* fn = 0);
  16. void set_image_saver(CImStoreManager** ppis) { m_ppImgSaver = ppis; }
  17. private:
  18. //global configure parameters
  19. ConfigParam& m_cparam;
  20. CGcvLogger * m_pLogger;
  21. int m_dtype;
  22. string m_pcdId;
  23. CImStoreManager** m_ppImgSaver;
  24. pcl::PointCloud<pcl::PointXYZ>::Ptr m_raw_cloud;
  25. int read_ply_file(const char* fn);
  26. double compute_nearest_neighbor_distance(pcl::PointCloud<pcl::PointXYZ>::Ptr);
  27. ////////////////////////////////////////////////
  28. //---> 2023-8-8优化,seedling order识别错误问题
  29. /*void CRootStockGrabPoint::find_tray_top_edge(
  30. pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
  31. float & tray_top_edge_y
  32. );
  33. void CRootStockGrabPoint::find_seedling_position_line_based(
  34. pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
  35. std::vector<int> &first_seedling_cloud_idx,
  36. pcl::PointXYZ&xz_center
  37. );
  38. void segement_line(
  39. pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud
  40. );*/
  41. //<---------
  42. /////////////////////////////////////////////////
  43. void find_seedling_position(
  44. pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
  45. std::vector<int> &first_seedling_cloud_idx,
  46. pcl::PointXYZ&xz_center
  47. );
  48. void crop_nn_analysis(
  49. pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
  50. pcl::PointCloud<pcl::PointXYZ>::Ptr seed_cloud,
  51. double dist_mean,
  52. std::vector<double>&mass_indices,
  53. std::vector<int>& idx
  54. );
  55. void euclidean_clustering_ttsas(
  56. pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
  57. double d1, double d2,
  58. std::vector<pcl::PointXYZ>&cluster_center,
  59. std::vector<std::vector<int>> &clustr_member
  60. );
  61. void cal_obb_2d(
  62. pcl::PointCloud<pcl::PointXYZ>::Ptr in_cloud,
  63. int axis,
  64. double &dx_obb,
  65. double &dy_obb,
  66. double &angle_obb);
  67. void get_optimal_seed(
  68. pcl::PointCloud<pcl::PointXYZ>::Ptr,
  69. pcl::PointXYZ&pt,
  70. int &pt_idx);
  71. //在一株苗的空间范围内找出直线(茎,假设茎是直线分布的),并返回直线上的点index
  72. void find_line_in_cube(
  73. pcl::PointCloud<pcl::PointXYZ>::Ptr, //输入,整体点云
  74. pcl::PointXYZ& min_pt_ex, //输入,
  75. pcl::PointXYZ& max_pt_ex, //输入,
  76. std::vector<int>& out_idx //输出,直线上点的index, 基于输入整体点云
  77. );
  78. void viewer_cloud(pcl::PointCloud<pcl::PointXYZ>::Ptr, std::string&winname);
  79. void viewer_cloud(pcl::PointCloud<pcl::PointXYZRGB>::Ptr, std::string&winname);
  80. void viewer_cloud_debug(
  81. pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud,
  82. pcl::PointXYZ&p,
  83. pcl::PointXYZ &root_pt,
  84. std::string&winname);
  85. void viewer_cloud_cluster(pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud, std::vector<pcl::PointXYZ>cluster_center, std::string&winname);
  86. void viewer_cloud_cluster_box(
  87. pcl::PointCloud<pcl::PointXYZ>::Ptr cloud,
  88. std::vector<pcl::PointXYZ>&cluster_center,
  89. std::vector<pcl::PointXYZ>&cluster_box,
  90. std::vector<std::vector<int> >& clt_line_idx,
  91. std::string&winname);
  92. };
  93. };