Browse Source

v0.6.9重新定义接穗、砧木类别,0-接穗,1-砧木;接穗、砧木抓取顺序相反

chenhongjiang 2 years ago
parent
commit
8c9baeecad
4 changed files with 17 additions and 11 deletions
  1. 2 1
      ReadMe.txt
  2. 13 8
      grab_point_rs.cpp
  3. 1 1
      graft_cv_api.cpp
  4. 1 1
      graft_cv_api.h

+ 2 - 1
ReadMe.txt

@@ -76,4 +76,5 @@ v0.6.4 
 v0.6.5 修改代码,得到最左侧一株
 v0.6.6 增加剪裁后没有点的异常处理
 v0.6.7 修改点云显示代码,显示抓取点xy方向,及z平面上的xoy坐标系
-v0.6.8 增加穗苗的inbox定义,增加最优茎高的定义;修改vector随机读取[]为at方法;增加接口参数用于定义抓取苗是砧木还是穗苗;修改了接口函数名称
+v0.6.8 增加穗苗的inbox定义,增加最优茎高的定义;修改vector随机读取[]为at方法;增加接口参数用于定义抓取苗是砧木还是穗苗;修改了接口函数名称
+v0.6.9 修改抓取砧木、穗苗的定义0--穗苗,1--砧木;穗苗和砧木抓取顺序相反

+ 13 - 8
grab_point_rs.cpp

@@ -90,8 +90,10 @@ namespace graft_cv {
 		PositionInfo& posinfo
 		)
 	{
-		// dtype == 0, rootstock
-		// dtype != 0, scion
+		// dtype == 0, scion
+		// dtype != 0, rootstock
+		// ÊäÈ룬ËëÃç--0£¬ Õèľ--1
+
 		if (m_raw_cloud->width * m_raw_cloud->height < 1) {
 			if (m_pLogger) {
 				stringstream buff;
@@ -107,11 +109,11 @@ namespace graft_cv {
 		pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_inbox(new pcl::PointCloud<pcl::PointXYZ>);
 		pcl::CropBox<pcl::PointXYZ> box_filter;
 		m_dtype = dtype;
-		if (dtype == 0) {
+		if (dtype != 0) {//rootstock
 			box_filter.setMin(Eigen::Vector4f(m_cparam.rs_grab_xmin, m_cparam.rs_grab_ymin, m_cparam.rs_grab_zmin, 1));
 			box_filter.setMax(Eigen::Vector4f(m_cparam.rs_grab_xmax, m_cparam.rs_grab_ymax, m_cparam.rs_grab_zmax, 1));
 		}
-		else {
+		else {//scion
 			box_filter.setMin(Eigen::Vector4f(m_cparam.sc_grab_xmin, m_cparam.sc_grab_ymin, m_cparam.sc_grab_zmin, 1));
 			box_filter.setMax(Eigen::Vector4f(m_cparam.sc_grab_xmax, m_cparam.sc_grab_ymax, m_cparam.sc_grab_zmax, 1));
 		}
@@ -140,7 +142,7 @@ namespace graft_cv {
 		}
 		int nb_points = 20;
 		double stem_radius = m_cparam.rs_grab_stem_diameter / 2.0;
-		if(dtype != 0){
+		if(dtype == 0){
 			stem_radius = m_cparam.sc_grab_stem_diameter / 2.0;
 		}
 		pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ror(new pcl::PointCloud<pcl::PointXYZ>);
@@ -347,7 +349,7 @@ namespace graft_cv {
 		}		
 
 		double radius = m_cparam.rs_grab_stem_diameter;
-		if (m_dtype != 0) {
+		if (m_dtype == 0) {
 			radius = m_cparam.sc_grab_stem_diameter;
 		}
 		std::vector<int> counter;
@@ -382,7 +384,7 @@ namespace graft_cv {
 		//clustering
 		double d1 = m_cparam.rs_grab_stem_diameter;
 		double d2 = m_cparam.rs_grab_stem_diameter * 3.0;
-		if (m_dtype != 0) {
+		if (m_dtype == 0) {
 			d1 = m_cparam.sc_grab_stem_diameter;
 			d2 = m_cparam.sc_grab_stem_diameter * 3.0;
 		}
@@ -404,6 +406,9 @@ namespace graft_cv {
 			cluster_index.push_back(idx);
 		}
 		int first_idx = std::min_element(cluster_index.begin(), cluster_index.end()) - cluster_index.begin();
+		if (m_dtype == 0) {
+			first_idx = std::max_element(cluster_index.begin(), cluster_index.end()) - cluster_index.begin();
+		}
 
 		first_seedling_cloud_idx.clear();
 		for (auto&v : cluster_member.at(first_idx)) {
@@ -720,7 +725,7 @@ namespace graft_cv {
 		int opt_idx = -1;
 		int member_size = 5;
 		float y_opt = m_cparam.rs_grab_y_opt;
-		if (m_dtype != 0) {
+		if (m_dtype == 0) {
 			y_opt = m_cparam.sc_grab_y_opt;
 		}
 		for (int i = 0; i < in_cloud->points.size(); ++i) {

+ 1 - 1
graft_cv_api.cpp

@@ -19,7 +19,7 @@ extern CRITICAL_SECTION g_cs;
 namespace graft_cv
 {
 
-	char *g_version_str = "0.6.8";
+	char *g_version_str = "0.6.9";
 
 	//configure
 	string g_conf_file = "./gcv_conf.yml";	

+ 1 - 1
graft_cv_api.h

@@ -68,7 +68,7 @@ GCV_API void get_version(char* buf);
 //  输入: points ---      输入, 指向点云的指针,点云为3值一组,结构:[pt0.x, pt0.y, pt0.z, pt1.x, pt1.y,pt1.z], 有时是4值一组(视采集设备数据情况)
 //         pixel_size ---  输入,一个点云的维度(一般3或4)
 //         pt_size-------- 输入, 点云数量,上例中数量为2
-//         dtype  -------- 输入,砧木--0, 穗苗--1
+//         dtype  -------- 输入,穗苗--0, 砧木--1
 //
 //         posinfo ------- 输出
 //         fn ------------ 输入, points指向0,且fn可用时,读取文件中的数据(用于测试),仅支持ply格式