# Talk:Bicubic interpolation

WikiProject Mathematics (Rated Start-class, Low-importance)
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

## Variables used without being defined

I believe ${\displaystyle t_{x}}$ and ${\displaystyle t_{y}}$ are used without being defined. — Preceding unsigned comment added by 76.124.109.27 (talk) 12:36, 13 March 2012 (UTC)

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

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

## Needs less ripping-off of sources

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

## Miscategorized

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

The article says that

The bicubic interpolation is calculated as follows:

${\displaystyle a_{00}+a_{10}x+a_{01}y+a_{20}x^{2}+a_{11}xy+a_{02}y^{2}+a_{21}x^{2}y+a_{12}xy^{2}+a_{22}x^{2}y^{2}+a_{30}x^{3}+a_{03}y^{3}+a_{31}x^{3}y+a_{13}xy^{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

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: ${\displaystyle f(0,0),f(1,0),f(0,1),f(1,1)}$. You want to estimate some arbitrary ${\displaystyle 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 ${\displaystyle 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., ${\displaystyle f(0,1)}$ ${\displaystyle =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}}$ ${\displaystyle =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: ${\displaystyle 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

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"

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

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

• What is ${\displaystyle x}$ in ${\displaystyle 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 ${\displaystyle 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 ${\displaystyle a_{i}}$ numbers?

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

## Needs Work

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)

## Removed 4x4 matrix solution

There was a solution given right above the table of contents that expressed the bicubic coefficients as a product of three 4x4 matrices. I tried to use this and discovered that it does not give the same results as the 16x16 matrix solution above it (which is correct, as far as I can tell). Since there's no citation and it appears incorrect, I have removed it. Fallingmasonry (talk) 21:12, 13 November 2015 (UTC)

The equations is true and can be confirmed by following mathematica code.

invA={{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0},{-3,3,0,0,-2,-1,0,0,0,0,0,0,0,0,0,0},{2,-2,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0},{0,0,0,0,0,0,0,0,-3,3,0,0,-2,-1,0,0},{0,0,0,0,0,0,0,0,2,-2,0,0,1,1,0,0},{-3,0,3,0,0,0,0,0,-2,0,-1,0,0,0,0,0},{0,0,0,0,-3,0,3,0,0,0,0,0,-2,0,-1,0},{9,-9,-9,9,6,3,-6,-3,6,-6,3,-3,4,2,2,1},{-6,6,6,-6,-3,-3,3,3,-4,4,-2,2,-2,-2,-1,-1},{2,0,-2,0,0,0,0,0,1,0,1,0,0,0,0,0},{0,0,0,0,2,0,-2,0,0,0,0,0,1,0,1,0},{-6,6,6,-6,-4,-2,4,2,-3,3,-3,3,-2,-1,-2,-1},{4,-4,-4,4,2,2,-2,-2,2,-2,2,-2,1,1,1,1}};
invA.{f00,f10,f01,f11,fx00,fx10,fx01,fx11,fy00,fy10,fy01,fy11,fxy00,fxy10,fxy01,fxy11};
{{1,0,0,0},{0,0,1,0},{-3,3,-2,-1},{2,-2,1,1}}.{{f00,f01,fy00,fy01},{f10,f11,fy10,fy11},{fx00,fx01,fxy00,fxy01},{fx10,fx11,fxy10,fxy11}}.{{1,0,-3,2},{0,0,3,-2},{0,1,-2,1},{0,0,-1,1}}//Transpose//Flatten;
%==%%//Simplify


## Assessment comment

The comment(s) below were originally left at Talk:Bicubic interpolation/Comments, and are posted here for posterity. Following several discussions in past years, these subpages are now deprecated. The comments may be irrelevant or outdated; if so, please feel free to remove this section.

 Add references. Details on procedure when f is given on a 4x4 grid, instead of f and Df on a 2x2 grid. Error analysis. -- Jitse Niesen (talk) 08:16, 5 August 2007 (UTC)

Last edited at 08:16, 5 August 2007 (UTC). Substituted at 01:48, 5 May 2016 (UTC)

## Woah... Lede too excessive

The lede is too excessive. The lede should be moderately short and not get into the smaller details (those belong in the main body of the article). Needs to be adjusted to conform to Wikipedia's lede guidelines. — al-Shimoni (talk) 20:28, 9 September 2016 (UTC)