MCPcopy Create free account
hub / github.com/XiaoBaiiiiii/colmap-pcd / ComputeProjectionX

Function ComputeProjectionX

lib/PBA/SparseBundleCPU.cpp:1257–1295  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1255
1256template <class Float>
1257void ComputeProjectionX(size_t nproj, const Float* camera, const Float* point,
1258 const Float* ms, const int* jmap, Float* pj, int radial,
1259 int mt) {
1260 if (mt > 1 && nproj >= mt) {
1261 MYTHREAD threads[THREAD_NUM_MAX];
1262 const size_t thread_num = std::min(mt, THREAD_NUM_MAX);
1263 for (size_t i = 0; i < thread_num; ++i) {
1264 size_t first = nproj * i / thread_num;
1265 size_t last_ = nproj * (i + 1) / thread_num;
1266 size_t last = std::min(last_, nproj);
1267 RUN_THREAD(ComputeProjectionX, threads[i], last - first, camera, point,
1268 ms + 2 * first, jmap + 2 * first, pj + 2 * first, radial);
1269 }
1270 WAIT_THREAD(threads, thread_num);
1271 } else {
1272 for (size_t i = 0; i < nproj; ++i, jmap += 2, ms += 2, pj += 2) {
1273 const Float* c = camera + jmap[0] * 16;
1274 const Float* m = point + jmap[1] * POINT_ALIGN;
1275 /////////////////////////////////////////////////////
1276 Float p0 = c[4] * m[0] + c[5] * m[1] + c[6] * m[2] + c[1];
1277 Float p1 = c[7] * m[0] + c[8] * m[1] + c[9] * m[2] + c[2];
1278 Float p2 = c[10] * m[0] + c[11] * m[1] + c[12] * m[2] + c[3];
1279 if (radial == 1) {
1280 Float rr = Float(1.0) + c[13] * (p0 * p0 + p1 * p1) / (p2 * p2);
1281 Float f_p2 = c[0] / p2;
1282 pj[0] = ms[0] / rr - p0 * f_p2;
1283 pj[1] = ms[1] / rr - p1 * f_p2;
1284 } else if (radial == -1) {
1285 Float rd = Float(1.0) + c[13] * (ms[0] * ms[0] + ms[1] * ms[1]);
1286 Float f_p2 = c[0] / p2 / rd;
1287 pj[0] = ms[0] - p0 * f_p2;
1288 pj[1] = ms[1] - p1 * f_p2;
1289 } else {
1290 pj[0] = ms[0] - p0 * c[0] / p2;
1291 pj[1] = ms[1] - p1 * c[0] / p2;
1292 }
1293 }
1294 }
1295}
1296
1297template <class Float>
1298void ComputeProjectionQ(size_t nq, const Float* camera, const int* qmap,

Callers 3

EvaluateProjectionXMethod · 0.85
EvaluateProjectionXMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected