CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com

# Thread: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many met

1. Junior Member
Join Date
Jul 2014
Posts
7

## How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many met

How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many methods to interpolate function R3->R1 (i mean 3D to 1D), but no possible way to accoplish my task. Except for Thin Plate Splines, they worked fine, but I want something new (if it is possible, Kriging).

"Vq = interp3(X,Y,Z,V,Xq,Yq,Zq) returns... X, Y, and Z contain the coordinates of the sample points. V contains the corresponding function values (SCALAR) at each sample point. Xq, Yq, and Zq contain the coordinates of the query points." This is just what I have mentioned at the beginning. interp3 operate with function (bijection, correspondence) from space with 3 coordinates (3D, triplet) to space with 1 coordinate (1D, scalar). I want to establish and operate with correspondence from 3D to 3D..

TPS solves such problems. http://www.mathworks.com/matlabcentr...rping-function
http://www.mathworks.com/matlabcentr...-plate-splines
I used the first link. The interface is pretty straightforward. I marked: 1. points: old positions of control points; 2. ctrlpoints: new positions of control points; 3. object: source template.

But I want Kriging now.

Thank you very much.

2. Elite Member Power Poster
Join Date
Apr 2000
Location
Belgium (Europe)
Posts
4,626

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

you're looking for 3d splines ?

If yes, you'll need more info than that, you'll need an escape/normal vector on the point as well. ANd probbaly you'll want a 'force' value as well.
or do you just want a flat transition ?
or do you want a spline going from point a to b by passing through one or more control points ? (if yes, you may still want a normal/escape at a and b, and forve values at a, b and every intermediary).

Or are you looking for 'spline planes' (curved planes, the equivalent of a spline in 2d but with an extra D) ?
if so then TPS might be a fit, but remember those are only curved on 1 dimension.
if you want a curved surface 'all around' (radial spline) then that's something else entirely.

3. Junior Member
Join Date
Jul 2014
Posts
7

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

"you're looking for 3d splines ?"

-

"if so then TPS might be a fit, but remember those are only curved on 1 dimension."

I understand your precaution, but no (thin plate splines (TPS) are an interpolation and smoothing technique, the generalisation of splines so that they may be used with two or more dimensions)... There are two links in the first post - I just give corresponding points (they have very different position) and get result.

-

Please note that corresponding points might be not PRECISELY fit one to another (even with different scales). There is some criterion function (I need any of it). For example, TPS fits a mapping function f(x) between corresponding point-sets \{y_i\} and \{x_i\} that minimises certain energy function:

http://en.wikipedia.org/wiki/Thin_plate_spline

4. Elite Member Power Poster
Join Date
Apr 2000
Location
Belgium (Europe)
Posts
4,626

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

ok, so I'm going to assume what you want is curved surfaces in general...

If yes, then you have
bezier surfaces
B-spline surfaces
nonuniform nonrational B-splines
nonuniform rational B-splines (NURBS)
cubit hermite spline

this isn't easy stuff. Quite a bit of math involved, and you won't easily find 'plug in' code that will fit into your current 3D setup without some pushing and prodding. So you'll need to 'understand' how things work.

Best I can recommend is getting a decent book on graphics programming. A de facto standard in that field is
Computer Graphics Principles and Practice by Foley, Van Dam, Feiner and Hughes.
There's a free chapter available as PDF , unfortunatley not the one you want.

The 3rd edition has just very recently been released (24 years after the 2nd edition). It's pricey, but it's a "dense" book with a lot of the low level stuff you want to know when you're in this field.

5. Elite Member Power Poster
Join Date
Apr 2000
Location
Belgium (Europe)
Posts
4,626

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

alternatively, depending on needs, you might be able to pick up a 2nd edition "really cheap" as some stores will be dumping their 2nd edition copies.

6. Junior Member
Join Date
Jul 2014
Posts
7

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

“nonuniform nonrational B-splines”

“nonuniform rational B-splines (NURBS)”
It operates with (approximates) functions Rn->R1 (if there is a point at (x1k, x2k, …, xnk), then f(x1k, x2k, …, xnk)=1, otherwise f(x1k, x2k, …, xnk)=0).

“B-spline surfaces”
Partial case of NURBS.

“Bezier surfaces”
Partial case of NURBS.

“cubic hermite spline” (its generalization to three dimensions is called Tricubic interpolation)
Equivalent to Bezier surfaces.

Great Rn->Rn extrapolation/approximation tool.

