/** * randomization - controls % of total number of pixels in the image * that will be effected by random noise * repeat - # of times the process is carried out on the previous steps output */ array pick(const array &in, int randomization, int repeat) { int w = in.dims(0); int h = in.dims(1); float f = randomization / 100.0f; int dim = (int)(f*w*h); array ret_val = in.copy(); for (int i = 0; i<repeat; ++i) { array idxs = (w*h) * randu(dim); array rnd = getRandomNeighbor(ret_val, 1, 1); array temp_src = moddims(rnd, w*h, 3); array temp_dst = moddims(ret_val, w*h, 3); temp_dst(idxs, span) = temp_src(idxs, span); ret_val = moddims(temp_dst, in.dims()); } return ret_val; }
/** * randomization - controls % of total number of pixels in the image * that will be effected by random noise * repeat - # of times the process is carried out on the previous steps output */ array hurl(const array &in, int randomization, int repeat) { int w = in.dims(0); int h = in.dims(1); float f = randomization / 100.0f; int dim = (int)(f*w*h); array ret_val = in.copy(); array temp = moddims(ret_val, w*h, 3); for (int i = 0; i<repeat; ++i) { array idxs = (w*h) * randu(dim); array rndR = 255.0f * randu(dim); array rndG = 255.0f * randu(dim); array rndB = 255.0f * randu(dim); temp(idxs, 0) = rndR; temp(idxs, 1) = rndG; temp(idxs, 2) = rndB; } ret_val = moddims(temp, in.dims()); return ret_val; }
b.host(&hb[0]); c.host(&hc[0]); for (int i = 0; i < num; i++) { ASSERT_EQ(hc[i], hb[i]) << "at " << i; } } TEST(Replace, 4D) { dim4 dims(2, 3, 4, 2); array cond = af::randu(dims) > 0.5; array a = af::randu(dims); array b = a.copy(); replace(b, !cond, a - a * 0.9); array c = a - a * cond * 0.9; int num = (int)dims.elements(); std::vector<float> hb(num); std::vector<float> hc(num); b.host(&hb[0]); c.host(&hc[0]); for (int i = 0; i < num; i++) { ASSERT_EQ(hc[i], hb[i]) << "at " << i; } }