Triangle is a tool to create image arts using the delaunay triangulation technique. It takes an image as input and it converts to abstract image composed of tiles of triangles.
- First the image is blured out to smothen the sharp pixel edges. The more blured an image is the more diffused the generated output will be.
- Second the resulted image is converted to grayscale mode.
- Then a sobel filter operator is applied on the grayscaled image to obtain the image edges. An optional threshold value is applied to filter out the representative pixels of the resulting image.
- Lastly we apply the delaunay algorithm on the pixels obtained from the previous step.
blur = tri.Stackblur(img, uint32(width), uint32(height), uint32(*blurRadius))
gray = tri.Grayscale(blur)
sobel = tri.SobelFilter(gray, float64(*sobelThreshold))
points = tri.GetEdgePoints(sobel, *pointsThreshold, *maxPoints)
triangles = delaunay.Init(width, height).Insert(points).GetTriangles()
$ go get github.com/esimov/triangle/cmd/triangle
$ go install
The library can be installed via Homebrew too or by downloading the binary file from the releases folder.
$ brew tap esimov/triangle
$ brew install triangle
$ triangle --help
The following flags are supported:
Flag | Default | Description |
---|---|---|
in |
n/a | Input file |
out |
n/a | Output file |
blur |
4 | Blur radius |
max |
2500 | Maximum number of points |
noise |
0 | Noise factor |
points |
20 | Points threshold |
sobel |
10 | Sobel filter threshold |
solid |
false | Solid line color |
wireframe |
0 | Wireframe mode (without,with,both) |
stroke |
1 | Stroke width |
gray |
false | Convert to grayscale |
svg |
false | Save as SVG |
web |
false | Output SVG in browser |
By default the output is saved to an image file, but setting the -svg
flag as true you can export the resulted vertices even to an SVG file, being the perfect candidate for large poster images. Using a small image as input source, exporting to an *.svg
file will generate a very low processing footprint whitout quality loss.
$ triangle -in samples/input.jpg -out output.png -svg=1
Using the -svg
together with -web
flag you can access the svg result on the web browser.
$ triangle -in samples/input.jpg -out output.png -svg=1 -web=1
You can transform even multiple images from a specific folder with a single command by declaring as -in
flag the source folder and as -out
flag the destination folder.
$ triangle -in ./samples/ -out ./ouput -wireframe=0 -max=3500 -stroke=2 -blur=2 -noise=4
Setting a lower points threshold, the resulted image will be more like a cubic painting. You can even add a noise factor, generating a more artistic, grainy image.
Here are some examples you can experiment with:
$ triangle -in samples/input.jpg -out output.png -wireframe=0 -max=3500 -stroke=2 -blur=2
$ triangle -in samples/input.jpg -out output.png -wireframe=2 -max=5500 -stroke=1 -blur=10
Copyright © 2018 Endre Simo
This project is under the MIT License. See the LICENSE file for the full license text.