Source code for ClearMap.ImageProcessing.Differentiation.Gradient
# -*- coding: utf-8 -*-
"""
Gradient
========
Module to calculate various curvature and tube measures in 3D
"""
__author__ = 'Christoph Kirst <christoph.kirst.ck@gmail.com>'
__license__ = 'GPLv3 - GNU General Pulic License v3 (see LICENSE.txt)'
__copyright__ = 'Copyright © 2020 by Christoph Kirst'
__webpage__ = 'http://idisco.info'
__download__ = 'http://www.github.com/ChristophKirst/ClearMap2'
import numpy as np
__all__ = ['gradient', 'gradient_abs', 'gradient_square'];
##############################################################################
### Gradients
##############################################################################
[docs]
def gradient(source):
"""Returns the finite difference gradient vector at each point.
Arguments
---------
source : array
The data source.
Returns
-------
gradient : array
A (ndim,) + source.shape array of the finte differences alon each axis.
"""
ndim = source.ndim;
mm = np.pad(source, (0,1), 'edge');
mm = mm.astype(float);
g = np.zeros((ndim,) + source.shape);
sl0 = [slice(None, -1)] * ndim;
for d in range(ndim):
sl1 = [slice(None, -1)] * ndim;
sl1[d] = slice(1,None);
g[d] = mm[sl1] - mm[sl0];
return d;
[docs]
def gradient_abs(source):
"""Returns the absolute magnitude of the gradient vector at each point.
Arguments
---------
source : array
The data source.
Returns
-------
abs : array
Sum of the absolute values of the gradient vector entries.
"""
d = gradient(source);
return np.sum(np.abs(d), axis = 0);
[docs]
def gradient_square(source):
"""Returns the square sum of the gradient vector entries.
Arguments
---------
source : array
The data source.
Returns
-------
abs : array
Sum of the absolute values of the gradient vector entries.
"""
d = gradient(source);
return np.sum(d*d, axis = 0);