There are some smaller overlapping kinds of splines (T-Spline etc.) with same problem.

-

I had great use of article:
http://en.wikipedia.org/wiki/Multivariate_interpolation
However, no method for my needs. Namely:

“Nearest-neighbor interpolation”
Another Rn->R1 extrapolation/approximation tool. No good extrapolation for my case.

“Triangulated irregular network-based natural neighbor”
Another Rn->R1 extrapolation/approximation tool. No good extrapolation for my case.

“Triangulated irregular network-based linear interpolation (a type of piecewise linear function)”
Another Rn->R1 extrapolation/approximation tool.

“Inverse distance weighting”
Another Rn->R1 extrapolation/approximation tool.

“Kriging”
Another Rn->R1 extrapolation/approximation tool.

Another Rn->R1 extrapolation/approximation tool (by the way, mixing RBF and Kriging in the form of coordinates parametrization by distance between points done by me was unsuccessful).

“Thin plate spline”
Great Rn->Rn extrapolation/approximation tool.

“Polyharmonic spline (the thin-plate-spline is a special case of a polyharmonic spline)”
Too close to TPS.

“Least-squares spline”
Another Rn->R1 extrapolation/approximation tool (called spap2 in Matlab).

-

It is rather simple Math, as for me. I need to solve my task…
Last edited by Kosarar; August 2nd, 2014 at 02:22 AM.

7. ## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

Best I can recommend is getting a decent book on graphics programming. A de facto standard in that field is
Computer Graphics Principles and Practice by Foley, Van Dam, Feiner and Hughes.
There's a free chapter available as PDF , unfortunatley not the one you want.

The 3rd edition has just very recently been released (24 years after the 2nd edition). It's pricey, but it's a "dense" book with a lot of the low level stuff you want to know when you're in this field.
On Amazon http://www.amazon.co.uk/Computer-Gra...s+and+practice

you can search inside the book to see pages related to the search.

8. Junior Member
Join Date
Jul 2014
Posts
7

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

Well, that is really nice. But I still have some hope left that somebody knows the answer. It is not impossible that in the whole world only the respectful authors of that book know the truth. I do not need much - only small bit of, as I thought, almost very basic and trivial knowledge... Even now I still sometimes wonder why there is no 3D-3D regression or interpolation embedded in Matlab.

9. Senior Member
Join Date
Oct 2008
Posts
1,456

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

Originally Posted by Kosarar
Even now I still sometimes wonder why there is no 3D-3D regression or interpolation embedded in Matlab.
are you sure ? I don't use matlab, but the google search "matlab gaussian regression" gives hundred thousands results, and in the first few pages there seems to be plenty of resources concerning your goal ... ( moreover, in that book ( that I love ... ah that amazing Vermeer CG painting on the cover ... ) I don't remember anything about regression, at least the (old) edition I read long ago ... ).

10. Junior Member
Join Date
Jul 2014
Posts
7

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

Originally Posted by superbonzo
are you sure ? I don't use matlab, but the google search "matlab gaussian regression" gives hundred thousands results, and in the first few pages there seems to be plenty of resources concerning your goal ... ( moreover, in that book ( that I love ... ah that amazing Vermeer CG painting on the cover ... ) I don't remember anything about regression, at least the (old) edition I read long ago ... ).
I am pretty sure because I remember at least something about regression. But I would be very happy to be wrong in this case. I looked at the contents of Computer Graphics Principles and Practice by Foley, Van Dam, Feiner and Hughes and found nothing. Anybody, tell me about embedded/mathworks.com/other sources 3D-3D function of interpolation, please...
Last edited by Kosarar; August 2nd, 2014 at 02:58 PM.

11. Senior Member
Join Date
Oct 2008
Posts
1,456

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

Originally Posted by Kosarar
I am pretty sure because I remember at least something about regression.
I meant to say that I don't remember anything about regression in the aforementioned book, not by myself. Anyway, did you take a look at that google search ?

Originally Posted by Kosarar
now I'm confused, do you need interpolation or regression ?

in the latter case, there appear to be many matlab gaussian regression packages on the web, again just look at the google search I suggested. Do you have doubts about passing from a 3d->1d to 3d->3d problem ? if yes, it clearly depends on the nature of your data so only you can tell. For example, if the correlation between the outputs is expected to be negligible then it sufficies to treat the 3d->3d problem as three indipendent 3d->1d regression problems; otherwise, you'll need something more general than gaussian regression, which means you'll probably need to specify the prior and compute the posterior explicitly via bayesian analysis. Here is an example coming from the google search above, dubbed twin gaussian regression.

