Graphische Datenverarbeitung 2: Modellierung komplexer Objekte und photorealistische Bilderzeugung [Reprint 2018 ed.] 9783486789249, 9783486234695

Der zweite Band behandelt die Schritte zur Erzeugung komplexer photorealistischer Szenen. Aus dem Inhalt: Körpermodellie

198 100 49MB

German Pages 427 [428] Year 1997

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
Inhaltsverzeichnis
Vorwort
Kapitel 1. Körper
Kapitel 2. Fraktale Geometrie
Kapitel 3. Globale Beleuchtungsmodelle
Kapitel 4. Texturen
Kapitel 5. Grundlagen der Bildverarbeitung
Kapitel 6. Grundlagen der Mustererkennung
Kapitel 7. Volumendarstellungen
Kapitel 8. Lösungen zu den Übungsaufgaben
Literaturverzeichnis
Stichwortverzeichnis
Recommend Papers

Graphische Datenverarbeitung 2: Modellierung komplexer Objekte und photorealistische Bilderzeugung [Reprint 2018 ed.]
 9783486789249, 9783486234695

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

Graphische Datenverarbeitung 2 Modellierung komplexer Objekte und photorealistische Bilderzeugung von Prof. Dr.-Ing. José Encarnaçâo Technische Hochschule Darmstadt Prof. Dr.-Ing. Wolfgang Straßer Dr. rer. nat. Reinhard Klein Universität Tübingen 4., aktualisierte und wesentlich erweiterte Auflage

R. Oldenbourg Verlag München Wien 1997

Die ersten drei Auflagen dieses Werkes erschienen in einem Band und unter dem Titel "Computer Graphics"

Die Deutsche Bibliothek - CIP-Einheitsaufnahme Encarnaçâo, José: Graphische Datenverarbeitung / von José Encarnaçâo ; Wolfgang Straßer ; Reinhard Klein. - München ; Wien : Oldenbourg Bis 3. Aufl. u.d.T.: Encarnaçâo, José: Computer Graphics 2. Modellierung komplexer Objekte und photorealistische Bilderzeugung. - 4., aktualisierte und wesentlich erw. Aufl. - 1997 ISBN 3-486-23469-2

© 1997 R. Oldenbourg Verlag Rosenheimer Straße 145, D-81671 München Telefon: (089) 45051-0, Internet: http://www.oldenbourg.de Das Werk einschließlich aller Abbildungen ist urheberrechtlich geschützt. Jede Verwertung außerhalb der Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Das gilt insbesondere fur Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Bearbeitung in elektronischen Systemen. Lektorat: Margarete Metzger Herstellung: Rainer Hartl Umschlagkonzeption: Mendell & Oberer, München Gedruckt auf säure- und chlorfreiem Papier Gesamtherstellung: R. Oldenbourg Graphische Betriebe GmbH, München

5

Inhaltsverzeichnis 1 Körper 1.1 Repräsentationsschemata 1.1.1 Modellbildung 1.1.2 Kriterien zur Beurteilung von Repräsentationsschemata 1.1.3 Punktmengen-Modelle 1.1.4 Übersicht bekannter Repräsentationsschemata 1.2 Erzeugung und Manipulation von Körperinodellen 1.2.1 Generierung von Körpermodellen aus Grundkörpern 1.2.2 Regularisierte Boole'sche Mengenoperationen 1.3 Randrepräsentationen (Boundary Representation) 1.3.1 Begriffe aus der Graphentheorie und Topologie 1.3.2 Triangulierung 1.3.3 Orientierbarkeit von Polygonnetzen 1.3.4 Nichtebenflächig begrenzte Körper und Mannigfaltigkeiten 1.3.5 Euler-Poincaré-Formeln 1.3.6 Datenstrukturen 1.3.7 Euleroperatoren 1.3.8 Topologische Gültigkeit 1.3.9 Algorithmen für Boundary-Modelle 1.4 CSG 1.4.1 Darstellung und Konstruktion von CSG-Objekten 1.4.2 Algorithmen für CSG-Modelle 1.5 Zellmodelle 1.5.1 Zellzerlegungen 1.5.2 Räumliche Aufzählungsmethode - Spatial Enumeration 1.5.3 Quadtrees und Octrees 1.6 Hybridmodelle 1.6.1 Probleme mit Hybridmodellen 1.6.2 Aufbau eines Hybrid-Modellierers 1.7 Übungsaufgaben

13 13 13 16 17 18 19 20 23 24 25 29 30 31 34 37 40 43 44 46 46 48 51 51 52 53 57 58 59 60

6

INHALTSVERZEICHNIS

2 Fraktale G e o m e t r i e 2.1 Selbstähnlichkeit und fraktale Dimension 2.2 Dynamische Systeme 2.2.1 Grundbegriffe der Theorie diskreter dynamischer Systeme 2.2.2 Julia-Mengen 2.2.3 Die Mandelbrot-Menge 2.3 Stochastische Fraktale 2.3.1 Statistische Selbstähnlichkeit 2.3.2 Einige Grundlagen aus der Wahrscheinlichkeitstheorie 2.3.3 Die Brownsche Bewegung (Braunes Rauschen) 2.3.4 Die fraktale Brownsche Bewegung (fBm) 2.3.5 Algorithmen zur Berechnung stochastischer Fraktale 2.4 Iterierte Funktionensysteme 2.4.1 Chaosspiel und IFS-Code 2.4.2 Decodierung von IFS-Code 2.4.3 Das Collage-Theorem - Generieren von IFS-Code 2.4.4 Manipulation von IFS-Codes 2.5 Lindenmayersysteine 2.5.1 Einführung 2.5.2 Geklammerte L-Systeme 2.5.3 Weitere Modellierungstechniken mit L-Syst,emen 2.6 C + r - C o d e zum Kapitel fraktale Geometrie 2.6.1 Graphikroutinen 2.6.2 Levelsetmethode für die Mandelbrot-Menge 2.6.3 Algorithmen zur Berechnung stochastischer Fraktale 2.6.4 Algorithmus zur Dekodierung iterierter Funktionssysteme 2.6.5 Algorithmus zur Interpretation von kontextfreien Lindenmayersystemen 2.7 Übungsaufgaben

65 65 68 68 71 76 78 78 80 85 86 88 91 91 93 93 95 95 95 98 99 101 102 115 117 127 131 136

3 Globale Beleuchtungsmodelle 3.1 Strahlverfolgung (Raytracing) 3.1.1 Raumunterteilung mit regulären Gittern 3.1.2 Raunumterteilung mit Octrees 3.1.3 Szenenunterteilung mit. hierarchischen Bäumen 3.1.4 Mailbox-Technik 3.1.5 Schatten-Caches 3.1.6 Adaptive Rekursionstiefenkontrolle 3.1.7 Pixel-Selected Raytracing 3.1.8 Bewertung 3.2 Das Radiositv-Verfahren 3.2.1 Einführung 3.2.2 Die Beleuchtungs- und die Radiositygleichung 3.2.3 Lösung der Radiositygleichung 3.2.4 Lösung des Gleichungssystems 3.2.5 Berechnung von Formfaktoren

141 141 144 145 150 153 154 155 156 156 157 157 158 160 164 169

INHALTSVERZEICHNIS

7

3.2.6 Farben im Radiosity-Verfahren 3.2.7 Bewertung 3.3 Übungsaufgaben

180 182 182

4 Texturen 4.1 Einführung 4.1.1 Form und Erscheinungsbild 4.1.2 Texturabbildungen 4.1.3 Diskrete und prozedurale Texturen 4.1.4 Beeinflussung der Beleuchtungsrechnung 4.2 2D-Texturen 4.2.1 Rasterung texturierter Dreiecke 4.2.2 Texturierung parametrisierter Flächen 4.2.3 Texturierung komplexer Objektoberflächen 4.2.4 Texturkoordinaten außerhalb des Gültigkeitsbereichs 4.2.5 Reflection Mapping und Environment Mapping 4.2.6 Bump Mapping 4.3 Filterung diskreter 2D-Texturen 4.3.1 Beschreibung des Problems 4.3.2 Praktikable Berechnungsverfahren 4.4 3D-Texturen 4.4.1 Einführung 4.4.2 Texturkoordinaten 4.4.3 Texturfunktionen 4.4.4 Automatische Texturgenerierung 4.4.5 Bump Mapping 4.5 Übungsaufgaben

185 185 185 185 188 190 192 192 196 197 200 201 204 206 206 206 213 213 214 214 217 218 218

5 G r u n d l a g e n der Bildverarbeitung 5.1 Einführung 5.2 Digitale Halbtonverfahren 5.2.1 Verfahren mit festem Schwellwert 5.2.2 Verfahren mit variablem Schwellwert 5.2.3 Grautonmuster 5.2.4 Dot-Diffusion 5.3 Die Fourier-Transformation 5.3.1 Einleitung 5.3.2 Die kontinuierliche Fourier-Transformation 5.3.3 Die diskrete Fourier-Transformation 5.3.4 Eigenschaften der Fourier-Transformation 5.3.5 Graphische Auswertung des Faltungsintegrals 5.3.6 Abtasttheorem und Bildfilterung 5.3.7 Translation 5.3.8 Skalierung 5.3.9 Rotation 5.3.10 Quantisierungsfehler

221 221 224 225 227 229 230 232 232 233 242 243 246 248 256 258 259 261

8

INHALTSVERZEICHNIS

5.3.11 Fast Fourier Transformation ( F F T ) 5.4 Transformationen in den Frequenzraum 5.4.1 Die diskrete Cosinus-Transformation 5.4.2 Die Walsh-Transformation 5.4.3 Die Hadamard-Transformation 5.4.4 Die Hauptachsen-Transformation 5.4.5 Weitere Bildtransformationen 5.5 Bildverbesserung 5.5.1 Grauwertmanipulation 5.5.2 Histogrammanipulation 5.5.3 Gleitender Mittelwert und Medianfilter 5.5.4 Tiefpaßfilter 5.5.5 Hochpaßfilter 5.5.6 Butterworth-Filter 5.6 Übungsaufgaben

261 266 266 271 272 272 274 274 275 278 285 289 290 291 292

6 Grundlagen der Mustererkennung 6.1 Kantendetektion 6.1.1 Der Begriff der „Kanté', Kantenmodelle 6.1.2 Anforderungen und Schwierigkeiten bei der Kantendetektion 6.1.3 Kantendetektionsschema 6.1.4 Einteilung der Kantenoperatoren 6.1.5 Differentiation 6.1.6 Differenz-Operatoren erster Ordnung 6.1.7 Differenz-Operatoren zweiter Ordnung 6.1.8 Der Marr-Hildreth-Operator 6.1.9 Der Canny-Operator 6.1.10Die Hough-Transformation 6.2 Skelettierungsalgorithmen 6.2.1 Der Zhang/Suen-Algorithmus 6.2.2 Das Verfahren von .Ii 6.3 Bildsegmentierung 6.3.1 Schwellwertbildung zur Bildsegmentierung 6.3.2 Segmentierung mit Hilfe der Kantendetektion 6.3.3 Segmentierung durch Gebietswachstuxn 6.4 Übungsaufgaben

295 295 295 298 299 299 301 304 309 311 313 319 321 322 324 324 324 326 326 328

7 Volumendarstellungen 7.1 Direkte Volumendarstellung 7.1.1 Optische Modelle 7.1.2 Zuordnung von Farbe und Opazität 7.1.3 Raycasting 7.1.4 Projektion von Tetraedern 7.1.5 Projektion von Rekonstruktions-Kernen: Splatting 7.2 Indirekte Volumendarstellung 7.2.1 Konturverbinden

329 330 331 333 334 340 347 350 351

INHALTSVERZEICHNIS

8 8.1 8.2 8.3 8.4 8.5 8.6

9

7.2.2 Cuberille 7.2.3 Marching Cubes (MC) und Marching Tetraeder (MT) 7.2.4 Dividing Cubes

363 364 373

L ö s u n g e n zu d e n Ü b u n g s a u f g a b e n Lösungen zu Kapitel 1 Lösungen zu Kapitel 2 Lösungen zu Kapitel 3 Lösungen zu Kapitel 4 Lösungen zu Kapitel 5 Lösungen zu Kapitel 6

375 375 385 393 399 402 405

Literaturverzeichnis

407

Stichwortverzeichnis

423

11

Vorwort Die Graphische Datenverarbeitung (GDV) hat sich durch die immer noch anhaltenden Leistungssteigerungen in der Mikroelektronik zu einem der dynamischten Gebiete der Informatik entwickelt. Schlagworte wie Multi-Media, Scientific Visualization, Virtual Reality, Interaktives Fernsehen belegen diese Entwicklung. Theoretische Ergebnisse, die noch vor wenigen Jahren wegen ihres großen Rechen- und Speicherbedarfs für praktische Anwendungen irrelevant waren, bestimmen heute den Stand der Technik bei den führenden Herstellern von Graphiksystemen. Wettbewerbsvorteile auf der Produktebene sind nur noch durch Einsatz naturwissenschaftlicher Forschungsmethoden, wie z.B. Computersimulation und -animation möglich. Diese „virtuelle Werkbank'" lebt von den Fortschritten der GDV, die damit zu einem unverzichtbaren Werkzeug in Forschung und Entwicklung sowie in Industrie, Wirtschaft und Verwaltung geworden ist. Die Kennntnis ihrer Methoden und Algorithmen, der zugrundeliegenden Theorien und Systeme, der zugehörigen Systemtechnik und ihrer Anwendungen ist deshalb für Informatiker, Naturwissenschaftler und Ingenieure eine wichtige Voraussetzung für den beruflichen Erfolg. Die GDV kann heute in einem Buch nicht mehr vollständig behandelt werden. Wir haben uns deshalb zu einer Aufteilung des Stoffes entsprechend unserer Vorlesungszyklen an der T H D a r m s t a d t und der Universität Tübingen entschlossen und entsprechen damit auch einem dringenden Wunsch unserer Studenten nach einem vorlesungsbegleitenden Buch. Die umfangreichen Übungsaufgaben mit Lösungen unterstreichen den Lehrbuchcharakter und machen auch ein Selbststudium möglich. Der vorliegende Band GDVII baut auf den im Band GDVI gelegten Grundlagen auf und führt an den Stand der Technik heran. Wir haben versucht, bei aller aktueller Vielfalt des Gebietes die wesentlichen und zeitlosen Erkenntnisse herauszuarbeiten und in eine einheitliche Darstellung zu bringen. Das erste Kapitel erweitert die in der GDVI besprochene Hierarchie von Objekten aus P u n k t . Linie und Fläche um Körper. Dabei werden zunächst die unterschiedlichsten Besehreibungsmögliehkeiten (Repräsentationsscheniata) für Körper mit ihren Vor- und Nachteilen diskutiert. Danach werden die bekannten Standardrepräsentationen "Boundary Representation ( B R E P ) " . Constructive Solid Geometry (CSG)". Zellmodelle und Hybridmodelle ausführlich erläutert und durch Beispiele erklärt. Das zweite Kapitel erweitert den bis dahin gebrauchten Begriff' der Geometrie um die Fraktale Geometrie. Das ist notwendig, um auch natürliche Objekte vernünftig modellieren und visualisieren zu können. Nach einer ausführlichen Einführung der notwendigen

Vorwort

12

Definitionen und Begriffe werden nacheinander dynamische Systeme, stochastische Fraktale, Iterierte Funktionensysteme und Lindenmayersysteme behandelt. Den Abschluß bilden Beispielcodes in C+-+ für die beschriebenen Methoden zur Erzeugung von Fraktalen und deren Visualisierung. Damit ist das ganze Spektrum an notwendigen Methoden zur Objektbeschreibung verfügbar. Das dritte Kapitel ist den Beleuchtungsverfahren Raytracing und Radiosity gewidmet. Beide Verfahren sind in der Lage, photorealistische Bilder zu erzeugen, allerdings mit großem Rechenaufwand. Deshalb gilt das Hauptaugenmerk den möglichen Beschleunigungstechniken. Zur Erzeugung photorealistischer Bilder ist das Konzept der Texturen unverzichtbar. Das vierte Kapitel beschreibt deshalb alle Standardverfahren zur Texturerzeugung und Texturabbildung. Es widmet sich dann eingehend dem Problem der Texturfilterung und gibt praktikable Lösungen an. Die Kapitel fünf und sechs geben einen Einblick in Bereiche der Bildverarbeitung und Mustererkennung, die heute unverzichtbare Bestandteile der GDV sind. Beide Kapitel dienen auch der Vorbereitung auf das siebte Kapitel, das die verschiedenen Methoden der Volumenvisualisierung beschreibt. Interessant ist hier auch der Abschnitt über die Hardwarerealisierung eines Raycasting-Verfahrens, der beweist, daß Volumenvisualisierung heute in Echtzeit zu Preisen normaler Graphiksysteme möglich ist. Das achte Kapitel enthält die Lösungen zu den Übungsaufgaben. Den Abschluß bildet das Literatur und Stichwortverzeichnis. Wie bei den früheren Auflagen waren wir sehr auf die Beiträge und konstruktive Kritik unserer Mitarbeiter und Studenten angewiesen. Es ist unmöglich, alle Studenten und Mitarbeiter zu nennen, die direkt oder indirekt zum Inhalt des Buches beigetragen haben. Stellvertretend seien genannt: A. Grone, Th. Grunert, G. Knittel, R. Rau und A. Schilling. Sie haben trotz starker Belastung entscheidend zur Fertigstellung des Buches beigetragen, wofür wir uns an dieser Stelle herzlich bedanken. Darmstadt J. Encarnaçao

Dezember 1996

Tübingen W. Straßer R. Klein

13

Kapitel 1 Körper Solid Modelling, oder zu deutsch die Festkörperinodellierung, geht von realen Objekten und Körpern au«, die auch rechnerintern als Körpermodell dargestellt werden. Körpermodelle werden immer dann benötigt, wenn man Durchdringungen, Schnitte, Gewichtsund Volumenberechnungen oder Simulationstechniken beherrschen muß. Dabei wird für jedes reale Objekt ein Körpermodell erzeugt, das geschlossene dreidimensionale Körper eindeutig und vollständig beschreibt. Dieses Modell beinhaltet Informationen über die Gestalt und die Geschlossenheit des dreidimensionalen Körpers sowie über seine geometrische Verbundenheit, d.h. die Anzahl seiner zusammenhängenden Komponenten. Darüber hinaus garantiert das Modell die Integrität und Konsistenz der repräsentierten Daten und bildet die Basis für alle nachfolgenden geometrischen und anderen Operationen der Anwendung.

1.1

Repräsentationsschemata

Das wichtigste Ziel in der Festkörpermodellierung ist die Erzeugung von symbolischen Strukturen oder Repräsentationen, die physikalische Körper definieren. Diese Strukturen sind die Grundlage jedes Modelliersystems und daher von entscheidender Bedeutung bei der Entwicklung solcher Systeme. Im folgenden sollen die Bildung solcher Repräsentationsschemata sowie die wichtigsten Modelle zur Beschreibung von Körpergeometrien, wie sie in heutigen Festkörper-Modelliersystemen verwendet werden, beschrieben und ihre Vor- und Nachteile diskutiert werden. 1.1.1

Modellbildung

Die Bildung eines Modells für ein reales Objekt kann als zweistufiger Prozels betrachtet werden (vgl. Bild 1.1). Auf der Basis eines Modells soll es möglich sein, Informationen über die physikalischen Eigenschaften eines realen Objektes zu gewinnen. Wegen der Komplexität eines solchen

14

1 KÖRPER

Körper

Mathematische Modelle

Physikalische Objekte Bild 1.1: Die Modellbildung

Repräsentationen

Abstrakte Objekte als zweistufiger

Prozeß.

Objektes ist eine vollständige Beschreibung als mathematisches Modell in der Regel jedoch nicht möglich. Das mathematische Modell ist deshalb eine Idealisierung des realen Objektes und beinhaltet in der Regel nur einen Teil der Eigenschaften, die das reale Objekt auszeichnen. Zum Beispiel kann ein mathematisches Modell darauf beschränkt sein, die Geometrie des realen Objektes zu beschreiben, indem als Modell eine Punktmenge im R 3 gewählt wird. In der zweiten Stufe wird das idealisierte mathematische Modell in ein symbolisches Modell im sogenannten Repräsentationsraum überführt. Der Repräsentationsraum ist abhängig vom Modellierer und umfaßt die Menge derjenigen Objekte, die mit dem Modellierer konstruiert werden können. Im Rahmen des Solid Modelling interessiert in erster Linie der Zusammenhang zwischen den symbolischen Beschreibungen und den zugehörigen mathematischen Modellen. Den mathematischen Modellraum bezeichnen wir mit M , den Repräsentationsraum mit R. Der Zusammenhang zwischen diesen Räumen wird durch eine Relation s : Μ ι—y R beschrieben. Mit D C M bezeichnen wir den Definitionsbereich von s. Dies ist die Menge aller Modelle, die mittels s im Repräsentationsraum dargestellt werden können. Mit W C R wird der Wertebereich von s bezeichnet (vgl. Bild 1.2). Die Elemente w von W heißen gültige Repräsentationen. Insbesondere ist jedes w € W Bild von mindestens einem mathematischen Modell unter der Relation s. Um eine Repräsentation s zwischen dem Modellraum und dem Repräsentationsraum zu charakterisieren, verwendet man die folgenden Begriffe: 1. Wird durch jede gültige Repräsentation w •€ W genau ein mathematisches Modell m. G D dargestellt, so heißt die Relation s vollständig. 2. Besitzt jedes Modell m € D genau eine Darstellung w g W, so heißt s

eindeutig.

15

1.1 REPRÄSENTATIONSSCHEMATA

Modellraum M

II

Reprasentationsraum R

d

w=s(d)

Wertebereich W C R

Definitionsbereich D C M

Bild 1.2: Der Zusammenhang zwischen einem mathematischen präsentation läßt sich durch eine Relation s darstellen.

Modell und seiner

Re-

B e i s p i e l 1.1: (nicht v o l l s t ä n d i g e R e p r e s e n t a t i o n ) Um ein einfaches Beispiel zu haben, definieren wir zunächst den Begriff einfaches Polygon. Die Vereinigungsinenge von endlich vielen abgeschlossenen Strecken im R d (P()PiP 2 · · · Pn) = (PqPi) U ( P i P 2 ) U . . . U ( P „ _ i P n ) heifit Polygon. Es heißt eben, wenn die Strecken in einer Ebene liegen, geschlossen, falls Pq = P n . Ein Polygon heißt einfach, wenn jeder innere Punkt einer Strecke genau zu einer, jeder Eckpunkt einer Strecke zu höchstens zwei Strecken des Systems gehört. Sei nun M die Menge aller einfachen Polygone im euklidischen Raum R 2 und sei R die Menge aller endlichen Punktmengen mit paarweise verschiedenen Punkten . Jedem Polygon wird durch die Relation s : M —> R eine Repräsentation in Form einer Punktmenge aus R zugeordnet. Diese Relation ist nicht vollständig. Zwei verschiedene Polygone können dieselbe Repräsentation besitzen (vgl. Bild 1.3). P2

PI P3

P5

P5 Bild 1.3: Zwei Polygone mit derselben Repräsentation

P\, P 2 , P¿, P j , P5.

B e i s p i e l 1.2: (nicht e i n d e u t i g e R e p r e s e n t a t i o n ) Sei M die Menge aller einfachen Polygone im R 2 und R die Menge aller endlichen Verei-

16

1 KÖRPER

nigungen von Dreiecken im R 2 . Jedes Polygon läßt sich in Dreiecke zerlegen und somit als endliche Vereinigung von Dreiecken repräsentieren. Wie Abbildung 1.4 zeigt, ist diese Darstellung nicht eindeutig.

und D'I U £>2 U D'¡.

1.1.2

Kriterien zur B e u r t e i l u n g v o n R e p r ä s e n t a t i o n s s c h e m a t a

Im folgenden geben wir Kriterien zur Beurteilung von Repräsentationsschemata an (vgl. |M88j): 1. Wieviele Modelle sind im Definitionsbereich D von s enthalten? Wie genau können komplizierte Objekte modelliert werden? 2. Stimmt der Repräsentationsraum R mit dem Wertebereich W überein, d.h. können gemäß den Erzeugungsregeln des Modellierers ausschließlich Repräsentationen von mathematischen Modellen des Definitionsbereiches von s generiert werden? 3. Hat jedes Modell nur eine Repräsentation oder gibt es mehrere Darstellungen für ein Modell? 4. Wieviel Speicherbereich wird zur Repräsentation von praktisch interessanten Modellen benötigt? 5. Wie allgemein sind Operationen, die zur Manipulation von Repräsentationen verwendet werden können? 6. Wie kompliziert werden Algorithmen zur Manipulation und Erzeugung von Objekten?

1.1 R E P R Ä S E N T A T I O N S S C H E M A T A

1.1.3

17

Punktmengen-Modelle

Im Solid Modelling werden in erster Linie geometrische Objekte modelliert, worauf wir uns auch im folgenden beschränken werden. Als mathematischen Modellraum verwenden wir Punktniengen im euklidischen dreidimensionalen Raum R 3 . Während dieser Modellraum groß genug ist, um die in Anwendungen vorkommenden geometrischen Modelle mathematisch zu beschreiben, ist er, gemessen an den tatsächlich zu modellierenden Objekten. sicherlich viel zu groß. Zum Beispiel sind in diesem Modellraum auch OD-, 1Dund 2D-Mengen, wie Punkte, Geraden und Flächen, enthalten. Bei reinen Körperniodellierern werden solche Mengen ausgeschlossen, da diese Mengen keine echten Volumina beschreiben, d.h. diese Mengen besitzen bzgl. der gewöhnlichen Topologie des IR"5 keine inneren Punkte. Andererseits sind im R 3 als Modellraum auch Mengen enthalten, deren Oberflächen in einem beschränkten Bereich unendlich oft oszillieren. Ein Beispiel einer solchen Menge im zweidimensionalen Fall ist der Graph der Funktion χ ι-» s i n ( - ) über dem Intervall (0,1]. Um solche Mengen auszuschließen, wurden von Requicha [Rcq80j die sogenannten r-Mengen als passende mathematische Modelle für die geometrischen Objekte von Körpermodellierern vorgeschlagen: Eine r-M enge ist eine beschränkte, abgeschlossene, reguläre, semianalytische Punktmenge. Dabei heißt eine Menge A C R 3 • beschränkt, • abgeschlossen,

wenn es eine Kugel Κ um den Ursprung gibt, so daß A C K. wenn sie ihren Rand enthält.

• regulär, wenn sie mit ihrer Rcgularisierung r(A) = c(i{A)) übereinstimmt. Dabei ist c(A) der topologische Abschluß und i{A) das Innere von A bezüglich der gewöhnlichen Topologie im R 3 . Ein Punkt ρ heißt innerer Punkt der Menge A bezüglich der gewöhnlichen Topologie des R 3 , falls ein e > 0 existiert, so daß die offene e-Kugel Kf = {q e R3| 0 in der e-Kugel K, um ρ ein weiterer Punkt ρ φ q G A enthalten ist. Die Menge aller inneren Punkte von A heißt das Innere i{A). Die Menge aller Häufungspunkte von A bilden den Abschluß c(A), und die Menge c(A) — i(A) heißt Rand von A. • semianalytisch, falls sie als endliche Boolesche Kombination (Vereinigung, Durchschnitt und Differenz) von analytischen Mengen dargestellt werden kann. • analytisch, wenn sie von der Form {x G R 3 | f(x) < 0 } ist und mit einer analytischen (in jedem Punkt in eine Potenzreihe entwickelbaren) Funktion / als Halbraum dargestellt werden kann. Die Semianalytizität einer Menge A verhindert unerwünschte Eigenschaften, wie ein unendliches Oszillieren der Oberfläche eines Körpers in einem beschränkten Bereich. Trotz dieser Einschränkung des mathematischen Modellraums ist je nach onsschema der tatsächliche Definitionsbereich D C M kleiner. Eine exakte des zum jeweiligen Repräsentationsschema gehörenden Modellraums und reichs ist in der Regel sehr aufwendig und wird im folgenden nicht weiter

RepräsentatiBeschreibung Definitionsbeverfolgt.

1 KÖRPER

18

A

i (A)

r (A) = c ( i (A) )

Dild 1.5: Regularisierung einer Menge 4 C Κ 2 . Links die Menge selbst. In der Mitte das Innere i(A): Die OD- und die 1D-Anteile fallen weg. Rechts der Abschluß c(i(A)) des Inneren von A: Die Ränder werden hinzugenommen. 1.1.4

Übersicht bekannter Repräsentationsschemata

Die bekannten Repräsentationsschemata für Körpermodelle lassen sich in drei Hauptgruppen einteilen (vgl. Bild 1.7), die hier kurz vorgestellt werden: Drahtmodelle Unter allen 3D-Modellen beinhaltet das Drahtmodell die wenigsten Informationen zur Darstellung von Festkörpern. Seine Strukturelemente beschränken sich im allgemeinen auf die Konturelemcnte 'gerade Kante', 'Kreisbogen' oder auch 'Spline'. Zwischen diesen Elementen bestehen innerhalb eines Drahtmodells keine Beziehungen; eine Zuordung zu Flächen ist nicht definiert. Die Drahtmodelle sind einfach und traditionell. Zur Repräsentation von Körpermodellen sind sie jedoch nicht geeignet, da die Darstellung als Drahtmodell unvollständig und mehrdeutig ist (vgl. Bild 1.6). Algorithmen auf Drahtmodellen verlangen daher in vielen Fällen einen Dialog mit dem Anwender, der z.B. die zur Oberfläche gehörenden Flächen eines Drahtmodells interaktiv spezifizieren muß. Flächenmodelle Flächenmodelle dienen dem Erzeugen von Objekten, bei denen die Oberflächen und deren Eigenschaften wie Krümmung, Torsion und Glattheit im Vordergrund stehen. Typische Beispiele sind Außenhaut von Kraftfahrzeugen, Schiffen und Flugzeugen. Der Hauptinformationsgehalt der Flächenmodellierer liegt in den einzelnen Flächenbeschreibungen

1.2 E R Z E U G U N G UND M A N I P U L A T I O N VON K Ö R P E R M O D E L L E N

Bild 1.6: Mehrdeutigkeit,

bei

19

Drahtmodellen.

(vgl. GDV I, Kurseinheit 4 und 5). Die Flächen stehen bei einem reinen Flächenmodellicrer in keinem gegenseitigen Zusammenhang; insbesondere sind keine Nachbarschaftsbeziehungen zwischen ihnen abgespeichert. Ein solcher Flächenmodellierer ist nicht geeignet. Körpermodelle darzustellen. Eine Klassifizierung eines R a u m p u n k t e s bezüglich eines Objektes kann nicht vorgenommen werden, d.h. im Flächenmodell läßt sich nicht entscheiden, ob ein P u n k t innerhalb oder außerhalb des dargestellten Objektes liegt. Uni diese Entscheidung treffen zu können, müssen die Flächen orientiert sein, z.B. durch Angabe eines Normalenvektors der Fläche, der nach außen zeigt. Zum anderen sind Flächenmodellierer mit nicht orientierten Flächen weder eindeutig noch vollständig. Körpcrmodelle Hinter dem Begriff der Körpermodelle verbergen sich zahlreiche Repräsentationsschemata, wie sie in Bild 1.7 dargestellt sind. Die Körpermodelle bilden eine vollständige Beschreibung eines dreidimensionalen Objektes und können im Gegensatz zu den Drahtund Flächemnodellen nicht nur visuell im Dialog mit dem Benutzer, sondern auch automatisch von Programmen interpretiert werden. Durch die vollständige Speicherung der Körpergeometrie können geometrische Fragen algorithmisch beantwortet werden. Eine weitere positive Eigenschaft der Körpermodellierer besteht darin, daß durch die verwendeten Algorithmen zur Manipulation von Objekten deren Konsistenz gesichert werden kann. Das heißt, daß das Resultat einer Operation, wie z.B. die Repräsentation der Vereinigung zweier Objekte, wieder eine gültige Darstellung bildet. Im folgenden werden wir uns ganz auf Körpermodelle beschränken.

1.2

Allgemeine Erzeugungstechniken und Manipulationen von Körpermodellen

Unabhängig davon, welches spezielle Körpermodell betrachtet wird, müssen Konzepte zur Erzeugung, Manipulation und zur Speicherung von Objekten vorhanden sein. Im folgenden wird ein zur Erzeugung und Manipulation von Körperniodellen häufig verwendetes Konzept diskutiert.

1 KÖRPER

20

Bild 1.7: Die wichtigsten 1.2.1

Repräsentationsschemata

für

SD-Modelle.

Generierung von Körpermodellen aus Grundkörpern

Im allgemeinen werden bei Körpermodellierern, ausgehend von einfachen Objekten (den G r u n d k ö r p e r n oder Primitiva), schrittweise kompliziertere Objekte durch Anwendung Boolescher Mengenoperationen konstruiert. In den nächsten Abschnitten werden einige mögliche Definitionen von Grundkörpern kurz erläutert. Grundkörper

fester Form - Solid

Simpes

Jedes Primitivum wird aus einer vom System vorgegebenen Menge von einfachen geometrischen Körpern fester Form ausgewählt (vgl. Bild 1.8). Durch das Festlegen gewisser Dimensionsparameter wird der gewünschte Grundkörper dann eindeutig beschrieben. Ein Körperrnodellierer kann als Grundkörper fester Form z.B. Quader, Zylinder, Kegel, Kugeln und Tori zur Verfügung stellen. Dici Parameter sind d a n n beispielsweise beim Q u a d e r die drei Seitenlängen, beim Zylinder die Länge und der Durchmesser usw. (vgl. Bild 1.8). F ü r jedes O b j e k t wird ein Bezugspunkt festgelegt, der als Ursprung eines lokalen Koordinatensystems dient. Dieses lokale Koordinatensystem kann vom Anwender nicht verändert werden, da es a priori für jeden Grundkörper festgelegt ist. Sweeping

ebener Konturzüge

und ganzer

Körper

Beim Sweeping wird entweder eine Kontur oder ein ganzer Körper entlang einer Raumkurve bewegt. Die Kontur oder der Körper und die Raumkurve werden durch Parameter definiert. Beim translatorischen Sweeping wird die durch die Kontur in der x, y-Ebene definierte Grundfläche in z-Richtung bewegt. Das von der Grundfläche überstrichene Volumen definiert einen Körper konstanter Dicke.

1.2 ERZEUGUNG UND MANIPULATION VON KÖRPERMODELLEN

21

Bild 1.8: Grundkörper fester Form,.

Bild 1.9: Grundkörper fester Form: Dimensionspararneter tes bestimmen ein Primitivurn eindeutig.

und die Lage des Bezugspunk-

Mittels des rotatorischen Sweepings werden Drehkörper erzeugt. Je nach Lage der Drehachse erzeugt ein rotatorisches Sweeping Zylinder-, Kegel-, Kugel-, Torus-, Kreis- oder Kreisringflächen höherer Ordnung (vgl. Bild 1.10). Beim Sweeping vollständiger Körper wird das gewünschte Objekt durch das überstrichene Hüllvolumen eines entlang einer Raumkurve bewegten Körpers definiert. Die Geometrie des Hüllvolumens ist eine Funktion der Körpergeometrie und seiner kinematischen Bahn. In einfachen Fällen ist die Bahnkurve eine Gerade oder ein Kreis. Bei beliebigen Raumkurven ist das definierte Objekt mathematisch schwierig zu behandeln. Im allgemeinsten Fall werden entlang der Raumkurve auch die Parameter des bewegten Körpers verändert. Das Sweeping ist insbesondere auch für Kollisionsanalysen zwischen Objekten, z.B. bei der Bestimmung einer Fräserbahn, notwendig. Halbräume Ist eine reellwertige analytische Funktion / : R 3 —> R gegeben, so bezeichnet man die Mengen F, = {x e R 3 : f{x) > 0} und F2 = {x G M3 : f{x) < 0} als die durch

22

1 KÖRPER

/ definierten Halbräume. Die Menge {x : f(x) = 0} trennt diese beiden Halbräume. Die Vereinigung der beiden Halbräume ergibt wieder den R 3 . Die Einschränkung auf analytische Funktionen schliefst unerwünschte Objekte aus. Werden als Funktionen nur Polynome zugelassen, so nennt man die Halbräume algebraisch. Beispiele für Halbräume sind H\

(x, y, z)

H2(x,y,z) H3(X, y, Z)

=

ax + by + cz + d > 0

=

x2 + y2-r2


0 Ηα : ζ < α

1.2 ERZEUGUNG UND MANIPULATION VON KÖRPERMODELLEN

23

Der Schnitt der Halbräume Hi

: χ2 + y2 - r 2 < 0

i/2

:

HS

: ζ >0

2- h < 0

definiert einen einfachen Zylinder. Seine Konstruktion ist in Bild 1.11 dargestellt.

Bild 1.11: Konstruktion

1.2.2

eines Zylinders aus

Halbräumen.

Regularisierte Boole'sche M e n g e n o p e r a t i o n e n

Bevor zwei Objekte durch eine regularisierte Boole'sche Mengenoperation manipuliert werden können, müssen sie richtig positioniert werden. Dazu werden Translationen und Rotationen verwendet. Hierbei muß für beide Objekte ein gemeinsames Koordinatensystem festgelegt werden. Dies geschieht durch Umrechnung der lokalen Koordinaten der beiden Objekte in ein solches gemeinsames Koordinatensystem. Nach der Festlegung von Primitiva werden mit Hilfe von regularisierten Boole'sehen Mengenoperationen, der regularisierten Vereinigung U*, des regularisierten Durchschnittes Γ1* und der regularisierten Differenz — *, neue Körper erzeugt. Im mathematischen Modellraum sind diese Operationen folgendermaßen definiert: Aü'ß

= r{A U B)

Af]* Β

