Bicubic Interpolation

Jeg prøver at lave bicubic interpolation på en 8 * 8 matrix (billede) vist nedenfor.

A = 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 10 20 30 40 50 60 70 80 90 100 110 120 130 140 

Jeg brugte følgende matlab-kode til det, og jeg fik en output

interp2(A,"bicubic") 

Men selv efter googling får jeg ikke hvordan man gør det manuelt. Kan nogen hjælpe mig med at få ideen ved hjælp af dette eksempel (kun for få pixels)?

Svar

Her ret god forklaring.

Jeg begynder med at overveje 1D-tilfælde af kubisk interpolering (fordi det er lettere at forklare) og derefter gå videre til 2D-sagen.

Grundidéen med kubisk interpolering er at estimere værdierne mellem to punkter som en kubisk funktion, $ f (x) $, med første afledte, $ f “(x) $

$$ f (x) = ax ^ 3 + bx ^ 2 + cx + d $$ $$ f “(x) = 3ax ^ 2 + 2bx + c $$

så, når den splejses til de tilstødende kubiske splines til venstre og til højre, er den interpolerede funktion (“nulderivat”) og dens første afledte kontinuerlig. lig med dem for den højre grænse for den tilstødende spline umiddelbart til venstre.

Uden tab af generalitet kan vi antage, at vi interpolerer mellem $ x = 0 $ og $ x = 1 $ . På venstre og højre grænser ser vi, at

$$ f (0) = d $$ $$ f (1) = a + b + c + d $$ $$ f “(0) = c $$ $$ f “(1) = 3a + 2b + c $$

Løsning af polynomkoefficienterne

$$ a = 2f (0) – 2f (1 ) + f “(0) + f” (1) $$ $$ b = -3f (0) + 3f (1) – 2f “(0) – f” (1) $$ $$ $$ = f “( 0) $$ $$ d = f (0) $$

Overvej nu de fire punkter omkring regionen, der estimeres, som er $ (- 1, y _ {- 1}) $, $ (0 , y_0) $, $ (1, y_1) $, $ (2, y_2) $ og pålægge randbetingelser, der

$$ f (0) = y_0 $$ $$ f (1) = y_1 $$

og definer de to grænsederivater som

$$ f “(0) = \ frac {y_1-y _ {- 1}} {2} $$ $$ f “(1) = \ frac {y_2-y_0} {2} $$

hvilket svarer til, hvordan de defineres for de tilstødende splines.

Derefter

$$ a = – \ frac {y _ {- 1}} {2} + \ frac {3y_0} {2} – \ frac {3y_1} {2} + \ frac {y_2} {2} $$ $$ b = y _ {- 1} – \ frac {5y_0} {2} + 2y_1 – \ frac {y_2} {2} $$ $$ c = – \ frac {y _ {- 1}} {2} + \ frac {y_1} {2} $$ $$ d = y_0 $$

når koefficienterne er kendt, kan du interpolere $ f (x) $ for et hvilket som helst punkt mellem de centrale 2 punkter, $ (0 , y_0) $ og $ (1, y_1) $.

For bikubisk interpolation er princippet stort set det samme, men du estimerer en overflade ved hjælp af 16 point (4×4 gitter) snarere end blot en kurve. En enkel måde at gøre dette på er først at interpolere kolonnerne og derefter interpolere de resulterende rækker.

Kommentarer

  • disse er BTW, også kaldet Hermite polynomier.
  • Jeg har aldrig forstået, hvad alt vrøvl over kubiske eremitsplines var, før jeg læste dette svar. Det er så fantastisk, tak så meget!
  • Når du foretager bilinær interpolation, foretager du lineær interpolation for en variabel, derefter lineær interpolation for den anden. Så bicubic interpolation er den samme: gør cubic interpolation for en variabel, så cubic interpolation for den anden, ikke?

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *