Skip to content

Instantly share code, notes, and snippets.

@barnash
Created May 21, 2014 05:14
Show Gist options
  • Save barnash/536a2759f27d549c1266 to your computer and use it in GitHub Desktop.
Save barnash/536a2759f27d549c1266 to your computer and use it in GitHub Desktop.
Files from the images tirgul
from PIL import Image
from matrix import *
def image2bitmap(path):
''' Given a string 'path' of image file in "real" format (.jpg/.bmp etc.) creates a new file in format .bitmap under the same directory which can then be loaded into class Matrix using Matrix.load() '''
from PIL import Image
image = Image.open(path)
image = image.convert("L")
im = image.load()
w,h = image.size
new_file_name = (path.split(".")[-2]).split("/")[-1] + ".bitmap"
new_file = open(new_file_name, 'w')
print(h,w, file=new_file)
for i in range(h):
for j in range(w):
print(int(im[j,i]), end=" ", file = new_file)
print("", file=new_file)
new_file.close()
def bitmap2image(path):
''' Given a string path of image file in .bitmap format creates a .bmp file under the same directory '''
mat = Matrix.load(path)
n,m = mat.dim()
image = Image.new('L', (m,n))
im = image.load()
for i in range(n):
for j in range(m):
im[j,i] = mat[i,j]
image.save((path.split(".")[-2]).split("/")[-1] + ".bmp")
from matrix import *
from images import *
from methods import *
def show(*images):
res = images[0][:,:]
for im in images[1:]:
res = append(res, im, 'h')
res.display()
def get_eiffel():
return Matrix.load("guess.bitmap")
def get_eiffel_dirty():
im = Matrix.load("guess.bitmap")
for i in range(4):
for j in range(4):
im[100+i, 100+j] = 255
return im
def fix_white(mat, k, i, j, white):
neighborhood = list(mat[i-k:i+k+1,j-k:j+k+1])
non_extreme = [val for val in neighborhood if val <= white]
if non_extreme != []:
return median(non_extreme)
return mat[i,j] # all neighbors extreme
def fix_black(mat, k, i, j, black):
neighborhood = list(mat[i-k:i+k+1,j-k:j+k+1])
non_extreme = [val for val in neighborhood if val >= black]
if non_extreme != []:
return median(non_extreme)
return mat[i,j] #all neighbors extreme
def local_medians_bounded1(A, k=1, black=5, white=250):
''' fix b and w together '''
n,m = A.dim()
res = A[:,:]
for i in range(k,n-k):
for j in range(k,m-k):
#fix white
if A[i,j] > white:
res[i,j] = fix_white(A, k, i, j, white)
#fix black
if A[i,j] < black:
res[i,j] = fix_black(A, k, i, j, black)
return res
def try_this():
im = Matrix.load("photo.bitmap")
im1 = add_SP(im, p=0.7)
im2 = local_medians(im1)
im3 = local_medians_bounded1(im1)
im4 = local_medians_bounded1(im3)
show(im1, im2, im3, im4)
from matrix import *
def gradient(n, m):
im = Matrix(n, m)
for i in range(n):
for j in range(m):
im[i, j] = j * 256 // m
return im
def add(im, k):
n,m = im.dim()
im2 = Matrix(n,m)
for i in range(n):
for j in range(m):
im2[i,j]= (im[i,j] + k) % 256
return im2
def mult(im, k):
return im*k
def negate(im):
n, m = im.dim()
im2 = Matrix(n,m)
for i in range(n):
for j in range(m):
im2[i,j] = 255 - im[i,j]
return im2
def upside_down(im):
n,m = im.dim()
im2 = Matrix(n,m)
for i in range(n):
for j in range(m):
im2[i,j] = im[n-i-1, j]
return im2
def shift(im, v_shift=0, h_shift=0):
n,m = im.dim()
im2 = Matrix(n,m)
for i in range(n):
for j in range(m):
im2[i,j] = im[(i-v_shift) % n, (j - h_shift) % m]
return im2
def append(im1, im2, direction):
''' append im1 and im2. direction='h' (horizontally) or 'v' (vertically) '''
n1,m1 = im1.dim()
n2,m2 = im2.dim()
n = max(n1,n2)
m = max(m1,m2)
if direction == 'h':
im3 = Matrix(n, m1 + m2)
im3[:n1, :m1] = im1
im3[:n2, m1:m1+m2] = im2
if direction=='v':
im3 = Matrix(n1 + n2, m)
im3[:n1, :m1] = im1
im3[n1:n1+n2, :m2] = im2
return im3
def stretch(im, direction, ratio=1):
''' stretch image by ratio (positive integer).
direction='h' (horizontal) or 'v' (vertical) '''
assert isinstance(ratio, int) and ratio > 0
assert direction == 'h' or direction == 'v'
n, m = im.dim()
if direction == 'v':
im2 = Matrix(n * ratio, m)
else:
im2 = Matrix (n, m * ratio)
for i in range(n):
for j in range(m):
for k in range(ratio):
if direction == 'v':
im2[ratio * i + k, j] = im[i, j]
else:
im2[i, ratio * j + k] = im[i, j]
return im2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment