142 lines
5.3 KiB
C
142 lines
5.3 KiB
C
|
// Copyright (C) 2011 Davis E. King (davis@dlib.net)
|
||
|
// License: Boost Software License See LICENSE.txt for the full license.
|
||
|
#undef DLIB_MATRIx_CONV_ABSTRACT_Hh_
|
||
|
#ifdef DLIB_MATRIx_CONV_ABSTRACT_Hh_
|
||
|
|
||
|
#include "matrix_abstract.h"
|
||
|
|
||
|
namespace dlib
|
||
|
{
|
||
|
|
||
|
// ----------------------------------------------------------------------------------------
|
||
|
|
||
|
const matrix_exp conv (
|
||
|
const matrix_exp& m1,
|
||
|
const matrix_exp& m2
|
||
|
);
|
||
|
/*!
|
||
|
requires
|
||
|
- m1 and m2 both contain elements of the same type
|
||
|
ensures
|
||
|
- returns a matrix R such that:
|
||
|
- R is the convolution of m1 with m2. In particular, this function is
|
||
|
equivalent to performing the following in matlab: R = conv2(m1,m2).
|
||
|
- R::type == the same type that was in m1 and m2.
|
||
|
- R.nr() == m1.nr()+m2.nr()-1
|
||
|
- R.nc() == m1.nc()+m2.nc()-1
|
||
|
!*/
|
||
|
|
||
|
// ----------------------------------------------------------------------------------------
|
||
|
|
||
|
const matrix_exp xcorr (
|
||
|
const matrix_exp& m1,
|
||
|
const matrix_exp& m2
|
||
|
);
|
||
|
/*!
|
||
|
requires
|
||
|
- m1 and m2 both contain elements of the same type
|
||
|
ensures
|
||
|
- returns a matrix R such that:
|
||
|
- R is the cross-correlation of m1 with m2. In particular, this
|
||
|
function returns conv(m1,flip(m2)) if the matrices contain real
|
||
|
elements and conv(m1,flip(conj(m2))) if they are complex.
|
||
|
- R::type == the same type that was in m1 and m2.
|
||
|
- R.nr() == m1.nr()+m2.nr()-1
|
||
|
- R.nc() == m1.nc()+m2.nc()-1
|
||
|
!*/
|
||
|
|
||
|
// ----------------------------------------------------------------------------------------
|
||
|
|
||
|
const matrix_exp conv_same (
|
||
|
const matrix_exp& m1,
|
||
|
const matrix_exp& m2
|
||
|
);
|
||
|
/*!
|
||
|
requires
|
||
|
- m1 and m2 both contain elements of the same type
|
||
|
ensures
|
||
|
- returns a matrix R such that:
|
||
|
- R is the convolution of m1 with m2. In particular, this function is
|
||
|
equivalent to performing the following in matlab: R = conv2(m1,m2,'same').
|
||
|
In particular, this means the result will have the same dimensions as m1 and will
|
||
|
contain the central part of the full convolution. Therefore, conv_same(m1,m2) is
|
||
|
equivalent to subm(conv(m1,m2), m2.nr()/2, m2.nc()/2, m1.nr(), m1.nc()).
|
||
|
- R::type == the same type that was in m1 and m2.
|
||
|
- R.nr() == m1.nr()
|
||
|
- R.nc() == m1.nc()
|
||
|
!*/
|
||
|
|
||
|
// ----------------------------------------------------------------------------------------
|
||
|
|
||
|
const matrix_exp xcorr_same (
|
||
|
const matrix_exp& m1,
|
||
|
const matrix_exp& m2
|
||
|
);
|
||
|
/*!
|
||
|
requires
|
||
|
- m1 and m2 both contain elements of the same type
|
||
|
ensures
|
||
|
- returns a matrix R such that:
|
||
|
- R is the cross-correlation of m1 with m2. In particular, this
|
||
|
function returns conv_same(m1,flip(m2)) if the matrices contain real
|
||
|
elements and conv_same(m1,flip(conj(m2))) if they are complex.
|
||
|
- R::type == the same type that was in m1 and m2.
|
||
|
- R.nr() == m1.nr()
|
||
|
- R.nc() == m1.nc()
|
||
|
!*/
|
||
|
|
||
|
// ----------------------------------------------------------------------------------------
|
||
|
|
||
|
const matrix_exp conv_valid (
|
||
|
const matrix_exp& m1,
|
||
|
const matrix_exp& m2
|
||
|
);
|
||
|
/*!
|
||
|
requires
|
||
|
- m1 and m2 both contain elements of the same type
|
||
|
ensures
|
||
|
- returns a matrix R such that:
|
||
|
- R is the convolution of m1 with m2. In particular, this function is
|
||
|
equivalent to performing the following in matlab: R = conv2(m1,m2,'valid').
|
||
|
In particular, this means only elements of the convolution which don't require
|
||
|
zero padding are included in the result.
|
||
|
- R::type == the same type that was in m1 and m2.
|
||
|
- if (m1 has larger dimensions than m2) then
|
||
|
- R.nr() == m1.nr()-m2.nr()+1
|
||
|
- R.nc() == m1.nc()-m2.nc()+1
|
||
|
- else
|
||
|
- R.nr() == 0
|
||
|
- R.nc() == 0
|
||
|
!*/
|
||
|
|
||
|
// ----------------------------------------------------------------------------------------
|
||
|
|
||
|
const matrix_exp xcorr_valid (
|
||
|
const matrix_exp& m1,
|
||
|
const matrix_exp& m2
|
||
|
);
|
||
|
/*!
|
||
|
requires
|
||
|
- m1 and m2 both contain elements of the same type
|
||
|
ensures
|
||
|
- returns a matrix R such that:
|
||
|
- R is the cross-correlation of m1 with m2. In particular, this
|
||
|
function returns conv_valid(m1,flip(m2)) if the matrices contain real
|
||
|
elements and conv_valid(m1,flip(conj(m2))) if they are complex.
|
||
|
- R::type == the same type that was in m1 and m2.
|
||
|
- if (m1 has larger dimensions than m2) then
|
||
|
- R.nr() == m1.nr()-m2.nr()+1
|
||
|
- R.nc() == m1.nc()-m2.nc()+1
|
||
|
- else
|
||
|
- R.nr() == 0
|
||
|
- R.nc() == 0
|
||
|
!*/
|
||
|
|
||
|
// ----------------------------------------------------------------------------------------
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif // DLIB_MATRIx_CONV_ABSTRACT_Hh_
|
||
|
|
||
|
|