=r{Ar\B)

Α -* Β

= r(A — Β)

=

c(i(AuB)) =c(i{AnB))

= c(i(A -

Β)).

Sie unterscheiden sich also von den bekannten Booleschen Mengenoperationen dadurch, daß das Ergebnis regularisiert wird. Beim Regularisieren werden die entstandenen OD-, 1D- und 2D-Anteile eliminiert (vgl. Bild 1.12).

1 KÖRPER

24

U Α-B

Α-B

A-(Α-B) Bild 1.12: Eine 7-cgularisierte Mengenoperation werden entfernt.

im R 2 .

A-(Α-B) Die, entstehenden

1D-Anteile

In der Praxis geschieht die Implementierung regnlarisierter Mengenoperationen mittels der Klassifikation von P u n k t e n . Geraden und Flächen bezüglich des Ergebnisobjektes. Bei der Klassifikation eines Punktes bezüglich eines Objektes wird bestimmt, ob der P u n k t in dem Objekt, auf dem Rand oder außerhalb des Objektes liegt. In derselben Weise: können auch Geradensegmente und Oberflächensegmente bezüglich eines Körpers klassifiziert werden. Läßt sich dabei ein Segment nicht klassifizieren, d a es den Körper teilweise durchdringt, werden die Schnittpunkte bzw. -kurven des Segmentes mit der Oberfläche des Körpers berechnet . Das Segment wird dann an den Schnittpunkten oder -kurven in kleinere Segmente zerlegt, die vollständig bezüglich des Körpers klassifiziert werden können. Um in Bild 1.12 z.B. Α Π* Β zu berechnen, werden die Oberflächen von A und Β bezüglich des Körpers Α Π Β klassifiziert und die Flächenteile, die vollständig außerhalb von Α Π Β liegen, entfernt. In einem weiteren Schritt werden dann die wenigerdimensioiialen Strukturen eliminiert.

1.3

Randrepräsentationen (Boundary Representation)

Ein Körpermodell kann eindeutig durch seine Oberfläche und eine zugehörige topologische Orientierung beschrieben werden. Wegen der topologischen Orientierung ist für jeden P u n k t der Oberfläche eindeutig festgelegt, auf welcher Seite das Innere des Objektes liegt. Boundary Representations (BReps) benutzen diese Tatsache und beschreiben 3D-Objekte durch ihre Oberfläche.

1.3 RANDREPRÄSENTATIONEN (BOUNDARY REPRESENTATION)

25

Da sich alle wichtigen Konzepte der Randrepräsentation anhand von Polyedermodellen erklären lassen und viele der gängigen Volumenmodellierer nur solche Modelle unterstützen, beschränken wir uns zunächst darauf. Eine Verallgemeinerung der Konzepte auf nicht ebenflächig begrenzte Volumina ist möglich und wurde sowohl in der Theorie als auch in der Praxis durchgeführt, verlangt aber zum vollständigen theoretischen Verständnis weitergellende Kenntnisse aus der algebraischen Topologie und übersteigt in voller Ausführlichkeit den Rahmen dieser Darstellung. Der interessierte Leser findet weiterführende Literatur in [Wei85], [Man88|, [Hof89|. Eine schöne Darstellung der zur Verallgemeinerung notwendigen Konzepte aus der algebraischen Topologie findet sich auch in [ES94], 1.3.1

B e g r i f f e aus der G r a p h e n t h e o r i e u n d T o p o l o g i e

In diesem Abschnitt, wird die Theorie der Polyeder zusammengestellt. Die folgenden Definitionen und Eigenschaften folgen weitgehend |For92], [Ede87] und [PS85]. Graph Da Polyeder als spezielle geometrische Graphen aufgefaßt werden können, wollen wir uns zunächst die wichtigsten Begriffe aus der Graphentheorie ins Gcdäclmis rufen. Ein Graph ist ein Paar (Ρ, E), wobei Ρ eine nichtleere Menge von η verschiedenen Knoten Po,... ,pn-i und E eine Menge ungeordneter Mengen {p¡,pj}, 0 < i,j < n, i φ j ist. Die Elemente von Ρ heißen Knoten, die Elemente von E Kanten. Der Einfachheit halber wird eine Kante {pj.pj} mit pipj bezeichnet. Kanten sind nicht orientiert, d.h. die Kanten p¡pj und PjPi sind identisch. Halbkanten sind Kanten mit Richtungsangabe; eine Kante p¡p3 besteht aus den zwei Halbkantcn pip] und p¡p¡. Ist pipj e E, so heißen die Knoten p¿ und Pj benachbart. Zwei Kanten heißen benachbart oder inzident, falls sie einen gemeinsamen Knoten besitzen. Ein geometrischer Graph G ist ein Paar (P,E), wobei Ρ eine nichtlcerc endliche Menge von Punkten p0,... ,pn-ι aus R d , d > 2, und E eine Menge von Kanten pipj, i φ j ist. Polygon und

Polyeder

Ein geometrischer Graph Q = (P,E) mit Ρ = {ρο,ρι,··· E = {{P0P1),(P1P2) (pn-2Pn-1)} heißt, Polygon.

, P n - i } C Κ d , d > 2 und

Ein Polygon Q = (Ρ, E) heißt • eben, falls alle Kanten aus E in einer Ebene liegen, • geschlossen, falls po = Pn-i gilt; • einfach, falls gilt: — Der Schnitt jeweils zweier Kanten aus E ist entweder leer oder ein Punkt aus P.

26

1 KÖRPER

— Jeder Eckpunkt einer Kante gehört zu höchstens zwei Kanten aus E. Satz 1.1 (Jordanscher Kurvensatz für P o l y g o n e ) Jedes geschlossene, ebene, einfache Polygon Q = (Ρ, E) in der Ebene unterteilt die Ebene in zwei Polygongebiete, ein inneres und ein äußeres Polygongebiet von Q. B e m e r k u n g 1.2 Innere Punkte von Q können folgendermaßen charakterisiert werden: • Die Anzahl der Schnittpunkte zwischen den Kanten von Q und einem Strahl, der von einem Punkt im Innern von Q ausgeht, ist ungerade. Definition 1.3 ( P o l y g o n n e t z ) Die Menge M von endlich vielen geschlossenen, ebenen und einfachen Polygonen Qi heißt ein Polygonnetz, wenn sie die folgende Eigenschaften hat: • Die inneren Polygongebiete von je zwei Polygonen aus M haben keinen Punkt gemeinsam. • Je zwei Polygone aus M haben entweder keinen Punkt oder eine Ecke oder eine ganze Kante gemeinsam. Der Schnitt zwischen zwei verschiedenen Polygonen aus M ist entweder leer, ein Punkt ρ Ε Ρ oder eine Kante e G E. • Jede Kante eines Polygons aus M gehört zu einem oder zwei Polygonen. • Die Menge aller Kanten, die nur zu einem Polygon aus M gehören, ist entweder leer oder sie bildet ein einziges, geschlossenes, einfaches Polygon. B e m e r k u n g 1.4 Ist die Menge aller Kanten, die nur zu einem Polygon aus M gehören, leer, so heißt das Polygonnetz geschlossen (vgl. Bild 1.13).

B e m e r k u n g 1.5 Die Menge aller Punkte Ρ und die Menge aller Kanten E eines Polygonnetzes Μ = (Ρ, E) bilden einen geometrischen Graphen.

1.3 RANDREPRÄSENTATIONEN (BOUNDARY REPRESENTATION)

27

Beispiele für Polygonnetze sind Kontrollpunktnetze von Bézier- und B-Splineflächen und stückweise lineare oder bilineare Approximationen dieser Flächen, wie sie z.B. zur Steorolithograpliie oder zur Visualisierung verwendet werden. Definition 1.6 (Polyeder) Ein geometrischer Graph Q = ( P , E ) mit den Punkten Ρ C M.d,d > 3 und den Kanten eines Polygonnetzes M heißt Polyeder, falls • jede Kante e £ E zu genau zwei Polygongebieten gehört; • jede Punkt ρ £ Ρ zu einer endlichen, zyklisch geordneten Menge von Polygonbereichen gehört, d.h. die zu einer Ecke gehörenden Polygone lassen sich so anordnen, daß immer Q¡ und Q] + i {Qk+1 — Qι) eine zur Ecke gehörende Kante gemeinsam haben (vgl. Bild 1.14). Dabei ist k die Anzahl der zu einem Punkt inzidenten Polygonbereiche; • die Vereinigungsmenge Q zusammenhängend ist.

Bild 1.14·' Die Polygonbereiche um ρ lassen sieh nicht zyklisch anordnen. Die Polygonbereiche auf der Oberfläche des linken Tetraeders haben mit den Polygonbereichen auf der Oberfläche des rechten Tetraeders keine Kante gemeinsam. Die Menge aller abgeschlossenen inneren Polygongebietc von M heißt die Oberfläche des Polyeders Q. Die Polygongebiete von M heißen auch Facetten. Satz 1.7 Jedes Polyeder Q im Raum teilt den Raum in zwei Bereiche, in das Innere des Polyeders und in das Außere. L e m m a 1.8 Das Innere eines Polyeders Q kann folgendermaßen charakterisiert werden: • Die Anzahl der Schnitte zwischen der Oberfläche von Q und einem Strahl, der von einem Punkt im Innern von Q ausgeht, ist ungerade.

28

1 KÖRPER

Das Innere eines Polyeders ist also vollständig durch seine Oberfläche definiert. Der geometrische Graph eines Polyeders beschreibt die Nachbarschaftsbeziehungen zwischen den Facetten, Kanten und Knoten eines Polyeders (vgl. Bild 1.15). Diese sind unabhängig von der Geometrie der Knoten als Punkte im Raum. Sie beschreiben die Topologie des Polyeders. Die Koordinaten der Punkte beschreiben die geometrische Lage des Polyeders, d.h. dessen Geometrie. Topologie und Geometrie können daher unabhängig voneinander gespeichert werden.

Bild 1.15: Die Knoten Simplex.

k-Fncette

und

und Kanten

eines Quaders bilden einen geometrischen

Graphen.

Triangulierungcn

Eine Zellzerlegung ist eine Darstellung von Mengen wie Flächen oder Körper als Vereinigung disjunkter Zellen. Anwendungen finden Zellzerlegungen bei numerischen Simulationen und Finite-Elemente-Techniken, aber auch in der Stereolithographie und zur Visualisierung . Grundlage einer formalen Definition von Zellzerlegungen sind Simplexe. Definition 1.9 (m-Simplex) Eine konvexe Kombination von m + 1 affin unabhängigen Punkten p ^ . p ^ . . . . ,p rn G R''. rn < d. heißt ?/?-Simplex. Die Punkte po.pi.... .p,„ werden die Punkte des Simplex Δ ( ρ 0 , ρ ι . . . . .ρ·,,,,) genannt. Beispiel 1 . 1 0 Ein 2-Simplex im R 2 ist ein Dreieck und ein 3-Siniplex im R ,! ist ein Tetraeder. Die Oberfläche eines Simplex besteht aus sogenannten k-Facetten, die wie folgt formal definiert werden. Definition 1.11 ( k - F a c e t t e ) Gegeben sei ein m-Siniplex t = Δ ( ρ ο . . . . ,pm) C M'' mit m < d. Eine konvexe Kombination von k + 1 Punkten von t heißt k-Facette, von t. Beispiel 1 . 1 2 Eine 2-Facette eines Tetraeder ist ein Dreieck, eine 1-Facette eine Kante oder ein Liniensegment, und eine 0-Facette ist ein Eckpunkt.

1.3 RANDREPRÄSENTATIONEN (BOUNDARY REPRESENTATION)

1.3.2

29

Triangulierung

Definition 1.13 (Triangulierung v o n P u n k t m e n g e n ) Eine endliche Menge von d-Simplices heißt Triangulierung T(P) einer Punktmenge Ρ C M ä ,d = 2.3, falls folgendes gilt: • Jeder Punkt ρ G Ρ gehört mindestens zu einem d-Simplex. • Der Schnitt zweier ci-Simpliccs aus T(P) ist entweder leer oder eine gemeinsame /c-Facette, (0 < k < d ) . • Die Menge aller (d — 1)-Facetten auf dem Rand der Triangulierung bilden ein konvexes Polygon im R 2 bzw. einen konvexen Polyeder im M3. L e m m a 1.14 Gegeben sei eine Triangulierung T{P). Die Menge Ρ und die Menge E der 1-Facetten (Kanten) aus Τ bilden einen geometrischen Graphen TtJ(P) = (Ρ, E). L e m m a 1.15 (Euler-Formel für 2D-Triangulierungen) Sei T(P) eine Triangulierung im 1R2 und η die Anzahl der Punkte in Ρ, b die Anzahl der Punkte auf der konvexen Hülle CH(P), e die Anzahl der Kanten von E und t die Anzahl der Dreiecke von T. Dann gilt e

=

3(n — 1) — ò

(1.1)

t

=

2(n — 1) — 6

(1.2)

Korollar 1.16 Jede Triangulierung T(P) einer Punktmenge Ρ im R 2 besitzt dieselbe Anzahl von Kanten und Dreiecken. L e m m a 1.17 (Eulerformel für 3D-Triangulierungen) Sei T(P) eine Triangulierung im und η die Anzahl der Punkte in P, f die Anzahl des Dreiecke, e die Anzahl der Kanten von E und t die Anzahl der Tetraeder von T. Dann gilt: η - e+/ - t =1

(1.3)

Definition 1.18 (Diagonale) Gegeben sei ein Polygon bzw. ein Polyeder Q — (P,E). Eine Verbindungsstrecke zweier Punkte Pi,Pj € Ρ heißt Diagonale von Q, falls sie vollständig im abgeschlossenen inneren Gebiet von Q liegt.

30

1 KÖRPER

S a t z 1.19 ( T r i a n g u l i e r u n g v o n P o l y g o n e n b z w . P o l y e d e r n ) • Das abgeschlossene innere Gebiet jedes geschlossenen ebenen einfachen Polygons Q kann durch Diagonalen in eine endliche Menge von Dreiecken Δ& so zerlegt werden, daß deren Seiten entweder Diagonalen oder Polygonkanten von Q sind und der Schnitt jeweils zweier dieser Dreiecke entweder leer ist oder eine Diagonale ist. Die Menge dieser Dreiecke heißt die Triangulierung des Polygons Q. • Das abgeschlossene innere Gebiet jedes Polyeders Q kann in eine endliche Menge von Tetraedern Δ ^ so zerlegt werden, daß deren 1-Facetten entweder Diagonalen oder Kanten aus Q sind und der Schnitt jeweils zweier Tetraeder entweder leer oder eine gemeinsame k-Facette (0 < k < d) ist. Die Menge dieser Tetraeder heißt Tetraedrisierung des Polyeders Q. B e m e r k u n g 1.20 Die Eigenschaft, daß jede Triangulierung T(P) einer Punktmenge dieselbe Anzahl von Kanten und Simplices besitzt, gilt, nur für Triangulierungen im R 2 . Zum Beispiel existieren im R'5 zwei Tetraedrisierungen der Punktmenge Ρ — Die erste mögliche Tetraedrisierung bestellt aus den beiden Tetraedern A(pd,pi,p2,p3) und Δ(ρ ( ),ρι,ρ2>Ρ4)· Dagegen besteht die zweite mögliche Tetraedrisierung aus den drei Tetraedern A(po, p\, pa, ρ o heißt diskretes dynamisches d.h.

/"(:r) =

Menge 0(x)

System.

Die M e n g e

Dabei bezeichnet f° die Identität,

x. Ist ein solches diskretes dynamisches System gegeben, so heißt die

— {x, f(x),

f 2(x),

· · · } Orbit von χ unter f . O(x)

erfaßt also alle Zustände,

die aus einem Anfangszustand χ unter iterativer Anwendung von / hervorgehen. Menge 0~(x) Rückwärtsorbit also 0(x)

