Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

colidr - Coherent Line Drawing

build license release

Implementation in Go of the Coherent Line Drawing algorithm developed by Kang et al, NPAR 2007.



  • Go 1.10 or higher, but it should work even with a lower version
  • OpenCV 3 (tested with 3.4.2)
  • gocv (bundled into the project, since it was extended with missing OpenCV functions needed for the implementation)
  • potrace - for transforming the bitmap into smooth, scalable image (however this is optional)


$ go get -u
$ go install

Another option is cloning the repository and running the make file.

$ git clone
$ cd colidr
$ make

This will generate the binary file.


$ colidr -h

┌─┐┌─┐┬  ┬┌┬┐┬─┐
│  │ ││  │ ││├┬┘

Coherent Line Drawing CLI
    Version: 1.0.1

    	Anti aliasing
  -bl int
    	Blur size (default 3)
  -di int
    	Number of FDoG iteration
  -ei int
    	Number of Etf iteration (default 1)
  -in string
    	Source image
  -k int
    	Etf kernel (default 3)
  -out string
    	Destination image
    	Use potrace to smooth edges (default true)
  -rho float
    	Rho (default 0.98)
  -sc float
    	SigmaC (default 1)
  -sm float
    	SigmaM (default 3)
  -sr float
    	SigmaR (default 2.6)
  -tau float
    	Tau (default 0.98)
    	Visualize Etf
    	Visualize end result

Feel free to play with the values in order to modify the visual output of the generated (non-photorealistically rendered) image. To obtain higher fidelity results you need to increase the kernel value and also the ETF iteration number. Different combinations produces completely different output. The -di, -ei, -k flags are mostly used for fine tuning, on the other hand -rho and -tau flags could change dramatically the rendered output.

You can also visualize the edge tangent flow if you enable the -ve flag. Below is the process illustrated:

Original image Edge tangent flow Coherent line drawing (final output)
original flowfield output

Using the -pt flag you can trace the generated bitmap into a smooth scalabe image. You need to have potrace installed on your machine for this scope.

Below is an example whith and without the potrace flag activated.

Normal output Potrace activated
normal smooth

The above image was ganareted with the following command:

colidr -in ~/Desktop/patio.jpg -out ~/Desktop/patio_scene.png -k=1 -sr=2.5 -sm=3.2 -tau=0.9975 -di=1 -aa=1 -ve=1 -vr=0 -pt=1 -ei=1

Sample images

Rasterized bitmap Vectorized image
great_wave_of_kanagawa great_wave_of_kanagawa
starry_night starry_night
people people
tiger tiger


  • GUI support



Copyright © 2019 Endre Simo

This project is under the MIT License. See the LICENSE file for the full license text.