Talk:Bicubic interpolation

From Wikipedia, the free encyclopedia
Jump to: navigation, search
WikiProject Mathematics (Rated Start-class, Low-importance)
WikiProject Mathematics
This article is within the scope of WikiProject Mathematics, a collaborative effort to improve the coverage of Mathematics on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
Mathematics rating:
Start Class
Low Importance
 Field: Applied mathematics
This article has comments.

Variables used without being defined[edit]

I believe t_x and t_y are used without being defined. — Preceding unsigned comment added by 76.124.109.27 (talk) 12:36, 13 March 2012 (UTC)

Java code link[edit]

At the bottom of the page it links to external code which implements "bicubic interpolation" It doesn't, I have tested this code and the resulting image is clearly bilinear. —Preceding unsigned comment added by Danwalmsley (talkcontribs) 08:04, 17 February 2010 (UTC)

I fixed it and added the link again - Paul Breeuwsma (talk) 16:04, 22 February 2010 (UTC)

Anyone know how to equate the maximum / peak in the data set? —Preceding unsigned comment added by 188.220.216.95 (talk) 17:28, 24 February 2010 (UTC)

Needs more detail[edit]

This doesn't explain what the method is, it's pretty much useless, should be stubbed as well.

Needs less ripping-off of sources[edit]

The only content in this article is nearly word-for-word from http://www.geovista.psu.edu/sites/geocomp99/Gc99/082/gc_082.htm

This section has now been removed from the article. --Berland 10:11, 2 June 2007 (UTC)

Miscategorized[edit]

This article doesn't belong under "Analysis". It should be in "Numerical analysis". DavidCBryant 21:34, 21 November 2006 (UTC)

There is no stub category for "Numerical analysis", though. I added it to "Computer graphics stubs" as well, although this is not the only application of bicubic interpolation. The article as it stands is useless anyway, as you have observed. Freederick 23:14, 19 January 2007 (UTC)

Wrong formula[edit]

The article says that

The bicubic interpolation is calculated as follows: 

a_{00} + a_{10} x + a_{01} y + a_{20} x^2 + a_{11} x y + a_{02} y^2 + a_{21} x^2 y + a_{12} x y^2 + a_{22} x^2 y^2 + a_{30} x^3 + a_{03} y^3 + a_{31} x^3 y + a_{13} x y^3 + a_{32} x^3 y^2 + a_{23} x^2 y^3 + a_{33} x^3 y^3

but this is just a general third order function of two variables -- it has nothing to do with bicubic interpolation. Freederick 23:15, 19 January 2007 (UTC)

Hopefully fixed now. --Berland 21:20, 21 June 2007 (UTC)

Not the wrong formula[edit]

Bicubic interpolation assumes that the grid of data can be locally approximated by some third order (i.e., cubic), two-dimensional polynomial.

Wrong, it's bicubic interpolation, not cubic, like bilinear interpolation which isn't linear. The two-dimensional polynomial is 6 order, with powers of x or y up to 3. Engelec (talk) 14:26, 14 December 2007 (UTC)

That function has everything to do with bicubic interpolation (just like the equation for a line relates to linear interpolation). However, the article doesn't really make the connection clear. The article needs additional explanation-- I'll give it my best shot here. Someone can make it professional and put it into the article.

Consider four known data points in a square: f(0,0),f(1,0),f(0,1),f(1,1). You want to estimate some arbitrary f(x,y) that lies within that square and ensure that the estimates preserve a continuous first derivative. This can be accomplished by assuming the data is generated by the function above. However, that leaves all of the coefficients a_{00} - a_{33}. These can be calculated by creating a linear system of 16 equations and 16 unknowns. Four of the sixteen equations are simple--we use the four known data points. That's where the first four equations in the article come from (e.g.,  f(0,1) = a_{00} + a_{10}(0) + a_{01}(1) + a_{20}(0)^2 + a_{11}(0)(1) + a_{02}(1)^2 + a_{21}(0)^2(1) + a_{12}(0)(1)^2 + a_{22}(0)^2(1)^2 + a_{30}(0)^3 + a_{03}(1)^3 + a_{31}(0)^3(1) + a_{13}(0)(1)^3 + a_{32}(0)^3(1)^2 + a_{23}(0)^2(1)^3 + a_{33}(0)^3(1)^3  = a_{00} + a_{01} + a_{02} + a_{03} ).

