Preface |
|
xiii | |
Book Organization |
|
xiv | (1) |
Source Code CD |
|
xv | (1) |
Acknowledgments |
|
xv | |
|
Chapter 1. An Introduction to Digital Image Processing |
|
|
1 | (17) |
|
Components of an Image Processing System |
|
|
6 | (8) |
|
|
7 | (1) |
|
|
7 | (1) |
|
|
8 | (1) |
|
|
9 | (1) |
|
Image Storage and Retrieval |
|
|
9 | (3) |
|
|
12 | (2) |
|
Image Processing Applications |
|
|
14 | (4) |
|
|
14 | (1) |
|
|
14 | (2) |
|
Biomedical and Medical Imaging |
|
|
16 | (1) |
|
|
16 | (1) |
|
Criminal Justice Law Enforcement |
|
|
17 | (1) |
|
|
17 | (1) |
|
Chapter 2. Displaying Images with Xlib |
|
|
18 | (34) |
|
|
18 | (2) |
|
|
20 | (3) |
|
|
23 | (1) |
|
|
24 | (5) |
|
|
25 | (4) |
|
|
29 | (1) |
|
|
30 | (1) |
|
|
31 | (1) |
|
Median Filtering Images Using Xlib |
|
|
32 | (15) |
|
|
32 | (7) |
|
|
39 | (2) |
|
|
41 | (1) |
|
|
41 | (6) |
|
Problems with an Xlib Approach to Image Processing |
|
|
47 | (3) |
|
Handling of Image Formats |
|
|
48 | (1) |
|
|
48 | (1) |
|
|
49 | (1) |
|
|
49 | (1) |
|
Display Compatibility and Accuracy |
|
|
50 | (1) |
|
|
50 | (2) |
|
Chapter 3. XIE Architecture |
|
|
52 | (23) |
|
|
52 | (4) |
|
Display Any Image on Any X Display |
|
|
53 | (1) |
|
Offload Client Processing Requirements to the Server |
|
|
54 | (1) |
|
Provide Simple Image Manipulation and Enhancement Primitives |
|
|
55 | (1) |
|
|
56 | (1) |
|
XIE Architectural Overview |
|
|
56 | (5) |
|
|
57 | (1) |
|
|
58 | (1) |
|
|
58 | (1) |
|
The XIE Computational Model |
|
|
59 | (1) |
|
|
60 | (1) |
|
|
61 | (12) |
|
What the Skeleton Application Does |
|
|
61 | (1) |
|
|
62 | (2) |
|
Photoflo Creation and Initialization |
|
|
64 | (2) |
|
|
66 | (1) |
|
|
67 | (2) |
|
Photoflo Graph Deallocation |
|
|
69 | (1) |
|
Compiling and Executing the Sample |
|
|
69 | (2) |
|
Problems with the First Sample |
|
|
71 | (2) |
|
|
73 | (2) |
|
Chapter 4. Photoflos, Photospaces, and Resources |
|
|
75 | (76) |
|
|
75 | (6) |
|
|
77 | (4) |
|
|
81 | (1) |
|
|
81 | (2) |
|
|
82 | (1) |
|
Allocating and Populating Photoflo Graphs in XIElib |
|
|
83 | (6) |
|
|
83 | (1) |
|
Specifying the Photoflo Graph Elements |
|
|
84 | (5) |
|
Transmitting the Photoflo to the Server and Executing It |
|
|
89 | (2) |
|
|
89 | (1) |
|
|
90 | (1) |
|
Releasing Memory and Resources |
|
|
91 | (2) |
|
Destroying Photoflo Graphs |
|
|
91 | (1) |
|
Freeing Technique Parameters |
|
|
92 | (1) |
|
|
92 | (1) |
|
Freeing the Photoflo Graph |
|
|
92 | (1) |
|
|
93 | (1) |
|
Functions That Operate on Stored Photoflos |
|
|
93 | (46) |
|
Modifying a Photoflo with XieModifyPhotoflo |
|
|
93 | (5) |
|
Redefining a Photoflo with XieRedefinePhotoflo |
|
|
98 | (4) |
|
Awaiting Photoflo Termination Using XieAwait |
|
|
102 | (2) |
|
Aborting a Photoflo Using XieAbort |
|
|
104 | (1) |
|
Querying the Photoflo State Using XieQueryPhotoflo |
|
|
105 | (2) |
|
Sending Client Data to a Photoflo with XiePutClientData |
|
|
107 | (8) |
|
Retrieving Client Data from a Photoflo with XieGetClientData |
|
|
115 | (24) |
|
|
139 | (9) |
|
|
139 | (1) |
|
|
139 | (1) |
|
|
140 | (1) |
|
|
140 | (2) |
|
|
142 | (1) |
|
Structure of LUT, Photomap, and ROI Resources |
|
|
143 | (1) |
|
|
144 | (4) |
|
|
148 | (3) |
|
Chapter 5. Import Elements |
|
|
151 | (35) |
|
Import Elements That Read Data from a Client |
|
|
152 | (16) |
|
Reading Client Image Data Using ImportClientPhoto |
|
|
153 | (9) |
|
Reading Client ROI Data Using ImportClientROI |
|
|
162 | (4) |
|
Reading Client LUT Data Using ImportClientLUT |
|
|
166 | (2) |
|
Import Elements That Read Data from an XIE Resource |
|
|
168 | (16) |
|
Importing XIE ROI Resources Using XieFloImportROI |
|
|
169 | (1) |
|
Importing XIE LUT Resources Using XieFloImportLUT |
|
|
170 | (2) |
|
Importing XIE Photomap Resources Using XieFloImportPhotomap |
|
|
172 | (1) |
|
Reading Bitonal Images and Control Planes from Drawables with ImportDrawable Plane |
|
|
173 | (6) |
|
Reading Image Data from Drawables with ImportDrawable |
|
|
179 | (5) |
|
|
184 | (2) |
|
Chapter 6. Image Encodings and File Formats |
|
|
186 | (19) |
|
|
186 | (1) |
|
Image Encodings and File Formats |
|
|
187 | (17) |
|
|
188 | (1) |
|
|
188 | (1) |
|
Storing CCITT Encoded Images in TIFF Format Files |
|
|
189 | (5) |
|
Reading and Writing Bitonal TIFF Files: an Example |
|
|
194 | (10) |
|
|
204 | (1) |
|
Chapter 7. Export Elements |
|
|
205 | (35) |
|
|
205 | (1) |
|
Displaying Image Data in a Drawable With ExportDrawable |
|
|
206 | (8) |
|
Conversion of Intensity Values to Colormap Indices |
|
|
207 | (1) |
|
Image and Drawable Dimensions |
|
|
208 | (1) |
|
Image and Drawable Depths |
|
|
209 | (1) |
|
|
209 | (1) |
|
Experimenting with GC Attributes |
|
|
210 | (4) |
|
Errors and Events Associated with ExportDrawable |
|
|
214 | (1) |
|
Displaying Bitonal Image Data in a Drawable with ExportDrawablePlane |
|
|
214 | (7) |
|
ExportDrawablePlane and GCs |
|
|
215 | (5) |
|
Errors and Events Associated with ExportDrawablePlane |
|
|
220 | (1) |
|
Export Elements that Write Data to an XIE Resource |
|
|
221 | (7) |
|
Exporting XIE ROI Resources Using XieFloExportROI |
|
|
221 | (2) |
|
Exporting XIE LUT Resources Using XieFloExportLUT |
|
|
223 | (3) |
|
Exporting XIE Photomap Resources Using XieFloExportPhotomap |
|
|
226 | (2) |
|
Export Elements that Write Data to a Client |
|
|
228 | (10) |
|
|
229 | (1) |
|
Sending Image Data to a Client with ExportClientPhoto |
|
|
230 | (2) |
|
Sending ROI Data to a Client Using ExportClientROI |
|
|
232 | (1) |
|
Sending LUT Data to a Client Using ExportClientLUT |
|
|
233 | (2) |
|
Sending Client Histogram Data Using ExportClient Histogram |
|
|
235 | (3) |
|
|
238 | (2) |
|
Chapter 8. Process Elements |
|
|
240 | (22) |
|
|
240 | (6) |
|
Constrained and Unconstrained Image Data |
|
|
242 | (2) |
|
|
244 | (2) |
|
|
246 | (1) |
|
Elements that Perform Algebraic Processing of Image Data |
|
|
246 | (14) |
|
Performing Arithmetic Image Manipulation with Arithmetic |
|
|
247 | (5) |
|
Combining Two Image Sources Using Blend |
|
|
252 | (3) |
|
Generating Bitonal Images with Compare |
|
|
255 | (2) |
|
Using the Logical Process Element |
|
|
257 | (2) |
|
Applying a Mathematical Operation to Image Pixels with the Math Element |
|
|
259 | (1) |
|
|
260 | (2) |
|
Chapter 9. Process Elements that Perform Format Conversions |
|
|
262 | (35) |
|
Creating a TripleBand Image from Three SingleBand Image Sources with BandCombine |
|
|
264 | (2) |
|
Errors and Events Associated with BandCombine |
|
|
265 | (1) |
|
Creating a SingleBand Image from a TripleBand Image Source with BandExtract |
|
|
266 | (2) |
|
Errors and Events Associated with BandExtract |
|
|
267 | (1) |
|
Extracting a Selected Band of TripleBand Data Using BandSelect |
|
|
268 | (9) |
|
Errors and Events Associated with BandSelect |
|
|
269 | (1) |
|
Examples of BandExtract and BandSelect |
|
|
269 | (8) |
|
Using Unconstrain to Change the Type Attribute of an Image to Unconstrained |
|
|
277 | (2) |
|
Errors and Events Associated with Unconstrain |
|
|
279 | (1) |
|
Changing the Number of Levels in an Image with the Constrain Element |
|
|
279 | (3) |
|
|
280 | (1) |
|
|
281 | (1) |
|
Errors and Events Associated with Constrain |
|
|
282 | (1) |
|
Creating Image Data from Colormap Index Data with the ConvertFromIndex Element |
|
|
282 | (4) |
|
Errors and Events Associated with ConvertFromIndex |
|
|
285 | (1) |
|
Converting TripleBand RGB Data to an Alternate Colorspace with ConvertFromRGB |
|
|
286 | (1) |
|
Errors and Events Associated with ConvertFromRGB |
|
|
287 | (1) |
|
Converting Image Data to Colormap Index Data with ConvertToIndex |
|
|
287 | (3) |
|
Errors and Events Associated with ConvertToIndex |
|
|
289 | (1) |
|
Converting Non-RGB Colorspace TripleBand Image Data to RGB with ConvertToRGB |
|
|
290 | (2) |
|
Errors and Events Associated with ConvertToRGB |
|
|
292 | (1) |
|
Reducing the Levels of an Image Using Dither |
|
|
292 | (3) |
|
Errors and Events Associated with Dither |
|
|
295 | (1) |
|
|
295 | (2) |
|
Chapter 10. Enhancing Images with Point, MatchHistogram, and Convolve |
|
|
297 | (37) |
|
|
297 | (6) |
|
Implementing Enhancements not Supported by XIE |
|
|
303 | (2) |
|
Using the Convolve Element |
|
|
305 | (4) |
|
Errors and Events Associated with Convolve |
|
|
308 | (1) |
|
Performing Histogram Equalization with MatchHistogram |
|
|
309 | (7) |
|
Implementation of MatchHistogram |
|
|
314 | (1) |
|
Using MatchHistogram with TripleBand Image Data |
|
|
315 | (1) |
|
Errors and Events Associated with MatchHistogram |
|
|
316 | (1) |
|
|
316 | (16) |
|
|
319 | (2) |
|
False Coloring with Point |
|
|
321 | (11) |
|
Errors and Events Associated with Point |
|
|
332 | (1) |
|
|
332 | (2) |
|
Chapter 11. Geometry and PasteUp Process Elements |
|
|
334 | (30) |
|
|
334 | (1) |
|
Performing Geometric Transformations on Image Data with Geometry |
|
|
335 | (16) |
|
|
341 | (3) |
|
Computing Geometry Coefficients |
|
|
344 | (1) |
|
|
345 | (6) |
|
Errors and Events Associated with Geometry |
|
|
351 | (1) |
|
Using the PasteUp Element |
|
|
351 | (12) |
|
Using PasteUp to Display Thumbnails |
|
|
352 | (10) |
|
Errors and Events Associated with PasteUp |
|
|
362 | (1) |
|
|
363 | (1) |
|
Chapter 12. XIE Errors and Events |
|
|
364 | (53) |
|
|
364 | (1) |
|
|
364 | (6) |
|
|
365 | (1) |
|
Receiving and Processing Events |
|
|
366 | (4) |
|
Handling Events in Xt (Widget) Applications |
|
|
370 | (5) |
|
|
372 | (1) |
|
|
373 | (1) |
|
|
374 | (1) |
|
|
375 | (1) |
|
|
375 | (1) |
|
Soliciting and Handling Events |
|
|
376 | (4) |
|
|
380 | (15) |
|
|
383 | (1) |
|
|
384 | (2) |
|
|
386 | (4) |
|
|
390 | (3) |
|
|
393 | (2) |
|
|
395 | (21) |
|
|
397 | (1) |
|
Handling Errors in XIElib |
|
|
398 | (13) |
|
Implementing a Callback-based Approach to Handling XIE Error Events |
|
|
411 | (5) |
|
|
416 | (1) |
|
|
417 | (13) |
|
|
417 | (1) |
|
|
418 | (1) |
|
|
418 | (2) |
|
Technique Numbers and Names |
|
|
420 | (1) |
|
|
420 | (1) |
|
|
421 | (1) |
|
|
421 | (1) |
|
Using the QueryTechniques Protocol |
|
|
421 | (8) |
|
Using XieQuery Techniques |
|
|
424 | (5) |
|
|
429 | (1) |
|
Chapter 14. Color Allocation, Constrain, Convolution Edge, MatchHistogram, and Dither Techniques |
|
|
430 | (48) |
|
Color Allocation Techniques |
|
|
430 | (11) |
|
|
430 | (1) |
|
Pre-Allocating Cells in a Private Colormap |
|
|
430 | (1) |
|
Default Colormap Allocation |
|
|
431 | (1) |
|
XIE Colormap Allocation Technique Details |
|
|
432 | (9) |
|
|
441 | (10) |
|
|
441 | (2) |
|
|
443 | (8) |
|
Convolution Edge Techniques |
|
|
451 | (4) |
|
Using the ConvolveConstant Convolution Edge Technique |
|
|
454 | (1) |
|
Using the ConvolveReplicate Convolution Edge Technique |
|
|
455 | (1) |
|
MatchHistogram Techniques |
|
|
455 | (16) |
|
|
456 | (1) |
|
|
456 | (10) |
|
|
466 | (5) |
|
|
471 | (5) |
|
|
471 | (1) |
|
|
471 | (1) |
|
Using the XIE 5.0 Dither Techniques |
|
|
472 | (4) |
|
|
476 | (2) |
|
Chapter 15. Colorspace Conversion and Gamut Compression Techniques |
|
|
478 | (34) |
|
Why Alternate Colorspaces? |
|
|
478 | (2) |
|
|
480 | (1) |
|
|
480 | (2) |
|
|
482 | (1) |
|
|
483 | (12) |
|
|
483 | (8) |
|
|
491 | (1) |
|
|
492 | (1) |
|
|
493 | (2) |
|
Comments Regarding Colorspaces and XIE |
|
|
495 | (1) |
|
ConvertFromRGB Techniques |
|
|
496 | (5) |
|
Using the RGBToCIELab and RGBToCIEXYZ ConvertFromRGB Techniques |
|
|
496 | (2) |
|
Using the RGBToYCbCr ConvertFromRGB Technique |
|
|
498 | (1) |
|
Using the RGBToYCC ConvertFromRGB Technique |
|
|
499 | (2) |
|
|
501 | (5) |
|
Using the CIELabToRGB and CIEXYZToRGB ConvertToRGB Techniques |
|
|
501 | (2) |
|
Using the YCbCrToRGB ConvertToRGB Technique |
|
|
503 | (1) |
|
Using the YCCToRGB ConvertToRGB Technique |
|
|
504 | (2) |
|
Gamut Compression Techniques |
|
|
506 | (1) |
|
White Point Adjustment Techniques |
|
|
507 | (2) |
|
Using the WhiteAdjustNone WhiteAdjust Technique |
|
|
508 | (1) |
|
Using the WhiteAdjustCIELAbShift WhiteAdjust Technique |
|
|
508 | (1) |
|
|
509 | (3) |
|
Chapter 16. Image Encode and Decode Techniques |
|
|
512 | (36) |
|
|
512 | (1) |
|
A Simple Image Encoding Scheme |
|
|
513 | (2) |
|
XIE 5.0 Encode and Decode Techniques |
|
|
515 | (1) |
|
UncompressedSingle and UncompressedTriple Encodings |
|
|
516 | (9) |
|
|
517 | (1) |
|
Computing the Width of Scanlines |
|
|
518 | (1) |
|
|
518 | (2) |
|
Image File Formats that Encode Data as UncompressedSingle or UncompressedTriple |
|
|
520 | (1) |
|
UncompressedSingle and UncompressedTriple Encode and Decode Techniques |
|
|
520 | (5) |
|
Bitonal Encode Decode Techniques |
|
|
525 | (19) |
|
|
526 | (1) |
|
|
526 | (1) |
|
Photometric (Radiometric) Interpretation |
|
|
527 | (1) |
|
|
528 | (4) |
|
|
532 | (3) |
|
CCITT Bitonal Image Encodings |
|
|
535 | (9) |
|
Server Choice Encode Technique |
|
|
544 | (1) |
|
|
545 | (3) |
|
Chapter 17. Encoding and Decoding JPEG Baseline |
|
|
548 | (26) |
|
|
548 | (6) |
|
|
554 | (1) |
|
|
555 | (2) |
|
|
555 | (1) |
|
Downsample the Chrominance Bands in TripleBand Image Data (Optional) |
|
|
556 | (1) |
|
Perform a Discrete Cosine Transform (DCT) |
|
|
556 | (1) |
|
Encode the DCT Image Data Prior to Storage |
|
|
556 | (1) |
|
|
557 | (11) |
|
Using the JPEG Baseline Decode Technique |
|
|
568 | (2) |
|
Using the JPEG Baseline Encode Technique |
|
|
570 | (2) |
|
|
572 | (2) |
|
Chapter 18. Geometry Techniques |
|
|
574 | (18) |
|
|
574 | (11) |
|
|
578 | (1) |
|
|
579 | (1) |
|
Antialiasing Geometry Techniques |
|
|
580 | (2) |
|
|
582 | (3) |
|
Using the XIE Geometry Sampling Techniques |
|
|
585 | (5) |
|
Using the BilinearInterpolation Sampling Technique |
|
|
585 | (1) |
|
Using the NearestNeighbor Sampling Technique |
|
|
586 | (1) |
|
Using the Antialias Sampling Technique |
|
|
586 | (1) |
|
Using the AntialiasByArea Sampling Technique |
|
|
587 | (1) |
|
Using the AntialiasByLowpass Sampling Technique |
|
|
587 | (1) |
|
Using the Gaussian Sampling Technique |
|
|
588 | (2) |
|
|
590 | (2) |
|
Chapter 19. Photoflo Backend Processing |
|
|
592 | (44) |
|
|
592 | (1) |
|
Visuals, Depths, and Colormaps |
|
|
593 | (13) |
|
Visual Classes Supporting Read-Only Colormaps |
|
|
594 | (1) |
|
Visual Classes Supporting Read Write Colormaps |
|
|
594 | (1) |
|
Using Xdpyinfo to Determine Visual Support |
|
|
595 | (1) |
|
|
595 | (1) |
|
Obtaining the Server's Default Information |
|
|
596 | (1) |
|
Obtaining Information about Non-Default Visuals |
|
|
597 | (1) |
|
|
598 | (1) |
|
|
598 | (3) |
|
Obtaining the Resource ID of the Default Colormap |
|
|
601 | (1) |
|
|
602 | (4) |
|
|
606 | (10) |
|
|
607 | (2) |
|
Displaying Bitonal Image Data |
|
|
609 | (1) |
|
Non-Bitonal SingleBand Image Data and TripleBand Image Data to Static Visuals |
|
|
609 | (4) |
|
Displaying Non-Bitonal SingleBand and TripleBand Image Data to Non-Static Visuals |
|
|
613 | (3) |
|
|
616 | (17) |
|
A Simple Backend Strategy |
|
|
617 | (5) |
|
Implementation of Backend Routines |
|
|
622 | (11) |
|
|
633 | (3) |
Appendix 1. Element Abbreviations |
|
636 | (2) |
Glossary |
|
638 | (10) |
References |
|
648 | (2) |
Index |
|
650 | (22) |
About the CD |
|
672 | |