= {y | Es existiert ein η G Ν mit fn(y) von χ bezeichnet.

Ein Punkt χ heißt Fixpunkt

= { x ' } gilt. Ein Punkt χ heißt periodischer

η die kleinste natürliche Zahl ist mit fn(x) man O(x)

einen periodischen

= x\ wird als inverser

Orbit.

Die

Orbit oder

von /, wenn f(x)

=

x,

Punkt von / der Periode n, wenn

= x• Ist χ ein periodischer Punkt, so nennt

Periodische Orbits sind endlich. Einfache Beispiele

liefern die Funktionen /1.2 : R —» R mit χ π-» χ und χ M· —x. Im ersten Fall sind alle Punkte χ Ε R Fixpunkte, im zweiten Fall sind alle Punkte χ £ M periodische P u n k t e mit Periode 2, mit Ausnahme des Punktes χ — 0, der auch in diesem Fall ein Fixpunkt ist.

Der Iterationsprozeß in einem dynamischen System läßt sich im Fall von reellen

Funktionen einfach veranschaulichen. Ein Beispiel ist in Bild 2.3 dargestellt.

f(x)

Bild 2.3:

Iterationsprozeß

den die Elemente immer

fK(X0),

einer

wieder der Funktionswert Ρ der Geraden

Koordinaten

(x,y)

usw.

Funktion.

y = f(x0)

Ausgehend

vom Startwert

von XQ bestimmt.

in die Funktion

des Schnittpunkts

zen, wird nun der Schnittpunkt bestimmt

reellen

k G Ν. des Orbits

Schnittpunkt

Funktion

i[

eingesetzt.

Graphisch

mit der Winkelhalbierenden Ρ gilt χ = y — f(x0).

einer vertikalen

Geraden

XQ wer-

Bei der Iteration bestimmt.

Um diesen

wird

wird dabei der Wert

Für

die

einzuset-

durch Ρ mit dem Graphen

der

2 FR A K T A L E G E O M E T R I E

70

Interessant sind nun die Orbits von P u n k t e n in der Umgebung periodischer Punkte. Diese lassen sich anhand der periodischen Punkte selbst charakterisieren. Ist eine differenzierbare Funktion / und ein periodischer P u n k t χ o von / der Periode η gegeben, so heißt λ(χ'ο) = {fn)'{xo) Eigenwert des P u n k t e s XQ. Der Eigenwert ist für jeden P u n k t des periodischen Orbits derselbe, d.h. (f")'(x0) = (/")'(/Oo)) = ... = (/")'(/"(xo)): wendet m a n mehrfach die Kettenregel für die Ableitung an, so ergibt sich ( f n ) ' ( x ) = /'(/n-1(*)) ' f'(fn~2(x)) ••••• / ' ( * ) • Mit Hilfe des Eigenwertes lassen sich periodische P u n k t e charakterisieren: Ein periodischer Punkt bzw. sein periodischer Orbit heißt superattraktiv λ = 0 attraktiv (anziehend) 0 < |λ| < 1 indifferent |λ| = 1 abstoßend · |A| > 1. F ü r den reellen Fall lassen sich diese Charakterisierungen für Fixpunkte am Graphen der Funktion / veranschaulichen (vgl. Bild 2.4). Interessantere Beispiele ergeben sich für Funktionen / : C —¥ C.

Bild 2-4: Charakterisierung von Fixpunkten punkt ist attraktiv, b) |A| > 1: Der Fixpunkt

durch die Ableitung, ist abstoßend.

α) |λ| < 1: Der Fix-

F ü r einen attraktiven Fixpunkt XQ existiert stets eine offene Umgebung U von XQ mit lim fn(y)

η —> oc

= xq

für alle y e U.

(2.5)

Anschaulich bedeutet dies, daß P u n k t e , die in einer hinreichend kleinen Umgebung von X() liegen, unter der Iteration sich immer mehr auf xo zubewegen, also von χ o angezogen werden. F ü r einen abstoßenden Fixpunkt Xq gibt es eine offene Umgebung U von Xo, so daß zu j e d e m y G U ein η € Ν existiert, so daß f"{y) U gilt; anschaulich gesprochen entfernen sich in diesem Fall die zu x'q benachbarten P u n k t e unter Iteration von .xq fort. Ist xo ein attraktiver Fixpunkt, so heißt die Menge A(xo) = {x| fk{x) —¥ x'o, für k —¥ oo} Basin of Attraction oder Attraktionsgebiet von 0(xo). Ist 0(xq) ein attraktiver

2.2 DYNAMISCHE S Y S T E M E

71

periodischer Orbit mit Periode n, so ist das Attraktionsgebiet A(xa) des Orbits die Vereinigung der Attraktionsgebiete der zugehörigen attraktiven Fixpunkte f'{xo), i = ( ) , . . . , η — 1, von / " . 2.2.2

Julia-Mengen

In diesen Abschnitt sei der P h a s e n r a u m zunächst die komplexe Ebene C. Eine Funktionenfolge / 1 . / 2 , · · · heißt gleichgradig stetig im P u n k t :r, wenn zu jedem f > 0 ein á > 0 existiert, so dais für alle y mit |χ — y\ < ό und alle η G Ν gilt |/„(.r) — f,,(y)\ < (• 1st, eine Iterationsfolge . . . gleichgradig stetig im P u n k t x, so bewirkt eine kleine Änderung des Anfangswertes nur eine kleine Änderung des Orbits. Das starke Kausalitätsprinzip ist in diesem Falle gültig. Die Fatou-Menge F ( f ) ist die Menge aller χ für welche die Folge f . f 2 . f ' \ . . . gleichgradig stetig ist. d.h. in den P u n k t e n der Fatou-Menge bewirkt eine kleine Änderung der Anfangswerte nur (une kleine Änderung der Orbits. Die Julia-Menge von / ist .7 = J ( f ) = C — F ( f ) . Ändert man, ausgehend von einem P u n k t der Julia-Menge, den Anfangswert nur geringfügig, so erhält man einen völlig anderen Orbit. In Punkten der Julia-Menge ist das starke Kausalitätsgesetz also nicht gültig. Eine zu dieser Definition der Julia-Menge äquivalente Definition beschreibt die Julia-Menge als den topologischen Abschluß aller abstoßenden periodischen Punkte, d.h. Jf — cl{z G C I 2 ist abstoßender periodischer P u n k t von / } . Diese Definition findet m a n z.B. in [PR86] oder auch in [Dev89], Als Beispiel betrachten wir die Funktion / : C —> C, 2 H· z2. F ü r 2 G C, |z| < 1 gilt lim fn(z) = 0, für \z\ > 1 gilt lim f„(z) = 00. Diese beiden Mengen bilden die n—>00 n—foc Fatou-Menge von / . Die Menge {z : \z\ = 1} ist die Julia-Menge. Für \z\ < 1 läßt sich die gleichgradige Stetigkeit der Funktionenfolge / , / 1 , / 2 , . . . mit elementaren Mitteln zeigen, für \z\ > 1 muß der P u n k t oc zur komplexen Ebene hinzugenommen werden (s.u.) und die Topologie, d.h. der Abstandsbegriff, entsprechend angepaßt werden. U m eine gesonderte Behandlung des Punktes oc bei der Diskussion der Dynamik einer Funktion zu vermeiden, nimmt m a n den P u n k t 00 zur komplexen Ebene hinzu und betrachtet C = C U {co}. Dazu fassen Mathematiker die komplexe Ebene als Oberfläche einer Kugel mit Radius 1 (Riemannsche Kugel) auf. Jeder P u n k t der komplexen Ebene wird mit Hilfe der sogenarmten Stereographischen Projektion mit einem Punkt auf der Riemannschen Kugel identifiziert (vgl. Bild 2.5). Dabei wird jedem P u n k t ζ der komplexen Ebene der Durchstoßpunkt des Geradensegments Wz vom 'Nordpol' η der Riemannschen Kugel R, deren Südpol im Ursprung liegt, zum P u n k t 2 zugeordnet. Umgekehrt wird dadurch jedem P u n k t der Riemannschen Kugel, außer dem Nordpol, ein P u n k t in der Ebene zugeordnet. In Formeln gilt C 9 z = « + w — > · —2 (4 u, 4v, 2 u2 + 2v2) e R u + v2 + 4v '

2 FRAKTALE GEOMETRIE

72

Bild 2.5: Mittels der Stereographischen Projektion wird die komplexe Ebene auf die mannsche Kugel R (Einheitskugel mit Südpol im Ursprung) abgebildet. und umgekehrt R 9 (u,v,w)

ι—>

2 2 —w

Rie-

(u + vi) € C.

J e größer der Betrag \z\ eines Punktes der komplexen Ebene ist, desto näher ist sein korrespondierender Punkt auf der Riemannschen Sphäre dem Nordpol. In diesem Sinne wird der Nordpol der Riemannschen Kugel als der unendlich ferne Punkt oo aufgefaßt und in diesem Sinne lassen sich die oben angegebenen Begriffe auch entsprechend erweitern. Zum Beispiel gehört oc zur Fatou-Menge der Funktion / : C —• C, ζ ^ z 2 . Im folgenden sei nun C = C U { o c } . Der Einfachheit halber wenden wir uns Julia-Mengen quadratischer Polynome zu. Wir betrachten dazu folgende Iterationsfunktion: Qr(z) = Z2 + c, wobei c e C konstant ist. Die Julia-Menge ,JQC besitzt folgende Eigenschaften: 1· JQr

φ 0·

2. Die Julia-Menge JQc enthält übcrabzählbar viele Punkte. 3. Die Julia-Mengen von Q(. und QCK, k = 1 , 2 , . . . sind gleich. 4. QC(JQ,·) = JQ,· Abbildung Qc.

— QC~1{JQ,.)i

d.h.

die Julia-Menge ist invariant unter der

2.2 DYNAMISCHE SYSTEME

73

5. Für jedes χ G JQV ist der inverse Orbit Ο (χ) dicht in JQ(. , d.h. JQc = clO Dabei bezeichnet clO~(x) den topologischen Abschluß von 0~(x). 6. Ist 7 ein attraktiver periodischer Orbit von QC, so ist A(7) C FQc =

(x).

C\Jqc.

7. 00 ist ein attraktiver Fixpunkt von QC und JQC = cM(oo). Dabei bezeichnet öA(oo) den topologischen Rand des Attraktionsgebiets von co. Diese Eigenschaften der Julia-Menge können dazu genutzt werden, um Bilder von J u l i a Mengen zu berechnen. Die Dynamik von Funktionen in mehrdimensionalen Räumen ist wesentlich komplizierter (siehe z.B. [Dev89]). Anmerkungen

zur Julia-Menge

quadratischer

Polynome

• Die ausgefüllte Julia-Menge von Q,. ist definiert als Kc = { i 0 G C : \Qc(xo)\

besitzt

obere Schranke,

für alle k e Ν} = C\.4(oo).

Die Julia-Menge selbst ist der Rand der ausgefüllten Julia-Menge, also Jc — dKc. Anschaulich ist die Julia-Menge im quadratischen Fall die "Trennungslinie" zwischen der Menge von komplexen Zahlen mit limfc_+oc Q^ (00) = 00 und der Menge von komplexen Zahlen mit l i m ^ o o 0) φ oc. • Die Julia-Menge von quadratischen Funktionen Qc ist symmetrisch zum Ursprung, da Qc(z)

= z2 + c= (-z)2

• Für alle Punkte ZQ € C = C U {00}

+c=

Qc(-z).

mit |zo| > max(|c|, 2) gilt:

lim Qr(zo) = 00. k—^oc Als Beispiel betrachten wir die Funktion Q = Qo mit Q(z) = z'2. Für < 1 konvergiert die Folge Q"(z) gegen 0, für \z\ > 1 gegen oc. Die Menge {ζ: \z\ φ 1} ist daher die Fatou-Mcnge von Q. Die Menge {z: |z| < 1} ist die ausgefüllte Julia-Menge und der Rand der Menge {z: |z| > 1} = {z: |z| = 1} die Julia-Menge von Q. Algorithmen

zur Berechnung

von Julia-Mengen

quadratischer

Polynome

Gemäß Eigenschaft (5) der Julia-Menge quadratischer Polynome gilt für jeden Punkt ZQ in der Julia-Menge JQ

= clO~(z{)) - cl{z: Es existiert ein η e Ν mit Q"(z) = z () }.

Ist ein Punkt Zq G JQ,. bekannt, so kann (liest? Beziehung ausgenutzt werden, um ein Bild der Julia-Menge zu berechnen, indem man den Rückwärtsorbit von zq unter Qc berechnet. Im allgemeinen hat Qkc{z) = Zq 2a' Lösungen. Die Gesamtzahl der iterierten Urbilder von zq, die man durch Rückwärtsiteration der Gleichung z 2 + c = α erhält,

74

2 FRAKTALE GEOMETRIE

"i· i' ', *

*

4 íψ *

φ. *

-"· . y Χ"·'' 'h'·' • ·' " \fm-; . ¿MftSSbjf*' ,

S

-fi .wi^W^%

.:·.»-, -

r

¡¡¡ν

Bild 2.6: Die. Julia-Menge

der Abbildung Q,. mit e = - 0 . 6 8 8 3 8 + 0.32375/:.

ist daher n(k) = 2 i + 1 — 1 für k = 0 . 1 , 2 , . . . . Mail erhält, einen Binärbaum, bei dem jeweils die Söhne Urbilder des Vaters sind. Einen einfacheren Algorithmus erhält man, indem zufällig eine der beiden Wurzeln der Gleichung = gewählt wird (vgl. Algorithmus 2.(3.1). Das führt zu einem zufälligen Durchgang durch den Baum. Dioso Methode ist ein Beispiel eines iterierten Funktionensystems mit zwei Funktionen (vgl. dazu den Abschnitt über iterierte Funktionensysteme 4.4). Ein geeigneter Startwert zq G Jqr für den Algorithmus läfet sich wie folgt bestimmen. Die beiden Lösungen uq φ oc φ C , ζ >—> ± (vgl. [Dev89])). Kritische Punkte bestimmen im wesentlichen das dynamische Verhalten von Qc. Da oo für alle c E C ein Fixpunkt von Qc ist, ist 0 der einzige interessante kritische Punkt, d.h. aus dem Orbit von 0 kann man auf die wichtigsten dynamischen Eigenschaften von erschließen. Nun gilt folgender Satz: Besitzt Qr einen attraktiven periodischen Orbit, so liegt ein kritischer Punkt im Attraktionsgebiet dieses periodischen Orbits. Insbesondere folgt daraus, daß 0 im Attraktionsgebiet jedes attraktiven periodischen Orbits liegen muß, der den Punkt oc nicht enthält, und daß quadratische Funktionen höchstens zwei attraktive Orbits besitzen können. Einige der Funktionen Qr besitzen unendlich viele periodische Orbits. Ein Beispiel dafür ist die Abbildung Q-o- Für jedes v. > 0 besitzt Q"_2 2" Fixpunkte und daher Q_2 2" periodische Punkte mit Periode 11. Nach dem obigen Satz kann aber nur einer davon ein attraktiver periodischer Orbit sein und in seinem Attraktionsgebiet 0 enthalten. Für c = 1 besteht der Orbit des kritischen Punktes 0 aus den Punkten {(), 1, 2, 5 , . . . }. Daher ist in diesem Fall oc der einzige Attraktor der Abbildung Qc. Für c — 0 existiert neben dem Attraktor 00 auch der Attraktor 0. Das Attraktionsgebiet .4(0) von Q0 ist die Menge {z e C| \z\ < 1}. 1978 suchte B. Mandelbrot nach allen Werten c e C, für

2.2 D Y N A M I S C H E S Y S T E M E

77

die neben d e m A t t r a k t o r oc noch ein weiterer a t t r a k t i v e r O r b i t existiert. Die von ihm gefundene Menge M (vgl. Bild 2.7) t r ä g t seither seinen N a m e n . Die folgenden äquivalenten Eigenschaften können zur Definition der Mandelbrot-Menge M verwendet werden: M

Bild 2.7: Die.

=

{ c e C | der kritische P u n k t 0 liegt nicht in

=

{r £ C I die Folge 0. Qr(0), Q?.{0),...

A(oc)}

=

{ 1. Ist also |Q" (0)| > 2 für ein η 6 Ν, so liegt der Orbit im Attraktionsgebiet von oo. Es genügt daher, als vorgegebene Schranke S für den Betrag der Punkte des Orbits S = 2 zu wählen. Die Level Set Methode zur Berechnung der Mandelbrot-Menge M funktioniert analog zur Level Set Methode für Julia-Mengen. Für Elemente c 1. D heißt stochastische fraktale Dimension. Bei realen Küstenlinien findet man typischerweise eine stochastische fraktale Dimension zwischen 1.15 und 1.25. Für natürliche fraktale Flächen ergibt sich eine stochastische fraktale Dimension von ca. 2.15 (vgl. [Man82]). Für eine Temperaturverteilung im Raum erhält man in analoger Weise stochastische fraktale Dimensionen zwischen 3 und 4. Küstenlinie, Gebirgslandschaften und Zusammenballungen von Wolken sind Beispiele stochastischer Fraktale. Stochastische Fraktale sind geeignet. Modelle natürlicher Objekte zu generieren. Ein mathematisches Modell für stochastische Fraktale ist die fraktale Brownsche Bewegung (fBm), wie sie Mandelbrot in |Man82] beschreibt. Sie ist eine Verallgemeinerung der Brownschen Bewegung. Um die Algorithmen zur Generierung von stochastischen Fraktalen zu verstehen, ist es notwendig, sich einige Begriffe der zugrundeliegenden Wahrscheinlichkeitstheorie ins Gedächtnis zu rufen. 2.3.2

Einige Grundlagen aus der Wahrscheinlichkeitstheorie

Experimente, wie z.B. das Werfen einer Münze, deren Ergebnisse sich nicht exakt vorhersagen lassen, heißen zufällige Experimente. Die Menge der möglichen Ergebnisse eines zufälligen Experimentes bildet den Ereignisraum S. Teilmengen des Ereignisraumes werden als Ereignisse bezeichnet. Die Elemente des Ereignisraumes heißen einfache Ereignisse. Betrachtet man z.B. als zufälliges Experiment den Wurf eines Würfels, so ist S = {1. 2, 3. 4, 5, 6}. und das Ereignis ..Das Ergebnis des Wurfes ist eine gerade Zahl' ist { 2 , 4 . 6 } und besteht aus den einfachen Ereignissen { 2 } , {4}, {6}. Für einen typischen Zufallszahlengenerator, wie er in 32bit Rechnern implementiert ist. besteht der Ercignisraum S aus allen ganzen Zahlen zwischen 0 und 2'".

D e r Wahrscheinlichkeitsraum Jedem Ereignis E C S wird eine nichtnegative Zahl, die Wahrscheinlichkeit. ordnet. so daß folgende Axiome erfüllt sind: 1. für jedes E C S ist P(E) 2.

> 0

P(S) = 1

3. Gilt Ει Π E2 — 0, sind die Ereignisse E\ und E2 also disjunkt, so gilt P(E1UE2)

= P(El)

+

P(E2).

P(E),

zuge-

2.3 STOCHASTISCHE FRAKTALE

81

Ein Paar (S, Ρ) heißt Wahrscheinlichkeitsraum. Besitzt ein Experiment endlich viele einfache Ereignisse E \ , . . . , E n und besteht ein Ereignis E aus den einfachen Ereignissen E \ , . . . , Ειη,τη < n, und sind alle einfachen Ereignisse gleichwahrscheinlich, so folgt aus den Axiomen (l)-(3)

P ( E ) = ™η . Wird ein idealer Würfel geworfen, so gibt es 6 gleichwahrscheinliche Ergebnisse. Das Ereignis E ,,Das Ergebnis des Wurfs ist eine gerade Zahl" besteht aus drei einfachen Ereignissen, besitzt also die Wahrscheinlichkeit P { E ) = § = 5· B e d i n g t e Wahrscheinlichkeit u n d s t o c h a s t i s c h e U n a b h ä n g i g k e i t Die Wahrscheinlichkeit dafür, daß ein Ereignis E i auftritt unter der Vorausetzung, daß das Ereignis E2 aufgetreten ist, heißt bedingte Wahrscheinlichkeit und wird mit p(E 1 \Ε·2) bezeichnet. Sie ist definiert durch P ( F

\

F

vorausgesetzt, daß Ρ ( £ 2 ) Φ 0 ist. Als Beispiel betrachten wir den Wurf eines idealen Würfels. Dann ist die Wahrscheinlichkeit dafür, daß eine Drei gewürfelt wird (Ereignis E i ) unter der Voraussetzung, daß die gewürfelte Zahl ungerade ist (Ereignis E2) n(F ί ρ ) _ ρ ( Ε ι Π Ε 2 ) _ 1 1 _ 1 P(Ei\E2)- p m -g/2-3·

Zwei Ereignisse Ε1 und E2 heißen unabhängig, falls P(EI\E2) = P ( E \ ) , d.h. falls das Ereignis E 2 keinen Einfluß auf das Ereignis E 1 hat. In diesem Fall gilt

Ρ(ΕιΠΕ2)=Ρ(Ει)·Ρ(Ε2). Zufallsvariablen Eine Abbildung X von einem Wahrscheinlichkeitsraum (S, Ρ ) in eine Menge S ' heißt Zufallsvariable. Beschränkt man sich auf den Fall S' ~~~ N, so heißen die Zufallsvariablen numerisch diskret, gilt S' — R, so heißen die Zufallsvariablen numerisch stetig. Wahrscheinlichkeiten von Zufallsvariablen erhält man, indem man die Wahrscheinlichkeit Ρ von S auf S ' überträgt. Ist z.B. S ' = M, so definiert man für je zwei Elemente a < b £ R die Wahrscheinlichkeit, daß das Ergebnis von X im Intervall ( a , b] liegt, durch P ( a < X < b ) = Ρ ί χ - ^ α , ό ] ) := Ρ ( { ω G S | X ( u i ) e (α, b } } ) . Auf ähnliche Weise wird die Verteilungsfunktion F x von X durch

F x ( x ) := Ρ({ω e 5 | Χ ( ω ) < χ } , i e ß definiert. F x (χ) gibt die Wahrscheinlichkeit an, daß die Zufallsvariable X einen Wert kleiner oder gleich χ liefert. In Analogie zur Unabhängigkeit von Ereignissen definiert

82

2 FRAKTALE G E O M E T R I E

man die Unabhängigkeit von Zufallsvariablen: Zwei stetige numerische Zufallsvariablen X und Y heißen unabhängig, falls das folgende Multiplikationsgesetz gilt: P{X

< χ und Y 0, χ € R, 2. / besitzt in jedem endlichen Intervall höchstens endlich viele Unstetigkeitsstellen, 3- f?00f(x)dx

= l,

4. Für jedes Intervall [a, ò] gilt

so heißt f Wahrscheinlichkeitsdichtefunktion

oder einfach Dichtefunktion von X .

Eine stetige Zufallsvariable X heißt gleichverteilt zugehörige Dichtefunktion / gilt

auf einem Intervall [a, ò], falls für die

Ist α < χ < b, so folgt P[X 0,

Diese Verteilung wird mit Ν {μ, σ) bezeichnet.

D e r E r w a r t u n g s w e r t , die Varianz u n d die Kovarianz Ist X eine stetige Zufallsvariable mit einer Dichtefunktion / , so definiert man den Erwartungswert oder Mittelwert E(X) durch

2.3 S T O C H A S T I S C H E F R A K T A L E

83

vorausgesetzt, daß das Integral E

(

X

)

=

Γ

\ x \ f ( x )

J

d x

—OG

existiert. Im anderen Falle sagt man, E(X)

existiert nicht.

F ü r eine auf dem Intervall [α. b} gleichverteilte Zufallsvariable X gilt E{X) = ^L·. F ü r eine Ν (μ, a)-verteilte Zufallsvariable gilt E(X) = μ. Sind X und Y zwei Zufallsvariablen und a , b e Κ, so gilt E ( a X + b Y ) = a E ( X ) + b E ( Y ) . Ist g : Κ -> ffi gegeben, so ist Y — g(X) eine Zufallsvariable mit

E

(

g

(

X

)

)

=

Γ J

Die Varianz

v a r ( X )

einer Zufallsvariable v a r ( X )

=

E ( ( X

-

E



oc

ist definiert als

X

(

g ( x ) f ( x ) d x .

X

)

f

)

=

2

E { X

)

-

E { X )

2

.

Sie ist ein Maß dafür, wie die Werte einer Zufallsvariablen um den Mittelwert verteilt sind. Für eine auf dem Intervall [α, 6] gleichverteilte Zufalls variable gilt v a r ( X ) = - p ¿ ( b — a ) . Für eine Ν(μ,σ)-νοrteilte Zufallsvariable X gilt v a r ( X ) = σ ' . Sind zwei Zufallsvariablen Χ . Y unabhängig, so gilt 2

2

v a r ( a X

Die

K o v a r i a n z

+

X

c o v a r

( Χ ,

und Y )

=

Υ

)

=

E

(

• Tendiert Y dazu, kleiner als E(Y) ist c o v a r ( X , Y ) groß und negativ. Y

2

v a r ( X )

+

2

b

(

X

-

v a r ( Y ) .

-

Y stochastisch unabhängig, so gilt c ist ein Maß für die Verbindung zwischen

• Tendiert Y dazu, größer als E(Y) c o v a r ( X , Y ) groß und positiv.

• Wird

a

zweier Zufallsvariablen ist definiert als c o v a r ( X ,

Sind

b Y )

von

X

E { Y ) ) ) .

o v a r ( X ,

und

X

Y ) Y

= 0. Die Kovarianz im folgenden Sinn:

zu werden, wenn X größer als E(X)

wird, so ist

zu werden, wenn X größer als E(X)

nur geringfügig beeinflußt, so ist

c o v a r ( X ,

Y )

wird, so

klein.

Klein und groß bezieht sich in diesem Zusammenhang auf die Varianz von X und Y. Aus diesem Grunde standardisiert man die Kovarianz und definiert den Korrelationskoeffizienten c o v a r P

~

( v a r ( X )

( Χ ,

Y )

• v a r Ç Y ) )

ρ kann Werte zwischen —1 und 1 annehmen.

1

/ '

2

'

84

2 FRAKTALE GEOMETRIE

Stochastische Prozesse Ein stochastischer Prozeß {X(i)} ist eine Menge von Zufallsvariablen, die von dem Parameterwert t abhängen. Ist der Wertebereich von t ein Intervall, so heißt {X(i)} ein stetiger Parameterprozeß . Nimmt t nur diskrete Werte, z.B nur natürliche Zahlen an, so heißt {A"(i)} diskreter Parameterprozeß. Wir betrachten im folgenden in erster Linie stetige Parameterprozesse und reelle Zufallsvariablen. Betrachtet man als Parameter z.B. die Zeit t, so wird jedem Zeitpunkt t eine Zufallsvariable X(t) zugeordnet. Jedesmal, wenn der Prozeß erneut gestartet wird, nehmen die Zufallsvariablen andere Werte an. Der Prozeß besitzt verschiedene Realisierungen (vgl. Bild 2.9). Jede der Zufallsvariablen X(t) besitzt eine Wahrscheinlichkeitsverteilung, die durch P[X(t) ^ bzw. durch eine Wahrscheinlichkeitsdichtefunktion fx(t)(x) gegeben ist, so daß der Erwartungswert und die Varianz durch E(X(t))

f

=

xfx(t)(x)dx

J — OC

var(X(t))

E{[X(t)-E(X(t))}2)

=

gegeben sind. Der Erwartungswert und die Varianz sind daher Funktionen der Zeit. Um die Wahrscheinlichkeit P(X(h)

χ. Das Zeichen a heißt Predecessor, das Wort χ Successor dieser Produktion. Für jedes Zeichen α Ε V soll ein χ G V* existieren mit a —» χ. Wenn für ein α G V keine Regel spezifiziert wurde, wird die Produktion a —> a angewendet. Ein OL-System heißt deterministisches Lindermayersystem genau dann, wenn für jedes a £ V genau ein χ G V* existiert mit a —> χ. Deterministische OL-Systeme werden als DOL-Systeme abgekürzt. Ein Beispiel für die Ableitung einer Zeichenkette mit Hilfe eines DOL-Systems ist in Tabelle 3 dargestellt. Die pro Ableitungsschritt vorhandene Zeichenzahl entspricht der wohlbekannten Fibonacci-Folge. Schildkröten

als Bindeglied

zwischen Formalismus

und

Anschauung

Sollen z.B. Fraktale anhand ihrer sie beschreibenden L-Systerne gezeichnet werden, so müssen letztere notwendig Informationen über die Länge und die Winkel zwischen Linienabschnitten enthalten. Diese Information in einem durch ein L-System erzeugten String wird mittels einer Schildkröte interpretiert.

97

2.5 LINDENMAYERSYSTEME

DOL: ω

b

Pi

bι y a

P2

a ^ ab

Fibonacci b a ab aba abaab abaababa

1 1 2

3 5 8

Tabelle 2.3: Beispiel einer Ableitung in einem DOL-System. die Zahl der Zeichen pro Ableitungsschritt.

In der rechten Spalte steht

Ein Zustand einer Schildkröte ist ein Tripel (x, y, a) mit den kartesischen Koordinaten (x,y) ε Κ2 als Position der Schildkröte und α € [0,2π] als Winkel ihrer Bewegungsrichtung. Ist de R eine festgewählte Schrittweite und δ eine festgewählte Winkelschrittweite, dann läßt sich folgender Befehlssatz für Schildkröten über einem einfachen Alphabet V mit {F, / , + , - } C V aufstellen: F Bewegung der Länge d in Bewegungsrichtung a. Für den neuen Zustand (x', y', a') gilt (x', y', α) = (χ + d s in a, y + d cos α, α). Dabei wird eine Verbindungslinie zwischen den Punkten (x, y) und (x', y') gezogen. f Analog zu F, aber ohne Verbindungslinie zwischen den Punkten (x, y) und (x', y'). 4 Drehung nach rechts (inathematisch negativ) um den Winkel δ. Für den neuen Zustand (x',y',a') gilt (x',y',a')

- (χ,ρ,α

+ δ).

- Analog zu + mit umgekehrtem Drehsinn. Alle anderen Symbole aus V, wie z.B. die weiter unten beschriebenen Klammern, bewirken nur, daß die Kröte auf den nächsten, diesem Symbol folgenden Befehl wartet. Seien ν £ V* eine Zeichenkette, (xo, yo, ao) der Anfangszustand und d, δ feste Parameter. Dann heißt das Bild, das die Schildkröte bei der Interpretation von υ zeichnet, die Kröteninterpretation von v. Erweiterung des Befehlssatzes

für

Schildkröten

Der Befehlssatz für Schildkröten kann auf den dreidimensionalen Fall erweitert werden. Die Orientierung der Kröte im dreidimensionalen Raum wird durch ein Tripel von Normalenvektoren (Η, L, U) beschrieben. Dabei bezeichnet Η die aktuelle Richtung der Kröte, L die Richtung nach links und U die Richtung nach oben. Diese Vektoren stehen senkrecht aufeinander und erfüllen die Gleichung U = Η χ L. Eine Rotation der Kröte um den Winkel δ um die Vektoren H,L,U kann dann mittels Rotationsmatrizen Ru(S), RL(Ö) und RH{Ö) (siehe GDV I, Kapitel 3.3) durchgeführt werden. Die folgenden Befehle zur Krötensteuerung im Raum werden dann vereinbart:

2 FRAKTALE GEOMETRIE

98

4 Drehung nach links um den Winkel δ. Die Rotationsmatrix ist R¡j{S). - Drehung nach rechts um den Winkel 0 ^ 0 0< 0> 1 1[—F1F1] 0 < 1> 0 1 0< 1> 1 1 1 < 0> 0 0 1 < 0 > 1 —» 1F1 1 < 1> 0 1 1< 1> 1 0 * < + >*—> —

* < — >*—>· +

Die ersten fünf Ableitungen sind dann: 1. F1F0F1 2. F1F1F1F1 3. F1FOFOF1 4. F1F0F1[-F1F1]F1 5. F1F1F1F1[ ι FOFljFl Wie im Fall kontextfreier L-Systeme können auch im kontextsensitiven Fall durch Probieren realistische Bilder erzeugt werden. Allgemeine Methoden, um L-Systeme für realistische Pflanzen zu modellieren, berücksichtigen die Wechselwirkung zwischen Zellen, die Pflanzenentwicklung, die Blütenausbildung und andere Charakteristika der zu modellierenden Pflanzen. Weitere Information dazu findet man in der oben genannten Literatur.

2.6

CH—b-Code zum Kapitel fraktale Geometrie

Das folgende Unterkapitel stellt C 4 I -Code für die in den vorhergehenden Unterkapiteln beschriebenen Algorithmen zusammen. Der Code wurde für den DOS Borland Turbo

102

2 FRAKTALE G E O M E T R I E

Bild 2.19: Die Pflanze L-System beschrieben.

wird durch das im. Text gegebene kontextsensitive,

geklammerte

C + + Compiler Version 2.1 geschrieben und verwendet zur Graphikausgabe die von Borland entwickelten BGI-Graphikroutinen. Der Source-Code ist selbsterklärend und als Ergänzung zum Text gedacht. 2.6.1

Graphikroutinen

Elementare

Geometrieoperationen

Die Klassen ,,Ρ2Ι>' und ,,P3D', sowie die Klasse „Matf' stellen einfache Vektoroperationen zur Verfügung. Ζ******************************************************************* file: ρ 2 d . h description: a c++ class for 2 d points and vectors. »•Ψ****************************************************************/ #ifndef P2D_H «define P2D_H class P 2 D { public : // Constructors. P2DO P2D(int χ , int y) P2D(const P2D& q)

{ p[0] = ρ[1] = 0.0;

>;

{ p[0] = x; p[l] = y; >; { p[0] = q.p[0] ; ρ[1] = q.p[l]; >;

2.6 C++-CODE ZUM KAPITEL FRAKTALE GEOMETRIE

// Assignment. v o i d operator=(const P2D& q) { ρ [0] = q.p[0]; p[l] = q.pCl]; >; // A d d i t i o n and subtraction. P2D operator+(const P2D& q) const { return'P2D (ρ CO] + q.pCO], p[l] + q.p[l]); >; P2D operator-(const P2D& q) const { r e t u r n P2D(p[0] - q.p[0], p[l] - q.p[l]); >; // Access to coordinates, int x() const { r e t u r n p[0] ; }; int y O const { r e t u r n ρ Cl]; }; v o i d setCoord(int x, int y) { p[0] = x; p[l] = y; }; private : int ρ[2];

>;

// Coordinates.

#endif

file: ρ 3 d . h description: a c++ class for 3d p o i n t s a n d vectors, ψ**************************************************.****************/

#ifndef P3D_H »define P3D_H #include

class P3D { public : // Constructors. P3DO { ρ CO] = p[l] = ρ [2] = 0.0; P3D(float X, float y, float z)

>;

{ ρ CO] = x; pCl] = y; pC2] = z; }; P3D(const P3D& q) { pC0]= q.pCO]; pCl]= q.pCl]; p C 2 ] = q.pC2]; >; // Assignment. v o i d operator=(const P3D& q) { pC0]= q.pCO]; ρ CI] = q.p[l]; pC2]= q.p[2]; >; // Addition, subtraction a n d m u l t i p l i c a t i o n w i t h scalars. P 3 D operator+(const P3D& q) const { r e t u r n P3D(pC0] + q.pCO], pCl] + q.pCl] , pC2] + q.pC2]); >; P 3 D operator-(const P3D& q) const { r e t u r n P3D(pC0] - q.pCO], pCl] - q.pCl], pC2] - q.pC2]); >; P 3 D operator*(const floatft f) const { r e t u r n P3D(p[0] * f, pCl] * f, pC2] * f); >; P 3 D operator/(const floatfe f) const { r e t u r n P3D(p[0] / f, p[l] / f, pC2] / f); >; // Scalar-product. float operator I(const P3D& q) const { r e t u r n pCO] * q.pCO] + pCl] * q.p[l] + pC2] * q.pC2]; >;

103

104

2 FRAKTALE GEOMETRIE

// Cross-product. P3D operator"(const P3D& q) const { return P3D(p[l] * q.p[2] - q.p[l] * p[2] , p[0] * q.p[2] - q.p[0] * p[2], p[0] * q.pCl] - q.p[0] * p[l]); >; // Normalizes the vector, void normalize() { float d = sqrt (p [0] *p [0] +p [1] *p [1] +p[2] *p [2] ) ; p[0] /= d; ρ[1] /= d; p[2] /= d; >; // Access to coordinates, float x() const { return p[0]; }; float y O const •{ return p[l]; }; float z O const { return p[2] ; }; void setCoord(float x, float y, float z) { p[0] = χ; ρ[1] = y; p[2] = ζ; >; private : float p[3];

>;

// Coordinates.

#endif

file: description:

m a t . h a c++ class for 3x3 matrices.

#ifndef MAT_H #define MAT_H «include "P3D.h" class Mat { public : // Constructor. Mat(float diag = 0.0); Mat (const MatSt mat); // Assignment. void operator= (const Matic mat); // Access to coefficients, float queryCoeff(int i, int j) void setCoeff(int i, int j, float c) // Multiplication. Mat operator*(const Mat& mat) const; P3D operator*(const P3D& p) const; private : float m[3][3];

};

#endif

{ return m[i] [j] ; }; { m[i] [j] = c; };

// Coefficients.

2.6 C + + - C O D E ZUM KAPITEL FRAKTALE GEOMETRIE

Graphisches

105

Ausgabegerät

Die Klasse „GrDev" ( GraphicalDewice) realisiert ein einfaches Ausgabegerät. Der Konstruktor der Klasse initialisiert den Graphikmodus und öffnet ein einzelnes Fenster. Die Methoden der Klasse zum Zeichnen einfacher Graphikprimitive sind weitgehend selbsterklärend und können dem Source-Code entnommen werden. Zur 3D-Ausgabe steht nur eine einfache Parallelprojektion zur Verfügung. Zur Verdeckungsrechnung bei der Darstellung von fraktalen Landschaften wird ein Painteralgorithmus verwendet (vgl. Methode drawFunction2D()). Alle implementierten Klassen und Algorithmen verwenden dieses Ausgabegerät und sind damit hardwareunabhängig. Beschreibungen einer wesentlich umfangreicheren Implementierung dieses Ausgabegerätes findet man z.B. in [GKK+93, GKP+95, KE96a, KE96b]. In [KE96c] wird eine Java-Implementierung des Ausgabegerätes beschrieben. Ζ******************************************************************* file: description:

#ifndef «define «include «include «include

g r d e ν . h A c++ class for the graphical device. Opens a drawing window with origin b o t t o m left.

GRDEV_H GRDEV_H "P2D.h" "P3D.h" "Mat.h"

«define LEN2D 32

// size of a 2d f u n c t i o n

class GrDev { public : // Con/Destructor. Opens a n d closes the graphic mode. GrDev(); "GrDev0 ; // Returns window width and height. int q u e r y W i n d o w W i d t h O { r e t u r n width; }; int q u e r y W i n d o w H e i g h t O { r e t u r n height; }; // Returns the maximum color index. int queryHaxColor(); // Sets the foreground color. v o i d setColor(int col); // Sets the fill color. void setFillColor(int col); // Calculates and uses a gray color table. void i n i t G r a y C o l o r m a p O ; // Clears the window, void c l e a r O ;

106

2 FRAKTALE GEOMETRIE

// Sets a colored pixel, v o i d drawPoint(P2D p , int col); // Sets t h e new cursor position, v o i d setCursor(P2D p ) ; // Draws a line f r o m the actual point to a new point. v o i d drawLine(P2D p); // Draws a line b e t w e e n two points. v o i d drawLine(P2D pi, P2D p2); // Draws a filled triangle. v o i d drawFilledTriangle(P2D pi, P2D p2, P2D p3); // Draws a one-dimensional f u n c t i o n w i t h 'len' values, v o i d drawFunctionlDCint len, float *val); // Draws a two-dimensional function. // T h e net is f l a t - s h a d e d according to a given light source, v o i d drawFunction2D(P3D lightpos, int xlen, int ylen, float val[LEN2D+1][LEN2D+1]); // Prints a string. v o i d drawText(P2D p , char *txt); private : int width, height;

>;

P2D project(P3D p)

// window dimensions // simple parallel projection { r e t u r n P2D((int)(p.x()), ( i n t ) ( p . y 0 ) ) ;

#endif

file: description:

#include #include #include #include #include #include

g r d e v . c p p A c++ class for the graphical device. Opens a drawing window w i t h o r i g i n bottom left.

"GrDev.h"



// function: // description: GrDev::GrDev() {

G r D e ν Constructor. Prepares the graphic mode.

int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "\\TC\\BGI\\"); if (graphresult() != grOk) { printf ("Graphic error: 7,s" ,grapherrormsg(errorcode)) ; ; getchO ; exit(l);

>

width

= getmaxx();

>;

2.6 C + + - C O D E ZUM KAPITEL FRAKTALE GEOMETRIE

>

height = getmaxyO; clear();

/ / function: / / description: GrDev : :"GrDevO {

>

G r D e ν Destructor.

F i n i s h e s t h e g r a p h i c mode

closegraphO ;

/ / function: q u e r y M a x C o l o r / / description: Returns t h e maximum c o l o r i n d e x . i n t GrDev::queryMaxColor() {

>

return

getmaxcolor();

/ / function: s e t C o l o r / / description: S e t s t h e foreground void G r D e v : : s e t C o l o r ( i n t c o l ) {

>

color.

setcolor(col);

/ / function: s e t F i l l C o l o r / / description: Sets the f i l l c o l o r . void G r D e v : : s e t F i l l C o l o r ( i n t c o l ) {

>

setfillstyle(SOLID_FILL,

col);

/ / function: i n i t G r a y C o l o r m a p / / description: C a l c u l a t e s and u s e s a gray c o l o r void G r D e v : : i n i t G r a y C o l o r m a p ( ) { struct palettetype getpalette(&pal); for

>

pal;

(int i=0; i

cleardeviceO ;

/ / function: d r a w P o i n t / / description: Sets a colored point. void GrDev::drawPoint(P2D p, i n t c o l o r ) {

>

p u t p i x e K p . x O , height - p . y O ,

color);

i*4);

table.

107

108

2 FRAKTALE GEOMETRIE

// function: s e t C u r s o r // description: Sets the new cursor position. void GrDev::setCursor(P2D p) { moveto(p.x(), height - p . y O ) ;

} // function: d r a w t o // description: Draws a line to a point. void GrDev::drawLine(P2D p) {

>

lineto(p.x(), height - p . y O ) ;

// function: d r a w L i n e // description: Draws a line between two points. void GrDev::drawLine(P2D pi, P2D p2) {

>

l i n e C p l . x O , height - p l . y O , p2.x(), height - p2.y());

// function: d r a w F i l l e d T r i a n g l e // description: Draws a filled triangle. void GrDev::drawFilledTriangle(P2D pi, P2D p2, Ρ2D p3) {

>

int poly[6] ; poly[0] = p l . x O ; poly[l] = height - p l . y O ; poly [2] = p2.x() ; poly[3] = height - p2.y(); poly [4] = p3.χ O ; poly[5] = height - p3.y(); fillpoly(3, poly);

// function: d r a w F u n c t i o n l D // description: Draws a function in an ID-array. void GrDev::drawFunctionlD(int len, float *val) { int xoff = (width - len) / 2, yoff = height / 2,

float maxval = 0.0; for (i = 0; i < len; ++i) if (fabs(val[i]) > maxval) maxval = fabs(val[i]); float scale = yoff / maxval;

>

drawLine(P2D(xoff, yoff), P2D(xoff + len, yoff)); for (i = 1; i < len; ++i) drawLine(P2D(xoff + i, height - yoff-scale*val[i-1]), P2D(xoff + i + 1, height - yoff-scale*val[i ]));

2.6 C++-CODE ZUM KAPITEL FRAKTALE GEOMETRIE

// function: d r a w F u n c t i o n 2 D // description: D r a w s a two-dimensional function. // The net is f l a t - s h a d e d w i t h a g i v e n light source, v o i d GrDev::drawFunction2D(P3D lightpos, int xlen, int ylen, float val[LEN2D+1][LEN2D+1])

{ int i, j; float maxval = 0.0; for (i = 0; i < xlen; ++i) for (j = 0; j < ylen; ++j) if (f abs (val [i] [j] ) > maxval) maxval = fabs(val[i] [j]) ; Mat scale; // scale to window dimensions scale.setCoeff(0, 0, w i d t h / (float)(xlen-1)); scale. s e t C o e f f d , 1, height / (float) (ylen-1) ) ; scale.setCoeff(2, 2, height / maxval); float s = sin(60 * Mat rotate(1.0); rotate.setCoeff(1, rotate.setCoeff(2, rotate.setCoeff(1, rotate.setCoeff(2,

M_PI / 180.0), c = cos(60 * M_PI / 180.0); // rotate around x - a x i s (60 degrees) 1, c); 1, s); 2, - s ) ; 2, c);

Mat m = rotate * scale; // transformation to window // m u l t i p l i c a t i o n with points should be done outside loop. // but in this way we a v o i d the n e e d of additional memory... int P3D P3D for

maxcol = queryMaxColor(), color; normal, light; // triangle normal and light vector ρ[4]; // actual four m e s h points (j = y l e n - 2; j >= 0; --j) for (i = 0; i < xlen - 1; ++i) { // calculate the four actual points p[0] = P3D( (float) i , (float)j , val [i ] [j ]); p[l] = P3D((float)i+l, (float)j , val[i+l][j ]); ρ [2] = P3D( (float) i , (float)j + l, val [i ][j + l]); ρ [3] = P3D((float)i+l, (float)j+l, val [i+1] [j+1]); normal = (p[2] - p[0]) ~ (p[l] - p[0]); normal.normalize(); // get first triangle normal light = lightpos - (p[0] + p[l] + ρ[2]) / 3.0; l i g h t . n o r m a l i z e O ; // get light vector color = (int)(maxcol * (normal I light)); if (color < 0) color = 0 ; // calculate color depending on the setFillColor(color); // angle b e t w e e n light & normal drawFilledTriangle(project(m * p[0]), // draw p r o j e c t e d p r o j e c t ( m * p[l]), project(m * p[2])); // triangle normal = (p[2] - p[l]) * (p[3] - p[l]); normal.normalize(); // get second triangle normal light = lightpos - (p[1] + ρ[2] + ρ[3]) / 3.0; l i g h t . n o r m a l i z e O ; // get light vector

109

2 FRAKTALE GEOMETRIE

110

color = (int)(maxcol * (normal I light)); if (color < 0) color = 0 ; // calculate color depending on the setFillColor (color) ; // angle b e t w e e n light & normal

>

>

drawFilledTriangle(project(m * p[l]), // draw p r o j e c t e d p r o j e c t ( m * ρ[3]), project(m * ρ[2])); // triangle

// function: d r a w T e x t // description: Prints a string. v o i d G r D e v : : d r a w T e x t ( P 2 D p, char *txt) {

>

outtextxy(p.x() , height - p . y O , txt) ;

A l g o r i t h m e n zur Berechnung von J u l i a - M e n g e n und zur Berechnung der Mandelbrot-Menge Die Klasse „Julia" enthält die für die Berechnung einer Juliamenge der quadratischen Funkten Qc(z) — z2 + c notwendigen Daten. Neben dem Wert c werden noch Fenstergrôiàen und maximale Anzahl an Iterationen gespeichert. Bilder der Julia-Menge können dann mittels der Methoden „inverselteration", „boimdaryScanning' und „Levelset" berechnet werden. Diese Methoden implementieren die im Text beschriebenen Algorithmen. / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

file: description:

j u 1 i a . h a c++ class for j u l i a

ψ********************»*********************************************/ #ifndef #define #include #include

JULIA_H JULIA_H

"GrDev.h"

class J u l i a { public : // C o n s t r u c t o r w i t h complex Julia point. Julia(float r, float i); // Sets t h e m a x i m u m n u m b e r of iterations, void setMaxIter(int iter) { maxit = iter; }; // Sets t h e complex J u l i a point. void setPoint(float r , float i)

{ c_r = r; c_i = i; };

// Sets t h e complex a r e a to be viewed.

2.6 C++-CODE ZUM KAPITEL FRAKTALE GEOMETRIE

void setAreaCfloat x, float y, float width, float height) { areax = x; areay = y; areaw = width; areah = height; }; // C a l c u l a t e s a n d draws the j u l i a set w i t h a given start point... // (i) a n d the inverse iteration m e t h o d void inverseIteration(GrDev *dev, float s_r, float s_c, int d e p t h = 0); // (ii) a n d boundary scanning m e t h o d v o i d b o u n d a r y S c a n n i n g ( G r D e v *dev); // (iii) a n d the level set method. v o i d L e v e l s e t ( G r D e v *dev); private : float c_r, c_i; int maxit; float areax, areay, areaw, areah; int orbit(float x, float y); int lset( float x, float y);

// complex Julia point // m a x i m u m no of iter // dimensions of our area // test of boundary s c a n n i n g // test of levelset

#endif

file: j u l i a . c p p description: a c++ class for j u l i a ********************************************#**********************/ #include «include

"Julia.h"

// function: J u l i a // description: Constructor w i t h a complex J u l i a point. Julia::JuliaCfloat r, float i) {

>

setMaxIter(15); setPoint(r, i); setArea(-2.0, -2.0, 4.0, 4 . 0 ) ;

// function: i n v e r s e l t e r a t i o n // description: Calculates a n d draws Julia w i t h a complex start point. // Iterates until d e p t h >= m a x no of iterations. v o i d Julia::inverselterationCGrDev *dev, float x , float y, int depth) { float z_r, z _ i , z_b; int i_r, i_i;

// complex point ζ and abs(z) // counter

if (depth < maxit && i k b h i t O ) { z_r = χ - c_r; z_i = y - c_i; z_b = sqrt(z_r * z_r + z_i * z_i); // calculate square root if (z_r > 0.0) { χ = sqrt((z_b + z_r) / 2.0); y = z_i / (2.0 * x);

>

111

2 FRAKTALE GEOMETRIE

112

else if (z_r < 0 . 0 ) { y = sqrt((z_b - z_r) / 2.0); if (z_i < 0.0)

>

χ

y *= - l ; = z_i / (2.0 * y);

else { χ = sqrt(fabs(z_i) if (x > 0)

>

/ 2.0);

y = z_i / (2.0 * x) ; else y = 0;

i_r = (int)( (x - areas) / areaw * dev->queryWindowWidth() ); i_i = (int)( (y - areay) / areah * dev->queryWindowHeight() ); dev->drawPoint(P2D(i_r, i_i), 1); // first square root inverseIteration(dev, x, y, depth + 1 ) ;

>

>

// o r i g i n of first

i_r = (int)( (-χ - areax) / areaw * dev->queryWindowWidth() ); i_i = (int)( (-y - areay) / areah * dev->queryWindowHeight() ); dev->drawPoint(P2D(i_r, i_i), 1); // second square root inverseIteration(dev, -x, -y, depth + 1 ) ; // o r i g i n of s e c o n d

// function: o r b i t Test for b o u n d a r y scanning: if not contained in // description: // j u l i a set, r e t u r n s 0, else 1. int Julia:: orbit(float x, float y) { float x_2 = χ * χ, y_2 = y * y,

int iter = 0 ;

// squares of χ and y boundary = 4.0, dummy ; // counter

w h i l e (iter < maxit kk x_2 + y_2 < boundary) ++iter; dummy = x_2 - y_2 + c_r; y = 2 * x * y + c_i; χ = dummy; x_2 = χ * x; y_2 = y * y;

{

> r e t u r n x _ 2 + y_2 < boundary;

// function: b o u n d a r y S c a n n i n g // description: Calculates a n d d r a w s Julia set. Scans the whole // window and d r a w s points if they belong to the // J u l i a set. v o i d Julia: : boundaryScanning (GrDev *dev) { int w = d e v - > q u e r y W i n d o w W i d t h ( ) , h = dev->queryWindowHeight(), ol, o2 ,o3, o4,

// window dimensions // booleans for orbit test

2.6 C++-CODE ZUM KAPITEL FRAKTALE GEOMETRIE

all, none ; float χ , y . x d = areaw / w, y d = areah / h;

// scan values in the complex airea // step size

for (int i = 0; i drawPoint(P2D(i, j), 1); dev->drawPoint(P2D(w - i, h - j), 1);

// function: 1 s e t // description: Test for levelset: r e t u r n s number of int Julia::lset(float x, float y) {

iterations.

float x_2 = χ * χ, y-2 = y * y, boundary = 4.0, dummy ; int iter = 0; while (iter < maxit &! ++iter; dummy = x_2 - y_2 H y = 2 * χ * y h x = dummy;

> >

x_2 y_2

// squares of x a n d y

// counter _2 + y_2 < boundary)

{

= x * x; = y * y;

r e t u r n iter;

// function: L e v e l s e t // description: Calculates a n d draws J u l i a set. Scans the whole // window a n d draws colored p o i n t s if n o t contained // in the J u l i a set. The color is set according to the // number of iterations. void Julia::Levelset(GrDev *dev) { int w = dev->queryWindowWidth(), h = dev->queryWindowHeight Ο , col; float xd = areaw / w, y d = a r e a h / h; for (int i = 0; i < w,

¡ k b h i t O ; ++i)

// window dimensions // no of iterations // step size

// scan window

113

114

2 FRAKTALE GEOMETRIE

for (int j = 0; j < h; ++j) { col = lset(areax + xd *i, areay + yd * j); if (col > 0) dev->drawPoint(P2D(i, j), col);

>

file: description:

#include #include (•include •include

a l g o l . cpp demonstration of julia with inverse iteration

"GrDev.h" "Julia.h"

void mainO { float c_r, c_i, s_r, s_i; cout ;

// C a l c u l a t e s f u n c t i o n w i t h midpoint movement and parameter h. v o i d m i d p o i n t ( f l o a t h); // C a l c u l a t e s f u n c t i o n with succesive additions a n d parameter h. v o i d addition(float h); // D r a w s t h e one-dimensional v o i d drawCGrDev *dev); private : float val[LEN+1] ; int valid;

>;

function,

// values // f u n c t i o n already calculated ?

#endif

Ζ******************************************************************* file: description:

m i d a d d l d . c p p a c++ class for m i d p o i n t movement a n d successive additions in Id. *******************************************************************/

Sinclude #include #include

"MidAddlD.h" "Gauss.h"

// function: m i d p o i n t // d e s c r i p t i o n : Realizes one-dimensional random b r o w n i a n m o t i o n // w i t h midpoint movement. v o i d MidAddlD::midpoint(float h) { G a u s s g;

// init. gauss

val[0] =0.0; valCLEN] = g.randomValue();

// start/end point

// actual d i s p e r s i o n float delta; int step = LEN / 2; // actual distance for (int d e p t h = 1; d e p t h >

step /= 2;

v a l i d = 1;

// function: // d e s c r i p t i o n : //

a d d i t i o n Realizes one-dimensional random fractal w i t h successive additions.

void MidAddlD::addition(float

h)

2.6 C l +-CODE ZUM KAPITEL FRAKTALE GEOMETRIE

Gauss g;

// init. gauss

val[0] = 0.0; val[LEN] = g.randomValue();

// s t a r t / e n d point

float delta; // actual d i s p e r s i o n int i, step= LEN / 2; // actual distance for (int d e p t h = 1; depth ;

#endif

file: description:

»include »include »include

m i d a d d 2 d . c p p a c++ class for m i d p o i n t movement a n d successive a d d i t i o n s in 2d.

"MidAdd2D.h" "Gauss.h"

// function: m i d _ o r _ a d d // d e s c r i p t i o n : Calculates f u n c t i o n w i t h midpoint m o v e m e n t // or successive a d d i t i o n s (add!=0). v o i d MidAdd2D::mid_or_add(float h , int add)

(add==0)

2.6 C++-CODE ZUM KAPITEL FRAKTALE GEOMETRIE

int i, j; Gauss g; val[0 ][0 ] val[0 ] [LEN2D] val[LEN2D][0 ] val[LEN2D][LEN2D]

// counter // initialize gauss = g.randomValueO ; = g.randomValue(); = g.randomValueO ; = g.randomValue();

int dd = LEN2D, d = LEN2D / 2;

/ / initialize edges

// (double) distance between two points

float delta = sqrtCl.O - pow(2.0, 2.0 * h - 2.0)); if (add) delta *= sqrt(0.5);

/ / dispersion

for (int depth = 1; depth ;

2 FRAKTALE GEOMETRIE

128

// Sets t h e t r a n s l a t i o n b. v o i d setTrans(double bO, double bl) { b [ 0 ] = bO; b[l] = bl; > // C a l c u l a t e s a value f(x). v o i d calcPoint(double *x, double *y); private : double a [ 2 ] [ 2 ] ; double b [ 2 ] ;

// m a t r i x coeff. of A // t r a n s l a t i o n b

>;

class IFS {

/ / / / / / / / / / / / the ifs class

//////////////////////////////

public : // C o n s t r u c t o r . IFS() ; // Clears the bitmap, void c l e a r O ; // Sets t h e m a x i m u m number of iterations, v o i d setMaxIter(int iter) { maxit = iter; }; // Adds a w e i g h t e d function. v o i d a d d F u n c ( L i n F u n c *f, int «eight); // C a l c u l a t e s the IFS w i t h a g i v e n area and start point, v o i d calcIFS(double xmin, double xmax, double ymin, double ymax, double startx, double starty); // Draws t h e IFS. v o i d drawIFS(GrDev

*dev);

private : int m a x i t ; double x, y; int n u m f u n e ; LinFunc* f u n e [ F N U M ] ; int w [ F N U M ] ; int totalw; int bmw, b m h ; int bm[DIM] [DIM] ; void

#endif

nextPointO;

// //

// // //

m a x i m u m number of iterations iteration point number of functions the ifs functions a n d their weight the total weight sum size of our bitmap our bitmap

//

Calculates the next ifs point

//

// //

2.6 C++-CODE ZUM KAPITEL FRAKTALE GEOMETRIE

/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

file: i f s . c ρ ρ description: a c++ class for i t e r a t e d function systems *******************************************************************/

#include #include #include

"IFS.h"

// function: L i η F u η c // description: Constructor of a linear function f(x) = Ax + b. LinFunc::LinFunc() {

>

setMat(0.0, 0.0, 0.0, 0.0); setTransCO.O, 0.0);

// function: c a l c P o i n t // description: Calculates a value f(x). v o i d LinFunc::calcPoint(double *x, double *y) {

>

*x = (*x) * a[0] [0] + (*y) * a[0] [1] + b[0]; *y = (*x) * a[l] [0] + (*y) * a[l] [1] + b[l];

// function: // description: IFS: : I F S O {

>

I F S Constructor of an ifs.

maxit = 20000; n u m f u n c = 0; t o t a l » = -1; bmw = b m h - DIM; clear();

// function: c l e a r // description: Clears the ifs bitmap. v o i d IFS::clear() {

>

for(int i = 0; i < bmw; ++i) for(int j = 0; j < bmh; ++j) bm[i] [j] = 0;

// function: a d d F u η c // description: Adds a w e i g h t e d function. v o i d IFS: :addFunc(LinFunc *f, int weight) {

>

fune[numfunc] = f; w[numfunc++] = weight; totalw += weight;

// function: n e x t P o i n t // description: Calculates the next ifs point, v o i d IFS::nextPoint()

129

130

2 FRAKTALE GEOMETRIE

double r = r a n d O

/ (double) (RAND_MAX + 1); // r a n d o m value between 0 and 1

int i = 0; double s u m = w [0]; w h i l e (sum < r * totalw) s u m += w[++i];

>

fune[i]->calcPoint(fcx, &y) ;

// function: c a 1 c // description: Calculates the IFS w i t h a given area a n d start p o i n t , v o i d IFS::calcIFS(double xmin, double xmax, double ymin, double y m a x , double startx, double starty)

{ d o u b l e scalex, scaley;

// scaling factors for χ a n d y

χ = startx;

>

y = starty; for(int i = 0; nextPointO; scalex = (x scaley = (y > bm[(int)(bmw

// i t e r a t i o n i < maxit; ++i) { // calculate next point - xmin) / (xmax - xmin); - ymin) / (ymax - ymin); * s c a l e x ) ] [ ( i n t ) ( b m h * scaley)]++;

// function: d r a w // description: Draws the IFS w i t h the graphical device. v o i d IFS::drawIFS(GrDev *dev) { int i, j, k = 0; // get m a x i m u m spreading for(i = 0; i < bmw; ++i) for(j = 0; j < bmh; ++j) if (k < bm[i] [j]) k = bm[i] [j] ; // scale color double s = k ? dev->queryMaxColor() / (double)(k) int xoff = (dev->queryWindowWidth() yoff = (dev->queryWindowHeight()

>

: 0.0;

- bmw) / 2, - bmh) / 2;

for(i = 0; i < bmw; ++i) // draw centered bitmap for(j = 0; j < bmh; ++j) dev->drawPoint(P2D(xoff + i, yoff + j), (int)(bm[i] [j] * s));

file: description:

#include #include ttinclude

a l g o i f s . e p p demonstration of ifs

"GrDev.h" "IFS.h"

2.6 C + + - C O D E ZUM K A P I T E L F R A K T A L E G E O M E T R I E

131

void m a i n O { L i n F u n c fO, fi, f2; // create linear functions f0.setMat(0.5, 0.0, 0.0, 0.5); f0.setTrans(0.0, 0.0); f 1.setMat(0.5, 0.0, 0.0, 0.5); f1.setTrans(0.5, 0.0); f2.setMat(0.5, 0.0, 0.0, 0.5); f2.setTrans(0.25, 0.25 * sqrt(3.0)); IFS ifs; ifs.addFunc(&f0, 1); ifs.addFunc(&fl, 1); ifs.addFunc(&f2, 2); ifs.calcIFS(0.0,

// create ifs // add w e i g h t e d functions

// calculate ifs object 1.0, 0.0, 1.0, 0.0, 0.0);

GrDev dev; dev. i n i t G r a y C o l o r m a p O ; ifs.drawIFS(itdev) ;

// open graphical device // use gray color table // draw ifs

getchO ;

// wait u n t i l key p r e s s e d

2.6.5

A l g o r i t h m u s zur I n t e r p r e t a t i o n v o n k o n t e x t f r e i e n L i n d e n m a y e r s y s t e men

Die Klasse ,,Lindenmayei í ' implementiert Algorithmen zur Berechnung kontextfreier Grammatiken. Als Hilfsklassen werden die einfachen Klassen „Rule1' und „Turtle" verwendet. Ζ******************************************************************* file: description:

#ifndef «define «include Sinclude «define «define «define «define

systems

LSYSTEM.H LSYSTEM.H

"GrDev.h" MAXLEN 15000 MAXSTACK 20 MAXDEG 36 MAXRULES 5

class R u l e { public :

l s y s t e m . h a c++ class for L i n d e n m a y e r

// // // //

m a x i m u m size of strings size of turtle stack smallest step size for r o t a t i o n s m a x i m u m number of rules

// a rule: a word w i t h its replacement

132

2 FRAKTALE GEOMETRIE

char word;

>;

char

replacement[20];

class Turtle { // the cursor position a n d d i r e c t i o n public : T u r t l e O { χ = y = 0.0; d i r = 0; >; v o i d operator=(const Turtlefc t) { χ = t.x; y = t . y ; dir = t.dir; }; float χ, y; int dir;

class Lindenmayer {

// the Lindemayer systems class

public : // Constructor. Lindenmayer () ; // Asks for user input of axiom, rules, void r e a d O ;

...

// Interprets t h e a x i o m a n d draws a n image, v o i d draw(GrDev *dev); private : int numit; int numdeg; int numrules; char axiom[MAXLEN]; Rule rules[MAXRULES]; int valid; Turtle stack[MAXSTACK]; int stackpos;

// // // // // //

n u m b e r of iterations divide full circle in n u m d e g p a r t s n u m b e r of rules the start axiom the replacement rules indicates if axiom a n d size are ready

// the turtle stack // the actual stack p o s i t i o n

float sin_tab[MAXDEG], cos_tab[MAXDEG]; // sin and cos table float xmin, xmax, y m i n , ymax, seal; // dimensions f o r scaling void u s e R u l e Q ; // U s e s all rules on the axiom, v o i d interpret(GrDev *dev); // Interprets the axiom. v o i d scale(GrDev *dev); // scales to window size // fills the sin/cos table v o i d calc_sin_cos(); // saves actual state v o i d pushTurtle(Turtle t); // restores o l d state Turtle p o p T u r t l e O ; v o i d actualizeTurtle(Turtle *t, char word); v o i d moveTurtle(Turtle *t, GrDev *dev, int visible);

#endif

2.6 C++-CODE ZUM KAPITEL FRAKTALE GEOMETRIE

/ * * * * * » * * * * * * » * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * • * * * * * * * * * * * * • * * * * *

file: description:

#include #include #include #include #include #include

l s y s t e m . c p p a c++ class for Lindenmayer

systems



"LSystem.h"

// function: r e a d Asks for user input of axiom, rules, // description: v o i d Lindenmayer::read() { cout cout cout cout for

> >

(tMaxX < tMaxY) tMaxX = tMaxX + tDeltaX; X = X + stepX;

eise {

>

tMaxY = tMaxY + tDeltaY; Y = Y + stepY;

NextPixel ( Χ, Y ) ;

} Hierbei sind (Χ,Y) die Koordinaten des aktuellen Pixels. Die Variablen stepX und stepY sind entweder + 1 oder —1, je nachdem ob der Strahl in positiver oder negativer x- bzw. y-Richtung verläuft. tMaxX und tMaxY merken sich den Strahlabstand bis zur nächsten vertikalen bzw. horizontalen Voxelbegrenzung. Die Inkremente tDeltaX und tDeltaY geben an, wie weit man den Strahl von einer horizontalen (vertikalen) Voxelbegrenzung zur nächsten verfolgen muß. Für die 3D-Verallgemeinerung des Algorithmus müssen weitere Variablen Z, stepZ, tMaxZ und tDeltaZ eingeführt und in jedem Schritt das Minimum von {tMaxX,tMaxY,tMaxZ} bestimmt werden.

3.1 STRAHLVERFOLGUNG (RAYTRACING)

145

X

Bild 3.3: Algorithmus von Amanatides 3.1.2

und Woo.

R a u m u n t e r t e i l u n g mit Octrees

Der Octree ist eine effiziente Datenstruktur für die Raumunterteilung beim Raytracing. Zunächst einmal wird die achsenparallele Bounding Box aller Szenenobjekte bestimmt. Wir bezeichnen diese Box als Startvoxel. Immer wenn ein Voxel zu komplex ist, d.h., wenn es zu viele Objektprimitive enthält, wird das Voxel in acht gleichgroße Subvoxel unterteilt (vgl. Bild 3.4 und 3.5). Dieser Komplexitätstest wird dann rekursiv auf die acht Subvoxel angewendet. Das Resultat ist eine adaptive Unterteilung der 3D-Szenen— Bounding-Box: komplexe Regionen werden häufiger unterteilt als Regionen mit wenigen Objekten.

Bild 3.4'· Raumunterteilung

mit Octrees.

Der nächste Abschnitt beschreibt einen besonders effizienten Traversierungsalgorithmus für die Octree-Datenstruktur. Der SMART

Algorithmus

Beim SMART Algorithmus [Spa90], [SW91] wird der Strahlpfad durch den Octree mit Hilfe von zwei Entscheidungsvektoren inkrementell berechnet: •

HSMART

berechnet horizontale Schritte von einem Voxel zum Nachbarvoxel.

146

3 GLOBALE BELEUCHTUNGSMODELLE

• ·VSMART

berechnet vertikale Schritte von einem Elternvoxel zum Kind voxel.

Beide Entscheidungsvektoren werden als SMART - Spatial Measure for Accelerated Raytracing - bezeichnet. Der Algorithmus kann wie folgt in Pseudocode formuliert werden: p r o c e d u r e Traverse( Mortonlndex, V S M A R T , H S M A R T , · · • ) begin if Knoten( Mortonlndex ) ist ein Blattvoxel then Führe Schnittpunkttest des Strahls mit allen Objekten im Blattvoxel durch, eise / * Der aktuelle Knoten ist ein interner Voxelknoten * / / * und hat acht Sub-Knoten (Sub-Voxel). */ U p d a t e V S M A R T , Mortonlndex, . . . für die vertikale Traversierung. Traverse( Mortonlndex', V S M A R T \ H S M A R T \ • · · ); / * Elternvoxel —> Kindvoxel */ w h i l e RelativeMortonlndex != 7 d o Update

HSMART

, Mortonlndex, . . . für die horizontale Traversierung.

Traverse( Mortonlndex', V S M A R T \ H S M A R T ' , / * Kindvoxel —• benachbar. Kindvoxel * /

· · · );

end while e n d if end Morton-Index

Bild, 3.5: Absoluter

Morton-Index.

Der absolute Morton-Index [Mor66] indiziert die acht Oktanten-Kinder eines Elternvoxels. Jedes der drei Bits (zyx) wird gesetzt, wenn das Kind oberhalb der entsprechenden (zyx)-Halbierungsebene liegt (vgl. Bild 3.5). Ansonsten wird es nicht gesetzt. Der relative Morton-Index für ein Oktanten-Kind wird relativ zu einem Oktanten-Bruder definiert. Jedes der Dimensionsbits wird genau dann gesetzt, wenn das Kind auf der anderen Seite der Halbierungsebenen als der Oktanten-Bruder liegt. Ansonsten wird das entsprechende Bit nicht gesetzt.

3.1 STRAHLVERFOLGUNG (RAYTRACING)

147

• RelMortonIndex( Kind, Bruder ) = RelMortonIndex( Bruder, Kind ) • RelMortonIndex( Kind, Bruder ) = AbsMortonIndex( Kind ) XOR AbsMortonlndex( Bruder ) • AbsMortonIndex( Kind ) = RelMortonIndex( Kind, Bruder ) XOR AbsMortonlndex( Bruder ) Horizontale

Traversierung

Der Distanzvektor δ — [χ, y, z]T

(mit χ > 0, y > 0, ζ > 0)

eines Strahls enthält die Entfernungen des aktuellen Strahlpunktes O zur x—,y— und z—Begrenzungsebene des Voxels. Alle Distanzen sind strikt positiv. Der Distanzvektor ist also der Vektor vom aktuellen Strahlpunkt O zur Austrittsecke des Voxels. Die Austrittsecke ist der Schnittpunkt aller Begrenzungsebenen des Voxels, die der Strahl in Strahlrichtung schneidet. Benutzt man ein Koordinatensystem mit Ursprung im Voxelmittelpunkt, so ist die Austrittsecke die Ecke des Voxels, die im selben Oktanten liegt wie die Strahlrichtung. Jeder Strahl hat außerdem einen Vektor Δ - [X, y,

- [iRayDirJ, |RayDir„|, |RayDir z |] T ,

der die relativen Traversierungsraten in jeder Dimension enthält. Alle Raten sind nicht-negativ, das Maximum sogar strikt positiv. RayDir ist dabei der Richtungsvektor des Strahls. Wir können jetzt den Vektor H s m a r t wie folgt als Kreuzprodukt definieren: H s m a r t = Δ χ Á = [Υ ζ - y Ζ, Zx - zX, Xy -

xY]T.

Das Vorzeichen jeder Komponente zeigt die Reihenfolge, in der die anderen beiden Halbierungsebenen vom Strahl getroffen werden. Beweis: Betrachte nur die dritte Komponente von H s m a r t · Sei ry die Entfernung, die der Strahl, wenn er die x—Begrenzungsebene trifft, in y—Richtung noch zurücklegen muß, um die y—Begrenzungsebene zu treffen. Die Situation ist in Bild 3.6 veranschaulicht. Man sieht, daß ry genau dann positiv ist, wenn die x—Begrenzung,sebene vor der y—Begrenzungsebene getroffen wird. Offensichtlich gilt Xy-xY

= Xry,

d.h. [ H S m a r t ] z =

Xryy.

Für X > 0 können wir daraus folgern

(

ry>

0

rv < 0

f x — Begrenzungsebene vor y — Begrenzungsebene getroffen : Schritt χ < χ — und y — Begrenzungsebenen gleichzeitig getroffen: Schritt x,y y — Begrenzungsebene vor χ — Begrenzungsebene getroffen : Schritt y

148

3 GLOBALE BELEUCHTUNGSMODELLE

r

y

>0

r

y

=0

x-Begrenzungsebene • y-Begrenzungsebene \

X

ι 1 : yι

,

/ δ / /

Bild 3.6: SMART

- Horizontale

/

y y

χ

s

Y

^

y-r 1

J

O "

Austrittspunkt

X Ί

r

/

0

[HSMART],

< 0

[H SMARTJ

> 0 0 < 0

Schritt X Schritt Schritt y

[HSMART] ¿

> 0 0 < 0

Schritt X Schritt x,y,z Schritt y,z

ÍH SMART!

=

> 0 0 < 0

Schritt ζ Schritt χ, ζ Schritt χ

Danach wird inkrementell der nächste Wert von Vertikale

HSMART

bestimmt.

Traversierung

Nun wird ein vertikaler Schritt im Octree betrachtet. Zu berechnen ist der absolute Morton-Index des Kind-Voxels, das den Strahlursprung O enthält. Der SMART-Algorithmus bestimmt den relativen Morton-Index dieses Kind-Voxels zum Austrittsvoxel durch Vergleich der drei Komponenten des Entscheidungsvektors VSMART = Δ

3.1 S T R A H L V E R F O L G U N G ( R A Y T R A C I N G )

10

11

00

01

m

m

149

absolute MortonIndizes der Subvoxel

δ = [χ,y], χ > 0, y > 0 Austritts-

I I ι δ I /

punkt ( 1 1 )



H

^

O

O y > m, χ > m

y > m, χ 0, RayDir^. > 0] und RayDir der Richtungsvektor des Strahls. Ein Beispiel ist in Bild 3.7 gegeben. Eine ausführliche Beschreibung des SMART-Algorithmus ist in der Veröffentlichung von Spackman (vgl. [SW91]) enthalten.

150

3 GLOBALE BELEUCHTUNGSMODELLE

Vorteile des

SMART-Algorithmus

Der SMART-Algorithmus • ist numerisch stabil; • ist für vertikale und horizontale Navigationsschritte gleichermaßen gut geeignet; • berechnet die Navigationsschritte inkrementell aus Werten, die lokal bekannt sind; • kann ausschließlich mit Integerarithmetik berechnet werden, wenn obigen Berechnungen ein Quantisierungsschritt vorangeht. 3.1.3

Szenenunterteilung m i t hierarchischen B ä u m e n

Betrachten wir zunächst einmal ein einzelnes Bounding Volume, d.h. einen Körper, der eine Teilszene, bestehend aus einem oder mehreren Objekten, vollständig umhüllt. Das generelle Ziel besteht darin, Kosten bei den Schnittpunkttests eines Strahls mit den Objekten der Teilszene zu sparen. Bild 3.8 veranschaulicht die zugrunde liegende Idee im Zweidimensionalen. Der Strahl wird in allen drei Fällen mit dem Bounding Volume geschnitten. Verfehlt der Strahl das Bounding Volume, so kann man auf den Schnitt des Strahls mit der Teilszene verzichten. Trifft der Strahl das Bounding Volume, so hat man noch keine Aussage darüber, ob die Teilszene getroifen (Typ 3) oder verfehlt (Typ 2) wird und muß daher auf jeden Fall den Strahl auch noch mit der Teilszene schneiden. Der Schnitt eines Strahls mit einem Bounding Volume ist also eine notwendige, aber keine hinreichende Bedingung dafür, daß die enthaltene Teilszene getroffen wird. Weghorst et. al. [WHG84] geben die Kosten einer Schnittpunktberechnung eines Strahls mit einer Teilszene wie folgt an: Τ = n- B + m-1

(3.2)

mit Τ η

— -

Β m

= =

I



gesamte Schnittpunktberechnungskosten Anzahl der Strahlen, die gegen das Bounding Volume auf einen Schnitt getestet werden Kosten des Schnittpunkttests mit dem Bounding Volume Anzahl Strahlen, die das Bounding Volume tatsächlich treffen (0 < m < η) Kosten der Schnittpunkttests mit den Objekten der enthaltenen Teilszene

Das Ziel ist, die Kostenfunktion Τ zu minimieren. Unter der Annahme, daß η und I konstant sind, ergeben sich aus dieser Kostenfunktion zwei unterschiedliche Anforderungen bei der Wahl eines konkreten Bounding Volumes. Einfache Bounding Volumes (z.B. Kugel, Ellipsoid, Quader) mit kleinen Schnittkosten Β haben relativ hohe Strahltrefferzahlen m. Komplexe Bounding Volumes (z.B. exakte konvexe Hülle) mit kleinem m haben hohe Schnittkosten B.

3.1 STRAHLVERFOLGUNG (RAYTRACING)

151

Typ 3

Teilszene ι(n Objekte) Bounding Volume

Bild 3.8: Schnitt von Strahlen mit Bounding

Volume.

Aufbau einer Hierarchie Durch Einbetten einzelner Objekte in Bounding Volumes kann man das Raytracing-Verfahren bereits merklich beschleunigen. Dennoch ist der Aufwand zur Berechnung des nächsten Schnittpunktes eines Strahls immer noch proportional zur Anzahl η der Objekte in der Szene (O(n)). Zur Berechnung des nächsten Schnittpunktes benötigen die besten bekannten Beschleunigungsstrukturen im worst case einen Aufwand von O(logn). Leider haben diese Strukturen einen Speicherbedarf von 0 ( n 4 + e ) und sind deshalb für die praktische Anwendung ungeeignet (vgl. [dBHO + 91]). Die besten bekannten Algorithmen, die mit annähernd linearen Speicherbedarf auskommen, benötigen Berechnungszeiten von 0 ( n 3 / 4 ) für den worst case (vgl. [AM92]). Hierarchische Strukturen sind solche Strukturen mit linearen Speicherbedarf. In der Praxis liefert die Verwendung von Hierarchien jedoch brauchbare Ergebnisse. Hierbei werden mehrere Objekte und insbesondere Bounding Volumes wiederum zu neuen Bounding Volumes zusammengefaßt. Die daraus resultierende Struktur ist ein Baum, dessen innere Knoten mit Bounding Volumes und dessen Blätter mit Objekten besetzt sind (vgl. Bild 3.9). I I = Bounding Volume (3) = Objekt der Szene

Bild 3.9: Beispiel für Bounding

Volume Hierarchie.

Es gibt viele Möglichkeiten, um eine Hierarchie aufzubauen. Eine gute Hierarchie sollte folgende Eigenschaften [KK86] zur maximalen Beschleunigung der Schnittpunktberechnungen aufweisen: H l Die Teilbäume der Hierarchie sollten Objekte enthalten, die in der Szene nahe beieinanderliegen.

152

3 GLOBALE BELEUCHTUNGSMODELLE

H 2 Die Volumeninhalte der einzelnen Bounding Volumes sollten minimal sein. H 3 Die Summe der Volumeninhalte der Bounding Volumes sollte minimal sein. H 4 Die Bemühungen beim Aufbau der Hierarchie sollten sich auf die oberen Knoten konzentrieren, da durch Abschneiden eines Teilbaums nahe bei der Wurzel mehr Objekte wegfallen als bei einem tieferen Teilbaum. H 5 Die Zeit zur Berechnung des Bildes durch das Raytracing-Verfahren sollte trotz der zusätzlichen Preprocessing-Zeit zum Aufbau der Hierarchie sehr viel geringer werden. Ein einfaches Verfahren zur Konstruktion effektiver Hierarchien ist das Median-Cut— Verfahren [KK86], das eine Binärbaum-Hierarchie von oben nach unten aufbaut. Im ersten Schritt werden die Objekte der Szene gemäß ihrem Objektmittelpunkt entlang der x-Achse sortiert. Darin wird die Szene in der Mitte geteilt. Die eine Hälfte der Objekte wird dem linken Teilbaum zugeordnet, die andere Hälfte dem rechten Teilbaum. Dieser Vorgang wird dann rekursiv auf die beiden Teilszenen angewendet, wobei jedoch für jede Ebene des Binärbaums eine andere Sorticrachse gewählt wird. Die Rekursion terminiert, wenn eine Teilszene nur noch η Objekte umfaßt. Die Zahl η ist dabei abhängig vom Aufwand der Schnittpunktberechnung für das gewählte Bounding Volume und den in der Teilszene enthaltenen Objekten. Travcrsierung In einem einfachen Traversierungsalgorithmus wird zunächst einmal getestet, ob der Strahl das Bounding Volume der gesamten Szene (Wurzel des Hierarchiebaumes) trifft. Ist dies der Fall, so wird ein Schnittpunkttest für jeden der Kindknoten aufgerufen. Ist ein solcher Kindknoten ein Blattknoten des Hierarchiebaumes, so wird die Schnittpunktberechnung für die Objekte in diesem Blattknoten ausgeführt. Ist der Kindknoten ein interner Knoten, so wird getestet, ob der Strahl das zugeordnete Bounding Volume trifft. Ist dies der Fall, so wird der Schnittpunkttest wiederum rekursiv für dessen Kindknoten ausgeführt. Verfehlt der Strahl das Bounding Volume, so kann der gesamte an diesem internen Knoten hängende Teilbaum bei der weiteren Schnittpunktsuche ignoriert werden. Kay et. al. [KK86] haben einen noch effizienteren Traversierungsalgorithmus entwickelt. Sie benutzen die Distanz zwischen Strahlursprung und dem Schnittpunkt eines Strahls mit einem Bounding Volume der enthaltenen Teilszene. Ist diese Distanz größer als die Distanz zu einem bereits gefundenen Schnittpunkt, so kann dieses Bounding Volume und der ganze an ihm hängende Teilbaum bei der weiteren Schnittpunktsuche ignoriert werden. Der verbesserte Traversierungsalgorithmus sortiert daher alle noch zu testenden Bounding Volumes gemäß ihrer Distanz vom Strahlursprung und wählt sich jeweils dasjenige Bounding Volume als nächsten Testkandidaten, das dem Strahlursprung am nächsten ist. Als Sortierdatenstruktur wird der Heap gewählt. Ein Heap ermöglicht das Einfügen eines neuen Elements und das Suchen bzw. Löschen des minimalen Elements mit einem Aufwand von jeweils nur 0(log 11). Der Algorithmus von Kay et. al. läßt sich wie folgt in C-ähnlichem Pseudocode formulieren:

3.1 STRAHLVERFOLGUNG (RAYTRACING)

153

traverse ( Strahl, Root ) { schneide Strahl mit Root und fuege Root in Heap ein, falls Schnittpunkt vorhanden; mindist = INFINITY; while ( Heap nicht leer ) { hole obersten Knoten Ν vom Heap; if ( N.dist > mindist ) return; if ( Ν ist Blatt des Hierarchiebaumes ) {

>

berechne Schnitt von Strahl mit allen Objekten in N; mindist = Strahllaenge bis zum naechsten bisher gefundenen Schnittpunkt ;

eise /* Ν ist eine interner Knoten */ { for ( jedes Kind Κ von Ν ) {

> 3.1.4

>

>

>

K.dist = Strahllaenge bis zum Schnittpunkt; if ( K.dist < mindist ) fuege Κ in Heap ein;

Mailbox-Technik

Die Unterteilung des 3D-Objektraums in nichtüberlappende Voxel kann eine Fragmentierung zur Folge haben. Objekt A in Bild 3.10 liegt teilweise in sieben Voxeln und muß in jedem dieser Voxel gespeichert werden. Alternativ könnte man Objekt A in sieben Sub-Objekte, die jeweils in genau einem Voxel liegen, aufspalten. Dieses Aufspalten von Objekten ist jedoch sehr rechenaufwendig und verursacht außerdem Probleme dadurch, daß die Sub-Objekte in der Regel von einem anderen Objekttyp sind. In Bild 3.10 wäre keines der sieben Sub-Objekte eine rechteckige Box wie das ganze Objekt A. Alternativ dazu werden die Objekte in jedem vom Objekt geschnittenen Voxel eingetragen. Dabei ergibt sich folgendes Problem: Strahl R zum Beispiel muß mit den Objekten in den Voxeln 5, 6, 7 und 8 geschnitten werden. Das einzige in Voxel 5 eingetragene Objekt ist Objekt A. Der Schnittpunkttest zwischen Strahl R und Objekt A resultiert im Schnittpunkt I\. Bild 3.10b zeigt, daß dies nicht unbedingt das richtige Ergebnis für den Strahl R sein muß. Um sicherzugehen, daß der nächstliegende Schnittpunkt gefunden wird, werden nur diejenigen Schnittpunkte als

154

3 GLOBALE BELEUCHTUNGSMODELLE

Bild 3.10:

Mailbox-Technik.

gültig klassifiziert, die innerhalb des aktuellen Voxels liegen. Für das Beispiel in Bild 3.10a bedeutet dies andererseits jedoch, daß der Schnittpunkttest zwischen Strahl R und Objekt A dreimal durchgeführt werden muß, nämlich für die Voxel 5, 6 und 7. Zur Vermeidung dieses Problems ordnen Arnaldi et. al. [APB87] jedem Objekt der Szene eine sogenannte Mailbox und jedem Strahl eine eindeutige Strahl-ID zu. Die Mailbox speichert das Resultat der letzten Schnittpunktberechnung mit dem zugeordneten Objekt. Nach jedem Schnittpunkttest wird das Ergebnis der Berechnung zusammen mit der Strahl-ID in der Mailbox des Objekts gespeichert. Vor jedem neuen Schnittpunkttest wird die Strahl-ID des aktuellen Strahls mit der Strahl-ID in der Mailbox verglichen. Stimmen die IDs überein, so kann das Ergebnis des Schnittpunkttests ohne weitere Berechnungen aus der Mailbox abgelesen werden. Ansonsten wird eine neue Schnittpunktberechnung durchgeführt und das Ergebnis in der Mailbox gespeichert. 3.1.5

Schatten-Caches

Das Verfolgen von Schattenstrahlen ist einfacher als das Verfolgen von Sehstrahlen, da es nicht notwendig ist, den nächsten Schnittpunkt des Strahls mit den Primitiven der Szene zu finden. Das Wissen, daß mindestens ein Schnittpunkt des Strahls mit einem undurchsichtigen Objekt existiert, ist bereits ausreichend. Aus diesem Grund verwaltet jede Lichtquelle einen Schatten-Cache [HG86], [PJ91], der das Resultat der Strahlverfolgung des letzten Schattenstrahls speichert (vgl. Bild 3.11). War dieser Schattenstrahl auf seinem Weg von der Lichtquelle zum Objektschnittpunkt auf ein undurchsichtiges Objekt gestoßen, so wird ein Pointer auf dieses schattenwerfende Objekt im Schatten-Cache gespeichert. Ansonsten wird ein Null-Pointer gespeichert. Bevor der nächste Schattenstrahl verfolgt wird, führt man einen Schnittpunkttest mit dem durch den Schatten-Cache referenzierten Objekt durch. Nur wenn dieses Schnittestergebnis negativ ist, wird der Schattenstrahl explizit durch die Szene verfolgt. Dieser Algorithmus geht davon aus, daß der Strahlursprung eines Schattenstrahls im O b j e k t r a u m dicht bei dem seines Vorgängers liegt. Diese Annahme gilt höchstens für Strahlen, die im abstrakten Strahlbaum zu denselben Knoten gehören, zum Beispiel für benachbarte Primärstrahlen, und die jeweils dazu-

3.1 STRAHLVERFOLGUNG (RAYTRACING)

155

(b) Strahlbaum

(a) Rekursives Raytracing

(c) Schatten-Caches

eye

/ \

Bild 3.11: Binärbaum von

Ei = Primaerstrahl

Si = Schattenstrahl

Ri = reflektierter Strahl

Ci = Schatten-Cache

Ti = transmittierter Strahl

i = Strahlindex

/ \

Schatten-Caches.

gehörigen transmittierten und reflektierten Strahlen, die ihrerseits häufig wieder dasselbe Objekt schneiden. Daher wird für jeden Knoten im abstrakten Strahlbaum ein Schatten-Cache verwaltet. Der abstrakte Strahlbaum kann als lineare Liste repräsentiert werden. Zur Indizierung dieser Liste wird für jeden Knoten ein Strahlindex wie folgt berechnet: Strahlindex( Primärstrahl Strahlindex( reflektierter Strahl Strahlindex( transmittierter Strahl Strahlindex( Schattenstrahl 3.1.6

) ) ) )

1 2 * Strahlindex( Elternstrahl ) 2 * Strahlindex( Elternstrahl ) I 1 Strahlindex( Elternstrahl )

A d a p t i v e Rekursionstiefenkontrolle

Eine ad-hoc-Technik zur Vermeidung unnötiger Strahlverfolgungen besteht darin, (reflektierte/ transmitíierte/ . . . ) Sekundärstrahlen nicht weiter zu verfolgen, wenn ihr Beitrag zur Pixelfarbe zu klein wird [HG83]. Bei einem Primärstrahl pro Pixel bestimmt der Primärstrahl zu 100 % die Pixelfarbe. Generell tragen Strahlen der n-ten Generation zur Strahlfarbe ihres Elternstrahls der (n — l)-ten Generation bei. Wird z.B. ein reflektierter Strahl der zweiten Generation von einer Fläche reflektiert, die zu 30% spiegelnd ist, dann kann dieser Strahl maximal 30% zur Primärstrahlfarbe und damit zur Pixelfarbe beitragen. Ein Strahl der dritten Generation trägt z.B. 40% zum Strahl der zweiten Generation und damit nur 40%·30% = 12% zur Primärstrahlfarbe bei. Eine generelle Regel lautet, daß Strahlen weiter unten im Strahlbaum weniger zur Pixelfarbe beitragen. Bevor ein Sekundärstrahl durch die Szene verfolgt wird, wird sein maximaler Intensitätsbeitrag zur Pixelfarbe geschätzt. Liegt dieser Wert unterhalb eines Schwell wertes, so wird der Strahl nicht erzeugt.

156

3.1.7

3 GLOBALE BELEUCHTUNGSMODELLE

Pixel-Selected Raytracing

Selbst wenn die Szenengeometrie fest vorgegeben ist, sind bis zu einem zufriedenstellenden Ergebnis häufig viele Bildberechnungen notwendig. Der Grund hierfür ist, daß auch viele andere, nichtgeometrische Parameter den visuellen Eindruck der Szene beeinflussen: Kameraparameter, Anzahl, Positionen und Intensitäten der Lichtquellen und zahlreiche Materialparameter für jedes Primitiv der Szene, die vom Benutzer häufig nach einer Berechnung noch korrigiert werden müssen. Eine schnelle Previewing-Technik zur Beschleunigung der Visualisierung besteht darin, homogene Regionen in der Bildebene zu detektieren und zu interpolieren. Die Technik basiert auf einer divide and conquer Strategie und funktioniert wie folgt: Schritt 1: Unterteile die Bildebene in Regionen von je Dre χ Oy Pixeln. Schritt 2: Bestimme die Intensitäten der vier Eckpixel durch Emittieren von Strahlen. Schritt 3: Sind die Pixel direkt benachbart, so gib die Pixelfarben aus und stoppe. Schritt 4: Ist die Intensität zwischen den Eckpixeln kleiner als ein Schwellwert, so fülle die Region durch bilineare Interpolation der vier Eckintensitäten und stoppe. Schritt 5: Ansonsten unterteile die Region in zwei oder vier Unterregionen, berechne alle noch nicht berechneten Eckintensitäten durch das Raytracing-Verfahren und wende die Schritte 3 bis 5 rekursiv an. Dieser Algorithmus kann offensichtlich dadurch Fehler im Bild produzieren, daß kleine Objekte nicht explizit durch Strahlen getroffen werden. Anwendungen zeigen jedoch, daß bei vielen Szenen diese Fehler relativ klein sind. Außerdem können sie durch Verändern der Werte für D.x, Oy und dem Farbschwellwert beeinflußt werden. Da diese Technik nicht für das fertige Bild gedacht ist, sind kleine Fehler häufig akzeptabel. Akiinoto et. al. [AMHS89] berichten in ihrem Aufsatz Pixel Selected Raytracing über mehrere Verbesserungen dieser einfachen Interpolationstechnik. Sie erfanden bessere Pixel-Auswahl-Techniken (Iterative Zentralpunktselektion) und vergleichen für die vier Abtast-Eckpunkte ganze Strahlbäume zur Minimierung von Interpolationsfehlern. 3.1.8

Bewertung

Raytracing ist insbesondere für Szenen mit hohem spiegelnden und transparenten Flächenanteil geeignet und liefert hier gute Ergebnisse. Im folgenden werden die Vorund Nachteile das Raytracing nocheinmal zusammengestellt. + Die Szenenbeschreibung kann beliebig komplexe Objekte enthalten. Die einzige Bedingung besteht darin, daß Objektnormalen und Schnittpunkte mit Strahlen berechenbar sind. Es besteht keine Notwendigkeit, alle Objekte durch Polygone zu approximieren.

3.2 DAS RADIOSITY-VERFAHREN

157

+ Die Berechnung verdeckter Flächen, Schatten, Reflexionen und Transparenzen sind ein inhärenter Teil des Raytracing-Algorithmus. + Explizite perspektivische Transformationen der Objekte und Clipping-Berechnungen sind nicht notwendig. + Objekte dürfen sich gegenseitig durchdringen. Schnitte zwischen Objekten brauchen nicht berechnet zu werden. + Das Beleuchtungsmodell muß nur in sichtbaren Objektpunkten berechnet werden. — Die Abtastung der Szene mit einem Strahl pro Pixel erzeugt in der Regel Aliasing, das mit Supersampling oder stochastischem Abtasten gemildert (C0086], (Pur86], [Gla95j werden kann. — Schnittpunktsberechnungen werden in der Regel in Floating-Point-Arithmetik durchgeführt. Da unter Umständen viele Millionen Strahlen verfolgt werden müssen, ist der Rechenaufwand sehr groß. — Schatten haben stets scharfe Grenzen. Weiche Halbschatten sind nur durch rechenaufwendigere, stochastische Raytracing-Verfahren darstellbar. — Außerdem müssen Schatten bei jeder Änderung der Kameraparameter neu berechnet werden, obwohl diese nur von den Lichtquellen und den Objekten der Szene abhängig sind. — Globales diffuses Licht wird beim konventionellen Raytracing-Verfahren nicht berücksichtigt. — Szenen werden bezüglich eines Blickpunktes berechnet. Ein Durchwandern von Räumen ist deshalb trotz Beschleunigungstechniken momentan kaum in Echtzeit zu realisieren.

3.2 3.2.1

D a s Radiosity-Verfahren Einführung

Das Radiosity-Verfahren [CW93] wurde von Goral, Greenberg et al.[GTGB84] im Jahre 1983 vorgestellt und beruht auf der Energieerhaltung. Zwischen der zugeführten Strahlungsenergie durch die Lichtquellen und der Absorption durch die Oberflächen besteht ein Gleichgewicht, das zu einer zeitunabhängigen Beleuchtungsstärke in der Szene führt. Ebenso wie beim Strahlverfolgungsverfahren handelt es sich um ein globales Beleuchtungsverfahren, allerdings für ideal diffus reflektierende Oberflächen. Global heißt, daß nicht nur die Wechselwirkung der Oberflächen mit den Lichtquellen, sondern darüber hinaus die Wechselwirkung der Oberflächen untereinander berücksichtigt wird. Trotz der Einschränkung auf diffus reflektierende Oberflächen bietet sich für das Radiosity— Verfahren doch ein weites Anwendungsgebiet. So sind in unserer natürlichen Umgebung

158

3 GLOBALE BELEUCHTUNGSMODELLE

weitgehend diffus reflektierende Oberflächen zu sehen, wogegen spiegelnde Oberflächen eher die Ausnahme sind. Vor allem für die Lichtverteilung in Gebäuden ist das Radiosity-Verfahren wie kein anderes Beleuchtungsverfahren geeignet. Ein großer Vorteil diffuser Reflexion ist, daß die Leuchtdichte (Intensität) einer Fläche unabhängig von der Beobachtungsrichtung ist. Wurde eine Szene mit dem Radiosity— Verfahren berechnet, so ist es möglich, die Szene aus allen Richtungen zu betrachten, ja sogar durch die Szene hindurchzugehen, ohne sie neu berechnen zu müssen. Durch diese Eigenschaft der Betrachtungsunabhängigkeit wird auch die hohe Rechenzeit für das Verfahren akzeptabel. Das Radiosity-Verfahren wird als physikalisches Beleuchtungsverfahren bezeichnet, obwohl auch im Radiosity-Verfahren von der Fülle der physikalischen Effekte, die bei der Lichtausbreitung eine Rolle spielen, nur der Mechanismus der rein diffusen Reflexion berücksichtigt wird. Die rein diffuse Reflexion kann aber dafür mit gewünschter Genauigkeit nachgebildet werden. Berechnet wird im Radiosity-Verfahren die spezifische Beleuchtungsstärke (gemessen in Lux) einer jeden Fläche. Es wird also eine photometrische Größe berechnet, für die es eine genaue Meßvorschrift gibt. Die Ergebnisse des Radiosity-Verfahrens konnten deshalb auch im Experiment nachgeprüft und verifiziert werden [MRC+86]. 3.2.2

Die Beleuchtungs- und die Radiositygleichung

Zur Herleitung der Beleuchtungsgleichung gehen wir von der Reflektionsgleichung (Band I, Kapitel 6.2.1, Gleichung 6.22) aus. Trifft in einem Punkt Licht aus mehreren Richtungen ein, so beeinflussen sich die einzelnen Reflektionen nicht, sondern können linear überlagert werden. Durch Integration über alle Einfallsrichtungen erhält man für die reflektierte Strahldichte (3.3) Dabei kennzeichnet der Index i die Größen der einfallenden, r die Größen der reflektierten Strahlung, χ den Ort und ρ{χ.,ωΓ,ώί) den spektrale Reflexionsfaktor, in der englischen Literatur auch als "bidirectional reflection distribution function (BRDF)" am Ort χ bezeichnet. Anstatt über alle Einfallsrichtungen zu integrieren, kann auch über alle anderen Flächen der Szene, die Licht reflektieren oder abstrahlen, integriert werden. Dazu verwenden wir (3.4) wobei öo der Winkel zwischen der Normalen des infinitisimal kleinen Flächenelement dA am Ort x' und dem Vektor χ — χ' ist, vgl. Abb. 3.12. Berücksichtigen wir weiter, daß die Strahldichte L¿(x, w¿) entlang eines Strahls invariant bleibt, so können wir die Strahldichte L¿(x, ώί) durch die Strahldichte an der Stelle x' ausdrücken, vgl. Abb. 3.12: Li{x,(Ji)

= 1(χ',ω0)



Η(χ,χ')

(3.5)

3.2 DAS RADIOSITY-VERFAHREN

wobei

159

von χ aus unsichtbar von χ aus sichtbar

Damit erhalten wir < f i Ti ' , cosacos6> 0 L (x,uy) = / p(x.,u>r,iL>i) • I/(x , ωο)-π(χ,χ )— cL4. (3.6) Λ lx - x I Dabei wird über alle Flächen der Szene integriert. L r ( x , α ν ) kann als reflektierter Anteil der Strahldichte interpretiert werden. Addieren wir zu diesem reflektierten Anteil der Strahldichte noch die Strahldichte L e (x, uv), die die Fläche als aktive Lichtquelle im Punkt χ in Richtung ωτ abstrahlt, so erhalten wir die sogenannte Beleuchtungsgleichung (rendering equation) von Kajiya [Kaj86]: cos θ i θcos / —* \ f , , „COS i COS0O T , T, ~(χ,ω Tä~dA., . Γ ) = L e (x,uv) 4- / p(x,w r ,w¿) • L(x , ω 0 ) ί ί ( χ , χ )— Ja I

(3.7)

dcoo. Bild, 3.12: Anstatt über alle Einfallsrichtungen zu integrieren wird über alle reflektierenden und abstrahlenden Fläche in der Szene integriert. Wir vereinfachend angenommen, daß alle Flächen lambertsch' diffus reflektierend sind, d.h. daß die reflektierte Leuchtdichte unabhängig von der Abstrahlrichtung ist, (vgl. Band I, Kapitel 6.2.2), so gewinnt man die Radiositygleichung. Für die spezifische Ausstrahlung Me (im englischen Sprachgebrauch Radiosity), die in der Literatur auch mit Β bezeichnet wird, ergibt sich unter dieser Annahme Β = Me

= =

/ L r (x,c¿v) cos θrdujr Jn π • Lr.

(3.8) (3.9)

160

3 GLOBALE

BELEUCHTUNGSMODELLE

Unter der Radiosity-Annahme ist p(x, — p ( x ) unabhängig von ω τ und uT¿. Integrieren wir unter dieser Annahme die Beleuchtungsgleichung 3.7 und setzen wir Gleichung 3.8 ein, so erhalten wir für die spezifische Ausstrahlung ΰ ( χ ) im Punkt χ / Lr(x,Lúr)cos6rdijúr

=

JN

+

/ Le(x., Lür) cos0rdLür

JQ

/ p(x.,uír,Lüi) · ¿(x',c¿Ó)i/(x, x.')C0,S

LX -

JQ JA

π-Lr ß(x)

=

π · ¿ R ( x ) + π · p(x) [

=

£(x) + r·

JA

X

! 2 ° dA cos θrduír (3.10)

I

L ( x ' , o70)#(x, χ')

θί

LX ~~

C Q

X

I

' % 1 )

í L(x,,a7o)/i(x,x,)^^dA. x I Ja lx

(3.12)

Dabei wurde π · p ( x ) durch den Reflexionsgrad r, 0 < r < 1 ersetzt (vgl. Band I, Abschnitt 6.2.1 Gleichung 6.23) und mit π • L e ( x ) = E(x) die Emmission bezeichnet. Da x ' Punkt einer diffusen Fläche ist, gilt

7Γ unabhängig von cJq. Damit erhalten wir die

B(x) = £(x) + r · [

JA

Radiositygleichung

B(x')tf(x, x , ) C 0 ^ l C 0 " , % A π|χ — x ' p

(3.13)

Der Term , ( X

'

X }

cos θ i cos 0(jdA =

π|χ-χ'|2

( X

'

X }

(

}

wird auch als Geometrieterm bezeichnet.

3.2.3

Lösung der Radiositygleichung

Zur Lösung der Radiositygleichung wird ein Finite Element Ansatz gewählt. Bei der Methode der Finiten Elemente wird der Definitionsbereich der Radiosityfunktion - das sind die Flächen der Szene - in einfache Teilgebiete, die sogenannten Elemente zerlegt. Dies sind meist Dreiecke oder Rechtecke, vgl. Abb. 3.13 a). Die Eckpunkte der Dreiecke oder Rechtecke werden auch als Knoten bezeichnet. Nun wird die spezifische Ausstrahlung (Radiosity) durch η =

(3.15) i=ι

3.2 D A S

161

RADIOSITY-VERFAHREN

approximiert, wobei die N i Basisfunktionen und ß , E 1 zugehörige Koeffizienten sind. Als Basisfunktionen N ¡ werden meist Polynome oder Splines niederen Grades verwendet, die nur auf zu einem Knoten benachbarten Elementen von Null verschieden sind (lokaler Träger). Ein Beispiel für den eindimensionalen Fall und stückweise lineare Basisfunktionen ist in A b b . 3.13 b ) dargestellt. Die einfachsten Basisfunktionen sind die auf einem Element konstanten Funktionen 0 falls χ außerhalb Element i

NiU)

=

(3.16)

1 falls χ innerhalb Element i

Ein Beispiel einer Approximation der Radiosityfunktion mit Hilfe dieser Basisfunktionen ist in A b b . 3.13 c) dargestellt.

c) B(x) 7 B(5)Ni

.

0 Bild 3.13: mensionalen tyfunktion

1

2

α) Die Zerlegung

einer

Radiosityfunktion auf einer Fläche

3

4

Νι

5 χ

Fläche

*

in Elemente,

b) Approximation

durch lineare Elemente,

c) Approximation

durch konstante

einer der

eindiRadiosi-

Elemente.

Ist Β eine Approximation der Radiosityfunktion B, so ist das Residuum

wie folgt defi-

niert: R(x)

= ß ( x ) - E{x)

- r

i g(x')//(x,x')C0^ πΙχ JA

x

I

(3.17)

Es ist im allgemeinen ungleich Null, da Β die Radiositygleichung nicht exakt erfüllt. Das Residuum R wird aber umso kleiner, je genauer Β die Radiosityfunktion Β approximiert. Für Β = Β gilt R = 0. Das Residuum wird daher als Maß für die Approximationsgüte verwendet. U m eine gute Approximation Β von Β zu finden, müssen die Koeffizienten Bi von Β so gewählt werden, daß R klein wird. Bei der Galerkin-Methode M e t h o d e der gewichteten

oder allgemeiner der

Residuen wird dazu gefordert, daß das Integral des Residuums,

gewichtet mit gewissen Gewichtsfunktionen

/

Wi(x)R(x)dx

verschwindet, d.h.

— 0, Vî = 1 , . . . , n.

(3.18)

162

3 GLOBALE

BELEUCHTUNGSMODELLE

Im Ansatz von Galerkin werden als Gewichtsfunktionen die Basisfunktionen N i gewählt, d.h. man fordert Ni{x.)R(x)d:: x

[ Ja

= 0, Vi = 1 , . . .

(3.19)

,n.

Einsetzen in 3.17 liefert 0

=

[ Ja

N i ( x ) R ( x ) d A

[

=

7 V

¿

( x ) ( B ( x ) - £ ( x ) - r · [

Ja =

í Ja

N i ( x ) B { x ) d A -

-

[

7Vj(x)r(x)

[

Ja

Setzen wir

0

Β

=

Σ™=1

=

[ Ja

=

j^

-

=

[ JA

Ni{x.)E{x)dA

ß(x')G(x,

Vi = 1,...

x')dA'dA

,

(3.20)

n.

J A'

B j N j ( x )

ein, so erhalten wir

Ni(x)R(x.)dA

JVi(x)

j

Β Μ χ ) ^

dA

— J^

N j ( x ) E ( x ) d A

G(x,

N i ( x ) r ( x ) J

Y \ B j

j=ι

B(x.')G{x,x')dA')dA

JA'

(

Ni(x)Nj{x.))dA —

->A

~ Í b B J 3„·_, =1

f

x')dA'dA

Ni{x)E(x)dA

•>A

Í Ja

f JA

7VJ(x))G(x,x')^'dJ4

V« = 1 , . . .

,n.

(3.21)

Dies ist ein lineares Gleichungssystem für die Koeffizienten B j der Form KB

mit

( Β

Bl

=

\

=

, E \

Bn

)

(3.22)

E,

/

Ei

\

V

En

/

=

wobei Ei

=

[ Ja

Ni{x)E(x)dA

3.2 DAS RADIOSITY-VERFAHREN

163

und iV¿(x)r(x) [ ^ ( x ' ) G ( x ,

KuU j == f N l ( x ) N j ( x ) d A - [ JA JA

x')dA'dA,

i , j=

1,...

,71.

JA

Die Matrix Κ wird dabei nur durch die Wahl der Basisfunktionen bestimmt. Die

klassische

Radiositygleichung

Werden als Basisfunktionen konstante Funktionen gewählt, so erhalten wir die klassische Radiositygleichung [GTGB84|. Da in diesem Fall Element i x aaußerhalb ußerha jY ( x \ _ / 0 1 falls χ innerhalb irmerha Element i. erhalten wir Ni(x.)Nj(x)dA

= I

o ;

o f

^

i.j

t S ¿ _ j

(3.23)

1

wobei Ai den Flächeninhalt des z-ten Elements bezeichnet. Bezeichnen wir mit Ei die durchschnittliche Emission der Fläche Ai, so erhalten wir [ Ja

Ε(χ)Ν,.{χ)άΑ

(3.24)

= Ei Ai.

Nehmen wir ferner an, daß der Reflexionsgrad r auf jedem Element konstant ist, so wird í Ja

N¿(x)r(x)

[ Nj{x')G(x,x')dA'dA JA

=

r¿

[ JA,

f

G{x,xl)dAidA

(3.25)

y

JA3

Setzen wir diese Beziehungen in 3.21 ein, so erhalten wir = E - KB(k)

Dann gilt

- Κ AB

R(k) - KAB(kK

(3.41)

Wird im k-ten Schritt der Iteration das i-te Element des Radiosityvektors geändert, so gilt

ί

]{α·>

lt~

ialls

3= >

0 sonst. d.h. A B ™ ist ein Vektor bei dem nur der Eintrag des i-ten Elements von Null verschieden ist. Damit kann K A B ^ einfach ausgerechnet werden und es gilt /(,'"1'

/ν,

V.)

1

».

(3.42)

Das Maximum von

kann also mit einem Aufwand von ()(>>) bestiimnt werden. Darüberhinaus werden in jedem Schritt des Verfahrens nur die Koeffizienten einer Zeile der Formfaktormatrix Κ benötigt. Um R ^ am Anfang einfach berechnen zu können wird = 0 gewählt. Daraus folgt

RW = E- KB(°) = E

Der Pseudocode des Southwell-Algorithmus ist in Abb. 3.14 dargestellt. In jedem Schritt werden also ein Element des Radiosityvektors und alle Elemente des Residuenvektors aktualisiert. Die Komponenten des Residuenvektors lassen sich physikalisch als diejenige Radiosity des i-ten Elements interpretieren, die das Element von anderen Elementen schon empfangen, aber noch nicht an andere Elemente weitergegeben

( k)

hat. Diese unverteilte Radiosity R] des i-ten Elements wird bei der Aktualisierung des zugehörigen Elements des Radiosityvektors auf die anderen Elemente verteilt: o(fc) R(k+i) = R(k) _ K ü ^ = Q {3>43) -"•¿ι Aus X

ίΦί

r,l-u

»

ίΦί

υ

^' 1 ·

(3-44)

folgt, daß die unverteilte Radiosity von Iterationschritt zu Iterationsschritt abnimmt.

168

3 GLOBALE BELEUCHTUNGSMODELLE

Southwell-Iteration

Progessive Refinement

FOR ALL (i) { B¡=0;

}

FOR ALL (i) {

Bi=E¡; ABi=E¡;

Ri=E¡;

}

WHILE (nicht konvergiert) { Wähle i mit Ir¡I maximal; B¡=B¡+R¡/K¡¡; aux=R¡; FOR ALL (j) Rj=Rj-Kjj/K¡j*aux;

WHILE (nicht konvergiert)

{

Wähle j mit lABj*Ajl maximal; FOR ALL (i) { Arad=ABj*r¡*F¡j; B¡=B¡+Arad; AB¡=AB¡+Arad;

}

}

Visualisiere B;

ABj=0; Visualisiere Β;

} Bild 3.14·' Pseudocode

des Southwell-Algorithmus

und des Progressive

Refinement.

P r o g e s s i v e Refinement Eine Variante des Southwell-Algorithmus wurde 1988 von Cohen et. al. [CCWG88J vorgeschlagen, nämlich das Progressive-Refinement-Verfahren. Ziel dieses Verfahrens ist, den aktuellen Radiosityvektor Β « nach jedem Iterationsschritt darzustellen. Das Verfahren soll vor allem am Anfang schnell konvergieren, um dem Betrachter schnell ein erstes Ergebnis zu liefern. Das Verfahren selbst erhält man, indem im Southwell-Algorithmus Β + r anstatt Β betrachtet wird, die Bezeichnungen ein wenig verändert werden und anstatt der Komponente mit der größten umverteilten Radiosity R¿, die Komponente mit der größten unverteilten Energie Ri Ai aktualisiert wird. Zu Beginn des Progressive-Refinement-Verfahrens werden die Radiosities B¡ mit den Lichtquellentermen E j initialisiert. Die unverteilte Radiosity wird mit AB; bezeichnet und wird am Anfang wie beim Southwell-Algorithmus mit Ei initialisiert: B, •.= Ei

und

ABi := Et

für i = 1 , . . . , η.

(3.45)

Jeder Itcrationsschritt besteht jetzt darin, die unverteilte Radiosity einer Fläche Aj der Szene auf alle anderen zu verteilen, wozu man lediglich einen Satz von Fonnfaktoren Fji für i = 1 , . . . , n benötigt. Die Radiosity der Flächenelemente A, wird dann entsprechend B, = B, + ABj ri F¿j

für i = 1 , . . . , η.

erhöht. Ebenso die unverteilte Radiosity AB; = ABi + A/Í,

r,/·,.

für i = 1,...

, η.

(3.46)

3.2 DAS RADIOSITY-VERFAHREN

169

Anschließend wird die unverteilte Radiosity ABj des Flächeelements Aj auf Null gesetzt, d.h. ABj

:= 0.

Der Pseudocode des Algorithmus ist in Abb. 3.14 dargestellt. Die schnelle Konvergenz des Verfahrens beruht darauf, daß man nicht beliebige Flächen auswählt, deren Radiosity dann verteilt wird, sondern man wählt für jeden Iterationsschritt die Fläche mit der jeweils größten unverteilten Strahlungsleistung aus. Am Anfang des Verfahrens wird folglich das Licht der stärksten Lichtquelle verteilt. Für die Konvergenz des Verfahrens ist wiederum entscheidend, daß der Reflexionsgrad der Flächenelemente kleiner als Eins ist. Die unverteilten Radiosities streben in diesem Fall gegen Null. Zudem gleichen sie sich immer mehr an. Als Abbruchkriterium kann man z.B. die Summe der unverteilten Radiosities nehmen, die einen bestimmten Wert unterschreiten soll. Das bedeutet, daß schon ein bestimmter Prozentsatz der von den Lichtquellen emittierten Leistung absorbiert wurde. Eine Alternative wäre, einen Schwellwert für die maximale unverteilte Radiosity festzulegen, der nicht unterschritten werden soll. Der große Vorteil des Progressive-Refinement ist, daß für jeden Iterationsschritt nur die Formfaktoren F¿j eines einzelnen Patches i mit allen anderen Patchen j — 1,... ,n berechnet werden müssen, d.h. zur Durchführung eines Iterationsschrittes genügt die Kenntnis einer Zeile der Formfaktormatrix. Da bereits nach wenigen Iterationsschritten sehr gute Ergebnisse erzielt werden, liegt der gesamte Rechenaufwand weit unterhalb der üblichen Vorgehensweise mit Bestimmung der Formfaktormatrix und Lösen des Gleichungssystems mit dem Gauß-Seidel-Verfahren. Außerdem wird jeweils nur der Speicherplatz für eine Zeile von Formfaktoren benötigt. Nachteile des Progressive-Refinement-Verfahren gegenüber dem Full-Matrix-Verfahren sollen abschließend nicht verschwiegen werden. Während eine nachträgliche Änderung der Beleuchtungsparameter im Full-Matrix-Verfahren nur eine neuerliche Lösung des Gleichungssystems erfordern, muß das komplette Progressiv-Refinement-Verfahren mit Formfaktorberechnung wiederholt werden. Wird eine Fläche zum wiederholten Mal verteilende Fäche, so werden deren Formfaktoren jedesmal wieder neu berechnet. Die Zeitersparniss beim Progressiv-Refinement macht diesen Nachteil aber mehr als wett. Bild 3.15 zeigt die schnelle Konvergenz. 3.2.5

Berechnung von Formfaktoren

Der Ausgangspunkt für die Berechnung von Formfaktoren zwischen zwei endlichen Flächen ist natürlich die Gleichung 3.28, die im vorigen Abschnitt eingeführt wurde: ^ F . , - , , =F»π

=

1 /' f j:J At j



r T

Β»

cos í? , cos Λ , , , ,

—¿jë—dAidA,.

Dieses doppelte Flächenintegral ist analytisch nur für einfachste Anordnungen zu lösen [SH81]. Auch die numerische Integration ist sehr rechenaufwendig. Eine erste Vereinfachung für die numerische Integration bot die Analysis. Mit Hilfe des Stokesschen

170

3 GLOBALE BELEUCHTUNGSMODELLE

Bild 3.15: Konvergenz

des Progressive.

Refinement.

Integralsatzes kann m a n das Flächenintegral auf ein Linienintegral zurückführen: FAI.AJ

= FJJ =

J)

log rdxidxj

+ \ogrdy,dy7

+ log r dz,dzr

(3.47)

dabei ist: Ci Cj r

Dabei läuft (:;·,·, y, . ζ,)r der Fläche A¡.

Rand der Fläche A, Rand der Fläche Aj -

V(J:¡

-

x

J ) 2 + (y> - Vi)2

+ (~¡ -

z

J)2·

über den Rand der Fläche A¿ und (xj,yj,Zj)r

über den Rand

Bei dieser Umformung wurde jedoch die Verdeckungsfunktion H¡¡ unterschlagen, d a sie gewöhnlich analytisch gar nicht erfalsbar ist. Eine ausführliche Herleitung von Gleichung 3.47 findet m a n in [Spa63]. Trotz des schwerwiegenden Nachteils, nur konvexe Szenen behandeln zu können, baute die erste Implementierung von Goral |GTGB84] auf der numerischen Lösung des obigen Linicnintegrals auf.

3.2 DAS RADIOSITY-VERFAHREN

171

Eine wesentliche Vereinfachung für die Berechnung von F¡j bietet sich an, wenn die Ausdehnung einer Fläche Ai klein ist verglichen mit dem Abstand zu der Fläche Aj. Bei der Integration über die Fläche A¿ bleiben die Winkel d¡ und d j sowie der Abstand R annähernd konstant, sie können deshalb vor das Integral gezogen werden. Außerdem wird angenommen, daß die Sichtbarkeit jedes Elements dAj der Fläche Aj sich über die ganze Fläche Ai nicht ändert. Die Integration über A¿ reduziert sich dann auf eine Multiplikation mit Aj. F,

_

A, A]

' ~

f JA

cos A,

;

3

. 3

Diese Gleichung beschreibt den Formfaktor dAj und einer endlichen Fläche Aj.

für A/ -

U

0(x,y,z)

T(u,v) Texturraum

Objektraum

i Inverses Mapping F¡ ιην map Bild 4-1·' Mapping

und inverses

Mapping.

Dreidimensionale Texturen oder kurz 3D-Texturen sind Funktionen, die Punkte eines (u, υ, w ) - R a u m e s auf (r, g, ò)-Farben abbilden: (r,g,b)

= C

tcx(u,v,w)

(4.4)

4.1 E I N F Ü H R U N G

187

Bild 4-2: Studio mit Fliesen- und Außenwelt-

Texturen.

Sic werden auch als Festkörpertexturen bezeichnet. Häufig genannte 1 Beispiele hierfür sind Holz- und Marniortexturen (s. auch Abschnitt 4.4.3). Beim inversen ¡Mapping (u.v.w)

= Fi, lv

map(.r.y.z)

(4.5)

müssen den (;/·. y. c)-Flächenpunkten (υ. ν. ¡e)-Koordinaten zugeordnet werden. Man kann die Text urierung mit 3D-Texturen auch so interpretieren, dais die Körper quasi aus dem (u. v. w)- Texturkörper herausgesclmitzt werden. In den folgenden Abschnitten wird teilweise auch verlangt, dais eine Textur einen Skalarbzw. Grauwert g = Ctvx(u.e)

(4.6)

y = Ctrx(u.v.w)

(4.7)

bzw. im dreidimensionalen Fall

188

4 TEXTUREN

berechnen kann. Eine von vielen Möglichkeiten hierfür ist, daß g als Luminanzwert aus den Rot- Grün- und Blaukomponenten C.r, C.g und C.b der Texturfarbe C berechnet wird: g = 0.299 * C . r + 0.587 * C.g + 0.114 * C.b 4.1.3

(4.8)

D i s k r e t e und p r o z e d u r a l e T e x t u r e n

Man kann generell zwischen diskreten und prozeduralen Texturen unterscheiden. Dabei werden N-dimensionale diskrete Texturen als (N+l)-dimensionale Zahlenfelder gespeichert. Ein (N+l)-dimensionales Zahlenfeld entspricht dabei einem N-diinensionalen Vektorfeld. Diskrete farbige 2D-Texturen der Breite η und Höhe m lassen sich so z.B. durch { C [ î , j ] I 0 < ζ < η, 0 < j < m }

(4.9)

beschreiben, wobei C[i,j] ein Vektor mit drei Farbkomponenten ist und als Texel ( T E X tur ELement) bezeichnet wird. Die Verwendung diskreter Texturen hat folgende Vorteile: 4 Mit Hilfe von Photoapparaten, Scannern und Massenspeichermedien ist der Vorrat an Bildern nahezu unerschöpflich. ¡ Dadurch ist das Generieren komplexer 2D-Texturen für die photorealistische Visualisierung vergleichsweise schnell und einfach. Allerdings gibt es auch Nachteile (die Diskussion bezieht sich wiederum nur auf 2D-Texturen): — Texturwerte C t e x ( w , f ) an beliebigen Positionen (u,v) müssen rekonstruiert werden. Dabei wird gewöhnlich die Annahme gemacht, daß das Einheitsquadrat

{ (u,v) I 0 < ti < 1, 0 < υ < 1 }

(4.10)

im (u, f)-Parametergebiet die gesamte Textur repräsentiert. Oft wird zur Rekonstruktion dann Ctex(u,v) gleich dem nächstgelegenen definierten Nachbarn

(4.11)

4.1 E I N F Ü H R U N G

189

gesetzt, bzw. C t c x ( u , v ) durch bilineare Interpolation aus den vier nächstgelegenen Nachbarn

û ν Co(u,v)

=

un- 0.5 - [un - 0.5J

=

vm-

=

û * C[[un

(4.12)

0.5 - I ym - 0.5J - 0 . 5 J + 1, [vm

(4.13) - 0.5J]

+

(1 - û) * C[[un - 0.5J, [vm - 0.5J] CÏ(U,V)

û * C [ L u n - 0 . 5 j + l , L w r n - 0 . 5 j + l] +

=

Ctex(u,v)

(4.14)

=

(1 - û) * C [[un - 0.5J, [vm — 0.5J + 1]

(4.15)

ν * Cx{u,v)

(4.16)

+ ( 1 - v) * C0(u,v)

rekonstruiert 1 . Diese Rekonstruktion ist nur möglich, wenn 0, 5 < un < η—0, 5 und 0, 5 < vm < m — 0, 5. Für eine Rekonstruktion im so ausgeschlossenen Randbereich müssen Sonderregeln definiert werden. Generell muß jedoch das Abtasttheorem (vgl. K E 5 / 6 , 5.3.5) beachtet werden, und infolgedessen sollten die besseren und rechenaufwendigeren Bildfilter aus K E 5 / 6 , 5.5, verwendet werden. Bemerkung: Die Hintereinanderberechnung der fünf Gleichungen (4.12) bis (4.16) wird in den nachfolgenden Abschnitten durch Ctcx(w,w) = B i L i n I n t ( C , u, v)

(4.17)

abgekürzt. — Zur Berechnung der Texturwerte außerhalb des Gültigkeitsbereichs { Ctex(u, ν) I u Ϊ [0,1] bzw. V ? [0,1] }

(4.18)

müssen Sonderregeln definiert werden. — Beim Mapping auf beliebige Fläche treten Verzerrungen und infolgedessen Aliasing-Probleme auf. — Große Bilder mit hoher Auflösung (n, m) haben einen hohen Speicherbedarf. — Der in den Bildern dargestellte Kontext (Sonnenstand, Schattenwurf, . . . ) stimmt häufig nicht mit der geplanten Szene überein. Die Suche nach geeigneten Vorlagen kann dann sehr aufwendig sein. Prozedurale Texturen werten dagegen bei jedem Aufruf von Ct e x (t£, i?) bzw. Ctex(^, t^) eine mathematische Formel bzw. einen Algorithmus aus. Dies hat folgende Vorteile: f Der Speicheraufwand ist minimal. ' D e r L J - O p e r a t o r rundet zum nächstkleineren ganzzahligen W e r t , der [ ] - O p e r a t o r zum nächstgrößeren. F ü r ganzzahlige W e r t e u gilt [u] = [ « J , ansonsten [ « ] = [ ' t j + 1- Der [ [ - O p e r a t o r rundet dagegen zum nächstgelegenen W e r t : [«] = [ « + 0 . 5 J .

190

4 TEXTUREN

+ Die Texturwerte können an jeder Stelle (u, v) bzw. (u, υ, w) mit optimaler Genauigkeit berechnet werden. (-• Die Texturen sind im gesamten Raum (—00 < u¿ < +00) definiert. Der entscheidende Nachteil prozeduraler Texturen ist, daß selbst Experten Probleme haben, komplexe Texturen, die sie bildlich vor Augen haben, durch mathematische Formeln zu beschreiben. Hilfreich sind auf jeden Fall gute Grundkenntnisse der Fourier-Synthese und der fraktalen Geometrie. Beide Verfahren zur Erzeugung von Texturen müssen in einem System zur photorealistischen Bildsynthese verfügbar sein. 4.1.4

B e e i n f l u s s u n g der B e l e u c h t u n g s r e c h n u n g

Bisher sind wir nur auf das Problem eingegangen, wie einem Flächenpunkt Ρ ein Texturwert C l e x zugeordnet werden kann. Im folgenden soll diskutiert werden, wie dieser Texturwert die Beleuchtungsrechnung in Ρ variieren kann. Dabei werden wir von der Annahme ausgehen, daß die Beleuchtungsrechnung gemäß dein erweiterten Phong-Modell (vgl. GDV II, Kapitel 2.5.2 und Kapitel 3.1, Gl.(3.1)): Lphong - r t t L a +

Σ

( r d M Ñ V z J + r s L ¿ ( R i É ) m ) + rrL,. + r,Lt

(4.19)

Lichtquellen l

durchgeführt wird. In den vorgestellten Verfahren werden dabei die Texturen auf ganz verschiedene Weisen eingesetzt. Die Texturwerte repräsentieren dementsprechend einmal Farben ( C t c x ist dann ein (r,g,b)-Vektor und die angegebenen Beziehungen gelten für jede Farbkomponente), bei einem anderen Verfahren dagegen Transparenz- oder Höhenwerte. [TI] A posteriori Skalierung der I n t e n s i t ä t Eine der am häufigsten angewandten Techniken führt die Beleuchtungsrechnung mit konstanten Beleuchtungspararnetcrn r„. r UG, dann ist die abgetastete Funktion f ( x ) aus den Abtastwerten f(mAx) fehlerfrei rekonstruierbar, sofern die Abtastfrequenz UT — mindestens doppelt so groß wie UG ist: ~ > 2 UG oder Ax

Ax < — . 2 ug

(5.54)

Wird die Vorschrift 5.54 verletzt, d.h. wird f ( x ) unterabgetastet, so treten bei der Rekonstruktion unerwünschte Bildfehler (Aliasing) auf, Bild 5.19 zeigt am Beispiel kreisförmiger Sinusmuster, deren Ortsfrequenz jeweils von links nach rechts im Bild zunimmt, wie bei starker Unterabtastung (d) sogar ein völlig anderes Bild (Aliasing) entstehen kann.

Bild 5.18: Rekonstruktion

von f ( x ) aus

f(rnAx).

Löst man Gleichung 5.54 nach UG auf, so erhält man eine Anleitung zur Beseitigung des Aliasing (Ariti Aliasing)·, vor der Abtastung, d.h. Eintragung der Bildpunkte in den Bildspeicher, muß das Signal f{x,y) mit einem Tiefpaßfilter (TP1) auf

Und

VG

-YÄy

(5 55)

'

bandbegrenzt werden. Bild 5.20 veranschaulicht die Wirkung des Tiefpasses an einem Grauwertsprung, wie er an Objektkanten auftritt (vgl. Kap. 6.1). Man erkennt, daß zur Wiedergabe der Abtastwerte des bandbegrenzten Signals zusätzliche Grauwerte erforderlich sind. Außerdem müssen die Abtastwerte zur Rückgewinnung der ursprünglichen Funktion interpoliert werden. Bild 5.21 zeigt das Blockschaltbild der Bearbeitungsschritte im Ortsbereich für aliasingfreie Abtastung und Rekonstruktion. Die hierzu korrespondierenden Vorgänge im Ortsfrequenzbereich sind in Bild 5.17 bzw. 5.22 dargestellt.

252

5 GRUNDLAGEN DER BILDVERARBEITUNG

Bild 5.19: Bildfehler (Aliasing) durch Unterabtastung. vorkommende Ortsfrequenz nimmt von a) bis d) zu.

Bild 5.20: Abtastung

ohne und mit Bandbegrenzung

Die maximale

des

im jeweiligen

Bild

Signals.

Üblicherweise wird mit der vom Bildschirm erreichbaren Auflösung abgetastet,. Der Phosphor des Bildschirms bildet d a n n mit dem Übertragungsverhalten (Leuchtdichteverteilung) jedes einzelnen Pixels das Rekonstruktionsfilter T P 2 . Wird gröber abgetastet oder ein Bildausschnitt vergrößert (Zoom), dann muß zur Erhaltung der Bildqualität ein Interpolationsfilter T P 2 mit dem Vergrößerungsfaktor als Parameter realisiert werden. Wird dies nicht berücksichtigt, so entstehen beim Zooming ästhetisch unbefriedigende Bilder. Bildfilterung

Nach dem Faltmigssatz korrespondiert die Fouriertransformierte des Faltungsproduktes zweier Funktionen mit dem P r o d u k t der Fouriertransformierten und umgekehrt (vgl. Bild 5.17 und 5.22):

5.3 DIE FOURIER-TRANSFORMATION

253

f(m,n)

planar % 'VG

Ay

Bild 5.21: Aliasingfreie

Δχ, Ay

JaxI«—

Abtastung

h(x) = f{x)*g{x)

f(m,n)

=

und Rekonstruktion

/ f(a)g(x ·' — OC

— a)da

für uq < j â î

un

^

V

G - 2¿¡~·

Ή- H(u) = F(u) G(u)

(5.56)

OC

/

-ocf(x-a)g(a)da.

(5.57)

Faßt man f ( x ) als Signal auf und g(x) als linearen, ortsinvarianten Operator (Filter), so beschreibt Gleichung 5.56 das Ein-/Ausgangsverhalten eines linearen Systems. Man bezeichnet g(x) als Impulsantwort des Systems und G(u) als Übertragungsfunktion. Bild 5.11 zeigt einige gebräuchliche Filter mit Impulsantwort und korrespondierender Ubertragungsfunktion im Ortsfrequenzbereich (Fouriertransformationspaare). Die digitale Realisierung dieser Gleichung (vgl. auch Gleichung 5.59) heißt lineare digitale Filterung. Dazu rnuß die Irnpulsantwortsfunktion entsprechend der Bildfunktion abgetastet werden. Diese diskreten Filterfunktionen werden auch Filtermasken genannt. Sie sind zumeist nur in einem kleinen Bereich ungleich Null. Die praktische Realisierung der digitalen Filterung und das Konzept der Filtermasken ist in Kapitel 5.5.3 dargestellt.

Aus dem Faltungssatz (Gleichung 5.56) folgt, daß ein Filter sowohl im Orts- als auch im Ortsfrequenzbereich realisiert werden kann (vgl. Bild 5.22). Eine ausgezeichnete Darstellung dieses Themenkreises ist in dem Buch „Digitale Bildsignalverarbeitun^' [Wah84] zu finden. Im folgenden wird die Filterung im Ortsbereich betrachtet. Von den in Bild 5.11 dargestellten Filtern sind „Dreieck" und „Rechteck" rechnerisch am einfachsten zu realisieren, wobei das Dreieck eine grobe Näherung der sine-Funktion ist. Allerdings ist die erreichte

254

5 GRUNDLAGEN D E R B I L D V E R A R B E I T U N G

g(x)

Eingangssignal f (x)

h ( χ ) Ausgangssignal

Faltung

t

...FT .

•FT" G(u)

F(u)

H(u)

Multiplikation

Bild 5.22: Funktion eines linearen Systems im Orts- und Frequenzraum (FTFourierTransformation) . (oben) Ortsraum: Die Ausgabe h(x) des Systems wird durch Faltung des Signals f(x) mit der Filterfunktion g{x) (- Impuls antut ort des Systems) erzeugt. (unten) Frequenzraum: Die entsprechende Multiplikation der Fouriertransformierten des Signals F T [f(x)} — F(u) mit der Übertragung sfunktion G{u). Bandbcgrenzung nicht ideal, d.h. Hochfrequenzanteile werden nicht völlig unterdrückt. Um diese Filter für Bilder einsetzen zu können, müssen sie auf zwei Dimensionen erweitert werden. Dies kann entweder durch Rotation des eindimensionalen Filters oder durch Multiplikation zweier eindimensionaler Filter geschehen. Beide Verfahren sind gebräuchlich, wobei letzteres in der digitalen Bildverarbeitung wegen der Realisierbarkeit als rekursives Filter von Vorteil ist. Das zweidimensionale Faltungsprodukt lautet:

+ 00 +00

h(x, y) = f(x,y)

* g{x,y)

= J — CO

j

g(a,ß)

f(x - a,y - ß) dadß

F(u,v)

—oo

G(u,v) (5.58)

bzw. im Diskreten:

Λ / - 1 JV-1

h(k, l) = f(k, l) * g(k, l) = ^^ ^^ g(m, n) f(k — m,l — n) F(rn, n) G(m, n) rn=0 n~0 (5.59) Ein Beispiel für ein derartiges Filter ist der gleitende Mittelwert (oder auch Boxfilter), bei dem das Signal über einen rechteckigen Bereich (hier ( 2 Μ + l ) x ( 2 Ν + 1) Punkte weit) hinweg gemittelt wird: Μ /(M JV

;

= 7^77 VTWiTr (2AÍ + 1)(2AT + 1)7 V

Ν y ' f(k-m.l-ri).

'

(5.60)'

K

5.3 DIE FOURIER-TRANSFORMATION

255

Die Impulsantwort dieser Funktion und die Übertragungsfunktion für den kontinuierlichen Fall sind in Bild 5.9 zu sehen. Auf dieses Filter, seine Berechnung und seine Eigenschaften wird noch einmal in Kapitel 5.5.3 eingegangen. Die Vorschrift 5.55 zur Bandbegrenzung des abzutastenden Bildsignals / ( x , y) im Ortsfrequenzbereich ist mit der zweidimensionalen sine-Funktion

sincAy —— Sineiy —— Ax' A y'

(5.61)

ideal zu erfüllen. Allerdings sind dann unendlich viele Werte von f(x,y) zu berücksichtigen (vgl. Bild 5.18, 5.10 und 5.11). Die einfachste Filterung ist die Integration von f(x,y) über ein Rechteck der Größe Δ χ Ay (vgl. Rekonstruktion in Bild 5.18 und smc-Funktion in Bild 5.9) mit anschließender Division durch die Fläche zur Normierung (Mittelung). g ( x . y )

"Volumen"

V=1

Bild 5.23: Filterung durch Mittelung:

Boxfilter.

In diesem Fall errechnet sich das Faltungsintegral zu

+ 00

/ ( m , η)

=

J

+ O C

J

f(a,ß)g(mAx-a,nAy-ß)dadß

(5.62)

f

(5.63)

G — OO — — O OC

k

I

( m - í ) A x

I da dß

( n - í ) A y

mit 0 < τη < M — 1 und 0 < η < Ν — 1. (Am Bildrand kann Gleichung 5.62, z.B. durch Fortsetzung des Bildes um einen Bildpunkt, ausgewertet werden.) Im Rechner wird Gleichung 5.62 numerisch ausgewertet, das Integral also durch eine Summe angenähert. Die Schrittweite ist gegeben durch die Anzahl an Abtastpunkten ( Κ , L) pro Kantenlänge (Δχ, Ay) des Filters

5 GRUNDLAGEN DER BILDVERARBEITUNG

256

Ax Κ

(5.64)

- 1

Rechnet man in Bildschirmkoordinaten, so stellen Ax, Ay die Rastereinheiten dar, die üblicherweise gleich sind: Ax = Ay = 1. Aus Gleichung 5.62 erhält man dann

K-1L—1

(5.65) fc=0

1=0

Der einzige Unterschied zwischen den Gleichungen 5.60 und 5.65 besteht in der Schrittweite der Integration (Summation). In Gleichung 5.60 liegen Eingangs- und Ausgangssignal auf demselben Raster, wohingegen in Gleichung 5.65 das Raster des Eingangssignals um den Faktor 7f4rr bzw. feiner ist als das Raster des Ausgangssignals. Zur Verbesserung des Filters kann in Gleichung 5.65 anstelle der Konstanten des Rechteckfilters auch eine Funktion g(k, l) (z.B. sinc(k, l) oder die Gaußverteilung) eingesetzt werden, die die Funktion / vor der Summation gewichtet. Die Filterbasis (Einzugsbereich) und die Filterform müssen dabei sorgfältig aufeinander abgestimmt werden. Eine ausführliche Darstellung dieser Problematik findet sich in (B1Í89). Die Filterfunktion wird zweckmäßigerweise in einer Tabelle zur Verfügung gestellt. Allerdings müssen dann zusätzlich Κ χ L Multiplikationen ausgeführt werden.

5.3.7

Translation

Bei der Simulation von kontinuierlichen Bewegungsabläufen ist eine „ruc.kfreie" Darstellung auf dem Sichtgerät wichtig. Langsame Objekte, die z.B. innerhalb von fünf aufeinandcrfolgenden Bildern nur einen Bildpunktabstand zurücklegen, müssen zu diesem Zweck so gefiltert werden, daß die notwendige Positionierung zwischen den Bildpunkten (hier also 0, 2 ; 0 , 4 . . . ) durch geeignete Grauwertverteilung simuliert wird. Entsprechend den im Abschnitt über Bildfilterung gemachten Ausführungen ist die Aufgabe in zwei Schritten zu lösen:

1. Zuerst wird f(x, struiert:

y) aus f(m

Αχ, η Ay) analog Gleichung 5.53 mit Ax =

Χ — m

Αχ

y — η

rekon-

Ay

sine τη=()

n=0

Αχ

(5.66)

257

5.3 DIE FOURIER-TRANSFORMATION

tx=

2Δχ

tx=

1.5Δχ

Bild 5.24·' Translation. 2. Anschließend wird / ( x , y) entsprechend der gewünschten Translation tx ,ty für das in entgegengesetzter Richtung verschobene Abtastgitter ausgewertet:

f(m, n) -.= f {(πι - tx )Ax , (η - ty )Ay}

(5.67)

mit

0 )-

9

'+1

j+-1

Σ Σ /("•")• ιι = ι — I γ=.| — 1

' ·"'. ! ·51 :

Mit π = 0 bleibt das Bild unverändert·. J e grölser η wird, desto stärker werden die hohen Frequenzen betont.

(a) Original Bild 5.44'· Büdverachärfung

5.5.6

(b) kantenverstärkt nach

Gleichung

5.130.

Butterworth-Filter

Wie schon erwähnt·, repräsentieren die idealen Filter die physikalischen Gegebenheiten nicht korrekt·. An der Grenzfrequenz werden z.B. in realen elektronischen Schaltungen nicht· alle Anteile, die darüber bzw. darunter liegen, abgeschnitten, sondern sie werden ab dieser Stelle stärker gedämpft, meist mit exponentiellem Abfall (z.B. mit Hilfe einer Gauls-Funkt ion). Besonders an Bedeutung gewonnen hat. in diesem Zusammenhang die Übertragungsfunktion des Βutterworth-Filters der Ordnung n:

292

5 GRUNDLAGEN D E R B I L D V E R A R B E I T U N G

H(u,v)

=

H(u,v)

=

— 1 + [ V r + v^/ßoj !



Tiefpaßfilter;

(5.132)

Hochpaßfilter.

(5.133)

Leider ist bei dieser Art von Filter keine Grenzfrequenz definiert. Man gibt daher oft diejenige Stelle Y/u2 + v2 als Grenzfrequenz Dq an, an der H(u, v) — 0.5, d.h. wo H(u, υ) nur noch 50% seines Maximalwertes besitzt.

5.6

Übungsaufgaben

A u f g a b e 1: Gegeben sei eine Funktion f(x)

mit folgenden Funktionswerten:

/(0)

=

2

/(l)

=

3

/ ( 2)

=

4

/(3)

=

4

Berechnen Sie die Fourier-Transformierte F(u) dieser Funktion mit Hilfe der 1. Diskreten Fourier-Transformation 2. Fast Fourier-Transformation. A u f g a b e 2: Nennen Sie die Unterschiede und Vor-/Nachteile zwischen der 1. Median-Filterung und 2. Filterung durch Mittelwertbildung. Gegeben seien zwei Folgen / = { 1 , 7 , 7 , 2 , 1 } und g - { 5 , 7 , 5 , 4 , 8 } . Zeigen Sie, daß rned(/) + med(g) φ m e d ( / + g) ist, d.h. daß der Medianfilter nicht linear ist. A u f g a b e 3: Eine Hadamard-Matrix Hj j ist eine symmetrische J x J-Matrix, deren Elemente + 1 oder — 1 sind. Die Zeilen (und Spalten) sind orthogonal. Ein Beispiel für eine Hadamard— Matrix der Dimension 2 ist

293

5.6 ÜBUNGSAUFGABEN

Beweisen

Sie: Ist die Matrix HJJ

eine Hadamard-Matrix, dann ist H J J

H J J

H J J

- H J J

ebenfalls eine Hadamard-Matrix. A u f g a b e 4: Von einem binären Bild weiß man, daß es nur horizontale, vertikale und Linien mit 45° bzw. —45° Steigung enthält. Geben Sie einen Satz von 3 x 3-Filtermasken an, mit denen man 1-Pixel große Lücken in diesen Linien entdecken kann. Wie müssen die Masken aussehen, wenn diese Lücken damit geschlossen werden sollen? Anmerkung: Der Hintergrund habe den Grauwert 0, die Linien den Wert 255.

295

Kapitel 6 Grundlagen der Mustererkennung 6.1

Kantendetektion

Versuche haben gezeigt, daß Menschen sich beim Betrachten von Objekten sehr stark auf die Grenzen zwischen mehr oder minder homogenen Regionen konzentrieren. Schon anhand weniger, einfacher Umrisse kann der Mensch die zugrunde liegende Gestalt und damit das betreffende Objekt erkennen. Aus dieser Tatsache leitet man ab. daß die Beschreibung des Ubergangsbereichs zwischen den homogenen Regionen eine wichtige Strukturinformation für das menschliche Sehen auf dem Weg von der ¡konischen (im Rechner: pixel-orientierten) Beschreibungsweise hin zur symbol- bzw. objektorientierten Beschreibungsweise ist. Für viele Bildverarbeitungsaufgaben stellt die Detektion von Kanten eine erste und wichtige Stufe dar ([Lee90|: "It is hard to overemphasize its importance in computer vision."), die unter Umständen über den Erfolg oder Mißerfolg der nachfolgenden Stufen entscheidet. Anwendungsbeispiele sind die Segmentierung. Objekterkennung, Bewegungsdetektion und Stereo-Matching. Wie „gut" diese Kanten in einer Vorlage gefunden werden, ist zum einen abhängig von der Qualität des Bildes und zum anderen von der Art der Kanten, dem verwendeten Algorithmus und den Qualitätskriterien, die für die spezifische Aufgabe erfüllt sein müssen. Je nach Kantenart eignet sich der eine Algorithmus besser als der andere. Im folgenden Abschnitt wird zuallererst der Begriff der „Kante" genauer definiert. Daran anschließend werden grundlegende Anforderungen und Schwierigkeiten bei der Kantendetektion dargestellt. Nach dieser Vorarbeit werden die wichtigsten Kantenoperatoren, ihre unterschiedlichen Eigenschaften und die bevorzugten Einsatzgebiete vorgestellt. 6.1.1

D e r Begriff der „ K a n t ^ ' , K a n t e n m o d e l l e

Wie sich schon in der Einführung abgezeichnet hat, müssen im Zusammenhang mit dem Begriff Kante zwei Sachverhalte strikt auseinandergehalten werden:

6 GRUNDLAGEN D E R M U S T E R E R K E N N U N G

296

1. Diskontinuitäten in den Struktureigenschaften der abzubildenden physikalischen Körper: Dabei kann es sich um abrupte Änderungen der Oberflächennormalen, der Materialeigenschaften (Farbe, Reflexionskoeffizient, Textur o.ä.) oder um die eigentlichen Objektgrenzen handeln. Um Zweideutigkeiten zu vermeiden, werden diese Unstetigkeiten im folgenden als physikalische Diskontinuitäten bezeichnet. 2. Diskontinuitäten im Verlauf der Intensitätswerte bzw. Grauwerte: Die Unstetigkeiten der Intensitätswerte müßten dementsprechend eigentlich Intensitätskanten genannt werden, sie werden aber im folgenden der Einfachheit halber und in Anlehnung an die Bildverarbeitungsliteratur kurz Kanten genannt. Beispiele für derartige Intensitätsdiskontinuitäten sind in den folgenden Kapiteln beschrieben. In den Bildern 6.1 und 6.2 sind verschiedene Funktionen /(:r) dargestellt mit idealen und realen Kantenprofilen. Aufgetragen sind dabei die Intensität f(x) über dem Abstand χ zur Kante. Der Zusammenhang zwischen diesen beiden Sachverhalten besteht darin, daß die Grauwert-Diskontinuitäten oftmals über den Bildaufnahmeprozeß mit den physikalischen Diskontinuitäten korrespondieren. Aus dieser Tatsache ergibt sich auch die Wichtigkeit der Kantendetektion in der Bildverarbeitung. Eine etwas genauere Definition des Begriffs „Kante" könnte im Zweidimensionalen z.B. folgendermaßen lauten: Eine Kante ist eine Struktur, ein Pixel breit, im Zentrum des Grauwertgefälles zwischen zwei aneinandergrenzenden Regionen, die sich in ihren Graustufen hinreichend unterscheiden. Die Grenzen zwischen Objekten bzw. Regionen im Zweidimensionalen sind Linien und die entsprechenden Kanten im (diskreten) Bild sind aus Pixeln aufgebaut. Im Dreidimensionalen dagegen werden die Objekte durch Flächen begrenzt und die entsprechenden Kantenelemente sind Voxel (Volumenelemente). Zu unterscheiden sind ferner Kantenpunkte, das sind einzelne Punkte, denen durch ein Kantendetektionsverfahren das Attribut „Kante" oder „potentielles Kantenelement" angeheftet wurde und Kanten oder Konturen, die aus einer Aneinanderreihung mehrerer oder vieler Kantenpunkte bestehen. Diese Begriffe lassen sich aber oft. nicht, sauber trennen, da sie immer auch im Zusammenhang mit den weiteren Verarbeitungsschritten gesehen werden müssen. Sie werden daher auch in der Literatur oft sehr indifferent verwendet. Ideale

Kuntenmodellü

In diesem Abschnitt sind die wichtigsten idealen analytischen Kantenmodelle angeführt, mit deren Hilfe die natürlich vorkommenden Kantenprofile modelliert werden. Die Kantenmodelle werden einerseits für die Untersuchung des Verhaltens von Kantcnoperatoren verwendet, andererseits kommen sie aber oft auch schon bei der Herleitung von Kantcnoperatoren zum Einsatz, wie z.B. beim Canny-Operator |Can83j.

6.1 K A N T E N D E T E K T I O N

297

/M

/ Χ

Χ

Χ

ί(χ)

χ

Bild 6.1: Einige ideale y-Richtung verschoben): te.

Kantenmodelle a) Stufenkante,

χ

(zur besseren Sichtbarkeit wurden die Profile in b) Rampenkante, c) Dachkante, d) Treppenkan-

Stufenkante Die Stufenkante (vgl. Bild 6.1.(a)) ist das mit Abstand am häufigsten verwendete Kantenmodell, weil es sich bei der Herleitung von Kantenoperatoren rechnerisch am einfachsten handhaben läßt und vor allem auch, weil die Stufenkante auf dem diskreten Raster die allgemeinste Kantenform darstellt. Analytisch läßt sich eine Stufenkante S(x), zentriert bei χ — 0, folgendermaßen formulieren:

(6.1)

Rampenkante Auch Rampenkanten (vgl. Bild 6.1.(b)) sind relativ häufige Kantenformen. Sie werden vor allem als Modell für ausgedehnte oder verschmierte Kanten verwendet. Eine Rampenkante R(x) der Breite w, der Steigung m und ihre Ableitung R'{x) läßt sich folgendermaßen fassen:

(6.2)

(6.3)

298

6 GRUNDLAGEN DER M U S T E R E R K E N N U N G

Treppenkante Die Treppenkante T(x) (vgl. Bild 6.1.(d)) zeichnet sich durch zwei gleichgerichtete Stufenkanten aus. Sie läßt sich z.B. beschreiben durch:

T(x) = S(x + a)+bS{x-a).

(6.4)

Dabei ist b das Verhältnis der Stufenhöhen der beiden Stufenkanten, die sich an den Orten —α und + a befinden. Reale

Kantenproñle

Im Unterschied zu den idealen analytischen Kantenmodellen sind die realen Kanten im allgemeinen von Rauschen überlagert (vgl. Bild 6.2) und treten als Kombination der idealen Kantentypen auf. Außerdem liegen die Bildfunktionen im Fall der digitalen Bildverarbeitung immer in abgetasteter, diskreter Form vor.

a) Bild 6.2: Reale

b) Kantenprofile

a) überlagert von Rauschen b) a b g e t a s t e t e Bildfunktion

Rechnerisch läßt sich die Lokalisation einer Kante z.B. anhand der Extrema in der ersten Ableitung und anhand der Nulldurchgänge in der zweiten Ableitung bestimmen (vgl. Bild 6.4). 6.1.2

A n f o r d e r u n g e n u n d S c h w i e r i g k e i t e n bei der K a n t e n d e t e k t i o n

Wenn in der digitalen Bildverarbeitung eine Kantendetektion durchgeführt wird, sollte natürlich eine möglichst geringe Fehlerrate erreicht werden, d.h. tatsächliche Kantenpunkte sollen nicht zurückgewiesen werden und Punkte, die zu keiner Kante gehören, auch nicht als solche erkannt werden. Weiterhin wird verlangt, daß Kanten möglichst an ihrer wirklichen Position detektiert werden (Lokalisation). Um ein Verschmieren zu

6.1 K A N T E N D E T E K T I O N

299

vermeiden, sollte auf eine Kante auch nur eine Antwort kommen. Darüber hinaus spielen numerische Kriterien wie z.B. schnelle Berechenbarkeit, Ganzzahl-Arithmetik (im Gegensatz zur Fließkomma-Arithmetik) und auch subjektive Kriterien eine wichtige Rolle bei den Anforderungen an Kantendetektoren. Da es sich bei Kanten um hochfrequente Bildanteile handelt, sind Kantendetektoren grundsätzlich auch empfindlich gegenüber Rauschen. Die prinzipielle Schwierigkeit besteht in der Unterscheidung der zufälligen Signalfluktuationen (Rauschen) von gesuchten Grauwertdiskontinuitäten, die mit relevanten Kanten korrespondieren. Um die korrekten Kanten zu ermitteln, muß daher vor der Kantendetektion eine Filterung durchgeführt werden, die eine Unterdrückung des Rauschens und eventuell unerwünschter feiner Details bewirkt. Das kann aber dazu führen, daß Kanten verschmiert und damit die Güte der Lokalisation verschlechtert wird. Die üblichen Kantendetektoren bestehen also in der Regel aus einem Glättungs- und einem Kantenverstärkungsteil (vgl. Kap. 6.1.3). 6.1.3

Kantendetektionsschema

Bild 6.3: Typisches

Kantendetektionsschema.

Ein Beispiel für eine typische Vorgehensweise bei der Kantendetektion - mit Hilfe paralleler Kantendetektionsverfahren (vgl. Kap. 6.1.4) - ist in Bild 6.3 wiedergegeben. Durch die Glättung werden störende Feinheiten und vor allem Rauschen im Originalbild vermindert. Dies entspricht einer Tiefpaßfilterung. Die darauffolgende Hochpaßfilterung verstärkt Diskontinuitäten, also mögliche Kanten. Die Stärke der Antwort liefert ein Maß für die Wahrscheinlichkeit des Vorliegens einer Kante. In der letzten Stufe folgt durch ein Schwellwertverfahren eine Binärisierung. Durch den/die gewählten Schwellwert(e) wird die endgültige Entscheidung über das Vorliegen einer Kante getroffen. Die Höhe der Schwelle richtet sich nach der Art und der „Stärke" der gesuchten Kanten. 6.1.4

E i n t e i l u n g der K a n t e n o p e r a t o r e n

Die unterschiedlichen Arten von Kantendetektoren kann man grob in parallele und sequentielle Verfahren unterteilen.

300

6 GRUNDLAGEN DER M U S T E R E R K E N N U N G

Parallele Verfahren Bei diesen Verfahren wird lokal ein Eigenschaftsvektor bestimmt, der Angaben wie Kantenstärke, Kantenrichtung oder Maße für die Kantenform enthält. Das entscheidende Merkmal der parallelen Verfahren ist dabei, daß der Eigenschaftsvektor nur von der Bildfunktion abhängt und nicht von benachbarten Kantendetektionsergebnissen. Anhand des Eigenschaftsvektors wird dann über das Vorliegen eines Kantenpunktes entschieden. Ein Beispiel für solch einen Akzeptanztest wäre ein Schwellwertverfahren. In diese Gruppe fallen: •

Differenz-Operatoren Dabei handelt es sich um einfache, lokale Operatoren, die eine Approximation der ersten oder zweiten Ableitung darstellen. Beispiele sind Differenz-Operatoren erster Ordnung, wie der Roberts-, der Prewitt- und der Sobel-Operator (vgl. Kap. 6.1.6) und Differenz-Operatoren zweiter Ordnung, wie die verschiedenen Formen des Laplace-Operators (vgl. Kap. 6.1.7).

• „Optimale"

Operatoren

Beispiele sind der Marr-Hildreth-Operator (vgl. Kap. 6.1.8), der Difference-of— Gaussian (DoG) [MH80], [HÌ183], [TP86] und der Canny-Operator (vgl. Kap. 6.1.9). Diese Operatoren werden als „optimale" Operatoren bezeichnet, da ihnen eine mathematische Herleitung zugrunde liegt, die ihrerseits auf Beobachtungen und Modellvorstellungen basiert. Grundlage ist auch hier die Bildung von Ableitungen, aber im Gegensatz zu den einfachen, lokalen Operatoren handelt es sich aufgrund der großen Einzugsbereiche eher um regionale Operatoren. • Parametrisierte

Kantenmodelle

Die Masken sind bei diesen Verfahren nicht starr festgelegt, sondern sie können über Parameter variiert werden. Dadurch ist eine teilweise automatische Adaption an unterschiedliche Vorlagen möglich. Eine Zusammenstellung derartiger Verfahren findet sich zum Beispiel in [Wah84], Sequentielle Verfahren Bei den sequentiellen Verfahren hängt das Ergebnis des Akzeptanztests von benachbarten Ergebnissen (lokal) oder sogar von weiter entfernten Ergebnissen (regional, global) ab. Diese Verfahren basieren auf a priori Wissen über die Struktur der gesuchten Kanten, wie z.B. der Form und/oder Vorwissen über die Bildfunktion. Da die sequentiellen Verfahren aber ebenfalls auf Bestimmung der Eigenschaftsvektoren aufbauen und damit auf paralleler Kantendetektion. werden sie auch als Verfahren zur ,.Kantennachbearbeitung'' bezeichnet. Aufgrund der Vielfalt des möglichen einzubringenden Vorwissens und der Komplexität der Verfahren können hier nur die folgenden Verfahren exemplarisch für den Bereich der sequentiellen Kantendetektionsalgorithmen behandelt werden:

6.1 K A N T E N D E T E K T I O N

301

• Non-Maxirna-Suppression 6.1.9), • Hysteresis-Threshold

(vgl. Kap.

(vgl. Kap. 6.1.9),

• Hough-Transformation 6.1.5

(vgl. Kap. 6.1.9) und Constraint-Thinning

(vgl. Kap. 6.1.10).

Differentiation

Wie bereits in den vorangegangenen Kapiteln dargelegt wurde, kann die Existenz und Lage von Kanten mit Hilfe von Ableitungen bestimmt werden. Im folgenden Abschnitt sollen die mathematischen Grundlagen der Differentiation im Kontinuierlichen und der Ubergang ins Diskrete dargestellt werden.

Bild 6-4•' Verrauschte Ableitungen

Stufenkante,

erster Ordnung,

ihre erste und zweite

Ableitung.

Gradient

Betrachtet man zunächst eine eindimensionale, kontinuierliche und überall differenzierbare Funktion f(x) wie in Bild 6.4, so besteht offensichtlich eine Möglichkeit der Beschreibung der Diskontinuitäten von f(x) in der Bestimmung der Ableitungen. Die erste Ableitung ist definiert als Grenzwert:

f'(xo)

=

df(x o) / ( * ) - /(so) — lim x->x 0 X — Xq dx

(6.5)

302

6 GRUNDLAGEN DER

Dieser Grenzwert wird auch als Differentialquotient ferenzenquotienten

MUSTERERKENNUNG

bezeichnet, im G e g e n s a t z zum Dif-

MliH. X



(6.6)

2()

Geometrisch läßt sich die A b l e i t u n g als Steigung der T a n g e n t e an die Funktionskurve im P u n k t (xo) interpretieren, mit t a n a = f'(xo), wobei a den W i n k e l zwischen 2;-Achse und Tangente beschreibt. Im Fall von höherdimensionalen Bildfunktionen / : R" —> Κ,

η > 2

müssen Richtungsableitungen gebildet werden. Der Grenzwert

f:r·.,·};....·

=

/;.,·'>*·,,.•/·!;

lhn

de

,

0

-

/;,·'••,··;....ι

k

heißt Richtungsableitung von f in Richtung c = (ci. (:·2,...) ( |e| = 1) an der Pq = (x®, x(2, ..·) · Die Richtungsablcitung läßt sich auch schreiben als:

df(P,) — = Dabei

bezeichnet

tenachse als

(fit).

α·*. den Winkel

Die partielle

^ >

zwischen

Ableitung

df(Pp) —r, cos

ftfc.

e und der betreffenden

von f nach χ f. im Punkt

Stelle

6.8

positiven

Po,

Koordina-

• ist

definiert

Grenzwert:

df(Po) — OXk

=

, Inn -'k^-'i

Xk -

y xl

...)-/(:r».a.-'j;.··)

·

(6.9

Die Richtungsableitung beschreibt die Steigung in Richtung des Einheitsvektors c a m Ort Po. A u f g r u n d dieser Richtungsabhängigkeit bezeichnet man die Richtungsableitung als anisotrope Operation. D a s M a x i m u m der Richtungsableitung wird erreicht, wenn die A b leitungsrichtung gerade in R i c h t u n g des stärksten Anstiegs der Bildfunktion f ( x i , X 2 - ···) zeigt. Der Vektor

heißt Gradient von / an der Stelle Pq. D a bei der B i l d u n g des G r a d i e n t e n keine Richtung vor einer anderen ausgezeichnet ist, spricht man von einer isotropen Operation. Der Gradient besitzt einige für die Kantendetektion herausragende Eigenschaften:

6.1 KANTENDETEKTION

303

1. Der Betrag des Gradienten entspricht der Steigung der Funktion am Ort (Po) in Richtung des Gradienten:

2. Der Gradient V / ( P q ) zeigt immer in Richtung des stärksten Anstiegs, d.h. Richtung der groíáten Änderung von / am Punkt Fq. 3. Der Gradient steht senkrecht zu den Niveauflächen

1

in

von / .

Obwohl, wie in Bild 6.5 dargestellt ist, der Gradient im allgemeinen nicht genau senkrecht auf der Kante steht, wird häufig die Kantenrichtung durch die Richtung des Gradienten definiert.

2

1 .5

1 0.5

O

0.5 y

Bild 6.5: Das linke Bild zeigt eine Kante in einem Höhenfeld, das eine Stufenkante entlang der y-Achse enthält, dessen Höhenwerte aber in y-Richtung wachsen. Im rechten Bild sind Höhenlinien dieses Höhenfeldes dargestellt. Wie man erkennt, velaufen die Höhenlinien nicht exakt parallel zur Kante, sondern schneiden diese. Höhere Ableitungen,

Laplace-Operator

Die Definition der zweiten Ableitung leitet sich von der ersten Ableitung ab. So ist die zweifache partielle Ableitung nach x¡ und x^ definiert als: ' i s t die Bildfunktion f : R " —> R differenzierbar und ein q £ R gegeben, so heißt die Menge

S(q) = {p e

ΩI

f(p) = q}

Isofläche oder Niveaufläche von / zum Wert q. Ist / eine zweidimensionale Bildfunktion, d.h. / : I IR, so entsprechen die Niveauflächen von / genau den Höhenlinien der Grauwerte im Bild.

304

6 GRUNDLAGEN DER MUSTERERKENNUNG

•-/;

/;./·

A r . )/[

Ax f(x + A x , y ) - f ( x , y ) Ax f(x + A x , y ) - f ( x - A x , y ) 2Ax

Rückwärtsdifferenz D, : Y m w M ñ e T C n z

Symmetrische Differenz Dsr.

(6.14)

6.1 K A N T E N D E T E K T I O N

305

wobei Α χ > 1 »rid A x f N ist. Irreführenderweise werden diese Differenzen oftmals als ..Gradienten" bezeichnet. Die beste Approximation wird jeweils in der M i t t e des betrachteten Intervalls erreicht. Das bedeutet, dafe sich die Ergebnisse sowohl der Vorwärts- als auch der Rückwärtsdifferenz auf Zwischengitterplätze beziehen. Die symmetrische Differenz D"

dagegen erzielt

die beste Approximation direkt auf dem zentralen Gitterplatz. y À (X - 1..V • ι ) (X.y • 11 (χ • ι - y

ι)

Ort der besten Approximation durch die VorwärtsdifTerenz bzgl. ( x -.y) (χ · l.y - 1) (x.y - 1) (x

Bild 6.6: Lokale

Umgebung

des untersuehten

Punktes

{x. y).

Eine Möglichkeit der Implementierung der Differenzen D~.

D+

und D"

besteht in der

Formulierung als Faltungsoperatoren (vgl. Gl. 5.125). Im Falle der Vorwärts- und der Rückwärtsdifferenz wird hier der minimal mögliche Abstand 1 gewählt. Bei der symmetrischen Differenz wird der Nenner ebenfalls auf 1 gesetzt, da er nur eine Skalierung des Ergebnisses ergeben würde, was für eine nachfolgende Schwellwertstufe (vgl. Bild 6.3) ohne Bedeutung ist.

D~

und £>+

:

[-11]

Dl

:

[-10

(6.15) 1]

(6.16)

Die entsprechenden Differenzen in y-Richtung werden durch Transportierung der Matrizen erzeugt. In Gleichung 6.11

wurde der Betrag des Gradienten mit Hilfe der euklidischen N o r m

(I/2-Norm) berechnet. Dies setzt die Berechnung einer rechenintensiven QuadratwurzelOperation pro berechnetem Ergebniswert voraus.

Vor allem in den Fällen, in denen

diese Operation nicht durch entsprechende Hardwareunterstützung (Floating Point U n i t ) schnell durchgeführt werden kann, werden oftmals die L i - oder die L œ - N o r m verwendet [KM89]:

G,

GTC

=

df{x,y)

= max

+

dx

fdf(x,y) χ

dx

df(x,y)

(6.17)

dy

df(x, dy

y)

(6.18)

306

6 GRUNDLAGEN DER MUSTERERKENNUNG

Für diese Normen gilt:

Gi >G2>

(6.19)

Die Gleichheit gilt nur, wenn entweder d f / d x = 0 oder d f / d y = 0. Einfache Differenz-Operatoren

erster

Ordnung

Wie in den vorigen Abschnitten gezeigt wurde, kann die diskrete Approximation der Ableitung als Kantenoperator verwendet werden. Zur Berechnung der Vorwärts- bzw. Rückwärts-Differenz werden 3 χ 3-Masken 2 verwendet:

ι fout(k,l)=^2

ι

Σ D(i,j)ftn(k j = - i ?:=-1

(6.20)

+ iJ+j).

Diese Operation kann auch als Faltung (vgl. Gl. 5.125) mit einer Faltungsmaske D'{i,j)

(6.21)

= D(-i,-j)

aufgefaßt werden.

DZ

0 -1 0

0 0 0

0 1 0

0

0 -1 0

0" 1 0

0 0 0

D;,

0 0 0

D

v

-1 1 0

0 -1 1

0 0 0

Beim Roberts-Operator |R.K76] wird die Differenzbildung in diagonaler Richtung durchgeführt, daher wird dieser Operator auch Roberts-Cross genannt. 0 1 0

-1 0 0

0" 0 0

'

d2

-

-1 0 0

0 1 0

0 0 0

6.1 K A N T E N D E T E K T I O N

307

10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ιοα 100 100 10 10 ü 10 10 10 10 10 100 10« IOC 10 10 10 10

uT 10 10 100 im m ΗΓ 10 κ 10 EHiPÏÏTilTiMiTiïïÎrïïffiSriiïrFTiTriïlïïITH 10 100 100 100 ιοα im»100 100 100 100 10 10 100 100 loo 100 iöö 100 100 100 10« 10 10 i ö Ίο 10 ιοα ÜMJΓόο To" 10 Ï Ô 10 TcT 10 10 10 100 100 Γοη 10 10 10 10 10 10 10 10 100 100 UM] 10 HT 10 10 10 10 10 10 lOj To] ιοί 10 10 ω 10 b) -9< -90 -90

90 90 90

-9
[0,1] ordnen jedem skalaren Wert einen Extinktionskoeffizienten (Opazitätswert) zwischen 0 und 1 zu. Hierbei können auch Bereiche als völlig undurchlässig definiert werden und somit direkt Isoflächen dargestellt werden. Für die Festlegung der Farbe kann nun im Prinzip gleich verfahren werden. Durch eine Transferfunktion wird jedem skalaren Wert eine Farbe, z.B. im RGB-Farbmodell, zugeordnet. Die Integration erfolgt dann unabhängig in jeder Farbkomponente. Ein Nachteil dieser Zuweisung liegt in der Tatsache, daß ein Beleuchtungsmodell zur Festlegung der Farbwerte nicht berücksichtigt wird und somit nur ein geringer Tiefeneindruck erzeugt wird. Insbesondere werden die eventuell im Volumen vorhandenen Übergänge zwischen unterschiedlichen Strukturen, wie z.B. unterschiedliche Gewebestrukturen bei

334

7 VOLUMENDARSTELLUNGEN

CT-Aufnahmen, nicht sichtbar und eine Isofläche erhält überall dieselbe Intensität bzw. Farbe. Um diese Nachteile zu überwinden, wurden spezielle Beleuchtungsmodelle für Volumendaten eingeführt. Um diese Modelle zu veranschaulichen, betrachen wir zunächst nur eine Isofläche in einem gegebenen Volumen. Ist eine differenzierbare Volumenfunktion / : Ω C R 3 — • Κ und ein q G R gegeben, so heißt die Menge S(q) = {p e Ω I f ( p ) = q} Isofläche von / zum Wert q. Falls q kein Extremwert von / ist, so ist S(q) eine in den R 3 eingebettete 2-Mannigfaltigkeit. Diese 2-Mannigfaltigkeit wird möglicherweise durch den Definitionsbereich Ω beschnitten. In diesem Fall besitzt die Zweimannigfaltigkeit einen eindimensionalen Rand, der im Rand von Ω enthalten ist. Mit (7.10) bezeichnen wir den Gradienten von / . Der Gradient V / ( x o ) ist ein Vektor, der senkrecht auf der Tangentialfläche im Punkt f(xQ) an die Isofläche S(q) steht. Durch V / sind somit die Normalenrichtungen auf Isoflächen gegeben und erlauben (¡ine Auswertung eines lokalen Beleuchtungsmodells, z.B. eines Phong-Modells (vgl. Band I, Kap 6.5.2.). Bei der Auswertung kann zusätzlich die Norm des Gradienten mit berücksichtigt werden, so daß insbesondere die Ubergänge hervorgehoben werden können. Nach der Behandlung der optischen Modelle und der Transferfunktionen können wir uns nun den speziellen graphischen Algorithmen zuwenden. 7.1.3

Raycasting

Raycasting ist ein bildraum-orientiertes Verfahren analog zu dem bereits behandelten Ray tracing-Verfahren (vgl. [Lev88]). Im Gegensatz zu diesem werden beim Raycasting meist nur Primärstrahlen, d.h. Sehstrahlen für jedes Pixel ausgesandt. Für jeden Strahl wird der Schnitt mit der meist konvexen Oberfläche des Definitionsbereiches Ω der Volumenfunktion bercchnct. Wird ein Schnittpunkt festgestellt, so wird der Schnittpunkt für den Eintritt in das Volumen und den Austritt aus dem Volumen bestimmt. Damit kann der Strahl in das lokale Koordinatensytem des Volumens transformiert werden. Anschließend wird der Strahl innerhalb des Volumens verfolgt und die Färb- und Opazitätswerte an einer Vielzahl von Abtast-Punkten auf dem Strahl bestimmt. Dadurch erhält man einen Vektor von geordneten Abtastwerten (c(s¿), a(s¿)) für die Farbwerte, die dem Quellterm entsprechen, und die Opazitätswerte, die den Extinktionskoeffizienten repräsentieren. Da die Abtastwerte auf dem Strahl liegen und darum im Normalfall nicht exakt mit den diskreten Gitterpunkten übereinstimmen, werden die Zwischenwerte durch die bereits angesprochene Interpolation berechnet. Abbildung 7.2 illustriert das Verfahren.

7.1 DIREKTE VOLUMENDARSTELLUNG

335

Bild 7.2: Prinzip des Ray casting. Heuristische Raycastingverfahren Die heuristischen Raycastingverfahren versuchen beim Durchqueren des Volumendatensatzes entlang dem Sehstrahl Oberflächen zu detektieren und diese dann entsprechend zu visualisieren. Schattierungsproblem

(Shading)

Bei allen Beleuchtungsverfahren von Oberflächen werden die Normalen benötigt. In diesem Abschnitt gehen wir davon aus, daß alle Gitterzellen Würfel sind. Pro Blickpunkt sind maximal drei Flächen eines Würfels sichtbar. Verwendet man ausschließlich parallel einfallendes Licht und eine Parallelprojektion, so müssen maximal 3 Oberflächenorientierungen berücksichtigt werden. Werden nur diese 3 Normalenrichtungen verwendet, so sieht man im resultierenden Bild deutliche Voxelstrukturen. Aus diesem Grund wird versucht, die Normalenrichtungen der tatsächlichen Oberfläche zu schätzen. Es lassen sich zwei Gruppen von Verfahren unterscheiden: bildraumorientierte Verfahren und objektraumorientierte Verfahren. Die sogenannte Tiefenpuffer-Gradientenschattierung gehört zu den bildraumorientierten Verfahren. Für jedes Pixel im Bildraum wird ein Normalenvektor auf der Objektoberfläche geschätzt und ein lokales Beleuchtungsmodell ausgewertet. Für die Schätzung wird in jedem Pixel (x,y) ein Tiefenwert z(x,y) benötigt, vgl. Abb. 7.3. Ist eine Oberfläche im Volumen bekannt, so kann dieser mit Hilfe eines Z-Buffers ermittelt werden. Die lokalen Werte um den zu berechnenden Punkt werden jetzt als Stützstellen zweier stetiger Funktionen betrachtet und in x- bzw. y- Richtung differenziert, was zu den Tangentenvektoren Tx(x,y) und Ty(x,y) führt:

Tx(,,y)= ( 1 , 0 , ^ 1 )

und T y ( , , , ) = ( 0 , 1 , ^ 1 ) .

(7.11)

7 VOLUMENDARSTELLUNGEN

336

*.y Bild 7.3: Links die Bestimmung der Tiefenwerte (Z-Buffer). Rechts vom Tiefenwert abhängige Normalen. Ist der Winkel zwischen Normalenvektor und Blickrichtung betragsmäßig kleiner oder gleich j , so gibt es für die Ableitungen in x- und y-Richtung jeweils nur 3 Werte. Den Normalenvektor n(x,y) erhält man jetzt durch die Bildung des Kreuzproduktes der beiden Tangentenvektoren: n { X i

y

) = T x

(

X

, y ) x T

y

(

X

, y ) = { ^ , ^ , l).

(7.12)

Die partiellen Ableitungen und lassen sicli durch einfache Differenzbildungen der direkten Nachbarn in den entsprechenden Richtungen annähren. Die Tiefenpuffer-Gradientenschattierung ist leicht zu implementieren und sehr schnell. Nachteil des Verfahrens ist die geringe Auflösung der Normalenvektoren, falls die Fläche nahezu senkrecht auf der Blickrichtung steht. Ist der Winkel zwischen Normalenvektor und Blickrichtung betragsmäfeig kleiner oder gleich so gibt es für die Ableitungen in χ- und y-Richtung jeweils nur 3 Werte, vgl. Abb. 7.3. Bei größeren Winkeln wächst die Auflösung. Ein Ergebnis der Tiefenpuffer-Gradientenschattierung ist in Abb. 7.4 dargestellt. Bei der Grauwert-Gradientenschattierung (gray-level gradient shading) oder (density gradient shading), wird der Gradient der lokalen Grauwerte zur Berechnung der Normale n(x, y, ζ) = Vf (χ, y, ζ) der zu visualisierenden Oberfläche verwendet. Der Gradient Vf(x,y,z) wird wie bei den zweidimensionalen Kantendetektoren aus den Werten der Nachbarvoxel berechnet. Wird ein symmetrischer Gradient verwendet so ergibt sich: Vf{xu

yu Zi)

-(f(xi+i,yi,Zi) -f(xi,yi-i,

Zi), f(xi,yi,

f{xi-\,yi,z,),f{xl,yl+i,zi) zi+1) - f(xl,yl,zi-1)).

(7.13)

7.1 D I R E K T E V O L U M E N D A R S T E L L U N G

337

Bild 7-4'· Links das Ergebnis einer Z-Buffergradientenschattierung. Die geringe Auflösung der Normalen im Bereich kleiner Winkel zwiehen Normale und Beobachtungsrichtung führt, zu Artefakten. Rechts das Ergebnis einer Grauwertgradienterischattierung. Wie im 2D-Fall kann die Vorwärts- bzw. Riickwärts-Differenz in einen 3D-Differenzoperator übersetzt werden. Verwendet man die symmetrische Differenz, so ergibt sich die Maske des Differenzoperators für die Ableitung nach χ . d.h. für die Komponenten in ¿-Richtung gemäfe -ljk

0 0 0

0 -1 0

ß() jk

dljk --

0 0 0

0 1 0

0 0 0

Für die anderen symmetrischen Differenzen ergeben sich die entsprechenden Differenzenoperatoren. Wie im zweidimensionalen Fall werden in der Literatur auch für den dreidimensionalen Fall eine Reihe weiterer Gradientenoperatoren vorgeschlagen, vgl. z.B. [ZH81]. Tiefenschat

tierung

Bei der Tiefenschattierung (depth shading) wird der Strahlverlauf beim Erreichen eines vorgegebenen Schwellwertes abgebrochen und die bis dahin auf dem Strahl zurückgelegte Entfernung zurückgegeben. Diese Entfernung wird in Farbe, meist als hell-dunkel codiert. Die Tiefenschattierung ist eine recht einfache und schnelle Methode. Die Ergebnisse sind leicht zu interpretieren. Leider ist der Bildeindruck nicht gut. Das Bild wirkt konturlos. Der räumliche Bildeindruck verbessert sich deutlich, wenn eine Gradientenschattierung des Tiefenbildes vorgenommen wird. Gradientenschattierung Die Gradientenschattierung kann auch direkt ausgeführt werden. Dazu wird an der Stelle des Strahls, an der der Schwellwert erreicht wurde, der Gradient berechnet. Dieser geht dann in eine lokale Beleuchtungsrechnung ein. Die mit diesem Verfahren erzeugten Bildern sind mit denen vergleichbar, die man erhält, wenn zunächst die Oberfläche rekonstruiert wird und diese dann visualisiert, wird.

7 VOLUMENDARSTELLUNGEN

338

Maximumsprojektion Eine weitere Visualisierungsmethode stellt die Maximumsprojektion dar [THB + 90|. Bei dieser Methode wird der größte, auf dem Strahl gefundene Wert zurückgegeben: / = max(xi,

X2, · · · , xn),

(7-14)

wobei xi,ldots, xn die skalaren Werte an den A b t a s t p u n k t e n entlang dem Sehstrahl sind. Diese Methode ist besonders dort anwendbar, wo relativ wenige, d a f ü r aber sehr helle Regionen von Interesse vorliegen. Dies ist beispielsweise bei NMR-Gefäßaufnahmen der Fall. Die fließende Materie in den Gefäßen wird dabei am hellsten dargestellt. Statt des Maximums der Datenwerte kann auch das Maximum der Beträge der Gradienten auf dem Strahl zurückgegeben werden I = max(\vf(

x i

) \ ,|V/(.t2)|, ... , |V/(sn)|).

(7.15)

Ein Beispiel einer Maximumsprojektion ist in Abb. 7.5 dargestellt.

Bild 7.5: Maximumsprojektion gut sichtbar.

von NMR-Aufnahmen

des Kopfes.

Die Blutgefäße

werden

Integrationsverfahren Sind ausreichend viele Werte entlang des Strahls bestimmt worden, so kann eine numerische Integration durchgeführt werden. Der Einfachheit halber nehmen wir nun an, daß

7.1 D I R E K T E V O L U M E N D A R S T E L L U N G

339

äquidistante Abtastpunkte (s¿) im Abstand Δ bestimmt werden. Mit s und s i bezeichnen wir die Parameter der Schnittpunkte für den Eintritt und den Austritt des Strahls im Volumens. Mit Gleichung (7.9) erhalten wir somit η

e n t r y

e x

t

"•V lit. τ Cpixel

— C ( s )



Cbackgr

ound

e x p

Ι

I —

'

+ jT " ' " ' " exp ( -

j

τ(ζ)άζ Sexit

""""

τ(ξ)άή c(

V

) d

V

,

(7.16)

wobei die Intensität durch die Farbwerte c ersetzt wurde. Für

— c ( s i ) und a¿ = t ( s ¿ ) zu der Zerlegung (s e a ¿t = « ι , . . . , s = s erhalten wir eine Nähcrungslösung der Gleichung durch

Ci

n

y )

des Intervalls

c1:A.

(7.17)

c n t r

[«κ χ it.-, Sentry]

Cpixel

exp

(^background

Da

V i=ι

( η

J

ι

\

/

+ ^exp i= i

η

)

- ^ y j=i+i

a j A

/

it

j = i

j=i

für kleine Werte von ajA, erhalten wir eine Näherung durch Cjnxel

=

ChackgroundY[(l

~ j—i

«,Δ) +

~

C l j A ^ i A .

(7.19)

i= 1 j = i

Mit A{ = üí A und C¿ = c¿A können wir nun den sogenannten back-to-front-Algorithmus formulieren, wie er beispielsweise in [DCH88] beschrieben wird. C



G

f o r ( i C

=

background —

1; i

=

1; i

C

=

A

}

=

A

C + { ï - A ) C +

A i ( l - A )

C

=

C

+

(1



)

l

A^jCbackground

340

7 VOLUMENDARSTELLUNGEN

Der Vorteil des front-to-back-Algorithmus liegt darin, daß während der Integration geprüft werden kann, ob die Gesamtopazität A schon in der Nähe 1 liegt und damit die Summation abgebrochen werden kann. Eine andere Form der Beschleunigung liegt in der Berücksichtigung von Kohärenzen (Nachbarschaftsbeziehungen) innerhalb des Volumens. Sind z.B. Bereiche innerhalb des Volumens vorhanden, in denen die Volumenfunktion gleich Null oder zumindest näherungsweise konstant ist, so ist dort die aufwendige Bestimmung der Werte für Farbe und Opazität nicht notwendig. Strukturen wie Octrees können dabei die Traversierung und die Integration erheblich beschleunigen. 7.1.4

Projektion von Tetraedern

Um die Kohärenz der skalaren Volumendaten besser ausnutzen zu können, wurden Projektionsmethoden für die direkte Volumendarstellung entwickelt. Es handelt sich dabei um sogenannte forward-mapping-Algorithmen, die ganze Bereiche des Volumens auf den Bildschirm projizieren und die Integration zumindest teilweise im Bildraum durchführen. Durch die Projektion größerer Datenbereiche wird eine Scan-Konvertierung notwendig, bei der aber meist vorhandene Graphik-Hardware genutzt werden kann. Der von Shirley und Tuchmann [ST90] vorgestellte Algorithmus der Projektion von Tetraedern (projected tetrahedra, P T ) arbeitet auf beliebigen Tetraeder-Netzen. Da reguläre Gitter leicht in Tetraeder zerlegt werden können und numerische Verfahren wie FE-Methoden oftmals auf unstrukturierten Tetraeder-Netzen formuliert werden, kann mit diesem Algorithmus eine Vielzahl von Daten direkt aus der gegebenen Datenstruktur heraus implementiert werden. Bild 7.6 zeigt eine Zerlegung eines Würfels in Tetraeder. Ein weiterer Vorteil des Verfahrens liegt nun darin, daß auf eine rechenaufwendige Traversierung eines Strahls durch ein unstrukturiertes Gitter verzichtet werden kann. Der Algorithmus verläuft in folgenden Schritten: 1. Zerlegung des Volumens in Tetraeder. 2. Klassifikation der Tetraeder entsprechend ihrem Bild unter der momentanen Projektion. 3. Zerlegung der Projektion in Dreiecke. 4. Bestimmung der Farbe und Opazität für jeden Eckpunkt der ermittelten Dreiecke. 5. Füllen und Durchführung einer Scan-Konvertierung für jedes Dreieck. Um eine gültige Triangulierung zu erhalten ist bei der Zerlegung des Volumens in Tetraeder darauf zu achten, daß der Schnitt zwischen Tetraedern entweder • leer,

7.1 D I R E K T E VOLUMENDARSTELLUNG

Bild 7.6: Tetraeder Zerlegung en eines

341

Würfels

• ein gemeinsamer Eckpunkt, • eine gemeinsame Kante, • oder ein gemeinsames Dreieck ist, vgl. Kap. 1.3.2. Die Klassifikation der Tetraeder erfolgt entsprechend der Bild 7.7, abhängig davon, wieviele Seitenflächen eines Tetraeders gesehen sichtbar sind. Blickrichtung ist dabei die negative Projektionsrichtung. Damit lassen sich die Tetraeder in 6 Äquivalenzklassen einteilen. Zu welcher Klasse ein Tetraeder gehört, kann mittels der Normalen der Seitenflächen und der Richtung zum Augpunkt entschieden werden. Die Entscheidung, welcher Fall vorliegt, kann auch durch die Verwendung der zu den Seitenflächen gehörenden Ebenengleichungen getroffen werden, indem man den Augpunkt einsetzt. Uber das Vorzeichen des Ergebnisses kann dann entschieden werden, ob das Dreieck dem Betrachter zu oder abgewandt ist. Nach der Klassifikation erfolgt die Projektion der Dreiecke auf die Bildebene. Dabei wird die Projektion mittels affiner Transformation, perspektivischer Transformation und

342

7 VOLUMENDARSTELLUNGEN

Bild 7.7: Klassifikation der Tetraeder erfolgt abhängig davon, wieviele Seitenflächen des Tetraeders sichtbar sind. Die Zeichen + bzw. — geben für jede Seitenfläche des Tetraeders an, ob sie sichtbar ist oder nicht. Parallelprojektion der Eckpunkte durchgeführt. Die Liniensegmente der projizierten Dreiecke werden anschließend im 2D auf Schnitt untersucht. Wird ein Schnittpunkt gefunden, so werden die in die Bildebene projizierten Dreiecke des Tetraeders in neue Dreiecke zerlegt, wobei zwischen einem und vier Dreiecke entstehen, vgl. Abb. 7.7. Nun wird angenommen, daß sich die maximale Opazität für den Tetraeder an der Stelle befindet, wo der Tetraeder die größte Ausdehnung in Richtung zum Augpunkt hat. Dieser P u n k t und die dortigen optischen Eigenschaften müssen nun bestimmt werden. Im Fall 4 ist die größte Ausdehnung an der Stelle, wo 2 Eckpunkte hintereinander liegen. In den Fällen 3 und 2 erhält man den Punkt durch den Schnitt der Liniensegmente. Im Fall 1 wird der P u n k t durch lineare Interpolation bestimmt. Bild 7.8 illustriert den Fall 1, wobei die Punkte P 4 , Pß, Pc in perspektivischen Koordinaten gegeben sind, d.h. nach der perspektivischen Transformation. Da die x- und y-Koordinaten der projizierten P u n k t e P[ und P!¿ übereinstimmen, kann man eine lineare Interpolation benützen, um

7.1 DIREKTE VOLUMENDARSTELLUNG

343

den Punkt P2 zu bestimmen. Zunächst werden aus der Gleichung

p[ = { \ -

u

- v)p'A + up'B + vp>c

(7.20)

die baryzentrischen Koordinaten 1 — u — v,u,v von P[ bzgl. der Punkte P'A, P'B und P ¿ bestimmt. Mit Hilfe der baryzentrischen Koordinaten berechnet sich die z-Koordinate von P2 dann gemäß

P2z = (1 - u - v)PAz + uBz + vCz

(7.21)

Diese Interpolation kann aber nicht nur für die Bestimmung des Punktes P2 und damit, über die Inverse der Projektion , zur Bestimmung der Dicke des Tetraeders an dieser Stelle, sondern auch für die Berechnung der optischen Eigenschaften Farbe und Opazität im Punkt P2 verwendet werden.

Bild 7.8: Im Fall eins wird der Punkt P2 durch lineare Interpolation bestimmt. Dabei wird ausgenutzt, daß nach der Projektion des Tetraeders in die Bildebene die x- und y-Koordinaten der Punkte Ρχ und P2 übereinstimmen.

Um nun die Farbe und die Opazität des projizierten Tetraeders zu bestimmen, wird angenommen, daß sich diese Werte innerhalb der Dreiecke, in die der Tetraeder zerlegt wurde, näherungsweise durch lineare Interpolation bestimmen lassen. Da die Dicke des Tetraeders nur an einem Eckpunkt der Dreiecke von Null verschieden ist, muß nur an diesem Punkt die Berechnung durchgeführt werden. Für die anderen Punkte wird die Opazität gleich Null gesetzt und der Farbwert übernommen. Sind Zi und z2 die

344

7 VOLUMENDARSTELLUNGEN

Koordinaten von Ρχ und P¿ auf dem Sehstrahl so erhält man mittels der Gleichung (7.9)

C(zi)

=

Cexitexp(-J*

=

Cexít exp

+

£

=

exp

e x p

£

rttWj+J*1 ^

( ~ / 2

exp ( - J**

φ)άη

exp ( - ^ ' τ(ξ)άή

2

c

τ ( ξ ) ί ξ ) ^exp

Wt*n + f z ^

( " ^

e x p

' τ(ξ)ά^

+ exp

j

' r ( £ ) r f ^ ο(η)άη

'v =

exp

^

2

C(z2) + ^

' exp

J

'

c(r,)^,

wobei C ( z 2 ) den Integrationswert bis zum Wert ¿2 bezeichnet. Wird nun ferner angenommen, daß an der dicksten Stelle die Färb- und Opazitätswerte innerhalb des Tetraeders durch lineare Interpolation der Randwerte in P\ und gegeben sind, erhält man eine Näherungslösung durch /

ι

Α ι + A·?

was dem bereits erwähnten back-to-front Algorithmus entspricht. Hierbei werden durch Ai und Ci die Opazitätswerte in den Punkten Pi, ί = 1,2 bezeichnet. Der Term (1 - e - ^ i - ^ - h H 1 ) legt somit den Opazitätswert und (C\ + C 2 ) / 2 den Farbwert des Eckpunkts fest. Die Darstellung des Gesamtvolumens geschieht dann durch die Sortierung der Tetraeder von hinten nach vorn und anschließende Projektion mit Gourand-Shading der zu den Tetraedern gehörenden Dreiecke. Jedes Pixel wird dann entsprechend der Formel

Cd = asCs + (1 - as)Cd

(7.22)

berechnet, wobei mit dem Index d die bereits berechneten und mit dem Index s die neu hinzukommenden Werte bezeichnet werden. Raycasting-Koprozessor Eine gerätetechnische Umsetzung des Raycasting-Verfahrens wurde am Wilhelm— Schickard-Institut für Informatik, Abt. Graphisch-Interaktive Systeme, durchgeführt [Kni95b], [Kni96a], [Kni96b], Der Koprozessor wurde für den Einsatz in herkömmlichen PCs entwickelt und besitzt daher ein PCI-Interface. Eine Photographie der Steckkarte ist in Abb. 7.9 gezeigt.

7.1 D I R E K T E V O L U M E N D A R S T E L L U N G

Bild 7.9: Der

345

Raycaatmg-Kopìvzcssor

Die generelle Arbeitsweise ist dabei wie folgt: der D a t e n s a t z wird in den Hauptspeicher des P C s geladen. Die C P U generiert für jedes Pixel einen Sichtstrahl entsprechend der Beobachtelposition und der geometrischen A n o r d n u n g des Bildfenstors. Der Sichtstrahl wird mit den sichtbaren Begrenzungsflächen des V o l u m e n d a t e n s a t z e s geschnitten. Falls der Sichtstrahl den D a t e n s a t z trifft,, wird noch der Vektor von einem Strahlpunkt zum n ä c h s t e n berechnet. Die K o o r d i n a t e n des S c h n i t t p u n k t e s sowie die Komponenten dieses Vektors werden in F e s t k o m m a - F o r m a t konvertiert u n d zum Koprozessor übertragen. Diese Einheit generiert nacheinander alle S t r a h l p u n k t e . F ü r jeden S t r a h l p u n k t wird gep r ü f t , ob er sich bereits außerhall) der Datensatzgrenze oder hinter einer opaken S t r u k t u r befindet. In diesem Fall wird die B e a r b e i t u n g des Strahls beendet. Ansonsten wird die Speicheradresse der benötigten D a t e n s a t z e l e m e n t e berechnet und ein Lesezugriff auf den Hauptspeicher d u r c h g e f ü h r t . Nach E r h a l t der D a t e n wird die Helligkeit des S t r a h l p u n k t e s mittels tri-linearer Interpolation b e s t i m m t und mit der bereits berechneter S t r a h l p u n k t e in wählbarer Weise verrechnet ( A k k u m u l a t i o n , Maxiinalprojektion, Schwellwertsuche oder anderes). Nach Terminierung eines Strahls wird der endgültige Pixelwert in einem Register zum Auslesen durch die C P U bereitgchalten, die während dieser Zeit die P a r a m e t e r für den nächsten Strahl berechnet h a t . U m den Berechnungsaufwand und den D a t e n t r a n s f e r in Grenzen zu halten, wird der D a t e n s a t z einer intensiven, speziellen Vorbehandlung unterzogen. Als konkretes Anwendungsbeispiel sei die medizinische Diagnose genannt. Der P a t i e n t e n d a t e n s a t z muß zunächst segmentiert werden, d. h. die Voxel werden entsprechend ihrer Materialzugehörigkeit (Knochen, Gewebe etc.) mit zusätzlichen N u m m e r n versehen. Im nächsten Schritt werden die S t r u k t u r e n beleuchtet. Dazu wird mithilfe lokaler Differenzoperatoren der Gradient in den G i t t e r p u n k t e n b e s t i m m t , der d a n n als Oberflächennormale in lokale Beleuchtungsrechnungen eingeht (z. B. das P h o n g ' s c h e Beleuchtungsmodell). Als Ergebnis erhält m a n einen D a t e n s a t z , der nur noch G r a u w e r t e u n d M a t e r i a l - N u m m e r n e n t h ä l t . Dieser D a t e n s a t z wird anschließend dergestalt kodiert, daß der D a t e n t r a n s f e r zwischen Hauptspeicher u n d Koprozessor auf ein M i n i m u m b e s c h r ä n k t wird.

346

7 VOLUMENDARSTELLUNGEN

Dazu wird ein Kompressionsverfahren aus der 2D-Bildverarbeitung, das 1979 unter dem Namen Block Truncation Coding [DM79] beschrieben wurde, auf drei Dimensionen erweitert. Der Grundgedanke ist, die Grauwerte eines 12-Voxel-Blocks, wie in Abb. 7.10 skizziert, auf zwei Grauwerte zu quantisieren. Zu diesem Zweck werden die Voxel entsprechend einem Schwellwert, ζ. B. dem Mittelwert, in zwei Gruppen eingeteilt. Für jede Gruppe wird dann ein neuer Grauwert bestimmt. 7

11

χ

5

y

w

/-/Ί

ι ο

w

r Bit-R3SitiŒiai

0

31

20 19

|o|o|o|o|o|o|i|o|i|i|i|o|

Ν

t

X

Entscheidungs-Bits

\

15

mat

t

tfeterialNummern

|

gu

|

t

"unterer" Grauwert

go

t

"cfcerer" Grauwert

Im g e z e i g t e i B e i s p i e l sind die schíarzen Voxel oberhalb des Schiellv\ertes

Bild 7.10: Kompression

eines

12-Voxel-Blocks

Dies kann ζ. B. so geschehen, daß der quadratische Fehler minimiert wird, was hohen Rechenaufwand bedeutet, oder dergestalt, daß Mittelwert und Varianz erhalten bleiben. Letzteres kann in geschlossener Form angegeben werden, und ist weniger aufwendig. Als Resultat erhält man in jedem Falle zwei neue Grauwertc, die üblicherweise jeweils 8 Bits belegen, sowie 12 Entscheidungsbits, die für jedes Voxel den zugehörigen Grauwert bestimmen. Die auf 32 Bits verbleibenden 4 Bits können genutzt werden, um die in dem Voxelblock vorkommenden Materialien zu beschreiben. Mit der Kodierung eines Voxelblocks in ein 32-bit Datenelement benötigt man also nur einen einzigen Speicherzugriff, um die 8 für die tri-lineare Interpolation benötigten Voxel zu erhalten. Um dies für den gesamten Datensatz zu gewährleisten, muß der Datensatz redundant kodiert werden, wie in Abb. 7.11 gezeigt. Als weiteren Vorteil ergibt sich, daß die tri-lineare Interpolation selbst weitestgehend vereinfacht wird, wie in (Kni95a] gezeigt. Obwohl eine verlustbehaftete Kodierung verwendet wird, ist die Bildqualität befriedigend. In Abbildung 7.12 wurde Haut und Gewebe halbdurchsichtig über Knochen visualisiert. Der Datensatz hat 2 5 6 x 2 5 6 x 2 1 6 Voxel. Der Koprozessor ist in der Lage, in Abhängigkeit von den Visualisierungsparametern sowie dem Beobachterstandpunkt, bis zu 5 Bilder pro Sekunde zu generieren.

7.1 D I R E K T E VOLUMENDARSTELLUNG

347

Dimx und Dimy sind die x - bzw. y-Dimensionen des Datensatzes in Gitter-Einheiten Im Diagramm zur Klarheit nicht gezeigt: redundante Kodierung erfolgt ebenso in y-Richtung

Bild 7.11: Redundante 7.1.5

Kompression

des

Datensatzes

Projektion von Rekonstruktions-Kernen:

Splatting

Die bereits erwähnte notwendige Interpolation zwischen den diskreten Datenwerten kann als eine Rekonstruktion der zugrundeliegenden Volumenfunktion aufgefaßt werden. Falls die Volumenfunktion bandbegrenzt ist, d.h. die Fourier-Transformierte kompakten Träger hat, und die Abtastrate in jeder Raumrichtung oberhalb der Nyquist-Frequenz liegt, kann die Volumenfunktion mittels der Funktion

SÌ3d(X, y, z) = si(z)si(y)si(z)

(7.23)

exakt rekonstruiert werden. Da das zu einem Datensatz gehörende Raumgitter aber eine endliche Ausdehnung besitzt und somit nicht bandbegrenzt sein kann, kann demnach mittels si30 keine exakte Rekonstruktion erfolgen. Da SÌ30 zusätzlich keinen kompakten Träger hat, eignen sich für praktische Anwendungen nur Approximationen an diese Funktion. Eindimensionale Beispiele hierfür sind in Abb. 7.13 dargestellt. Dreidimensionale Kerne können nun auf einfache Weise aus den eindimensionalen Kernen gewonnen werden. Ist Κ\ (x) ein eindimensionaler Kern, so liefert z.B. das Tensorprodukt K-¿(x,y,z) = K(x) • K(y) • K(z) einen dreidimensionalen Kern. Rotationssymmetrische dreidimensionale Kerne, erhält man gemäß K3(x,y,z)

= K(\\(x,y,z)\\)

aus eindimensionalen Kernen. Die rekonstruierte Funktion erhält man durch Faltung mit einem dieser Kerne.

(7.24)

7 VOLUMENDARSTELLUNGEN

348

Bild 7.12: CT-Aufnahme

eines

Hirnpatienten

Die bereits erwähnte trilineare Interpolation auf kubischen G i t t e r n kann nun ebenfalls als Rekonstruktion mittels der Sägezahn-Funktion (vgl. Bild 7.13) aufgefafet werden. Bezeichne mm Κ einen solchen K e r n , so ergibt die Faltung mit der diskreten Funktion (/,·,·*.)> gegeben durch die W e r t e auf dem G i t t e r in den P u n k t e n (./·,·, y.¡, Zk), die Volumenfunktion zu J(x,

y, z) = ^

fijkK(x

- xt,y

- yjtz

- zk).

(7.25)

Diese Form der Darstellung einer Volumenfuiiktion macht sich das von Westover |Wes90] beschriebene Splatting-Verfahren zur direkten Volumendarstellung zunutze. B e t r a c h t e n wir hierzu die einfache Integration entlang eines Sehstrahls in Abwesenheit von Absorption (vgl. Gleichung ( 7 . 4 ) ) . Der Einfachheit halber betrachten wir einen S t r a h l in R i c h t u n g und nehmen an, dais sich das Volumen im Bereich < 0} befindet. W i r erhalten dann für die Integration die Gleichung

I{x,y,Q)

= I-oc{x,

y) + / J — OO

q(x,y,z)dz,

(7.26)

349

7.1 D I R E K T E VOLUMENDARSTELLUNG

1

1

-1

-1

1

1

Λ

Bild 7.13: Näherungen

der

si-Funktion.

wobei q den durch / gebildeten Quellterm bezeichnet. Sind nun die Werte qijk auf den Gitterpunkten festgelegt, rekontruiert man die Funktion q wie die Volumenfunktion und erhält

•o l{x,y,0)

= I-oo(x, y) + /

qljkK(x

Durch die Bezeichnung Kijk(x,y, z) = K(x — xi}y von Integration und Summation erhält man

- Xi,y - yj, ζ - zk)dz.

— yj,z

(7.27)

— Zk) und die Vertauschung

(7.28)

Hierbei wird deutlich, daß nur die Kerne integriert werden müssen. Da die Kerne auf einem regelmäßigen Gitter durch Translation eines einzigen Kerns gegeben sind, muß diese Integration nur für einen Kern durchgeführt werden. Dies wird nun für alle Pixel, die der Kern in der Bildebene überdeckt, durchgeführt. Das Ergebnis dieser Integration wird als Footprint (Fußabdruck) bezeichnet und ergibt sich zu

(7.29)

350

7 VOLUMENDARSTELLUNGEN

Von Interesse sind natürlich nur die von Null verschiedenen Werte der Footprint-Funktion. Diese Werte beschreiben ein diskretes ebenes Skalarfeld und können auf verschiedene Weise gespeichert werden. Westover verwendet eine Footprint-Tabelle in Form einer 2-dimensionalen Textur. Diese begrenzt den Bereich der von Null verschiedenen Werte, die bei der gegebenen Parallelprojektion entstehen. Durch die Multiplikation der Werte mit Qijk und Translation um Xi,ijj erhalt m a n den Beitrag eines Gitterpunktes durch

9ijfcfootprint(a; — x.j,y — fjj)

(7.30)

zum Pixel (χ, y). Der Gesamtalgorithmus h a t die Aufgabe, alle Gitterpunkte (x¿, , Zk) abzuarbeiten, jeden dieser P u n k t e zu projizieren, alle Werte des Footprints mit q l3 k zu multiplizieren und anschließend in der Umgebung des Punktes yj) die neuen Werte zu den bereits in der Bildebene vorhandenen Werten zu addieren. Der eigentliche Darstellungsalgorithmus hat somit nur noch die Multiplikation, die Translation und Addition durchzuführen. Die Generierung einer Footprint-Tabclle für jede Ansicht des Volumendatensatzes ist aufwendig. Bei der Verwendung von rotationssymmetrischen Kernen, wie z.B. bei Verwendung des Gauß-Kerns, ist jedoch die Integration unabhängig vom Blickpunkt des Beobachters und kann damit in einem Vorverarbeitungsschritt erfolgen. Anschließend muß nur noch die Skalierung des Footprints in der Ebene entsprechend der affinen Transformation des Gesamtvolumens erfolgen. Leider sind rotationssymmetrische Kerne nur bei kartesischen Gittern, d.h. Gittern mit Würfeln als Zellen, verwendbar. Bei rechteckigen Zellen sind elliptische Kerne notwendig. In seinem Artikel beschreibt Westover wie eine Footprint-Tabelle transformiert werden kann, um die Footprints von elliptischen Kernen zu erhalten. Neben der von Westover beschriebenen Footprint-Tabelle besteht auch die Möglichkeit, die Integration des Kern durch ein planares Dreicksnetz und bilineare Interpolation zu beschreiben. Dabei wird die Integration des Kerns nur an den Eckpunkten der Dreiecke exakt durchgeführt und an den Eckpunkten abgelegt. Die Werte innerhalb der Dreiecke erhält man d a n n durch bilineare Interpolation dieser Werte, was dem Gourand-Shading entspricht. Die notwendigen Transformationen müssen dann nur noch für die Eckpunkte durchgeführt werden. Somit kann für die Darstellung des Volumens auf Graphik-Hardware zur Flächendarstellung zurückgegriffen werden. Die Addition der Werte wird dann meist durch ein α-Blending ersetzt, was dem Hinzufügen eines Absorptionstcrms entspricht (vgl. [LH91|, [RS95]). In Abb. 7.14 wurden die Ergebnisse einer Simulation der Ausbildung des Ringes bei Be-Sternen mit einem Splatting-Verfahren visualisiert. Die Simulation wurde mit Hilfe von Smoothed Particle Hydrodynamics (SPH), einer numerischen Methode zur Simulation gasdynamischer Prozesse, berechnet.

7.2

Indirekte V o l u m e n d a r s t e l l u n g

Die Extraktion und Darstellung von Isokonturen und Isoflächen einer kontinuierlichen Volumenfunktion ist eine effektive Technik zu deren Untersuchung. Auf dieselbe Art,

7.2 I N D I R E K T E V O L U M E N D A R S T E L L U N G

Bild 7.14·' Die Ergebnisse einer Simulation visualisiert mit einem Splat-ting- Verfahren.

der Ausbildung

351

des Ringes

bei

Bc-Sternen

wie Höhenlinien die Interpretation einer geographischen K a r t e ermöglichen, verbessern Isoflächen das Verstehen der Volumenfunktion. Die Algorithmen zur Berechnung von Isoflächen lassen sich im wesentlichen in zwei Gruppen einteilen: Bei den konturverbindenden Verfahren wird die Isofläche aus einer Reihe von 2D-Schnitten der Volumenfunktion / erzeugt. Die 2D-Sclmitte müssen entweder berechnet werden, oder liegen wie z.B. im Fall von Computer Tomographie Daten schon in dieser Form vor. Danach werden in den 2D-Sehnitten Isolinien berechnet, die dann in einem weitern Schritt zu einer Oberfläche verbunden werden, vgl. Abb. 7.15. Die anderen Verfahren gehen von einer Zerlegung des 3D-Raumes in Zellen aus und berechnen für jede einzelne Zelle eine Approximation der Isofläche. Der bekannteste Vertreter dieser G r u p p e ist der von Lorensen und Cline entwickelte 'Marching Cubes' Algorithmus |LC87|. 7.2.1

Konturverbinden

Die Rekonstruktion von 3D-Objekt,en aus 2D-Schnitten ist in vielen Anwendungen von großer Wichtigkeit. Die Hauptmotivation für dieses Problem kommt aus Anwendungen der medizinischen Bildverarbeitung, Digitalisierung von Objekten und Graphischen

352

7 VOLUMENDARSTELLUNGEN

Bild 7.15: Schnitte mit Konturen

eines menschlichen

Beckens.

Informationssytemen (GIS). Die Daten aus CT- oder MRI-Aufnahmen, Range Sensoren oder Höhenlinien werden interpoliert um Organe, CAD-Objekte und topographische Daten zu visualisieren. Im folgenden wird angenommen, daß für gegebenes q G R die Menge S = {ρ € Ω | f(p) < q} ein Körper im Sinn der geometrischen Modellierung ist, also ein echtes Volumen beschreibt. Insbesondere wird angenommen, daß die Oberfläche von S eine Zweimannigfaltigkeit ist, vgl. Kapitel 1 über Körper. Gegeben sei eine endliche Menge von 2-dimensionalen Schnitten der Volumenfunktion ^Zj = {p= (x>y) I

{x,y,Zj)

e S"}, z0 |c| \Qc(z)\ = \z3 + c| > |z|3 - |c| > |z|3 - \z\ = (|z|2 - l)\z\. Da \z\ > 2, folgt daraus \Qc(z)\ > (\z\2 — l)|z| > (4 — l)\z\ = 3\z\. Daraus erhalten wir |Q?(z)| > > 3 n Q c ( z ) => |Q?(*)| - > oo für η oo. b) Sei ζ = {x,y). Dann ist ζ3 — (χ 3 — 3xy2,3x2y — y3). Nehmen wir diese Funktion zur Hilfe, so erhalten wir folgende Funktion, um Levelsets für die ausgefüllte J u l i a Menge zu berechnen (vgl. Algorithmus 2.6.2):

8 LÖSUNGEN ZU DEN ÜBUNGSAUFGABEN

386

//////////////////////////////////////////////////////////////////// // function: 1 s e t 3 // description: Test for levelset for f(z)= z~3-c : // returns number of iterations.

//////////////////////////////////////////////////////////////////// int Julia::lset3(float x, float y) { float x_2 = χ * χ, y_2 = y * y, boundary = 4.0, dummy; int iter = 0 ;

// squares of χ sind y

// counter

while (iter < maxit && x_2 + y_2 < boundary) { ++iter; dummy = x_2 * χ - 3 * χ * y_2 + c_r; // χ = xxx - 3xyy y = 3 * x_2 * y + - y_2 * y + c_i; // y = 3xxy - yyy χ = dummy; x_2 = χ * x; y_2 = y * y;

>

return iter;

Lösung 3: a) Wir zeigen, daí¿ der Orbit des kritischen Punktes unter Q 5 genau der komplexkonjugierte Orbit des kritischen Punktes unter Qc ist:

Qe(z) = (z)2 + c = zz + c=zï + c= z2 + c = Qc(z) b) D a sich die Iteration selbst nicht ändert, brauchen wir in dem im Text gegebenen Code nur an dem Konstruktor 'Mandelbrot::Levelset(GrDev *dev)' Änderungen vorzunehmen. Zusätzlich nehmen wir an, daß der Fensterausschnitt symmetrisch zur χ-Achse gewählt wurde. //////////////////////////////////////////////////////////////////// // function: L e v e l s e t // description: Calculates and draws Mandelbrot. Scans the window // and draws colored points if not in Mandelbrot area. // The color is set by the number of iterations.

//////////////////////////////////////////////////////////////////// void Mandelbrot::Levelset(GrDev *dev) { int w = dev->queryWindowWidth(), h = dev->queryWindowHeight(),

// window dimensions

8.2 LÖSUNGEN ZU K A P I T E L 2

387

col, maxcol = dev->queryMaxColor() ; float xd = areaw / w, yd = areah / h;

// no of iterations // maximum color index // step size

// scan window for (int i = 0; i < w, !kbhit(); ++i) for (int j = 0 ; j 0) {

>

}

}

dev->drawPoint(P2D(i, j), col); dev->drawPoint(P2D(i, height-l-j), col);

c) Die Menge M ' ist folgendermaßen charakterisiert: (1) Es existiert ZQ € C mit Qc(ZQ) = ^o ( endl. Fixpunkt) (2)

\Q'c(ZQ)\