Created
May 21, 2014 05:14
-
-
Save barnash/536a2759f27d549c1266 to your computer and use it in GitHub Desktop.
Files from the images tirgul
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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