mirror of
https://github.com/ryantimpe/brickr.git
synced 2026-02-21 14:19:36 -06:00
286 lines
15 KiB
HTML
286 lines
15 KiB
HTML
<!-- Generated by pkgdown: do not edit by hand -->
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>Create a 2D LEGO mosaic from an image array — image_to_mosaic • brickr</title>
|
|
|
|
<!-- favicons -->
|
|
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
|
|
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="../apple-touch-icon.png" />
|
|
<link rel="apple-touch-icon" type="image/png" sizes="120x120" href="../apple-touch-icon-120x120.png" />
|
|
<link rel="apple-touch-icon" type="image/png" sizes="76x76" href="../apple-touch-icon-76x76.png" />
|
|
<link rel="apple-touch-icon" type="image/png" sizes="60x60" href="../apple-touch-icon-60x60.png" />
|
|
|
|
<!-- jquery -->
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
|
|
<!-- Bootstrap -->
|
|
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous" />
|
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script>
|
|
|
|
<!-- bootstrap-toc -->
|
|
<link rel="stylesheet" href="../bootstrap-toc.css">
|
|
<script src="../bootstrap-toc.js"></script>
|
|
|
|
<!-- Font Awesome icons -->
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous" />
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous" />
|
|
|
|
<!-- clipboard.js -->
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script>
|
|
|
|
<!-- headroom.js -->
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script>
|
|
|
|
<!-- pkgdown -->
|
|
<link href="../pkgdown.css" rel="stylesheet">
|
|
<script src="../pkgdown.js"></script>
|
|
|
|
|
|
|
|
<link href="../extra.css" rel="stylesheet">
|
|
|
|
|
|
<meta property="og:title" content="Create a 2D LEGO mosaic from an image array — image_to_mosaic" />
|
|
<meta property="og:description" content="Generate brick mosaics from an image or matrix with customization options." />
|
|
<meta property="og:image" content="http://brickr.org/logo.png" />
|
|
|
|
|
|
|
|
|
|
<!-- mathjax -->
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script>
|
|
|
|
<!--[if lt IE 9]>
|
|
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
|
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
|
<![endif]-->
|
|
|
|
|
|
|
|
</head>
|
|
|
|
<body data-spy="scroll" data-target="#toc">
|
|
<div class="container template-reference-topic">
|
|
<header>
|
|
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
|
<div class="container">
|
|
<div class="navbar-header">
|
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
|
|
<span class="sr-only">Toggle navigation</span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
</button>
|
|
<span class="navbar-brand">
|
|
<a class="navbar-link" href="../index.html">brickr</a>
|
|
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.3.5</span>
|
|
</span>
|
|
</div>
|
|
|
|
<div id="navbar" class="navbar-collapse collapse">
|
|
<ul class="nav navbar-nav">
|
|
<li>
|
|
<a href="../index.html">
|
|
<span class="fas fa fas fa-home fa-lg"></span>
|
|
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="../reference/index.html">Reference</a>
|
|
</li>
|
|
<li>
|
|
<a href="../articles/index.html">Articles</a>
|
|
</li>
|
|
<li>
|
|
<a href="../news/index.html">Changelog</a>
|
|
</li>
|
|
</ul>
|
|
<ul class="nav navbar-nav navbar-right">
|
|
<li>
|
|
<a href="https://github.com/ryantimpe/brickr/">
|
|
<span class="fab fa fab fa-github fa-lg"></span>
|
|
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
|
|
</div><!--/.nav-collapse -->
|
|
</div><!--/.container -->
|
|
</div><!--/.navbar -->
|
|
|
|
|
|
|
|
</header>
|
|
|
|
<div class="row">
|
|
<div class="col-md-9 contents">
|
|
<div class="page-header">
|
|
<h1>Create a 2D LEGO mosaic from an image array</h1>
|
|
<small class="dont-index">Source: <a href='https://github.com/ryantimpe/brickr/blob/master/R/image-to-mosaic.R'><code>R/image-to-mosaic.R</code></a></small>
|
|
<div class="hidden name"><code>image_to_mosaic.Rd</code></div>
|
|
</div>
|
|
|
|
<div class="ref-description">
|
|
<p>Generate brick mosaics from an image or matrix with customization options.</p>
|
|
</div>
|
|
|
|
<pre class="usage"><span class='fu'>image_to_mosaic</span>(
|
|
<span class='no'>img</span>,
|
|
<span class='kw'>img_size</span> <span class='kw'>=</span> <span class='fl'>48</span>,
|
|
<span class='kw'>color_table</span> <span class='kw'>=</span> <span class='kw'>NULL</span>,
|
|
<span class='kw'>method</span> <span class='kw'>=</span> <span class='st'>"cie94"</span>,
|
|
<span class='kw'>color_palette</span> <span class='kw'>=</span> <span class='fu'><a href='https://rdrr.io/r/base/c.html'>c</a></span>(<span class='st'>"universal"</span>, <span class='st'>"generic"</span>, <span class='st'>"special"</span>),
|
|
<span class='kw'>trans_bg</span> <span class='kw'>=</span> <span class='st'>"White"</span>,
|
|
<span class='kw'>dithering</span> <span class='kw'>=</span> <span class='fl'>FALSE</span>,
|
|
<span class='kw'>contrast</span> <span class='kw'>=</span> <span class='fl'>1</span>,
|
|
<span class='kw'>use_bricks</span> <span class='kw'>=</span> <span class='kw'>NULL</span>,
|
|
<span class='kw'>brightness</span> <span class='kw'>=</span> <span class='fl'>1</span>,
|
|
<span class='kw'>warhol</span> <span class='kw'>=</span> <span class='fl'>1</span>:<span class='fl'>3</span>
|
|
)</pre>
|
|
|
|
<h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a>Arguments</h2>
|
|
<table class="ref-arguments">
|
|
<colgroup><col class="name" /><col class="desc" /></colgroup>
|
|
<tr>
|
|
<th>img</th>
|
|
<td><p>Image matrix to convert into mosaic. Usually from <code><a href='https://rdrr.io/pkg/jpeg/man/readJPEG.html'>readJPEG</a></code> or <code><a href='https://rdrr.io/pkg/png/man/readPNG.html'>readPNG</a></code>.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>img_size</th>
|
|
<td><p>Size of output image in pixel, where one pixel = one 'brick'. Use a single value (e.g. <code>48</code>) for a square image with 48 pixels on each side.
|
|
Use an array of two values for a rectangular image <code><a href='https://rdrr.io/r/base/c.html'>c(width, height)</a></code>.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>color_table</th>
|
|
<td><p>Defaults to <code>lego_colors</code>. Data frame of brick colors to map onto image. Must contain Name and R, G, B channels.
|
|
See attached data <code>lego_colors</code> as examples.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>method</th>
|
|
<td><p>The method to use for comparison. Options are 'euclidean', 'cie1976', 'cie94', 'cie2000', or 'cmc'.
|
|
See <code><a href='https://farver.data-imaginist.com/reference/compare_colour.html'>compare_colour</a></code>.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>color_palette</th>
|
|
<td><p>Brick color rarity to use. Defaults to all colors: 'universal' (most common), 'generic', and 'special' (least common). This is useful when trying to build the mosaic out of real bricks.
|
|
Use "bw" for only grayscale bricks. Ignored if a <code>color_table</code> is supplied.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>trans_bg</th>
|
|
<td><p>If <code>img</code> is a png has a transparent background, name of color to replace the background.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>dithering</th>
|
|
<td><p>Improves color of large, photo-realistic mosaics.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>contrast</th>
|
|
<td><p>For <code>theme = "bw"</code>. A value >1 will increase the contrast of the image while a positive value <1 will decrease the contrast.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>use_bricks</th>
|
|
<td><p>Array of brick sizes to use in mosaic. Defaults to <code><a href='https://rdrr.io/r/base/c.html'>c('4x2', '2x2', '3x1', '2x1', '1x1')</a></code>`.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>brightness</th>
|
|
<td><p>A value >1 will increase the brightness of the image while a positive value <1 will decrease the brightness.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<th>warhol</th>
|
|
<td><p>Array of values <code><a href='https://rdrr.io/r/base/c.html'>c(1, 2, 3)</a></code> associated with R, G, B color channels. Swap values in array to swap color channels for a fun visual effect.</p></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
|
|
|
|
<p>A list with element <code>Img_lego</code> containing a data frame of the x- & y-coordinates, R, G, B channels, and mapped color of each brick (pixel).</p>
|
|
<h2 class="hasAnchor" id="see-also"><a class="anchor" href="#see-also"></a>See also</h2>
|
|
|
|
<div class='dont-index'><p>Other Mosaics:
|
|
<code><a href='build_mosaic.html'>build_mosaic</a>()</code></p></div>
|
|
|
|
<h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
|
|
<pre class="examples"><div class='input'><span class='co'># Import a jpeg or png</span>
|
|
<span class='no'>demo_file</span> <span class='kw'><-</span> <span class='fu'><a href='https://rdrr.io/r/base/system.file.html'>system.file</a></span>(<span class='st'>"extdata"</span>, <span class='st'>"demo_img.jpg"</span>,
|
|
<span class='kw'>package</span> <span class='kw'>=</span> <span class='st'>"brickr"</span>, <span class='kw'>mustWork</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>)
|
|
<span class='no'>demo_image</span> <span class='kw'><-</span> <span class='kw pkg'>jpeg</span><span class='kw ns'>::</span><span class='fu'><a href='https://rdrr.io/pkg/jpeg/man/readJPEG.html'>readJPEG</a></span>(<span class='no'>demo_file</span>)
|
|
|
|
<span class='co'>#Create a 24x24 mosaic</span>
|
|
<span class='co'># \donttest{</span>
|
|
<span class='no'>demo_image</span> <span class='kw'>%>%</span>
|
|
<span class='fu'>image_to_mosaic</span>(<span class='kw'>img_size</span> <span class='kw'>=</span> <span class='fl'>24</span>) <span class='kw'>%>%</span>
|
|
<span class='fu'><a href='build_mosaic.html'>build_mosaic</a></span>()</div><div class='img'><img src='image_to_mosaic-1.png' alt='' width='700' height='433' /></div><div class='input'> <span class='co'># }</span>
|
|
|
|
<span class='co'>#Only use the two more common tiers of colors</span>
|
|
<span class='co'># \donttest{</span>
|
|
<span class='no'>demo_image</span> <span class='kw'>%>%</span>
|
|
<span class='fu'>image_to_mosaic</span>(<span class='kw'>img_size</span> <span class='kw'>=</span> <span class='fl'>24</span>,
|
|
<span class='kw'>color_palette</span> <span class='kw'>=</span> <span class='fu'><a href='https://rdrr.io/r/base/c.html'>c</a></span>(<span class='st'>"universal"</span>, <span class='st'>"generic"</span>)) <span class='kw'>%>%</span>
|
|
<span class='fu'><a href='build_mosaic.html'>build_mosaic</a></span>()</div><div class='img'><img src='image_to_mosaic-2.png' alt='' width='700' height='433' /></div><div class='input'> <span class='co'># }</span>
|
|
|
|
<span class='co'>#Be more prescriptive with colors using 'color_table'.</span>
|
|
<span class='co'># Here, we prevent all blues from being used</span>
|
|
<span class='no'>lego_colors_no_blue</span> <span class='kw'>=</span> <span class='no'>lego_colors</span> <span class='kw'>%>%</span>
|
|
<span class='kw pkg'>dplyr</span><span class='kw ns'>::</span><span class='fu'><a href='https://dplyr.tidyverse.org/reference/filter.html'>filter</a></span>(!<span class='fu'><a href='https://rdrr.io/r/base/grep.html'>grepl</a></span>(<span class='st'>"[Bb]lue|[Aa]zur"</span>, <span class='no'>Color</span>))
|
|
<span class='co'># \donttest{</span>
|
|
<span class='no'>demo_image</span> <span class='kw'>%>%</span>
|
|
<span class='fu'>image_to_mosaic</span>(<span class='kw'>img_size</span> <span class='kw'>=</span> <span class='fl'>24</span>,
|
|
<span class='kw'>color_table</span> <span class='kw'>=</span> <span class='no'>lego_colors_no_blue</span>) <span class='kw'>%>%</span>
|
|
<span class='fu'><a href='build_mosaic.html'>build_mosaic</a></span>()</div><div class='img'><img src='image_to_mosaic-3.png' alt='' width='700' height='433' /></div><div class='input'> <span class='co'># }</span>
|
|
|
|
<span class='co'>#Color matching is done with the 'farver' package. There are different method.</span>
|
|
<span class='co'># Change the method to euclidean (RGB distance matching)</span>
|
|
<span class='co'># \donttest{</span>
|
|
<span class='no'>demo_image</span> <span class='kw'>%>%</span>
|
|
<span class='fu'>image_to_mosaic</span>(<span class='kw'>img_size</span> <span class='kw'>=</span> <span class='fl'>24</span>,
|
|
<span class='kw'>method</span> <span class='kw'>=</span> <span class='st'>"euclidean"</span>) <span class='kw'>%>%</span>
|
|
<span class='fu'><a href='build_mosaic.html'>build_mosaic</a></span>()</div><div class='img'><img src='image_to_mosaic-4.png' alt='' width='700' height='433' /></div><div class='input'> <span class='co'># }</span>
|
|
|
|
<span class='co'>#Change the default size of bricks to use.</span>
|
|
<span class='co'># In this extreme example, use 4x6s for the background, 1x1 everywhere else</span>
|
|
<span class='co'># \donttest{</span>
|
|
<span class='no'>demo_image</span> <span class='kw'>%>%</span>
|
|
<span class='fu'>image_to_mosaic</span>(<span class='kw'>img_size</span> <span class='kw'>=</span> <span class='fl'>24</span>,
|
|
<span class='kw'>use_bricks</span> <span class='kw'>=</span> <span class='fu'><a href='https://rdrr.io/r/base/c.html'>c</a></span>(<span class='st'>"4x6"</span>)) <span class='kw'>%>%</span>
|
|
<span class='fu'><a href='build_mosaic.html'>build_mosaic</a></span>()</div><div class='img'><img src='image_to_mosaic-5.png' alt='' width='700' height='433' /></div><div class='input'> # }
|
|
|
|
|
|
</div></pre>
|
|
</div>
|
|
<div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
|
|
<nav id="toc" data-toggle="toc" class="sticky-top">
|
|
<h2 data-toc-skip>Contents</h2>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<footer>
|
|
<div class="copyright">
|
|
<p>Developed by Ryan Timpe.</p>
|
|
</div>
|
|
|
|
<div class="pkgdown">
|
|
<p>Site built with <a href="https://pkgdown.r-lib.org/">pkgdown</a> 1.5.1.</p>
|
|
</div>
|
|
|
|
</footer>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
</html>
|
|
|
|
|