Recommended Daily Intake
Screaming Venus
This piece emerged from the challenge I was given at the time while I was working on a similar theme. The drawing was created by a machine, seeded from a digital collage of Botticelli's Venus and a still from Sergei Eisenstein's 1925 silent film 'The Battleship Potemkin', from which Francis Bacon copied the face of his screaming pope. The work allows us to see the copy on two levels: on one hand, the theme of Venus is perfectly visible, a literal copy; on the other, it refers to an induced copy of Bacon's work, thus extending the copy beyond the physical presence of the work presented to the mental copy we have of Bacon's infamous work.



Every 2d drawing is an abstraction
We was obviously right.
In a different mind set, or not. Reverse engineering Bacon's portraits.
At times I wanted things to have, for a fleeting moment, a tiny, just tiny, instant of mystery. What is there to do...
Useful stuff
04/06/2026
I like the naive notion of assuming that the mark left by a pen plotter is merely a consequence of the artist's code. How much of the manufacturer's firmware is embedded within the art that the author claims as their own?
Simple python script for serial plotters
#!/usr/bin/python3 import sys import serial if __name__ == "__main__": file = sys.argv[1] with open(file, 'r') as content_file: content = content_file.read() ser = serial.Serial('/dev/ttyUSB0', 9600, bytesize=8, parity='N', stopbits=serial.STOPBITS_TWO, timeout=5, xonxoff=False, rtscts=True) ser.write(content.encode()) ser.flush() ser.close()
News, good
I was able to solve some computational problems that were contaminating the algorithm's speed. I improved the calculation speed by a big factor using a faster convolution algorithm and a hack to the Gabor filter kernel with a q-Gaussian which enables shading and region detection (see example below).
The use of a mathematical model for the receptive fields of the neural visual cortex showed more potential than what had originally inspired my work. I'm using a pre-trained-by-nature GNN (G stands for Gabor).
Simple receptive fields have Gabor shapes, but not all Gabor shapes are receptive fields.

After some research and experiments I came to the conclusion that it was feasible to design a computational-robotic system, capable of automatic drawing. In my practice I started producing various experimental drawings with pen plotters and algorithms and found that it seems possible to refine this approach by better understanding the possibilities of the algorithmic modification of images and its embodiment, and linking this approach with a breakdown of the artist's way of working.
This opens new ways to better understand how drawing, and how (self)depiction is perceived, how variations of styles, procedures, algorithms can be used to explore the reciprocity of the artist (self)perception and (self) image over time.
Still life
Still life was never a subject until there was nothing else left to draw, then you get it.

Ballpoint art
- Thomas Muller: https://www.galerie-issert.com/artists/111-thomas-muller/biography
- Il Lee: https://en.wikipedia.org/wiki/Il_Lee
- Joolee Kang: https://www.gallerynaga.com/joolee-kang
- Wai Pongyu: https://www.grottofineart.com/wai-pongyu
- Ignacio Uriarte: https://www.gaepgallery.com/artist/ignacio-uriarte/
And more.
Simple receptive fields have Gabor shapes, but not all Gabor shapes are receptive fields.
There's a funny argument that follows from my claim that I don't use AI to generate my drawings, if I'm using a mathematical model for the receptive fields of the neural visual cortex, then, formally, I'm using a pre-trained by nature GNN.
Also, simple receptive fields have Gabor shapes, but not all Gabor shapes are receptive fields.


Convolute
Making convolutions great (fast) again.
My drawing algorithm relies heavily on making convolutions with large kernel filters for feature extraction, so finding a faster algorithm for this process significantly improved speed and provided an additional set of parameters to work with. :D

Anisotropic Diffusion example
Always wondering why does almost all AI generated art or images looks "the same", that is, aesthetically equivalent. In a way all neural networks do a anisotropic diffusion on images.
Some refs:
- http://helper.ipam.ucla.edu/publications/gss2013/gss2013_11351.pdf
- https://peterkovesi.com/matlabfns/#anisodiff
Kovesi's works nicely, and we have some parameters to play with :D
% ANISODIFF - Anisotropic diffusion. % % Usage: % diff = anisodiff(im, niter, kappa, lambda, option) % % Arguments: % im - input image % niter - number of iterations. % kappa - conduction coefficient 20-100 ? % lambda - max value of .25 for stability % option - 1 Perona Malik diffusion equation No 1 % 2 Perona Malik diffusion equation No 2 % % Returns: % diff - diffused image. % % kappa controls conduction as a function of gradient. If kappa is low % small intensity gradients are able to block conduction and hence diffusion % across step edges. A large value reduces the influence of intensity % gradients on conduction. % % lambda controls speed of diffusion (you usually want it at a maximum of % 0.25) % % Diffusion equation 1 favours high contrast edges over low contrast ones. % Diffusion equation 2 favours wide regions over smaller ones. % Reference: % P. Perona and J. Malik. % Scale-space and edge detection using ansotropic diffusion. % IEEE Transactions on Pattern Analysis and Machine Intelligence, % 12(7):629-639, July 1990. % % Peter Kovesi % www.peterkovesi.com/matlabfns/ % % June 2000 original version. % March 2002 corrected diffusion eqn No 2. function diff = anisodiff(im, niter, kappa, lambda, option) if ndims(im)==3 error('Anisodiff only operates on 2D grey-scale images'); end im = double(im); [rows,cols] = size(im); diff = im; for i = 1:niter % fprintf('\rIteration %d',i); % Construct diffl which is the same as diff but % has an extra padding of zeros around it. diffl = zeros(rows+2, cols+2); diffl(2:rows+1, 2:cols+1) = diff; % North, South, East and West differences deltaN = diffl(1:rows,2:cols+1) - diff; deltaS = diffl(3:rows+2,2:cols+1) - diff; deltaE = diffl(2:rows+1,3:cols+2) - diff; deltaW = diffl(2:rows+1,1:cols) - diff; % Conduction if (option == 1) cN = exp(-(deltaN/kappa).^2); cS = exp(-(deltaS/kappa).^2); cE = exp(-(deltaE/kappa).^2); cW = exp(-(deltaW/kappa).^2); elseif (option == 2) cN = 1./(1 + (deltaN/kappa).^2); cS = 1./(1 + (deltaS/kappa).^2); cE = 1./(1 + (deltaE/kappa).^2); cW = 1./(1 + (deltaW/kappa).^2); end diff = diff + lambda*(cN.*deltaN + cS.*deltaS + cE.*deltaE + cW.*deltaW); % Uncomment the following to see a progression of images % subplot(ceil(sqrt(niter)),ceil(sqrt(niter)), i) % imagesc(diff), colormap(gray), axis image end %fprintf('\n');
Here's an example (regular (left), diffused (right):

and code
im=imread("vangogh.png"); im=rgb2gray(im); jm=uint8(anisodiff(im, 20, 100, .25, 1)); imwrite(jm,"ad-vgogh.png")
Criado/Created: 2024 (created)
Última actualização/Last updated: 28-06-2026 [00:38]
For attribution, please cite this page as:
Charters, T., "Recommended Daily Intake": https://blog.nexp.pt/index.html (28-06-2026 [00:38])
(cc-by-sa) Tiago Charters - tiagocharters@nexp.pt