Contents

CVL Monogenic signal toolbox

File revision $Id: Contents.html 7502 2007-05-15 09:33:00Z mfe $

This toolbox contains the monogenic signal class and some misc. functions. Most of the functions are based on stuff that Michael has been doing in his PhD and at the CVL lab.

The basic functionalities have been collected in a monogenic class, such that most functions can be accessed in the usual way, e.g., array indexing, field selection, orientation, amplitude, phase, etc. In the constructor different methods and parameters for generating monogenic objects can be selected.

Note that the classes are written using the new, unofficial Matlab OO system (MCOS), and requires Matlab 7.3. The classes will be maintained to work with the latest matlab version until MCOS is officially released.

%    Copyright (c) 2007 Michael Felsberg, mfe@isy.liu.se
%
%    This program is free software; you can redistribute it and/or modify
%    it under the terms of the GNU General Public License as published by
%    the Free Software Foundation; either version 2 of the License, or
%    (at your option) any later version.
%
%    This program is distributed in the hope that it will be useful,
%    but WITHOUT ANY WARRANTY; without even the implied warranty of
%    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%    GNU General Public License for more details.
%
%    You should have received a copy of the GNU General Public License
%    along with this program; if not, write to the Free Software
%    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

monogenic

help monogenic
  MONOGENIC monogenic class constructor
  obj=monogenic(signal,method,params)
  computes the monogenic scale-space
 
  signal: can be a scalar array (int, single, double) or a complex array
  (interpreted as the Riesz transform of some signal)
  method: method to compute the monogenic signal; possible choices (def: 'get'):
 
  'dct' for a finite domain eigenfunction solution; parameters
  params.scales: a vector of scales in Poisson scale space
  params.coeffs: a vector of linear coefficients to compose e.g. a bandpass
  filter; default: allpass
 
  'sqf', 'sqfs', 'sqfx', 'sqfy' for a convolution solution (spherical quadrature
  filter); parameters
  params.scales: a 2-vector of scales in Poisson scale space (default [1 2])
  params.trunce: truncation error in percentage (default 5%)
 
  'get', 'gets' for implementation based on gradient energy tensor; parameters
  params.scales: a scalar with standard deviation for Gaussian
  derivative; default: Sobel filter
 
  member functions:
    disp
    size
    subsref
    subsasgn
    end
    log
    amplit
    orient
    phase
    recon
    conj

monogenic/amplit

help monogenic/amplit
 
  A = AMPLIT(M)
 
  returns the local amplitude of monogenic object M

monogenic/conj

help monogenic/conj
 
  M = CONJ(M)
 
  computes the conjugate of monogenic object M

monogenic/disp

help monogenic/disp
 
  DISP(M)
 
  displays monogenic object

monogenic/end

help monogenic/end
 
  L = END(M,K,N)
 
  returns last index of N-dimensional monogenic array M in dimension K

monogenic/log

help monogenic/log
 
  N = LOG(M)
 
  returns new monogenic object N which is the quaternionic logarithm of M

monogenic/orient

help monogenic/orient
 
  O = ORIENT(M)
 
  returns the local orientation (modulo pi) of monogenic object M

monogenic/phase

help monogenic/phase
 
  P = PHASE(M)
 
  returns the scalar phase of monogenic object M

monogenic/recon

help monogenic/recon
 
  R = RECON(M)
 
  reconstructs signal / image from attenuation / phase representation M
  (quaternionic exponential function)

monogenic/size

help monogenic/size
 
  D = SIZE(M)
 
  Size of monogenic object.

monogenic/subsasgn

help monogenic/subsasgn
 
  M = subsasgn(M,S,m)
 
  assigns values or objects to fields or elements of a monogenic object
  (array)
  possible fields are
  EVEN = IMAGE = ATTEN = SIGNAL and
  ODD = FLUX = PHASE = RIESZ

monogenic/subsref

help monogenic/subsref
 
  m = subsref(M,S)
 
  returns 
  -elements of a monogenic object array or
  -field (array) of a monogenic object (array); possible fields are
  EVEN = IMAGE = ATTEN = SIGNAL and
  ODD = FLUX = PHASE = RIESZ

example to use

cvlUseToolbox('testimages');

load image and compute

bild=imread('house.png');

params.scales=[1 2 3];
params.coeffs=[1 -2 1];
Md=monogenic(bild,'dct',params);
Ms=monogenic(bild,'sqf');
params.scales=1.3;
Mg=monogenic(bild,'get',params);

DCT image

imshow(Md.image,[]);

DCT flux

compimshow(Md.flux);

SQF image

imshow(Ms.image,[]);

SQG flux

compimshow(Ms.flux);

GET image

imshow(Mg.image,[]);

GET flux

compimshow(Mg.flux);

compute monogenic signal

m=monogenic(bild,'dct');

compute conjugate log

l=log(m);

reconstruct from amplitude

imshow(recon(monogenic(l.even,'dct')),[0 255]-mean(bild(:)));

reconstruct from phase

imshow(recon(conj(monogenic(conj(l.odd),'dct'))),[]);

phase II

phi=phase(m);
ori=orient(monogenic(phi));
imshow(recon(conj(monogenic(exp(-i*ori).*phi,'dct'))),[]);

DPC edge detection

M=monogenic(bild,'dct');
Ms=monogenic(bild,'dcts');
PC=M.image.*Ms.flux-Ms.image.*M.flux;
[z,s,o]=zero_lin_2(real(PC),imag(PC),3);
t=100;
disp(['Slope threshold: ' num2str(t)]);
imshow(z.*(s>t));
Slope threshold: 100

local frequency estimation

M=monogenic(bild,'sqf');
Ms=monogenic(bild,'sqfs');
omega=(M.image.*Ms.image+real(M.flux).*real(Ms.flux)+imag(M.flux).*...
	imag(Ms.flux))./amplit(M).^2;
imshow(omega,[]),colorbar;