67 int fx,
int fy,
int cx,
int cy,
double distance,
double jitter_amount) {
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);
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;
#define assert(assertion)
float distance(VecOp< float, D >, VecOp< float, D >) RET
NViewDataSet NRealisticCamerasSparse(int nviews, int npoints, float view_ratio, unsigned min_projections, const nViewDatasetConfigator config)
void FundamentalFromProjections(const Mat34 &P1, const Mat34 &P2, Mat3 *F)
TwoViewDataSet TwoRealisticCameras(bool same_K)
Mat3 RotationAroundX(double angle)
Vec2 Project(const Mat34 &P, const Vec3 &X)
Eigen::Matrix< unsigned int, Eigen::Dynamic, 1 > Vecu
Mat3 RotationAroundZ(double angle)
NViewDataSet NRealisticCamerasFull(int nviews, int npoints, const nViewDatasetConfigator config)
void P_From_KRt(const Mat3 &K, const Mat3 &R, const Vec3 &t, Mat34 *P)
double _dist
Camera random position parameters.
int _fx
Internal camera parameters.
nViewDatasetConfigator(int fx=1000, int fy=1000, int cx=500, int cy=500, double distance=1.5, double jitter_amount=0.01)