A report describing this work in more detail is available here.
Set the MATLAB working directory to the source directory to use the program. The simplest use is then:
[mosaic, corrected] = buttonMosaic(image);
where the input image is the RGB-image that should be reproduced and the outputs mosaic and corrected are the resulting mosaics with and without color correction. For more advanced use, see source/examples.m and settings.
The program settings consists of two structs, circle_packing_settings and mosaic_settings.
circle_packing_settings
Field | Explanation |
---|---|
min_radius | Minimum Radius |
num_clusters | Number of perceptually distinct color regions that the image should be segmented to. The image segments are used to determine the size and position of circles. |
max_radius | Maximum circle radius. |
radius_reduction_start | Radius where circle radii will start being asymptotically reduced towards max_radius. |
smooth_est_scale | Image crop factor when estimating settings for the anisotropic diffusion image smoothing. Large images has to be cropped to complete this step in reasonable time. |
label_close_radius | Radius of circular structuring element used for pre-filtering the segmented image using morphological close. |
label_min_area | Regions or holes below this area are removed from the segmented image in the pre-filtering step. |
mosaic_settings
Field | Explanation |
---|---|
scale | Scale factor for the mosaic. If the input is 256x512 and scale is 2, then the resulting mosaic will be 512x1024. |
AA | Anti-Aliasing supersampling factor. The mosaic is scaled by this factor and then downsampled by the same factor to reduce aliasing. |
button_history | The size of the buffer that keeps track of previously used buttons. |
similarity_threshold | The program picks the best button match not contained in the button history if it is within this similarity threshold compared to the best button match. This can be used to increase button variety. |
min_dominant_radius | Circle radii above or equal to this uses dominant color matching to match buttons. Mean color matching is used for radii smaller than this. |
unique_button_limit | Unique Button Limit |
The program has a setting to control the number of unique buttons used in the reproduction, mosaic_settings.unique_button_limit. The program picks the most perceptually important buttons needed to reproduce the given reference image using K-means in CIELAB space, similar to Lloyd-Max quantization using the LBG-algorithm.
Images reproduced with different numbers of unique buttons.
The number of total buttons used in the reproduction can also be controlled by changing the minimum circle radius, circle_packing_settings.min_radius. The number of total buttons increases quadratically with decreasing minimum radius.
Images reproduced with different numbers of total buttons.
Circle packing with mimimum radius decreasing one pixel each frame.
The following products are required to run the program:
Name | Version |
---|---|
Matlab | R2019b (9.7) |
Image Processing Toolbox | 11.0 |
Statistics and Machine Learning Toolbox | 11.6 |
I've created the database of buttons by splitting, cropping, masking and resizing images of buttons sourced from various places. All source images are licensed to permit sharing and adaption and I've attributed the creators of these images under attributions below.
Attributions
I've sourced the images of buttons from the following creators:
Creator: https://www.flickr.com/people/93410621@N05 License: https://creativecommons.org/licenses/by-nc-sa/2.0/
Creator: https://www.flickr.com/people/106074308@N06/ License: https://creativecommons.org/licenses/by/2.0/
Creator: https://www.flickr.com/people/volvob12b/ License: https://creativecommons.org/publicdomain/zero/1.0/
Creator: https://www.flickr.com/people/twenty_questions License: https://creativecommons.org/licenses/by-nc/2.0/
Creator: https://www.flickr.com/people/markmorgantrinidad License: https://creativecommons.org/licenses/by/2.0/
Creator: https://www.flickr.com/people/presley_m/ License: https://creativecommons.org/licenses/by-nc-sa/2.0/
Creator: https://www.flickr.com/people/130331218@N03/ License: https://creativecommons.org/licenses/by-nc-sa/2.0/
Creator: https://www.flickr.com/people/mag3737/ License: https://creativecommons.org/licenses/by-nc-sa/2.0/
Creator: https://www.flickr.com/people/deanhochman/ License: https://creativecommons.org/licenses/by/2.0/
Creator: https://www.flickr.com/people/littlelixie/ License: https://creativecommons.org/licenses/by-nc/2.0/
Creator: https://www.flickr.com/people/obd-design License: https://creativecommons.org/licenses/by-nc-sa/2.0/
Creator: https://www.pexels.com/ License: https://creativecommons.org/publicdomain/zero/1.0/
Creator: https://pikrepo.com/ License: https://creativecommons.org/publicdomain/zero/1.0/
Creator: https://pixabay.com/ License: https://creativecommons.org/publicdomain/zero/1.0/
Creator: https://pixbay.com/ License: https://creativecommons.org/publicdomain/zero/1.0/
Creator: https://pixnio.com/ License: https://creativecommons.org/publicdomain/zero/1.0/
Creator: http://www.readyelements.com/ License: https://creativecommons.org/publicdomain/zero/1.0/
Creator: https://www.flickr.com/people/salvagenation License: https://creativecommons.org/licenses/by-nc-sa/2.0/
Creator: https://www.flickr.com/people/14903992@N08 License: https://creativecommons.org/licenses/by-nc/2.0/
Creator: https://www.flickr.com/people/shellysblogger/ License: https://creativecommons.org/licenses/by-nc-sa/2.0/
Creator: https://www.flickr.com/people/thevintagesailor/ License: https://creativecommons.org/licenses/by-nc/2.0/
Creator: https://www.flickr.com/people/23882161@N03/ License: https://creativecommons.org/licenses/by-nc/2.0/
Creator: https://www.flickr.com/people/welshkaren License: https://creativecommons.org/licenses/by-nc/2.0/
Creator: https://www.flickr.com/people/30478819@N08/ License: https://creativecommons.org/licenses/by/2.0/
The reproduced paintings and photos are all in the public domain, but some of the source images of buttons are licensed under the share-alike license CC BY-NC-SA 2.0. The reproduced images are therefore licensed under:
https://creativecommons.org/licenses/by-nc-sa/4.0/
I've bumped the license to the latest 4.0 version since these are compatible and because this is suggested by CC.