boost::multi_array
as well as mimas::image.
More...Namespaces | |
namespace | mimas |
Classes | |
struct | mimas::_multi_help1< T1, T2, F > |
struct | mimas::_multi_help2< T1, T2, T3, F > |
Functions | |
template<typename T1, typename T2, typename T2Ptr> | |
image< T1 > | mimas::norm (const const_image_ref< T2, T2Ptr > &a) |
template<typename T1, typename T2> | |
image< T1 > | mimas::arg (const image< T2 > &a) |
template<typename T> | |
image< int > | mimas::fastSqr (const image< T > &a) |
template<typename T, typename T1Ptr, typename T2Ptr> | |
image< T > | mimas::__MIMASEXTERNALIMAGEFUNC (const const_image_ref< T, T1Ptr > &a, const const_image_ref< T, T2Ptr > &b) |
template<typename T, typename TPtr> | |
image< T > | mimas::__MIMASEXTERNALIMAGEFUNC (const const_image_ref< T, TPtr > &a, const T &b) |
template<typename T, typename TPtr> | |
image< T > | mimas::__MIMASEXTERNALIMAGEFUNC (const T &a, const const_image_ref< T, TPtr > &b) |
template<typename T, typename TPtr> | |
image_ref< T > & | mimas::__MIMASINTERNALIMAGEFUNC (image_ref< T > &a, const const_image_ref< T, TPtr > &b) |
template<typename T> | |
image_ref< T > & | mimas::__MIMASINTERNALIMAGEFUNC (image_ref< T > &a, const T &b) |
template<typename T, typename TPtr> | |
image_ref< T > & | mimas::__MIMASINTERNALIMAGEFUNC (const const_image_ref< T, TPtr > &a) |
template<typename T, typename TPtr> | |
image< T > | mimas::__MIMASEXTERNALIMAGEFUNC (const const_image_ref< T, TPtr > &a) |
template<class _Array1, class _Array2> | |
boost::multi_array< typename _Array1::element, _Array1::dimensionality > | mimas::correlate (const _Array1 &x, const _Array2 &y) |
Correlation of two multi-arrays. | |
template<typename T> | |
boost::multi_array< T, 2 > | mimas::correlate_separable (const boost::const_multi_array_ref< T, 2 > &x, const std::vector< boost::multi_array< T, 2 > > &f) |
Perform a two-dimensional separable correlation. | |
template<typename T> | |
std::vector< boost::multi_array< T, 2 > > | mimas::separate (const boost::const_multi_array_ref< T, 2 > &array) |
Separate a 2D filter. | |
template<typename T> | |
boost::multi_array< T, 2 > | mimas::correlate_separable (const boost::const_multi_array_ref< T, 2 > &x, const boost::const_multi_array_ref< T, 2 > &f) |
Fast 2D correlation with a separable 2D filter. | |
template<typename T1, typename T2, size_t NumDims, template< typename, size_t > class MultiArray> | |
boost::multi_array< T1, NumDims > | mimas::empty_clone (const MultiArray< T2, NumDims > &x) |
template<typename T, class F> | |
boost::detail::multi_array::sub_array< T, 1 > | mimas::multi_apply (boost::detail::multi_array::sub_array< T, 1 > a, F f) |
template<typename T, class F, template< typename, size_t > class MultiArray> | |
MultiArray< T, 1 > & | mimas::multi_apply (MultiArray< T, 1 > &a, F f) |
template<typename T, size_t NumDims, class F> | |
boost::detail::multi_array::sub_array< T, NumDims > | mimas::multi_apply (boost::detail::multi_array::sub_array< T, NumDims > a, F f) |
template<typename T, size_t NumDims, class F, template< typename, size_t > class MultiArray> | |
MultiArray< T, NumDims > & | mimas::multi_apply (MultiArray< T, NumDims > &a, F f) |
template<typename T1, typename T2, class F, template< typename, size_t > class MultiArray2> | |
boost::detail::multi_array::sub_array< T1, 1 > | mimas::multi_apply (boost::detail::multi_array::sub_array< T1, 1 > a, const MultiArray2< T2, 1 > &b, F f) |
template<typename T1, typename T2, class F, template< typename, size_t > class MultiArray1, template< typename, size_t > class MultiArray2> | |
MultiArray1< T1, 1 > & | mimas::multi_apply (MultiArray1< T1, 1 > &a, const MultiArray2< T2, 1 > &b, F f) |
template<typename T1, typename T2, size_t NumDims, class F, template< typename, size_t > class MultiArray2> | |
boost::detail::multi_array::sub_array< T1, NumDims > | mimas::multi_apply (boost::detail::multi_array::sub_array< T1, NumDims > a, const MultiArray2< T2, NumDims > &b, F f) |
template<typename T1, typename T2, size_t NumDims, class F, template< typename, size_t > class MultiArray1, template< typename, size_t > class MultiArray2> | |
MultiArray1< T1, NumDims > & | mimas::multi_apply (MultiArray1< T1, NumDims > &a, const MultiArray2< T2, NumDims > &b, F f) |
template<typename T1, typename T2, typename T3, class F, template< typename, size_t > class MultiArray2, template< typename, size_t > class MultiArray3> | |
boost::detail::multi_array::sub_array< T1, 1 > | mimas::multi_apply (boost::detail::multi_array::sub_array< T1, 1 > a, const MultiArray2< T2, 1 > &b, const MultiArray3< T3, 1 > &c, F f) |
template<typename T1, typename T2, typename T3, class F, template< typename, size_t > class MultiArray1, template< typename, size_t > class MultiArray2, template< typename, size_t > class MultiArray3> | |
MultiArray1< T1, 1 > & | mimas::multi_apply (MultiArray1< T1, 1 > &a, const MultiArray2< T2, 1 > &b, const MultiArray3< T3, 1 > &c, F f) |
template<typename T1, typename T2, typename T3, size_t NumDims, class F, template< typename, size_t > class MultiArray2, template< typename, size_t > class MultiArray3> | |
boost::detail::multi_array::sub_array< T1, NumDims > | mimas::multi_apply (boost::detail::multi_array::sub_array< T1, NumDims > a, const MultiArray2< T2, NumDims > &b, const MultiArray3< T3, NumDims > &c, F f) |
template<typename T1, typename T2, typename T3, size_t NumDims, class F, template< typename, size_t > class MultiArray1, template< typename, size_t > class MultiArray2, template< typename, size_t > class MultiArray3> | |
MultiArray1< T1, NumDims > & | mimas::multi_apply (MultiArray1< T1, NumDims > &a, const MultiArray2< T2, NumDims > &b, const MultiArray3< T3, NumDims > &c, F f) |
template<typename T1, typename T2, size_t NumDims, class F, template< typename, size_t > class MultiArray> | |
boost::multi_array< T1, NumDims > | mimas::multi_func (const MultiArray< T2, NumDims > &a, F f) |
template<typename T1, typename T2, typename T3, size_t NumDims, class F, template< typename, size_t > class MultiArray1, template< typename, size_t > class MultiArray2> | |
boost::multi_array< T1, NumDims > | mimas::multi_func (const MultiArray1< T2, NumDims > &a, const MultiArray2< T3, NumDims > &b, F f) |
template<typename T1, typename T2, size_t NumDims, template< typename, size_t > class MultiArray> | |
boost::multi_array< T1, NumDims > | mimas::multi_cast (const MultiArray< T2, NumDims > &a) |
template<typename T1, typename T2, size_t NumDims, template< typename, size_t > class MultiArray> | |
boost::multi_array< T1, NumDims > | mimas::norm (const MultiArray< T2, NumDims > &a) |
template<typename T1, typename T2, size_t NumDims, template< typename, size_t > class MultiArray> | |
boost::multi_array< T1, NumDims > | mimas::arg (const MultiArray< T2, NumDims > &a) |
template<typename T, size_t NumDims, template< typename, size_t > class MultiArray> | |
boost::multi_array< int, NumDims > | mimas::fastSqr (const MultiArray< T, NumDims > &a) |
template<template< typename, size_t > class MultiArray1, template< typename, size_t > class MultiArray2, typename T, size_t NumDims> | |
boost::multi_array< T, NumDims > | mimas::__MIMASEXTERNALARRAYFUNC (const MultiArray1< T, NumDims > &a, const MultiArray2< T, NumDims > &b) |
template<template< typename, size_t > class MultiArray, typename T, size_t NumDims> | |
boost::multi_array< T, NumDims > | mimas::__MIMASEXTERNALARRAYFUNC (const MultiArray< T, NumDims > &a, const T &b) |
template<template< typename, size_t > class MultiArray, typename T, size_t NumDims> | |
boost::multi_array< T, NumDims > | mimas::__MIMASEXTERNALARRAYFUNC (const T &a, const MultiArray< T, NumDims > &b) |
template<template< typename, size_t > class MultiArray2, typename T, size_t NumDims> | |
boost::detail::multi_array::sub_array< T, NumDims > | mimas::__MIMASINTERNALARRAYFUNC (boost::detail::multi_array::sub_array< T, NumDims > a, const MultiArray2< T, NumDims > &b) |
template<template< typename, size_t > class MultiArray1, template< typename, size_t > class MultiArray2, typename T, size_t NumDims> | |
MultiArray1< T, NumDims > & | mimas::__MIMASINTERNALARRAYFUNC (MultiArray1< T, NumDims > &a, const MultiArray2< T, NumDims > &b) |
template<typename T, size_t NumDims> | |
boost::detail::multi_array::sub_array< T, NumDims > | mimas::__MIMASINTERNALARRAYFUNC (boost::detail::multi_array::sub_array< T, NumDims > a, const T &b) |
template<template< typename, size_t > class MultiArray, typename T, size_t NumDims> | |
MultiArray< T, NumDims > & | mimas::__MIMASINTERNALARRAYFUNC (MultiArray< T, NumDims > &a, const T &b) |
template<typename T, size_t NumDims, template< typename, size_t > class MultiArray> | |
MultiArray< T, NumDims > & | mimas::__MIMASINTERNALARRAYFUNC (MultiArray< T, NumDims > &a) |
template<typename T, size_t NumDims, template< typename, size_t > class MultiArray> | |
boost::multi_array< T, NumDims > | mimas::__MIMASEXTERNALARRAYFUNC (const MultiArray< T, NumDims > &a) |
template<typename T, size_t NumDims, template< typename, size_t > class MultiArray> | |
boost::multi_array< T, NumDims > | mimas::__MIMASEXTERNALARRAYFUNC (const MultiArray< T, NumDims > &a, const MultiArray< T, NumDims > &b) |
boost::multi_array
as well as mimas::image.
Implementations for element-wise operations on multi-dimensional arrays are provided. boost::multi_array
is used to represent the multidimensional arrays.
The supported operations are:
#include <boost/multi_array.hpp> #include <cmath> #include <iostream> #include <iomanip> #include <functional> #include "multi_array_op.h" using namespace boost; using namespace mimas; using namespace std; int main() { const int dim1 = 4, dim2 = 3, dim3 = 2; multi_array< double, 2 > x( extents[dim2][dim1] ); multi_array< double, 3 > y( extents[dim3][dim2][dim1] ); for ( int i=0; i<dim1; i++ ) for ( int j=0; j<dim2; j++ ) { for ( int k=0; k<dim3; k++ ) y[k][j][i] = i + j * dim1 + k * dim2 * dim1 + 1; x[j][i] = - i - j * dim1 - 1; }; cout << y.shape()[0] << " " << y.strides()[0] << endl; cout << y.shape()[1] << " " << y.strides()[1] << endl; cout << y.shape()[2] << " " << y.strides()[2] << endl; // Scalar // intern y /= 2.0; y[1] *= 2.0; // extern // left x / 2.0; y[1] * 2.0; // right 2.0 * x; 2.0 * y[1]; // Multiply subarray with scalar. typedef multi_array< double, 3 >::index_range range; multi_array< double, 3 >::array_view< 2 >::type view = y[ indices[ range(0,dim1) ][range(1,dim2-1)][1] ]; view *= -1.0; cout << view.shape()[0] << " " << view.strides()[0] << endl; cout << view.shape()[1] << " " << view.strides()[1] << endl; // External multiplication with subarray. 5.0 * view; ((const multi_array< double, 2 > &)x)[0] * ((const multi_array< double, 2 > &)x)[0]; // element-wise intern y[0] *= logarithm( absolute( y[1] ) + 1.0 ); y[0] *= ((const multi_array< double, 3 > &)y)[1]; y[0] *= ((const multi_array< double, 2 > &)x); x *= y[1]; x *= ((const multi_array< double, 3 > &)y)[1]; x *= ((const multi_array< double, 2 > &)x); // element-wise extern. y[0] * y[1]; y[0] * ((const multi_array< double, 3 > &)y)[1]; y[0] * ((const multi_array< double, 2 > &)x); y[1] * x; x * y[1]; x * ((const multi_array< double, 3 > &)y)[1]; x * ((const multi_array< double, 2 > &)x); x * x; for ( int k=0; k<dim3; k++ ) { for ( int j=0; j<dim2; j++ ) { for ( int i=0; i<dim1; i++ ) cout << setw( 12 ) << y[k][j][i]; cout << endl; } cout << endl; }; for ( int j=0; j<dim2; j++ ) { for ( int i=0; i<dim1; i++ ) cout << setw( 12 ) << x[j][i]; cout << endl; } }
Functionality, which is specifically related to two-dimensional images, is implemented for mimas::image
.
Algorithms, which can also be applied to n-dimensional arrays, are implemented for boost::multi_array
. Corresponding wrappers for forwarding the calls are implemented for mimas::image
.
boost::multi_array< T, NumDims > mimas::__MIMASEXTERNALARRAYFUNC | ( | const MultiArray< T, NumDims > & | a, | |
const MultiArray< T, NumDims > & | b | |||
) |
Definition at line 17 of file multi_array_op_help3.h.
boost::multi_array< T, NumDims > mimas::__MIMASEXTERNALARRAYFUNC | ( | const MultiArray< T, NumDims > & | a | ) |
Definition at line 31 of file multi_array_op_help2.h.
boost::multi_array< T, NumDims > mimas::__MIMASEXTERNALARRAYFUNC | ( | const T & | a, | |
const MultiArray< T, NumDims > & | b | |||
) |
Definition at line 46 of file multi_array_op_help.h.
boost::multi_array< T, NumDims > mimas::__MIMASEXTERNALARRAYFUNC | ( | const MultiArray< T, NumDims > & | a, | |
const T & | b | |||
) |
Definition at line 34 of file multi_array_op_help.h.
boost::multi_array< T, NumDims > mimas::__MIMASEXTERNALARRAYFUNC | ( | const MultiArray1< T, NumDims > & | a, | |
const MultiArray2< T, NumDims > & | b | |||
) |
Definition at line 22 of file multi_array_op_help.h.
image< T > mimas::__MIMASEXTERNALIMAGEFUNC | ( | const const_image_ref< T, TPtr > & | a | ) |
Definition at line 29 of file image_op_help2.h.
image< T > mimas::__MIMASEXTERNALIMAGEFUNC | ( | const T & | a, | |
const const_image_ref< T, TPtr > & | b | |||
) |
Definition at line 39 of file image_op_help.h.
image< T > mimas::__MIMASEXTERNALIMAGEFUNC | ( | const const_image_ref< T, TPtr > & | a, | |
const T & | b | |||
) |
Definition at line 29 of file image_op_help.h.
image< T > mimas::__MIMASEXTERNALIMAGEFUNC | ( | const const_image_ref< T, T1Ptr > & | a, | |
const const_image_ref< T, T2Ptr > & | b | |||
) |
Definition at line 19 of file image_op_help.h.
MultiArray< T, NumDims >& mimas::__MIMASINTERNALARRAYFUNC | ( | MultiArray< T, NumDims > & | a | ) |
Definition at line 20 of file multi_array_op_help2.h.
References mimas::multi_apply().
Here is the call graph for this function:
MultiArray< T, NumDims >& mimas::__MIMASINTERNALARRAYFUNC | ( | MultiArray< T, NumDims > & | a, | |
const T & | b | |||
) |
Definition at line 101 of file multi_array_op_help.h.
References mimas::multi_apply().
Here is the call graph for this function:
boost::detail::multi_array::sub_array< T, NumDims > mimas::__MIMASINTERNALARRAYFUNC | ( | boost::detail::multi_array::sub_array< T, NumDims > | a, | |
const T & | b | |||
) |
Definition at line 86 of file multi_array_op_help.h.
References mimas::multi_apply().
Here is the call graph for this function:
MultiArray1< T, NumDims >& mimas::__MIMASINTERNALARRAYFUNC | ( | MultiArray1< T, NumDims > & | a, | |
const MultiArray2< T, NumDims > & | b | |||
) |
Definition at line 73 of file multi_array_op_help.h.
References mimas::multi_apply().
Here is the call graph for this function:
boost::detail::multi_array::sub_array< T, NumDims > mimas::__MIMASINTERNALARRAYFUNC | ( | boost::detail::multi_array::sub_array< T, NumDims > | a, | |
const MultiArray2< T, NumDims > & | b | |||
) |
Definition at line 58 of file multi_array_op_help.h.
References mimas::multi_apply().
Here is the call graph for this function:
image_ref< T >& mimas::__MIMASINTERNALIMAGEFUNC | ( | const const_image_ref< T, TPtr > & | a | ) |
Definition at line 19 of file image_op_help2.h.
References mimas::image_apply().
Here is the call graph for this function:
image_ref< T >& mimas::__MIMASINTERNALIMAGEFUNC | ( | image_ref< T > & | a, | |
const T & | b | |||
) |
Definition at line 61 of file image_op_help.h.
References mimas::image_apply().
Here is the call graph for this function:
image_ref< T >& mimas::__MIMASINTERNALIMAGEFUNC | ( | image_ref< T > & | a, | |
const const_image_ref< T, TPtr > & | b | |||
) |
Definition at line 49 of file image_op_help.h.
References mimas::image_apply().
Here is the call graph for this function:
boost::multi_array< T1, NumDims > mimas::arg | ( | const MultiArray< T2, NumDims > & | a | ) |
image< T1 > mimas::arg | ( | const image< T2 > & | a | ) |
Definition at line 177 of file image_op.h.
boost::multi_array< typename _Array1::element, _Array1::dimensionality > mimas::correlate | ( | const _Array1 & | x, | |
const _Array2 & | y | |||
) |
Correlation of two multi-arrays.
This method provides correlation of two n-dimensional arrays. The resulting array will have the same size as the input-array x
. Elements outside of the array-boundaries are assumed to be zero.
The algorithm is intented to be used for convoluting an array with a small filter. If the filter is very big, it may be more efficient, to perform the correlation in fourier-space.
For a small array y
this algorithm is very fast, because before doing the correlation the loops are reordered for maximum performance.
x | First array (the big one). | |
y | Second array (the small one). |
boost::multi_array< T, 2 > mimas::correlate_separable | ( | const boost::const_multi_array_ref< T, 2 > & | x, | |
const boost::const_multi_array_ref< T, 2 > & | f | |||
) |
Fast 2D correlation with a separable 2D filter.
Definition at line 85 of file multi_array_conv.h.
References mimas::separate().
Here is the call graph for this function:
boost::multi_array< T, 2 > mimas::correlate_separable | ( | const boost::const_multi_array_ref< T, 2 > & | x, | |
const std::vector< boost::multi_array< T, 2 > > & | f | |||
) |
Perform a two-dimensional separable correlation.
If you have compiled Mimas with LAPACK-wrappers, you can also let Mimas separate the filter for you (if it is separable).
x | 2D array to be filtered. | |
f | Two 2D arrays (one with a single column and one with a single row) |
Definition at line 59 of file multi_array_conv.h.
References mimas::correlate().
Here is the call graph for this function:
boost::multi_array< T1, NumDims > mimas::empty_clone | ( | const MultiArray< T2, NumDims > & | x | ) |
Definition at line 42 of file multi_array_op.h.
boost::multi_array< int, NumDims > mimas::fastSqr | ( | const MultiArray< T, NumDims > & | a | ) |
Definition at line 378 of file multi_array_op.h.
image< int > mimas::fastSqr | ( | const image< T > & | a | ) |
Definition at line 186 of file image_op.h.
MultiArray1< T1, NumDims >& mimas::multi_apply | ( | MultiArray1< T1, NumDims > & | a, | |
const MultiArray2< T2, NumDims > & | b, | |||
const MultiArray3< T3, NumDims > & | c, | |||
F | f | |||
) |
Definition at line 228 of file multi_array_op.h.
References mimas::multi_apply().
Here is the call graph for this function:
boost::detail::multi_array::sub_array< T1, NumDims > mimas::multi_apply | ( | boost::detail::multi_array::sub_array< T1, NumDims > | a, | |
const MultiArray2< T2, NumDims > & | b, | |||
const MultiArray3< T3, NumDims > & | c, | |||
F | f | |||
) |
Definition at line 209 of file multi_array_op.h.
References mimas::multi_apply().
Here is the call graph for this function:
MultiArray1< T1, 1 >& mimas::multi_apply | ( | MultiArray1< T1, 1 > & | a, | |
const MultiArray2< T2, 1 > & | b, | |||
const MultiArray3< T3, 1 > & | c, | |||
F | f | |||
) |
Definition at line 191 of file multi_array_op.h.
boost::detail::multi_array::sub_array< T1, 1 > mimas::multi_apply | ( | boost::detail::multi_array::sub_array< T1, 1 > | a, | |
const MultiArray2< T2, 1 > & | b, | |||
const MultiArray3< T3, 1 > & | c, | |||
F | f | |||
) |
Definition at line 171 of file multi_array_op.h.
MultiArray1< T1, NumDims >& mimas::multi_apply | ( | MultiArray1< T1, NumDims > & | a, | |
const MultiArray2< T2, NumDims > & | b, | |||
F | f | |||
) |
Definition at line 155 of file multi_array_op.h.
References mimas::multi_apply().
Here is the call graph for this function:
boost::detail::multi_array::sub_array< T1, NumDims > mimas::multi_apply | ( | boost::detail::multi_array::sub_array< T1, NumDims > | a, | |
const MultiArray2< T2, NumDims > & | b, | |||
F | f | |||
) |
Definition at line 138 of file multi_array_op.h.
References mimas::multi_apply().
Here is the call graph for this function:
MultiArray1< T1, 1 >& mimas::multi_apply | ( | MultiArray1< T1, 1 > & | a, | |
const MultiArray2< T2, 1 > & | b, | |||
F | f | |||
) |
Definition at line 123 of file multi_array_op.h.
boost::detail::multi_array::sub_array< T1, 1 > mimas::multi_apply | ( | boost::detail::multi_array::sub_array< T1, 1 > | a, | |
const MultiArray2< T2, 1 > & | b, | |||
F | f | |||
) |
Definition at line 106 of file multi_array_op.h.
MultiArray< T, NumDims >& mimas::multi_apply | ( | MultiArray< T, NumDims > & | a, | |
F | f | |||
) |
Definition at line 93 of file multi_array_op.h.
References mimas::multi_apply().
Here is the call graph for this function:
boost::detail::multi_array::sub_array< T, NumDims > mimas::multi_apply | ( | boost::detail::multi_array::sub_array< T, NumDims > | a, | |
F | f | |||
) |
Definition at line 80 of file multi_array_op.h.
References mimas::multi_apply().
Here is the call graph for this function:
MultiArray< T, 1 >& mimas::multi_apply | ( | MultiArray< T, 1 > & | a, | |
F | f | |||
) |
Definition at line 68 of file multi_array_op.h.
boost::detail::multi_array::sub_array< T, 1 > mimas::multi_apply | ( | boost::detail::multi_array::sub_array< T, 1 > | a, | |
F | f | |||
) |
Definition at line 55 of file multi_array_op.h.
Referenced by mimas::__MIMASINTERNALARRAYFUNC(), mimas::image_apply(), mimas::multi_apply(), and mimas::multi_func().
boost::multi_array< T1, NumDims > mimas::multi_cast | ( | const MultiArray< T2, NumDims > & | a | ) |
Definition at line 289 of file multi_array_op.h.
boost::multi_array< T1, NumDims > mimas::multi_func | ( | const MultiArray1< T2, NumDims > & | a, | |
const MultiArray2< T3, NumDims > & | b, | |||
F | f | |||
) |
Definition at line 277 of file multi_array_op.h.
References mimas::multi_apply().
Here is the call graph for this function:
boost::multi_array< T1, NumDims > mimas::multi_func | ( | const MultiArray< T2, NumDims > & | a, | |
F | f | |||
) |
Definition at line 265 of file multi_array_op.h.
References mimas::multi_apply().
Here is the call graph for this function:
boost::multi_array< T1, NumDims > mimas::norm | ( | const MultiArray< T2, NumDims > & | a | ) |
Definition at line 358 of file multi_array_op.h.
Referenced by mimas::_norm< T1, T2 >::operator()().
image< T1 > mimas::norm | ( | const const_image_ref< T2, T2Ptr > & | a | ) |
Definition at line 168 of file image_op.h.
Referenced by mimas::filter< T >::filterCols(), and mimas::filter< T >::filterRows().
std::vector< boost::multi_array< T, 2 > > mimas::separate | ( | const boost::const_multi_array_ref< T, 2 > & | array | ) |
Separate a 2D filter.
Separate the 2D filter using singular value decomposition. If the filter is not separable, you will only get an approximate solution.
The 2D filter is copied to a matrix. In an ideal case only the first singular value is unequal to zero and the corresponding vectors
and
are holding the elements of the separable filter:
Referenced by mimas::correlate_separable().