Python|用Python生成NFT超像素风格头像( 四 )



   while max_iters > 0:
       max_iters -= 1

       for i in range(0len(clusters)):
           cluster = clusters[i

           # cacluate distance for each pixels in 2xS rectangle
           for x in range(max(cluster.center.x-S0) min(cluster.center.x+Sheight)):
               for y in range(max(cluster.center.y-S0) min(cluster.center.y+Swidth)):
                   pi = Pixel(lab[x
[y
[0
lab[x
[y
[1
lab[x
[y
[2
x y)
                   dis = cluster.distance(pi S M)
                   if dis < d[x
[y
:
                       d[x
[y
= dis
                       l[x
[y
= i

       # assign pixels to best cluster
       for cluster in clusters:
           cluster.cleanup_pixels()
           
       for x in range(0height):
           for y in range(0width):
               i = l[x
[y

               pi = Pixel(lab[x
[y
[0
lab[x
[y
[1
lab[x
[y
[2
x y)
               clusters[i
.assign(pi)

       # update clusters
       epsilon_t = 0
       for cluster in clusters:
           epsilon_t += cluster.update()
       espilon /= len(clusters)

       print (\"iteration step done %s remains with epsilon %s\"%(max_iters epsilon_t))
       draw(lab height width clusters l max_iters)

保存图片


def draw(lab height width clusters l ix):
   for x in range(0height):
       for y in range(0width):
           i = l[x
[y

           lab[x
[y
= clusters[i
.lab()
   for i in range(0 len(clusters)):
       x y = clusters[i
.center.x clusters[i
.center.y
       lab[x
[y
= 0
   rgb = color.lab2rgb(lab)
   io.imsave(\"img/%i.jpg\"%ix rgb)

requirementspillow
skimage
numpy
matploblib
附录不同于常用的 RGB 色彩空间 , 采用 CIELAB(国际照明委员会)色彩空间表示 , LAB的特点在于比RGB更为平滑 , 对肉眼视觉的感官衡量更为贴近 。 弥补了 RGB 与 CMYK 两种彩色模式的不足 , 是Photoshop用来从一种色彩模式向另一种色彩模式转换时使用的一种内部色彩模式 。 LAB模式也是由三个通道组成 , 分别是l , a , b , 其中I代表亮度 , 数值范围为 [0 100
, a表示从绿色到红色的分量 , 数值范围为[-128 127
, b表示蓝色到黄色的分量 , 数值范围为 [-128 127