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

Function ComputeProjection

lib/PBA/SparseBundleCPU.cpp:1198–1238  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1196
1197template <class Float>
1198void ComputeProjection(size_t nproj, const Float* camera, const Float* point,
1199 const Float* ms, const int* jmap, Float* pj, int radial,
1200 int mt) {
1201 if (mt > 1 && nproj >= mt) {
1202 MYTHREAD threads[THREAD_NUM_MAX];
1203 const size_t thread_num = std::min(mt, THREAD_NUM_MAX);
1204 for (size_t i = 0; i < thread_num; ++i) {
1205 size_t first = nproj * i / thread_num;
1206 size_t last_ = nproj * (i + 1) / thread_num;
1207 size_t last = std::min(last_, nproj);
1208 RUN_THREAD(ComputeProjection, threads[i], last - first, camera, point,
1209 ms + 2 * first, jmap + 2 * first, pj + 2 * first, radial);
1210 }
1211 WAIT_THREAD(threads, thread_num);
1212
1213 } else {
1214 for (size_t i = 0; i < nproj; ++i, jmap += 2, ms += 2, pj += 2) {
1215 const Float* c = camera + jmap[0] * 16;
1216 const Float* m = point + jmap[1] * POINT_ALIGN;
1217 /////////////////////////////////////////////////////
1218 Float p0 = c[4] * m[0] + c[5] * m[1] + c[6] * m[2] + c[1];
1219 Float p1 = c[7] * m[0] + c[8] * m[1] + c[9] * m[2] + c[2];
1220 Float p2 = c[10] * m[0] + c[11] * m[1] + c[12] * m[2] + c[3];
1221
1222 if (radial == 1) {
1223 Float rr = Float(1.0) + c[13] * (p0 * p0 + p1 * p1) / (p2 * p2);
1224 Float f_p2 = c[0] * rr / p2;
1225 pj[0] = ms[0] - p0 * f_p2;
1226 pj[1] = ms[1] - p1 * f_p2;
1227 } else if (radial == -1) {
1228 Float f_p2 = c[0] / p2;
1229 Float rd = Float(1.0) + c[13] * (ms[0] * ms[0] + ms[1] * ms[1]);
1230 pj[0] = ms[0] * rd - p0 * f_p2;
1231 pj[1] = ms[1] * rd - p1 * f_p2;
1232 } else {
1233 pj[0] = ms[0] - p0 * c[0] / p2;
1234 pj[1] = ms[1] - p1 * c[0] / p2;
1235 }
1236 }
1237 }
1238}
1239
1240template <class Float>
1241void ComputeProjectionX(size_t nproj, const Float* camera, const Float* point,

Callers 3

EvaluateProjectionMethod · 0.85
EvaluateProjectionMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected