86 d.
x_ids.resize(nviews);
88 d.
X.resize(3, npoints);
92 Vecu all_point_ids(npoints);
93 for (
size_t j = 0; j < npoints; ++j) {
97 for (
size_t i = 0; i < nviews; ++i) {
98 Vec3 camera_center, t, jitter, lookdir;
100 double theta = i * 2 *
M_PI / nviews;
101 camera_center << sin(theta), 0.0,
cos(theta);
102 camera_center *= config.
_dist;
103 d.
C[i] = camera_center;
107 lookdir = -camera_center + jitter;
110 d.
K[i] << config.
_fx, 0, config.
_cx,
111 0, config.
_fy, config.
_cy,
115 d.
t[i] = -d.
R[i] * camera_center;
117 d.
x_ids[i] = all_point_ids;
125 unsigned min_projections,
127 assert(view_ratio <= 1.0);
128 assert(view_ratio > 0.0);
129 assert(min_projections <= npoints);
137 d.
x_ids.resize(nviews);
139 d.
X.resize(3, npoints);
143 Mat visibility(nviews, npoints);
144 visibility.setZero();
145 Mat randoms(nviews, npoints);
147 randoms = (randoms.array() + 1) / 2.0;
148 unsigned num_visibles = 0;
149 for (
size_t i = 0; i < nviews; ++i) {
151 for (
size_t j = 0; j < npoints; j++) {
152 if (randoms(i, j) <= view_ratio) {
153 visibility(i, j) =
true;
157 if (num_visibles < min_projections) {
158 unsigned num_projections_to_add = min_projections - num_visibles;
159 for (
size_t j = 0; j < npoints && num_projections_to_add > 0; ++j) {
160 if (!visibility(i, j)) {
161 num_projections_to_add--;
164 num_visibles += num_projections_to_add;
166 d.
x_ids[i].resize(num_visibles);
167 d.
x[i].resize(2, num_visibles);
170 size_t j_visible = 0;
172 for (
size_t i = 0; i < nviews; ++i) {
173 Vec3 camera_center, t, jitter, lookdir;
175 double theta = i * 2 *
M_PI / nviews;
176 camera_center << sin(theta), 0.0,
cos(theta);
177 camera_center *= config.
_dist;
178 d.
C[i] = camera_center;
182 lookdir = -camera_center + jitter;
185 d.
K[i] << config.
_fx, 0, config.
_cx,
186 0, config.
_fy, config.
_cy,
190 d.
t[i] = -d.
R[i] * camera_center;
192 for (
size_t j = 0; j < npoints; j++) {
193 if (visibility(i, j)) {
196 d.
x_ids[i][j_visible] = j;