Bicubic Interpolation (Norsk)

Jeg prøver å gjøre bicubic interpolering på en 8 * 8 matrise (bilde) 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 brukte følgende matlab-kode for det og fikk utdata

interp2(A,"bicubic") 

Men selv etter googling får jeg ikke hvordan du gjør det manuelt. Kan noen hjelpe meg med å få ideen ved å bruke dette eksemplet (bare for få piksler)?

Svar

Her ganske god forklaring.

Jeg begynner med å vurdere 1D-tilfelle av kubisk interpolasjon (fordi det er lettere å forklare) og deretter gå videre til 2D-saken.

Den grunnleggende ideen med kubisk interpolering er å estimere verdiene mellom to punkter med en kubisk funksjon, $ f (x) $, med første derivat, $ f «(x) $

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

slik at, når den er spleidd til de tilstøtende kubiske linjene til venstre og til høyre, er den interpolerte funksjonen («zeroth-derivatet») og dens første derivat kontinuerlig. lik de som er til høyre grense for tilstøtende spline umiddelbart til venstre.

Uten tap av generalitet kan vi anta at vi interpolerer mellom $ x = 0 $ og $ x = 1 $ . På venstre og høyre grense ser vi at

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

Løsning av polynomkoeffisientene

$$ a = 2f (0) – 2f (1 ) + f «(0) + f» (1) $$ $$ b = -3f (0) + 3f (1) – 2f «(0) – f» (1) $$ $$ c = f «( 0) $$ $$ d = f (0) $$

Vurder nå de fire punktene rundt regionen som estimeres, som er $ (- 1, y _ {- 1}) $, $ (0 , y_0) $, $ (1, y_1) $, $ (2, y_2) $, og innføre grensevilkår som

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

og definer de to grensederivatene som

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

som samsvarer med hvordan de vil bli definert for de tilstøtende splines.

Deretter

$$ 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 koeffisientene er kjent, kan du interpolere $ f (x) $ for et hvilket som helst punkt mellom de sentrale 2 punktene, $ (0 , y_0) $ og $ (1, y_1) $.

For bikubisk interpolering er prinsippet stort sett det samme, men du estimerer en overflate ved hjelp av 16 punkter (4×4 rutenett) i stedet for bare en kurve. En enkel måte å gjøre dette på er å først interpolere kolonnene og deretter interpolere de resulterende radene.

Kommentarer

  • disse er BTW, også kalt Hermite polynomer.
  • Jeg har aldri forstått alt oppstyret over kubiske eremittbretter var før jeg leste dette svaret. Det er så fantastisk, tusen takk!
  • Når du gjør bilinær interpolasjon, gjør du lineær interpolasjon for en variabel, deretter lineær interpolasjon for den andre. Så bikubisk interpolasjon er den samme: gjør kubisk interpolering for en variabel, så kubisk interpolasjon for den andre, ikke sant?

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *