config.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. #include "config.h"
  2. #include <iostream>
  3. #define VNAME(value) (#value)
  4. namespace graft_cv{
  5. CGCvConfig::CGCvConfig()
  6. :m_cparam(0)
  7. {
  8. };
  9. CGCvConfig::~CGCvConfig()
  10. {
  11. };
  12. void CGCvConfig::setConfParam(ConfigParam*cp)
  13. {
  14. m_cparam = cp;
  15. }
  16. void CGCvConfig::write(cv::FileStorage &fs)const{
  17. assert(m_cparam!=0);
  18. fs << "{"
  19. << "image_show"<< m_cparam->image_show
  20. << "image_return"<< m_cparam->image_return
  21. << "image_row_grid"<< m_cparam->image_row_grid
  22. << "image_col_grid"<< m_cparam->image_col_grid
  23. << "self_camera"<< m_cparam->self_camera
  24. <<"timeout_proc"<<m_cparam->timeout_proc
  25. <<"timeout_append"<<m_cparam->timeout_append
  26. <<"image_save"<<m_cparam->image_save
  27. <<"image_depository"<<m_cparam->image_depository
  28. <<"image_backup_days"<<m_cparam->image_backup_days
  29. << "oa_y_flip"<< m_cparam->oa_y_flip
  30. << "oa_morph_radius"<< m_cparam->oa_morph_radius
  31. << "oa_morph_iteration" << m_cparam->oa_morph_iteration
  32. << "oa_min_leaf_area"<< m_cparam->oa_min_leaf_area
  33. /*<< "oa_min_hist_value"<< m_cparam->oa_min_hist_value
  34. << "oa_morph_radius_base"<< m_cparam->oa_morph_radius_base
  35. << "oa_morph_iteration_base" << m_cparam->oa_morph_iteration_base
  36. << "oa_min_hist_value_base"<< m_cparam->oa_min_hist_value_base
  37. << "oa_col_th_ratio"<< m_cparam->oa_col_th_ratio
  38. << "oa_row_th_ratio"<< m_cparam->oa_row_th_ratio
  39. << "oa_stem_x_padding"<< m_cparam->oa_stem_x_padding
  40. << "oa_stem_dia_min"<< m_cparam->oa_stem_dia_min
  41. << "oa_stem_fork_y_min"<< m_cparam->oa_stem_fork_y_min
  42. << "oa_stem_dia_mp"<< m_cparam->oa_stem_dia_mp
  43. << "oa_clip_y_min"<< m_cparam->oa_clip_y_min
  44. << "oa_clip_y_max"<<m_cparam->oa_clip_y_max*/
  45. << "rs_y_flip"<< m_cparam->rs_y_flip
  46. << "rs_min_hist_value"<< m_cparam->rs_min_hist_value
  47. << "rs_col_th_ratio" << m_cparam->rs_col_th_ratio
  48. << "rs_row_th_ratio" << m_cparam->rs_row_th_ratio
  49. << "rs_stem_x_padding" << m_cparam->rs_stem_x_padding
  50. << "rs_stem_dia_min" << m_cparam->rs_stem_dia_min
  51. << "rs_stem_dia_mp" << m_cparam->rs_stem_dia_mp
  52. << "rs_stem_fork_y_min" << m_cparam->rs_stem_fork_y_min
  53. << "rs_stem_edge_detect_window" << m_cparam->rs_stem_edge_detect_window
  54. << "rs_cand_corner_box_width_ratio" << m_cparam->rs_cand_corner_box_width_ratio
  55. << "rs_cand_corner_box_xoffset_ratio" << m_cparam->rs_cand_corner_box_xoffset_ratio
  56. << "rs_opt_corner_xoffset_ratio" << m_cparam->rs_opt_corner_xoffset_ratio
  57. << "rs_opt_corner_yoffset_ratio" << m_cparam->rs_opt_corner_yoffset_ratio
  58. <<"rs_corner_mask_rad_ratio"<<m_cparam->rs_corner_mask_rad_ratio
  59. << "rs_morph_radius" << m_cparam->rs_morph_radius
  60. << "rs_morph_iteration" << m_cparam->rs_morph_iteration
  61. << "rs_morph_iteration_gray" << m_cparam->rs_morph_iteration_gray
  62. << "rs_max_corner_num" << m_cparam->rs_max_corner_num
  63. << "rs_corner_qaulity_level" << m_cparam->rs_corner_qaulity_level
  64. << "rs_corner_min_distance" << m_cparam->rs_corner_min_distance
  65. << "rs_cut_angle" << m_cparam->rs_cut_angle
  66. << "rs_cut_point_offset_ratio"<< m_cparam->rs_cut_point_offset_ratio
  67. << "sc_y_flip"<< m_cparam->sc_y_flip
  68. << "sc_col_th_ratio" << m_cparam->sc_col_th_ratio
  69. << "sc_row_th_ratio" << m_cparam->sc_row_th_ratio
  70. << "sc_stem_x_padding" << m_cparam->sc_stem_x_padding
  71. << "sc_stem_dia_min"<< m_cparam->sc_stem_dia_min
  72. << "sc_clip_padding" << m_cparam->sc_clip_padding
  73. << "sc_stem_ymax_padding" << m_cparam->sc_stem_ymax_padding
  74. << "sc_default_cut_length" << m_cparam->sc_default_cut_length
  75. << "sc_stem_edge_detect_window" << m_cparam->sc_stem_edge_detect_window
  76. << "sc_r2_th" << m_cparam->sc_r2_th
  77. << "sc_r2_window" << m_cparam->sc_r2_window
  78. << "sc_average_window" << m_cparam->sc_average_window
  79. << "sc_morph_radius" << m_cparam->sc_morph_radius
  80. << "sc_morph_iteration" << m_cparam->sc_morph_iteration
  81. << "rs_oa_pixel_ratio" << m_cparam->rs_oa_pixel_ratio
  82. << "rs_cut_pixel_ratio" << m_cparam->rs_cut_pixel_ratio
  83. << "sc_cut_pixel_ratio" << m_cparam->sc_cut_pixel_ratio
  84. << "rs_grab_xmin" << m_cparam->rs_grab_xmin
  85. << "rs_grab_xmax" << m_cparam->rs_grab_xmax
  86. << "rs_grab_ymin" << m_cparam->rs_grab_ymin
  87. << "rs_grab_ymax" << m_cparam->rs_grab_ymax
  88. << "rs_grab_zmin" << m_cparam->rs_grab_zmin
  89. << "rs_grab_zmax" << m_cparam->rs_grab_zmax
  90. << "rs_grab_stem_diameter" << m_cparam->rs_grab_stem_diameter
  91. << "rs_grab_y_opt" << m_cparam->rs_grab_y_opt
  92. << "rs_grab_seedling_dist" << m_cparam->rs_grab_seedling_dist
  93. << "rs_grab_stem_min_pts" << m_cparam->rs_grab_stem_min_pts
  94. << "rs_grab_ror_ratio" << m_cparam->rs_grab_ror_ratio
  95. << "sc_grab_xmin" << m_cparam->sc_grab_xmin
  96. << "sc_grab_xmax" << m_cparam->sc_grab_xmax
  97. << "sc_grab_ymin" << m_cparam->sc_grab_ymin
  98. << "sc_grab_ymax" << m_cparam->sc_grab_ymax
  99. << "sc_grab_zmin" << m_cparam->sc_grab_zmin
  100. << "sc_grab_zmax" << m_cparam->sc_grab_zmax
  101. << "sc_grab_stem_diameter" << m_cparam->sc_grab_stem_diameter
  102. << "sc_grab_y_opt" << m_cparam->sc_grab_y_opt
  103. << "sc_grab_seedling_dist" << m_cparam->sc_grab_seedling_dist
  104. << "sc_grab_stem_min_pts" << m_cparam->sc_grab_stem_min_pts
  105. << "sc_grab_ror_ratio" << m_cparam->sc_grab_ror_ratio
  106. << "}";
  107. };
  108. void CGCvConfig::read(const cv::FileNode& node){ //Read serialization for this class
  109. assert(m_cparam!=0);
  110. m_cparam->image_show = (bool)(int)node["image_show"];
  111. m_cparam->image_return = (bool)(int)node["image_return"];
  112. m_cparam->image_row_grid = (int)node["image_row_grid"];
  113. m_cparam->image_col_grid = (int)node["image_col_grid"];
  114. m_cparam->self_camera = (bool)(int)node["self_camera"];
  115. m_cparam->timeout_proc = (int)node["timeout_proc"];
  116. m_cparam->timeout_append = (int)node["timeout_append"];
  117. m_cparam->image_save = (bool)(int)node["image_save"];
  118. m_cparam->image_depository =(string)node["image_depository"];
  119. m_cparam->image_backup_days = (int)node["image_backup_days"];
  120. m_cparam->oa_y_flip = (bool)(int)node["oa_y_flip"];
  121. /*m_cparam->rs_min_hist_value = (int)node["rs_min_hist_value"];*/
  122. m_cparam->oa_morph_radius = (int)node["oa_morph_radius"];
  123. m_cparam->oa_morph_iteration = (int)node["oa_morph_iteration"];
  124. m_cparam->oa_min_leaf_area = (int)node["oa_min_leaf_area"];
  125. /*m_cparam->oa_min_hist_value = (int)node["oa_min_hist_value"];
  126. m_cparam->oa_morph_radius_base = (int)node["oa_morph_radius_base"];
  127. m_cparam->oa_morph_iteration_base = (int)node["oa_morph_iteration_base"];
  128. m_cparam->oa_min_hist_value_base = (int)node["oa_min_hist_value_base"];
  129. m_cparam->oa_col_th_ratio = (double)node["oa_col_th_ratio"];
  130. m_cparam->oa_row_th_ratio = (double)node["oa_row_th_ratio"];
  131. m_cparam->oa_stem_x_padding = (int)node["oa_stem_x_padding"];
  132. m_cparam->oa_stem_dia_min = (int)node["oa_stem_dia_min"];
  133. m_cparam->oa_stem_fork_y_min = (int)node["oa_stem_fork_y_min"];
  134. m_cparam->oa_stem_dia_mp = (double)node["oa_stem_dia_mp"];
  135. m_cparam->oa_clip_y_min = (int)node["oa_clip_y_min"];
  136. m_cparam->oa_clip_y_max = (int)node["oa_clip_y_max"];*/
  137. m_cparam->rs_y_flip = (bool)(int)node["rs_y_flip"];
  138. m_cparam->rs_col_th_ratio = (double)node["rs_col_th_ratio"];
  139. m_cparam->rs_row_th_ratio = (double)node["rs_row_th_ratio"];
  140. m_cparam->rs_stem_x_padding = (int)node["rs_stem_x_padding"];
  141. m_cparam->rs_stem_dia_min = (int)node["rs_stem_dia_min"];
  142. m_cparam->rs_stem_dia_mp = (double)node["rs_stem_dia_mp"];
  143. m_cparam->rs_stem_fork_y_min = (int)node["rs_stem_fork_y_min"];
  144. m_cparam->rs_stem_edge_detect_window = (int)node["rs_stem_edge_detect_window"];
  145. m_cparam->rs_cand_corner_box_width_ratio = (double)node["rs_cand_corner_box_width_ratio"];
  146. m_cparam->rs_cand_corner_box_xoffset_ratio = (double)node["rs_cand_corner_box_xoffset_ratio"];
  147. m_cparam->rs_opt_corner_xoffset_ratio = (double)node["rs_opt_corner_xoffset_ratio"];
  148. m_cparam->rs_opt_corner_yoffset_ratio = (double)node["rs_opt_corner_yoffset_ratio"];
  149. m_cparam->rs_corner_mask_rad_ratio = (double)node["rs_corner_mask_rad_ratio"];
  150. m_cparam->rs_morph_radius = (int)node["rs_morph_radius"];
  151. m_cparam->rs_morph_iteration = (int)node["rs_morph_iteration"];
  152. m_cparam->rs_morph_iteration_gray = (int)node["rs_morph_iteration_gray"];
  153. m_cparam->rs_max_corner_num = (int)node["rs_max_corner_num"];
  154. m_cparam->rs_corner_qaulity_level = (double)node["rs_corner_qaulity_level"];
  155. m_cparam->rs_corner_min_distance = (double)node["rs_corner_min_distance"];
  156. m_cparam->rs_cut_angle = (double)node["rs_cut_angle"];
  157. m_cparam->rs_cut_point_offset_ratio = (double)node["rs_cut_point_offset_ratio"];
  158. m_cparam->sc_y_flip = (bool)(int)node["sc_y_flip"];
  159. m_cparam->sc_col_th_ratio = (double)node["sc_col_th_ratio"];
  160. m_cparam->sc_row_th_ratio = (double)node["sc_row_th_ratio"];
  161. m_cparam->sc_stem_x_padding = (int)node["sc_stem_x_padding"];
  162. m_cparam->sc_stem_dia_min = (int)node["sc_stem_dia_min"];
  163. m_cparam->sc_clip_padding = (int)node["sc_clip_padding"];
  164. m_cparam->sc_stem_ymax_padding = (int)node["sc_stem_ymax_padding"];
  165. m_cparam->sc_default_cut_length = (int)node["sc_default_cut_length"];
  166. m_cparam->sc_stem_edge_detect_window = (int)node["sc_stem_edge_detect_window"];
  167. m_cparam->sc_r2_th = (double)node["sc_r2_th"];
  168. m_cparam->sc_r2_window = (int)node["sc_r2_window"];
  169. m_cparam->sc_average_window = (int)node["sc_average_window"];
  170. m_cparam->sc_morph_radius = (int)node["sc_morph_radius"];
  171. m_cparam->sc_morph_iteration = (int)node["sc_morph_iteration"];
  172. m_cparam->rs_oa_pixel_ratio = (double)node["rs_oa_pixel_ratio"];
  173. m_cparam->rs_cut_pixel_ratio = (double)node["rs_cut_pixel_ratio"];
  174. m_cparam->sc_cut_pixel_ratio = (double)node["sc_cut_pixel_ratio"];
  175. m_cparam->rs_grab_xmin = (double)node["rs_grab_xmin"];
  176. m_cparam->rs_grab_xmax = (double)node["rs_grab_xmax"];
  177. m_cparam->rs_grab_ymin = (double)node["rs_grab_ymin"];
  178. m_cparam->rs_grab_ymax = (double)node["rs_grab_ymax"];
  179. m_cparam->rs_grab_zmin = (double)node["rs_grab_zmin"];
  180. m_cparam->rs_grab_zmax = (double)node["rs_grab_zmax"];
  181. m_cparam->rs_grab_stem_diameter = (double)node["rs_grab_stem_diameter"];
  182. m_cparam->rs_grab_y_opt = (double)node["rs_grab_y_opt"];
  183. m_cparam->rs_grab_seedling_dist = (double)node["rs_grab_seedling_dist"];
  184. m_cparam->rs_grab_stem_min_pts = (int)node["rs_grab_stem_min_pts"];
  185. m_cparam->rs_grab_ror_ratio = (double)node["rs_grab_ror_ratio"];
  186. m_cparam->sc_grab_xmin = (double)node["sc_grab_xmin"];
  187. m_cparam->sc_grab_xmax = (double)node["sc_grab_xmax"];
  188. m_cparam->sc_grab_ymin = (double)node["sc_grab_ymin"];
  189. m_cparam->sc_grab_ymax = (double)node["sc_grab_ymax"];
  190. m_cparam->sc_grab_zmin = (double)node["sc_grab_zmin"];
  191. m_cparam->sc_grab_zmax = (double)node["sc_grab_zmax"];
  192. m_cparam->sc_grab_stem_diameter = (double)node["sc_grab_stem_diameter"];
  193. m_cparam->sc_grab_y_opt = (double)node["sc_grab_y_opt"];
  194. m_cparam->sc_grab_seedling_dist = (double)node["sc_grab_seedling_dist"];
  195. m_cparam->sc_grab_stem_min_pts = (int)node["sc_grab_stem_min_pts"];
  196. m_cparam->sc_grab_ror_ratio = (double)node["sc_grab_ror_ratio"];
  197. }
  198. string get_cparam_info(ConfigParam*m_cparam)
  199. {
  200. if(!m_cparam){return string("");}
  201. stringstream buff;
  202. buff << "{" <<endl
  203. << "image_show:\t"<< m_cparam->image_show << endl
  204. << "image_return:\t"<< m_cparam->image_return << endl
  205. << "image_row_grid:\t"<< m_cparam->image_row_grid << endl
  206. << "image_col_grid:\t"<< m_cparam->image_col_grid << endl
  207. << "self_camera:\t"<< m_cparam->self_camera << endl
  208. <<"timeout_proc:\t"<<m_cparam->timeout_proc << endl
  209. <<"timeout_append:\t"<<m_cparam->timeout_append << endl
  210. <<"image_save:\t"<<m_cparam->image_save << endl
  211. <<"image_depository:\t"<<m_cparam->image_depository << endl
  212. <<"image_backup_days:\t"<<m_cparam->image_backup_days << endl
  213. << "oa_y_flip:\t"<< m_cparam->oa_y_flip << endl
  214. << "oa_morph_radius:\t"<< m_cparam->oa_morph_radius << endl
  215. << "oa_morph_iteration:\t" << m_cparam->oa_morph_iteration << endl
  216. << "oa_min_leaf_area:\t"<< m_cparam->oa_min_leaf_area << endl
  217. /*<< "oa_min_hist_value:\t"<< m_cparam->oa_min_hist_value<<endl
  218. << "oa_morph_radius_base:\t"<< m_cparam->oa_morph_radius_base << endl
  219. << "oa_morph_iteration_base:\t" << m_cparam->oa_morph_iteration_base << endl
  220. << "oa_min_hist_value_base:\t"<< m_cparam->oa_min_hist_value_base << endl
  221. << "oa_col_th_ratio:\t"<< m_cparam->oa_col_th_ratio << endl
  222. << "oa_row_th_ratio:\t"<< m_cparam->oa_row_th_ratio << endl
  223. << "oa_stem_x_padding:\t"<< m_cparam->oa_stem_x_padding << endl
  224. << "oa_stem_dia_min:\t"<< m_cparam->oa_stem_dia_min << endl
  225. << "oa_stem_fork_y_min:\t"<< m_cparam->oa_stem_fork_y_min << endl
  226. << "oa_stem_dia_mp:\t"<< m_cparam->oa_stem_dia_mp << endl
  227. << "oa_clip_y_min:\t"<< m_cparam->oa_clip_y_min << endl
  228. << "oa_clip_y_max:\t"<<m_cparam->oa_clip_y_max << endl*/
  229. << "rs_y_flip:\t"<< m_cparam->rs_y_flip << endl
  230. << "rs_min_hist_value:\t"<< m_cparam->rs_min_hist_value << endl
  231. << "rs_col_th_ratio:\t" << m_cparam->rs_col_th_ratio << endl
  232. << "rs_row_th_ratio:\t" << m_cparam->rs_row_th_ratio << endl
  233. << "rs_stem_x_padding:\t" << m_cparam->rs_stem_x_padding << endl
  234. << "rs_stem_dia_min:\t" << m_cparam->rs_stem_dia_min << endl
  235. << "rs_stem_dia_mp:\t" << m_cparam->rs_stem_dia_mp << endl
  236. << "rs_stem_fork_y_min:\t" << m_cparam->rs_stem_fork_y_min << endl
  237. << "rs_stem_edge_detect_window:\t" << m_cparam->rs_stem_edge_detect_window << endl
  238. << "rs_cand_corner_box_width_ratio:\t" << m_cparam->rs_cand_corner_box_width_ratio << endl
  239. << "rs_cand_corner_box_xoffset_ratio:\t" << m_cparam->rs_cand_corner_box_xoffset_ratio << endl
  240. << "rs_opt_corner_xoffset_ratio:\t" << m_cparam->rs_opt_corner_xoffset_ratio << endl
  241. << "rs_opt_corner_yoffset_ratio:\t" << m_cparam->rs_opt_corner_yoffset_ratio << endl
  242. <<"rs_corner_mask_rad_ratio:\t"<<m_cparam->rs_corner_mask_rad_ratio << endl
  243. << "rs_morph_radius:\t" << m_cparam->rs_morph_radius << endl
  244. << "rs_morph_iteration:\t" << m_cparam->rs_morph_iteration << endl
  245. << "rs_morph_iteration_gray:\t" << m_cparam->rs_morph_iteration_gray << endl
  246. << "rs_max_corner_num:\t" << m_cparam->rs_max_corner_num << endl
  247. << "rs_corner_qaulity_level:\t" << m_cparam->rs_corner_qaulity_level << endl
  248. << "rs_corner_min_distance:\t" << m_cparam->rs_corner_min_distance << endl
  249. << "rs_cut_angle:\t" << m_cparam->rs_cut_angle << endl
  250. << "rs_cut_point_offset_ratio:\t"<< m_cparam->rs_cut_point_offset_ratio << endl
  251. << "sc_y_flip:\t"<< m_cparam->sc_y_flip << endl
  252. << "sc_col_th_ratio:\t" << m_cparam->sc_col_th_ratio << endl
  253. << "sc_row_th_ratio:\t" << m_cparam->sc_row_th_ratio << endl
  254. << "sc_stem_x_padding:\t" << m_cparam->sc_stem_x_padding << endl
  255. << "sc_stem_dia_min:\t"<< m_cparam->sc_stem_dia_min << endl
  256. << "sc_clip_padding:\t" << m_cparam->sc_clip_padding << endl
  257. << "sc_stem_ymax_padding:\t" << m_cparam->sc_stem_ymax_padding << endl
  258. << "sc_default_cut_length:\t" << m_cparam->sc_default_cut_length << endl
  259. << "sc_stem_edge_detect_window:\t" << m_cparam->sc_stem_edge_detect_window << endl
  260. << "sc_r2_th:\t" << m_cparam->sc_r2_th << endl
  261. << "sc_r2_window:\t" << m_cparam->sc_r2_window << endl
  262. << "sc_average_window:\t" << m_cparam->sc_average_window << endl
  263. << "sc_morph_radius:\t" << m_cparam->sc_morph_radius << endl
  264. << "sc_morph_iteration:\t" << m_cparam->sc_morph_iteration << endl
  265. << "rs_oa_pixel_ratio:\t" << m_cparam->rs_oa_pixel_ratio << endl
  266. << "rs_cut_pixel_ratio:\t" << m_cparam->rs_cut_pixel_ratio << endl
  267. << "sc_cut_pixel_ratio:\t" << m_cparam->sc_cut_pixel_ratio << endl
  268. << "rs_grab_xmin:\t" << m_cparam->rs_grab_xmin << endl
  269. << "rs_grab_xmax:\t" << m_cparam->rs_grab_xmax << endl
  270. << "rs_grab_ymin:\t" << m_cparam->rs_grab_ymin << endl
  271. << "rs_grab_ymax:\t" << m_cparam->rs_grab_ymax << endl
  272. << "rs_grab_zmin:\t" << m_cparam->rs_grab_zmin << endl
  273. << "rs_grab_zmax:\t" << m_cparam->rs_grab_zmax << endl
  274. << "rs_grab_stem_diameter:\t" << m_cparam->rs_grab_stem_diameter << endl
  275. << "rs_grab_y_opt:\t" << m_cparam->rs_grab_y_opt << endl
  276. << "rs_grab_seedling_dist:\t" << m_cparam->rs_grab_seedling_dist << endl
  277. << "rs_grab_stem_min_pts:\t" << m_cparam->rs_grab_stem_min_pts << endl
  278. << "rs_grab_ror_ratio:\t" << m_cparam->rs_grab_ror_ratio << endl
  279. << "sc_grab_xmin:\t" << m_cparam->sc_grab_xmin << endl
  280. << "sc_grab_xmax:\t" << m_cparam->sc_grab_xmax << endl
  281. << "sc_grab_ymin:\t" << m_cparam->sc_grab_ymin << endl
  282. << "sc_grab_ymax:\t" << m_cparam->sc_grab_ymax << endl
  283. << "sc_grab_zmin:\t" << m_cparam->sc_grab_zmin << endl
  284. << "sc_grab_zmax:\t" << m_cparam->sc_grab_zmax << endl
  285. << "sc_grab_stem_diameter:\t" << m_cparam->sc_grab_stem_diameter << endl
  286. << "sc_grab_y_opt:\t" << m_cparam->sc_grab_y_opt << endl
  287. << "sc_grab_seedling_dist:\t" << m_cparam->sc_grab_seedling_dist << endl
  288. << "sc_grab_stem_min_pts:\t" << m_cparam->sc_grab_stem_min_pts << endl
  289. << "sc_grab_ror_ratio:\t" << m_cparam->sc_grab_ror_ratio << endl
  290. << "}" << endl;
  291. return buff.str();
  292. }
  293. }