Interpolazione bicubica

Sto cercando di eseguire linterpolazione bicubica su una matrice 8 * 8 (immagine) mostrata di seguito.

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 

Ho utilizzato il seguente codice Matlab e ho ottenuto un output

interp2(A,"bicubic") 

Ma anche dopo aver cercato su Google non riesco a ottenere come farlo manualmente. Qualcuno può aiutarmi a ottenere lidea utilizzando questo esempio (solo per pochi pixel)?

Risposta

Qui spiegazione piuttosto buona.

Inizierò considerando il caso 1D dellinterpolazione cubica (perché è più facile da spiegare) e poi passerò al caso 2D.

Lidea di base dellinterpolazione cubica è stimare i valori tra due punti qualsiasi come funzione cubica, $ f (x) $, con derivata prima, $ f “(x) $

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

in modo che, quando sono uniti alle spline cubiche adiacenti a sinistra ea destra, la funzione interpolata (la “derivata zero”) e la sua derivata prima sono continue. Ciò significa che, al limite sinistro di una determinata spline, la derivata zero e la derivata prima sono uguali a quelli del limite destro della spline adiacente immediatamente a sinistra.

Senza perdere di generalità, possiamo supporre di interpolare tra $ x = 0 $ e $ x = 1 $ . Ai confini sinistro e destro, vediamo che

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

Risoluzione per i coefficienti 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) $$

Ora considera i quattro punti attorno alla regione stimata, che sono $ (- 1, y _ {- 1}) $, $ (0 , y_0) $, $ (1, y_1) $, $ (2, y_2) $ e impongono condizioni al contorno che

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

e definisci le due derivate al contorno come

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

che è coerente con il modo in cui verranno definiti per le spline adiacenti.

Quindi

$$ 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 $$

una volta conosciuti i coefficienti è possibile interpolare $ f (x) $ per qualsiasi punto tra i 2 punti centrali, $ (0 , y_0) $ e $ (1, y_1) $.

Per linterpolazione bicubica il principio è più o meno lo stesso, ma si stima una superficie utilizzando 16 punti (griglia 4×4) anziché solo una curva. Un modo semplice per farlo è interpolare prima le colonne e poi interpolare le righe risultanti.

Commenti

  • queste sono, BTW, chiamate anche Hermite polinomi.
  • Non ho mai capito quale fosse il trambusto sulle spline ermite cubiche prima di leggere questa risposta. È così fantastico, grazie mille!
  • Quando si esegue linterpolazione bilineare, si esegue linterpolazione lineare per una variabile, quindi linterpolazione lineare per laltra. Quindi linterpolazione bicubica è la stessa: fai linterpolazione cubica per una variabile, quindi linterpolazione cubica per laltra, giusto?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *