Interpolacja dwusześcienna

0

Witam, chciałbym wykorzystać interpolację dwusześcienną przy skalowaniu obrazków - a dokładnie przy ich powiększaniu.

Metoda, ta uwzględnia kolor od wszystkich ośmiu pikseli sąsiadujących z pikselem interpolowanym.

Obrazek będzie powiększany dwukrotnie (np. z wymiarów 4x4 na 8x8).

Początkowo mam bitmapę jak na rysunku:

user image

Po dwukrotnym powiększeniu otrzymuję coś takiego:

user image

I teraz problem: jak wypełnić brakujące piksele? (Tzn. te o białym tle i czerwonych numerkach). Oczywiście operację należy wykonać dla każdej składowej koloru, ale zajmijmy się tylko jedną składową.

Od którego piksela należy w ogóle zacząć? Powiedzmy, że chciałbym zająć się pikselem 17, ale tutaj mam tylko informację na temat dwóch sąsiadujących pikseli.
Albo, jeśli zacząć od 22: tutaj informacja nt. czterech sąsiadujących pikseli.

I tutaj jest problem. Jak mam utworzyć brakujące piksele, jeśli mam informację jedynie od, maksymalnie, czterech sąsiadujących - a nie od ośmiu.

0

Nie wiem, ale proszę, oto jest gotowiec:
http://blog.livedoor.jp/junki560/archives/30033610.html
Interpolacja dwusześcienna to „bicubic”.
Potrzebny będzie unit, do pobrania stąd:
http://blog.livedoor.jp/junki560/archives/29151537.html

Koleś ma widzę wiele innych ciekawych przykładów, ich lista jest tu:
http://blog.livedoor.jp/junki560/archives/30287059.html
Niestety, niektóre przykłady wymagają jakiegoś unitu ImageUtils, ale link do niego nie działa.

0

wyglada na usrednianie piksely ktore sa na szaro czyli usredniamy wartosci tych pikseli

0

GIMP ma zaimplementowane skalowanie dwusześcienne pod nazwą "sześcienne" (przynajmniej tak teraz zasugerował wujek Google w wynikach). Jest też skalowanie sinusoidalne, potencjalnie lepsze pod nazwą Lanczos.

Jeśli chodzi o piksele na krawędziach, to chyba dubluje się piksele z krawędzi, aby było z czego interpolować. Ewentualnie używa się innych wzorków dla tych pikseli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1