Turning into Turing,

an Informal Inquiry,

2022

Seriously... 2K or 4K it. Rainbow gradient rotated by 1° for 90'000 iterations (250 revolutions).

TL;DR:

If you repeatedly rotate an image (100’s or 1000’s of times) in Photoshop® using one of the bicubic interpolation methods, it will produce a Turing pattern.

Rotational Growth in Photoshop®

I stumbled into this one while working on a different project where I scripted the rotation of an image in preparation for an animation. When I looked at the last frame though, I noticed the image looked washed out and with odd patterning. Some sort of generational loss was happening to the image and I remembered previous exmaples of exploiting and celebrating the degradation process, like Alvin Lucier’s I Am Sitting in a Room, saving a jpeg hundreds of times, and the like; I knew I needed to push the rotational distorion as far as I could.

The Inquiry:

Let’s use this image of a rainbow gradient:

and rotate it 72 times in 5 degree increments so we’ve done a full rotation and should be back to the original:

As you should be able to see in the animation, the gradient no longer looks the same after 360°. If we then take only the frames from multiples of 360°, the image begins to grow and show the characteristics of a Turing pattern:

Interpolation Algorithm Differences

Depending on the interpolation method you use, a different result occurs.

Interpolation Algorithm × 72 iterations = 1 revolution (360°) × 3240 iterations = 45 revolutions (16200°)
Bicubic
Bicubic Sharper
Bicubic Smoother
Bilinear
Nearest Neighbor

Interpolation Algorithms Not Included in Photoshop®

Adobe Photoshop® only has the above 5 interpolation methods to choose from (we’ll mostly ignore Bilinear and Nearest Neighbor from here on as they don’t produce Turing patterns). The utility software suite ImageMagick contains a whole host of other interpolation (11) & filtering (31) algorithms that can be used when rotating images. Too many to fit on this page, so see 5 degrees of ImageMagick rotation:

What about the pixel rotation popularized in Matt Parker’s “Rotation without rotating” video?

Well, even the three-shear rotation that Matt use degrades the image over repeated rotations, though it does keep the same number and color of pixels as the original. The key to the entropy process is that each image rotation uses the resulting image of the previous rotation’s interpolation calculations, not repeatedly using the starting image. That means pixel placements are a moving target, and iterative degradation ensues similar to nearest neighbor.

What about “my esoteric / favorite” method?

Let’s find out! Send them my way and add to the list...

Interpolation Algorithm × 72 iterations = 1 revolution (360°) × 3240 iterations = 45 revolutions (16200°)
Three-Shear
RotSprite
all pixels got eaten after 575°

Degrees per Rotation Differences

Let’s have a look at how the patterns change based on the degree that you execute each rotation iteration. I’ve done all the integer degrees that evenly split 360º as well two small decimal degrees. Note that rotating by 90° or 180° have no effect as they are lossless transformations.

Rotation Info Bicubic Bicubic Sharper Bicubic Smoother
0.25°
1440 iterations
1 revolution
360°
0.25°
4320 iterations
3 revolutions
1440°
0.5°
720 iterations
1 revolution
360°
0.5°
3600 iterations
5 revolutions
1800°

360 iterations
1 revolution
360°

3240 iterations
9 revolutions
3240°

180 iterations
1 revolution
360°

3240 iterations
18 revolutions
6480°

120 iterations
1 revolution
360°

3240 iterations
27 revolutions
9720°

90 iterations
1 revolution
360°

3240 iterations
36 revolutions
12960°

72 iterations
1 revolution
360°

3240 iterations
45 revolutions
16200°

60 iterations
1 revolution
360°

3240 iterations
54 revolutions
19440°

45 iterations
1 revolution
360°

3240 iterations
72 revolutions
25920°

40 iterations
1 revolution
360°

3240 iterations
81 revolutions
29160°
10°
36 iterations
1 revolution
360°
10°
3240 iterations
90 revolutions
32400°
12°
30 iterations
1 revolution
360°
12°
3240 iterations
108 revolutions
38880°
15°
24 iterations
1 revolution
360°
15°
3240 iterations
135 revolutions
54600°
18°
20 iterations
1 revolution
360°
18°
3240 iterations
162 revolutions
58320°
20°
18 iterations
1 revolution
360°
20°
3240 iterations
180 revolutions
64800°
24°
15 iterations
1 revolution
360°
24°
3240 iterations
216 revolutions
77760°
30°
12 iterations
1 revolution
360°
30°
3240 iterations
270 revolutions
109200°
36°
10 iterations
1 revolution
360°
36°
3240 iterations
324 revolutions
116640°
40°
9 iterations
1 revolution
360°
40°
3240 iterations
360 revolutions
129600°
45°
8 iterations
1 revolution
360°
45°
3240 iterations
405 revolutions
54600°
60°
6 iterations
1 revolution
360°
60°
3240 iterations
540 revolutions
109200°
72°
5 iterations
1 revolution
360°
72°
3240 iterations
648 revolutions
116640°
120°
3 iterations
1 revolution
360°
120°
3240 iterations
1080 revolutions
109200°

