2 * svrt is the ``Synthetic Visual Reasoning Test'', an image
3 * generator for evaluating classification performance of machine
4 * learning systems, humans and primates.
6 * Copyright (c) 2009 Idiap Research Institute, http://www.idiap.ch/
7 * Written by Francois Fleuret <francois.fleuret@idiap.ch>
9 * This file is part of svrt.
11 * svrt is free software: you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License version 3 as
13 * published by the Free Software Foundation.
15 * svrt is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with pysvrt. If not, see <http://www.gnu.org/licenses/>.
25 #include "vision_problem_21.h"
28 VisionProblem_21::VisionProblem_21() { }
30 void VisionProblem_21::generate(int label, Vignette *vignette) {
32 int xs[nb_shapes], ys[nb_shapes];
33 scalar_t scales[nb_shapes], angles[nb_shapes];
34 Shape shapes[nb_shapes];
39 scalar_t max_scale = -1;
41 for(int n = 0; n < nb_shapes; n++) {
42 xs[n] = int(random_uniform_0_1() * Vignette::width);
43 ys[n] = int(random_uniform_0_1() * Vignette::height);
45 scales[n] = 1.0 + 3.0 * random_uniform_0_1();
47 if(n == 0 || scales[n] > max_scale) max_scale = scales[n];
49 angles[n] = random_uniform_0_1() * 2 * M_PI;
52 for(int n = 0; n < nb_shapes; n++) {
53 if(n == 0 || label == 0) {
54 shapes[n].randomize(max_scale * part_size / 2, max_scale * hole_size/2);
56 shapes[n].copy(&shapes[0]);
60 for(int n = 0; n < nb_shapes; n++) {
61 shapes[n].scale(scales[n] / max_scale);
62 shapes[n].rotate(angles[n]);
68 for(int n = 0; n < nb_shapes; n++) {
69 error |= shapes[n].overwrites(vignette, xs[n], ys[n]);
71 shapes[n].draw(n, vignette, xs[n], ys[n]);