sorting imagebank before splitting into clusters
This commit is contained in:
parent
4064c76fb0
commit
940efa5f52
50
mosiac.py
50
mosiac.py
|
@ -6,18 +6,18 @@ Does mosiacs.
|
|||
import os
|
||||
import time
|
||||
import random
|
||||
import colorsys
|
||||
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
|
||||
class Mosiac():
|
||||
def __init__(self):
|
||||
self.images = []
|
||||
self.means = []
|
||||
self.imageBank = {}
|
||||
self.numClusters = 8
|
||||
self.clusters = []
|
||||
self.clusterMeans = []
|
||||
|
||||
self.bigImageSize = None
|
||||
self.bigImage = None
|
||||
self.smallImage = None
|
||||
|
@ -50,12 +50,15 @@ class Mosiac():
|
|||
image = image.convert(image.palette.mode)
|
||||
if image.mode == "RGBA":
|
||||
image = alpha_composite_with_color(image).convert("RGB")
|
||||
if image.mode == "L":
|
||||
image = image.convert("RGB")
|
||||
# image = image.convert("RGBA")
|
||||
|
||||
image = image.resize(self.tileSize, Image.ANTIALIAS)
|
||||
mean = tuple(np.mean(image, axis=(0,1)))
|
||||
# img = Image.new("RGBA", image.size)
|
||||
# img.putdata(list(map(lambda pixel: (255,255,255,0) if pixel == (255,255,255,255) else pixel, image.getdata())))
|
||||
# img.putdata(list(map(lambda pixel: (255,255,255,0) if pixel == \
|
||||
# (255,255,255,255) else pixel, image.getdata())))
|
||||
|
||||
self.imageBank[mean] = image
|
||||
print(f"initImageBank took: {time.time()-then} seconds.")
|
||||
|
@ -66,15 +69,12 @@ class Mosiac():
|
|||
Create a bank of test images.
|
||||
"""
|
||||
then = time.time()
|
||||
self.images = []
|
||||
self.means = []
|
||||
for i in range(0, 257, 16):
|
||||
for j in range(0, 257, 16):
|
||||
for k in range(0, 257, 16):
|
||||
image = Image.new("RGB", self.tileSize, (i,j,k, 255))
|
||||
self.images.append(image)
|
||||
mean = tuple(np.mean(image, axis=(0,1)))
|
||||
self.means.append(mean)
|
||||
self.imageBank[mean] = image
|
||||
print(f"debugImageBank took: {time.time()-then} seconds.")
|
||||
|
||||
|
||||
|
@ -87,8 +87,15 @@ class Mosiac():
|
|||
num = len(sort) // self.numClusters
|
||||
|
||||
for n in range(self.numClusters):
|
||||
cluster = dict(0: pixel for pixel in sort[n*num:n*num+num])
|
||||
cluster
|
||||
cluster = {pixel: self.imageBank[pixel] for pixel in \
|
||||
sort[n*num:n*num+num]}
|
||||
self.clusters.append(cluster)
|
||||
self.clusters[-1].update({pixel: self.imageBank[pixel] for pixel in \
|
||||
sort[-(len(sort) % num):]})
|
||||
|
||||
for cluster in self.clusters:
|
||||
mean = tuple(np.mean(list(cluster.keys()), axis=(0)))
|
||||
self.clusterMeans.append(mean)
|
||||
"""
|
||||
indexs = list(range(len(self.images)))
|
||||
step = len(self.images) // self.numClusters
|
||||
|
@ -114,12 +121,19 @@ class Mosiac():
|
|||
clusterMean = self.clusterMeans[dists.index(min(dists))]
|
||||
cluster = self.clusters[self.clusterMeans.index(clusterMean)]
|
||||
|
||||
nodes = np.array(list(cluster.keys()))
|
||||
dist = np.sum((nodes - np.array(pixel))**2, axis=1)
|
||||
# return np.argmin(dist) # closet value
|
||||
dist.argsort()[:10]
|
||||
return random.choice(list(dist))
|
||||
"""
|
||||
dists = []
|
||||
for n in cluster:
|
||||
dist = np.linalg.norm(np.array(pixel)-np.array(self.means[n]))
|
||||
for mean in cluster.keys():
|
||||
dist = np.linalg.norm(np.array(pixel)-np.array(mean))
|
||||
dists.append(dist)
|
||||
choice = random.choice(sorted(dists)[:10])
|
||||
return self.images[cluster[dists.index(choice)]]
|
||||
"""
|
||||
# choice = random.choice(sorted(dists)[:10])
|
||||
# return cluster[dists.index(choice)]
|
||||
|
||||
|
||||
def buildMatrix(self):
|
||||
|
@ -158,7 +172,7 @@ class Mosiac():
|
|||
|
||||
|
||||
def step (r,g,b, repetitions=1):
|
||||
lum = math.sqrt( .241 * r + .691 * g + .068 * b )
|
||||
lum = ( .241 * r + .691 * g + .068 * b )**0.5
|
||||
|
||||
h, s, v = colorsys.rgb_to_hsv(r,g,b)
|
||||
|
||||
|
@ -228,8 +242,8 @@ if __name__ == "__main__":
|
|||
|
||||
mosiac = Mosiac()
|
||||
mosiac.openBigImage(os.path.join(args.root, "big.jpg"))
|
||||
# mosiac.initImageBank(**vars(args))
|
||||
mosiac.debugImageBank()
|
||||
mosiac.initImageBank(**vars(args))
|
||||
# mosiac.debugImageBank()
|
||||
mosiac.initClusters()
|
||||
# mosiac.buildMatrix()
|
||||
# mosiac.buildMosiac(args.root)
|
||||
mosiac.buildMatrix()
|
||||
mosiac.buildMosiac(args.root)
|
||||
|
|
Loading…
Reference in New Issue
Block a user