CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 14 of 14
  1. #1
    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. #2
    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. #3
    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 ?"

    Yes, please.

    -

    "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. #4
    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)
    TPS as you already mentioned
    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. #5
    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. #6
    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”
    No information about it.

    “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.

    “TPS as you already mentioned”
    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.

    “Radial basis function”
    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. #7
    2kaud's Avatar
    2kaud is offline Super Moderator Power Poster
    Join Date
    Dec 2012
    Location
    England
    Posts
    7,822

    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.
    All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!

    C++23 Compiler: Microsoft VS2022 (17.6.5)

  8. #8
    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. #9
    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

    Quote Originally Posted by Kosarar View Post
    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. #10
    Join Date
    Jul 2014
    Posts
    7

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

    Quote Originally Posted by superbonzo View Post
    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. #11
    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

    Quote Originally Posted by Kosarar View Post
    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 ?

    Quote Originally Posted by Kosarar View Post
    Anybody, tell me about embedded/mathworks.com/other sources 3D-3D function of interpolation, please...
    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. #12
    Join Date
    Jul 2014
    Posts
    7

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

    Quote Originally Posted by superbonzo View Post
    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.

    Quote Originally Posted by superbonzo View Post
    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?..

    Quote Originally Posted by superbonzo View Post
    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.

    Quote Originally Posted by superbonzo View Post
    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.

    Quote Originally Posted by superbonzo View Post
    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. #13
    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.

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

  14. #14
    Join Date
    Jul 2014
    Posts
    7

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

    Quote Originally Posted by superbonzo View Post
    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)?

    Quote Originally Posted by superbonzo View Post
    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
  •  





Click Here to Expand Forum to Full Width

Featured