▲ Triangle
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.
The technique
- 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()
Installation and usage
$ go get github.com/esimov/triangle/cmd/triangle
$ go install
Supported commands
$ 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) |
width |
1 |
Wireframe line width |
Setting a lower points value, the resulted image will be more like a cubic painting. You can even add a noise factor, giving a more artistic, despeckle like result for the final image.
Here are some examples you can experiment with:
$ triangle -in samples/clown_4.jpg -out output.png -wireframe=0 -max=3500 -width=2 -blur=2
$ triangle -in samples/clown_4.jpg -out output.png -wireframe=2 -max=5500 -width=1 -blur=10
Below are some of the generated images:
License
This project is under the MIT License. See the LICENSE file for the full license text.