00001
00002
00003
00004 from __future__ import division
00005
00006 from random import seed
00007
00008 from image import *
00009 from perlin_noise import *
00010 from quadtree_image import *
00011
00012 pallet = [
00013 (1.0, 0, 0, 1),
00014 (1.0, 0, 0, 1),
00015 (.6, 0, 0, 1),
00016 (.6, .3, .3, 1),
00017 (0, .3, .3, 1),
00018 (0, .5, .5, 1),
00019 (0, .5, .5, 1)
00020 ]
00021
00022 CHANNEL_DETAIL = 0.1
00023 IMAGE_DETAIL = 0.05
00024
00025 def round_grid(grid):
00026 new_grid = Grid2D(grid.dims)
00027
00028 for index in grid.index_iter():
00029 try:
00030 new_grid[index] = int(round(grid[index]))
00031 except:
00032 print grid[index]
00033
00034 return new_grid
00035
00036 def int_rand_grid(grid):
00037 new_grid = Grid2D(grid.dims)
00038
00039 for index in grid.index_iter():
00040 x = grid[index]
00041 n1 = int(x)
00042 d = x - n1
00043 n2 = n1 + 1
00044
00045 if random() < d:
00046 n = n2
00047 else:
00048 n = n1
00049
00050 new_grid[index] = n
00051
00052 return new_grid
00053
00054
00055 def demo_quadtree():
00056 grid = Grid2D((4, 4), 0)
00057
00058 grid[0, 0] = .9
00059 grid[0, 1] = 1
00060 grid[1, 0] = .8
00061 grid[1, 1] = 1
00062
00063 quadtree = Quadtree(grid, Measure(), .2)
00064
00065 for cell in quadtree:
00066 print cell
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 def demo_discrete_rnd_interpolation():
00081 qnames = ['normal', 'interpolated']
00082 inames = ['rounded', 'randomised']
00083
00084 grid = int_perlin_noise(128, 128, 5, len(pallet))[0]
00085 rgb_grid = index_grid_to_rgb_grid(grid, pallet)
00086 grid_to_rgb_image(rgb_grid, 'discrete_grid.png')
00087
00088 tree = Quadtree(grid, ChannelMeasure(), 0.5)
00089
00090 tree2 = Quadtree(rgb_grid, ImageMeasure(), 0.1)
00091 print tree.count(False), tree2.count(False)
00092
00093 qgrids = [
00094 render_outline(tree2, 1, False, False),
00095 render_outline(tree2, 1, False, True)]
00096
00097
00098
00099 for qgrid, qname in zip(qgrids, qnames):
00100 grid_to_rgb_image(qgrid, 'continuous_quadtree_%s.png' % qname)
00101
00102 qgrids = [
00103 render_outline(tree, 1, False, False),
00104 render_outline(tree, 1, False, True)]
00105
00106 for qgrid, qname in zip(qgrids, qnames):
00107 iqgrids = [
00108 round_grid(qgrid),
00109 int_rand_grid(qgrid)]
00110
00111 for iqgrid, iname in zip(iqgrids, inames):
00112 rgb_qgrid = index_grid_to_rgb_grid(iqgrid, pallet)
00113 grid_to_rgb_image(rgb_qgrid, 'discrete_quadtree_%s_%s.png' % (qname, iname))
00114
00115
00116
00117
00118
00119 def demo_quadtree_image():
00120 base_name = 'bar'
00121 grid = rgb_image_to_grid(base_name + '.png')
00122 tree = Quadtree(grid, ImageMeasure(), IMAGE_DETAIL)
00123
00124 print tree.count(False), tree.count(True)
00125
00126 new_grid = render_outline(tree, 1, False)
00127 grid_to_rgb_image(new_grid, base_name + '_quadtree_' + '.png')
00128 channels = rgb_image_to_image_grid_channels(base_name + '.png')
00129 grids = []
00130
00131 cnames = ['red', 'green', 'blue']
00132 colors = [
00133 (1, 0, 0, 1),
00134 (0, 1, 0, 1),
00135 (0, 0, 1, 1)]
00136
00137 for channel, cname, color in zip(channels, cnames, colors):
00138 tree = Quadtree(channel, ChannelMeasure(), CHANNEL_DETAIL)
00139
00140 print tree.count(False), tree.count(True)
00141
00142 new_grid = render_outline(tree, 1.5, False, False)
00143 grids.append(new_grid)
00144
00145 rgb_grid = greyscale_grid_to_rgb_grid(new_grid, color)
00146
00147 grid_to_rgb_image(rgb_grid, base_name + '_channel_' + cname +'.png')
00148
00149 new_grid = channels_to_rgb_grid(grids)
00150
00151 grid_to_rgb_image(new_grid, base_name + '_channel_all.png')
00152
00153
00154 def demo_quadtree_interpolate():
00155 base_name = 'bar'
00156 grid = rgb_image_to_grid(base_name + '.png')
00157 tree = Quadtree(grid, ImageMeasure(), IMAGE_DETAIL)
00158
00159 print tree.count(False), tree.count(True)
00160
00161 new_grid = render_outline(tree, 1, False, True)
00162 grid_to_rgb_image(new_grid, base_name + '_quadtree_interpolate_' + '.png')
00163
00164 channels = rgb_image_to_image_grid_channels(base_name + '.png')
00165 grids = []
00166
00167 cnames = ['red', 'green', 'blue']
00168 colors = [
00169 (1, 0, 0, 1),
00170 (0, 1, 0, 1),
00171 (0, 0, 1, 1)]
00172
00173 for channel, cname, color in zip(channels, cnames, colors):
00174 tree = Quadtree(channel, ChannelMeasure(), CHANNEL_DETAIL)
00175
00176 print tree.count(False), tree.count(True)
00177
00178 new_grid = render_outline(tree, 1, False, True)
00179 grids.append(new_grid)
00180
00181 rgb_grid = greyscale_grid_to_rgb_grid(new_grid, color)
00182
00183 grid_to_rgb_image(rgb_grid, base_name + '_channel_interpolate_' + cname +'.png')
00184
00185 new_grid = channels_to_rgb_grid(grids)
00186 grid_to_rgb_image(new_grid, base_name + '_channel_interpolate_all.png')
00187
00188 def demo():
00189 seed(0)
00190 demo_quadtree()
00191
00192 demo_quadtree_image()
00193
00194
00195 demo()
00196