Created
April 29, 2019 00:02
-
-
Save ahartikainen/cc44c0ed974309e47f9914462585b597 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"%matplotlib inline" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"from scipy import signal" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"nx, ny = 100, 100\n", | |
"z = np.random.rand(nx, ny)\n", | |
"\n", | |
"sizex, sizey = 30, 30\n", | |
"x, y = np.mgrid[-sizex:sizex+1, -sizey:sizey+1]\n", | |
"g = np.exp(-0.333*(x**2/float(sizex)+y**2/float(sizey)))\n", | |
"f = g/g.sum()\n", | |
"\n", | |
"z = signal.convolve(z, f, mode='valid')\n", | |
"z = (z - z.min())/(z.max() - z.min())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"cmap = 'viridis' # Perceptual\n", | |
"cmap = 'spectral' # Classic rainbow\n", | |
"cmap = 'seismic' # Classic diverging\n", | |
"cmap = 'Accent' # Needs coolinearity constraint\n", | |
"cmap = 'Dark2' # Needs coolinearity constraint\n", | |
"cmap = 'Paired' # Needs coolinearity constraint, ultimate test!\n", | |
"cmap = 'gist_ncar' # Works with new cool-point start location\n", | |
"cmap = 'Pastel1' # Amazing that it works for start point\n", | |
"cmap = 'Set2' # Difficult\n", | |
"\n", | |
"#cmap = 'Dark2'" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.colorbar.Colorbar at 0x258bf4391d0>" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 360x360 with 2 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"fig = plt.figure(frameon=False)\n", | |
"fig.set_size_inches(5,5)\n", | |
"\n", | |
"ax = plt.Axes(fig, [0., 0., 1., 1.])\n", | |
"ax.set_axis_off()\n", | |
"fig.add_axes(ax)\n", | |
"\n", | |
"# Note: interpolation introduces new colours.\n", | |
"plt.imshow(z, cmap=cmap, aspect='auto')\n", | |
"#plt.imshow(z, cmap=cmap, interpolation='none')\n", | |
"fig.savefig('test.png')\n", | |
"plt.colorbar()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(40, 40)" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"z.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"cmaps = [('Perceptually Uniform Sequential',\n", | |
" ['viridis', 'inferno', 'plasma', 'magma']),\n", | |
" ('Sequential', ['Blues', 'BuGn', 'BuPu',\n", | |
" 'GnBu', 'Greens', 'Greys', 'Oranges', 'OrRd',\n", | |
" 'PuBu', 'PuBuGn', 'PuRd', 'Purples', 'RdPu',\n", | |
" 'Reds', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd']),\n", | |
" ('Sequential (2)', ['afmhot', 'autumn', 'bone', 'cool',\n", | |
" 'copper', 'gist_heat', 'gray', 'hot',\n", | |
" 'pink', 'spring', 'summer', 'winter']),\n", | |
" ('Diverging', ['BrBG', 'bwr', 'coolwarm', 'PiYG', 'PRGn', 'PuOr',\n", | |
" 'RdBu', 'RdGy', 'RdYlBu', 'RdYlGn', 'Spectral',\n", | |
" 'seismic']),\n", | |
" ('Qualitative', ['Accent', 'Dark2', 'Paired', 'Pastel1',\n", | |
" 'Pastel2', 'Set1', 'Set2', 'Set3']),\n", | |
" ('Miscellaneous', ['gist_earth', 'terrain', 'ocean', 'gist_stern',\n", | |
" 'brg', 'CMRmap', 'cubehelix',\n", | |
" 'gnuplot', 'gnuplot2', 'gist_ncar',\n", | |
" 'nipy_spectral', 'jet', 'rainbow',\n", | |
" 'gist_rainbow', 'hsv', 'flag', 'prism'])]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Read an image" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.image.AxesImage at 0x258ccf4a240>" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"img = plt.imread('test.png')\n", | |
"plt.imshow(img)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"img_ = img[..., :-1]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"{(1.0, 0.8509804, 0.18431373): 0,\n", | |
" (0.4, 0.7607843, 0.64705884): 1,\n", | |
" (0.5529412, 0.627451, 0.79607844): 2,\n", | |
" (0.90588236, 0.5411765, 0.7647059): 3,\n", | |
" (0.9882353, 0.5529412, 0.38431373): 4,\n", | |
" (0.6509804, 0.84705883, 0.32941177): 5,\n", | |
" (0.8980392, 0.76862746, 0.5803922): 6,\n", | |
" (0.7019608, 0.7019608, 0.7019608): 7}" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"unique_colors = set()\n", | |
"for c in img_.reshape(-1, 3):\n", | |
" unique_colors.add(tuple(c))\n", | |
"unique_colors = {c : i for i, c in enumerate(unique_colors)}\n", | |
"unique_colors" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from collections import defaultdict" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"differences = {\"top\" : defaultdict(lambda: defaultdict(int)),\n", | |
" \"bottom\" : defaultdict(lambda: defaultdict(int)),\n", | |
" \"left\" : defaultdict(lambda: defaultdict(int)),\n", | |
" \"right\" : defaultdict(lambda: defaultdict(int)),\n", | |
" }\n", | |
"rows, cols = img_.shape[:2]\n", | |
"for row in range(rows):\n", | |
" for col in range(cols):\n", | |
" cval = unique_colors[tuple(img_[row, col])]\n", | |
" if (row != 0):\n", | |
" val = unique_colors[tuple(img_[row-1, col])]\n", | |
" differences[\"top\"][cval][val] += 1\n", | |
" if (row != rows-1):\n", | |
" val = unique_colors[tuple(img_[row+1, col])]\n", | |
" differences[\"bottom\"][cval][val] += 1\n", | |
" if (col != 0):\n", | |
" val = unique_colors[tuple(img_[row, col-1])]\n", | |
" differences[\"left\"][cval][val] += 1\n", | |
" if (col != cols-1):\n", | |
" val = unique_colors[tuple(img_[row, col+1])]\n", | |
" differences[\"right\"][cval][val] += 1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import pandas as pd" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"MM = sum([pd.DataFrame(differences[key]).fillna(0).astype(int) for key in differences]).sort_index().sort_index(axis=1).values\n", | |
"MM[np.diag_indices_from(MM)] = 0" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([2, 1, 2, 2, 2, 2, 2, 1])" | |
] | |
}, | |
"execution_count": 27, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"(MM > 0).sum(1)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([2, 1, 2, 2, 2, 2, 2, 1])" | |
] | |
}, | |
"execution_count": 28, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"(MM > 0).sum(0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 71, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"MM_zeros = np.full_like(MM, np.nan, dtype=float)\n", | |
"for i in np.flatnonzero((MM > 0).sum(1)==1):\n", | |
" MM_zeros[np.argmax(MM[:, i]), i] = 1." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 72, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([[nan, nan, nan, nan, nan, nan, nan, nan],\n", | |
" [nan, nan, nan, nan, nan, nan, nan, nan],\n", | |
" [nan, nan, nan, nan, nan, nan, nan, nan],\n", | |
" [nan, nan, nan, nan, nan, nan, nan, nan],\n", | |
" [nan, 1., nan, nan, nan, nan, nan, nan],\n", | |
" [nan, nan, nan, nan, nan, nan, nan, nan],\n", | |
" [nan, nan, nan, nan, nan, nan, nan, 1.],\n", | |
" [nan, nan, nan, nan, nan, nan, nan, nan]])" | |
] | |
}, | |
"execution_count": 72, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"MM_zeros" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 77, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.image.AxesImage at 0x258ce91ac88>" | |
] | |
}, | |
"execution_count": 77, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.spy(MM, cmap=\"Greys\")\n", | |
"plt.imshow(MM_zeros, cmap=\"viridis_r\")" | |
] | |
} | |
], | |
"metadata": { | |
"anaconda-cloud": {}, | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment