Contents
Vigranumpy exports the functionality of the C++ image processing library VIGRA to Python. It can be invoked by importing the vigra module:
import vigra
Vigranumpy is based on the popular numpy module and uses its ndarray data structure to represent image and volume data. Thus, it is fully interoperable with existing numpy functionality, including various tools for image display such as matplotlib. Since vigranumpy uses boost_python, it is able to support function overloading (which plain Python does not provide), so that calling syntax is largely uniform, regardless of the type and dimension of the input arguments.
Basic calling syntax is similar to C++, with one important difference: Arguments for output images are optional. If no output image is provided, vigranumpy will allocate it as appropriate. In either case, the output image will be returned by the function, for example:
# allocate new result image
smoothImage = vigra.gaussianSmoothing(inputImage, scale)
# reuse and overwrite existing result image
smoothImage = vigra.gaussianSmoothing(inputImage, scale, out=smoothImage)
Unless otherwise noted, all functions expect and create arrays with dtype=numpy.float32.
Another important property is vigranumpy’s indexing convention. In order to be compatible with the index order of the VIGRA C++ version and many other libraries (e.g. Qt and Image Magick), and with standard mathematical notation, images are indexed in the following order:
value = scalarImage[x, y]
value = multibandImage[x, y, channel]
value = scalarVolume[x, y, z]
value = multibandVolume[x, y, z, channel]
where x is the horizontal axis (increasing left to right), and y is the vertical axis (increasing top to bottom). This convention differs from the Python Imaging Library and Matlab, where the spatial indices must be given in reverse order (e.g. scalarImage[y, x]). Either convention has advantages and disadvantages. In the end, we considered compatibility between the Python and C++ versions of VIGRA to be a very critical feature in order to prevent subtle errors when porting from one language to the other, so we went with the [x, y] order described. Note that this convention does not change the internal representation of the data in memory. It only changes the indexing order, so that one can switch between the different conventions by simply swapping axes, for example:
vigraImage = array2D.swapaxes(0, 1).view(vigra.ScalarImage)
array2D = vigraImage.swapaxes(0, 1).view(numpy.ndarray)
vigraVolume = array3D.swapaxes(0, 2).view(vigra.ScalarVolume)
array3D = vigraVolume.swapaxes(0, 2).view(numpy.ndarray)
In order to turn your own C++ VIGRA functions into Python modules, look at the VIGRA wrapper class NumpyArray and the source code of the existing vigranumpy modules.
Vigranumpy can work directly on numpy.ndarrays. However, plain ndarrays do not carry any information about the semantics of the different coordinate axes. For example, one cannot distinguish a 2-dimensional RGB image from a scalar volume data set that happens to contain only three slices. In order to distinguish between arrays that have the same structure but different interpretation, vigra.arraytypes provides the following array classes:
numpy.ndarray
Image
ScalarImage
Vector2Image
Vector3Image
RGBImage
Vector4Image
Volume
ScalarVolume
Vector2Volume
Vector3Volume
RGBVolume
Vector4Volume
Vector6Volume
list
ImagePyramid
where indentation encodes inheritance. Below, we describe Image, ScalarImage, RGBImage, and ImagePyramid in detail, the other classes work analogously. The new array classes serve several purposes:
Semantic interpretation improves code readability.
vigra.arraytypes maximize compatibility with corresponding VIGRA C++ types. In particular, vigra.arraytype constructors ensure that arrays are created with the most appropriate memory layout on the Python side. For example, RGBImage (with dtype=numpy.float32) can be mapped to MultiArrayView<2, RGBValue<float> >.
The distinction of different array types allows for more fine-grained overload resolution and thus improves mapping from Python to C++. For example, gaussianSmoothing() works differently for 2D RGBImages and 3D ScalarVolumes, although both kinds of arrays have the same 3-dimensional memory layout.
The array types help simplify use of the vigranumpy indexing convention:
image[x, y, channel]
volume[x, y, z, channel]
In particular, they overload ‘__str__’ and ‘__repr__’ (used in print), ‘flatten’, and ‘imshow’ (for matplotlib-based image display) so that these functions work in the expected way (i.e. images are printed in horizontal scan order and are displayed upright). Note that other Python imaging modules (such as PIL) use a different indexing convention (namely image[y, x, channel]).
vigra.arraytypes and vigra.ufunc overload numpy.ufunc (i.e. basic mathematical functions for arrays). See Mathematical Functions and Type Coercion for details.
Mapping between C++ types and Python types is controlled by the following two functions:
registerPythonArrayType(key, typeobj, typecheck = None)
Register a mapping from a C++ type (identified by its string ‘key’) to a Python-defined array type ‘typeobj’. This mapping is applied whenever an object of this C++ type is contructed or returned to Python. The registered ‘typeobj’ must be a subclass of numpy.ndarray.
‘key’ can be a fully qualified type (e.g. ‘NumpyArray<2, RGBValue<float32> >’), or it can contain ‘*’ as a placeholder for the value type (e.g. ‘NumpyArray<2, RGBValue<*> >’). The fully qualified key takes precedence over the placeholder key when both have been registered. If no key was registered for a particular C++ type, it is always handled as a plain numpy ndarray. Call ‘listExportedArrayKeys()’ for the list of recognized keys.
Optionally, you can pass a ‘typecheck’ function. This function is executed when an instance of ‘typeobj’ is passed to C++ in order to find out whether conversion into the C++ type identified by ‘key’ is allowed. The function must return ‘True’ or ‘False’. This functionality is useful to distinguish object (e.g. during overload resolution) that have identical memory layout, but different semantics, such as a multiband image (two spatial dimensions and one spectral dimension) vs. a singleband volume (three spatial dimensions).
Usage (see vigra/arraytypes.py for a more realistic example):
class Image(numpy.ndarray):
spatialDimensions = 2
class Volume(numpy.ndarray):
spatialDimensions = 3
def checkImage(obj):
return obj.spatialDimensions == 2
def checkVolume(obj):
return obj.spatialDimensions == 3
registerPythonArrayType('NumpyArray<2, RGBValue<*> >', Image, checkImage)
registerPythonArrayType('NumpyArray<3, Singleband<*> >', Volume, checkVolume)
The current mapping configuration can be obtained by calling listExportedArrayKeys().
Bases: vigra.arraytypes._VigraArray
Constructor:
Parameters: |
|
---|
obj may be one of the following
A shape is compatible when it has two dimensions (width, height) or three dimensions (width, height, channels).
order can be ‘C’ (C order), ‘F’ (Fortran order), ‘V’ (vector-valued order), and ‘A’.
- ‘C’ and ‘F’ order:
- have the usual numpy meaning
- ‘V’ order:
- is an interleaved memory layout that simulates vector- valued pixels or voxels: while the spatial dimensions are arranged as in Fortran order, the major memory-aligned dimension is the channel (i.e. last) dimension. Arrays in ‘V’-order are compatible with vector-valued NumpyArrays. For example, an RGBImage((4,3), uint8) has strides (3, 12, 1) and is compatible with NumpyArray<2, RGBValue<UInt8>, UnstridedArrayTag>.
- ‘A’ order:
- defaults to ‘V’ when a new array is created, and means ‘preserve order’ when an existing array is copied.
In particular, the following compatibility rules apply (Note that compatibility with ‘UnstridedArrayTag’ implies compatibility with ‘StridedArrayTag’. Due to their loop order, VIGRA algorithms are generally more efficient when the memory layout is compatible with ‘UnstridedArrayTag’. T is the array’s dtype.):
- ‘C’:
NumpyArray<2, T, StridedArrayTag> (if channels=1),NumpyArray<3, T, StridedArrayTag>,NumpyArray<4, T, StridedArrayTag> (if channels>1),NumpyArray<2, TinyVector<T, M>, StridedArrayTag> (if channels=M),NumpyArray<2, RGBValue<T>, StridedArrayTag> (if channels=3),NumpyArray<2, Singleband<T>, StridedArrayTag> (if channels=1),NumpyArray<3, Multiband<T>, StridedArrayTag>- ‘F’:
NumpyArray<2, T, UnstridedArrayTag> (if channels=1),NumpyArray<3, T, UnstridedArrayTag>,NumpyArray<4, T, UnstridedArrayTag> (if channels>1),NumpyArray<2, Singleband<T>, UnstridedArrayTag> (if channels=1),NumpyArray<3, Multiband<T>, UnstridedArrayTag>- ‘V’:
NumpyArray<2, T, UnstridedArrayTag> (if channels=1),NumpyArray<3, T, UnstridedArrayTag> (if channels=1),NumpyArray<3, T, StridedArrayTag> (if channels>1),NumpyArray<4, T, StridedArrayTag> (if channels>1),NumpyArray<2, Singleband<T>, UnstridedArrayTag> (if channels=1),NumpyArray<2, TinyVector<T, M>, UnstridedArrayTag> (if channels=M),NumpyArray<2, RGBValue<T>, UnstridedArrayTag> (if channels=3),NumpyArray<3, Multiband<T>, UnstridedArrayTag> (if channels=1),NumpyArray<3, Multiband<T>, StridedArrayTag> (if channels>1)
Convert this image to a Qt QImage (mainly for display purposes). The present image must have 1 or 3 channels, and the resulting QImage will have QImage.Format_Indexed8 or QImage.Format_RGB32 respectively.
The parameter normalize can be used to normalize an image’s value range to 0..255:
- normalize = (nmin, nmax):
- scale & clip image values from nmin..nmax to 0..255
- normalize = nmax:
- lets nmin default to zero, i.e. scale & clip the range 0..nmax to 0..255
- normalize = True: (default)
- scale the image’s actual range min()..max() to 0..255
- normalize = False:
- don’t scale the image’s values
Display this image in a vigra.pyqt.ImageWindow.
The parameter normalize can be used to normalize an image’s value range to 0..255:
- normalize = (nmin, nmax):
- scale & clip image values from nmin..nmax to 0..255
- normalize = nmax:
- lets nmin default to zero, i.e. scale & clip the range 0..nmax to 0..255
- normalize = True: (default)
- scale the image’s actual range min()..max() to 0..255
- normalize = False:
- don’t scale the image’s values
Bases: vigra.arraytypes.Image
Constructor:
Parameters: |
|
---|
obj may be one of the following
A shape is compatible when it has two dimensions (width, height) or three dimensions (width, height, 1).
order can be ‘C’ (C order), ‘F’ (Fortran order), ‘V’ (vector-valued order), and ‘A’.
- ‘C’ and ‘F’ order:
- have the usual numpy meaning
- ‘V’ order:
- is an interleaved memory layout that simulates vector- valued pixels or voxels: while the spatial dimensions are arranged as in Fortran order, the major memory-aligned dimension is the channel (i.e. last) dimension. Arrays in ‘V’-order are compatible with vector-valued NumpyArrays. For example, an RGBImage((4,3), uint8) has strides (3, 12, 1) and is compatible with NumpyArray<2, RGBValue<UInt8>, UnstridedArrayTag>.
- ‘A’ order:
- defaults to ‘V’ when a new array is created, and means ‘preserve order’ when an existing array is copied.
In particular, the following compatibility rules apply (Note that compatibility with ‘UnstridedArrayTag’ implies compatibility with ‘StridedArrayTag’. Due to their loop order, VIGRA algorithms are generally more efficient when the memory layout is compatible with ‘UnstridedArrayTag’. T is the array’s dtype.):
- ‘C’:
NumpyArray<2, T, StridedArrayTag>,NumpyArray<3, T, StridedArrayTag>,NumpyArray<2, Singleband<T>, StridedArrayTag>,NumpyArray<3, Multiband<T>, StridedArrayTag>- ‘F’:
NumpyArray<2, T, UnstridedArrayTag>,NumpyArray<3, T, UnstridedArrayTag>,NumpyArray<2, Singleband<T>, UnstridedArrayTag>,NumpyArray<3, Multiband<T>, UnstridedArrayTag>- ‘V’:
like ‘F’
Bases: vigra.arraytypes.Vector3Image
Constructor:
Parameters: |
|
---|
obj may be one of the following
A shape is compatible when it has two dimensions (width, height) or three dimensions (width, height, 3).
order can be ‘C’ (C order), ‘F’ (Fortran order), ‘V’ (vector-valued order), and ‘A’.
- ‘C’ and ‘F’ order:
- have the usual numpy meaning
- ‘V’ order:
- is an interleaved memory layout that simulates vector- valued pixels or voxels: while the spatial dimensions are arranged as in Fortran order, the major memory-aligned dimension is the channel (i.e. last) dimension. Arrays in ‘V’-order are compatible with vector-valued NumpyArrays. For example, an RGBImage((4,3), uint8) has strides (3, 12, 1) and is compatible with NumpyArray<2, RGBValue<UInt8>, UnstridedArrayTag>.
- ‘A’ order:
- defaults to ‘V’ when a new array is created, and means ‘preserve order’ when an existing array is copied.
In particular, the following compatibility rules apply (Note that compatibility with ‘UnstridedArrayTag’ implies compatibility with ‘StridedArrayTag’. Due to their loop order, VIGRA algorithms are generally more efficient when the memory layout is compatible with ‘UnstridedArrayTag’. T is the array’s dtype.):
- ‘C’:
NumpyArray<3, T, StridedArrayTag>,NumpyArray<4, T, StridedArrayTag>,NumpyArray<2, RGBValue<T>, StridedArrayTag>,NumpyArray<2, TinyVector<T, 3>, StridedArrayTag>,NumpyArray<3, Multiband<T>, StridedArrayTag>- ‘F’:
NumpyArray<3, T, UnstridedArrayTag>,NumpyArray<4, T, UnstridedArrayTag>,NumpyArray<3, Multiband<T>, UnstridedArrayTag>- ‘V’:
NumpyArray<3, T, StridedArrayTag>,NumpyArray<4, T, StridedArrayTag>,NumpyArray<2, RGBValue<T>, UnstridedArrayTag>,NumpyArray<2, TinyVector<T, 3>, UnstridedArrayTag>,NumpyArray<3, Multiband<T>, StridedArrayTag>
Bases: list
Create a new pyramid. The new pyramid levels range from ‘lowestLevel’ to ‘highestLevel’ (inclusive), and the given ‘image’ is copied to ‘copyImagedestLevel’. The images at other levels are filled with zeros and sized so that the shape is reduced by half when going up (to higher levels), and doubled when going down.
Expand the image at ‘srcLevel’ to ‘destLevel’, using the Burt smoothing filter with the given ‘centerValue’. srcLevel must be larger than destLevel.
For more details, see pyramidExpandBurtFilter in the C++ documentation.
Expand the image at ‘srcLevel’ to ‘destLevel’, using the Burt smoothing filter with the given ‘centerValue’, and reconstruct the images for the levels srcLevel-1 ... destLevel from their Laplacian images. srcLevel must be larger than destLevel.
For more details, see pyramidExpandBurtLaplacian in the C++ documentation.
Reduce the image at ‘srcLevel’ to ‘destLevel’, using the Burt smoothing filter with the given ‘centerValue’. srcLevel must be smaller than destLevel.
For more details, see pyramidReduceBurtFilter in the C++ documentation.
Reduce the image at ‘srcLevel’ to ‘destLevel’, using the Burt smoothing filter with the given ‘centerValue’, and compute Laplacian images for the levels srcLevel ... destLevel-1. srcLevel must be smaller than destLevel.
For more details, see pyramidReduceBurtLaplacian in the C++ documentation.
The module vigra.impex defines read and write functions for image and volume data. Note that the contents of this module are automatically imported into the vigra module, so you may call ‘vigra.readImage(...)’ instead of ‘vigra.impex.readImage(...)’ etc.
Check whether the given file name contains image data:
isImage(filename) -> bool
This function tests whether a file has a supported image format. It checks the first few bytes of the file and compares them with the “magic strings” of each recognized image format. If the image format is supported it returns True otherwise False.
Ask for the image file extensions that vigra.impex understands:
listExtensions() -> string
This function returns a string containing the supported image file extensions for reading and writing with the functions readImage() and writeImage().
Ask for the image file formats that vigra.impex understands:
listFormats() -> string
This function returns a string containing the supported image file formats for reading and writing with the functions readImage() and writeImage().
Read an image from a file:
readImage(filename, dtype = 'FLOAT') -> Image
When import_type is ‘UINT8’, ‘INT16’, ‘UINT16’, ‘INT32’, ‘UINT32’, ‘FLOAT’, ‘DOUBLE’, or one of the corresponding numpy dtypes (numpy.uint8 etc.), the returned image will have the requested pixel type. If dtype is ‘NATIVE’ or ‘’ (empty string), the image is imported with the original type of the data in the file. Caution: If the requested dtype is smaller than the original type in the file, values will be clipped at the bounds of the representable range, which may not be the desired behavior.
Supported file formats are listed by the function vigra.impexListFormats(). When filename does not refer to a recognized image file format, an exception is raised. The file can be checked beforehand with the function :func:`isImage`(filename).
Read an image from a HDF5 file:
readImageFromHDF5(filepath, pathInFile, dtype='FLOAT') -> image
If the file contains 3-dimensional data, the innermost (last) index is interpreted as a channel dimension.
Read a 3D volume from a directory:
readVolume(filename, dtype = 'FLOAT') -> Volume
If the volume is stored in a by-slice manner (e.g. one image per slice), the ‘filename’ can refer to an arbitrary image from the set. readVolume() then assumes that the slices are enumerated like:
name_base+[0-9]+name_ext
where name_base, the index, and name_ext are determined automatically. All slice files with the same name base and extension are considered part of the same volume. Slice numbers must be non-negative, but can otherwise start anywhere and need not be successive. Slices will be read in ascending numerical (not lexicographic) order. All slices must have the same size.
Otherwise, readVolume() will try to read ‘filename’ as an info text file with the following key-value pairs:
name = [short descriptive name of the volume] (optional)
filename = [absolute or relative path to raw voxel data file] (required)
gradfile = [abs. or rel. path to gradient data file] (currently ignored)
description = [arbitrary description of the data set] (optional)
width = [positive integer] (required)
height = [positive integer] (required)
depth = [positive integer] (required)
datatype = [UNSIGNED_CHAR | UNSIGNED_BYTE] (default: UNSIGNED_CHAR)
Lines starting with # are ignored. When import_type is ‘UINT8’, ‘INT16’, ‘UINT16’, ‘INT32’, ‘UINT32’, ‘FLOAT’, ‘DOUBLE’, or one of the corresponding numpy dtypes (numpy.uint8 etc.), the returned volume will have the requested pixel type. For details see the help for readImage().
Read a volume from a file:
readVolumeFromHDF5(filepath, pathInFile, dtype='FLOAT') -> volume
If the file contains 4-dimensional data, the innermost (last) index is interpreted as a channel dimension.
Save an image to a file:
writeImage(image, filename, dtype = '', compression = '')
Parameters:
- image:
- the image to be saved
- filename:
- the file name to save to. The file type will be deduced from the file name extension (see vigra.impexListExtensions() for a list of supported extensions).
- dtype:
the pixel type written to the file. Possible values:
- ‘’ or ‘NATIVE’:
- save with original pixel type, or convert automatically when this type is unsupported by the target file format
- ‘UINT8’, ‘INT16’, ‘UINT16’, ‘INT32’, ‘UINT32’, ‘FLOAT’, ‘DOUBLE’:
- save as specified, or raise exception when this type is not supported by the target file format (see list below)
- ‘NBYTE’:
- normalize to range 0...255 and then save as ‘UINT8’
- numpy.uint8, numpy.int16 etc.:
- behaves like the corresponding string argument
- compression:
how to compress the data (ignored when compression type is unsupported by the file format). Possible values:
- ‘’ or not given:
- save with the native compression of the target file format
- ‘RLE’, ‘RunLength’:
- use run length encoding (native in BMP, supported by TIFF)
- ‘DEFLATE’:
- use deflate encoding (only supported by TIFF)
- ‘LZW’:
- use LZW algorithm (only supported by TIFF with LZW enabled)
- ‘ASCII’:
- write as ASCII rather than binary file (only supported by PNM)
- ‘1’ ... ‘100’:
- use this JPEG compression level (only supported by JPEG and TIFF)
Supported file formats are listed by the function vigra.impexListFormats(). The different file formats support the following pixel types:
- BMP:
- Microsoft Windows bitmap image file (pixel type: UINT8 as gray and RGB).
- GIF:
- CompuServe graphics interchange format; 8-bit color (pixel type: UINT8 as gray and RGB).
- JPEG:
- Joint Photographic Experts Group JFIF format; compressed 24-bit color (pixel types: UINT8 as gray and RGB). (only available if libjpeg is installed)
- PNG:
- Portable Network Graphic (pixel types: UINT8 and UINT16 with up to 4 channels). (only available if libpng is installed)
- PBM:
- Portable bitmap format (black and white).
- PGM:
- Portable graymap format (pixel types: UINT8, INT16, INT32 as gray scale)).
- PNM:
- Portable anymap (pixel types: UINT8, INT16, INT32, gray and RGB)
- PPM:
- Portable pixmap format (pixel types: UINT8, INT16, INT32 as RGB)
- SUN:
- SUN Rasterfile (pixel types: UINT8 as gray and RGB).
- TIFF:
- Tagged Image File Format (pixel types: UINT8, INT16, INT32, FLOAT, DOUBLE with up to 4 channels). (only available if libtiff is installed.)
- VIFF:
- Khoros Visualization image file (pixel types: UINT8, INT16 INT32, FLOAT, DOUBLE with arbitrary many channels).
writeImage( (object)image, (str)filename [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeImage( (object)image, (str)filename [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeImage( (object)image, (str)filename [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeImage( (object)image, (str)filename [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeImage( (object)image, (str)filename [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeImage( (object)image, (str)filename [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeImage( (object)image, (str)filename [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeImage( (object)image, (str)filename [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeImage( (object)image, (str)filename [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
Save an image to an HDF5 file:
writeImageToHDF5(image, filepath, pathInFile, dtype='')
Argument ‘dtype’ is currently ignored. The resulting HDF5 dataset should be identical to the one created by the Python module h5py as follows:
import vigra, h5py
image = vigra.readImage(filename)
vigra.writeImageToHDF5(image, 'vigra_export.h5', 'MyImage')
h5py_file = h5py.File('h5py_export.h5', 'w')
h5py_file.create_dataset('MyImage', data=image.swapaxes(0, 1))
h5py_file.close()
(note the axes transposition which accounts for the VIGRA indexing convention).
writeImageToHDF5( (object)image, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeImageToHDF5( (object)image, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeImageToHDF5( (object)image, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeImageToHDF5( (object)image, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeImageToHDF5( (object)image, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeImageToHDF5( (object)image, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeImageToHDF5( (object)image, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeImageToHDF5( (object)image, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeImageToHDF5( (object)image, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
Wrtie a volume as a sequence of images:
writeVolume(volume, filename_base, filename_ext, dtype = '', compression = '')
The resulting image sequence will be enumerated in the form:
filename_base+[0-9]+filename_ext
Parameters ‘dtype’ and ‘compression’ will be handled as in writeImage().
writeVolume( (object)volume, (str)filename_base, (str)filename_ext [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeVolume( (object)volume, (str)filename_base, (str)filename_ext [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeVolume( (object)volume, (str)filename_base, (str)filename_ext [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeVolume( (object)volume, (str)filename_base, (str)filename_ext [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeVolume( (object)volume, (str)filename_base, (str)filename_ext [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeVolume( (object)volume, (str)filename_base, (str)filename_ext [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeVolume( (object)volume, (str)filename_base, (str)filename_ext [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeVolume( (object)volume, (str)filename_base, (str)filename_ext [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
writeVolume( (object)volume, (str)filename_base, (str)filename_ext [, (object)dtype=’’ [, (str)compression=’‘]]) -> None
Save a volume to an HDF5 file:
writeVolumeToHDF5(volume, filepath, pathInFile, dtype='')
Argument ‘dtype’ is currently ignored. The resulting HDF5 dataset should be identical to the one created by the Python module h5py as follows:
import vigra, h5py
volume = vigra.readVolume(filename)
vigra.writeVolumeToHDF5(volume, 'vigra_export.h5', 'MyVolume')
h5py_file = h5py.File('h5py_export.h5', 'w')
h5py_file.create_dataset('MyVolume', data=volume.swapaxes(0, 2))
h5py_file.close()
(note the axes transposition which accounts for the VIGRA indexing convention).
writeVolumeToHDF5( (object)volume, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeVolumeToHDF5( (object)volume, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeVolumeToHDF5( (object)volume, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeVolumeToHDF5( (object)volume, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeVolumeToHDF5( (object)volume, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeVolumeToHDF5( (object)volume, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeVolumeToHDF5( (object)volume, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeVolumeToHDF5( (object)volume, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
writeVolumeToHDF5( (object)volume, (str)filepath, (str)pathInFile [, (object)dtype=’‘]) -> None
Vigra images and volumes support all arithmetic and algebraic functions defined in numpy.ufunc.
The following mathematical functions are available in this module:
absolute absolute add arccos arccosh arcsin arcsinh
arctan arctan2 arctanh bitwise_and bitwise_or bitwise_xor ceil
conjugate conjugate cos cosh deg2rad degrees divide
equal exp exp2 expm1 fabs floor floor_divide
fmax fmin fmod frexp greater greater_equal hypot
invert invert isfinite isinf isnan ldexp left_shift
less less_equal log log10 log1p logaddexp logaddexp2
logical_and logical_not logical_or logical_xor maximum minimum modf
multiply negative not_equal ones_like power rad2deg radians
reciprocal remainder remainder right_shift rint sign signbit
sin sinh sqrt square subtract tan tanh
true_divide trunc
Some of these functions are also provided as member functions of the vigra array types:
__abs__ __add__ __and__ __div__ __divmod__ __eq__ __floordiv__
__ge__ __gt__ __invert__ __le__ __lshift__ __lt__ __mod__
__mul__ __ne__ __neg__ __or__ __pos__ __pow__ __radd__
__radd__ __rand__ __rdiv__ __rdivmod__ __rfloordiv__ __rlshift__
__rmod__ __rmul__ __ror__ __rpow__ __rrshift__ __rshift__
__rsub__ __rtruediv__ __rxor__ __sub__ __truediv__ __xor__
As usual, these functions are applied independently at each pixel. Vigranumpy overloads the numpy-versions of these functions in order to make their behavior more suitable for image analysis. In particular, we changed two aspects:
Array dtype conversion (aka coercion) is implemented by the function vigra.ufunc.Function.common_type according to the following coercion rules:
Find the appropriate pair (in_dtype, out_dtype) according to vigranumpy typecasting rules. in_dtype is the type into which the arguments will be casted before performing the operation (to prevent possible overflow), out_type is the type the output array will have (unless an explicit out-argument is provided).
The ideas behind the vigranumpy typcasting rules are (i) to represent data with at most 32 bit, when possible, (ii) to reduce the number of types that occur as results of mixed expressions, and (iii) to minimize the chance of bad surprises. Default output types are thus determined according to the following rules:
The output type does not depend on the order of the arguments:
a + b results in the same type as b + a
With exception of logical functions and abs(), the output type does not depend on the function to be executed. The output type of logical functions is bool. The output type of abs() follows general rules unless the input is complex, in which case the output type is the corresponding float type:
a + b results in the same type as a / b
a == b => bool
abs(complex128) => float64
If the inputs have the same type, the type is preserved:
uint8 + uint8 => uint8
If (and only if) one of the inputs has at least 64 bits, the output will also have at least 64 bits:
int64 + uint32 => int64
int64 + 1.0 => float64
If an array is combined with a scalar of the same kind (integer, float, or complex), the array type is preserved. If an integer array with at most 32 bits is combined with a float scalar, the result is float32 (and rule 4 kicks in if the array has 64 bits):
uint8 + 1 => uint8
uint8 + 1.0 => float32
float32 + 1.0 => float32
float64 + 1.0 => float64
Integer expressions with mixed types always produce signed results. If the arguments have at most 32 bits, the result will be int32, otherwise it will be int64 (cf. rule 4):
int8 + uint8 => int32
int32 + uint8 => int32
int32 + uint32 => int32
int32 + int64 => int64
int64 + uint64 => int64
In all other cases, the output type is equal to the highest input type:
int32 + float32 => float32
float32 + complex128 => complex128
All defaults can be overridden by providing an explicit output array:
ufunc.add(uint8, uint8, uint16) => uint16
In order to prevent overflow, necessary upcasting is performed before the function is executed.
The module vigra.colors provides functions to adjust image brightness and contrast, and to transform between different color spaces. See Color Conversions in the C++ documentation for more information.
Adjust the brightness of a 2D scalar or multiband image. The function applies the formula:
out = image + 0.25 * log(factor) * (range[1] - range[0])
to each element of the array. ‘factor’ and ‘range[1] - range[0]’ must be positive. Elements outside the given range are clipped at the range borders. If ‘range’ is None or “” or “auto”, the range is set to the actual range of ‘image’:
range = image.min(), image.max()
Adjust the contrast of an image or volume. The function applies the formula:
out = factor * image + (1.0 - factor) * (range[1] - range[0]) / 2.0
to each element of the array. ‘factor’ and ‘range[1] - range[0]’ must be positive. Elements outside the given range are clipped at the range borders. If ‘range’ is None or “” or “auto”, the range is set to the actual range of ‘image’:
range = image.min(), image.max()
Adjust gamma correction to an image or volume. The function applies the formula:
diff = range[1] - range[0]
out = pow((image - range[0]) / diff, 1.0 / gamma) * diff + range[0]
to each element of the array. ‘factor’ and ‘range[1] - range[0]’ must be positive. Elements outside the given range are clipped at the range borders. If ‘range’ is None or “” or “auto”, the range is set to the actual range of ‘image’:
range = image.min(), image.max()
Convert the intensity range of a 2D scalar or multiband image. The function applies a linear transformation to the intensities such that the value oldRange[0] is mapped onto newRange[0], and oldRange[1] is mapped onto newRange[1]. That is, the algorithm applies the formula:
oldDiff = oldRange[1] - oldRange[0]
newDiff = newRange[1] - newRange[0]
out = (image - oldRange[0]) / oldDiff * newDiff + newRange[0]
to each element of the array. ‘oldDiff’ and ‘newDiff’ must be positive. If ‘oldRange’ is None or “” or “auto” (the default), the range is set to the actual range of ‘image’:
range = image.min(), image.max()
If ‘newRange’ is None or “” or “auto”, it is set to (0, 255.0). If ‘out’ is explicitly passed, it must be a uin8 image.
Convert the colors of the given ‘image’ using Lab2RGBFunctor.
For details see Lab2RGBFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using Lab2RGBPrimeFunctor.
For details see Lab2RGBPrimeFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using Lab2XYZFunctor.
For details see Lab2XYZFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using Luv2RGBFunctor.
For details see Luv2RGBFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using Luv2RGBPrimeFunctor.
For details see Luv2RGBPrimeFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using Luv2XYZFunctor.
For details see Luv2XYZFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGB2LabFunctor.
For details see RGB2LabFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGB2LuvFunctor.
For details see RGB2LuvFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGB2RGBPrimeFunctor.
For details see RGB2RGBPrimeFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGB2XYZFunctor.
For details see RGB2XYZFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGB2sRGBFunctor.
For details see RGB2sRGBFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGBPrime2LabFunctor.
For details see RGBPrime2LabFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGBPrime2LuvFunctor.
For details see RGBPrime2LuvFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGBPrime2RGBFunctor.
For details see RGBPrime2RGBFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGBPrime2XYZFunctor.
For details see RGBPrime2XYZFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGBPrime2YPrimeCbCrFunctor.
For details see RGBPrime2YPrimeCbCrFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGBPrime2YPrimeIQFunctor.
For details see RGBPrime2YPrimeIQFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGBPrime2YPrimePbPrFunctor.
For details see RGBPrime2YPrimePbPrFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using RGBPrime2YPrimeUVFunctor.
For details see RGBPrime2YPrimeUVFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using XYZ2LabFunctor.
For details see XYZ2LabFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using XYZ2LuvFunctor.
For details see XYZ2LuvFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using XYZ2RGBFunctor.
For details see XYZ2RGBFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using XYZ2RGBPrimeFunctor.
For details see XYZ2RGBPrimeFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using YPrimeCbCr2RGBPrimeFunctor.
For details see YPrimeCbCr2RGBPrimeFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using YPrimeIQ2RGBPrimeFunctor.
For details see YPrimeIQ2RGBPrimeFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using YPrimePbPr2RGBPrimeFunctor.
For details see YPrimePbPr2RGBPrimeFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using YPrimeUV2RGBPrimeFunctor.
For details see YPrimeUV2RGBPrimeFunctor in the C++ documentation.
Convert the colors of the given ‘image’ using sRGB2RGBFunctor.
For details see sRGB2RGBFunctor in the C++ documentation.
The module vigra.filters provides operators that consider a window around each pixel, compute one or several numbers from the values in the window, and store the results in the corresponding pixel of the output image. This includes convolution, non-linear diffusion, morphological operators, feature detectors (such as the structure tensor) etc.
Generic 1 dimensional convolution kernel.
This kernel may be used for convolution of 1 dimensional signals or for separable convolution of multidimensional signals. The kernel’s size is given by its left() and right() methods. The desired border treatment mode is returned by getBorderTreatment(). The different init functions create a kernel with the specified properties. For more details, see Kernel1D in the C++ documentation.
Standard constructor:
Kernel1D()
Creates an identity kernel.
Copy constructor:
Kernel1D(other_kernel)
Init kernel as an averaging filter with given radius (i.e. window size 2*radius+1). ‘norm’ denotes the sum of all bins of the kernel.
Kernel construction and initialization can be performed in one step by calling the factory function ‘averagingKernel()’.
Init kernel as a binomial filter with given radius (i.e. window size 2*radius+1). ‘norm’ denotes the sum of all bins of the kernel.
Kernel construction and initialization can be performed in one step by calling the factory function ‘binomialKernel()’.
Init kernel as a 5-tap smoothing filter of the form:
[ a, 0.25, 0.5 - 2*a, 0.25, a]
Kernel construction and initialization can be performed in one step by calling the factory function ‘burtFilterKernel()’.
Init kernel as Lindeberg’s discrete analog of the Gaussian function. The radius of the kernel is always 3*std_dev. ‘norm’ denotes the desired sum of all bins of the kernel.
Kernel construction and initialization can be performed in one step by calling the factory function ‘discreteGaussianKernel()’.
Init the kernel with explicit values from ‘contents’, which must be a 1D numpy.ndarray. ‘left’ and ‘right’ are the boundaries of the kernel (inclusive). If ‘contents’ contains the wrong number of values, a run-time error results. It is, however, possible to give just one initializer. This creates an averaging filter with the given constant. The norm is set to the sum of the initializer values.
Kernel construction and initialization can be performed in one step by calling the factory function ‘explicitlyKernel()’.
Init kernel as a sampled Gaussian function. The radius of the kernel is always 3*std_dev. ‘norm’ denotes the desired sum of all bins of the kernel (i.e. the kernel is corrected for the normalization error introduced by windowing the Gaussian to a finite interval). However, if norm is 0.0, the kernel is normalized to 1 by the analytic expression for the Gaussian, and no correction for the windowing error is performed.
Kernel construction and initialization can be performed in one step by calling the factory function ‘gaussianKernel()’.
Init kernel as a Gaussian derivative of order ‘order’. The radius of the kernel is always 3*std_dev + 0.5*order. ‘norm’ denotes the norm of the kernel. Thus, the kernel will be corrected for the error introduced by windowing the Gaussian to a finite interval. However, if norm is 0.0, the kernel is normalized to 1 by the analytic expression for the Gaussian derivative, and no correction for the windowing error is performed.
Kernel construction and initialization can be performed in one step by calling the factory function ‘gaussianDerivativeKernel()’.
Init kernel as a 3-tap second difference filter of the form:
[ 1, -2, 1]
Kernel construction and initialization can be performed in one step by calling the factory function ‘secondDifference3Kernel()’.
Init kernel as a symmetric difference filter of the form:
[ 0.5 * norm, 0.0 * norm, -0.5 * norm]
Kernel construction and initialization can be performed in one step by calling the factory function ‘symmetricDifferenceKernel()’.
Generic 2 dimensional convolution kernel.
This kernel may be used for convolution of 2 dimensional signals. The desired border treatment mode is returned by borderTreatment().(Note that the 2D convolution functions don’t currently support all modes.) The different init functions create a kernel with the specified properties. For more details, see Kernel2D in the C++ documentation.
Standard constructor:
Kernel2D()
Creates an identity kernel.
Copy constructor:
Kernel2D(other_kernel)
Init the 2D kernel as a circular averaging filter. The norm will be calculated as 1 / (number of non-zero kernel values).
Precondition:
radius > 0
Kernel construction and initialization can be performed in one step by calling the factory function ‘diskKernel2D()’.
Init the kernel with explicit values from ‘contents’, which must be a 2D numpy.ndarray. ‘upperLeft’ and ‘lowerRight’ are the boundaries of the kernel (inclusive), and must be 2D tuples. If ‘contents’ contains the wrong number of values, a run-time error results. It is, however, possible to give just one initializer. This creates an averaging filter with the given constant. The norm is set to the sum of the initializer values.
Kernel construction and initialization can be performed in one step by calling the factory function ‘explicitlyKernel2D()’.
Init kernel as a sampled 2D Gaussian function. The radius of the kernel is always 3*std_dev. ‘norm’ denotes the desired sum of all bins of the kernel (i.e. the kernel is corrected for the normalization error introduced by windowing the Gaussian to a finite interval). However, if norm is 0.0, the kernel is normalized to 1 by the analytic expression for the Gaussian, and no correction for the windowing error is performed.
Kernel construction and initialization can be performed in one step by calling the factory function ‘gaussianKernel2D()’.
Init the 2D kernel as the cartesian product of two 1D kernels of type Kernel1D. The norm becomes the product of the two original norms.
Kernel construction and initialization can be performed in one step by calling the factory function ‘separableKernel2D()’.
Convolve an image with the given ‘kernel’ (or kernels). If the input has multiple channels, the filter is applied to each channel independently. The function can be used in 3 different ways:
For details see separableConvolveMultiArray and convolveImage in the vigra C++ documentation.
Convolution along a single dimension of a 2D scalar or multiband image. ‘kernel’ must be an instance of Kernel1D.
For details see convolveMultiArrayOneDimension in the vigra C++ documentation.
Apply a closing filter with disc of given radius to image.
This is an abbreviation for applying a dilation and an erosion filter in sequence. This function also works for multiband images, it is then executed on every band.
See discRankOrderFilter in the C++ documentation for more information.
Apply dilation (maximum) filter with disc of given radius to image.
This is an abbreviation for the rank order filter with rank = 1.0. This function also works for multiband images, it is then executed on every band.
See discDilation in the C++ documentation for more information.
Apply erosion (minimum) filter with disc of given radius to image.
This is an abbreviation for the rank order filter with rank = 0.0. This function also works for multiband images, it is then executed on every band.
See discErosion in the C++ documentation for more information.
Apply median filter with disc of given radius to image.
This is an abbreviation for the rank order filter with rank = 0.5. This function also works for multiband images, it is then executed on every band.
See discMedian in the C++ documentation for more information.
Apply a opening filter with disc of given radius to image.
This is an abbreviation for applying an erosion and a dilation filter in sequence. This function also works for multiband images, it is then executed on every band.
See discRankOrderFilter in the C++ documentation for more information.
Apply rank order filter with disc structuring function to a float image.
The pixel values of the source image must be in the range 0...255. Radius must be >= 0. Rank must be in the range 0.0 <= rank <= 1.0. The filter acts as a minimum filter if rank = 0.0, as a median if rank = 0.5, and as a maximum filter if rank = 1.0. This function also works for multiband images, it is then executed on every band.
For details see discRankOrderFilter in the C++ documentation.
Apply rank order filter with disc structuring function to a float image using a mask.
The pixel values of the source image must be in the range 0...255. Radius must be >= 0.Rank must be in the range 0.0 <= rank <= 1.0. The filter acts as a minimum filter if rank = 0.0,as a median if rank = 0.5, and as a maximum filter if rank = 1.0.
The mask is only applied to the input image, i.e. the function generates an output wherever the current disc contains at least one pixel with non-zero mask value. Source pixels with mask value zero are ignored during the calculation of the rank order.
This function also works for multiband images, it is then executed on every band. If the mask has only one band, it is used for every image band. If the mask has the same number of bands, as the image the bands are used for the corresponding image bands.
For details see discRankOrderFilterWithMask in the C++ documentation.
Compute the distance transform of a 2D scalar float image. For all background pixels, calculate the distance to the nearest object or contour. The label of the pixels to be considered background in the source image is passed in the parameter ‘background’. Source pixels with other labels will be considered objects. In the destination image, all pixels corresponding to background will hold their distance value, all pixels corresponding to objects will be assigned 0.
The ‘norm’ parameter gives the distance norm to use (0: infinity norm, 1: L1 norm, 2: Euclidean norm).
For details see distanceTransform in the vigra C++ documentation.
Compute the Euclidean distance transform of a 3D scalar float volume. For all background voxels, calculate the distance to the nearest object or contour.The label of the voxels to be considered background in the source volume is passed in the parameter ‘background’. Source voxels with other labels will be considered objects. In the destination volume, all voxels corresponding to background will be assigned their distance value, all voxels corresponding to objects will be assigned 0.
For more details see separableMultiDistance in the vigra C++ documentation.
Calculate the gradient vector by means of a 1st derivative of Gaussian filter at the given scale for a 2D scalar image.
For details see gaussianGradientMultiArray in the vigra C++ documentation.
Calculate the gradient magnitude by means of a 1st derivative of Gaussian filter at the given scale for a 2D scalar or multiband image. If ‘accumulate’ is True (the default), the gradients are accumulated (in the L2-norm sense) over all channels of a multi-channel array. Otherwise, a separate gradient magnitude is computed for each channel.
For details see gaussianGradientMultiArray in the vigra C++ documentation.
Perform sharpening function with gaussian filter.
For details see gaussianSharpening in the vigra C++ documentation.
Perform Gaussian smoothing of a 2D or 3D scalar or multiband image.
Each channel of the array is smoothed independently. If ‘sigma’ is a single value, an isotropic Gaussian filter at this scale is applied (i.e. each dimension is smoothed in the same way). If ‘sigma’ is a tuple of values, the amount of smoothing will be different for each spatial dimension. The length of the tuple must be equal to the number of spatial dimensions.
For details see gaussianSmoothing in the vigra C++ documentation.
Calculate the Hessian matrix by means of a derivative of Gaussian filters at the given scale for a 2D scalar image.
For details see hessianOfGaussianMultiArray in the vigra C++ documentation.
Compute the eigenvalues of the Hessian of Gaussian at the given scale for a scalar image or volume.
Calls hessianOfGaussian() and tensorEigenvalues().
Anisotropic tensor smoothing with the hourglass filter.
For details see hourGlassFilter in the vigra C++ documentation.
Filter scalar image with the Laplacian of Gaussian operator at the given scale.
For details see laplacianOfGaussianMultiArray in the vigra C++ documentation.
Binary closing on a 3D scalar or multiband uint8 array.
This function applies a flat circular opening operator (sequential dilation and erosion) with a given radius. The operation is isotropic. The input is a uint8 or boolean multi-dimensional array where non-zero pixels represent foreground and zero pixels represent background. This function also works for multiband arrays, it is then executed on every band.
For details see vigra C++ documentation (multiBinaryDilation and multiBinaryErosion).
Binary dilation on a 3D scalar or multiband uint8 array.
This function applies a flat circular dilation operator with a given radius. The operation is isotropic. The input is a uint8 or boolean multi-dimensional array where non-zero pixels represent foreground and zero pixels represent background. This function also works for multiband arrays, it is then executed on every band.
For details see multiBinaryDilation in the C++ documentation.
Binary erosion on a 3D scalar or multiband uint8 array.
This function applies a flat circular erosion operator with a given radius. The operation is isotropic. The input is a uint8 or boolean multi-dimensional array where non-zero pixels represent foreground and zero pixels represent background. This function also works for multiband arrays, it is then executed on every band.
For details see multiBinaryErosion in the C++ documentation.
Binary opening on a 3D scalar or multiband uint8 array.
This function applies a flat circular opening operator (sequential erosion and dilation) with a given radius. The operation is isotropic. The input is a uint8 or boolean multi-dimensional array where non-zero pixels represent foreground and zero pixels represent background. This function also works for multiband arrays, it is then executed on every band.
For details see vigra C++ documentation (multiBinaryDilation and multiBinaryErosion).
Parabolic grayscale closing on multi-dimensional arrays.
This function applies a parabolic closing (sequential dilation and erosion) operator with a given spread ‘sigma’ on a grayscale array. The operation is isotropic. The input is a grayscale multi-dimensional array. This function also works for multiband arrays, it is then executed on every band.
For details see multiGrayscaleDilation and multiGrayscaleErosion in the C++ documentation.
multiGrayscaleClosing( (object)image, (float)sigma [, (object)out=None]) -> object
Parabolic grayscale dilation on multi-dimensional arrays.
This function applies a parabolic dilation operator with a given spread ‘sigma’ on a grayscale array. The operation is isotropic. The input is a grayscale multi-dimensional array. This function also works for multiband arrays, it is then executed on every band.
For details see multiGrayscaleDilation in the C++ documentation.
multiGrayscaleDilation( (object)image, (float)sigma [, (object)out=None]) -> object
Parabolic grayscale erosion on a 3D scalar or multiband uint8 array.
This function applies a parabolic erosion operator with a given spread ‘sigma’ on a grayscale array. The operation is isotropic. The input is a grayscale multi-dimensional array. This function also works for multiband arrays, it is then executed on every band.
For details see multiGrayscaleErosion in the C++ documentation.
Parabolic grayscale opening on multi-dimensional arrays.
This function applies a parabolic opening (sequential erosion and dilation) operator with a given spread ‘sigma’ on a grayscale array. The operation is isotropic. The input is a grayscale multi-dimensional array. This function also works for multiband arrays, it is then executed on every band.
For details see multiGrayscaleDilation and multiGrayscaleErosion in the C++ documentation.
multiGrayscaleOpening( (object)image, (float)sigma [, (object)out=None]) -> object
Perform edge-preserving smoothing at the given scale.
For details see nonlinearDiffusion in the vigra C++ documentation.
Perform normalized convolution of an image. If the image has multiple channels, every channel is convolved independently. The ‘mask’ tells the algorithm whether input pixels are valid (non-zero mask value) or not. Invalid pixels are ignored in the convolution. The mask must have one channel (which is then used for all channels input channels) or as many channels as the input image.
For details, see normalizedConvolveImage in the C++ documentation.
Find centers of radial symmetry in an 2D image.
This algorithm implements the Fast Radial Symmetry Transform according to [G. Loy, A. Zelinsky: “A Fast Radial Symmetry Transform for Detecting Points of Interest”, in: A. Heyden et al. (Eds.): Proc. of 7th European Conf. on Computer Vision, Part 1, pp. 358-368, Springer LNCS 2350, 2002]
For details see radialSymmetryTransform in the vigra C++ documentation.
Perform 2D convolution with a first-order recursive filter with parameter ‘b’ and given ‘borderTreatment’. ‘b’ must be between -1 and 1.
For details see recursiveFilterX and recursiveFilterY (which this function calls in succession) in the vigra C++ documentation.
Perform 2D convolution with a second-order recursive filter with parameters ‘b1’ and ‘b2’. Border treatment is always BORDER_TREATMENT_REFLECT.
For details see recursiveFilterX and recursiveFilterY (which this function calls in succession) in the vigra C++ documentation.
Compute the gradient of a scalar image using a recursive (exponential) filter at the given ‘scale’. The output image (if given) must have two channels.
For details see recursiveSmoothLine and recursiveFirstDerivativeLine (which this function calls internally) in the vigra C++ documentation.
Compute the gradient of a 2D scalar or multiband image using a recursive (exponential) filter at the given ‘scale’. The output image (if given) must have as many channels as the input.
For details see recursiveSmoothLine and recursiveSecondDerivativeLine (which this function calls internally) in the vigra C++ documentation.
Calls recursiveFilter2D() with b = exp(-1/scale), which corresponds to smoothing with an exponential filter exp(-abs(x)/scale).
For details see recursiveSmoothLine in the vigra C++ documentation.
Calculate Riesz transforms of the Laplacian of Gaussian.
For details see rieszTransformOfLOG in the vigra C++ documentation.
Perform simple sharpening function.
For details see simpleSharpening in the vigra C++ documentation.
Calculate the structure tensor of an image by means of Gaussian (derivative) filters at the given scales. If the input has multiple channels, the structure tensors of each channel are added to get the result.
For details see structureTensorMultiArray in the vigra C++ documentation.
Compute the eigenvalues of the structure tensor at the given scales for a scalar or multi-channel image or volume.
Calls structureTensor() and tensorEigenvalues().
Calculate the determinant of a 2x2 tensor image.
For details see tensorDeterminantMultiArray in the vigra C++ documentation.
Calculate eigen representation of a symmetric 2x2 tensor.
For details see tensorEigenRepresentation in the vigra C++ documentation.
Calculate the eigenvalues in each pixel/voxel of a 2x2 tensor image.
For details see tensorEigenvaluesMultiArray in the vigra C++ documentation.
Calculate the trace of a 2x2 tensor image.
For details see tensorTraceMultiArray in the vigra C++ documentation.
Turn a 2D vector valued image (e.g. the gradient image) into a tensor image by computing the outer product in every pixel.
For details see vectorToTensorMultiArray in the vigra C++ documentation.
The module vigra.sampling contains methods to change the number and/or location of the image sampling points, such as resizing, rotation, and interpolation.
Resample an image by the given ‘factor’
The ‘out’ parameter must have, if given, the according dimensions. This function also works for multiband images, it is then executed on every band.
For more details, see resampleImage in the vigra C++ documentation.
Resample image using a gaussian filter:
resamplingGaussian(image,
sigmaX=1.0, derivativeOrderX=0, samplingRatioX=2.0, offsetX=0.0,
sigmaY=1.0, derivativeOrderY=0, samplingRatioY=2.0, offsetY=0.0,
out=None)
This function utilizes resamplingConvolveImage with a Gaussianfilter (see the vigra C++ documentation for details).
Resize image or volume using B-spline interpolation.
The spline order is given in the parameter ‘order’. The desired shape of the output array is taken either from ‘shape’ or ‘out’. If both are given, they must agree. This function also works for multi-channel data, it is then executed on every channel independently.
For more details, see resizeImageSplineInterpolation and resizeMultiArraySplineInterpolation in the vigra C++ documentation.
resize( (object)image [, (object)shape=None [, (int)order=3 [, (object)out=None]]]) -> object
Resize image using the Catmull/Rom interpolation function.
The desired shape of the output image is taken either from ‘shape’ or ‘out’. If both are given, they must agree. This function also works for multiband images, it is then executed on every band.
For more details, see resizeImageCatmullRomInterpolation in the vigra C++ documentation.
Resize image using the Coscot interpolation function.
The desired shape of the output image is taken either from ‘shape’ or ‘out’. If both are given, they must agree. This function also works for multiband images, it is then executed on every band.
For more details, see resizeImageCoscotInterpolation in the vigra C++ documentation.
Resize image using linear interpolation. The function uses the standard separable bilinear interpolation algorithm to obtain a good compromise between quality and speed.
The desired shape of the output image is taken either from ‘shape’ or ‘out’. If both are given, they must agree. This function also works for multiband images, it is then executed on every band.
For more details, see resizeImageLinearInterpolation in the vigra C++ documentation.
Resize image by repeating the nearest pixel values.
The desired shape of the output image is taken either from ‘shape’ or ‘out’. If both are given, they must agree. This function also works for multiband images, it is then executed on every band.
For more details, see resizeImageNoInterpolation in the vigra C++ documentation.
Resize image using B-spline interpolation.
The spline order is given in the parameter ‘order’. The desired shape of the output image is taken either from ‘shape’ or ‘out’. If both are given, they must agree. This function also works for multiband images, it is then executed on every band.
For more details, see resizeImageSplineInterpolation in the vigra C++ documentation.
Resize volume using B-spline interpolation.
The spline order is given in the parameter ‘order’. The dimensions of the output volume is taken either from ‘shape’ or ‘out’. If both are given, they must agree. This function also works for multiband volumes, it is then executed on every band.
For more details, see resizeMultiArraySplineInterpolation in the vigra C++ documentation.
Rotate an image by an arbitrary angle using splines for interpolation around its center.
The angle may be given in degree (parameter degree). The parameter ‘splineOrder’ indicates the order of the splines used for interpolation. If the ‘out’ parameter is given, the image is cropped for it’s dimensions. If the ‘out’ parameter is not given, an output image with the same dimensions as the input image is created.
For more details, see GeometricTransformations.rotationMatrix2DDegrees in the vigra C++ documentation.
Rotate an image by an arbitrary angle around its center using splines for interpolation.
The angle may be given in radiant (parameter radiant). The parameter ‘splineOrder’ indicates the order of the splines used for interpolation. If the ‘out’ parameter is given, the image is cropped for it’s dimensions. If the ‘out’ parameter is not given, an output image with the same dimensions as the input image is created.
For more details, see GeometricTransformations.rotationMatrix2DRadians in the vigra C++ documentation.
Rotate an image by a multiple of 90 degrees.
The ‘orientation’ parameter (which must be one of CLOCKWISE, COUNTER_CLOCKWISE and UPSIDE_DOWN indicates the rotation direction. The ‘out’ parameter must, if given, have the according dimensions. This function also works for multiband images, it is then executed on every band.
For more details, see rotateImage in the vigra C++ documentation.
Spline image views implement an interpolated view for an image which can be accessed at real-valued coordinates (in contrast to the plain image, which can only be accessed at integer coordinates). Module vigra.sampling defines:
SplineImageView0
SplineImageView1
SplineImageView2
SplineImageView3
SplineImageView4
SplineImageView5
The number denotes the spline interpolation order of the respective classes. Below, we describe SplineImageView3 in detail, but the other classes work analogously. See SplineImageView in the C++ documentation for more detailed information.
Construct a SplineImageView for the given image:
SplineImageView(image, skipPrefilter = False)
Currently, ‘image’ can have dtype numpy.uint8, numpy.int32, and numpy.float32. If ‘skipPrefilter’ is True, image values are directly used as spline coefficients, so that the view performs approximation rather than interploation.
__init__( (object)arg1, (object)arg2) -> object
__init__( (object)arg1, (object)arg2) -> object
__init__( (object)arg1, (object)arg2, (bool)arg3) -> object
__init__( (object)arg1, (object)arg2, (bool)arg3) -> object
__init__( (object)arg1, (object)arg2, (bool)arg3) -> object
Return first derivative in x direction at a real-valued coordinate.
SplineImageView.dx(x, y) -> value
Return third derivative in x direction at a real-valued coordinate.
SplineImageView.dx3(x, y) -> value
Like dx3(), but returns an entire image with the given sampling factors. For example,
SplineImageView.dx3Image(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Like dx(), but returns an entire image with the given sampling factors. For example,
SplineImageView.dxImage(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Return second derivative in x direction at a real-valued coordinate.
SplineImageView.dxx(x, y) -> value
Like dxx(), but returns an entire image with the given sampling factors. For example,
SplineImageView.dxxImage(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Return mixed third derivative at a real-valued coordinate.
SplineImageView.dxxy(x, y) -> value
Like dxxy(), but returns an entire image with the given sampling factors. For example,
SplineImageView.dxxyImage(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Return mixed second derivative at a real-valued coordinate.
SplineImageView.dxy(x, y) -> value
Like dxy(), but returns an entire image with the given sampling factors. For example,
SplineImageView.dxyImage(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Return mixed third derivative at a real-valued coordinate.
SplineImageView.dxyy(x, y) -> value
Like dxyy(), but returns an entire image with the given sampling factors. For example,
SplineImageView.dxyyImage(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Return first derivative in y direction at a real-valued coordinate.
SplineImageView.dy(x, y) -> value
Return third derivative in y direction at a real-valued coordinate.
SplineImageView.dy3(x, y) -> value
Like dy3(), but returns an entire image with the given sampling factors. For example,
SplineImageView.dy3Image(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Like dy(), but returns an entire image with the given sampling factors. For example,
SplineImageView.dyImage(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Return second derivative in y direction at a real-valued coordinate.
SplineImageView.dyy(x, y) -> value
Like dyy(), but returns an entire image with the given sampling factors. For example,
SplineImageView.dyyImage(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
SplineImageView.facetCoefficients(x, y) -> matrix
Return the facet coefficient matrix so that spline values can be computed explicitly. The matrix has size (order+1)x(order+1), where order is the order of the spline. The matrix must be multiplied from left and right with the powers of the local facet x- and y-coordinates respectively (note that local facet coordinates are in the range [0,1] for odd order splines and [-0.5, 0.5] for even order splines).
Usage for odd spline order:
s = SplineImageView3(image) c = s.coefficients(10.1, 10.7) x = matrix([1, 0.1, 0.1**2, 0.1**3]) y = matrix([1, 0.7, 0.7**2, 0.7**3]) assert abs(x * c * y.T - s[10.1, 10.7]) < smallNumber
Usage for even spline order:
s = SplineImageView2(image) c = s.coefficients(10.1, 10.7) x = matrix([1, 0.1, 0.1**2]) y = matrix([1, -0.3, (-0.3)**2]) assert abs(x * c * y.T - s[10.1, 10.7]) < smallNumber
Return gradient squared magnitude at a real-valued coordinate.
SplineImageView.g2(x, y) -> value
Like g2(), but returns an entire image with the given sampling factors. For example,
SplineImageView.g2Image(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Return first derivative in x direction of the gradient squared magnitude at a real-valued coordinate.
SplineImageView.g2x(x, y) -> value
Like g2x(), but returns an entire image with the given sampling factors. For example,
SplineImageView.g2xImage(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Return first derivative in y direction of the gradient squared magnitude at a real-valued coordinate.
SplineImageView.g2y(x, y) -> value
Like g2y(), but returns an entire image with the given sampling factors. For example,
SplineImageView.g2yImage(2.0, 2.0) -> image
creates an derivative image with two-fold oversampling in both directions.
Return an interpolated image or derivative image with the given sampling factors and derivative orders. For example, we get a two-fold oversampled image with the x-derivatives in each pixel by:
SplineImageView.interpolatedImage(2.0, 2.0, 1, 0) -> image
Check if a coordinate is inside the underlying image.
SplineImageView.isInside(x, y) -> bool
Check if a coordinate is within the valid range of the SplineImageView.
SplineImageView.isValid(x, y) -> bool
Thanks to reflective boundary conditions, the valid range is three times as big as the size of the underlying image.
The module vigra.fourier contains functions for Fourier transforms, Cosine/Sine transforms, and Fourier-domain filters.
The module vigra.analysis contains segmentation algorithms (e.g. watershed), edge and corner detection, localization of maxima and minima etc.
Represent an Edgel at a particular subpixel position (x, y), having given ‘strength’ and ‘orientation’.
For details, see Edgel in the vigra C++ documentation.
Standard constructor:
Edgel()
Constructor:
Edgel(x, y, strength, orientation)
Beautify crack edge image for visualization.
For details see beautifyCrackEdgeImage in the vigra C++ documentation.
Detect and mark edges in an edge image using Canny’s algorithm.
For details see cannyEdgeImage in the vigra C++ documentation.
Detect and mark edges in an edge image using Canny’s algorithm.
For details see cannyEdgeImageWithThinning in the vigra C++ documentation.
Return a list of Edgel objects whose strength is at least ‘threshold’.
The function comes in two forms:
cannyEdgelList(gradient, threshold) -> list
cannyEdgelList(image, scale, threshold) -> list
The first form expects a gradient image (i.e. with two channels) to compute edgels, whereas the second form expects a scalar image and computes the gradient internally at ‘scale’.
For details see cannyEdgelList in the vigra C++ documentation.
Return a list of Edgel objects whose strength is at least ‘threshold’.
The function comes in two forms:
cannyEdgelList3x3(gradient, threshold) -> list
cannyEdgelList3x3(image, scale, threshold) -> list
The first form expects a gradient image (i.e. with two channels) to compute edgels, whereas the second form expects a scalar image and computes the gradient internally at ‘scale’. The results are slightly better than those of cannyEdgelList().
For details see cannyEdgelList3x3 in the vigra C++ documentation.
Close one-pixel wide gaps in a cell grid edge image.
For details see closeGapsInCrackEdgeImage in the vigra C++ documentation.
Find corners in a scalar 2D image using the method of Beaudet at the given ‘scale’.
For details see beaudetCornerDetector in the vigra C++ documentation.
Find corners in a scalar 2D image using the boundary tensor at the given ‘scale’.
Specifically, the cornerness is defined as twice the small eigenvalue of the boundary tensor.
For details see boundaryTensor in the vigra C++ documentation.
Find corners in a scalar 2D image using the method of Foerstner at the given ‘scale’.
For details see foerstnerCornerDetector in the vigra C++ documentation.
Find corners in a scalar 2D image using the method of Harris at the given ‘scale’.
For details see cornerResponseFunction in the vigra C++ documentation.
Find corners in a scalar 2D image using the method of Rohr at the given ‘scale’.
For details see rohrCornerDetector in the vigra C++ documentation.
Find local maxima and maximal plateaus in an image and mark them with the given ‘marker’. Parameter ‘neighborhood’ specifies the pixel neighborhood to be used and can be 4 or 8 (default).
For details see localMinima in the vigra C++ documentation.
Find local minima and minimal plateaus in an image and mark them with the given ‘marker’. Parameter ‘neighborhood’ specifies the pixel neighborhood to be used and can be 4 or 8 (default).
For details see extendedLocalMinima in the vigra C++ documentation.
Find the connected components of a segmented image. Parameter ‘neighborhood’ specifies the pixel neighborhood to be used and can be 4 (default) or 8.
For details see labelImage in the vigra C++ documentation.
labelImage( (object)image [, (int)neighborhood=4 [, (object)out=None]]) -> object
Find the connected components of a segmented image, excluding the background from labeling, where the background is the set of all pixels with the given ‘background_value’. Parameter ‘neighborhood’ specifies the pixel neighborhood to be used and can be 4 (default) or 8.
For details see labelImageWithBackground in the vigra C++ documentation.
labelImageWithBackground( (object)image [, (int)neighborhood=4 [, (float)background_value=0 [, (object)out=None]]]) -> object
Find the connected components of a segmented volume. Parameter ‘neighborhood’ specifies the pixel neighborhood to be used and can be 6 (default) or 26.
For details see labelVolume in the vigra C++ documentation.
labelVolume( (object)volume [, (int)neighborhood=6 [, (object)out=None]]) -> object
Find the connected components of a segmented volume, excluding the background from labeling, where the background is the set of all pixels with the given ‘background_value’. Parameter ‘neighborhood’ specifies the pixel neighborhood to be used and can be 6 (default) or 26.
For details see labelVolumeWithBackground in the vigra C++ documentation.
labelVolumeWithBackground( (object)volume [, (int)neighborhood=6 [, (float)background_value=0 [, (object)out=None]]]) -> object
Find local maxima in an image and mark them with the given ‘marker’. Parameter ‘neighborhood’ specifies the pixel neighborhood to be used and can be 4 or 8 (default).
For details see localMaxima in the vigra C++ documentation.
Find local minima in an image and mark them with the given ‘marker’. Parameter ‘neighborhood’ specifies the pixel neighborhood to be used and can be 4 or 8 (default).
For details see localMinima in the vigra C++ documentation.
Transform a labeled uint32 image into a crack edge image.
For details see regionImageToCrackEdgeImage in the vigra C++ documentation.
Transform a labeled uint32 image into an edge image.
For details see regionImageToEdgeImage in the vigra C++ documentation.
Remove short edges from an edge image.
For details see removeShortEdges in the vigra C++ documentation.
Detect and mark edges in a crack edge image using the Shen/Castan zero-crossing detector.
For details see differenceOfExponentialCrackEdgeImage in the vigra C++ documentation.
Detect and mark edges in an edge image using the Shen/Castan zero-crossing detector.
For details see differenceOfExponentialEdgeImage in the vigra C++ documentation.
Compute the watersheds of a 2D image.
- watersheds(image, neighborhood=4, seeds = None, methods = ‘RegionGrowing’,
- terminate=CompleteGrow, threshold=0, out = None) -> (labelimage, max_ragion_label)
Parameters:
- image:
- the image or volume containing the boundary indicator values (high values = high edgeness)
- neighborhood:
the pixel neighborhood to be used. Feasible values depend on the dimension and method:
- 2-dimensional data:
- 4 (default) or 8.
- 3-dimensional data:
- 6 (default) or 26
- seeds:
- a label image specifying region seeds, only supported by method ‘RegionGrowing’
- method:
the algorithm to be used for watershed computation. Possible values:
- ‘RegionGrowing’:
- (default) use seededRegionGrowing or seededRegionGrowing3D respectively
- ‘UnionFind:
- use watersheds or watersheds3D respectively
- terminate:
when to stop growing. Possible values:
- CompleteGrow:
- (default) grow until all pixels are assigned to a region
- KeepCountours:
- keep a 1-pixel wide contour between all regions, only supported by method ‘RegionGrowing’
- StopAtThreshold:
- stop when the boundary indicator values exceed the threshold given by parameter ‘max_cost’, only supported by method ‘RegionGrowing’
- KeepCountours | StopAtThreshold:
- keep 1-pixel wide contour and stop at given ‘max_cost’, only supported by method ‘RegionGrowing’
- max_cost:
- terminate growing when boundary indicator exceeds this value (ignored when ‘terminate’ is not StopAtThreshold or method is not ‘RegionGrowing’)
- out:
- the label image (with dtype=numpy.uint32) to be filled by the algorithm. It will be allocated by the watershed function if not provided)
The function returns a Python tuple (labelImage, maxRegionLabel)
watersheds( (object)image [, (int)neighborhood=4 [, (object)seeds=None [, (str)method=’RegionGrowing’ [, (SRGType)terminate=vigra.analysis.SRGType.CompleteGrow [, (float)max_cost=0.0 [, (object)out=None]]]]]]) -> tuple
watersheds( (object)volume [, (int)neighborhood=6 [, (object)seeds=None [, (str)method=’RegionGrowing’ [, (SRGType)terminate=vigra.analysis.SRGType.CompleteGrow [, (float)max_cost=0.0 [, (object)out=None]]]]]]) -> tuple
Compute watersheds of an image using the union find algorithm. If ‘neighborhood’ is ‘None’, it defaults to 8-neighborhood for 2D inputs and 6-neighborhood for 3D inputs.
Calls watersheds() with parameters:
watersheds(image, neighborhood=neighborhood, method='UnionFind', out=out)
The module vigra.learning will eventually provide a wide range of machine learning tools. Right now, it only contains an implementation of the random forest classifier.
Constructor:
RandomForest(treeCount = 255, mtry=RF_SQRT, min_split_node_size=1,
training_set_size=0, training_set_proportions=1.0,
sample_with_replacement=True, sample_classes_individually=False,
prepare_online_learning=False)
‘treeCount’ controls the number of trees that are created.
See RandomForest and RandomForestOptions in the C++ documentation for the meaning of the other parameters.
Load from HDF5 file:
RandomForest(filename, pathInFile)
Trains a random Forest using ‘trainData’ and ‘trainLabels’.
and returns the OOB. See the vigra documentation for the meaning af the rest of the paremeters.
Train a random Forest using ‘trainData’ and ‘trainLabels’.
and returns the OOB and the Variable importanceSee the vigra documentation for the meaning af the rest of the paremeters.
Learn online.
Works only if forest has been created with prepare_online_learning=true. Needs the old training data and the new appened, starting at startIndex.
Predict labels on ‘testData’.
The output is an array containing a labels for every test samples.
Predict probabilities for different classes on ‘testData’.
The output is an array containing a probability for every test sample and class.
Re-learn one tree of the forest using ‘trainData’ and ‘trainLabels’.
and returns the OOB. This might be helpful in an online learning setup to improve the classifier.
For more information, refer to RandomForest in the C++ documentation.
Constructor:
RandomForestOld(trainData, trainLabels,
treeCount = 255, mtry=0, min_split_node_size=1,
training_set_size=0, training_set_proportions=1.0,
sample_with_replacement=True, sample_classes_individually=False,)
Construct and train a RandomForest using ‘trainData’ and ‘trainLabels’. ‘treeCount’ controls the number of trees that are created.
See RandomForest and RandomForestOptions in the C++ documentation for the meaning of the other parameters.
The module vigra.noise provides noise estimation and normalization according to a method proposed by Foerstner.
Noise normalization by means of an estimated linear noise model.
For details see linearNoiseNormalization in the vigra C++ documentation.
Determine the noise variance as a function of the image intensity and cluster the results. This operator first calls noiseVarianceEstimation() to obtain a sequence of intensity/variance pairs, which are then clustered using the median cut algorithm. Then the cluster centers (i.e. average variance vs. average intensity) are determined and returned in the result sequence.
Since the length of the resulting array is not known beforhand, it cannot be written into an preallocated array (the “out” argument in most other vigra python functions) . For details see the vigra documentation noiseVarianceClustering.
Determine the noise variance as a function of the image intensity.
Returns an array with the means in the first column and the variances in the second column. Since the length of the resulting array is not known beforhand, it can not be written into an preallocated array (the “out” argument in most other vigra python functions.
For details see the vigra documentation noiseVarianceEstimation.
Noise normalization by means of an estimated non-parametric noise model.
For details see nonparametricNoiseNormalization in the vigra C++ documentation.
Noise normalization by means of an estimated quadratic noise model.
For details see quadraticNoiseNormalization in the vigra C++ documentation.