Pierluigi Taddei

Eternal incomplete home page

  • Increase font size
  • Default font size
  • Decrease font size
Home Computer Vision
Computer Vision

Planar Motion Estimation

I will present a work at OMNIVIS 2008 in Marseille, France during the ECCV 2008 conference.

odometry.png

Abstract

Generic camera odometry can be performed using two images of the same plane, such as the ground plane even in the case of non central cameras. It is possible to recover both the angle and rotation center describing a generic planar motion on the ground plane if the center is visible in both images. We present an algorithm to recover these two parameters from an initial set of correspondences and, furthermore, to estimate the motion flow related to any point on the ground plane. In this situation the motion flows are given by a set of "concentric" closed curves around the rotation center. By considering two subsequent ground plane motions and their related motion flows, we show that it is possible to perform a rectification of the plane up to a scale factor. We provide experimental results which validate our approach.

 

Paper like surfaces

I have presented at NORDIA Workshop in Anchorage (Alaska) a work done in conjuction with Adrien Bartoli. Here is the related paper

Here is the presentation of the work:

 

Catadioptric Cameras

The following papers have been presented the 20th of October at Omnivis 2007 in conjunction with the ICCV 2007 conference in Rio de Janeiro. I will add a brief description of the two works as time will permit.

 

Conic intersection

I made some small bug fixes to the conic intersection package. Thanks to Dany for pointing the bug out. The matlab code that you can download here can be used to detect the (up to) four intersections of two conics. The usage is quite straightforward but anyway, here is an example:

%%the homogeneous representation of a conic is a matrix 
%% m = [A C D; C B E; D E F] that represents the equation 
%% A x^2 + B y^2 + 2C xy + 2D x + 2Ey + F = 0


%a circle centered in the origin

E1 = [1 0 0; 0 1 0; 0 0 -3] 

%an ellipse centered in the origin

E2 = [1 0 0; 0 3 0; 0 0 -6] 

%get the four homogeneous intersections
P = intersectConics(E1, E2) 
%plot the normalized points
plot(P(1,:) ./ P(3,:) , P(2,:) ./ P(3,:), 'ro');

Algorithm description

The solutions to a two second degree equations system in two variables may be seen as the coordinates of the intersections of two generic conic section. In particular two conics may possess none, two, four possibly coincident intersection points. The best method to locate these solutions is to exploit the homogeneous matrix representation of conic sections, i.e. a 3x3 symmetric matrix which depends on six parameters.

The procedure to locate the intersection points follows these steps:

  • given the two conics C1 and C2 consider the pencil of conics given by their linear combination ?C1 + ?C2
  • identify the homogeneous parameters (?,?) which corresponds to the degenerate conic of the pencil. This can be done by imposing that det(?C1 + ?C2) = 0, which turns out to be the solution to a third degree equation.
  • given the degenerate cone C0, identify the two, possibly coincident, lines constituting it
  • intersects each identified line with one of the two original conic; this step can be done efficiently using the dual conic representation of C0
  • the points of intersection will represent the solution to the initial equation system

Matlab implementation

In the library you will find a couple of matlab function which implements the above steps to intersect two conics. In particular the main functions are:

  • intersectConics : this is the main function to perform the intersection
  • decomposeDegenerateConic: this function allow to split a degenerate conic into two lines
  • intersecLineConic: this function recover the, possibly two, points of intersection of a line and a conic

If you have any comments please refer to me by email!

 

Periodic B-spline

closedspline.png In my last work I have extensively used multivariate b spline to perform data interpolation ad to exploit a parametric model for image mappings. In particular my work required periodic and continuous b-spline. This version of a b-spline requires two less parameters for each dimension since we imposes C2continuity on the period boundary. 
In this article I present a rather smart and compact implementation for R -> R2 periodic b-spline with evenly spaced knots using cubic spline as atomic support (i.e each b-spline covers 5 subsequent knots).

You may use this function as in the following  example

a = linspace(0,2*pi, 12); a = a(1:end-1);
p = [cos(a); 2*sin(a)]

cs = closedSpline(a, p, 8); %creates the periodic spline
y  = cs.eval( linspace(0,2*pi,100) ); %evaluate the spline in 100 points

plot(p(1,:),p(2,:), 'b.');
plot(y(1,:), y(2,:), '-r');

I am going to post shortly the link to the two required function and possibly to extends this post to add more details!

Here is the matlab function used to create a closed 2D spline.

 % Compute a 2D closed spline 
%              - Pierluigi Taddei ( This e-mail address is being protected from spambots. You need JavaScript enabled to view it )
%
% Usage:  sp =  closedSpline(a, p, n)
%              
% Arguments:
%          a - domain values (i.e linspace(0, 2*pi, k) )
%          p - image values on the plane (the value of the spline in a)
%          n - number of spline knots (should be less than number of
%          values)
% 27.03.2009 : Created

function ps = closedSpline(a, p, n)

if(n > length(a))
n = length(a);
end

ps = struct();

%atomic spline element

knots = linspace(0,2*pi, n+1); knots = knots(1:end-1);
baseSpline = spmak(knots(1:5),1);


%%move values to a single bspline equivalent
Afull = repmat(a', 1,length(knots)) - repmat(knots, length(a),1);
Afull2 = mod(Afull, 2*pi); %remove periodicity

A = fnval(baseSpline, Afull2); %evaluate bspline in all points
%least square minimization
ku = A \ p(1,:)';
kv = A \ p(2,:)';

%file the structure
ps.knots = knots;
ps.baseSpline = baseSpline;
ps.paramU = ku;
ps.paramV = kv;

%add the evaluation method to the spline itself

ps.eval = @(x)csval(ps,x);
end

Given a set of initial points the function creates a linear sistem wich will be solved in order to detect the  best parameter value in the least square sense.

Once the parameters are known you can call the csval function to evaluate the spline in any point of the domain (thanks to its periodicity). You can both call this function directly or use an object oriented call style on the spline structure.

% Evaluate a closed 2D spline for values a
%              - Pierluigi Taddei ( This e-mail address is being protected from spambots. You need JavaScript enabled to view it )
%
% Usage:  y = csval(cs,a)
%               
%          
% Arguments:
%          cs - the closed spline
%          a - domain values vector
% 27.03.2009 : Created

function y = csval(cs,a)
k = cs.knots;

aVal = repmat(a, length(k),1) - repmat(k', 1, length(a));
aVal2 = mod(aVal, 2*pi);
bVal = fnval(cs.baseSpline, aVal2);

u = sum( bVal .* repmat(cs.paramU, 1,length(a)),1 );
v = sum( bVal .* repmat(cs.paramV, 1,length(a)),1 );

y = [u;v];
end
 


Contacts

 

Pierluigi Taddei

European Joint Research Centre
via Enrico Fermi, 2749
21027 Ispra

Italy

Email: pierluigi.taddei at gmail dot com

Phone: +39 3491566235

 

Who I Am

I am Pierluigi Taddei,

I work on 3D Reconstruction and Computer Vision since 2006, currently I am working as a Post Doc at the European Joint Research Centre (JRC) where I mainly deal with 3D reconstruction using laser scanners. I am also interested in other fields such as developing rich internet applications, computer graphic applications and geometric issues.

This site contains some articles related to my research and other activities I find useful to share. Unfortunately I am always running out of time, so this list will be eternally incomplete! Please contact me for any questions