%pylab inline
from PIL import Image
from urllib.request import urlopen
from io import BytesIO
import numpy as np
Populating the interactive namespace from numpy and matplotlib
im = Image.open(BytesIO(urlopen('http://habrastorage.org/files/1de/a97/858/1dea97858ac9488ea8211f59517073c8.png').read()))
figure(figsize = (8, 8))
imshow(im);
im2 = im.quantize(4)
figure(figsize = (8, 8))
imshow(im2);
ima2 = np.asarray(im2)
graph1 = ima2 == 1
graph2 = ima2 == 2
figure(figsize = (15, 15))
subplot(121); imshow(graph1)
subplot(122); imshow(graph2);
Xg, Yg = ogrid[:graph1.shape[0], :graph1.shape[1]]
mask1 = (Xg >= 30) & (Xg < 350) & (Yg > 130) & (Yg < 800)
mask2 = (Xg >= 250) & (Xg < 500) & (Yg > 400) & (Yg < 1000)
mask = mask1 & ~mask2
masked = graph1 & mask
figure(figsize = (17, 17))
subplot(141); imshow(mask1)
subplot(142); imshow(mask2)
subplot(143); imshow(mask)
subplot(144); imshow(masked);
xs, ys = numpy.indices(masked.shape)
xi, yi = xs[masked != 0], ys[masked !=0]
cropped = masked[xi.min():xi.max()+1, yi.min():yi.max()+1]
figure(figsize = (8, 8))
imshow(cropped);
xs, ys = numpy.indices(cropped.shape)
xi, yi = xs[cropped != 0], ys[cropped !=0]
d = {}
for x, y in zip(xi, yi):
d.setdefault(y, []).append(cropped.shape[0] - x)
y_values = list(d.keys())
x_min = [v[0] for v in d.values()]
x_max = [v[-1] for v in d.values()]
x_mid = [(a + b) / 2 for a, b in zip(x_min, x_max)]
figure(figsize = (8, 8))
fill_between(y_values, x_min, x_max, alpha=0.2)
plot(y_values, x_mid);
y_values = list(d.keys())
x_min = [v[0] for v in d.values()]
x_max = [v[-1] for v in d.values()]
x_mid = [(a + b) / 2 for a, b in zip(x_min, x_max)]
figure(figsize = (8, 8))
fill_between(y_values, x_min, x_max, alpha=0.2)
plot(y_values, x_mid);
x_dither = [el[i % 2] for i, el in enumerate(zip(x_min, x_max))]
figure(figsize = (8, 8))
plot(y_values, x_dither);