Categories
etcetera

Generative Lumber

Wood is a curious material. You can see its history in a slice, due to its imperfect rings. I wanted to recreate a simplified version of this. First, I created a skeleton of line segments to represent the trunk and branches. From these, I created a 3D distance map. If I plotted the contours of […]

Categories
etcetera

Splash!

I’ve been wanting to generate patterns that look like splashes. It’s tempting to simulate attractive particles flying through the air, and then see where they intersect the ground, but that’s more intensive than is necessary. Instead, I pretended to throw some metaballs at the ground: Those look like splashes to me! To generate these required […]

Categories
etcetera

Ambiguous Digits 2: Generative Adversarial Network

I’m still interested in making ambiguous-looking numbers. Last time, I trained a neural network to identify pictures of handwritten numbers, and then used that to create images that look like one digit when right-side-up, and a different one when upside-down. This time, I’ll use a Generative Adversarial Network (GAN). A GAN is a pair of […]

Categories
etcetera

Ambiguous Digits 1: Classification-based

I wanted to create a set of numbers that look like different numbers when they’re rotated 180°, but I especially wanted a computer to do it for me. I’ve been using TensorFlow recently, and that sounded like a good place to start. There is a standard data set used for number identification, the MNIST database, […]

Categories
fluids

Proper Orthogonal Decomposition

Time for some competing acronyms. Fluids people like to call this technique Proper Orthogonal Decomposition (POD), statisticians call it Principal Component Analysis (PCA), and so on and so on. Whatever you want to call it, it’s basically an eigenvector decomposition of the data you toss into it. That means that it optimally splits the data […]

Categories
fluids

Processing Vector Fields

In my PhD research, I had to deal with a lot of data.  Particularly with movies of particles moving around in water. These movies were processed, via Particle Image Velocimetry, to give vector fields of the velocity in the flow.  For an example, here’s some rough data that I took of a cylinder in flow, […]

Categories
halftoning

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 […]

Categories
halftoning

Simple cross-hatching

The simplest type of cross-hatching is to have a set number of hatching angles and constant spacing. The header image shows the result with 16 different angles. This can be extended to use other sorts of patterns. For example, here are orthogonal circular and radial lines: The number of overlapping lines was computed for each […]

Categories
halftoning

Polygon Subdivision

I’ve mentioned that subdividing an image is useful for putting patterns within the divisions. This method uses the outline of the subdivisions to provide the darkness. The way this is done is to repeatedly break a shape into two parts: ensuring that the ratio of perimeter to blackness within is equal on both sides.  From […]

Categories
halftoning

Space Colonization

I saw an interesting algorithm for creating branching veiny patterns called the Space Colonization Algorithm. Of course, I had to apply it to halftoning. Basically, the veins grow in the direction of their nearest destination points. Once the vein is close enough to a destination point, that destination is removed from the list, and growth […]