Yritän tehdä kaksikubista interpolointia alla esitetyllä 8 * 8 -matriisilla (kuva).
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
Käytin siihen seuraavaa matlab-koodia ja sain lähdön
interp2(A,"bicubic")
Mutta googlen jälkeen enkä saa miten se tehdään manuaalisesti. Voisiko kukaan auttaa minua saamaan idean tämän esimerkin avulla (vain muutamalle pikselille)?
Vastaa
Tässä melko hyvä selitys.
Aloitan tarkastelemalla kuutiointerpolaation 1D-tapausta (koska sen selittäminen on helpompaa) ja jatka sitten 2D-tapausta.
Kuutiomuotoisen interpolaation perusajatuksena on arvioida kahden pisteen väliset arvot kuutiofunktiona $ f (x) $, ensimmäisen johdannaisen ollessa $ f ”(x) $
$$ f (x) = ax ^ 3 + bx ^ 2 + cx + d $$ $$ f ”(x) = 3ax ^ 2 + 2bx + c $$
niin, kun ne on liitetty vierekkäisiin kuutio-uriin vasemmalla ja oikealla puolella, interpoloitu funktio (”nollajohdannainen”) ja sen ensimmäinen johdannainen ovat jatkuvia. Tämä tarkoittaa, että nollan ja ensimmäiset johdannaiset ovat yhtä suuri kuin viereisen uran oikean reunan reunat heti vasemmalle.
Menettämättä yleisyyttä voidaan olettaa, että interpoloimme välillä $ x = 0 $ ja $ x = 1 $ . Vasemmalla ja oikealla rajalla näemme, että
$$ f (0) = d $$ $$ f (1) = a + b + c + d $$ $$ f ”(0) = c $$ $$ f ”(1) = 3a + 2b + c $$
Polynomikertoimien ratkaiseminen
$$ a = 2f (0) – 2f (1 ) + f ”(0) + f” (1) $$ $$ b = -3f (0) + 3f (1) – 2f ”(0) – f” (1) $$ $$ c = f ”( 0) $$ $$ d = f (0) $$
Harkitse nyt arvioitavaa aluetta ympäröivää neljää pistettä, jotka ovat $ (- 1, y _ {- 1}) $, $ (0 , y_0) $, $ (1, y_1) $, $ (2, y_2) $ ja aseta rajaehdot, jotka
$$ f (0) = y_0 $$ $$ f (1) = y_1 $$
ja määritä kaksi rajajohdannaista seuraavasti:
$$ f ”(0) = \ frac {y_1-y _ {- 1}} {2} $$ $$ f ”(1) = \ frac {y_2-y_0} {2} $$
mikä on johdonmukaista sen kanssa, miten ne määritetään vierekkäisille urille.
Sitten
$$ 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 $$
kun kertoimet ovat tiedossa, voit interpoloida $ f (x) $ mistä tahansa pisteestä keskimmäisten 2 pisteen, $ (0) välillä , y_0) $ ja $ (1, y_1) $.
Bikubisen interpoloinnin periaate on suunnilleen sama, mutta pinta-ala arvioidaan käyttämällä 16 pistettä (4×4 ruudukko) eikä vain käyrää. Yksi yksinkertainen tapa tehdä tämä on ensin interpoloida sarakkeet ja sitten interpoloida tuloksena olevat rivit.
Kommentit
- nämä ovat BTW, jota kutsutaan myös Hermiteiksi polynomit.
- En ole koskaan ymmärtänyt, mikä kuutioisissa hermiittiurheissa tapahtunut melu oli ennen tämän vastauksen lukemista. Se on niin mahtavaa, kiitos paljon!
- Kun teet bilineaarista interpolointia, teet lineaarisen interpoloinnin yhdelle muuttujalle ja sitten lineaarisen interpoloinnin toiselle. Bikubinen interpolointi on siis sama: tehdäänkö kuutiointerpolointi yhdelle muuttujalle, sitten kuutiointerpolointi toiselle, eikö?