Advertisement
Guest User

LOS KOD SAMO

a guest
Dec 15th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.48 KB | None | 0 0
  1. import numpy as np
  2. from PIL import Image as im
  3. from scipy.spatial import distance
  4.  
  5. def dist(a,b):
  6.     return distance.euclidean(a,b)
  7.  
  8. def index(a,l):
  9.     ind=0
  10.  
  11.     for i in range(l):
  12.         if a[i]<a[ind]:
  13.             ind=i
  14.     return ind
  15.  
  16. ncenteroids=int(input("Number of colors:\t"))
  17. iterations=int(input("Number of iterations: \t"))
  18.  
  19. image=im.open('image.jpg')
  20.  
  21.  
  22.  
  23. # pixels=np.array(image.getdata()).reshape(image.size[0],image.size[1],3)
  24. pi=np.array(image).reshape(-1,3)
  25. pixels=np.zeros((137500,4),dtype=int)
  26. for i in range(137500):
  27.     pixels[i][0]=pi[i][0]
  28.     pixels[i][1]=pi[i][1]
  29.     pixels[i][2]=pi[i][2]
  30.  
  31.  
  32. centroids=[]
  33.  
  34.  
  35.  
  36. for i in range(ncenteroids):
  37.     centroids.append(pi[np.random.randint(0,137500)])
  38.  
  39.  
  40. temp=[0 for i in range(ncenteroids)]
  41.  
  42. for p in range(iterations):
  43.     print(centroids)
  44.     for i in range(137500):
  45.         for j in range(ncenteroids):
  46.             temp[j]=dist(centroids[j],pi[i])
  47.         pixels[i][3]=index(temp,ncenteroids)
  48.    
  49.     t=[[0,0,0] for i in range(ncenteroids)]
  50.     count=[0 for i in range(ncenteroids)]
  51.  
  52.     for pixel in pixels:
  53.         t[pixel[3]][0]+=pixel[0]
  54.         t[pixel[3]][1]+=pixel[1]
  55.         t[pixel[3]][2]+=pixel[2]
  56.         count[pixel[3]]+=1
  57.  
  58.     for i in range(ncenteroids):
  59.         centroids[i][0]=t[i][0]//count[i]
  60.         centroids[i][1]=t[i][1]//count[i]
  61.         centroids[i][2]=t[i][2]//count[i]
  62.  
  63. for i in range(137500):
  64.     pi[i][0]=centroids[pixels[i][3]][0]
  65.     pi[i][1]=centroids[pixels[i][3]][1]
  66.     pi[i][2]=centroids[pixels[i][3]][2]
  67.  
  68. nova=im.fromarray(pi.reshape(220,625,3))
  69. nova.save("nova2","jpeg")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement