And then the roughness of the grain outline is translated into a series of harmonics by Fourier analysis. This is a more formal description of sphericity, roundness or roughness:
Different grains with different provenance have different spectra:
The technique is described in these research papers:
- On the shapes of natural sand grains - David R. Barclay and Michael J. Buckingham - Published 21 February 2009 - JOURNAL OF GEOPHYSICAL RESEARCH, VOL. 114 - Link
- Particle Shape Characterisation using Fourier Analysis - Elisabeth T. Bowman, Kenichi Saga & Tom W. Drummond - CUED/D-SoWTR315 (2000) - Link
Software tools discarded - I've spent a lot of time searching for tools. I need tools for image processing and sound synthesis. These don't often go together. I've discarded the following options:
- Matlab - Has image and sound and mathematics. But is prohibitively expensive and probably a steep learning curve.
- Scilab and SIP (Scilab Image Processing Toolbox) - Free and functionality looks sufficient. But I'm worried about stability, reliability and the steep learning curve.
- Processing - Not many examples of image processing, I'm not sure it's powerful enough.
- Supercollider and PureData - I'm afraid of the learning curve.
- Python Vision - This seems a workable set of image processing tools. I'll just try it for a first start. It consists of a set of image processing tools, described here.
- Python XY - Most of the tool set can be installed in Windows 7 in one go from here. You have to deinstall all other Python software first.
- Two additional modules:
- Pymorph - Downloadable from here. Install by: python setup.py install. No problems here.
- Mahotas - Downloadable from here. This one is more tricky to get working. You get a well known error that is described here. But the solution is different from what is written here. You don't need to install MinGW and you don't need to set the path. I think Python-XY has done that already. You just need to install the module with a different command: python setup.py install build --compiler=mingw32. This worked for me after some googling and experimentation.
- Nsound - Seems sufficient. I'm still a bit dubious about the 'buffer' format. Can I write random data into a buffer or am I limited by the functions in the nsound library? The usage of the library looks a bit weird to me.
We'll see if these choices work. I think it would be difficult to find a better match between learning curve and functional power. But I'm open for advice!