-
-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add logo generation from skimage main repo
- Loading branch information
0 parents
commit c1e627c
Showing
9 changed files
with
534 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
__pycache__ | ||
*~ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
.PHONY: logo | ||
|
||
logo: green_orange_snake.png snake_logo.svg | ||
inkscape --export-png=scikit_image_logo.png --export-dpi=100 \ | ||
--export-area-drawing --export-background-opacity=1 \ | ||
snake_logo.svg | ||
python shrink_logo.py | ||
|
||
green_orange_snake.png: | ||
python scikit_image_logo.py --no-plot | ||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
""" | ||
Script to draw skimage logo using Scipy logo as stencil. The easiest | ||
starting point is the `plot_colorized_logo`. | ||
Original snake image from pixabay [1]_ | ||
.. [1] http://pixabay.com/en/snake-green-toxic-close-yellow-3237/ | ||
""" | ||
import sys | ||
if len(sys.argv) != 2 or sys.argv[1] != '--no-plot': | ||
print("Run with '--no-plot' flag to generate logo silently.") | ||
else: | ||
import matplotlib as mpl | ||
mpl.use('Agg') | ||
import matplotlib.pyplot as plt | ||
|
||
import numpy as np | ||
|
||
import skimage.io as sio | ||
from skimage import img_as_float | ||
from skimage.color import gray2rgb, rgb2gray | ||
from skimage.exposure import rescale_intensity | ||
from skimage.filters import sobel | ||
|
||
import scipy_logo | ||
|
||
# Utility functions | ||
# ================= | ||
|
||
def colorize(image, color, whiten=False): | ||
"""Return colorized image from gray scale image. | ||
The colorized image has values from ranging between black at the lowest | ||
intensity to `color` at the highest. If `whiten=True`, then the color | ||
ranges from `color` to white. | ||
""" | ||
color = np.asarray(color)[np.newaxis, np.newaxis, :] | ||
image = image[:, :, np.newaxis] | ||
if whiten: | ||
# truncate and stretch intensity range to enhance contrast | ||
image = rescale_intensity(image, in_range=(0.3, 1)) | ||
return color * (1 - image) + image | ||
else: | ||
return image * color | ||
|
||
|
||
def prepare_axes(ax): | ||
plt.sca(ax) | ||
ax.xaxis.set_visible(False) | ||
ax.yaxis.set_visible(False) | ||
for spine in ax.spines.values(): | ||
spine.set_visible(False) | ||
|
||
|
||
# Logo generating classes | ||
# ======================= | ||
|
||
class LogoBase(object): | ||
|
||
def __init__(self): | ||
self.logo = scipy_logo.ScipyLogo(radius=self.radius) | ||
self.mask_1 = self.logo.get_mask(self.image.shape, 'upper left') | ||
self.mask_2 = self.logo.get_mask(self.image.shape, 'lower right') | ||
|
||
edges = np.array([sobel(img) for img in self.image.T]).T | ||
# truncate and stretch intensity range to enhance contrast | ||
self.edges = rescale_intensity(edges, in_range=(0, 0.4)) | ||
|
||
def _crop_image(self, image): | ||
w = 2 * self.radius | ||
x, y = self.origin | ||
return image[y:y + w, x:x + w] | ||
|
||
def plot_curve(self, **kwargs): | ||
self.logo.plot_snake_curve(**kwargs) | ||
|
||
|
||
class SnakeLogo(LogoBase): | ||
|
||
radius = 250 | ||
origin = (420, 0) | ||
|
||
def __init__(self): | ||
image = sio.imread('data/snake_pixabay.jpg') | ||
image = self._crop_image(image) | ||
self.image = img_as_float(image) | ||
|
||
LogoBase.__init__(self) | ||
|
||
|
||
snake_color = SnakeLogo() | ||
snake = SnakeLogo() | ||
# turn RGB image into gray image | ||
snake.image = rgb2gray(snake.image) | ||
snake.edges = rgb2gray(snake.edges) | ||
|
||
|
||
# Demo plotting functions | ||
# ======================= | ||
|
||
def plot_colorized_logo(logo, color, edges='light', whiten=False): | ||
"""Convenience function to plot artificially-colored logo. | ||
The upper-left half of the logo is an edge filtered image, while the | ||
lower-right half is unfiltered. | ||
Parameters | ||
---------- | ||
logo : LogoBase instance | ||
color : length-3 sequence of floats or 2 length-3 sequences | ||
RGB color spec. Float values should be between 0 and 1. | ||
edges : {'light'|'dark'} | ||
Specifies whether Sobel edges are drawn light or dark | ||
whiten : bool or 2 bools | ||
If True, a color value less than 1 increases the image intensity. | ||
""" | ||
if not hasattr(color[0], '__iter__'): | ||
color = [color] * 2 # use same color for upper-left & lower-right | ||
if not hasattr(whiten, '__iter__'): | ||
whiten = [whiten] * 2 # use same setting for upper-left & lower-right | ||
|
||
image = gray2rgb(np.ones_like(logo.image)) | ||
mask_img = gray2rgb(logo.mask_2) | ||
mask_edge = gray2rgb(logo.mask_1) | ||
|
||
# Compose image with colorized image and edge-image. | ||
if edges == 'dark': | ||
logo_edge = colorize(1 - logo.edges, color[0], whiten=whiten[0]) | ||
else: | ||
logo_edge = colorize(logo.edges, color[0], whiten=whiten[0]) | ||
logo_img = colorize(logo.image, color[1], whiten=whiten[1]) | ||
image[mask_img] = logo_img[mask_img] | ||
image[mask_edge] = logo_edge[mask_edge] | ||
|
||
logo.plot_curve(lw=5, color='w') # plot snake curve on current axes | ||
plt.imshow(image) | ||
|
||
|
||
if __name__ == '__main__': | ||
# Colors to use for the logo: | ||
red = (1, 0, 0) | ||
blue = (0.35, 0.55, 0.85) | ||
green_orange = ((0.6, 0.8, 0.3), (1, 0.5, 0.1)) | ||
|
||
def plot_all(): | ||
color_list = [red, blue, green_orange] | ||
edge_list = ['light', 'dark'] | ||
f, axes = plt.subplots(nrows=len(edge_list), ncols=len(color_list)) | ||
for axes_row, edges in zip(axes, edge_list): | ||
for ax, color in zip(axes_row, color_list): | ||
prepare_axes(ax) | ||
plot_colorized_logo(snake, color, edges=edges) | ||
plt.tight_layout() | ||
|
||
def plot_official_logo(): | ||
f, ax = plt.subplots() | ||
prepare_axes(ax) | ||
plot_colorized_logo(snake, green_orange, edges='dark', | ||
whiten=(False, True)) | ||
plt.savefig('green_orange_snake.png', bbox_inches='tight') | ||
|
||
plot_all() | ||
plot_official_logo() | ||
|
||
plt.show() |
Oops, something went wrong.