38 #include <boost/typeof/typeof.hpp>
39 #include <boost/lexical_cast.hpp>
40 #define BOOST_ASSIGN_MAX_PARAMS 6
50 bool contains(
const M& m,
const typename M::key_type& k)
52 BOOST_AUTO(it,m.find(k));
57 const typename M::mapped_type&
get(
const M& m,
const typename M::key_type& k)
59 BOOST_AUTO(it,m.find(k));
63 throw std::runtime_error(
"unknown key");
69 {
"Phillips2007VarTrimmed", {
70 {
"type",
"inproceedings"},
71 {
"title",
"Outlier robust ICP for minimizing fractional RMSD"},
72 {
"author",
"Phillips, J.M. and Liu, R. and Tomasi, C."},
73 {
"booktitle",
"3-D Digital Imaging and Modeling, 2007. 3DIM '07. Sixth International Conference on"},
75 {
"pages",
"427--434"},
76 {
"publisher",
"IEEE Press"},
77 {
"doi",
"10.1109/3DIM.2007.39"},
78 {
"fulltext",
"http://x86.cs.duke.edu/~tomasi/papers/phillips/phillips3DIM07.pdf"}
80 {
"Chetverikov2002Trimmed", {
81 {
"type",
"inproceedings"},
82 {
"title",
"The Trimmed Iterative Closest Point Algorithm"},
83 {
"author",
"Chetverikov, D. and Svirko, D. and Stepanov, D. and Krsek, P."},
84 {
"booktitle",
"Pattern Recognition, 2002. Proceedings. 16th International Conference on"},
86 {
"pages",
"545--548"},
87 {
"publisher",
"IEEE Press"},
88 {
"doi",
"10.1109/ICPR.2002.1047997 "},
89 {
"fulltext",
"http://hci.iwr.uni-heidelberg.de/publications/dip/2002/ICPR2002/DATA/10_1_03.PDF"}
91 {
"Besl1992Point2Point", {
92 {
"type",
"inproceedings"},
93 {
"title",
"A Method for Registration of 3-D Shapes"},
94 {
"author",
"Besl, P.J. and McKay, H.D."},
95 {
"booktitle",
"Pattern Analysis and Machine Intelligence, IEEE Transactions"},
97 {
"pages",
"239--256"},
98 {
"publisher",
"IEEE Press"},
99 {
"doi",
"10.1109/34.121791"},
100 {
"fulltext",
"http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=121791"}
102 {
"Censi2007ICPCovariance", {
103 {
"type",
"inproceedings" },
104 {
"title",
"An Accurate Closed-Form Estimate of {ICP}'s Covariance" },
105 {
"author",
"Censi, A." },
106 {
"booktitle",
"Proceedings of the {IEEE} International Conference on Robotics and Automation ({ICRA})" },
108 {
"pages",
"3167--3172" },
109 {
"publisher",
"IEEE Press" },
110 {
"doi",
"10.1109/ROBOT.2007.363961" },
111 {
"fulltext",
"http://purl.org/censi/research/2007-icra-icpcov.pdf"}
113 {
"Chen1991Point2Plane", {
114 {
"type",
"inproceedings"},
115 {
"title",
"Object modeling by registration of multiple range images"},
116 {
"author",
"Chen, Y. and Medioni, G."},
117 {
"booktitle",
"Robotics and Automation, 1991. Proceedings., 1991 IEEE International Conference on"},
119 {
"pages",
"2724--2729"},
120 {
"publisher",
"IEEE Press"},
121 {
"doi",
"10.1109/ROBOT.1991.132043"},
122 {
"fulltext",
"http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&arnumber=132043"}
124 {
"Prakhya2015Point2Plane", {
125 {
"type",
"inproceedings"},
126 {
"title",
"A closed-form estimate of 3D ICP covariance"},
127 {
"author",
"Prakhya, S.M. and Bingbing, L. and Rui, Y. and Lin, W."},
128 {
"booktitle",
"2015 14th IAPR International Conference on Machine Vision Applications (MVA)"},
130 {
"pages",
"526--529"},
131 {
"publisher",
"IEEE Press"},
132 {
"doi",
"10.1109/MVA.2015.7153246"},
133 {
"fulltext",
"https://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&arnumber=7153246"}
135 {
"Masuda1996Random", {
136 {
"type",
"inproceedings"},
137 {
"title",
"Registration and integration of multiple range images for 3-D model construction"},
138 {
"author",
"Masuda, T. and Sakaue, K. and Yokoya, N."},
139 {
"booktitle",
"Pattern Recognition, 1996., Proceedings of the 13th International Conference on"},
141 {
"pages",
"879--883"},
142 {
"publisher",
"IEEE Press"},
143 {
"doi",
"10.1109/ICPR.1996.546150"},
144 {
"fulltext",
"http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=546150"}
146 {
"Diebel2004Median", {
147 {
"type",
"inproceedings"},
148 {
"title",
"Simultaneous Localization and Mapping with Active Stereo Vision"},
149 {
"author",
"Diebel, J. and Reutersward, K. and Thrun, S. and Davis, J. and Gupta, R."},
150 {
"booktitle",
"Intelligent Robots and Systems, 2004. (IROS 2004). Proceedings. 2004 IEEE/RSJ International Conference on"},
152 {
"pages",
"3436--3443"},
153 {
"publisher",
"IEEE Press"},
154 {
"doi",
"10.1109/IROS.2004.1389948"},
155 {
"fulltext",
"http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1389948"}
157 {
"Pomerleau2012Noise", {
158 {
"type",
"inproceedings"},
159 {
"title",
"Noise Characterization of Depth Sensors for Surface Inspections"},
160 {
"author",
"F. Pomerleau, A. Breitenmoser, M. Liu, F. Colas, R. Siegwart"},
161 {
"booktitle",
" International Conference on Applied Robotics for the Power Industry, 2012. (CARPI 2012). Proceedings of the IEEE"},
164 {
"publisher",
"IEEE Press"},
168 {
"RobustWeightFunctions", {
170 {
"title",
"Robust regression using iteratively reweighted least-squares"},
171 {
"author",
"Paul W Holland and Roy E Welsch"},
172 {
"booktitle",
"Communications in Statistics - Theory and Methods"},
174 {
"pages",
"813-827"},
176 {
"doi",
"10.1080/03610927708827533"},
181 {
"author",
"Umeyama, Shinji"},
182 {
"title",
"Least-Squares Estimation of Transformation Parameters Between Two Point Patterns"},
183 {
"journal",
"IEEE Trans. Pattern Anal. Mach. Intell."},
184 {
"issue_date",
"April 1991"},
189 {
"issn",
"0162-8828"},
190 {
"pages",
"376--380"},
192 {
"url",
"https://doi.org/10.1109/34.88573"},
193 {
"doi",
"10.1109/34.88573"},
195 {
"publisher",
"IEEE Computer Society"},
196 {
"address",
"Washington, DC, USA"}
198 {
"Rusinkiewicz2001", {
199 {
"type",
"inproceedings"},
200 {
"author",
"Rusinkiewicz, Szymon and Levoy, Marc"},
201 {
"title",
"Efficient Variants of the ICP Algorithm"},
202 {
"journal",
"Proceedings Third International Conference on 3-D Digital Imaging and Modeling"},
204 {
"isbn",
"0769509843"},
205 {
"pages",
"145--152"},
206 {
"doi",
"10.1109/IM.2001.924423"},
207 {
"publisher",
"IEEE Computer Society"},
208 {
"address",
"Quebec City, Quebec, Canada"}
211 {
"type",
"inproceedings"},
212 {
"author",
"Gelfand, N. and Ikemoto, L. and Rusinkiewicz, Szymon and Levoy, M."},
213 {
"title",
"Geometrically stable sampling for the ICP algorithm"},
214 {
"journal",
"Fourth International Conference on 3-D Digital Imaging and Modeling, 2003. 3DIM 2003. Proceedings."},
216 {
"isbn",
"0-7695-1991-1"},
217 {
"pages",
"260--267"},
218 {
"doi",
"10.1109/IM.2003.1240258"},
219 {
"publisher",
"IEEE Computer Society"}
223 {
"author",
"Labussière, Mathieu and Laconte, Johann and Pomerleau, François"},
224 {
"title",
"Geometry Preserving Sampling Method Based on Spectral Decomposition for Large-Scale Environments"},
225 {
"journal",
"Frontiers in Robotics and AI"},
229 {
"isbn",
"2296-9144"},
230 {
"pages",
"134--148"},
231 {
"doi",
"10.3389/frobt.2020.572054"},
232 {
"fulltext",
"https://www.frontiersin.org/article/10.3389/frobt.2020.572054"}
248 default: assert(
false);
break;
255 for (
size_t i = 0; i <
entries.size(); ++i)
257 const string& entryName(
entries[i]);
259 throw runtime_error(
string(
"Broken bibliography, missing entry " + entryName));
262 os <<
"[" << i+1 <<
"]";
264 os <<
" " <<
get(entry,
"title") <<
".";
266 os <<
" " <<
get(entry,
"author") <<
"";
268 os <<
" In " <<
get(entry,
"booktitle") <<
".";
270 os <<
" " <<
get(entry,
"journal") <<
".";
272 os <<
" " <<
get(entry,
"pages") <<
".";
274 os <<
" " <<
get(entry,
"year") <<
".";
282 for (
size_t i = 0; i <
entries.size(); ++i)
284 const string& entryName(
entries[i]);
286 throw runtime_error(
string(
"Broken bibliography, missing entry " + entryName));
289 os <<
" * " <<
"<<Anchor(" << entryName <<
")>>[" << i+1 <<
"] -";
291 os <<
" '''" <<
get(entry,
"title") <<
".'''";
293 os <<
" " <<
get(entry,
"author") <<
"";
295 os <<
" ''In " <<
get(entry,
"booktitle") <<
".''";
297 os <<
" " <<
get(entry,
"journal") <<
".";
299 os <<
" " <<
get(entry,
"pages") <<
".";
301 os <<
" " <<
get(entry,
"year") <<
".";
303 os <<
" DOI: [[https://doi.org/" <<
get(entry,
"doi") <<
"|" <<
get(entry,
"doi") <<
"]].";
305 os <<
" [[" <<
get(entry,
"fulltext") <<
"|full text]].";
313 for (
size_t i = 0; i <
entries.size(); ++i)
315 const string& entryName(
entries[i]);
317 throw runtime_error(
string(
"Broken bibliography, missing entry " + entryName));
320 os <<
"@" <<
get(entry,
"type") <<
"{" << entryName << endl;
322 os <<
"\ttitle={" <<
get(entry,
"title") <<
"}," << endl;
324 os <<
"\tauthor={" <<
get(entry,
"author") <<
"}," << endl;
326 os <<
"\tbooktitle={" <<
get(entry,
"booktitle") <<
"}," << endl;
328 os <<
"\tjournal={" <<
get(entry,
"journal") <<
"}," << endl;
330 os <<
"\tpages={" <<
get(entry,
"pages") <<
"}," << endl;
332 os <<
"\tyear={" <<
get(entry,
"year") <<
"}," << endl;
333 os <<
"}" << endl << endl;
337 static StringVector splitString(
const string& text,
char delim)
343 const size_t nextPos = text.find(delim, pos);
344 if (nextPos == text.npos)
346 res.push_back(text.substr(pos));
350 res.push_back(text.substr(pos, nextPos - pos));
364 for (
size_t i = 0; i < words.size(); ++i)
366 const string& word(words[i]);
367 const size_t l(word.length());
368 const size_t p(word.find(
'}'));
369 if ((l > 7) && (word.substr(0, 6) ==
"\\cite{") && (p != string::npos))
375 const StringVector keys(splitString(word.substr(6, p-6),
','));
376 for (
size_t j = 0; j < keys.size(); ++j)
378 const string key(keys[j]);
380 newText +=
"[[#" + key +
"|";
383 newText += std::to_string(
get(indices, key)+1);
387 size_t index(entries.size());
388 entries.push_back(key);
389 indices[key] = index;
390 newText += std::to_string(index+1);
394 if (j+1 != keys.size())
401 newText += word.substr(p+1);
405 if (i+1 != words.size())