| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | 
							- require 'pl'
 
- require 'image'
 
- require 'trepl'
 
- local gm = require 'graphicsmagick'
 
- torch.setdefaulttensortype("torch.FloatTensor")
 
- local function color(black)
 
-    local r, g, b
 
-    if torch.uniform() > 0.8 then
 
-       if black then
 
- 	 return {0, 0, 0}
 
-       else
 
- 	 return {1, 1, 1}
 
-       end
 
-    else
 
-       if torch.uniform() > 0.7 then
 
- 	 r = torch.random(0, 1)
 
-       else
 
- 	 r = torch.uniform(0, 1)
 
-       end
 
-       if torch.uniform() > 0.7 then
 
- 	 g = torch.random(0, 1)
 
-       else
 
- 	 g = torch.uniform(0, 1)
 
-       end
 
-       if torch.uniform() > 0.7 then
 
- 	 b = torch.random(0, 1)
 
-       else
 
- 	 b = torch.uniform(0, 1)
 
-       end
 
-    end
 
-    return {r,g,b}
 
- end
 
- local function gen_mod()
 
-    local f = function()
 
-       local xm = torch.random(2, 4)
 
-       local ym = torch.random(2, 4)
 
-       return function(x, y) return x % xm == 0 and y % ym == 0 end
 
-    end
 
-    return f()
 
- end
 
- local function dot()
 
-    local sp = 1
 
-    local blocks = {}
 
-    local n = 64
 
-    local s = 24
 
-    for i = 1, n do
 
-       local block = torch.Tensor(3, s, s)
 
-       local margin = torch.random(1, 3)
 
-       local size = torch.random(1, 5)
 
-       local mod = gen_mod()
 
-       local swap_color = torch.uniform() > 0.5
 
-       local fg, bg
 
-       if swap_color then
 
- 	 fg = color()
 
- 	 bg = color(true)
 
-       else
 
- 	 fg = color(true)
 
- 	 bg = color()
 
-       end
 
-       local use_cross_and_skip = torch.uniform() > 0.5
 
-       for j = 1, 3 do
 
- 	 block[j]:fill(bg[j])
 
-       end
 
-       for y = margin, s - margin do
 
- 	 local b = 0
 
- 	 if use_cross_and_skip and torch.random(0, 1) == 1 then
 
- 	    b = torch.random(0, 1)
 
- 	 end
 
- 	 for x = margin, s - margin do
 
- 	    local yc = math.floor(y / size)
 
- 	    local xc = math.floor(x / size)
 
- 	    if use_corss_and_skip then
 
- 	       if torch.uniform() > 0.25 and mod(yc + b, xc + b) then
 
- 		  block[1][y][x] = fg[1]
 
- 		  block[2][y][x] = fg[2]
 
- 		  block[3][y][x] = fg[3]
 
- 	       end
 
- 	    else
 
- 	       if mod(yc + b, xc + b) then
 
- 		  block[1][y][x] = fg[1]
 
- 		  block[2][y][x] = fg[2]
 
- 		  block[3][y][x] = fg[3]
 
- 	       end
 
- 	    end
 
- 	 end
 
-       end
 
-       block = image.scale(block, s * 2, s * 2, "simple")
 
-       if (not use_corss_and_skip) and size >= 3 and torch.uniform() > 0.5 then
 
- 	 block = image.rotate(block, math.pi / 4, "bilinear")
 
-       end
 
-       blocks[i] = block
 
-    end
 
-    local img = torch.Tensor(#blocks, 3, s * 2, s * 2)
 
-    for i = 1, #blocks do
 
-       img[i]:copy(blocks[i])
 
-    end
 
-    img = image.toDisplayTensor({input = img, padding = 0, nrow = math.pow(n, 0.5), min = 0, max = 1})
 
-    return img
 
- end
 
- local function gen()
 
-    return dot()
 
- end
 
- local cmd = torch.CmdLine()
 
- cmd:text()
 
- cmd:text("dot image generator")
 
- cmd:text("Options:")
 
- cmd:option("-o", "", 'output directory')
 
- cmd:option("-n", 64, 'number of images')
 
- local opt = cmd:parse(arg)
 
- if opt.o:len() == 0 then
 
-    cmd:help()
 
-    os.exit(1)
 
- end
 
- for i = 1, opt.n do
 
-    local img = gen()
 
-    image.save(path.join(opt.o, i .. ".png"), img)
 
- end
 
 
  |