SciPy – 51 – elaborazione di immagini multidimensionali – 3

Continuo da qui, copio qui.

Derivate
Derivative filters can be constructed in several ways. The function `gaussian_filter1d` described in Smoothing filters can be used to calculate derivatives along a given axis using the order parameter. Other derivative filters are the Prewitt and Sobel filters:

• The `prewitt` function calculates a derivative along the given axis.
• The `sobel` function calculates a derivative along the given axis.

The Laplace filter is calculated by the sum of the second derivatives along all axes. Thus, different Laplace filters can be constructed using different second derivative functions. Therefore we provide a general function that takes a function argument to calculate the second derivative along a given direction.

The function `generic_laplace` calculates a laplace filter using the function passed through `derivative2` to calculate second derivatives. The function `derivative2` should have the following signature

`derivative2(input, axis, output, mode, cval, *extra_arguments, **extra_keywords)`

It should calculate the second derivative along the dimension axis. If output is not None it should use that for the output and return `None`, otherwise it should return the result. mode, cval have the usual meaning.

For example:

To demonstrate the use of the extra_arguments argument we could do

or

The following two functions are implemented using `generic_laplace` by providing appropriate functions for the second derivative function:

• The function `laplace` calculates the Laplace using discrete differentiation for the second derivative (i.e. convolution with `[1, -2, 1]`).
• The function `gaussian_laplace` calculates the Laplace filter using `gaussian_filter` to calculate the second derivatives. The standard-deviations of the Gaussian filter along each axis are passed through the parameter `sigma` as a sequence or numbers. If `sigma` is not a sequence but a single number, the standard deviation of the filter is equal along all directions.

The gradient magnitude is defined as the square root of the sum of the squares of the gradients in all directions. Similar to the generic Laplace function there is a `generic_gradient_magnitude` function that calculats the gradient magnitude of an array.

The function `generic_gradient_magnitude` calculates a gradient magnitude using the function passed through derivative to calculate first derivatives. The function derivative should have the following signature

`derivative(input, axis, output, mode, cval, *extra_arguments, **extra_keywords)`

It should calculate the derivative along the dimension axis. If output is not None it should use that for the output and return None, otherwise it should return the result. mode, cval have the usual meaning.

The `extra_arguments` and `extra_keywords` arguments can be used to pass a tuple of extra arguments and a dictionary of named arguments that are passed to derivative at each call.

For example, the `sobel` function fits the required signature

See the documentation of `generic_laplace` for examples of using the extra_arguments and extra_keywords arguments.

The `sobel` and `prewitt` functions fit the required signature and can therefore directly be used with `generic_gradient_magnitude`.

The function `gaussian_gradient_magnitude` calculates the gradient magnitude using `gaussian_filter` to calculate the first derivatives. The standard-deviations of the Gaussian filter along each axis are passed through the parameter `sigma` as a sequence or numbers. If `sigma` is not a sequence but a single number, the standard deviation of the filter is equal along all directions.

Annunci
Posta un commento o usa questo indirizzo per il trackback.