Detect overflow in Differential, add auto strat
This commit is contained in:
parent
1e04ac54cb
commit
19d9b99091
153
Notebooks/Differential.ipynb
Normal file
153
Notebooks/Differential.ipynb
Normal file
@ -0,0 +1,153 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Detect overflow with two rasters"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"im1 = np.arange(16*9*1).astype(np.uint8).reshape(16,9,1)\n",
|
||||
"\n",
|
||||
"im2 = im1.copy()\n",
|
||||
"f = np.random.random(im2.shape) < .2\n",
|
||||
"im2[f] += 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Detection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"(im2 > im1).any()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"old_settings = np.seterr(all='ignore')\n",
|
||||
"np.seterr(all='print')\n",
|
||||
"np.unique(im1 - im2)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Detect overflow in a Stack"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"stack = np.arange(16*9*4).astype(np.uint8).reshape(16,9,4)\n",
|
||||
"stack.shape"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"(stack[:,:,1:] > stack[:,:,:-1]).any()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"np.subtract(stack[:,:,:-1], stack[:,:,1:], dtype=stack.dtype)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"stack.dtype.str\n",
|
||||
"np.dtype('|i1')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"t = str(stack.dtype)\n",
|
||||
"np.dtype('int8')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"t.replace('u', '')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"t.lstrip('u')"
|
||||
]
|
||||
}
|
||||
],
|
||||
"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
|
||||
}
|
@ -52,10 +52,10 @@
|
||||
"t = ld2dap.Treshold(1e4)\n",
|
||||
"a = ld2dap.SelfDualAttributeProfiles(area = [1e3, 1e6], sd=[.4,.6,.8], moi=[.5,.9])\n",
|
||||
"f = ld2dap.Differential()\n",
|
||||
"d = ld2dap.ShowFig(stack_id='all', symb=True)\n",
|
||||
"d = ld2dap.ShowFig(stack_id='all', symb=False)\n",
|
||||
"o = ld2dap.RawOutput()\n",
|
||||
"\n",
|
||||
"o.input = f\n",
|
||||
"o.input = a\n",
|
||||
"d.input = f\n",
|
||||
"f.input = a\n",
|
||||
"a.input = t\n",
|
||||
@ -64,6 +64,15 @@
|
||||
"d.run()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"(o.data[:,:,0] == o.data[:,:,13]).all()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
|
@ -12,8 +12,9 @@ from ld2dap.core import Filter, Stack
|
||||
import numpy as np
|
||||
|
||||
class Differential(Filter):
|
||||
def __init__(self):
|
||||
def __init__(self, overflow='auto'):
|
||||
super().__init__(self.__class__.__name__)
|
||||
self.overflow = overflow
|
||||
|
||||
def _process(self, data, metadata):
|
||||
self.logger.info('Run differential on stack of size {}'.format(data.shape))
|
||||
@ -23,8 +24,20 @@ class Differential(Filter):
|
||||
offset = 0
|
||||
for stack in metadata:
|
||||
self.logger.debug('{}'.format(stack))
|
||||
raster_list.append(data[:,:,stack.begin+1:stack.end] -
|
||||
data[:,:,stack.begin:stack.end-1])
|
||||
overflow = (data[:, :, stack.begin:stack.end-1] >
|
||||
data[:, :, stack.begin+1:stack.end]).any() and \
|
||||
str(data.dtype).startswith('u')
|
||||
|
||||
dtype = data.dtype
|
||||
if overflow:
|
||||
self.logger.warn('Overflow detected')
|
||||
if self.overflow == 'auto':
|
||||
dtype = np.dtype(str(data.dtype).lstrip('u'))
|
||||
self.logger.info('Changing dtype from {} to {}'.format(
|
||||
data.dtype, dtype))
|
||||
|
||||
raster_list.append(np.subtract(data[:, :, stack.begin+1:stack.end],
|
||||
data[:, :, stack.begin:stack.end-1], dtype=dtype))
|
||||
|
||||
size_new = stack.end - stack.begin - 1
|
||||
stack_new = Stack(offset, size_new)
|
||||
|
@ -45,6 +45,7 @@ class ShowFig(Output):
|
||||
plt.rc('text', usetex=True)
|
||||
f1.set_title('${}$'.format(''.join(filter(None, stack.symb[i]))))
|
||||
else:
|
||||
plt.rc('text', usetex=False)
|
||||
f1.set_title(' > '.join(filter(None, stack.desc[i])))
|
||||
|
||||
if self.fname is not None:
|
||||
|
Loading…
Reference in New Issue
Block a user