I want to have the ink on a photo clump together, leading to a black and white image. This is a sort of flow, so my first thought isr to take a look at the advection-diffusion equation. Let’s say that the ink distribution across an image is , the diffusion factor is , and the […]

# Category: halftoning

## Line Integral Convolution

Line integral convolution, or LIC, is a nice way to get a sense of the directions of a flow field. By averaging a noisy image along sections of streamlines, you get some nice streaks. Look at this example, applied to the flow around a spinning cylinder: There are a couple main parameters to tweak: the […]

## Evenly Spaced Streamlines

There’s a whole body of literature out there for illustrating vector fields. One topic is ‘evenly spaced streamlines’: lines that follow a direction field, and don’t get too close to each other. How do we do this? From a starting point, use the midpoint method to figure out the position of the next point. If […]

The easiest way to make a reaction-diffusion pattern involves two blurs and a comparison. It doesn’t give the full fancy dynamics of other approaches, but it works well for halftoning. This simple method avoids differential equations, and works with just image filtering. At each step, the activation chemical spreads with radius , and the inhibition […]

Stippling is pretty neat. Draw a bunch of points and get an image? I like it. This post works up from basic Voronoi diagrams to anisotropic stippling with multiple dot sizes. I’ll stick to 2D for all this, since I like drawing pictures. Voronoi Diagrams A Voronoi diagram divides up the plane into regions that […]

If you’re drawing these lines on a computer, there is no need to sort the lines cleverly. However, if you plan to use a machine to draw them, you want to minimize the total time that the machine is moving. If you don’t optimize the line-drawing order, you could spent a lot of extra time […]

## Not Classic Dithering on a Grid

I wanted to try some different grid-based dithering methods, so here we go: quadtree subdivisions, dither matrices, dithering along space-filling curves, and a hill-climbing optimization. Quadtree Dithering This uses recursive subdivision to distribute blackness in the image. The general idea is to make sure that each subdivision contains an integer number of black dots, and […]

## Dithering on Grids

Dithering takes an image and tries to represent it with a series of uniformly sized elements: pixels for digital images, or dots of ink for a pen plotter. I’ll assume that the background is white, and ink is black. To get an approximation of continuous gray levels, only some of the possible points will be […]

## Eikonal Stripes

The Eikonal equation is an approximation used in solving wave equations, and it turns out to also be good for stripes! We try to make a phase map, (), based on the brightness of the image (), with , where is the minimum wavelength desired. This can be approximately solved with the gray-weighted distance transform, […]

## Oriented Noise Patterns

Smoothly varying patterns can be generated via inverse Fourier transforms (previously). These can be skewed to have noise at particular wavelengths and angles. Generating several of these fields at different angles then meshing them together (dependent on the image’s local orientation) gives a spatially-varying pattern of noise, which I’ve used for halftoning. Here’s a set […]