12. Junior Member
Join Date
Jul 2014
Posts
7

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

Originally Posted by superbonzo
I meant to say that I don't remember anything about regression in the aforementioned book, not by myself. Anyway, did you take a look at that google search ?
Yes, a lot. Nothing found.

Originally Posted by superbonzo
now I'm confused, do you need interpolation or regression ?
Regression analysis is widely used for prediction and forecasting, where its use has substantial overlap with the field of machine learning, as splines do and as interpolation stands for.

Usually it is Rn->R1 (if there is Rn->Rn, I would gladly use it). Regression models predict a value of the Y variable given known values of the X variables. Prediction within the range of values in the dataset used for model-fitting is known informally as interpolation. Prediction outside this range of the data is known as extrapolation. Performing extrapolation relies strongly on the regression assumptions. The further the extrapolation goes outside the data, the more room there is for the model to fail due to differences between the assumptions and the sample data or the true values.

I need anything that solves my task. I have 3D vertebrae model (6 points) and I need to pull the current CT scan (2080 points) on it. The coupling dependencies between old positions of control points (first 6 points of the previous sentence) and new positions of control points (some 6 points of the last 2080 points of the previous sentence) are marked manually. I used TPS. http://www.mathworks.com/matlabcentr...rping-function http://www.mathworks.com/matlabcentr...-plate-splines The first link is simpler. The interface is pretty straightforward. I marked: 1. points: old positions of control points; 2. ctrlpoints: new positions of control points; 3. object: source template. I got nice results. But maybe some other such functions exist?..

Originally Posted by superbonzo
in the latter case, there appear to be many matlab gaussian regression packages on the web, again just look at the google search I suggested. Do you have doubts about passing from a 3d->1d to 3d->3d problem ?
Yes, we can say so.

Originally Posted by superbonzo
if yes, it clearly depends on the nature of your data so only you can tell. For example, if the correlation between the outputs is expected to be negligible then it sufficies to treat the 3d->3d problem as three indipendent 3d->1d regression problems;
It does not work. Different parameterizations (mostly I played with Kriging and RBF) do not work also.

Originally Posted by superbonzo
otherwise, you'll need something more general than gaussian regression, which means you'll probably need to specify the prior and compute the posterior explicitly via bayesian analysis. Here is an example coming from the google search above, dubbed twin gaussian regression.
Very promising article. Thank you very much. I am still digging through it. But maybe you have the practical Matlab realization of ANY Rn->Rn interpolation method (because I am not sure that the task described in your article will correlate with mine)?
Last edited by Kosarar; August 3rd, 2014 at 07:18 AM.

13. Senior Member
Join Date
Oct 2008
Posts
1,456

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

so, if I understood you correctly, you want to map the remaining 2080-6 points to the the 6-points model space, don't you ?

this looks like a good candidate for gaussian-like regression, given the possibly complex anatomical variability of the model vs the real scan. In this case, you'll need some data set to train the system in order to get sensible results ( I remember I read about a paper trying to map brain cortical foldings to a model to ease functional imaging, so I'm sure there exists something similar for spinal imaging as well ... ).

if you lack training data then spline-like interpolation could work but I'm sceptic about achieving anatomically accurate results in this case.

Originally Posted by Kosarar
I got nice results
so, why do you need a better solution ? what's the problem ?

14. Junior Member
Join Date
Jul 2014
Posts
7

## Re: How to interpolate R3->R3 (i mean 3D to 3D) function in Matlab? I have found many

Originally Posted by superbonzo
so, if I understood you correctly, you want to map the remaining 2080-6 points to the the 6-points model space, don't you ?
No (interpolation of permutation function in R3 space...). I need to move, rotate, deformate (for instance, with the smallest energy of deformation, as in TPS) my 2080-points shape to match it to my 6-points shape (skeleton). After that I will assemble the whole spine with those vertebrae, but this is easy. For example (consider 2D): (0,0)->(0,0), (0,1)->(1,0), how to show that (1,1)->(-1,1) (in both cases we have equal triangles)?

Originally Posted by superbonzo
so, why do you need a better solution ? what's the problem ?
I need some other methods to compare and analyze those methods practically. My teacher told me to find them. Is it possible that only 1 (ONE) method for that exists now?
Last edited by Kosarar; August 3rd, 2014 at 08:22 PM.

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•