The remainder of the equations are trickier because they require knowing the first-order partial derivatives and second-order mixed derivatives of the data at those same four points. If you know them, great. If it's a digital image or digital elevation-map, you may not be privy to those values. That's why you typically also need the 12 values surrounding the original four; so you can use a finite differences method (e.g., central difference: f_x(0,0) = \frac{f(1,0)-f(-1,0)}{2}).

Once you have the 16 equations, you can solve for the 16 coefficients and then just plug them into the general, two-dimensional, third order polynomial function. After that, you use the function to interpolate between your original four points. An example may be merited in order to give additional context. SwenChef 20:08, 17 July 2007 (UTC)

Perhaps an easier approach to implement[edit]

Of course, solving a system of 16 equations can be annoying. In "Image Processing, Analysis, and Machine Vision" (Sonka and Hlavac and Boyle, 1999) pp. 66-68, there's a discussion on using bicubic interpolation for images. I presume that the two approaches can be related, but that's left as an exercise for the reader. It can be seen at http://www.eng.iastate.edu/ee528/sonkamaterial/chapter_4.htm or http://iria.pku.edu.cn/~jiangm/courses/dip/html/node69.html . With this approach, you treat your point of interest as the origin. You then translate the coordinates of the 16 surrounding points into that frame of reference and multiply the value of each data point by the function given on the cited pages evaluated at both the translated x and translated y coordinate values. You sum these 16 products and have your interpolated value. SwenChef 20:32, 17 July 2007 (UTC)

The article currently states "Bicubic spline interpolation requires to solve the linear system described above for each grid cell.". This isn't true, of course. If you've solved the system once you can re-use the result for all the other cells because it gives the coefficients for each cell in terms of the function values and derivatives, which are known. Not to mention solving the system is as simple as inverting the corresponding 16x16 matrix. 130.89.228.82 (talk) 23:44, 17 February 2008 (UTC)

"Insufficient context"[edit]

The article has undergone some 60-70 edits since the context-tag was added (version of 20 Jan 07). It is time to consider removal of the tag, or proposals on what should be improved/mentioned. --Berland (talk) 17:59, 17 May 2008 (UTC)

I was bold and removed the tag. --Berland (talk) 20:07, 11 June 2008 (UTC)

Details missing for bicubic convolution[edit]

I find some details missing for the section on bicubic convolution:

  • What is x in W(x)?
  • The first section with the system of equations to be solved should cover the result from bicubic convolution, thus there must be a connection between the choice of a and how the derivatives are chosen. This should be mentioned here.
  • It refers to the "matrix notation". What is that notation here? What are the a_i numbers?

--Berland (talk) 20:14, 11 June 2008 (UTC)

Needs Work[edit]

Article needs a lot of work. It is too heavily based on just the outdated article by Keys. Keys (and several others) have shown that the Catmull-Rom spline (not the cubic-Hermite as the article says) is the best in the limited parameterized family of cubic functions. That is simply because it is the only value of the parameter for which the cubic filter achieves C0 and C1 continuity.

Cubic filters that are not exactly interpolating are sometimes better, but this article has limited its scope to "interpolation" instead of "filtering". For example, blending the Catmull-Rom spline with the cubic B-Spline can provide superior image quality in some circumstances (See: "Reconstruction Filters in Computer Graphics" SIGGRAPH 88). DonPMitchell (talk) 18:47, 29 December 2008 (UTC)