Multidimensional fitting of two sets of data

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 2K views
datameng
Messages
1
Reaction score
0
Hello, my problem is the following:

A lasers gives out a bunch of data points which are reflected off a metal surface and recorded by a camera attached to the side of the laser. The image the camera receives is however distorted.

In order to calibrate the camera I need to find a function of two variables (f(x,y)) which transforms the distortet(wrong) data points back into their originals so that the camera image can be used for accurate analysis.

I know the location (x and y values) of the original image and their corresponding camera positions (x' and y').

How can I use these to find a transfer function between the two data sets?
I have already used SVD and a 6th order polynom merit function for multidimensional fits I found in "Numerical Recipes", and although I get resonable results, they are not accurate enough.

Any help is greatly appreciated!
 
on Phys.org
You'll have to correct me if any assumptions are wrong.

You have two sets of [itex]n[/itex] 2D points, [itex]P[/itex] (original) and [itex]Q[/itex] (camera), with the dimensions [itex]2 \times n[/itex]. Let's assume there exists a function such that [itex]\vec{q} = \vec{f}(\vec{p})[/itex] with [itex]\vec{p}[/itex] and [itex]\vec{q}[/itex] being individual points from [itex]P[/itex] and [itex]Q[/itex] respectively and has dimension [itex]2 \times 1[/itex].

You then want to find the function [itex]\vec{p} = (\vec{f})^{-1}(\vec{q}) = \vec{g}(\vec{q})[/itex]?

Let's assume the inverse function [itex]\vec{g}(\vec{q})[/itex] exists. We can then write it, for each individual point, as [tex]\left[\begin{array}{c}<br /> p_x \\<br /> p_y \end{array} \right] = \left[\begin{array}{c}<br /> g_x(q_x, q_y) \\<br /> g_y(q_x, q_y) \end{array} \right][/tex]
I suppose what you could do then is to interpolate each row, either with polynomials or splines.
 
How many datapoints?