Przeskocz do treści

Delta mi!

Układy iterowanych przekształceń

Przemysław Kiciak

o artykule ...

  • Publikacja w Delcie: lipiec 2011
  • Publikacja elektroniczna: 01-07-2011
  • Autor: Przemysław Kiciak
    Afiliacja: Wydział Matematyk, Informatyki i Mechaniki, Uniwersytet Warszawski
obrazek

Solkoll / wikipedia

Kto coś słyszał o fraktalach, zwykle potrafi wymienić dwie ich cechy charakterystyczne: figury te mają skomplikowany kształt (bardziej wtajemniczeni mówią o ułamkowym wymiarze; kto chce być bardziej wtajemniczony, przeczyta artykuł Krzysztofa Barańskiego na stronie 4) i wykazują samopodobieństwo (bardziej wtajemniczeni umieją powiedzieć, jakiego rodzaju: geometryczne, afiniczne, rzutowe, a może stochastyczne). Mówiąc ogólnie, cechy te ma również wiele obiektów spotykanych w świecie, a to otwiera szerokie pole do zastosowań fraktali w grafice komputerowej. Jej celem jest przecież naśladowanie rzeczywistości.

Zajmiemy się najprostszą metodą konstruowania i obrazowania fraktali, za pomocą układów iterowanych przekształceń (ang. iterated function systems, w skrócie IFS). U podstaw tej metody leży kilka twierdzeń. Choć twierdzenia te są niebanalne, ich dowody są niezbyt trudne, a komputerowe algorytmy generowania fraktali za pomocą IFS-ów są jeszcze prostsze.

Zacznijmy od ustalenia, co uważamy za fraktal. Przyjmiemy, że jest nim dowolny niepusty, domknięty i ograniczony zbiór punktów płaszczyzny euklidesowej math Zwróćmy uwagę, że w ten sposób za fraktale uznaliśmy także bardzo „porządne” figury, takie jak wielokąty, których wymiar nie jest ułamkiem. Odrzucenie takich figur (przez kogoś, komu zależy tylko na „prawdziwych” fraktalach) bardzo (i niepotrzebnie) skomplikowałoby teorię, a poza tym w grafice zwykłe wielokąty też się przydadzą, prawda?

Niech math oznacza ciągłe przekształcenie płaszczyzny w siebie. Jeśli zatem math  oznacza dowolny punkt płaszczyzny, to math jest również jej punktem. Od razu zauważamy, że funkcja math wyznacza również przekształcenie zbioru wszystkich figur w płaszczyźnie w ten sam zbiór; jeśli math  jest figurą (tj. dowolnym zbiorem punktów płaszczyzny), to math  też jest figurą, która składa się z punktów math dla wszystkich punktów  math  Zauważmy też, że jeśli figura math  jest fraktalem (zgodnie z przyjętą definicją), to figura math również nim jest.

Oznaczymy literą math  zbiór wszystkich fraktali na płaszczyźnie i zajmiemy się problemem mierzenia odległości między fraktalami. W tym celu określmy epsilonowe rozszerzenie figury. Niech math  Dla dowolnego math możemy każdy punkt figury math  nakryć kołem o promieniu math (biorąc koło o środku w nakrywanym punkcie). Epsilonowe rozszerzenie figury math  które oznaczymy math jest sumą tych wszystkich kół. Dla math  przyjmujemy math Dla dowolnych dwóch fraktali, math  i math  istnieje takie nieujemne math że math  oraz math  Najmniejsze takie math przyjmiemy za odległość figur math  i math  W ten sposób w zbiorze math  określiliśmy metrykę (tzw.  metrykę Hausdorffa), którą oznaczymy symbolem math Łatwo jest zauważyć, do czego są tu potrzebne założenia, że fraktale są niepuste i ograniczone. Założenie, iż są one domknięte, jest potrzebne m.in. po to, aby z równości math wynikało, że math  i abyśmy mieli w zbiorze math  wszystkie zbiory jednopunktowe.

