polygen

genetic algorithm for approximating an image with polygons (Golang)

Github星跟蹤圖

Polygen uses a genetic algorithm to approximate an image with a small number of polygons.

You can generate a fairly good approximation with surprisingly few polygons. Here's a sample that
has only 50 polygons (~380K generations):

starry-night
starry-night 50 polygons

This one is 100 polygons:

mona-lisa
mona-lisa 100 polygons

A more challenging image- 500 polygons & 680,850 generations:

revolver
revolver 500 polygons

The algorithm is pretty simple:

  1. Create an initial string of candidate "DNA" consisting of a set of polygons (a color and a set of points)
    via random number generation.

  2. Render the DNA to an image (the "phenotype"). Compute its fitness by comparing to the reference image.

  3. Apply random mutations to the candidate (change color, move polygon points, juggle the z-order) to
    create a population of offspring.

  4. Evaluate the offspring, and if their fitness is better, replace the parent.

  5. Repeat for N generations.

Usage

  1. $ go get github.com/armhold/polygen/...
  2. $ cd $GOPATH/src/github.com/armhold/polygen
  3. polygen -source images/mona_lisa.jpg -poly 50
  4. Let it run until you are happy with the output (in output.png), or until you notice that there is not much change
    between generations.

Polygen includes a built-in web server, so you can watch the image evolve in more or less realtime.
Just point your browser to http://localhost:8080.

logo

Credits

This code is my own, but credit goes to Roger Johansson for the original idea,
which he documented here.

The file "mona_lisa.jpg" contains a low-resolution portion of the painting
Mona Lisa, by Leonardo da Vinci. It is in the Public Domain.

The file "starry.jpg" contains a low-resolution copy of the painting
The Stary Night by Vincent van Gogh. It is in the Public Domain.

The file "Revolver.jpg" contains a low-resolution copy of the cover art for the album Revolver by the artist
The Beatles. The cover art copyright is believed to belong to the label, Parlophone/EMI, or the graphic artist(s),
Klaus Voormann. It is included under Fair Use.

主要指標

概覽
名稱與所有者armhold/polygen
主編程語言Go
編程語言Go (語言數: 2)
平台
許可證Apache License 2.0
所有者活动
創建於2016-03-31 05:11:36
推送於2018-08-27 20:28:47
最后一次提交2018-08-27 20:26:33
發布數1
最新版本名稱v1.0.0 (發布於 )
第一版名稱v1.0.0 (發布於 )
用户参与
星數180
關注者數7
派生數9
提交數104
已啟用問題?
問題數3
打開的問題數2
拉請求數0
打開的拉請求數0
關閉的拉請求數0
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?