Pokouším se o bikubickou interpolaci na matici (obrázek) 8 * 8 zobrazené níže.
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
Použil jsem k tomu následující kód matlabu a dostal jsem výstup
interp2(A,"bicubic")
Ale ani po googlování se mi nedaří jak to udělat ručně. Může mi někdo pomoci získat nápad pomocí tohoto příkladu (pouze pro několik pixelů)?
Odpověď
Tady docela dobré vysvětlení.
Začnu tím, že vezmeme v úvahu 1D případ kubické interpolace (protože jeho vysvětlení je snazší) a poté přejdu na 2D případ.
Základní myšlenkou kubické interpolace je odhadnout hodnoty mezi libovolnými dvěma body pomocí kubické funkce, $ f (x) $, s první derivací, $ f „(x) $
$$ f (x) = ax ^ 3 + bx ^ 2 + cx + d $$ $$ f „(x) = 3ax ^ 2 + 2bx + c $$
takže, když jsou spojeny se sousedními kubickými splajny nalevo a napravo, jsou interpolovaná funkce („derivát nuly“) a její první derivace spojitá. To znamená, že na levé hranici některého daného splajnu jsou nula a první derivace rovná těm na pravé hranici sousedního splajnu bezprostředně doleva.
Bez ztráty obecnosti můžeme předpokládat, že interpolujeme mezi $ x = 0 $ a $ x = 1 $ . Na levé a pravé hranici vidíme, že
$$ f (0) = d $$ $$ f (1) = a + b + c + d $$ $$ f „(0) = c $$ $$ f „(1) = 3a + 2b + c $$
Řešení polynomiálních koeficientů
$$ a = 2f (0) – 2f (1 ) + f „(0) + f“ (1) $$ $$ b = -3f (0) + 3f (1) – 2f „(0) – f“ (1) $$ $$ c = f „( 0) $$ $$ d = f (0) $$
Nyní zvažte čtyři odhadované body kolem regionu, které jsou $ (- 1, y _ {- 1}) $, $ (0 , y_0) $, $ (1, y_1) $, $ (2, y_2) $ a ukládá okrajové podmínky, které
$$ f (0) = y_0 $$ $$ f (1) = y_1 $$
a definujte dva hraniční deriváty jako
$$ f „(0) = \ frac {y_1-y _ {- 1}} {2} $$ $$ f „(1) = \ frac {y_2-y_0} {2} $$
což odpovídá tomu, jak budou definovány pro sousední splajny.
Potom
$$ 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 $$
jakmile jsou známy koeficienty, můžete interpolovat $ f (x) $ pro libovolný bod mezi středními 2 body, $ (0 , y_0) $ a $ (1, y_1) $.
Pro bikubickou interpolaci je princip téměř stejný, ale povrch odhadujete spíše pomocí 16 bodů (mřížka 4×4) než jen pomocí křivky. Jedním z jednoduchých způsobů je nejprve interpolovat sloupce a poté interpolovat výsledné řádky.
Komentáře
- to jsou BTW, také zvané Hermite polynomy.
- Nikdy jsem nepochopil, jaký byl rozruch kolem kubických hermitových spline, než jsem si přečetl tuto odpověď. Je to úžasné, moc vám děkuji!
- Když provádíte bilineární interpolaci, provádíte lineární interpolaci pro jednu proměnnou, pak lineární interpolaci pro druhou. Bikubická interpolace je tedy stejná: proveďte kubickou interpolaci pro jednu proměnnou, pak kubickou interpolaci pro druhou, že?