Két kocka interpolációt próbálok végrehajtani az alább látható 8 * 8 mátrixon (kép).
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
A következő matlab kódot használtam rá, és kaptam egy kimenetet
interp2(A,"bicubic")
De még a googlelés után sem kapok hogyan kell manuálisan csinálni. Tudna valaki segíteni az ötlet megvalósításában ennek a példának a használatával (csak néhány képpont esetén)?
Válasz
Itt nagyon jó magyarázat.
Először áttekintem a köbös interpoláció 1D esetét (mert könnyebben megmagyarázható), majd folytatom a 2D esetet.
A köbös interpoláció alapgondolata az, hogy a két pont közötti értékeket köbfüggvényként becsüljük meg: $ f (x) $, az első derivált, $ f “(x) $
$$ f (x) = ax ^ 3 + bx ^ 2 + cx + d $$ $$ f “(x) = 3ax ^ 2 + 2bx + c $$
úgy, amikor a bal és a jobb oldalon lévő szomszédos köbös spline-okhoz illesztik, az interpolált függvény (a “nulladik származék”) és az első deriváltja folyamatos. Ez azt jelenti, hogy egyes adott spline bal határánál a egyenlő a szomszédos spline jobb oldali határaival közvetlenül balra.
Az általánosság elvesztése nélkül feltételezhetjük, hogy $ x = 0 $ és $ x = 1 $ között interpolálunk . A bal és a jobb határon azt látjuk, hogy
$$ f (0) = d $$ $$ f (1) = a + b + c + d $$ $$ f “(0) = c $$ $$ f “(1) = 3a + 2b + c $$
A polinomi együtthatók megoldása
$$ a = 2f (0) – 2f (1 ) + f “(0) + f” (1) $$ $$ b = -3f (0) + 3f (1) – 2f “(0) – f” (1) $$ $$ c = f “( 0) $$ $$ d = f (0) $$
Most vegye figyelembe a becsült négy pontot a régió körül, amelyek $ (- 1, y _ {- 1}) $, $ (0 , y_0) $, $ (1, y_1) $, $ (2, y_2) $, és olyan határfeltételeket szab meg, amelyek
$$ f (0) = y_0 $$ $$ f (1) = y_1 $$
és definiálja a két határderiváltot
$$ f “(0) = \ frac {y_1-y _ {- 1}} {2} $$ $$ f “(1) = \ frac {y_2-y_0} {2} $$
ami összhangban áll a szomszédos spline-ok meghatározásával.
Ezután
$$ 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 $$
amint az együtthatók ismertek, interpolálhatja a $ f (x) $ -t a központi 2 pont, $ (0) közötti bármely pontra , y_0) $ és $ (1, y_1) $.
A bicubic interpolációnál az elv nagyjából megegyezik, de egy felületet 16 görbe (4×4 rács) felhasználásával becsül meg, nem pedig csak görbét. Ennek egyik egyszerű módja az, ha először interpolálja az oszlopokat, majd interpolálja a kapott sorokat.
Megjegyzések
- ezek a BTW, más néven Hermite polinomok.
- A válasz elolvasása előtt még soha nem értettem, hogy mi a felhajtás a köbös hermit spline-okon. Nagyon fantasztikus, köszönöm szépen!
- A bilinear interpoláció során az egyik változóhoz lineáris, a másikhoz lineáris interpolációt hajt végre. Tehát a bicubic interpoláció ugyanaz: csináld az egyik változóhoz a köbös interpolációt, a másiknál pedig a kubikus interpolációt?