Interpolation bicubique

Jessaie de faire une interpolation bicubique sur une matrice 8 * 8 (image) ci-dessous.

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 

Jai utilisé le code matlab suivant et jai obtenu une sortie

interp2(A,"bicubic") 

Mais même après avoir cherché sur Google, je » ne reçois pas comment le faire manuellement. Quelquun peut-il maider à avoir lidée en utilisant cet exemple (seulement pour quelques pixels)?

Réponse

Voici une assez bonne explication.

Je vais commencer par considérer le cas 1D de linterpolation cubique (car cest plus facile à expliquer) et ensuite passer au cas 2D.

Lidée de base de linterpolation cubique est destimer les valeurs entre deux points comme une fonction cubique, $ f (x) $, avec la première dérivée, $ f « (x) $

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

pour que, lorsquelle est épissée aux splines cubiques adjacentes à gauche et à droite, la fonction interpolée (le « dérivé zéro ») et sa première dérivée sont continues. Cela signifie quà la limite gauche dune spline donnée, les dérivées zéro et premières sont égal à ceux de la limite droite de la spline adjacente immédiatement à gauche.

Sans perte de généralité, nous pouvons supposer que nous interpolons entre $ x = 0 $ et $ x = 1 $ . Sur les limites gauche et droite, nous voyons que

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

Résolution des coefficients polynomiaux

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

Considérons maintenant les quatre points autour de la région estimée, qui sont $ (- 1, y _ {- 1}) $, $ (0 , y_0) $, $ (1, y_1) $, $ (2, y_2) $, et imposer des conditions aux limites qui

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

et définissez les deux dérivées de frontière comme

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

ce qui est cohérent avec la façon dont elles seront définies pour les splines adjacentes.

Alors

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

une fois que les coefficients sont connus, vous pouvez interpoler $ f (x) $ pour tout point entre les 2 points centraux, $ (0 , y_0) $ et $ (1, y_1) $.

Pour linterpolation bicubique, le principe est à peu près le même mais vous estimez une surface en utilisant 16 points (grille 4×4) plutôt quune simple courbe. Une façon simple de le faire est dinterpoler dabord les colonnes, puis dinterpoler les lignes résultantes.

Commentaires

  • ce sont, BTW, également appelé Hermite polynômes.
  • Je nai jamais compris ce quétait tout le tapage autour des splines hermites cubiques avant de lire cette réponse. Cest tellement génial, merci beaucoup!
  • Lorsque vous faites une interpolation bilinéaire, vous faites une interpolation linéaire pour une variable, puis une interpolation linéaire pour lautre. Linterpolation bicubique est donc la même: faire une interpolation cubique pour une variable, puis une interpolation cubique pour lautre, non?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *