HVR II
This commit is contained in:
parent
ad68cafe1e
commit
ff8fc08fe3
204
Notebooks/HVR Interpolations.ipynb
Normal file
204
Notebooks/HVR Interpolations.ipynb
Normal file
@ -0,0 +1,204 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# ~~FAILURE~~ Difficulties"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"from pathlib import Path\n",
|
||||
"import numpy as np\n",
|
||||
"from scipy.interpolate import griddata\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import laspy\n",
|
||||
"\n",
|
||||
"triskele_path = Path('../triskele/python/')\n",
|
||||
"sys.path.append(str(triskele_path.resolve()))\n",
|
||||
"import triskele\n",
|
||||
"\n",
|
||||
"figsize = np.array((16, 3)) * 1.5"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 3D Interpolations\n",
|
||||
"\n",
|
||||
"### Nearest neighbour\n",
|
||||
"\n",
|
||||
"Nearest neighbour from griddata works directly with data $\\in \\!R^3$.\n",
|
||||
"\n",
|
||||
"### Linear and cubic Interpolations\n",
|
||||
"\n",
|
||||
"We tried to interpolate (linear) 3D data in a regular 3D grid with no success so far. We tried:\n",
|
||||
"\n",
|
||||
"- `scipy.interpolate.griddata` is taking forever\n",
|
||||
"- `scipy.ndimage.interpolation.map_coordinates`\n",
|
||||
"- `scipy.interpolate.RegularGridInterpolator`\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from scipy.ndimage.interpolation import map_coordinates\n",
|
||||
"from scipy.interpolate import RegularGridInterpolator\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"map_coordinates(np.ma.masked_invalid(voxels[:,:,0]).data, np.nonzero(fnan[:,:,0]))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from scipy.interpolate import RegularGridInterpolator\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"x = np.linspace(1, 4, 11)\n",
|
||||
"y = np.linspace(4, 7, 22)\n",
|
||||
"z = np.linspace(7, 9, 33)\n",
|
||||
"x, y, z"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"np.meshgrid(x, y, z, indexing='ij', sparse=True)[2].shape"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rgi = RegularGridInterpolator((C1.x, C1.y, C1.z), C1.intensity)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"raster = voksel[:,:,:2]\n",
|
||||
"x = np.arange(0, raster.shape[1])\n",
|
||||
"y = np.arange(0, raster.shape[0])\n",
|
||||
"z = np.arange(0, raster.shape[2])\n",
|
||||
"\n",
|
||||
"raster = np.ma.masked_invalid(raster)\n",
|
||||
"xx, yy, zz = np.meshgrid(x, y, z)\n",
|
||||
"#get only the valid values\n",
|
||||
"x1 = xx[~raster.mask]\n",
|
||||
"y1 = yy[~raster.mask]\n",
|
||||
"z1 = zz[~raster.mask]\n",
|
||||
"\n",
|
||||
"newraster = raster[~raster.mask]\n",
|
||||
"\n",
|
||||
"gdr = griddata((x1, y1, z1), newraster.ravel(), (xx, yy, zz), method='linear')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"voksel_i = voksel.copy()\n",
|
||||
"voksel_i = r.interpolate(voksel_i, 'nearest')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"step = 1\n",
|
||||
"layers = gdr.shape[2]\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=figsize * np.array((1, layers)))\n",
|
||||
"\n",
|
||||
"for i in range(0, layers, step):\n",
|
||||
" plt.subplot(layers, 1, i / step + 1)\n",
|
||||
" plt.title('Layer {}'.format(i))\n",
|
||||
" plt.imshow(voksel_i[:,:,i])\n",
|
||||
" plt.imsave('../Res/voxel_layer_{}i.png'.format(i), voksel_i[:,:,i])\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"voksel_il = voksel.copy()\n",
|
||||
"voksel_il = r.interpolate(voksel_il, 'linear')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"step = 1\n",
|
||||
"layers = voksel_il.shape[2]\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=figsize * np.array((1, layers)))\n",
|
||||
"\n",
|
||||
"for i in range(0, layers, step):\n",
|
||||
" plt.subplot(layers, 1, i / step + 1)\n",
|
||||
" plt.title('Layer {}'.format(i))\n",
|
||||
" plt.imshow(voksel_i[:,:,i])\n",
|
||||
" plt.imsave('../Res/voxel_layer_{}il.png'.format(i), voksel_il[:,:,i])\n",
|
||||
"plt.show()"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
@ -389,7 +389,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Function "
|
||||
"## Test Function "
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -462,56 +462,13 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# TMP"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"dfc_c1 = triskele.read('../Data/phase1_rasters/Intensity_C1/UH17_GI1F051_TR.tif')\n",
|
||||
"auto_filter(dfc_c1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plt.imshow(dfc_c1)\n",
|
||||
"plt.show()\n",
|
||||
"plt.imsave('../Res/dfc_c1.png', dfc_c1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def rasterize_cache(spatial, values, resolution=1., method='linear', reverse_alt=False, cache_dir='/tmp'):\n",
|
||||
" \"\"\"Cache layer for rasterize\"\"\"\n",
|
||||
" \n",
|
||||
" cache_dir = Path(cache_dir)\n",
|
||||
" name = '{}_{}_{}_{}{}'.format(data['name'], field, str(resolution).replace('.', '_'), method,\n",
|
||||
" '_reversed' if reverse_alt else '')\n",
|
||||
" png_file = cache_dir.joinpath(Path(name + '.png'))\n",
|
||||
" tif_file = cache_dir.joinpath(Path(name + '.tif'))\n",
|
||||
" \n",
|
||||
" if tif_file.exists() :\n",
|
||||
" print ('WARNING: Loading cached result {}'.format(tif_file))\n",
|
||||
" raster = triskele.read(tif_file)\n",
|
||||
" else: \n",
|
||||
" raster = rasterizer.rasterize(spatial, values, resolution, method, reverse_alt)\n",
|
||||
" triskele.write(tif_file, raster)\n",
|
||||
" plt.imsave(png_file, raster)\n",
|
||||
" \n",
|
||||
" return raster\n",
|
||||
"# HVR II\n",
|
||||
"\n",
|
||||
"rasterize_cache(spatial_data, C1['z'], 10, cache_dir='../Res/TMP')"
|
||||
"We will exploit the 3D to interpolate no data a much more precise way. What we need is to record empty cells where the laser do not encounter objects when previously we let no data value. This will allow better understanding of the scene before applying interpolation strategies in 3D.\n",
|
||||
"\n",
|
||||
"## Shot vector\n",
|
||||
"\n",
|
||||
"Find a way to determine the laser path in the scene."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -520,9 +477,420 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"td = Path(Path('/tmp'))\n",
|
||||
"tf = Path('test.png')\n",
|
||||
"td.joinpath(tf).j"
|
||||
"infile = laspy.file.File('../Data/lidar/C1/272056_3289689.las')\n",
|
||||
"for a in infile.point_format:\n",
|
||||
" print(a.name)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"infile.header.version"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"For each point we have its coordinate $x, y$ and $z$ and the angle `scan_angle_rank` (signed and rounded to the nearest integer) at which the laser was output :\n",
|
||||
"\n",
|
||||
"- 0 is nadir\n",
|
||||
"- -90 is the left of the aircraft"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plt.hist(infile.scan_angle_rank, 100)\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"What we have:\n",
|
||||
"\n",
|
||||
"- Point coordinates\n",
|
||||
"- $\\alpha$ (roll) angle\n",
|
||||
"\n",
|
||||
"What we don't have:\n",
|
||||
"\n",
|
||||
"- $\\beta$ (pitch) angle : fixed angle of the captor + pitch of the aircraft\n",
|
||||
"- $\\gamma$ (yaw) angle : yaw of the aircraft, could be derived from LiDAR point cloud coordinates and gps time ?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Assert nadir vectors\n",
|
||||
"\n",
|
||||
"### Create voxels"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"sys.path.append(\"..\")\n",
|
||||
"import raster_assistant as ra\n",
|
||||
"import rasterizer as r"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"C1 = ra.bulk_load('../Data/lidar/C1', 'C1', filter_treshold=0, dtype=np.float32)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"resolution = 1.\n",
|
||||
"bins = np.rint((C1.spatial.max(axis=0) - C1.spatial.min(axis=0)) / resolution).astype(int)\n",
|
||||
"bins"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"voxels_histo, edges = np.histogramdd(C1.spatial, bins=bins)\n",
|
||||
"voxels_histo_w, edges = np.histogramdd(C1.spatial, bins=bins, weights=C1.intensity)\n",
|
||||
"\n",
|
||||
"voxels = (voxels_histo_w / voxels_histo).T"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"voxels.shape"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Prototype"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"voksel = voxels.copy()\n",
|
||||
"\n",
|
||||
"for z, y, x in zip(*np.nonzero(np.logical_not(np.isnan(voxels)))):\n",
|
||||
" voksel[z:,y,x] = 0.\n",
|
||||
" \n",
|
||||
"f = ~np.isnan(voxels)\n",
|
||||
"voksel[f] = voxels[f]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"step = 7\n",
|
||||
"layers = voksel.shape[0]\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=figsize * np.array((1, layers)))\n",
|
||||
"\n",
|
||||
"for i in range(0, layers, step):\n",
|
||||
" plt.subplot(layers, 1, i / step + 1)\n",
|
||||
" plt.title('Layer {}'.format(i))\n",
|
||||
" plt.imshow(voksel[i])\n",
|
||||
" plt.imsave('../Res/voxel_layer_{}.png'.format(i), voksel[i])\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"voksel_i = voksel.copy()\n",
|
||||
"voksel_i = r.interpolate(voksel_i, 'nearest')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"voksel_i_disp = voksel_i.copy()\n",
|
||||
"voksel_i_disp[voksel_i_disp > 60e3] = 60e3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"step = 7\n",
|
||||
"layers = voksel_i.shape[0]\n",
|
||||
"\n",
|
||||
"plt.figure(figsize=figsize * np.array((1, layers)))\n",
|
||||
"\n",
|
||||
"for i in range(0, layers, step):\n",
|
||||
" plt.subplot(layers, 1, i / step + 1)\n",
|
||||
" plt.title('Layer {}'.format(i))\n",
|
||||
" plt.imshow(voksel_i_disp[i])\n",
|
||||
" plt.imsave('../Res/voxels_layers/voxel_layer_{}i.png'.format(layers - i), voksel_i_disp[i])\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"layers = voksel_i.shape[0]\n",
|
||||
"\n",
|
||||
"raster = np.zeros_like(voksel_i[0])\n",
|
||||
"\n",
|
||||
"for i in reversed(range(layers)):\n",
|
||||
" nan_filter = raster == 0\n",
|
||||
" raster[nan_filter] = voksel_i[i][nan_filter]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plt.imshow(raster)\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"raster.min()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plt.imshow((raster == 32.) * 1.)\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plt.imsave('../Res/raster-vhr2_1.png', raster[::-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from mpl_toolkits.mplot3d import Axes3D\n",
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"N1 = 10\n",
|
||||
"N2 = 10\n",
|
||||
"N3 = 10\n",
|
||||
"ma = np.random.choice([0,1.,2.], size=(N1,N2,N3), p=[0.98, 0.01, 0.01])\n",
|
||||
"ma = ma[:,:,:,np.newaxis]\n",
|
||||
"display(ma.shape)\n",
|
||||
"\n",
|
||||
"fig = plt.figure()\n",
|
||||
"ax = fig.gca(projection='3d')\n",
|
||||
"ax.set_aspect('equal')\n",
|
||||
"\n",
|
||||
"ax.voxels(ma != [0], edgecolor=\"k\", facecolors=ma[ma!=0])\n",
|
||||
"\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"voksel_i.shape"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Write voxels in LAS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ofile = laspy.file.File('../Res/voxels.las', mode='w', header=infile.header)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"z, y, x = np.indices(voksel_i.shape)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"f = voksel_i != 0\n",
|
||||
"f.sum()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"x[f], y[f], z[f], voksel_i[f]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**TODO**: Try meshgrid"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ofile.x = x[f] * resolution\n",
|
||||
"ofile.y = y[f] * resolution\n",
|
||||
"ofile.z = z[f] * resolution\n",
|
||||
"ofile.intensity = voksel_i[f]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ofile.points"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ofile.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"(ma == [0.]).shape"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ma[...,0].shape"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"mpl_vox = voksel_i != 0\n",
|
||||
"mpl_col = np.zeros(voksel_i.shape + (3,))\n",
|
||||
"mpl_col[...,0] = 1."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"%matplotlib ipympl\n",
|
||||
"\n",
|
||||
"xmin = 0; xmax = 10\n",
|
||||
"ymin = 0; ymax = 10\n",
|
||||
"zmin = 0; zmax = 10\n",
|
||||
"\n",
|
||||
"ix, iy, iz = np.indices(mpl_vox.shape)\n",
|
||||
"fx = (ix >= xmin) & (ix < xmax)\n",
|
||||
"fy = (iy >= ymin) & (iy < ymax)\n",
|
||||
"fz = (iz >= zmin) & (iz < zmax)\n",
|
||||
"f = fx & fy & fz\n",
|
||||
"shape = (xmax - xmin, ymax - ymin, zmax - zmin)\n",
|
||||
"\n",
|
||||
"fig = plt.figure(figsize=figsize)\n",
|
||||
"ax = fig.gca(projection='3d')\n",
|
||||
"ax.set_aspect('equal')\n",
|
||||
"\n",
|
||||
"ax.voxels(mpl_vox[f].reshape(shape), edgecolor=\"k\", facecolors=mpl_col[f].reshape(shape + (3,)))\n",
|
||||
"\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -40,10 +40,26 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"C1 = ra.bulk_load('../Data/lidar/C1', 'C1', filter_treshold=.5, dtype=np.float32)\n",
|
||||
"C2 = ra.bulk_load('../Data/lidar/C2', 'C2', filter_treshold=.5, dtype=np.float32)\n",
|
||||
"C3 = ra.bulk_load('../Data/lidar/C3', 'C3', filter_treshold=.5, dtype=np.float32)\n",
|
||||
"C123 = ra.bulk_load('../Data/lidar', 'C123', filter_treshold=.5, dtype=np.float32)"
|
||||
"C1 = ra.bulk_load('../Data/lidar/C1', 'C1', filter_treshold=0, dtype=np.float32)\n",
|
||||
"#C2 = ra.bulk_load('../Data/lidar/C2', 'C2', filter_treshold=.5, dtype=np.float32)\n",
|
||||
"#C3 = ra.bulk_load('../Data/lidar/C3', 'C3', filter_treshold=.5, dtype=np.float32)\n",
|
||||
"#C123 = ra.bulk_load('../Data/lidar', 'C123', filter_treshold=.5, dtype=np.float32)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# TMP"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"raster = ra.rasterize_cache(C1, 'intensity', 1., 'nearest', True, cache_dir='../Res/')"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -1,572 +0,0 @@
|
||||
|
||||
% Default to the notebook output style
|
||||
|
||||
|
||||
|
||||
|
||||
% Inherit from the specified cell style.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\documentclass[11pt]{article}
|
||||
|
||||
|
||||
|
||||
\usepackage[T1]{fontenc}
|
||||
% Nicer default font (+ math font) than Computer Modern for most use cases
|
||||
\usepackage{mathpazo}
|
||||
|
||||
% Basic figure setup, for now with no caption control since it's done
|
||||
% automatically by Pandoc (which extracts  syntax from Markdown).
|
||||
\usepackage{graphicx}
|
||||
% We will generate all images so they have a width \maxwidth. This means
|
||||
% that they will get their normal width if they fit onto the page, but
|
||||
% are scaled down if they would overflow the margins.
|
||||
\makeatletter
|
||||
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth
|
||||
\else\Gin@nat@width\fi}
|
||||
\makeatother
|
||||
\let\Oldincludegraphics\includegraphics
|
||||
% Set max figure width to be 80% of text width, for now hardcoded.
|
||||
\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=.8\maxwidth]{#1}}
|
||||
% Ensure that by default, figures have no caption (until we provide a
|
||||
% proper Figure object with a Caption API and a way to capture that
|
||||
% in the conversion process - todo).
|
||||
\usepackage{caption}
|
||||
\DeclareCaptionLabelFormat{nolabel}{}
|
||||
\captionsetup{labelformat=nolabel}
|
||||
|
||||
\usepackage{adjustbox} % Used to constrain images to a maximum size
|
||||
\usepackage{xcolor} % Allow colors to be defined
|
||||
\usepackage{enumerate} % Needed for markdown enumerations to work
|
||||
\usepackage{geometry} % Used to adjust the document margins
|
||||
\usepackage{amsmath} % Equations
|
||||
\usepackage{amssymb} % Equations
|
||||
\usepackage{textcomp} % defines textquotesingle
|
||||
% Hack from http://tex.stackexchange.com/a/47451/13684:
|
||||
\AtBeginDocument{%
|
||||
\def\PYZsq{\textquotesingle}% Upright quotes in Pygmentized code
|
||||
}
|
||||
\usepackage{upquote} % Upright quotes for verbatim code
|
||||
\usepackage{eurosym} % defines \euro
|
||||
\usepackage[mathletters]{ucs} % Extended unicode (utf-8) support
|
||||
\usepackage[utf8x]{inputenc} % Allow utf-8 characters in the tex document
|
||||
\usepackage{fancyvrb} % verbatim replacement that allows latex
|
||||
\usepackage{grffile} % extends the file name processing of package graphics
|
||||
% to support a larger range
|
||||
% The hyperref package gives us a pdf with properly built
|
||||
% internal navigation ('pdf bookmarks' for the table of contents,
|
||||
% internal cross-reference links, web links for URLs, etc.)
|
||||
\usepackage{hyperref}
|
||||
\usepackage{longtable} % longtable support required by pandoc >1.10
|
||||
\usepackage{booktabs} % table support for pandoc > 1.12.2
|
||||
\usepackage[inline]{enumitem} % IRkernel/repr support (it uses the enumerate* environment)
|
||||
\usepackage[normalem]{ulem} % ulem is needed to support strikethroughs (\sout)
|
||||
% normalem makes italics be italics, not underlines
|
||||
|
||||
|
||||
|
||||
|
||||
% Colors for the hyperref package
|
||||
\definecolor{urlcolor}{rgb}{0,.145,.698}
|
||||
\definecolor{linkcolor}{rgb}{.71,0.21,0.01}
|
||||
\definecolor{citecolor}{rgb}{.12,.54,.11}
|
||||
|
||||
% ANSI colors
|
||||
\definecolor{ansi-black}{HTML}{3E424D}
|
||||
\definecolor{ansi-black-intense}{HTML}{282C36}
|
||||
\definecolor{ansi-red}{HTML}{E75C58}
|
||||
\definecolor{ansi-red-intense}{HTML}{B22B31}
|
||||
\definecolor{ansi-green}{HTML}{00A250}
|
||||
\definecolor{ansi-green-intense}{HTML}{007427}
|
||||
\definecolor{ansi-yellow}{HTML}{DDB62B}
|
||||
\definecolor{ansi-yellow-intense}{HTML}{B27D12}
|
||||
\definecolor{ansi-blue}{HTML}{208FFB}
|
||||
\definecolor{ansi-blue-intense}{HTML}{0065CA}
|
||||
\definecolor{ansi-magenta}{HTML}{D160C4}
|
||||
\definecolor{ansi-magenta-intense}{HTML}{A03196}
|
||||
\definecolor{ansi-cyan}{HTML}{60C6C8}
|
||||
\definecolor{ansi-cyan-intense}{HTML}{258F8F}
|
||||
\definecolor{ansi-white}{HTML}{C5C1B4}
|
||||
\definecolor{ansi-white-intense}{HTML}{A1A6B2}
|
||||
|
||||
% commands and environments needed by pandoc snippets
|
||||
% extracted from the output of `pandoc -s`
|
||||
\providecommand{\tightlist}{%
|
||||
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
|
||||
% Add ',fontsize=\small' for more characters per line
|
||||
\newenvironment{Shaded}{}{}
|
||||
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}}
|
||||
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}}
|
||||
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
|
||||
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
|
||||
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
|
||||
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
|
||||
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
|
||||
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}}
|
||||
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}}
|
||||
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
|
||||
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}}
|
||||
\newcommand{\RegionMarkerTok}[1]{{#1}}
|
||||
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
|
||||
\newcommand{\NormalTok}[1]{{#1}}
|
||||
|
||||
% Additional commands for more recent versions of Pandoc
|
||||
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{{#1}}}
|
||||
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
|
||||
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
|
||||
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{{#1}}}
|
||||
\newcommand{\ImportTok}[1]{{#1}}
|
||||
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{{#1}}}}
|
||||
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
|
||||
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
|
||||
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{{#1}}}
|
||||
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}}
|
||||
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{{#1}}}
|
||||
\newcommand{\BuiltInTok}[1]{{#1}}
|
||||
\newcommand{\ExtensionTok}[1]{{#1}}
|
||||
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{{#1}}}
|
||||
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{{#1}}}
|
||||
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
|
||||
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
|
||||
|
||||
|
||||
% Define a nice break command that doesn't care if a line doesn't already
|
||||
% exist.
|
||||
\def\br{\hspace*{\fill} \\* }
|
||||
% Math Jax compatability definitions
|
||||
\def\gt{>}
|
||||
\def\lt{<}
|
||||
% Document parameters
|
||||
\title{Triskele Python Demo}
|
||||
|
||||
|
||||
|
||||
|
||||
% Pygments definitions
|
||||
|
||||
\makeatletter
|
||||
\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax%
|
||||
\let\PY@ul=\relax \let\PY@tc=\relax%
|
||||
\let\PY@bc=\relax \let\PY@ff=\relax}
|
||||
\def\PY@tok#1{\csname PY@tok@#1\endcsname}
|
||||
\def\PY@toks#1+{\ifx\relax#1\empty\else%
|
||||
\PY@tok{#1}\expandafter\PY@toks\fi}
|
||||
\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{%
|
||||
\PY@it{\PY@bf{\PY@ff{#1}}}}}}}
|
||||
\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}}
|
||||
|
||||
\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}}
|
||||
\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}}
|
||||
\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
|
||||
\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}}
|
||||
\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit}
|
||||
\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf}
|
||||
\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}}
|
||||
\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}
|
||||
\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@fm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
|
||||
\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
|
||||
\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
|
||||
\expandafter\def\csname PY@tok@vm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sa\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@dl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
|
||||
\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ch\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@cpf\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
|
||||
|
||||
\def\PYZbs{\char`\\}
|
||||
\def\PYZus{\char`\_}
|
||||
\def\PYZob{\char`\{}
|
||||
\def\PYZcb{\char`\}}
|
||||
\def\PYZca{\char`\^}
|
||||
\def\PYZam{\char`\&}
|
||||
\def\PYZlt{\char`\<}
|
||||
\def\PYZgt{\char`\>}
|
||||
\def\PYZsh{\char`\#}
|
||||
\def\PYZpc{\char`\%}
|
||||
\def\PYZdl{\char`\$}
|
||||
\def\PYZhy{\char`\-}
|
||||
\def\PYZsq{\char`\'}
|
||||
\def\PYZdq{\char`\"}
|
||||
\def\PYZti{\char`\~}
|
||||
% for compatibility with earlier versions
|
||||
\def\PYZat{@}
|
||||
\def\PYZlb{[}
|
||||
\def\PYZrb{]}
|
||||
\makeatother
|
||||
|
||||
|
||||
% Exact colors from NB
|
||||
\definecolor{incolor}{rgb}{0.0, 0.0, 0.5}
|
||||
\definecolor{outcolor}{rgb}{0.545, 0.0, 0.0}
|
||||
|
||||
|
||||
|
||||
|
||||
% Prevent overflowing lines due to hard-to-break entities
|
||||
\sloppy
|
||||
% Setup hyperref package
|
||||
\hypersetup{
|
||||
breaklinks=true, % so long urls are correctly broken across lines
|
||||
colorlinks=true,
|
||||
urlcolor=urlcolor,
|
||||
linkcolor=linkcolor,
|
||||
citecolor=citecolor,
|
||||
}
|
||||
% Slightly bigger margins than the latex defaults
|
||||
|
||||
\geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in}
|
||||
|
||||
|
||||
|
||||
\begin{document}
|
||||
|
||||
|
||||
\maketitle
|
||||
|
||||
|
||||
|
||||
|
||||
\hypertarget{init}{%
|
||||
\section{Init}\label{init}}
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}1}]:} \PY{k+kn}{import} \PY{n+nn}{numpy} \PY{k}{as} \PY{n+nn}{np}
|
||||
\PY{k+kn}{import} \PY{n+nn}{matplotlib}\PY{n+nn}{.}\PY{n+nn}{pyplot} \PY{k}{as} \PY{n+nn}{plt}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
\hypertarget{import-triskele}{%
|
||||
\subsection{Import Triskele}\label{import-triskele}}
|
||||
|
||||
I did not install triskele-python on my system folders, so this is a
|
||||
trick to load the module outside the triskele project.
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}2}]:} \PY{k+kn}{import} \PY{n+nn}{sys}
|
||||
\PY{n}{sys}\PY{o}{.}\PY{n}{path}\PY{o}{.}\PY{n}{append}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{../triskele/python/}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} \PY{c+c1}{\PYZsh{} Change with your triskele install path}
|
||||
\PY{k+kn}{import} \PY{n+nn}{triskele}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
\hypertarget{simple-test}{%
|
||||
\section{Simple test}\label{simple-test}}
|
||||
|
||||
Just to test the python import and the triskele compilation. Create an
|
||||
array with random values.
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}3}]:} \PY{n}{raster} \PY{o}{=} \PY{n}{np}\PY{o}{.}\PY{n}{random}\PY{o}{.}\PY{n}{randint}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{255}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{1000}\PY{p}{,} \PY{l+m+mi}{1000}\PY{p}{)}\PY{p}{)}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
Create the instance of triskele object with the array to filter.
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}4}]:} \PY{n}{ap\PYZus{}random} \PY{o}{=} \PY{n}{triskele}\PY{o}{.}\PY{n}{Triskele}\PY{p}{(}\PY{n}{raster}\PY{p}{)}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
Filter the raster with this method :
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}5}]:} \PY{n}{filtered\PYZus{}raster} \PY{o}{=} \PY{n}{ap\PYZus{}random}\PY{o}{.}\PY{n}{filter}\PY{p}{(}\PY{p}{)}
|
||||
\PY{n+nb}{print}\PY{p}{(}\PY{n}{filtered\PYZus{}raster}\PY{p}{)}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
STDOUT:
|
||||
Input:/tmp/infile.tif [1000,1000] (1 chanels of Byte)
|
||||
Crop topLeft:(0,0) size:[1000,1000] band:[0]
|
||||
Output:/tmp/outfile.tif
|
||||
core count:24
|
||||
|
||||
STDERR:
|
||||
|
||||
*** apGenerator done!
|
||||
|
||||
Leaf Count Mean Min Max
|
||||
max 1 1000000 1000000 1000000
|
||||
|
||||
Comp Count Mean Min Max
|
||||
max 1 347157 347157 347157
|
||||
|
||||
|
||||
Time Sum Count Mean Min Max
|
||||
build tree 00:00:00.086426 1 00:00:00.086426 00:00:00.086426 00:00:00.086426
|
||||
setup 00:00:00.038795 1 00:00:00.038795 00:00:00.038795 00:00:00.038795
|
||||
parents 00:00:00.026013 1 00:00:00.026013 00:00:00.026013 00:00:00.026013
|
||||
merge 00:00:00.005112 1 00:00:00.005112 00:00:00.005112 00:00:00.005112
|
||||
index 00:00:00.006034 1 00:00:00.006034 00:00:00.006034 00:00:00.006034
|
||||
compress 00:00:00.008091 1 00:00:00.008091 00:00:00.008091 00:00:00.008091
|
||||
children 00:00:00.108123 1 00:00:00.108123 00:00:00.108123 00:00:00.108123
|
||||
area 00:00:00.004463 1 00:00:00.004463 00:00:00.004463 00:00:00.004463
|
||||
|
||||
[[194 125 164 {\ldots} 213 182 168]
|
||||
[ 25 48 242 {\ldots} 229 16 143]
|
||||
[ 7 207 212 {\ldots} 112 94 100]
|
||||
{\ldots}
|
||||
[227 180 185 {\ldots} 34 10 229]
|
||||
[129 149 27 {\ldots} 217 66 195]
|
||||
[145 203 251 {\ldots} 186 116 165]]
|
||||
|
||||
\end{Verbatim}
|
||||
|
||||
If there is no error so far everything is okay.
|
||||
|
||||
Theoretically the filtered output should be a copy of the input. (it's
|
||||
not, there is something going on along the edges, we should tell
|
||||
François !)
|
||||
|
||||
\hypertarget{attribute-filter}{%
|
||||
\subsection{Attribute filter}\label{attribute-filter}}
|
||||
|
||||
With \texttt{filter} method you can ask for specific attributes
|
||||
filtering. The results are stacked.
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}6}]:} \PY{n}{filtered\PYZus{}rasters} \PY{o}{=} \PY{n}{ap\PYZus{}random}\PY{o}{.}\PY{n}{filter}\PY{p}{(}\PY{n}{area}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{10}\PY{p}{,} \PY{l+m+mi}{100}\PY{p}{,} \PY{l+m+mf}{1e3}\PY{p}{]}\PY{p}{)}
|
||||
\PY{n+nb}{print}\PY{p}{(}\PY{n}{filtered\PYZus{}rasters}\PY{o}{.}\PY{n}{shape}\PY{p}{)}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
STDOUT:
|
||||
Input:/tmp/infile.tif [1000,1000] (1 chanels of Byte)
|
||||
Crop topLeft:(0,0) size:[1000,1000] band:[0]
|
||||
Output:/tmp/outfile.tif
|
||||
core count:24
|
||||
|
||||
STDERR:
|
||||
|
||||
*** apGenerator done!
|
||||
|
||||
Leaf Count Mean Min Max
|
||||
max 1 1000000 1000000 1000000
|
||||
|
||||
Comp Count Mean Min Max
|
||||
max 1 347157 347157 347157
|
||||
|
||||
|
||||
Time Sum Count Mean Min Max
|
||||
build tree 00:00:00.094336 1 00:00:00.094336 00:00:00.094336 00:00:00.094336
|
||||
setup 00:00:00.040030 1 00:00:00.040030 00:00:00.040030 00:00:00.040030
|
||||
parents 00:00:00.034337 1 00:00:00.034337 00:00:00.034337 00:00:00.034337
|
||||
merge 00:00:00.004679 1 00:00:00.004679 00:00:00.004679 00:00:00.004679
|
||||
index 00:00:00.005624 1 00:00:00.005624 00:00:00.005624 00:00:00.005624
|
||||
compress 00:00:00.007514 1 00:00:00.007514 00:00:00.007514 00:00:00.007514
|
||||
children 00:00:00.113179 1 00:00:00.113179 00:00:00.113179 00:00:00.113179
|
||||
area 00:00:00.004390 1 00:00:00.004390 00:00:00.004390 00:00:00.004390
|
||||
filtering 00:00:00.007614 1 00:00:00.007614 00:00:00.007614 00:00:00.007614
|
||||
|
||||
(1000, 1000, 4)
|
||||
|
||||
\end{Verbatim}
|
||||
|
||||
I don't know if you can see the signature with yout IDE :
|
||||
\texttt{filter(tree=\textquotesingle{}max-tree\textquotesingle{},\ area=None,\ standard\_deviation=None,\ moment\_of\_inertia=None)}
|
||||
|
||||
The parameters are the same than apGenerator from François, I should
|
||||
write the doc\ldots{}
|
||||
|
||||
\hypertarget{advanced-test}{%
|
||||
\section{Advanced test}\label{advanced-test}}
|
||||
|
||||
With a real example.
|
||||
|
||||
Load a TIFF file with 4 bands :
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}7}]:} \PY{n}{raster} \PY{o}{=} \PY{n}{triskele}\PY{o}{.}\PY{n}{read}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{../triskele/data/10m.tif}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
|
||||
\PY{n+nb}{print}\PY{p}{(}\PY{n}{raster}\PY{o}{.}\PY{n}{shape}\PY{p}{)}
|
||||
|
||||
\PY{n}{plt}\PY{o}{.}\PY{n}{imshow}\PY{p}{(}\PY{n}{raster}\PY{p}{)}
|
||||
\PY{n}{plt}\PY{o}{.}\PY{n}{show}\PY{p}{(}\PY{p}{)}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
(291, 685, 4)
|
||||
|
||||
\end{Verbatim}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_14_1.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
Create the instance with some tweaks.
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}8}]:} \PY{n}{ap\PYZus{}10m} \PY{o}{=} \PY{n}{triskele}\PY{o}{.}\PY{n}{Triskele}\PY{p}{(}\PY{n}{raster}\PY{p}{,} \PY{n}{verbose}\PY{o}{=}\PY{k+kc}{False}\PY{p}{)} \PY{c+c1}{\PYZsh{} Verbose False to hide apGenerator gibbering :p}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
Filter as you wish :
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}9}]:} \PY{n}{tree} \PY{o}{=} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{tos\PYZhy{}tree}\PY{l+s+s1}{\PYZsq{}} \PY{c+c1}{\PYZsh{} \PYZob{}\PYZsq{}max\PYZhy{}tree\PYZsq{}, \PYZsq{}min\PYZhy{}tree\PYZsq{}, ...\PYZcb{}}
|
||||
\PY{n}{area} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{100}\PY{p}{,} \PY{l+m+mf}{1e3}\PY{p}{,} \PY{l+m+mf}{1e4}\PY{p}{]}
|
||||
\PY{n}{standard\PYZus{}deviation} \PY{o}{=} \PY{k+kc}{None}
|
||||
\PY{n}{moment\PYZus{}of\PYZus{}inertia} \PY{o}{=} \PY{k+kc}{None}
|
||||
|
||||
\PY{n}{filtered\PYZus{}rasters} \PY{o}{=} \PY{n}{ap\PYZus{}10m}\PY{o}{.}\PY{n}{filter}\PY{p}{(}\PY{n}{tree}\PY{o}{=}\PY{n}{tree}\PY{p}{,} \PY{n}{area}\PY{o}{=}\PY{n}{area}\PY{p}{,} \PY{n}{standard\PYZus{}deviation}\PY{o}{=}\PY{n}{standard\PYZus{}deviation}\PY{p}{,} \PY{n}{moment\PYZus{}of\PYZus{}inertia}\PY{o}{=}\PY{n}{moment\PYZus{}of\PYZus{}inertia}\PY{p}{)}
|
||||
\PY{n+nb}{print}\PY{p}{(}\PY{n}{filtered\PYZus{}rasters}\PY{o}{.}\PY{n}{shape}\PY{p}{)}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
(291, 685, 16)
|
||||
|
||||
\end{Verbatim}
|
||||
|
||||
\hypertarget{display-results}{%
|
||||
\subsection{Display results}\label{display-results}}
|
||||
|
||||
\begin{Verbatim}[commandchars=\\\{\}]
|
||||
{\color{incolor}In [{\color{incolor}10}]:} \PY{k}{for} \PY{n}{i} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{n}{filtered\PYZus{}rasters}\PY{o}{.}\PY{n}{shape}\PY{p}{[}\PY{l+m+mi}{2}\PY{p}{]}\PY{p}{)}\PY{p}{:}
|
||||
\PY{n}{plt}\PY{o}{.}\PY{n}{imshow}\PY{p}{(}\PY{n}{filtered\PYZus{}rasters}\PY{p}{[}\PY{p}{:}\PY{p}{,}\PY{p}{:}\PY{p}{,}\PY{n}{i}\PY{p}{]}\PY{p}{)}
|
||||
\PY{n}{plt}\PY{o}{.}\PY{n}{show}\PY{p}{(}\PY{p}{)}
|
||||
\end{Verbatim}
|
||||
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_0.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_1.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_2.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_3.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_4.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_5.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_6.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_7.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_8.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_9.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_10.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_11.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_12.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_13.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_14.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
\begin{center}
|
||||
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_20_15.png}
|
||||
\end{center}
|
||||
{ \hspace*{\fill} \\}
|
||||
|
||||
|
||||
% Add a bibliography block to the postdoc
|
||||
|
||||
|
||||
|
||||
\end{document}
|
Loading…
Reference in New Issue
Block a user