fosstodon.org is one of the many independent Mastodon servers you can use to participate in the fediverse.
Fosstodon is an invite only Mastodon instance that is open to those who are interested in technology; particularly free & open source software. If you wish to join, contact us for an invite.

Administered by:

Server stats:

8.8K
active users

#halftoneart

0 posts0 participants0 posts today
Risto A. Paju<p>Testing the Gosper curve in my variable iteration halftoning setup. So far I've only used the Hilbert curve this way, and things get a bit coarser with the Gosper, so it was harder to find images that make nice results. So here we are with the old Venus again.</p><p>The number of points multiplies by 4 for Hilbert and 7 for Gosper on each step, so the latter has to get by with fewer iterations for a sensible resolution. Here we have 6 iterations for 6 grey levels.</p><p><a href="https://mathstodon.xyz/tags/halftoneart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>halftoneart</span></a> <a href="https://mathstodon.xyz/tags/gospercurve" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>gospercurve</span></a> <a href="https://mathstodon.xyz/tags/planefillingcurve" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>planefillingcurve</span></a> <a href="https://mathstodon.xyz/tags/spacefillingcurve" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>spacefillingcurve</span></a> <a href="https://mathstodon.xyz/tags/singlelinedrawing" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>singlelinedrawing</span></a> <a href="https://mathstodon.xyz/tags/pythoncode" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>pythoncode</span></a> <a href="https://mathstodon.xyz/tags/opengl" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>opengl</span></a> <a href="https://mathstodon.xyz/tags/algorithmicart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorithmicart</span></a> <a href="https://mathstodon.xyz/tags/algorist" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorist</span></a> <a href="https://mathstodon.xyz/tags/mathart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>mathart</span></a> <a href="https://mathstodon.xyz/tags/laskutaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>laskutaide</span></a> <a href="https://mathstodon.xyz/tags/ittaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ittaide</span></a> <a href="https://mathstodon.xyz/tags/kuavataide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kuavataide</span></a> <a href="https://mathstodon.xyz/tags/iterati" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>iterati</span></a></p>
Risto A. Paju<p>The previous demo made me dig deeper into dithering algorithms. It's something I should have done years ago, as I've been using simple random dithering now and then, and I hadn't even thought of gamma correction. One algorithm in particular caught my eye: Riemersma dithering, which uses the Hilbert curve. Compared to the usual matrices for error diffusion, the curve approach seemed easier to implement in some ways, as it has fewer edge issues.</p><p>More interestingly, it struck a chord with my earlier experiments with space-filling curves in image processing. So it was a kind of familiar territory, but it also seemed esoteric enough that I could imagine making some new discoveries. For example, play with other plane-filling curves besides the Hilbert.</p><p>The first image uses the boustrophedon curve, which makes the vertical wave patterns I recall from a number of non-dithering demos. The second curve is what I call the diagstrophedon, a diagonal zig-zag starting from the top left corner, and I think its wavy artefacts make a nice match for Venus's hair.</p><p>Then in image 3 we have Hilbert, which doesn't seem to make any particular artefacts, and I guess that's a good thing for dithering. Finally 4 uses the Peano curve, which makes some fun wiggles in light areas.</p><p><a href="https://mathstodon.xyz/tags/dithering" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dithering</span></a> <a href="https://mathstodon.xyz/tags/riemersmadithering" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>riemersmadithering</span></a> <a href="https://mathstodon.xyz/tags/stippling" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>stippling</span></a> <a href="https://mathstodon.xyz/tags/halftoneart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>halftoneart</span></a> <a href="https://mathstodon.xyz/tags/raster" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>raster</span></a> <a href="https://mathstodon.xyz/tags/pixelart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>pixelart</span></a> <a href="https://mathstodon.xyz/tags/hilbertcurve" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>hilbertcurve</span></a> <a href="https://mathstodon.xyz/tags/peanocurve" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>peanocurve</span></a> <a href="https://mathstodon.xyz/tags/planefillingcurve" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>planefillingcurve</span></a> <a href="https://mathstodon.xyz/tags/spacefillingcurve" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>spacefillingcurve</span></a> <a href="https://mathstodon.xyz/tags/pythoncode" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>pythoncode</span></a> <a href="https://mathstodon.xyz/tags/opengl" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>opengl</span></a> <a href="https://mathstodon.xyz/tags/algorithmicart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorithmicart</span></a> <a href="https://mathstodon.xyz/tags/algorist" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorist</span></a> <a href="https://mathstodon.xyz/tags/mathart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>mathart</span></a> <a href="https://mathstodon.xyz/tags/laskutaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>laskutaide</span></a> <a href="https://mathstodon.xyz/tags/ittaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ittaide</span></a> <a href="https://mathstodon.xyz/tags/kuavataide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kuavataide</span></a> <a href="https://mathstodon.xyz/tags/iterati" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>iterati</span></a></p>
Risto A. Paju<p>I came across this halftoning idea sometime last week. While the idea was relatively easy to understand and fun to implement, I've spent quite a lot of time trying to make the result look nice.</p><p>In each row, the image is split into bins containing roughly the same sum of lightness value. This is nice to implement when the number of lines/bins is a power of 2, so we can recurse with a binary split. Thus the line density varies by average lightness. The problem is that density is considered along the x-axis. If things change a lot between rows, the lines get slanted, so they appear more dense. Here I've included some averaging between neighbouring rows to make thing a bit smoother.</p><p>I'm also including a fun glitch from the early tests. The line-density system includes the set of point coordinates and the graph structure (which point is connected to which). What happened here is my generic graph generator that simply finds the nearest neighbours of each point. So in the light areas that are compressed horizontally, the nearest neighbours were left and right.</p><p><a href="https://mathstodon.xyz/tags/halftoneart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>halftoneart</span></a> <a href="https://mathstodon.xyz/tags/lineart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>lineart</span></a> <a href="https://mathstodon.xyz/tags/patterns" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>patterns</span></a> <a href="https://mathstodon.xyz/tags/texture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>texture</span></a> <a href="https://mathstodon.xyz/tags/pythoncode" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>pythoncode</span></a> <a href="https://mathstodon.xyz/tags/opengl" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>opengl</span></a> <a href="https://mathstodon.xyz/tags/algorithmicart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorithmicart</span></a> <a href="https://mathstodon.xyz/tags/algorist" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorist</span></a> <a href="https://mathstodon.xyz/tags/mathart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>mathart</span></a> <a href="https://mathstodon.xyz/tags/laskutaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>laskutaide</span></a> <a href="https://mathstodon.xyz/tags/ittaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ittaide</span></a> <a href="https://mathstodon.xyz/tags/kuavataide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kuavataide</span></a> <a href="https://mathstodon.xyz/tags/iterati" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>iterati</span></a></p>
Risto A. Paju<p>Minimum spanning tree of a dithered image, 4096 vertices. Model: Swetlana</p><p><a href="https://mathstodon.xyz/tags/spanningtreeyoungandsweet" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>spanningtreeyoungandsweet</span></a> <a href="https://mathstodon.xyz/tags/minimumspanningtree" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>minimumspanningtree</span></a> <a href="https://mathstodon.xyz/tags/primsalgorithm" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>primsalgorithm</span></a> <a href="https://mathstodon.xyz/tags/graphtheory" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>graphtheory</span></a> <a href="https://mathstodon.xyz/tags/halftoneart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>halftoneart</span></a> <a href="https://mathstodon.xyz/tags/lineart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>lineart</span></a> <a href="https://mathstodon.xyz/tags/pythoncode" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>pythoncode</span></a> <a href="https://mathstodon.xyz/tags/opengl" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>opengl</span></a> <a href="https://mathstodon.xyz/tags/algorithmicart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorithmicart</span></a> <a href="https://mathstodon.xyz/tags/algorist" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorist</span></a> <a href="https://mathstodon.xyz/tags/mathart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>mathart</span></a> <a href="https://mathstodon.xyz/tags/laskutaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>laskutaide</span></a> <a href="https://mathstodon.xyz/tags/computerart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>computerart</span></a> <a href="https://mathstodon.xyz/tags/ittaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ittaide</span></a> <a href="https://mathstodon.xyz/tags/kuavataide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kuavataide</span></a> <a href="https://mathstodon.xyz/tags/iterati" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>iterati</span></a></p>