ebook img

Sun. Programming in Java Advanced Imaging (JAI) PDF

488 Pages·3.03 MB·English
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Sun. Programming in Java Advanced Imaging (JAI)

Programming in Java™ Advanced Imaging Release 1.0.1 November 1999 JavaSoft A Sun Microsystems, Inc. Business 901 San Antonio Road Palo Alto, CA 94303 USA 415 960-1300 fax 415 969-9131 (cid:211) 1999 Sun Microsystems, Inc. 901 San Antonio Road, Palo Alto, California 94303 U.S.A. All rights reserved. RESTRICTED RIGHTS LEGEND: Use, duplication, or disclosure by the United States GovernmentissubjecttotherestrictionssetforthinDFARS252.227-7013(c)(1)(ii)and FAR 52.227-19. ThereleasedescribedinthisdocumentmaybeprotectedbyoneormoreU.S.patents,for- eign patents, or pending applications. SunMicrosystems,Inc.(SUN)herebygrantstoyouafullypaid,nonexclusive,nontrans- ferable, perpetual, worldwide limited license (without the right to sublicense) under SUN’s intellectual property rights that are essential to practice this specification. This license allows and is limited to the creation and distribution of clean-room implementa- tions of this specification that (i) are complete implementations of this specification, (ii) pass all test suites relating to this specification that are available from SUN, (iii) do not derivefromSUNsourcecodeorbinarymaterials,and(iv)donotincludeanySUNbinary materials without an appropriate and separate license from SUN. Java, JavaScript, Java 3D, and Java Advanced Imaging are trademarks of Sun Microsys- tems,Inc.Sun,SunMicrosystems,theSunlogo,JavaandHotJavaaretrademarksorreg- istered trademarks of Sun Microsystems, Inc. UNIX® is a registered trademark in the United States and other countries, exclusively licensed through X/Open Company, Ltd. All other product names mentioned herein are the trademarks of their respective owners. THIS PUBLICATION IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND,EITHEREXPRESSORIMPLIED,INCLUDING,BUTNOTLIMITEDTO,THE IMPLIEDWARRANTIESOFMERCHANTABILITY,FITNESSFORAPARTICULAR PURPOSE, OR NON-INFRINGEMENT. THIS PUBLICATION COULD INCLUDE TECHNICAL INACCURACIES OR TYPO- GRAPHICALERRORS.CHANGESAREPERIODICALLYADDEDTOTHEINFOR- MATION HEREIN; THESE CHANGES WILL BE INCORPORATED IN NEW EDITIONS OF THE PUBLICATION. SUN MICROSYSTEMS, INC. MAY MAKE IMPROVEMENTS AND/OR CHANGES IN THE PRODUCT(S) AND/OR THE PRO- GRAM(S) DESCRIBED IN THIS PUBLICATION AT ANY TIME. Contents Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xi Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii Disclaimer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii About This Book. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii Related Documentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xv Additional Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xv Style Conventions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi 1 Introduction to Java Advanced Imaging . . . . . . . . . . . . . . . . . . . . 1 1.1 The Evolution of Imaging in Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 1.2 Why Another Imaging API? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 1.3 JAI Features. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 1.3.1 Cross-platform Imaging . . . . . . . . . . . . . . . . . . . . . . . . . . .3 1.3.2 Distributed Imaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 1.3.3 Object-oriented API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 1.3.4 Flexible and Extensible . . . . . . . . . . . . . . . . . . . . . . . . . . .4 1.3.5 Device Independent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 1.3.6 Powerful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 1.3.7 High Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 1.3.8 Interoperable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 1.4 A Simple JAI Program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 2 Java AWT Imaging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 2.1.1 The AWT Push Model . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 2.1.2 AWT Push Model Interfaces and Classes . . . . . . . . . . . .11 2.2 The Immediate Mode Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 2.2.1 Rendering Independence . . . . . . . . . . . . . . . . . . . . . . . . .12 2.2.2 Rendering-independent Imaging in Java AWT . . . . . . . .13 2.2.3 The Renderable Layer vs. the Rendered Layer . . . . . . . .13 2.2.4 The Render Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 2.3 Renderable and Rendered Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 2.3.1 The Renderable Layer . . . . . . . . . . . . . . . . . . . . . . . . . . .16 2.3.2 The Rendered Layer. . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 2.4 Java Image Data Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 Release 1.0.1, November 1999 iii CONTENTS 2.5 Introducing the Java Advanced Imaging API . . . . . . . . . . . . . . . . . . . 21 2.5.1 Similarities with the Java 2D API. . . . . . . . . . . . . . . . . . 22 2.5.2 JAI Data Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3 Programming in Java Advanced Imaging . . . . . . . . . . . . . . . . . . 27 3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2 An Overview of Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.3 Processing Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.1 Rendered Graphs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.3.2 Renderable Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.3.3 Reusing Graphs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.4 Remote Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.5 Basic JAI API Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.5.1 The JAI Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.5.2 The PlanarImage Class . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.5.3 The CollectionImage Class. . . . . . . . . . . . . . . . . . . . . . . 39 3.5.4 The TiledImage Class . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.5.5 The OpImage Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.5.6 The RenderableOp Class. . . . . . . . . . . . . . . . . . . . . . . . . 41 3.5.7 The RenderedOp Class . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.6 JAI API Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.6.1 Point Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.6.2 Area Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.6.3 Geometric Operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.6.4 Color Quantization Operators. . . . . . . . . . . . . . . . . . . . . 48 3.6.5 File Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.6.6 Frequency Operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.6.7 Statistical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.6.8 Edge Extraction Operators . . . . . . . . . . . . . . . . . . . . . . . 51 3.6.9 Miscellaneous Operators. . . . . . . . . . . . . . . . . . . . . . . . . 52 3.7 Creating Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.7.1 Operation Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.7.2 Parameter Blocks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.7.3 Rendering Hints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4 Image Acquisition and Display. . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.1.1 Image Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.1.2 Basic Storage Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.2 JAI Image Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.2.1 Planar Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.2.2 Tiled Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4.2.3 Snapshot Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.2.4 Remote Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.2.5 Collection Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.2.6 Image Sequence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.2.7 Image Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.2.8 Image MIP Map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 iv Programming in Java Advanced Imaging 4.2.9 Image Pyramid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89 4.2.10 Multi-resolution Renderable Images . . . . . . . . . . . . . . . .95 4.3 Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97 4.4 Reading Image Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101 4.4.1 Standard File Readers for Most Data Types. . . . . . . . . .103 4.4.2 Reading TIFF Images. . . . . . . . . . . . . . . . . . . . . . . . . . .104 4.4.3 Reading FlashPix Images. . . . . . . . . . . . . . . . . . . . . . . .109 4.4.4 Reading JPEG Images . . . . . . . . . . . . . . . . . . . . . . . . . .110 4.4.5 Reading GIF Images. . . . . . . . . . . . . . . . . . . . . . . . . . . .110 4.4.6 Reading BMP Images. . . . . . . . . . . . . . . . . . . . . . . . . . .111 4.4.7 Reading PNG Images. . . . . . . . . . . . . . . . . . . . . . . . . . .112 4.4.8 Reading PNM Images. . . . . . . . . . . . . . . . . . . . . . . . . . .117 4.4.9 Reading Standard AWT Images. . . . . . . . . . . . . . . . . . .118 4.4.10 Reading URL Images. . . . . . . . . . . . . . . . . . . . . . . . . . .119 4.5 Reformatting an Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119 4.6 Converting a Rendered Image to Renderable . . . . . . . . . . . . . . . . . . .122 4.7 Creating a Constant Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123 4.8 Image Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124 4.8.1 Positioning the Image in the Panel. . . . . . . . . . . . . . . . .127 4.8.2 The ImageCanvas Class . . . . . . . . . . . . . . . . . . . . . . . . .127 4.8.3 Image Origin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128 5 Color Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131 5.2 Color Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132 5.2.1 Color Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132 5.2.2 Color Space. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135 5.2.3 ICC Profile and ICC Color Space. . . . . . . . . . . . . . . . . .138 5.3 Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139 5.4 Color Conversion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140 5.5 Non-standard Linear Color Conversion (BandCombine) . . . . . . . . . .141 6 Image Manipulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 6.2 Region of Interest Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 6.2.1 The ROI Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144 6.2.2 The ROIShape Class. . . . . . . . . . . . . . . . . . . . . . . . . . . .151 6.3 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155 6.3.1 Finding the Maximum Values of Two Images. . . . . . . .156 6.3.2 Finding the Minimum Values of Two Images . . . . . . . .157 6.4 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157 6.4.1 ANDing Two Images . . . . . . . . . . . . . . . . . . . . . . . . . . .158 6.4.2 ANDing an Image with a Constant. . . . . . . . . . . . . . . . .159 6.4.3 ORing Two Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . .160 6.4.4 ORing an Image with a Constant . . . . . . . . . . . . . . . . . .161 6.4.5 XORing Two Images . . . . . . . . . . . . . . . . . . . . . . . . . . .162 6.4.6 XORing an Image with a Constant. . . . . . . . . . . . . . . . .163 6.4.7 Taking the Bitwise NOT of an Image . . . . . . . . . . . . . .164 Release 1.0.1, November 1999 v CONTENTS 6.5 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 6.5.1 Adding Two Source Images . . . . . . . . . . . . . . . . . . . . . 166 6.5.2 Adding a Constant Value to an Image. . . . . . . . . . . . . . 167 6.5.3 Adding a Collection of Images . . . . . . . . . . . . . . . . . . . 168 6.5.4 Adding Constants to a Collection of Rendered Images 169 6.5.5 Subtracting Two Source Images . . . . . . . . . . . . . . . . . . 169 6.5.6 Subtracting a Constant from an Image . . . . . . . . . . . . . 170 6.5.7 Subtracting an Image from a Constant . . . . . . . . . . . . . 171 6.5.8 Dividing One Image by Another Image . . . . . . . . . . . . 171 6.5.9 Dividing an Image by a Constant . . . . . . . . . . . . . . . . . 172 6.5.10 Dividing an Image into a Constant . . . . . . . . . . . . . . . . 173 6.5.11 Dividing Complex Images. . . . . . . . . . . . . . . . . . . . . . . 174 6.5.12 Multiplying Two Images. . . . . . . . . . . . . . . . . . . . . . . . 174 6.5.13 Multiplying an Image by a Constant. . . . . . . . . . . . . . . 175 6.5.14 Multiplying Two Complex Images. . . . . . . . . . . . . . . . 176 6.5.15 Finding the Absolute Value of Pixels . . . . . . . . . . . . . . 177 6.5.16 Taking the Exponent of an Image. . . . . . . . . . . . . . . . . 177 6.6 Dithering an Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 6.6.1 Ordered Dither. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 6.6.2 Error-diffusion Dither . . . . . . . . . . . . . . . . . . . . . . . . . . 181 6.7 Clamping Pixel Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 6.8 Band Copying. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 6.9 Constructing a Kernel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 7 Image Enhancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 7.2 Adding Borders to Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 7.2.1 The Border Operation . . . . . . . . . . . . . . . . . . . . . . . . . . 192 7.2.2 Extending the Edge of an Image. . . . . . . . . . . . . . . . . . 193 7.3 Cropping an Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 7.4 Amplitude Rescaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 7.5 Histogram Equalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 7.5.1 Piecewise Linear Mapping . . . . . . . . . . . . . . . . . . . . . . 202 7.5.2 Histogram Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 7.6 Lookup Table Modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 7.6.1 Creating the Lookup Table . . . . . . . . . . . . . . . . . . . . . . 207 7.6.2 Performing the Lookup. . . . . . . . . . . . . . . . . . . . . . . . . 216 7.6.3 Other Lookup Table Operations . . . . . . . . . . . . . . . . . . 218 7.7 Convolution Filtering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 7.7.1 Performing the Convolve Operation. . . . . . . . . . . . . . . 223 7.7.2 Box Filter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 7.8 Median Filtering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 7.9 Frequency Domain Processing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 7.9.1 Fourier Transform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 7.9.2 Cosine Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 7.9.3 Magnitude Enhancement. . . . . . . . . . . . . . . . . . . . . . . . 234 7.9.4 Magnitude-squared Enhancement. . . . . . . . . . . . . . . . . 235 7.9.5 Phase Enhancement. . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 vi Programming in Java Advanced Imaging 7.9.6 Complex Conjugate . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 7.9.7 Periodic Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 7.9.8 Polar to Complex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237 7.9.9 Images Based on a Functional Description . . . . . . . . . .237 7.10 Single-image Pixel Point Processing. . . . . . . . . . . . . . . . . . . . . . . . . .240 7.10.1 Pixel Inverting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241 7.10.2 Logarithmic Enhancement . . . . . . . . . . . . . . . . . . . . . . .241 7.11 Dual Image Pixel Point Processing . . . . . . . . . . . . . . . . . . . . . . . . . . .242 7.11.1 Overlay Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242 7.11.2 Image Compositing. . . . . . . . . . . . . . . . . . . . . . . . . . . . .243 7.12 Thresholding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 8 Geometric Image Manipulation. . . . . . . . . . . . . . . . . . . . . . . . . . 249 8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249 8.2 Interpolation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249 8.2.1 Nearest-neighbor Interpolation. . . . . . . . . . . . . . . . . . . .255 8.2.2 Bilinear Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . .256 8.2.3 Bicubic Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . .256 8.2.4 Bicubic2 Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . .257 8.2.5 Table Interpolation. . . . . . . . . . . . . . . . . . . . . . . . . . . . .258 8.3 Geometric Transformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265 8.3.1 Translation Transformation . . . . . . . . . . . . . . . . . . . . . .266 8.3.2 Scaling Transformation . . . . . . . . . . . . . . . . . . . . . . . . .268 8.3.3 Rotation Transformation. . . . . . . . . . . . . . . . . . . . . . . . .270 8.3.4 Affine Transformation . . . . . . . . . . . . . . . . . . . . . . . . . .272 8.4 Perspective Transformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275 8.4.1 Performing the Transform . . . . . . . . . . . . . . . . . . . . . . .277 8.4.2 Mapping a Quadrilateral. . . . . . . . . . . . . . . . . . . . . . . . .277 8.4.3 Mapping Triangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279 8.4.4 Inverse Perspective Transform. . . . . . . . . . . . . . . . . . . .279 8.4.5 Creating the Adjoint of the Current Transform . . . . . . .280 8.5 Transposing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281 8.6 Shearing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283 8.7 Warping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285 8.7.1 Performing a Warp Operation . . . . . . . . . . . . . . . . . . . .289 8.7.2 Polynomial Warp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291 8.7.3 General Polynomial Warp . . . . . . . . . . . . . . . . . . . . . . .293 8.7.4 Grid Warp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 8.7.5 Quadratic Warp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299 8.7.6 Cubic Warp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301 8.7.7 Perspective Warp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302 8.7.8 Affine Warp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .303 9 Image Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307 9.2 Finding the Mean Value of an Image Region . . . . . . . . . . . . . . . . . . .307 9.3 Finding the Extrema of an Image . . . . . . . . . . . . . . . . . . . . . . . . . . . .308 9.4 Histogram Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310 Release 1.0.1, November 1999 vii CONTENTS 9.4.1 Specifying the Histogram . . . . . . . . . . . . . . . . . . . . . . . 311 9.4.2 Performing the Histogram Operation . . . . . . . . . . . . . . 312 9.4.3 Reading the Histogram Data. . . . . . . . . . . . . . . . . . . . . 313 9.4.4 Histogram Operation Example . . . . . . . . . . . . . . . . . . . 315 9.5 Edge Detection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 9.6 Statistical Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 10 Graphics Rendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 10.1.1 Simple 2D Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 10.1.2 Renderable Graphics. . . . . . . . . . . . . . . . . . . . . . . . . . . 324 10.2 A Review of Graphics Rendering. . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 10.2.1 Overview of the Rendering Process . . . . . . . . . . . . . . . 325 10.2.2 Stroke Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 10.2.3 Rendering Graphics Primitives. . . . . . . . . . . . . . . . . . . 330 10.3 Graphics2D Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 10.4 Adding Graphics and Text to an Image . . . . . . . . . . . . . . . . . . . . . . . 333 11 Image Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 11.1.1 The PropertySource Interface . . . . . . . . . . . . . . . . . . . . 337 11.1.2 The PropertyGenerator Interface. . . . . . . . . . . . . . . . . . 337 11.2 Synthetic Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 11.3 Regions of Interest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 11.4 Complex Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 12 Client-Server Imaging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 12.2 Server Name and Port Number. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 12.3 Setting the Timeout Period and Number of Retries. . . . . . . . . . . . . . 342 12.4 Remote Imaging Test Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 12.4.1 Simple Remote Imaging Example. . . . . . . . . . . . . . . . . 343 12.4.2 RemoteImaging Example Across Two Nodes . . . . . . . 348 12.5 Running Remote Imaging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 12.5.1 Step 1: Create a Security Policy File. . . . . . . . . . . . . . . 350 12.5.2 Step 2: Start the RMI Registry . . . . . . . . . . . . . . . . . . . 351 12.5.3 Step 3: Start the Remote Image Server. . . . . . . . . . . . . 351 12.5.4 Step 4: Run the Local Application . . . . . . . . . . . . . . . . 352 12.6 Internet Imaging Protocol (IIP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 12.6.1 IIP Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 12.6.2 IIPResolution Operation . . . . . . . . . . . . . . . . . . . . . . . . 357 13 Writing Image Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 13.2 Writing to a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 13.3 Writing to an Output Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 13.4 Writing BMP Image Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 viii Programming in Java Advanced Imaging 13.4.1 BMP Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .363 13.4.2 BMP Data Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364 13.4.3 Example Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364 13.5 Writing JPEG Image Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364 13.5.1 JFIF Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365 13.5.2 JPEG DCT Compression Parameters. . . . . . . . . . . . . . .366 13.5.3 Quantization Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . .367 13.5.4 Horizontal and Vertical Subsampling. . . . . . . . . . . . . . .368 13.5.5 Compression Quality . . . . . . . . . . . . . . . . . . . . . . . . . . .369 13.5.6 Restart Interval. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .370 13.5.7 Writing an Abbreviated JPEG Stream . . . . . . . . . . . . . .371 13.5.8 Example Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371 13.6 Writing PNG Image Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375 13.6.1 PNG Image Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . .376 13.6.2 PNG Filtering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376 13.6.3 Bit Depth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378 13.6.4 Interlaced Data Order. . . . . . . . . . . . . . . . . . . . . . . . . . .379 13.6.5 PLTE Chunk for Palette Images. . . . . . . . . . . . . . . . . . .380 13.6.6 Ancillary Chunk Specifications . . . . . . . . . . . . . . . . . . .381 13.7 Writing PNM Image Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390 13.8 Writing TIFF Image Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .391 13.8.1 TIFF Compression . . . . . . . . . . . . . . . . . . . . . . . . . . . . .391 13.8.2 TIFF Tiled Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . .391 14 Extending the API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 14.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393 14.2 Package Naming Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393 14.3 Writing New Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394 14.3.1 Extending the OpImage Class . . . . . . . . . . . . . . . . . . . .395 14.3.2 Extending the OperationDescriptor Interface. . . . . . . . .397 14.4 Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .403 14.4.1 RectIter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .404 14.4.2 RookIter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .407 14.4.3 RandomIter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .410 14.4.4 Example RectIter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411 14.5 Writing New Image Decoders and Encoders. . . . . . . . . . . . . . . . . . . .414 14.5.1 Image Codecs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .414 A Program Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 A.1 Lookup Operation Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .417 A.2 Adding an OperationDescriptor Example. . . . . . . . . . . . . . . . . . . . . .419 B Java Advanced Imaging API Summary. . . . . . . . . . . . . . . . . . . 429 B.1 Java AWT Imaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .429 B.2 Java 2D Imaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .429 B.2.1 Java 2D Imaging Interfaces . . . . . . . . . . . . . . . . . . . . . .430 B.2.2 Java 2D Imaging Classes . . . . . . . . . . . . . . . . . . . . . . . .431 Release 1.0.1, November 1999 ix CONTENTS B.3 Java Advanced Imaging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 B.3.1 JAI Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 B.3.2 JAI Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 B.3.3 JAI Iterator Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 443 B.3.4 JAI Iterator Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 B.3.5 JAI Operator Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . 444 B.3.6 JAI Widget Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 453 B.3.7 JAI Widget Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 x Programming in Java Advanced Imaging

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.