what’s this guy doing?!?

Single Color

I think the pattern that Bicubic makes is the same no matter what color is being used (to research more), while the other two are different based on color

Rotation Info Bicubic Bicubic Sharper Bicubic Smoother

72 iterations
1 revolution
360°

3240 iterations
45 revolutions
16200°

Two Colors

When two flat colors are used, there is an interesting reaction based on the differences between the RGB values of the two colors.

Rotation and color info 60 iterations / 1 revolution (360°) Correlation of RGB values 3240 iterations / 54 revolutions (19440°)

Red & Magenta

only the two colors

Red & Yellow

only the two colors

Green & Yellow

only the two colors

Blue & Magenta

only the two colors

Red & Dark Red

only one color and black

Green & Light Green

only one color and white

Red & Blue

the two colors, their secondary color, and black

Green & Blue

the two colors, their secondary color, and black

Red & Green

the two colors, their secondary color, and black

Green & Magenta

the two colors, white, and black

Blue & Yellow

the two colors, white, and black

Greyish & Salmonish

primary colors, secondary colors, white, and black

Greyish & Salmonish
(16-bit color)

primary colors, secondary colors, white, and black

Has somebody already done this?

Since this is one of those super simple things that anyone can do—they just need to be the first to find it,—I was worried I had spent a whole bunch of time repeating something someone else had done already. I was also aware of other projects that use repeated actions to expose generational loss that I mentioned earlier, but nothing that focused specifically on rotation as the impetus, and nothing that ended up with Turing patterns. After some cybersearching, I could only find things that were close, but nothing that hit on the Turing pattern aspect.

I think the closest was all the way back in 1999 when Helmut Dersch tested the quality of different interpolation algorithms by rotating images in 5° increments 36 times to 180° of the original (I chose 5° for my original samples in their honor). I am including a resampling of the images they used in the tests to give a look at what Helmet might have discovered back then. The second closest was a variation on something I was aware of (resaving jpegs), rotational jpeg compression. Here I think the degradation relies more on the unique qualities of jpegs, and doesn’t result in the novel patterning.

I did also come across another artist who found a way to make Turing patterns in Photoshop® using repeated blurring and sharpening of images. Given the way this method works, you have much greater control over the resulting Turing pattern. My method relies on the reaction-diffusion system happening at a pixel level, and so the variety of end results is pretty limited.

Revising Helmet Dersch’s tests Monument Test Ken Turkowski’s Zone Plate
The original images
Same settings as original experiment, except 1° instead of 5°
Bicubic, 1°
180 iterations
0.5 revolutions
180°
then flipped 180°
Bicubic, 5°
72 iterations
1 revolution
360°
Bicubic, 5°
3240 iterations
45 revolution
16'200°
Bicubic Sharper, 5°
72 iterations
1 revolution
360°
Bicubic Sharper, 5°
3240 iterations
45 revolution
16'200°
Bicubic Smoother, 5°
72 iterations
1 revolution
360°
Bicubic Smoother, 5°
3240 iterations
45 revolution
16'200°

A note about the size of the images on this page:

The rotated images often contain a vast network of pixels that extend around the visible patterns. These pixels are 99/100% transparent, making them virtually imperceptible. They also added a lot of extraneous bloat to the page. As a fix, I have trimmed many of the resulting images to only show the visible pixels. I'm including here an example of the true extent of one image and, to show the hidden network of pixels, another version where I have removed the alpha (transparency) channel.

Rotation Info Original result of rotations Original with no transparency
Bicubic, 5°
3240 iterations
45 revolutions
16200°

What about if we rotate the image 5 degrees and then immediately rotate it -5 degrees over and over?

Interpolation algorithm 72 iterations 3240 iterations
Bicubic Sharper

Or rotate 5 degrees for one full revolution (360°) and then rotate it -5 degrees for a full revolution (-360°)?

Interpolation algorithm 144 iterations (since 72 wil be the same as original) 3240 iterations
Bicubic Sharper
back and forth
Bicubic Sharper
one direction

Photoshop® Script:

I’m working on a script that allows people to create their own Turing patterns and animations. You can find it on github.

References / Related / Further Reading / etc.:

To research further:

Assorted other images from the process:


Bicubic, 1° for 720 iterations

Nearest Neighbor, 1° for 360 iterations

Hi Neil!

Three-Shear Rotation, 1° for 360 iterations

Three-Shear Rotation, 10° for 36 iterations
All the pixels are there... but still mixed up

Rotsprite Rotation, 10° for 36 iterations

Bicubic Smoother, .3333°

original

Rotsprite Rotation, 1° for 360 iterations
loading