Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from PIL import Image as im
- from scipy.spatial import distance
- def dist(a,b):
- return distance.euclidean(a,b)
- def index(a,l):
- ind=0
- for i in range(l):
- if a[i]<a[ind]:
- ind=i
- return ind
- ncenteroids=int(input("Number of colors:\t"))
- iterations=int(input("Number of iterations: \t"))
- image=im.open('image.jpg')
- # pixels=np.array(image.getdata()).reshape(image.size[0],image.size[1],3)
- pi=np.array(image).reshape(-1,3)
- pixels=np.zeros((137500,4),dtype=int)
- for i in range(137500):
- pixels[i][0]=pi[i][0]
- pixels[i][1]=pi[i][1]
- pixels[i][2]=pi[i][2]
- centroids=[]
- for i in range(ncenteroids):
- centroids.append(pi[np.random.randint(0,137500)])
- temp=[0 for i in range(ncenteroids)]
- for p in range(iterations):
- print(centroids)
- for i in range(137500):
- for j in range(ncenteroids):
- temp[j]=dist(centroids[j],pi[i])
- pixels[i][3]=index(temp,ncenteroids)
- t=[[0,0,0] for i in range(ncenteroids)]
- count=[0 for i in range(ncenteroids)]
- for pixel in pixels:
- t[pixel[3]][0]+=pixel[0]
- t[pixel[3]][1]+=pixel[1]
- t[pixel[3]][2]+=pixel[2]
- count[pixel[3]]+=1
- for i in range(ncenteroids):
- centroids[i][0]=t[i][0]//count[i]
- centroids[i][1]=t[i][1]//count[i]
- centroids[i][2]=t[i][2]//count[i]
- for i in range(137500):
- pi[i][0]=centroids[pixels[i][3]][0]
- pi[i][1]=centroids[pixels[i][3]][1]
- pi[i][2]=centroids[pixels[i][3]][2]
- nova=im.fromarray(pi.reshape(220,625,3))
- nova.save("nova2","jpeg")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement