Kirby — thanks for taking the time to read and taking the time to write a response.
I’ve never played with Mosaic from cf/x AG personally, however I can make some initial educated assumptions on the process that it uses based on the screenshots. Mosaic from cf/x appears to utilize a recursive quad-tree drawing (https://en.wikipedia.org/wiki/Quadtree). It divides the image into four cells, colors each cell based on the average color. Each cell is divided again into four cells. Re-color based on average color. Repeat until happy.
I suspect that the cells it chooses to divide is based on how different it is from the original image. If the difference exceeds a threshold, it divides.
Here’s an open source implementation:
I’m still actively working on Mosaic Shapes daily. The next release speeds up the algorithm signficantly (about a rough 30–50% speedup depending on settings) and draws lower resolution images better (there are some bugs with < 1000pix res images).
I’m happy you brought up control over parameters.
There’s really only three parameters in the current app:
grid size, diamond vs grid cell layout, average color vs adding complementary and analogous colors.
However, within the app itself there’s a potential to expose a lot more. These current settings are hardcoded and am exploring how to make it available to power users like yourself while still provide ease of controls to not alienate regular users looking for a quick effect. Perhaps certain settings can be used creatively that I haven’t even thought about.
- Types of nested shapes to use. Ability to exclude/include circles, triangles, rectangles, pie slices.
- How many nested shapes to draw (current is set to max 4–6… if I recall correctly),
- Include/exclude analogous/complementary colors. Some images just don’t look good with the complementary colors.
- Threshold of when draw more analogous vs complementary colors
- Threshold of when to combine/merge cells
- Giving higher weights to certain shapes so they are drawn more over others.
Is this what you mean by extendable?
Exploration of colors is something I’m still experimenting with also. Converting images to mosaics naturally removes detail from images, thus what usually holds up the image is going to be a broad range of colors and/or contrast. If I can provide some sort of enhancement prior to the mosaic effect, I’m hoping the user will be much more happy with the end result. Sometimes I’ve manually increased the contrast levels prior to applying the mosaic filter for better results.
Hoping this helps answer some questions, please let me know if you still have any too!