Încerc să fac interpolare bicubică pe o matrice 8 * 8 (imagine) prezentată mai jos.
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
Am folosit următorul cod matlab pentru acesta și am obținut o ieșire
interp2(A,"bicubic")
Dar nici după googling nu primesc cum se face manual. Poate cineva să mă ajute să obțin ideea folosind acest exemplu (doar pentru câțiva pixeli)?
Răspunde
Aici explicații destul de bune.
Voi începe prin a lua în considerare cazul 1D de interpolare cubică (deoarece este mai ușor de explicat) și apoi voi trece la cazul 2D.
Ideea de bază a interpolației cubice este de a estima valorile dintre oricare două puncte ca o funcție cubică, $ f (x) $, cu prima derivată, $ f „(x) $
$$ f (x) = ax ^ 3 + bx ^ 2 + cx + d $$ $$ f „(x) = 3ax ^ 2 + 2bx + c $$
astfel încât, atunci când sunt îmbinate la spline cubice adiacente din stânga și din dreapta, funcția interpolată („derivatul zero”) și prima sa derivată sunt continue. Asta înseamnă, la limita stângă a unei spline date, zero și primele derivate sunt egale cu cele de la limita dreaptă a splinei adiacente imediat la stânga.
Fără pierderea generalității, putem presupune că interpolăm între $ x = 0 $ și $ x = 1 $ . În limitele stânga și dreapta, vedem că
$$ f (0) = d $$ $$ f (1) = a + b + c + d $$ $$ f „(0) = c $$ $$ f „(1) = 3a + 2b + c $$
Rezolvarea coeficienților polinomiali
$$ a = 2f (0) – 2f (1 ) + f „(0) + f” (1) $$ $$ b = -3f (0) + 3f (1) – 2f „(0) – f” (1) $$ $$ c = f „( 0) $$ $$ d = f (0) $$
Acum luați în considerare cele patru puncte din regiune care sunt estimate, care sunt $ (- 1, y _ {- 1}) $, $ (0 , y_0) $, $ (1, y_1) $, $ (2, y_2) $ și impune condiții limită care
$$ f (0) = y_0 $$ $$ f (1) = y_1 $$
și definiți cele două derivate limită ca
$$ f „(0) = \ frac {y_1-y _ {- 1}} {2} $$ $$ f „(1) = \ frac {y_2-y_0} {2} $$
ceea ce este în concordanță cu modul în care vor fi definite pentru spline adiacente.
Atunci
$$ 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 $$
după ce se cunosc coeficienții, puteți interpola $ f (x) $ pentru orice punct dintre cele 2 puncte centrale, $ (0 , y_0) $ și $ (1, y_1) $.
Pentru interpolare bicubică, principiul este cam același, dar estimați o suprafață folosind 16 puncte (grilă 4×4), mai degrabă decât o curbă. O modalitate simplă de a face acest lucru este interpola mai întâi coloanele și apoi interpola rândurile rezultate.
Comentarii
- acestea sunt, BTW, numite și Hermite polinoame.
- Nu am înțeles niciodată ce a fost toată agitația asupra splinei cubice de pustnic înainte de a citi acest răspuns. Este atât de minunat, vă mulțumesc!
- Când efectuați interpolare biliniară, efectuați interpolare liniară pentru o variabilă, apoi interpolare liniară pentru cealaltă. Deci interpolare bicubică este aceeași: interpolație cubică pentru o variabilă, apoi interpolare cubică pentru cealaltă, nu?