00001
00002
00003
00004 from __future__ import division
00005
00006 from random import random
00007
00008 from image import *
00009 from random_image import *
00010
00011
00012 def demo_random_image():
00013 dims = (256, 256)
00014 layer_count = 6
00015
00016 channels = []
00017 factors = []
00018
00019 for i in range(layer_count):
00020 print i
00021 period = 2**i
00022
00023 inputSamples = [0, 0.2, 0.4, 0.6, 0.8, 1.0]
00024 outputSamples = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
00025 inputSamples = [0.0, 0.1 + (layer_count - i)/(layer_count-1)*0.3, 0.9 - (layer_count - i)/(layer_count-1)*0.3, 1.0]
00026 outputSamples = [1.0, 1.0, 0.0, 1.0]
00027 distribution = make_distribution_curve(inputSamples, outputSamples)
00028 red = random_grid(distribution, dims, period)
00029 green = random_grid(distribution, dims, period)
00030 blue = random_grid(distribution, dims, period)
00031
00032 channels.append(red)
00033 channels.append(green)
00034 channels.append(blue)
00035
00036 grid = channels_to_rgb_grid((red, green, blue))
00037 grid_to_rgb_image(grid, 'random_%d.png' % i)
00038
00039 factors.append(1/layer_count)
00040
00041 red = add_grey_grids(channels[0::3], factors)
00042 green = add_grey_grids(channels[1::3], factors)
00043 blue = add_grey_grids(channels[2::3], factors)
00044
00045 grid = channels_to_rgb_grid((red, green, blue))
00046 grid_to_rgb_image(grid, 'random.png')
00047
00048
00049 def make_acc(probs):
00050 acc = [0] * len(probs)
00051 tot = sum(probs)
00052 acc[0] = probs[0] / tot
00053
00054 for i in range(1, len(probs)):
00055 acc[i] = acc[i - 1] + probs[i] / tot
00056
00057 return acc
00058
00059 def make_blend_grid(props_list):
00060 tot = sum(props_list)
00061 n = int(sqrt(len(props_list)))
00062 new_props = Grid2D((n, n))
00063 k = 0
00064 for index in new_props.index_iter():
00065 new_props[index] = props_list[k] / tot
00066 k += 1
00067
00068 return new_props
00069
00070 def demo_corr():
00071 dims = (128, 128)
00072
00073 grid = white_noise(dims)
00074
00075 for k in range(8, 512):
00076
00077 probs1 = perms(k)
00078 probs1 = grid_to_list(expand_probs(list_to_grid(probs1)))
00079
00080 acc_probs = make_acc(probs1)
00081
00082 print k, probs1, acc_probs
00083 i = 0
00084
00085 for j in xrange(1, 11):
00086 grid1 = grid
00087
00088 print k, j, 'corr1'
00089 for i in xrange(25):
00090 grid1 = corr(grid1, acc_probs, j / 10)
00091 grid1 = normalize_grey(grid1)
00092 rgb_grid = channels_to_rgb_grid([grid1, grid1, grid1])
00093 grid_to_rgb_image(rgb_grid, 'random_corr_pn_%02d_%02d_%02d.png' % (k, j, i))
00094
00095 def demo_corr3():
00096 dims = (128, 128)
00097
00098 grid = white_noise(dims)
00099
00100 for k in range(28, 29):
00101
00102 probs1 = perms(k)
00103 probs1 = grid_to_list(expand_probs(list_to_grid(probs1)))
00104
00105 acc_probs = make_acc(probs1)
00106
00107 print k, probs1, acc_probs
00108 i = 0
00109
00110 for j in xrange(9, 10):
00111 grid1 = grid
00112
00113 print k, j, 'corr1'
00114 for i in xrange(50):
00115 grid1 = corr(grid1, acc_probs, j / 10)
00116 grid1 = normalize_grey(grid1)
00117 rgb_grid = channels_to_rgb_grid([grid1, grid1, grid1])
00118 grid_to_rgb_image(rgb_grid, 'random_corr_j_%02d_%02d_%02d.png' % (k, j, i))
00119
00120 def demo_corr2():
00121 dims = (32, 32)
00122
00123 grid = white_noise(dims)
00124
00125 for k in range(1, 8):
00126
00127 probs1 = perms(k)
00128 blend_grid = make_blend_grid(probs1)
00129 print k, probs1, make_acc(probs1)
00130 i = 0
00131
00132
00133 grid1 = grid
00134
00135 print k
00136 for i in range(50):
00137
00138 grid1 = corr2(grid1, blend_grid, 1)
00139 grid1 = normalize_grey(grid1)
00140 rgb_grid = channels_to_rgb_grid([grid1, grid1, grid1])
00141 grid_to_rgb_image(rgb_grid, 'random_corr2_%02d_%02d_%02d.png' % (k, 10, i))
00142
00143 def perms(m, n=9):
00144 lst = [0] * n
00145
00146 for i in range(n):
00147 lst[i] = m % 2
00148 m = m // 2
00149
00150 return lst
00151
00152 def list_to_grid(lst):
00153 m = int(sqrt(len(lst)))
00154 grid = Grid2D((m, m), 0)
00155
00156 for k, item in enumerate(lst):
00157 x = k % m
00158 y = k // m
00159
00160 grid[x, y] = item
00161
00162 return grid
00163
00164 def expand_probs(grid):
00165 m = (grid.width - 1) + grid.width
00166 n = (grid.width - 1) // 2
00167 new_grid = Grid2D((m, m), 0)
00168 sum = 0
00169 for i in xrange(0, m - 2*n):
00170 for j in xrange(0, m - 2*n):
00171 for x in xrange(grid.width):
00172 for y in xrange(grid.height):
00173 v = grid[x, y]*grid[i, j]
00174 new_grid[i + x, j + y] += v
00175 sum += v
00176
00177 sum_resp = 1 / sum
00178
00179 for index in new_grid.index_iter():
00180 new_grid[index] *= sum_resp
00181
00182 return new_grid
00183
00184 def grid_to_list(grid):
00185 lst = [0] * (grid.width * grid.height)
00186
00187 for index in grid.index_iter():
00188 x, y = index
00189 lst[x + grid.width * y] = grid[index]
00190 return lst
00191
00192 def demo_corr_window():
00193 k = 68
00194 grid = rgb_image_to_image_grid_channels('bar.png' % k)[0]
00195
00196 energy = corr_window(grid, 1)
00197 print energy
00198
00199 print perms(k)
00200
00201 def demo():
00202 seed(0)
00203 demo_random_image()
00204
00205
00206
00207
00208
00209 demo()