Układy iterowanych przekształceń
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 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 oznacza ciągłe przekształcenie płaszczyzny w siebie. Jeśli zatem oznacza dowolny punkt płaszczyzny, to jest również jej punktem. Od razu zauważamy, że funkcja wyznacza również przekształcenie zbioru wszystkich figur w płaszczyźnie w ten sam zbiór; jeśli jest figurą (tj. dowolnym zbiorem punktów płaszczyzny), to też jest figurą, która składa się z punktów dla wszystkich punktów Zauważmy też, że jeśli figura jest fraktalem (zgodnie z przyjętą definicją), to figura również nim jest.
Oznaczymy literą 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 Dla dowolnego możemy każdy punkt figury nakryć kołem o promieniu (biorąc koło o środku w nakrywanym punkcie). Epsilonowe rozszerzenie figury które oznaczymy jest sumą tych wszystkich kół. Dla przyjmujemy Dla dowolnych dwóch fraktali, i istnieje takie nieujemne że oraz Najmniejsze takie przyjmiemy za odległość figur i W ten sposób w zbiorze określiliśmy metrykę (tzw. metrykę Hausdorffa), którą oznaczymy symbolem Ł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 wynikało, że i abyśmy mieli w zbiorze wszystkie zbiory jednopunktowe.
Mamy zatem dwie różne przestrzenie metryczne: płaszczyznę w której odległość (punktów) mierzymy w zwykły sposób (tę metrykę oznaczymy ), i przestrzeń z metryką Zauważmy, że dla dowolnych punktów jest Możemy wybrać dowolne przekształcenia ciągłe płaszczyzny w siebie; przekształceniom tym odpowiadają przekształcenia przestrzeni w siebie. Użyjemy ich do określenia kolejnego przekształcenia przyjmując, że dla dowolnej figury jest
Definicja. Mówimy, że przekształcenie (dowolnej) przestrzeni metrycznej (z metryką ) jest zwężające, jeśli istnieje taka stała że dla dowolnych punktów tej przestrzeni zachodzi
Udowodnimy
Twierdzenie (Twierdzenie Hutchinsona). Przekształcenie jest zwężające, jeśli wszystkie przekształcenia użyte do zdefiniowania przekształcenia są zwężające.
Dowód. Przypuśćmy, że przekształcenia są zwężające. Zatem istnieje taka liczba że dla dowolnych punktów i oraz dla jest Niech i niech Stąd dla każdego punktu istnieje taki punkt że (na przykład, należący do środek koła o promieniu w którym leży punkt ). Ale wtedy dla każdego mamy skąd wynika, że figura jest zawarta w epsilonowym rozszerzeniu dla Możemy więc napisać
i podobnie dowodzimy, że Stąd
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 z metryką jest zupełną przestrzenią metryczną (choć nie są to trudne dowody). Punkt stały przekształcenia określonego zgodnie z opisem podanym wyżej, jest fraktalem, tj. pewną figurą niepustą, domkniętą i ograniczoną; oznaczmy ją literą Z jakich punktów składa się ta figura? Przekształcenia są zwężające, a zatem każde z nich ma jeden punkt stały w płaszczyźnie Punkty te, oczywiście, należą do figury Weźmy dowolne (skończone) złożenie naszych przekształceń, Ono też jest przekształceniem zwężającym płaszczyzny i jego punkt stały również należy do Można dowieść, że figura 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 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 zależy od liczb reprezentujących przekształcenia 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 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 ; wszystkie one polegają na iterowaniu przekształceń 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ń – 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
Metoda I. W każdej iteracji rysujemy bieżący punkt a następnie losujemy liczbę i obliczamy 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 W każdej iteracji wyjmujemy punkt z kolejki, obliczamy jego obrazy we wszystkich przekształceniach 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 przy ustalonej rozdzielczości rastra. Stosując tę i następną metodę, należy zadbać o to, aby cała figura zmieściła się na obrazie.
Metoda IV. Rysujemy poteksturowanych równoległoboków, będących obrazami prostokąta, w którym tworzymy obraz, w przekształceniach ; 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.
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 i przesunięcia, przemieszczającego pewien punkt na jeden z pięciu punktów rozmieszczonych równomiernie na okręgu. Z lewej strony mamy a z prawej Zwiększając dalej 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 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.
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.