Mamy zatem dwie różne przestrzenie metryczne: płaszczyznę math w której odległość (punktów) mierzymy w zwykły sposób (tę metrykę oznaczymy math), i przestrzeń math  z metryką math Zauważmy, że dla dowolnych punktów math jest math Możemy wybrać dowolne przekształcenia ciągłe math płaszczyzny math w siebie; przekształceniom tym odpowiadają przekształcenia math przestrzeni math  w siebie. Użyjemy ich do określenia kolejnego przekształcenia math  przyjmując, że dla dowolnej figury math jest

display-math

Definicja. Mówimy, że przekształcenie math (dowolnej) przestrzeni metrycznej (z metryką math) jest zwężające, jeśli istnieje taka stała math że dla dowolnych punktów math tej przestrzeni zachodzi math

Udowodnimy

Twierdzenie (Twierdzenie Hutchinsona). Przekształcenie math  jest zwężające, jeśli wszystkie przekształcenia math użyte do zdefiniowania przekształcenia math są zwężające.

Dowód. Przypuśćmy, że przekształcenia math są zwężające. Zatem istnieje taka liczba math że dla dowolnych punktów math  i math  oraz dla math jest math Niech math i niech math  Stąd dla każdego punktu math istnieje taki punkt math że math (na przykład, należący do math środek koła o promieniu math w którym leży punkt math ). Ale wtedy dla każdego math mamy math skąd wynika, że figura math  jest zawarta w epsilonowym rozszerzeniu math dla  math Możemy więc napisać

display-math

i podobnie dowodzimy, że math  Stąd

display-math

co kończy dowód.


Drugie z najważniejszych twierdzeń leżących u podstaw układów iterowanych przekształceń to

Twierdzenie (Twierdzenie Banacha o punkcie stałym). W zupełnej przestrzeni metrycznej dowolne przekształcenie zwężające ma jednoznacznie określony punkt stały.

Nie będziemy dowodzili tu tego twierdzenia, podobnie jak faktu, że zbiór math  z metryką math jest zupełną przestrzenią metryczną (choć nie są to trudne dowody). Punkt stały przekształcenia math określonego zgodnie z opisem podanym wyżej, jest fraktalem, tj. pewną figurą niepustą, domkniętą i ograniczoną; oznaczmy ją literą math Z jakich punktów składa się ta figura? Przekształcenia math są zwężające, a zatem każde z nich ma jeden punkt stały w płaszczyźnie math Punkty te, oczywiście, należą do figury math Weźmy dowolne (skończone) złożenie naszych przekształceń, math Ono też jest przekształceniem zwężającym płaszczyzny math i jego punkt stały również należy do math Można dowieść, że figura math jest domknięciem zbioru punktów stałych wszystkich takich złożeń.

Poza ciągłością, a potem własnością zwężania, nie nakładaliśmy żadnych warunków na przekształcenia math Najczęściej w praktyce IFS-y są budowane z przekształceń afinicznych. Każde afiniczne przekształcenie płaszczyzny może być reprezentowane za pomocą sześciu (czyli niewielu) liczb i obliczenia z nim związane zabierają bardzo mało czasu. Ma miejsce jeszcze jeden istotny fakt, którego ścisły dowód jest, niestety, dosyć żmudny: figura math zależy od liczb reprezentujących przekształcenia math w sposób ciągły. Bardzo małe zaburzenia tych liczb powodują zatem niewielkie zmiany otrzymanych obrazów.

Przejdźmy do praktyki: aby określić IFS, wybieramy na płaszczyźnie jeden duży trójkąt i math mniejszych; te mniejsze trójkąty przyjmujemy za obrazy trójkąta dużego, co określa poszczególne przekształcenia afiniczne.

Istnieje kilka metod tworzenia obrazu figury math; wszystkie one polegają na iterowaniu przekształceń math czyli stosowaniu ich do pewnej figury, a potem do jej obrazów w przekształceniach wykonanych wcześniej. Możemy zacząć od figury jednopunktowej. Najlepiej jest przyjąć, że składa się ona z punktu stałego dowolnego z przekształceń math – punkt ten łatwo jest znaleźć, rozwiązując układ dwóch równań liniowych, a jeśli zaczniemy od niego, to wszystkie kolejno otrzymane punkty będą należeć do figury math

Metoda I. W każdej iteracji rysujemy bieżący punkt math a następnie losujemy liczbę math i obliczamy math Metoda ta potrzebuje bardzo mało pamięci. Jej wadą jest konieczność starannego dobrania rozkładu prawdopodobieństwa do losowania. Jeśli rozkład jest dobrze dobrany, to zwykle wystarczy wykonać od kilkunastu tysięcy do kilkuset tysięcy iteracji.


