0


图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)

目录

0 前言

Tiler

是一种使用各种其他较小图像平铺创建新图像的工具,它与其他马赛克工具不同,因为它可以适应多种形状、大小、方向的贴图,称为

buil in build

Tiler

的英文意思是瓷砖,可以把它想象成用一个个自定义的瓷砖铺满图像的过程。通过使用

Tiler

最终可以达到像素风或文字云,适合用来制作自己的LOGO或头像

示意图如下所示,正好在圣诞节前后,我调了一个圣诞风格的LOGO

在这里插入图片描述

这是用我的世界像素格做的蛋糕

在这里插入图片描述
这是商业图标制作

在这里插入图片描述

1 安装与贴图

Tiler

的安装非常简单

git clone https://github.com/nuno-faria/tiler.git
cd tiler
pip install-r requirements.txt

内置以下的贴图
贴图文件夹含义样例at@在这里插入图片描述circles圆形在这里插入图片描述clips回形针在这里插入图片描述hearts心形在这里插入图片描述lego乐高在这里插入图片描述lines线条在这里插入图片描述minecraft我的世界在这里插入图片描述plus加号在这里插入图片描述times乘号在这里插入图片描述waves波浪线在这里插入图片描述

2 算法原理

2.1 计算像素频率

因为最终选择的贴图颜色要和原图相近,否则会很违和,所以在算法开始前要计算图像的相对像素频率

defmode_color(img, ignore_alpha=False):
    counter = defaultdict(int)
    total =0for y in img:for x in y:iflen(x)<4or ignore_alpha or x[3]!=0:
                counter[tuple(x[:3])]+=1else:
                counter[(-1,-1,-1)]+=1
            total +=1if total >0:
        mode_color =max(counter, key=counter.get)if mode_color ==(-1,-1,-1):returnNone,Noneelse:return mode_color, counter[mode_color]/ total
    else:returnNone,None

2.2 计算像素相对距离

常用的距离度量方法是闵可夫斯基距离

      d
     
     
      i
     
     
      s
     
     
      t
     
    
    
     
      (
     
     
      
       x
      
      
       i
      
     
     
      ,
     
     
      
       x
      
      
       j
      
     
     
      )
     
    
    
     =
    
    
     
      
       ∥
      
      
       
        x
       
       
        i
       
      
      
       −
      
      
       
        x
       
       
        j
       
      
      
       ∥
      
     
     
      p
     
    
    
     =
    
    
     
      
       (
      
      
       
        ∑
       
       
        u
       
       
      
      
       
        
         ∣
        
        
         
          x
         
         
          
           i
          
          
           u
          
         
        
        
         −
        
        
         
          x
         
         
          
           j
          
          
           u
          
         
        
        
         ∣
        
       
       
        p
       
      
      
       )
      
     
     
      
       1
      
      
       /
      
      
       p
      
     
    
    
     ,
    
    
     p
    
    
     ⩾
    
    
     1
    
   
   
    \mathrm{dist}\left( \boldsymbol{x}_i,\boldsymbol{x}_j \right) =\left\| \boldsymbol{x}_i-\boldsymbol{x}_j \right\| _p=\left( \sum\nolimits_u^{}{|x_{iu}-x_{ju}|}^p \right) ^{{{1}/{p}}}, p\geqslant 1
   
  
 dist(xi​,xj​)=∥xi​−xj​∥p​=(∑u​∣xiu​−xju​∣p)1/p,p⩾1

特别地,当

    p
   
   
    =
   
   
    1
   
  
  
   p=1
  
 
p=1时为曼哈顿距离;当

 
  
   
    p
   
   
    =
   
   
    2
   
  
  
   p=2
  
 
p=2时为欧氏距离;当

 
  
   
    p
   
   
    =
   
   
    ∞
   
  
  
   p=\infin
  
 
p=∞时为切比雪夫距离。这里的距离度量就采用了欧式距离,表征了像素差
defcolor_distance(c1, c2):
    c1_int =[int(x)for x in c1]
    c2_int =[int(x)for x in c2]return math.sqrt((c1_int[0]- c2_int[0])**2+(c1_int[1]- c2_int[1])**2+(c1_int[2]- c2_int[2])**2)

2.3 计算合适贴图

将像素频率和相对距离匹配起来,可以得到在这个位置上最合适的贴图

defmost_similar_tile(box_mode_freq, tiles):ifnot box_mode_freq[0]:return(0, np.zeros(shape=tiles[0]['tile'].shape))else:
        min_distance =None
        min_tile_img =Nonefor t in tiles:
            dist =(1+ color_distance(box_mode_freq[0], t['mode']))/ box_mode_freq[1]if min_distance isNoneor dist < min_distance:
                min_distance = dist
                min_tile_img = t['tile']return(min_distance, min_tile_img)

3 配置功能

Tiler

提供了以下功能,在

conf.py

文件中:

  • DEPTH:颜色深度颜色深度也称为位分辨率(Bit Resolution),指在位图图像或视频视频缓冲区的一个像素中,每个颜色分量(Red、Green、Blue、Alpha通道(的比特数。所谓“位”指的是二进制位或是比特,位分辨率决定可以标记为多少种色彩等级的可能性,位分辨率越大可表示的色彩越丰富
  • ROTATIONS:旋转列表因为Tiler支持各种位姿的贴图,所以在这里定义可能的旋转角度,从这里可以看出Tiler比一般的马赛克风格工具自由度更大
  • COLOR_DEPTH:同DEPTH
  • RESIZING_SCALES:贴图的缩放列表,支持不同大小的贴图
  • PIXEL_SHIFT:为创建每个框而移动的像素数在这里插入图片描述
  • OVERLAP_TILES :是否支持重叠
  • RENDER :是否建立渲染
  • POOL_SIZE :处理图像的进程数
  • OUT :输出路径
  • IMAGE_TO_TILE :输入路径
  • TILES_FOLDER:小图标路径

4 使用:以圣诞老人为例

我选择了这组参数

DEPTH =4
ROTATIONS =[0]
COLOR_DEPTH =32
RESIZING_SCALES =[0.1]
PIXEL_SHIFT =(20,1)
OVERLAP_TILES =False
RENDER =False
POOL_SIZE =8
OUT ='out.png'
IMAGE_TO_TILE ="./images/santa-claus.png"
TILES_FOLDER ="./tiles/lines/gen_line_h"

接着终端运行

python tiler.py

即可生成如下的效果

在这里插入图片描述

更多玩法交给大家探索!

推荐内容

  • 本手、妙手、俗手?我用AI写2022高考全国作文题,会被看出来?
  • AI绘画突然爆火?快速体验二次元画师NovelAI(diffusion)
  • AI写代码、修Bug,甚至还想统治人类?快速体验ChatGPT
  • 吴恩达对话刘慈欣:让科幻更有勇气,让人工智能更有想象力

🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《机器人原理与技术》
  • 《机器学习强基计划》
  • 《计算机视觉教程》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇


本文转载自: https://blog.csdn.net/FRIGIDWINTER/article/details/128434890
版权归原作者 Mr.Winter` 所有, 如有侵权,请联系我们删除。

“图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)”的评论:

还没有评论