/Words_Filling

This is a test version of filling some words in certain areas.

Primary LanguagePython

DOCUMENTATION

Introduction

This script manage to fill the words in a certain area of the picture automatically.

Dependency

  • Python

  • PIL - Python Image Library

Usage

Put the words data (jpeg or png format) in '../image/data/', the script will load data from there automatically.

In the meanwhile, put the 0-1 digit picture (This means every pixel has only two value - 0 & 1) in '../image/xxxxx.jpg'. (Words can only be filled in pixel valued "1".)

Type in the terminal:

$ python main.py

This will automatically generate "input_data.csv" and the preview picture named "test.png".

Then you can type in the terminal

$ python Generate_new_pic.py

It generate the new picture based on "input_data.csv".

The Demo Results

HERE IS A PICTURE FILLED MANUALLY:

The result generated using computer is good enough to replace human's work.

References:


Belows are the CHINESE VERSION of the documentaion

中文版文档

功能

将特定的单词图片填入图片的指定区域。

根据图像提取特征,判断可以填入单词的位置,同时画布上每个点的值都可以取到,我们可以通过比较此颜色值与背景色来得知此处是否为空白区域,以便在填入单词的时候判断是否有空位可以填入新单词。

使用方法

而'../image/data/*'里放入需要填入的图片

而'../image/xxxxx.jpg'为放入的特征图(二值图),注意二值图其实有两种情况,0表示黑色和1表示黑色,在判断的时候,这两种情况得到的结果刚好相反,即图像分别填在内部和外部。

在终端里键入

$ python main.py

会生成input_data.csv,同时也会生成预览图test.png。之后再输入

$ python Generate_new_pic.py

就会根据这个input_data.csv里的数据生成需要的结果了。

本次改进

  • 改进第二次填图的算法使用螺旋线来进行遍历(螺旋线)
  • 输出均改为Data-和二值图像(参考图)
  • 根据生成的Data来生成新的图片的数据

Dependency

Python,同时需要PIL(Python Image Library)的库。

Algorithm的思路

遍历使用的是从左上角到右下角的遍历,第二次改用螺旋线来遍历。

还可以完善的地方

  • main.py和mylib里面的一些方法可以重构,两种遍历的方法可以继承自同一个对象。

  • 在图片旋转的角度的设置的丰富性和可调节性上还可以优化。

  • 第二次遍历过程中的性能提升(一个思路):

“位图”加了引号,用于区别图形技术中的位图。这里的位图也可以叫位示图,是一种索引,常见于文件系统等领域。它的基本**就是用一个位代表一个对应区块的使用状态。举例来说,可以用一个字节来代表8个区块的使用状态,其中第0-7位分别代表第0-7个区块,每个位为1时表示对应区块已使用,为0则表示未使用。

根据这个**,我们可以把整幅图划分为类似3×3这样的小块块,然后建一个位示图表示这些小块的使用状态。在每次输出一个词时,可以直接根据位图寻找空白区域,输出该词后即时更新所用区块的使用状态。我们再算笔账,前面所说的遍历改成每步3个像素,可以提高3倍速度,这次3×3一个区块,速度有多少提升呢?答案是9倍!

最后结果的范例图片

对比手工排版的原图:

参考资料: