SO(3)-Kernel Functions edit page

Also take a look at the page ODFShapes.

We examine some radial symmetric kernel functions ˜ψ:SO(3)R on SO(3). For rotations RSO(3) we write this SO(3)-kernels as functions of t=cosω(R)2 on the real numbers. Hence we write

ψ(t)=˜ψ(R).

Moreover, we have ψL2([1,1],1t2dt) and we describe these rotational kernel functions by there Chebyshev expansion

ψ(t)=n=0ˆψnU2n(t)

where Un denotes the Chebyshev polynomials of second kind and degree nN.

The class SO3Kernel is needed in MTEX to define the specific form of unimodal ODFs. It has to be passed as an argument when calling the methods uniformODF. Furthermore SO(3)-Kernels are also used for computing an ODF from EBSD data.

Within the class SO3Kernel kernel functions are represented by their Chebyshev coefficients, that are stored in the field fun.A. As an example lets define an SO(3) kernel function with Chebyshev coefficients a0=1, a1=0, a2=3 and a3=1

psi = SO3Kernel([1;0;3;1])
psi = SO3Kernel
  bandwidth: 3
  halfwidth: 40°

We plot this function by evaluation of its Chebychev series in cos(ω2) for ω[π,π].

plot(psi)

We can define an SO3Fun from a kernel function ψ at a specific orientation R by using the class SO3FunRBF, i.e.

psi =SO3DeLaValleePoussinKernel('halfwidth',20*degree)
SO3F = SO3FunRBF(orientation.rand,psi)
plot(SO3F)
psi = SO3DeLaValleePoussinKernel
  bandwidth: 13
  halfwidth: 20°
 
 
SO3F = SO3FunRBF (1 → y↑→x)
 
  unimodal component
  kernel: de la Vallee Poussin, halfwidth 20°
  center: 1 orientations
 
  Bunge Euler angles in degree
     phi1     Phi    phi2  weight
  156.958 161.468 197.878       1

The following kernel function are predefined in MTEX

A specific SO(3) kernel function like the de la Vallee Poussin kernel is specified by a half-width angle in orientation space (SO(3)) or bandwidth in Fourier space, which is the maximum development in Fourier coefficients.

psi = SO3DeLaValleePoussinKernel('halfwidth',30*degree)

close all
plot(psi)
psi = SO3DeLaValleePoussinKernel
  bandwidth: 9
  halfwidth: 30°

In the following we want to look at some different types of SO(3) kernel functions.

The de La Vallee Poussin Kernel

The de la Vallee Poussin kernel on SO(3) is defined by

K(t)=B(32,12)B(32,κ+12)t2κ

for t[0,1], where B denotes the Beta function. The de la Vallee Poussin kernel additionaly has the unique property that for a given halfwidth it can be described exactly by a finite number of Fourier coefficients. This kernel is recommended for Texture analysis as it is always positive in orientation space and there is no truncation error in Fourier space. Hence we can define the de la Vallee Poussin kernel ψκ depending on a parameter κN{0} by its finite Chebyshev expansion

\psi_{\kappa}(t) = \frac{(\kappa+1)\,2^{2\kappa-1}}{\binom{2\kappa-1}{\kappa}} \, t^{2\kappa} = \binom{2\kappa+1}{\kappa}^{-1} \, \sum\limits_{n=0}^{\kappa} (2n+1)\,\binom{2\kappa+1}{\kappa-n} \, \mathcal U_{2n}(t).

Lets construct two of them.

psi1 = SO3DeLaValleePoussinKernel('halfwidth',15*degree)
psi2 = SO3DeLaValleePoussinKernel('halfwidth',20*degree)

plot(psi1)
hold on
plot(psi2)
hold off
legend('halfwidth = 15°','halfwidth = 20°')
psi1 = SO3DeLaValleePoussinKernel
  bandwidth: 17
  halfwidth: 15°
 
 
psi2 = SO3DeLaValleePoussinKernel
  bandwidth: 13
  halfwidth: 20°

Here the parameter \kappa is 40.34 for function \psi_1 and 22.64 in function \psi_2.

We also take a look at the Fourier coefficients

plotSpektra(psi1)
hold on
plotSpektra(psi2)
hold off
legend('halfwidth = 15°','halfwidth = 20°')

The Dirichlet Kernel

The Dirichlet kernel has the unique property of being a convergent finite series in Fourier coefficients with an integral of one. This kernel is recommended for calculating physical properties as the Fourier coefficients always have a value of one for a given bandwidth.

On the rotation group \mathcal{SO}(3) the Dirichlet kernel \psi_N \in L^2(\mathcal{SO}(3)) is defined by its Chebyshev series

\psi_N(t) = \sum\limits_{n=0}^N (2n+1) \, \mathcal U_{2n}(t).

Lets construct two of them.

psi1 = SO3DirichletKernel(10)
psi2 = SO3DirichletKernel(5)

plot(psi1)
hold on
plot(psi2)
hold off
legend('bandwidth = 5','bandwidth = 10')
psi1 = SO3DirichletKernel
  bandwidth: 10
  halfwidth: 13°
 
 
psi2 = SO3DirichletKernel
  bandwidth: 5
  halfwidth: 24°

By looking at the fourier coefficients we see, that they are exactly 1.

plotSpektra(psi1)
hold on
plotSpektra(psi2)
hold off
legend('bandwidth = 5','bandwidth = 10')

The Abel Poisson Kernel

The Abel Poisson kernel \psi_{\kappa}\in L^2(\mathcal{SO}(3)) is a nonnegative function depending on a parameter \kappa \in (0,1) and is defined by its Chebyshev series

\psi_{\kappa}(t) = \sum\limits_{n=0}^{\infty} (2n+1) \, \kappa^{2n} \, \mathcal U_{2n}(t).

Lets construct two of them.

psi1 = SO3AbelPoissonKernel('halfwidth',15*degree)
psi2 = SO3AbelPoissonKernel('halfwidth',20*degree)

plot(psi1)
hold on
plot(psi2)
hold off
legend('halfwidth = 15°','halfwidth = 20°')
psi1 = SO3AbelPoissonKernel
  bandwidth: 19
  halfwidth: 15°
 
 
psi2 = SO3AbelPoissonKernel
  bandwidth: 15
  halfwidth: 20°

Here the parameter \kappa is 0.82 for function \psi_1 and 0.76 in function \psi_2.

We also take a look at the Fourier coefficients

plotSpektra(psi1)
hold on
plotSpektra(psi2)
hold off
legend('halfwidth = 15°','halfwidth = 20°')

The von Mises Fisher Kernel

The von Mises Fisher kernel \psi_{\kappa}\in L^2(\mathcal{SO}(3)) is a nonnegative function depending on a parameter \kappa>0 and is defined by its Chebyshev series

\psi_{\kappa}(t) = \sum_{n=0}^{\infty} \frac{\mathcal{I}_n(\kappa)-\mathcal{I}_{n+1}(\kappa)}{\mathcal{I}_0(\kappa)-\mathcal{I}_1(\kappa)} \, \mathcal U_{2n}(t)

or directly by

\psi_{\kappa}(\cos\frac{\omega({\bf R})}2) = \frac1{\mathcal{I}_0(\kappa)-\mathcal{I}_1(\kappa)} \, \mathrm{e}^{\kappa \cos\omega({\bf R})}

while \mathcal I_n,\,n \in \mathbb N_0 denotes the the modified Bessel functions of first kind

\mathcal I_n (\kappa) = \frac1{\pi} \int_0^{\pi} \mathrm e^{\kappa \, \cos \omega} \, \cos n\omega \, \mathrm d\omega.

Lets construct two of this kernels.

psi1 = SO3vonMisesFisherKernel('halfwidth',15*degree)
psi2 = SO3vonMisesFisherKernel('halfwidth',20*degree)

plot(psi1)
hold on
plot(psi2)
hold off
legend('halfwidth = 15°','halfwidth = 20°')
psi1 = SO3vonMisesFisherKernel
  bandwidth: 18
  halfwidth: 15°
 
 
psi2 = SO3vonMisesFisherKernel
  bandwidth: 14
  halfwidth: 20°

Here the parameter \kappa is 20.34 for function \psi_1 and 11.49 in function \psi_2.

We also take a look at the Fourier coefficients

plotSpektra(psi1)
hold on
plotSpektra(psi2)
hold off
legend('halfwidth = 15°','halfwidth = 20°')

The Gauss Weierstrass Kernel

The Gauss Weierstrass kernel \psi_{\kappa}\in L^2(\mathcal{SO}(3)) is a nonnegative function depending on a parameter \kappa>0 and is defined by its Chebyshev series

\psi_{\kappa}(t) = \sum\limits_{n=0}^{\infty} (2n+1) \, \mathrm e^{-n(n+1)\kappa} \, \mathcal U_{2n}(t).

Lets construct two of them by the parameter \kappa.

psi1 = SO3GaussWeierstrassKernel(0.025)
psi2 = SO3GaussWeierstrassKernel(0.045)

plot(psi1)
hold on
plot(psi2)
hold off
legend('halfwidth = 15°','halfwidth = 20°')
psi1 = SO3GaussWeierstrassKernel
  bandwidth: 17
  halfwidth: 15°
 
 
psi2 = SO3GaussWeierstrassKernel
  bandwidth: 13
  halfwidth: 20°

We also take a look at the Fourier coefficients

plotSpektra(psi1)
hold on
plotSpektra(psi2)
hold off
legend('halfwidth = 15°','halfwidth = 20°')

The Sobolev Kernel

The Sobolev kernel \psi_{s}\in L^2(\mathcal{SO}(3)) is a radial symmetric kernel function depending on a parameter s and is defined by its Chebyshev series

\psi_s(t) = \sum\limits_{n=0}^{\infty} (2n+1)\, (n(n+1))^s \, \mathcal U_{2n}(t).

Lets construct two of them by the parameter s and banwidth 15.

psi1 = SO3SobolevKernel(1,'bandwidth',15)
psi2 = SO3SobolevKernel(1.2,'bandwidth',15)

plot(psi1)
hold on
plot(psi2)
hold off
legend('s = 1','s = 1.2')
psi1 = SO3SobolevKernel
  bandwidth: 15
  halfwidth: 8.1°
 
 
psi2 = SO3SobolevKernel
  bandwidth: 15
  halfwidth: 8°

We also take a look at the Fourier coefficients

plotSpektra(psi1)
hold on
plotSpektra(psi2)
hold off
legend('s = 1','s = 1.2')

The Laplace Kernel

The Laplace kernel \psi\in L^2(\mathcal{SO}(3)) is a radial symmetric kernel function which is defined by its Chebyshev series

\psi(t) = \sum\limits_{n=0}^{\infty} \frac{(2n+1)}{4\,n^2\,(2n+2)^2} \, \mathcal U_{2n}(t).

psi = SO3LaplaceKernel

plot(psi)
psi = SO3LaplaceKernel
  bandwidth: 4
  halfwidth: 55°

We also take a look at the Fourier coefficients

plotSpektra(psi)

The Squared Singularity Kernel

The squared singularity kernel \psi_{\kappa}\in L^2(\mathcal{SO}(3)) is a nonnegative function depending on a parameter \kappa\in(0,1) and is defined by its Chebyshev series

\psi_{\kappa}(t) = \sum\limits_{n=0}^{\infty} \hat{f}_n(\kappa) \, \mathcal U_{2n}(t).

where the chebychev coefficients follows a 3-term recurrsion

\hat{f}_0 = 1

\hat{f}_1 = \frac{1+\kappa^2}{2\kappa}-\frac1{\log\frac{1+\kappa}{1-\kappa}}

\hat{f}_n = \frac{(2n-3)(2n+1)(1+\kappa^2)}{(2n-1)(n-1)2\kappa} \, \hat{f}_{n-1}(\kappa)-\frac{2\kappa(n-2)(2n+1)}{2n-3} \, \hat{f}_{n-2}(\kappa).

Lets construct two of them by the parameter \kappa.

psi1 = SO3SquareSingularityKernel(0.2)
psi2 = SO3SquareSingularityKernel(0.3)

plot(psi1)
hold on
plot(psi2)
hold off
legend('\kappa = 0.2','\kappa = 0.3')
psi1 = SO3SquareSingularityKernel
  bandwidth: 5
  halfwidth: 78°
 
 
psi2 = SO3SquareSingularityKernel
  bandwidth: 7
  halfwidth: 55°

We also take a look at the Fourier coefficients

plotSpektra(psi1)
hold on
plotSpektra(psi2)
hold off
legend('\kappa = 0.2','\kappa = 0.3')

The Bump kernel

The bump kernel \tilde\psi_r\in L^2(\mathcal{SO}(3)) is a radial symmetric kernel function depending on a parameter r\in (0,\pi). The function value is 0, if the angle is greater then the halfwidth r. Otherwise it is has a contstant value, such that the mean of \psi_r on \mathcal{SO}(3) is 1. Hence we use the open set

U_r = \{ {\bf R} \in \mathcal{SO}(3) \,\vert ~ \lvert \omega( {\bf R})\rvert <r \}

and define the bump kernel by

\tilde\psi_r( {\bf R}) = \frac1{\lvert U_r \rvert } \mathbf{1}_{ \{ {\bf R} \in U_r \} }

where \mathbf{1} is the indicator function.

The main problem of the bump kernel is that we need a lot of chebychev coefficients to describe it. That possibly can result in high runtimes.

psi1 = SO3BumpKernel(30*degree)
psi2 = SO3BumpKernel(40*degree)

plot(psi1)
hold on
plot(psi2)
hold off
legend('halfwidth = 30°','halwidth = 40°')
psi1 = SO3BumpKernel
  bandwidth: 1000
  halfwidth: 30°
 
 
psi2 = SO3BumpKernel
  bandwidth: 1000
  halfwidth: 40°

We also take a look at the Fourier coefficients

plotSpektra(psi1)
hold on
plotSpektra(psi2)
hold off
legend('\kappa = 0.2','\kappa = 0.3')