Metoda II. Użyjemy kolejki, do której wstawimy punkt math W każdej iteracji wyjmujemy punkt z kolejki, obliczamy jego obrazy we wszystkich przekształceniach math każdy z nich wstawiamy do kolejki i rysujemy. Potrzebna jest zatem kolejka mogąca pomieścić prawie tyle punktów, ile chcemy wyznaczyć (zwykle co najmniej kilka tysięcy).


Metoda III. Podobnie jak w metodzie drugiej, użyjemy kolejki; nowością jest to, że wcześniej ustalamy wielkość (w pikselach) obrazu, który chcemy uzyskać. Obliczenia prowadzimy w układzie współrzędnych obrazu i po obliczeniu każdego punktu zaokrąglamy jego współrzędne do liczb całkowitych. Do kolejki wstawiamy tylko te piksele, które nie były zamalowane wcześniej. W tej metodzie wykonamy skończenie wiele iteracji – algorytm zakończy działanie po opróżnieniu kolejki. Otrzymany rysunek jest najlepszym przybliżeniem figury math przy ustalonej rozdzielczości rastra. Stosując tę i następną metodę, należy zadbać o to, aby cała figura math zmieściła się na obrazie.


Metoda IV. Rysujemy math poteksturowanych równoległoboków, będących obrazami prostokąta, w którym tworzymy obraz, w przekształceniach math; otrzymanego obrazu używamy jako teksturę w następnej iteracji. W tej metodzie wystarczy wykonać kilkanaście lub najwyżej kilkadziesiąt iteracji. Kolejka nie jest tu potrzebna, ale bardzo się przydaje zrównoleglenie obliczeń przy użyciu nowoczesnej karty graficznej.


Zobaczmy kilka przykładowych obrazków.

obrazek

Rys. 1

Rys. 1

Na rysunku 1  mamy dwa fraktale otrzymane za pomocą układów pięciu przekształceń. Każde przekształcenie jest złożeniem jednokładności o skali math i przesunięcia, przemieszczającego pewien punkt na jeden z pięciu punktów rozmieszczonych równomiernie na okręgu. Z lewej strony mamy math a z prawej math Zwiększając dalej math otrzymalibyśmy pięciokąt foremny.

Najbardziej znanymi fraktalami, które można otrzymać, iterując przekształcenia afiniczne, są paprocie Barnsleya, generowane przez układy czterech przekształceń, ale można też „hodować” w ten sposób inne rośliny; już dla math można uzyskać ciekawe efekty (Rys. 2).

Figury o skomplikowanym kształcie można zatem reprezentować przy użyciu bardzo niewielkiej ilości danych. Obrazek na rysunku 3  przedstawia figury wygenerowane za pomocą pewnej liczby IFS-ów, których opis składa się z dwustu kilkudziesięciu liczb rzeczywistych.

obrazek

Rys. 5

Rys. 5

Rozwinięciem układów iterowanych przekształceń są algorytmy fraktalnej kompresji obrazów – są to jedne z najskuteczniejszych stosowanych obecnie technik kompresji. Umożliwiają one zapisywanie reprezentacji obrazów w małej ilości miejsca, a potem odtwarzanie tych obrazów z małym błędem. Oczywistą różnicą wobec IFS-ów jest przejście od określonych na płaszczyźnie funkcji przyjmujących tylko dwie wartości (punkt albo należy, albo nie należy do ustalonej figury) do funkcji przyjmujących wartości rzeczywiste. Tak samo, jak w przypadku fraktali generowanych przez IFS-y, gdzie krótki ciąg liczb reprezentujących poszczególne przekształcenia afiniczne umożliwia wygenerowanie obrazu figury o skomplikowanym kształcie, zapisane przez procedurę kompresji dane reprezentują pewne przekształcenie zwężające zbioru funkcji (obrazów) w siebie. Punktem stałym tego przekształcenia jest przybliżenie obrazu poddanego kompresji. Odtwarzanie obrazu polega na wykonaniu kilku lub kilkunastu iteracji tego przekształcenia.