|
@@ -38,7 +38,8 @@ namespace graft_cv {
|
|
|
m_ppImgSaver(0),
|
|
|
m_1st_row_zmean_rs(-1.0),
|
|
|
m_1st_row_zmean_sc(-1.0),
|
|
|
- m_cloud_mean_dist(0.0)
|
|
|
+ m_cloud_mean_dist(0.0),
|
|
|
+ m_stem_fork_ys_size(20)
|
|
|
{
|
|
|
}
|
|
|
|
|
@@ -2452,6 +2453,11 @@ void CRootStockGrabPoint::line_filter(
|
|
|
max_pos = tmp_max_pos;
|
|
|
max_pos_ref = max_pos;
|
|
|
}
|
|
|
+ //保存历史茎节位置
|
|
|
+ m_stem_fork_ys.insert(m_stem_fork_ys.begin(), max_pos);
|
|
|
+ if (m_stem_fork_ys.size() > m_stem_fork_ys_size) { m_stem_fork_ys.pop_back(); }
|
|
|
+ int max_pos_mu = int(get_hist_mean<int>(m_stem_fork_ys) + 0.5);
|
|
|
+
|
|
|
float max_val = stem_width.at(max_pos);
|
|
|
float th = mu + th_ratio * stdv;
|
|
|
if(m_dtype == 0){
|
|
@@ -2477,7 +2483,8 @@ void CRootStockGrabPoint::line_filter(
|
|
|
max_pos = i;
|
|
|
}
|
|
|
max_pos_ref = max_pos;
|
|
|
- max_pos += static_cast<int>(m_cparam.sc_grab_offset);
|
|
|
+ max_pos += static_cast<int>(m_cparam.sc_grab_offset);
|
|
|
+ max_pos_mu += static_cast<int>(m_cparam.sc_grab_offset);
|
|
|
}
|
|
|
else{
|
|
|
//砧木可以按低点
|
|
@@ -2493,10 +2500,17 @@ void CRootStockGrabPoint::line_filter(
|
|
|
}
|
|
|
max_pos_ref = max_pos;
|
|
|
max_pos += static_cast<int>(m_cparam.rs_grab_offset);
|
|
|
+ max_pos_mu += static_cast<int>(m_cparam.rs_grab_offset);
|
|
|
}
|
|
|
if (max_pos < 0) { max_pos = 0; }
|
|
|
if (max_pos >= online_points.size()) { max_pos = online_points.size() - 1; }
|
|
|
|
|
|
+ //用历史均值进行约束,如果偏差大于10mm,采用历史均值
|
|
|
+ if (abs(max_pos - max_pos_mu) > 10) {
|
|
|
+ max_pos = max_pos_mu;
|
|
|
+ max_pos_ref = max_pos;
|
|
|
+ }
|
|
|
+
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
|
//直线点云,获取指定区域的dx_line,dz_line
|
|
|
Eigen::Vector4f min_point;
|