METHOD AND DEVICE FOR REDUCING SMEAR IN A ROLLED FINGERPRINT IMAGE

Abstract: A fingerprint image capture system (28) reduces tip smear by ceasing to update a data array characteristic (44) of the rolled fingerprint image behind an advancing freeze column at least about half way from the trailing edge to the leading edge of a finger contact strip.

Description: METHOD AND DEVICE FOR REDUCING SMEAR IN A ROLLED FINGERPRINT IMAGE Background of the Invention The invention relates to electronic fingerprint image capture systems, and, in particular, to a method of reducing smearing in a captured rolled fingerprint image. The traditional method of obtaining a fingerprint image is to first apply ink to a subject's finger, and then to transfer the fingerprint pattern of ridges and valleys to a piece of paper by pressing the finger to the paper. The fingerprint pattern of ridges transfers to the paper, while the valleys do not. To obtain a rolled fingerprint image, a side of an inked finger is placed in a designated area of the paper and then the finger is rolled to its other side on the paper. Opto-electronic systems can capture a rolled fingerprint image without the use of ink. Typically, a series of optical images of a rolling finger on an imaging surface are propagated from an imaging device and converted to digital data. A variety of methods can be used to generate a rolled fingerprint image from the digital data representative of the series of images. One method is disclosed in U.S. Patent No. 4,933,976. According to this method, the propagated images are sequentially stored in the form of digital arrays of image data. Active areas of the arrays representative of fingerprint features are identified as a mathematical function of the stored image data. If adjacent two- dimensional active areas have sufficient overlap, then they are merged according to a mathematical function of the data in the overlap region to form a composite array characteristic of the rolled fingerprint image. The mathematical function in the composite array generating step is an average, a comparison or an average and a comparison of the overlapping data in adjacent active areas. Another method is used in the model TP-600 system, produced by Identix, Inc. of Sunnyvale, California. The TP-600 includes an optical system having a large charge coupled device (CCD) imager that accommodates the entire imaging surface of an optical platen. The CCD output is an analog signal characteristic of light and dark patterns on the imaging surface. When a finger is placed on the platen, the analog signal has lower values (darker) for fingerprint ridge information and higher values (lighter) for fingerprint valley information, similar to what occurs when ink is used for fingerprinting. The analog signal is applied to an analog-to-digital (A/D) converter, the output of which is digital image data used to update the content of an array in image memory by means of a minimum function. Each element in the array initially has a value that represents the light intensity imaged at a corresponding location on the platen. As the finger is rolled across the imaging surface of the platen, the data in the image memory is developed and updated. The minimum function operates by preserving pixel values in image memory that are lower than the corresponding values of the incoming image data. If the value of the current image data is lower than the corresponding pixel value in image memory, then the lower image data value displaces the higher value in the array. Thus, for every location where a finger ridge contacts the imaging surface a lower pixel value (darker) is preserved in image memory. The contents of image memory are output to peripheral devices for storing a captured rolled fingerprint image and for real-time display of the developing rolled fingerprint image. While using the minimum function method of acquiring a rolled print by saving the darkest intensity value will produce a good quality print, free of recognizable artifacts, and will be insensitive to the speed with which the finger is rolled, some areas of the print tend to have a smeared characteristic, reducing the differentiation between ridges and valleys. This effect occurs where the finger slides on the imaging surface while still in contact. The smearing often occurs at the tip of the finger and at the edge of the contacting area. The use of tacky coatings on the contact surface reduces overall slippage, but the rounded geometry of the finger makes tip smear a continuing problem. While smearing is found in inked prints as well as those obtained by the opto-electronic system, it would be advantageous for the opto-electronic systems to improve the clarity of the image in the areas in which slip occurs. Summary of the Invention The invention provides a method of reducing smear in a rolled fingerprint image represented by a rolled image array. The method includes the step of generating a series of frames of an optical image signal, wherein the optical image signal includes data characteristic of light intensities of corresponding locations of an optical image, wherein the optical image includes a fingerprint image of a finger rolling on a surface. The method also includes determining, for each frame of the optical image signal, a freeze column representing a line positioned between leading and trailing edges of the fingerprint image and oriented transverse to a direction of roll of the finger. The method further includes sequentially updating an interim array that is an accumulation of the frames of the optical image signal and characteristic of an interim image of a rolled fingerprint. A current update of the interim array is formed by reducing pixel values of the interim array with a portion of the difference between the corresponding data values from the current frame of the optical image signal and the pixel values of the interim array only if the corresponding data values of the current frame of the optical image signal are less (characteristic of darker features) than the corresponding pixel values of the interim array. The rolled image array is generated by transferring portions of the interim array to the rolled image array in concert with the movement of the finger image in the optical input signal. During each update cycle, a new freeze column is determined at a position near a midpoint of a finger contact area which in turn is determined from the leading and trailing edges of the fingerprint image associated with a current frame of the optical image signal. The rolled image array may be initialized with a trailing portion of a current interim array, the trailing portion being interim array data behind a current freeze column in a direction of finger roll. Each time a new freeze column is determined by a processor in the system, current interim array data between the current freeze column and the previous freeze column is transferred to the rolled fingerprint image array. Alternatively, current interim array data between the previous freeze column and data characteristic of the leading edge of the rolled fingerprint in the interim image is transferred to the rolled fingerprint image array each time a new freeze column is determined. In both cases, the trailing portion of the interim array behind the previous freeze column is not used to further update the rolled image array. Thus, the data in the rolled image array is frozen behind a freeze column that moves in the direction of finger roll and smearing in the rolled fingerprint image due to finger movement behind that column is eliminated. In addition to eliminating smear in the rolled fingerprint image behind the freeze column, the invention preserves the benefits provided by the minimum function in merging a series of frames of the image data signal . Brief Description of the Drawing The accompanying drawings, which are incorporated and constitute a part of the specification, schematically illustrate an embodiment of the invention and, together with the general description given above and the detailed description of the embodiments given below, serve to explain the principles of the invention. Fig. 1 is a perspective view of an image capture device. Fig. 2 is a diagrammatic illustration of the prior art rolled fingerprint optical imaging system of the image capture device illustrated in Fig. 1. Fig. 3 is a functional block diagram of the image capture device of Fig. 1. Fig. 4 is a functional block diagram of a portion of the image capture device of Fig. 1. Figs. 5A-E illustrate a series of optical images of a finger rolling on a platen. Figs. 6A-6E illustrate a series of images represented in the image memory shown in Fig. 3 by an interim data array. The images temporally correspond with the images illustrated in Figs. 5A-5E, respectively. Figs. 7A-7E illustrate a series of images represented in output DRAM by a rolled fingerprint image array. The images temporally correspond with the images illustrated in Figs. 6A-6E, respectively. Figs. 8A-8E illustrate a series of images represented in display VRAM by a rolled fingerprint image array. The images temporally correspond with the images illustrated in Figs. 6A-6E, respectively. Detailed Description of the Invention A smear reduction method for reducing the effects of smearing in rolled fingerprint images is provided. Referring to Fig. 1, the smear reduction method may be incorporated into the operation of a model TP-600 fingerprint capture device 10, manufactured by Identix, Inc., the assignee of the subject matter of this application. The TP-600 includes separate imaging systems for obtaining a rolled fingerprint image and for obtaining a plain, or slap image. The plain fingerprint imaging system 12 produces an analog signal representing the image of one or more fingers pressed to a plain print platen 14, and a rolled fingerprint imaging system 16 that produces an analog signal representing the image of a finger 18 being rolled across a rolled print platen 20. Referring now also to Fig. 2, each imaging system includes an illumination source 22, optics 24, and a large CCD imaging device 26 that accommodates the entire image from the platen surface. In the described embodiment, the CCD imaging device 26 for the rolled fingerprint image is a model TC217 CCD imaging array, available from Texas Instruments, Inc. of Dallas, Texas. Although only one mirror is shown in Fig. 2, optics 24 actually includes a combination of prisms, mirrors, and lenses selected and arranged to bring the image from the platen surface to the CCD imaging device 26. The plain print platen 14 is wider than the rolled print platen 20 to accommodate four fingers rather than one finger on its surface, and its optics 24 are arranged differently to accommodate the larger imaging surface. The purpose of each system is to present a fingerprint image at the surface of a CCD imaging device when a finger is applied to the imaging surface of the platen. Referring now to Fig. 3, the output of the CCD imaging device 26 is an analog signal 32 which is applied to an image capture system 28. The illumination and imaging, and the CCD output convention employed present an image signal that has lower values (darker) for ridge information and higher values (lighter) for valley information. A processor 30 is used to manage the transport of data between and through each functional element of the system and to perform other "housekeeping" functions such as writing text to an image display monitor 60 m the image display and output system 34, intercepting switch closures and performing system start-up and shut-down operations. As will be described in greater detail below, the processor 30 also actively manages the processing of image data as the finger is rolled on the platen surface in forming a rolled fingerprint image. For the described embodiment, a graphic processor manufactured by Texas Instruments, Inc., part number TMS34020, is used. This particular processor supports special functions for processing two-dimensional arrays in memory. A copy of the source code in C language for operating the TP-600 is included in the microfiche appendix. Referring now also to Fig. 4, the analog signal 32 from the CCD imaging device 26 of the imaging system 16 is applied to an analog-to-digital (A/D) converter 36 that is part of image capture system 28. Because the illumination of the fingerprint is not uniform in the scanner, the data values of the A/D output digital data 35 are individually scaled by an equalization look-up table (Equ LUT) 38 according to table values stored in the equalization memory (Equ DRAM) 40. The stored reference values correspond to an image of the surface of a blank platen 20, smoothed to eliminate noise and surface contamination. The output from Equ LUT 38 is an optical image signal 42 in the form of a stream of digital data that can be grouped in frames. The data have values which are characteristic of the light intensity of corresponding locations of the imaging surface of the platen 20. Each frame corresponds to an image of the platen at a different time. The data values are updated about fifteen times a second. Thus, about 25-35 frames of optical image signal 42 are generated during the time it takes for the finger 18 to roll across the surface of the platen 20. The optical image signal 42 is used to update the content of an image memory 44, which holds a 968 X 968 pixel interim data array, by means of a functional element identified as a "minimum function" look-up table (Min LUT) 48. This size array is sufficient to produce an image with a resolution of 600 dots per inch. The inputs to Min LUT 48 are the A/D converter output 35 as modified by Equ LUT 38, which is the current optical image signal 42, and the corresponding old interim data array pixel values 46 which are to be updated. The "latest value" is input from the current frame of optical image signal 42 and the "old value" is input from the current interim data array, as most recently updated by the previous frame of optical image signal 42. In the simplest implementation, the Min LUT 48 computes F 1 ^ ,, the new pixel value 49 of the interim data array at row i and column j , as a minimum, F n l ι 3 = min(I n i :ι , F" "1 ^-) , where I n is the input datum value of the nth frame from the Equ LUT 38 and F 11"1 ^- is the feedback 46 from the image memory 44 from the preceding frame. The output signal 49 of Min LUT 48, for each pixel of interim data array, is the lower value of its two inputs, as suggested by its name. For each datum output by the A/D converter 36 (as modified by Equ LUT 38 to form optical image signal 42) , the corresponding pixel of interim data array in the image memory 44 is updated. It is not necessary to store the digital data 35 output from A/D converter 36 and the optical image signal 42 from Equ LUT 38 as arrays before being processed by Min LUT 48. The values of output data 49 from Min LUT 48 used to update the interim data array depend only on the corresponding datum values of the optical image signal 42 and on the old corresponding pixel values 46 of interim data array. For every location where a finger ridge contacts the imaging surface of the platen 20, a lower pixel value (darker) is preserved. The result of this technique is that as the finger 18 is rolled across the imaging surface of platen 20, an interim rolled fingerprint image is constructed in image memory 44. This process has been found to eliminate artifacts such as fingerprint features or discontinuities that are not part of the true fingerprint . When performing a capture of a rolled fingerprint image, the interim data array in image memory 44 must be initialized since feedback is involved. One way to initialize image memory 44 is to set all the pixel values to a maximum value. Then the interim data array in image memory 44 will immediately reflect any data that is input in the next frame. In another embodiment, interim data array can be initialized by setting up Min LUT 48 as a straight-through function such that its output is the same as the optical image signal 42 input from the Equ LUT 38. The first frame of optical image signal 42 can then update the image memory 44 independently of what is already stored. As the finger 18 is rolled, the edges of the contact area of the finger on the platen may move fairly rapidly with respect to the frame update rate. This may cause some discontinuities to occur between the interlaced fields of the video. Similarly, the tip of the finger often slides as it contacts the platen, causing discontinuities. To resolve this problem, the function loaded into the Min LUT 48 can be modified from a strict minimum such that when the input datum value I n is less than the previous interim array value F n l , the interim array value is reduced by a portion of the difference, F n = F" "1 - K* (F n_1 - I n ) , where K is a factor less than or equal to one that sets how fast the value in a pixel may change. Noticeable improvement in the image quality can be obtained with K in a range of 0.25 to 0.5. For the described embodiment, K is set to approximately 0.33. This function causes the conditions of concern to appear as gray smears instead of jagged discontinuities, since the conditions are often only present for a small number of frames. The Min LUT 48 has a 64 Kb x 8 SRAM and registers to pipeline the input and output. A 64 Kb address space requires 16 address lines. The two 8-bit inputs to the Min LUT 48 are tied to 8 address lines each. Thus, for each set of the two input values there is one corresponding location in the SRAM which contains the desired value to be output. This implementation is very unrestrictive, since any function can be implemented in a tabular form. The different functions to be used in the Min LUT 48 are typically precomputed and stored in a Main DRAM 54 and then loaded into the SRAM when needed. Image memory 44 includes two redundant memories, Min DRAM 50 and Catch VRAM 52. They independently and simultaneously hold the same interim data array for transfer to image display and output system 34. Image display and output system 34 includes a main output memory 54 (located in Main DRAM) and a display memory 56 (located in Display VRAM) that receive data transferred by processor 30 from Min DRAM 50 and Catch VRAM 52, respectively. The display memory 56 is used to provide information to the operator in real-time. The display memory 56 receives image information along with fingerprint placement cursors and text information providing instructional information to the operator. The display memory 56 typically contains less information than that contained in image memory 44 or output memory 54 for reasons of data efficiency, display raster size, and other display limitations. The output memory 54 does not contain text information and finger placement cursor information. This memory contains all the high quality image data. The interim data array in image memory 44 represents an interim rolled fingerprint image, and could be transferred in its entirety with each frame to output memory 54 or display memory 56 to form a rolled fingerprint image array. This is the method of the prior art TP-600. However, if the finger 18 slips on the imaging surface of the platen 20 when the interim data array is being formed, then the rolled fingerprint image will appear smeared, similar to what happens with the ink and paper method of obtaining a rolled fingerprint image. The smear reduction method of the invention reduces smearing in the rolled fingerprint image by transferring to output memory 54 and display memory 56 only a selected portion of the interim data array 46 with each video frame. Typically, an operator will preview the finger image prior to entering a capture mode to obtain the rolled fingerprint image. In order to place the finger 20 properly on the platen 18, it is helpful to be able to center the finger while viewing the image of the finger on a display monitor 60. The operator sets Min LUT 48 to the straight-through function and rolls the finger to one side to prepare for the capture of the rolled image. The image displayed is then not a rolled image but a direct image of the finger 18 on the platen 20. Since the capture mode is entered after a scan button is pressed, the data in the image memory 44 at the end of the preview mode serves to initialize that memory for the capture. Referring now to Fig. 5A, the first frame of optical image signal 42 after capture mode is entered represents an optical image 62a of the surface of the platen 20, including an image of contact area 64a of the finger 18 on platen 20. (The cross-hatching in the drawing indicates fingerprint features.) In Fig. 5B, contact area 64b is to the right of the location of contact area 64a, indicating that the finger 18 has rolled to the right. The contact area 64 continues to move incrementally to the right in Figs. 5C and 5D. In Fig. 5E, the contact area 64e has shrunk in size from previous contact area 64d, as the finger 18 is lifted from the platen 20. As the capture mode is entered, the Min LUT 48 is restored to the modified minimum function, as described above. Referring now also to Fig. 6A, the most recent frame of optical image signal 42 that was passed through Min LUT 48 becomes an initial frame of interim data array, which is characteristic of an interim image 66a that includes interim rolled fingerprint image 68a. Interim rolled fingerprint image 68a, in this embodiment, is the same as the corresponding contact area 64a illustrated in Fig. 5A. Alternatively, interim data array can be initialized with all high pixel values, indicative of a blank, illuminated platen (not shown) . Min LUT 48 can then update interim data array using the modified minimum function, with a first frame of optical image signal, represented by optical image 62a, as one input and corresponding pixel values of the "blank" interim data array as the other input. The resulting interim data array is essentially the same in either case. The interim data array is next updated when the second frame of optical image signal 42, represented by optical image 62b in Fig. 5B, is processed through Min LUT 48 with corresponding pixel values 49 of the interim data array, represented by the previous interim image 66a. The updated interim data array is now characteristic of an interim image 66b that includes interim rolled fingerprint image 68b, illustrated in Fig. 6B. Similarly, Fig. 6C illustrates interim image 66c and interim rolled fingerprint image 68c, which are represented by interim data array in image memory 44 after being updated with the next frame of image signal 42, which is represented by optical image 62c, illustrated in Fig. 5C. Figs. 6D and 6E illustrate respective interim images 66d, 66e and interim rolled fingerprint images 68d, 68e represented by subsequent updates to interim data array. Contact area detection can be done in many ways. One method is to finely segment the optical image signal 42 and then compute the variance of the data values in each of the segments. A segment with a small variance is considered to have no contact. Another way is to threshold each data value and to consider it contacted when the value drops below a fixed level. This is acceptable when the image background is equalized by Equ LUT 38 since then a fixed level corresponds to a consistent degree of contact across the complete image. The bottom or tag bit (bit 0) of interim data array in image memory 44 is allocated to the function of indicating contact. Since Min LUT 48 is completely flexible as to what is programmed into it, the function for the tag bit 0 may be handled separately from bits 1- 7. The tag bit is set to 1 if the input value to Min LUT 48 from optical image signal 42 is less than a threshold T. The information reflecting the contact area 64 is thus available in the tag bit 0 of the Min DRAM 50 and Catch VRAM 52 as a binary images 70a-70e, which have outlines indicated in Figs 6A-6E, respectively, by dashed lines. The accumulated gray-scale interim images 66a-66e are available in the upper bits 1-7 of the Min DRAM 50 and in the Catch VRAM 52 of image memory 44. It will be understood that the processor 30 can determine the binary images 70a-70e even when Min LUT 48 is in preview mode in which the optical image signal is passed through to image memory 44. The contact area 64 of the fingerprint represented by each frame of optical image signal 42 can be modeled most simply by a contact strip 72 , with a left edge 74 and a right edge 76. The contact area 64 usually has a convex perimeter, but we have found it acceptable to consider contact strip 72 to be rectangular-shaped, with the left edge 74 as the column at the left-most edge of the contact area 64 and the right edge 76 as the column at the right-most edge of the contact area 64. The processor 30 determines the right edge 76 and left edge 74 of the contact strip 72 from binary contact image, generally referred to by reference numeral 70, in the Catch VRAM 52. This is done in a time frame comparable to the frame update rate in order to keep up with the rolling finger. One way to determine the contact strip 72 is to examine one row of tag bits across the center of the binary contact image 70. The left-most tagged pixel is found by searching for the first tagged bit in the row from the left edge of interim data array, and the right¬ most tagged pixel is found by searching for the first tagged bit in the row from the right edge of interim data array. The left edge 74 and right edge 76 of the contact strip 72 are then identified with the left-most tagged pixel and the right-most tagged pixel. Dirt or contaminants present on the platen 20 can cause isolated pixels out of the contact area 64 to be tagged in forming the binary contact image 70. The fingerprint is composed of ridges which may align with the line being checked such that a valley will confuse the location of an edge. These problems can be reduced by examining a vertical band 78 that includes a number of horizontal lines near the center of the binary contact image 70. For example, a vertical band 78 of 10 lines spaced 4 lines apart across the middle of the binary contact image 70 can be used. Using only the left-most tagged pixel as the left edge 74 of the contact strip 72, even when using more than one line near the center of the binary contact image 70, can still be too sensitive to the presence of dirt and falsely indicate contact or distort the finger image at the edges of the contact area 64. To mitigate this problem, in one embodiment, a number of tagged pixels are counted from the left side of the binary contact image 70 before establishing a column as the left edge 74 of the contact strip 72. The processor 30 determines the right edge 76 of the contact strip 72 in a similar procedure. The left and right edges 74, 76 of the contact strip 72 are established as the 10th tagged pixel in from the outside edges. The processor 30 supports a special mode which allows processing operations to be performed during a two-dimensional block transfer. One of the operations is a logical OR. Thus a number of rows may be transferred to one final row while performing a logical OR. The destination row thus provides an indication of the contact strip over a band 78 instead of a single line. By identifying the contact strip 72, the processor 30 is able to perform several other new functions. It keeps track of the left edge 74 and right edge 76 of the contact strip 72, and determines when the finger 18 is placed upon the blank platen 20, when the finger 18 is rolled and in what direction, and when the finger 18 is lifted from the platen 20. When the finger 18 is initially placed on the blank platen 20, the left edge of the finger contacting the platen will be beyond the right edge in a direction from right to left. As the finger 18 is placed down, the contact strip 72 will have a positive width between the right edge 76 and the left edge 74. As long as the left edge 74 of the contact strip 72 keeps going left and the right edge 76 of the contact strip 72 keeps going right, it can be considered that the finger 18 is still in the process of being placed on the platen 20, with the contact strip 72 growing. If the finger 18 is already on the platen 20, the contact strip 72 will start at a positive value. This is the most common situation, when the preview mode is used to place the finger 18 and roll it back to the starting position. The finger 18 usually is not raised again before the capture mode is started. The processor 30 determines that the rolling of the finger 18 has begun when one edge of the contact strip 72 starts to go inward instead of outward. For example, when the left edge 74 starts to go right, as illustrated in Figs. 6A-6D, the processor 30 determines that the finger 18 is being rolled right, in which case the right edge 76 is the leading edge and the left edge 74 the trailing edge of the rolling finger. If, instead, the right edge 76 begins to go left, the processor 30 determines that the finger 18 is being rolled left, in which case the left edge 74 is the leading edge and the right edge 76 is the trailing edge of the rolling finger. A small tolerance for jitter is allowed by determining that rolling is begun when the left edge 74 (or right edge 76) of the contact strip 72 moves back from its most extreme position by a small number of pixels, nominally 5. If the left edge 74 is moving right and the right edge 76 moving left for a predetermined number of frames, then the processor 30 determines that the finger 18 is being lifted from the platen 20. The processor also determines from each frame of image signal 42 a freeze column 80 which corresponds with a position in the contact area 64, or binary image 70, located between the left edge 74 and right edge 76 of the contact strip 72 for each frame. In one embodiment, the freeze column 80 corresponds to a position located approximately half the distance from the trailing edge to the leading edge. In another embodiment, the freeze column corresponds to a position located more than half the distance from the trailing edge to the leading edge. Instead of transferring the entire interim data array to output memory 54 only after the finger 18 is finished rolling across the image platen 20, as was done with prior art embodiments of the TP-600 device, the porocessor 30 transfers a portion of the interim data array to output memory with each new frame as the finger rolls. The processor 30 ceases to update a portion of a rolled fingerprint image array in output memory 54 behind the freeze column determined from the preceding frame of optical image signal 42. The freeze column 80 moves in increments from frame to frame with the right and left edges 76, 74 of the contact strip 72 in the direction of roll. Since the data in the developing rolled fingerprint image array behind the freeze column 80 is not updated, any image smearing that develops in a trailing portion of the interim image 62 represented by the interim data array does not show up in the rolled fingerprint image array. Referring now to Fig. 7A, an output rolled fingerprint image array in output memory 52 is initialized with high pixel values indicative of a blank background 82a. Referring now also to Fig. 7B, when the finger 18 starts to roll, the processor 30 updates the output rolled fingerprint image array in output memory 54 by transferring a trailing portion of interim data array from image memory 44. The trailing portion can be, e.g., the trailing portion of interim data array characteristic of interim image 66b, starting with a column corresponding to the trailing edge 74 of the contact strip 72, up to and including the freeze column 80 determined from the current optical image signal. Output rolled fingerprint image array at this point is indicative of rolled fingerprint image 82b, which includes transferred portion image 84b. As the finger 18 rolls, the processor 30 updates the output memory 54 to keep up with the position of the approximate center of the moving contact strip 72. Each subsequent update to the rolled fingerprint image array in output memory is a portion of interim data array block-transferred from image memory 44. In one embodiment (see Figs. 8A-8E and related discussion infra) , the transferred portion of a current interim data array is characteristic of the interim rolled fingerprint image 68 up to approximately the leading edge, i.e., up to a column of the interim data array corresponding to the leading edge of the current contact strip 72. In another embodiment illustrated in Fig. 7C-7D, the transferred portion of the current interim data array from image memory 44 is narrower, and extends only up to approximately the freeze column 80 of the current optical image signal. Fig. 7C illustrates output rolled fingerprint image 82c, with transferred portion image 84c, after a corresponding portion of the current update of interim data array (see Fig. 6C) is transferred to the output rolled fingerprint image array. The transferred portion of interim data array in this instance includes all data to the right of freeze column 80b, i.e. in the direction of finger roll, up to and including freeze column 80c. Similarly, output rolled fingerprint image 82d, illustrated in Fig. 7D, is represented by the output rolled fingerprint image array subsequent to a portion of a subsequent update and interim data array (see Fig. 6D) being transferred. The transferred portion includes all data to the right of freeze column 80c up to and including freeze column 80d. For the final update to the rolled fingerprint image array in output memory 54, the transferred portion extends from a column of interim data array corresponding to the freeze column determined from the preceding optical image signal 42 to at least the column of interim data array corresponding to the most extreme position of the leading edge of the contact strip 72. In all cases, the transferred portion of the current interim data array is characteristic of the interim rolled fingerprint image 68 forward from the line represented by the freeze column 80 derived from the preceding optical image signal 42. For example, the final transferred portion, characteristic of transferred portion image 84e illustrated in Fig. 7E, is data interim data array which is characteristic of a portion of interim image 66e forward in the direction of finger roll from the previous freeze column 84d. Thus, the processor 30 freezes the output memory 54 behind the moving freeze column 80, which is characteristic of a vertical line corresponding to the approximate center of the moving contact strip 72. No updating of the output memory 54 occurs behind that line. While this does not eliminate tip smear, it reduces it by about 50-60%. The smearing in the main part of the fingerprint due to the movement of the back edge of the finger is eliminated. Since smear can still occur between the leading edge and the freeze column 80, the method can be improved by setting the freeze column 80 at a position closer to the leading edge, nominally five- eighths (5/8) of the distance between the trailing and leading edges. The processor 30 tracks the progress of the leading edge of the contact strip 72, which is the right edge 76 in the embodiment illustrated in Figs. 5-7. When the leading edge retreats from its farthest position by a selected number of columns as the finger 18 is lifted from the platen 20, the processor 30 determines that the capture is completed, performs the final update to the output memory 54, and ceases to update the rolled fingerprint image array in output memory 54 any further. This prevents smear as the finger 18 is lifted from the platen 20. Thus, when the finger 18 lifts from the platen 20 or rolls backwards, the processor updates the output memory 54 with the forward portion of the interim data array and ceases any further updates. It is important to note that the processor 30 only passes though a portion of the contents of the image memory 44 to the output memory 54 at any time. This portion corresponds to a narrow strip of the interim data array located adjacent to, but not overlapping with, the freeze column defined by the previously passed through data. It is also worth noting that the data used to update the output memory 54 is not representative of a raw fingerprint image. Rather, the transferred data is representative of the interim rolled fingerprint image 68 produced by the Min LUT 48 in that narrow strip 84 since the finger 18 began to roll. A rolled fingerprint image is displayed as it is captured. The processor moves data to the display memory (VRAM) 56 from the Catch VRAM 52 in image memory 44. The data is then converted to video format through a digital- to-analog converter (D/A) 58 and output to display monitor 60. In the embodiment depicted in Fig. 4, the display monitor has a display area formed by a 720 X 720 pixel array. The processor 30 decimates the image by one pixel column out of four and one row out of four during the transfer from the Catch VRAM 52 to the Display VRAM 56 to fit the image into the display format. Referring now to Figs. 8A-8E, the processor 30 updates the display memory 56 (in the reduced format described above) from the image memory 44 while the finger 18 rolls on the platen 20 to generate a display rolled fingerprint image array characteristic of a display rolled fingerprint image 86. As the finger 18 is being placed down, i.e. in preview mode, the entire interim data array, characteristic of interim image 66a (which is the same as optical image 62a) , is transferred to display VRAM 56 and displayed "live." In Fig. 8A, the live image is image 86a. As discussed above, when the capture mode is entered the data in interim data array representative of the contact strip 72 between the left and right edges 74, 76 of the binary contact image 70 is updated. When the finger begins to roll, a portion of the data in interim data array from Catch VRAM 52, which is representative of the strip behind the current freeze column 80b relative to the direction of finger roll, is transferred to display rolled fingerprint image array. This strip, shown in Fig. 8B as strip image 88b, extends to the far left edge of interim image 66b and is therefore representative of areas of the platen surface that are not contacted by the finger 20. Thereafter, the portions of data from the interim data array representative of a strip of interim image 66 just adjacent to, but not overlapping with the previous freeze column 80b, 80c, respectively, and up to the leading edge 74 of the contact strip 72 are transferred from the Catch VRAM 52 to Display VRAM 56. These strips are illustrated in Figs. 7C and 7D as strip images 88c and 88d, respectively. This maintains a complete image 86c, 86d, respectively, of the developing rolling fingerprint image in the display rolled fingerprint image array in Display VRAM 56. Referring now also to Fig. 8E, when the capture is deemed complete, the portion of the interim data array representative of the forward strip 88e of the interim image 66e, from the previous freeze column 80d to the far forward edge of the interim data array is transferred to the display VRAM 56. This last update may also include data representative of areas to the far right edge of the platen 20 not contacted by the finger 18. Each update is a portion of interim data array that has been processed by the minimum function 48. Many variations of the display method can be implemented with corresponding differences in the display quality. For example, whether to update blank areas to the right and left of the contact area, or whether to update from the output image memory or the catch memory, are options that can be traded-off for processing efficiency. Another alternative is not to display anything forward of the current freeze column 80, for example, if the processing time is needed. After the capture is complete, the operator presses a button to either reject the print or save the print. If the print is saved, the background can be whitened out to present a cleaner image. This is accomplished by comparing the output image with the image remaining on the platen. It is assumed that the operator has lifted the finger before pressing the save button. If a pixel value in the output image is below a corresponding value of a remanent image (i.e. the image of the platen without the finger) by a selected fraction (e.g. approximately 5%) , then the pixel is considered contacted and is tagged accordingly. All pixels which are not tagged are whitened to a consistent background level. This eliminates any latent images that might be present in the background or in the voids within the print . Note that, after each of the image memory 44, output memory 54 and display memory 56 are initialized with data representative of an initial image, there is no place in the system where the optical image signal 42 or portion of the optical image signal is actually stored. All subsequent frames of optical image signal 42 representative of optical fingerprint images from the image system 16 are processed through minimum function 48. It is only a portion of the data in each updated interim data array in image memory 44 that is used to update the output and display memories 54, 56. In the embodiments described above, Min LUT 48 updates an interim data array in image memory 44 from the existing pixel values of interim data array and corresponding data from a new frame of optical image signal 42 input through the A/D converter 18 and Equ LUT 38. The method only uses the bottom bit of each pixel in image memory 44 to indicate contact. As the finger 20 rolls, the processor updates the output and display memories 54, 56, respectively, with a portion of the interim data array representing a forward portion of the contact strip 72 in the image memory 44. Thus, output and display rolled fingerprint image arrays are respectively formed in output and display memories 54, 56. The rolled fingerprint image arrays are characteristic of a rolled fingerprint image. In another embodiment, the interim data array may be developed in image memory 44 such that the accumulation of the optical image signal 42 and therefore also the interim data array is stopped behind the freeze column 80. This could be implemented with hardware (not shown) , for example with a hardware register (not shown) that stores the information identifying the freeze column 80 and with controls to inhibit storage either right or left of the line, depending on the direction of rolling the finger 18. The processor 30 need only update that freeze column 80 and transfer the interim data array to the output memory 54 when capture is complete. The function of freezing the updating of the interim image array in image memory 44 can also be implemented as part of the operation of Min LUT 48. For example, one of the address inputs to the Min LUT 48 can be allocated to selecting the data to be frozen in interim data array or to be updated by Min LUT 48. This bit can be controlled by a comparison of the image column with the freeze column 80, which is stored in a register updated by the processor 30. The smear reduction can be improved by using a more general approach to defining the contact strip, for example determining the contact strip on a row by row basis, but this would take much more processing. The Min LUT 48 could still be used to update the interim data array in image memory 44. The freeze position could be controlled on a line by line basis by storing the freeze column 80 for each line in a memory (not shown) addressed by line number. This memory could be updated by the processor 30 for each field, during the blanking periods of the video or by using dual port techniques. The freeze position for each line is developed from sensing the active range for several lines through the image and then providing a smoothed or interpolated position for the freeze position of the intervening lines. While the current implementation utilizes an interlaced video input, the invention can also be implemented with a camera that provides a progressive scan, i.e., a scan which outputs only one frame, without any interlacing of lines. This would obviate the need for as much modification of the minimum function. Since the progress of the roll is being tracked by the processor 30, it is possible to eliminate some of the button pressing by the operator. This is principally achieved by clearing the image memory 44 and restarting capture automatically under certain conditions, depending on the preferred mode of operating the system. As an example of this method, the operator indicates he wants to save an image by pressing a save button (not shown) or a save foot switch (not shown) after the image capture is deemed complete as in the method described above. To reject the print, the finger is placed back down and rolled again. When the processor detects that the finger is in contact again, the image memory is cleared and the capture restarted. Note that this allows the preview mode to be integrated with the capture mode, provided that the operator lifts and replaces the finger prior to the capture. The processor 30 can be configured to restart the capture when it determines that the finger 18 changes direction the first time. This corresponds well to the normal operation of placing the finger down to center it, rolling the finger back to one side, then rolling the ingerprint . The operator assumes that he will roll all the fingers in order. If he wishes to reject a fingerprint, he presses a button. The operation is to keep placing a finger down without rolling until it is centered, then to roll the finger to one side, and then to roll the finger for the capture. This operation can be determined from the states identified for freezing the image - placing the finger down, rolling left or rolling right, lifting the finger. An additional criterion may be placed upon the amount of roll to differentiate between placing the finger and performing a complete capture. It will be understood by those skilled in the art of electronic fingerprint image capture that the imaging system 16 can be designed in an equivalent embodiment to provide a signal to the A/D converter 36 that indicates fingerprint ridge features by high values and fingerprint valley features by low values. The methods and devices described above would then require only small modifications to accommodate this change. It will also be understood that although the optical image signal is described above as a data stream, the optical image signal can also be formatted as an array of pixels. The following appendix contains C language source code for software for operating an Identix TP-600 fingerprint capture device. A portion of the disclosure of the patent document contains material subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, but otherwise reserves all copyright rights whatsoever. mαRCλ T. RB 4-lβ-19*β 13157 ooc 04-18-1996 13:57 »•*• 3 C-00C 04-18-1996 13:57 foe* 4 79 CMMH.C -tum_grιb_on f 3 ) 6.9 FNGNCAM.C 39 dlaptay_* SI: .CaplύroScrβon OMPand_ker dlaplay_cotuaπo_4_3 su cs» lan.c 40 --load atraif thrtAUT.to t Sraa 113 CSP -M.C 85 initial lie 34020 iβi csr ' iaii.c 41 -•lood~.unn._to HlnSraa < 2 > 79 euiua.c 42 -•turn ' trab en ("3 ) 563 CSf NII.C 86 -aatLf»_eraphic 62 facacAM.c 43 -dlapTay fTrearprfnt < 5 > 87 |..Mt_-onfit cloβr aftola acreen (natal l_font 46 αUMEt.C 44 --tum grab o f ( 4 ) aclr t_font o*t_Tontin7o ~ 45 ..randac diaplay_croaι_ayabol OSOf>tnd_key raadoc~claar croaa lyabol 23 C UER.C 88 -Inlt gap (rabbcr 46 CIAtMR.C 89 |--tϋrn_ϊrab_off < 4 ) u ustamir.c 46 dlaplav laat 47 |..ta*t~out 201 csF lin e 90 -calculate ainfuvLUI to Oraa 5S1 CSP IIl.C 91 |--floorO " ( 62 ) ~ * 10U F-UUM.C 48 fill col 41 6t mmo.c 49 --ala »Tι* ( 7 ) 232 CSP NII.C 92 -calculatc_ttraigrιt_tlιrulUI_to >r .3 NINIO.C 50 --aia ' odr { I ) TO mmo.c 51 |--βlβ_lnc { 9 > 2S2 GSP III.C 91 -calculat*_ta«glng.UT to Draa 94 .•ta init raadόc turn~ilTuύnator on 192 rWftCΛPT.C 52 ia»9*_capturc 85 NINIO.C 95 aia fill c 931 FKUU .C 53 ' inger_typ»_ch«ck 96 |..5ytefTl 1.9 FNGNCAM.C 54 ay ala inil 98 FNCICΛPI.C 97 aitfng(er_kcy_tcr IS NINIO.C 55 -~aia_nc_ι < 10 ) 87 USEIillF.C 98 teat length 27 NINIO.C 56 --aia ai-bacl 99 |..t..t_-idth ro NINIO.C 57 ••aia ' tnc < 9 ) 11 INIO.C 58 - -aia ' odr ( 8 I 143 GJ IIEI.C 100 uait_for_βrab_VtUUnc_v.t,off O0 61 NINIO.C 59 lβ_alϊa t 7 } ... cs .mit.c 60 I o*d_equr*f _to_EquOraa *τβ OST NII.C 61 toad_«Q4.UI_tO_tOUSraa ssi cs» imi.c 62 floorO su ςv air.c 63 ood_atral9ht_lhruUll_to_E« Srβa ( 40 ) 70S FMCaCA»f.C 64 --PravlnitAct iβi v imi.c 65 1 -lood IU11SL_I0 NinSraa ( 2 ) 79 C lUI.C 66 --turn ' frab on <~3 ) 624 FNCNCAM.C 67 laptay'fln β arprlnl < 5 > 111 OLUK-.C 68 ■ - turn_trab_βn_noraιβl < 18 > 857 FNCaCΛM.C 69 <-fι_dal*ct_*dg*a rr NINIO.C 70 -ala fill 71 |..r-Vt*fll *S NINIO.C 72 -aia βova c 71 I..E ttaTl 61 NINIO.C 74 -aia ail* < 7 ) SS NINIO.C 75 -aia'adr ( 8 > 1067 fMNCΛM.C 76 th acan Iiπa 91) lacaCΛM.C 77 -•»a»a cot-ana 61 NINIO.C 78 - aia itx* f 7 ) .7 NINIO.C 79 --aia~*uba«t ( 56 ) U NINIO.C 80 -ala~aov* ( 11 ) U NINIO.C 81 la am < 11 > t* uuaici.c 82 turn_|ra6_0ff ( 4 > 'age 2 PHGRCλPT.TRB 4-18-1996 13:57 /• •* Flle amei fngrcapt.c •* Purpow Routine* to handlt the flngtr laeg* eapturt and uatr fnttrfaca. ** Oitei M/0J/ J •• Authori Joyce Young •• Reviled: ** 12/10/93 • Elltn Yu, rc rott this routIno according new ipac. ** Mlttorys • • 02/25/94 Joyce Young, Added tht fng_r»jι in IMA<i__ΛTTR_T •• 05/10/94 Joyeo Young, Moved dl»p y_camtra() t d(ιplay_flngorprlnt(> here •• 06/03/94 Joyce tounβ, adjuat the o flet of ROLL/PLAIN active taege In •• GλlVRΛM for new board • • 06/09/94 ttlen Yu, add Meflnt PR0T0TYPC difference the herduare ** prototype board and other new revliiona. •• 11/16/94 JY, dalttt CAfl UMKT caae •• 4/15/9) Tl, fined up for tip deaaairlng / Include! •Include <gιpreg.h> #Include <gιptypeι.h> flncludo <gιpglotoe.h> •Include <*tdlib.h> •include "itdtypei.h" •Include "coorddβf.h" •include "g»p_defi.h" •include "gip. -igi.h" •include "lagglotoi.h" •include "aβ*_addr.h« •Include »a-M_allc.h a •Include "alβlo.h- •Include "gip fcne.h" Internal Function* extern VOtO loβd_βqur*f_to_Equ0ra«β ( inege_type_t camera); extern VOID load_LUTT8L_to_MinSrM (IΛTTt *ιre_ptr>; extern VOID toad_ιtrιight_thruLUT_to_equ*''M (VOID); extern keytype_t OJOPβ d.kβy(VOIO); extern VOID letup_dlιploy_acreen (char *n_nιep); extern V010 copy nege_to_Drea (lnage_typ«_t cmri, UIONC lmg_ιtore_βddr, Int ht_b tι«, Int wd_wordι); extern VOID Cβpturβ*creen(IHACI_AT1«_T, ιcβn_type_t, char •); iitem VOI0 Capt_Cιpt$cr(IHA«_ATT«_T ( ihort); extern VOID Cept_Prβv»cr< IKAGI_ATTR_t, short); extern VOID N fng_NlιfnβScr(tNAGI_ATTI_T, ihort ); extern VOID N fnβ.*rev«cr(INACC.ATTa , ihort); extern VOIO »rev_Capt»er< IKAGI UT*_T, ihort); extern VOID »rev.N(ι ngter(IKACI_ATT«_T , ihort); •xttrn VOID PravlnlttcrdNAGCJlTTl.T, ihort); , Ixternol Variable! extern tnage_type_t equref_caxwrι; ftnet Ion Prototype VOID «r _lβ nlt<υβYTl *itore_eddr); eaptu*»_t Imege.eaptura < Image.type.t iwri, ιem_type_t fng.nui, chtr 'niMp, U10N0 lmg_ιtorβ_addr>; VOID dlipliy.caa.ra (Imβgβ.type.t cmera); VOID dlιpity_eolι«m_4_J(NIH •iβυrco.NIM *dlιp,lnt x.lnt w); vc-o dlιplιy_4_Sv(MIN ••ourei.MIN *deιt); VOID *llt_eβt_*--.5<»*l« *dβιt, Int eol, int voluβ); VOID Mve.eolumeOII" •lourea.HIN »τe»t,lnt itart, <nt ιtoρ>; VOID dliplty. lngerprlnt (Image.typo.t eeiaβri, UBYTI •ire.itirtjitr, UIYTI •dit.atart.j-tr); voio flll,.fv*n_plxelι<HI« »deιt,1nt vilue); capture. t Cιpt*canAct( IHAGI.ATTR.T iaiage ); capture.t CaptSeveAct< IKA61.ATTR.T image ); capture, t prevSaveActC IMAGE_ATT«_T Image ); capture.t PrevScanAeU IHAGE.ATTR.T image ),* capture.t PrevlnltΛcU IHAO£_ATTR_T Image ); typedef βnui ( NO.DIR, RtCMT.DU, LEFT.DU > RO .DIRECTION; int fingir.type.checkdcan.type.t ngnmi, imge.type.t •camera, NANO.TYPC *hand, aOLl.DIRECTION •dβimββr); voio (•ρrβvιer._ey_ιcrl))(IHAOϊ.ATlR_T l ihort) ( HULL, Prev.CaptScr, NULL, Prev.niifngler, NULL, MULL ); VOID (•■ fngicr.key.icrC.KIKAtt.ATTR.T, ihort) • ( HULL, alif g.Prevler, NULL, Nlifng.Hlifnglcr, NULL, NULL ); VOID (*cιptιcr.key.ιern)(l>4AC€_ATT«_T, ihort) ( NULL, Capt_»rev»cr, NULL, Capt.CaptScr, NULL, NULL >; apture.t (•prev»cr.key_actl))(IHA0I lT1«.T) • NULL, PrevScanAct, NULL. PrevJavβAct, NULL, NULL ); capture.t (•captιer_key_act U ){ l«AGE.ATTR_T> a ( NULL. CeptScanAct, NULL, CaptSavaAct, NULL, NULL >; /• ftructurei for defined array* In memory */ MIN gvrim; MIN gvram.reducad; IN gminram; MIN dlip.Mlndow; MIN ploin.diip.uindow; MIN data.itore; MIN central.roui; MIM detact.row; MIN check.row; U8TTE detect.bu (1024); / / /• • • fux name! VOID my_alm.init{) ** Purpoie: Initialize the memory ereaa for the grabber vr«i, the diiplay ** and the roll itorage area. •* leturni: None •/ VOIO -iy_mim.initlUBYTI «ιtore.«ddr) ( •(■_ne«Ugvrif»,<(UBYTI •)CRB.VRAM_EN0)*CRBVRAM_UD_BYTES*Zfr*100, •CRIVRAN.WO.ITTII.ROLL.lΛ.PIXILI.ROLl.HT.PIXEll); ■Im.nMttgvraffl.redueod, ((UBYTI •)GRI_VRA«!_IN0>-CRIVRA ) t_lβ_IYTII»ϊ7a76 1 •UIVaAM.UD_BVT|l,aθlL.UO_PIXILt*3/4,ROLL_IIT.PtXIll); ■<n.nou(tgnlnrM, ( (UBYTI •)NIN.0RAM.INO>-NIN0RAM.UD_IYTII*26*100, • «INORAM_U0_BYTII,IOLl_gD_PIXIll,l0LL.HT_PlXILI>; ■l*.neu(td<ιp_Hlndow, ((UBYTE *)0PY_V1IAN_IASE)*0PYVRAM_W0.IYTES*4«12, DPYVRAH.i-D YTCI, 720, 720); ■<«_ii^et(tdfip_M<nckM,tplaln.dlip_Mlndou,0,732' ING.PLAIN.H, l*0_PlA.N r- 12, IH0_P 1N_H); •(•_ne«(ldata.ιtore,ιtore_ack.r,ROLL_U..PIXELI, R0LL_W0. IXELI,R0LL_MT_P1XIH); ■la_r-»w(icentr»l_rowι,al«_edr(lgvrm_,0,400),S*alβ_lne(4gvraa , ROLL_UD_PtXlLI,25); - 32 - ■l«_new<ldet t.ro»ι,detect_buf,0,ROLL.WD.PIXCLI,1); /• /• •• Fine name: V tO •y_alm,inlt() ** Purpoiet Image capture proceii from the given earner. (Roll • 0, Plain • 1). • * Retυrni: type In the tvpedef eιpture_t • / caρturβ_t tmage_ceptur* (lmβge_typβ_t eimera, ιeen_typβ_t fng_nu», char •rtamep, U10NQ img_atore_eddr) ( IMAβl.ATTR.T Image; keytype_t key_pre«ιed; eaρture_t ret; UβYTI •ιre_!tart_ptr, •dat_ιtart_ptr; Int fιr_r_βdgβ,fβr ιι> l_edge; int r_edge,l_edge; int nβw_ιean_Unβ,*een_llnβ; l**ge_type_t fng_eβmβrβ; HAW YPE hand; ROLL.DIRCCTION capt.dlr; /• •* parameter! controlling the itatei of the rolling V Int edge.tol ■ 20; Int ective.threihotd 150; Int enough a 10; Int extra • 2); int max_eolijιna_ln_ιtep a 50; •nua { BLANK, pain, ROLl.aiQNT , ROLL.LCπ, LIFT, GONE ) eιpt_ιtate; /• •* check what earner* to ui* and required direction V If (flnger.typo.ehecktfng.ra n, lfng_cιmβrι, Ihand, lcapt.dlr) I I fng_camera I camera) return(CAPT *ON0_TYPI); ■y_mlm nl t((UBYTE •>lmg_ιtorβ_*ddr); ■l«_ιl xe(lgvrβm,tι f,-i_h); / • •• Image of fiet ihould be metehed In iimge.captureO md dl-plιy_eιmβrιO ** the** pointer* are only ueed for the plain •/ iri.ltirtjtr ι (UIYTI •>ORI_VB_VI_MD • ICR.U • 24 ♦ 7V; dιt_ιtart_ptr ■ (UIYTE •)0PY_V1 _IASE ♦ $CR_W • 4 ♦ 12; lf( camra ■■ PUIN ) < d*t_ιtβrt_ptr *a sca_w • (732 • IHG_P IN_H); ) / • •* Get attribute* of Image end put Into ttruetur*( INACE_ATT«_T ) •/ Image.camera ■ camera; Image.hand a hand; Imege.ltore_eddr ■ img_*tor*_eddr; lmβge.ιre_*ddr ■ *re_ltart_ptr; lmβg*.d-t_eddr ■ dιt_ιtart_ptr; Image.fng_nu* fng_nua; Cepturelcre«n( image, fng_nu«, nemep ); /• ** load the Equ deta that aβrβ created during calibration for ROLL ** or PLAIN from the Dram to Eq-Oraa, Mfien the current calling camera ** la different from the previou* camera, • / If ( equref_ceaera Ia cimeri ) load_equref_to_Eq )ram (eimera); /• ** Walt for key pre*ted •/ key_preι.ed a TYPI IO EIPONIE; ahl le( key_preιιed I TYPE_IAVE_«Y ) < /• ** 1. Copy the itrelght thru function from Dram to MlnSrem ** 2. Turn grabber on •/ PrevlnltAeU Image ); /• •• Prevleu operation •/ key_pre*ιed ■ TYP .NO.REtPONSE; uhl le( keγ_preιιed !• TYPE.ICAN CEY ) { / • ** Oliplay Image by copy fingerprint from grabber VRAM to •• dliplβy VRAM. •/ dl-pley_flngerprlnt (camera, ιrc_ιtιrt_ρtr, dιt_*t*rtj>tr); key_preιιed ■ OMPmd.keyO; lf< (•pr"acr_k*y < .ιcr(kty_pr*ι**dl) |a NUU > (* prevιer_key_ιcr(key_preιιed1)( Imega, DRAU )• l f( (•prev*er.key.act[key_pr*ιιed) ) I * NULL ) < ret a (•prev*cr_key_eettkey_pretted] )< Image ); 1 f( ret ea CAPTJUMrNO )< return( ret ); > ) • end of Mhl le •/ /* *• Capture operation • / If (e*pt_dir -■ RICHTJNR | | capt_dir a. LEFT_01R) ( turn_grab_on_normβl ( image. camera, 1 ); capt_ιtateaiLANK; k*γ_pr*ιt*d a TYP|.N0_lflP0NIE; Mh( le( keyjiretied !• TYPE.-CAN.KEY U key reι*ed la TYPE.tAVEJCEY) C ■Mi tch (capt_ιtιte) < ceie BLANK: / • •• wai t for the f inger to come down •* dUpliy the ect ive area when i i i tented • / i f (fx_detect_edge»(icentrιl_row* # βdge_tol ,ιetivβ_threa old, lr_*dge,ll_edge)) ( capt_ιtateaPRESS; fιr_r_edge r_edge; far_l_edgeal_edge; ) brat-; cate PRESS: /• •* dltpliy the ective area •• imil both edgei begin to roll In the correct direction •• then live the back tide of the active area •• Allow, the roll to go In either direction V If (ft_detect_edgeι(*central_row»,*dgβ_tol,*e Nβ_thr**hold, 4r_edge.ll.edge)) < If (l_edge > fιr_l_edgβ*enough) < *eιn_llne tmooth_ιcβn_Une( ' 1,r_edg«,l_edst,eapt_dlr ( •*»_eol.«nιJn_ttep); /• ** lave the left tide of the active irei ** Don't iφdat* the dltpliy •/ •ava a> colLf-r»(lgvrm,ldata_ιtore,0,ιcιn_llne); e*pt_ltll*«ROU_RIGHT; break; ) If (r_edge < far_r_edge-enough) < ιeen_l lnβ ι ooth_«ean_Une ( - 1 , r_edg β , l_edge,c*pt_oir, aax_coluιrt*_ln_ιtep); /• ** lava the left tide of the act ive tret •• Don' t up ate the ditplay •/ •βvβ_colιwnι(lgvrtm,ldata_ιtore,ιeβn_l lnβ,ι_w); capt_ιtateaRθiL_LEfT; break; * While not rolling Juat diiplay the active col f <l_edge-extrβ >a 0) if (r_edge*βxtrβ < t_w) dltplay_cot-fnn*_4_3(lgvram,ld p_windov, I_edge-ertrt, r_edgβ-l_edge*2*extr*); elie dl*plty_coluπn»_4_3(lgvrem,(d<tp_wlndow, l_*det-extrι, ι_wl_edge*extra); alie If (r_edge*extrι < *_u) dl_pley_eoluιrι__4_3(lgvram,tditp_wirιdow l 0,r_edse*extr*); elie di*plβy_eolumι_4_3(-gvr_n,tdi»p_wlndo«,0,__w); If (l_βdgβ < ftr_l_edga> I (r_βdge > fβr_r_βdgβ) far_r_βdgear_βdgβ; ) otto ( dltplty_coluιnt_4_3(tdatι_ιtore,tdllp_wlndow,0,t_w),' > break; can ROLL_RICNT: I* •ave the area Incremented by the lean line dltpliy right tide of the active eree until the right edge ttopa then lave the right tide of the active area •/ ff (fi_detect_edgei((cmtril_row*,edge_tol,actIve_threιhold, lr_edge,*l_edge)) < n β w_*c*n_Une a *mooth_*e«n_Une<ican_Hne,r_edg*,l_edg«,«IGHT_OI»,.0); I f <new_tcβn_l lnβ > *c*n_l lno) < l β ve_eoln«n*(igvrtm,ld β t β _ιtorβ, ιcan_l ( ne,new_tca-ι_l lnβ) ; •c*n_l lneanew_ιcan_l Inβ; I f ( r_edge*extra « t_w) - 36 - dlιpl*y_eol-_anβ_4_3(lflvr β m,Mlιp_wlndθM, ican., l ine, r_edge*βxtrβ-tcan_l lnβ); dlιpley_eoi ma_4_3 ( 4gvram,ldlιp-w ( ndow,teιn_llnβ, ι_wιcan_llne); /* dltpliy the lean line for debug flU_col_4_3(-dlιp_wlndow,ιcβn_ltnβ,0); •/ ) If (r_edg* < far_r_*dge • enough) ( t»vβ_colum*(lgvrtβ,ld*tt_ttore,tc»n_llnβ,ι_w); dlιpley_eoliMn*_4_3(ld*te_ιtore,tdltp_wlndov,ιc*n_lInβ, •_w*ctn_llne); capt_ιtιtaaLirT; > If <l_edge < far_l_βdge) If (r_edge > far_r_*dgβ) { teve_column*(igvriffl,ldatt_ttore,ιcan_line,ι_w>; dtιplay_eotι_ιrιa_4_3(ld«ta_ιtore,4dl*p_window,»ean_llrιe,ι_w-tc*n_llne); c*pt_tt*t*».IFT; > break; cat* IOI.L_.EfT: /• ** **ve the area Incremented by the tcβrv line *• dltplay left tide of the ictlve area * ■ until the left edge itop* •* then lave the left tide of the active area •/ If (fι_detβet_edgβ*(lc*ntrβl_row*,*dg*_tol,*< * tlv*_thrβ»hold, ( nβw_ιcan_Hne Maooth.tcan.l lnedcan.l tne, r_edge, l_edge,lEf'T >lR,30); I f <new_tctn_l lne « ιcen_l lne) < tevt_eolu«nt :igvrtm,ldatβ_l tore, nβw_ιcan_l lnβ,ιean_l Inβ); tctn_l lnβ"nβw_tc*n_l Ine; If U_*dg*-**trι >a 0) diιplay_columι_4_3(tgvram,λdlιp_wii(iow, l_edge-extrr, •c*n_l lrw l_edge+extre); dltpl*y_uolιmne_4_3(lgvrm,ld<ιp_window,0,tcan_lln*); /* dltpliy the ican line for debug flU_eol.4_3(ldlιp_wlndow,»can_llna,0); •/ > If (l.edge > far_l_edge ♦ enough) ( ιev β _coluant ( lgvrt«,ldata_ttore,0,tcan_llnβ); laplay_col-«r>a_4_3(4rt*ta_ιtorβ,ldltp_ lr«_o , 0.»c«n_l Ine); turn l lu*lr*tor_on < ); ptr e (UlONQ •)PC < _PARΛKETERI; rotlequ_exlltl • •ptr**; ρ>alnaqu_*xlttt ■ *ptr**; /• thli la -tor* vertlon 1.3 loader putt It •/ p*lmequ_exlιtι » *ptr**; palaa.rp_exl t ι • *ptr**; pera_exlιtι » *ptr**; I f ( pera.exliti ) C I f (*ptr I 255) recurιlve_ actor ■ «ptr; ptr**; I f («ptr | a 255) fngr_deil red_ecju_velue a *ptr; ptr**; I f (*ptr |a 255) changlng.threihold a *ptr; ptr**; I f («ptr | a 255) too_dark_v*luβ a «ptr; ptr**; If (*ptr la 255) roll.offiβt a * p tr; ptr**; If (*ptr |a 255) plβln_offιβt a «ptr; ptr**; If (*ptr Ia 255) palm_offιet a *ptr; ptr**; If (*ptr la 255) palm_dβtlred_equ_velue ■ *ptr; ptr**; > /* thll li where vertlon 1.4 and beyond loader keep* It palm*qu_e i*t( *ptr**; pelmwrp_e lι ι *ptr*»; •/ -I ndef PALH_ICANNER inlt.gip.gribber (); eβleulβte alnf.nelUT_toJ>rm- O; cβtcul*tβ_ttralght_thru.UT_to_Dr*m (); cβleutate_tagginglUT_to_Dram (); -elie /• •• Turn off grabber V *(UIYTE •)GRAIIEx_CTRlO_IASE a 0*0; *(UBYTE •)C«ABBER_CTRLO_BASE a 0x0; lo*d_*tralght_thruLUT_to_MlrtSr«-<); -endlf ) /• InitialIiβ.ϊ-lOΣO •/ •Ifndef PAlft_SCAMNER '• / /• " copy the LUTTIL from the given toυrc* addreti (In Dram by BYTE pointer) • * to NlnSram (by LONG pointer) • i la*gβ_ιype_t *c r*f,eemera ■ C*I_CA ERA; /* which eamari equ in Eq-Orβm •/ int roll*qu_*xl*tι a 0; /* 1a*OLL equ βxlttt */ Int plilnequ.ex'.it* a 0; /• U1N equ *xltt* •/ Int p*lmequ_exi_i- ■ 0; /• l Al* equ exlttt •/ Int p*l-Mrp_axtιt* • 0; /* 1»PALN dewerplng exlttt •/ / Local Variable definition •/ /* thl* titi up the defeulti If no parameter file exlttt */ •title Int perι_*xi*tt ■ 0; /• 1a(aage peri file exlttt */ •title ULONO recur*iv*_f»ctor ■ 66;/* tenaltlvlty of capture to field rat* */ italic ULONO fngr_de*lred_eqυ_value a 252;/*v*lu* of blank platen equalliad*/ •tetic ULONO d*tlred_βqu_vιlue a 252; /* value of blank pitten equalliad */ •title ULONO chenglng_threιhold • 13; /* percentage change of final to pott •can Image, if not exceeded will whlte/teg lut the data */ ttatlc ULONO tooj-ark.valua a }; /a t o remove A/D offt*t V •title ULONO roll_off»*t a 10; /a goLL peek hlttogrm v*lu* •/ •title ULONO pl*ln_off»*t a 10; f* PLAIN peak hlttogram value •/ ttitlc ULONO palm_offιet • 10; / ■ PAIN peak hlttogram value •/ •tatle ULONO palm_deιlred_βqu_v»lu* a 252;/*value of blank platen equall ed*/ static ULONO deteet βvβl * 150; /• detection level for active area */ /• External function* extern VOID Intt.remdac (VOID); extern VOIO tnlt_gtp_gr*b *r (VOID); extern VOtO •*nd_eθ-*»*nd_to_βlC (UBYTE ce«-Mnd_to_tend); extern VOIO turn e dturn) ator_on (VOtO); finctlon Prototype! VOID copy_,lmβge_to_0ram {tmβge_type_t camera, UL0NC lmg_ttorι_tddr, Int ht_byte«, Int wd_word*); VOIO lnltl*lll*_34020 (VOID); VOID lo*d_equref_to_EquDrem (lmege_type_t earnera); VOIO load.lUTTBL.to llnSram (UBYTI **re_ptr); VOID lo*d_ttrtlght_thruLUT_to_EquSram (VOID); VOIO β*tup_grephlc (VOID); ttitlc VOID catculi -lnf-nclUT_to_Drim (VOIO); tittle VOIO eιleulHβ_ιtr*lght_thru.UT_to_Dr*m (VOIO); •title VOID ealeul»t*_t*ggingLUT_to_Ortm (VOID); ttitlc ULONO floorO (ULONQ *, ULONO b)j ttitlc VOID load„*qulUT_.to„EOUSr«. (ULONO off**t, ULONO dιrk_offt*t, ULONO detlred); ttctlc VOtO lo*d_ιtr*lght_thruLUT_to_Nln$r*m (VOIO); / /• •* Inltlilli* the Ramdae, the OSP reglttert, tetup the gnphlc ftrct lon* •* and er**t* al l LUT*. •/ VOtO lnltl*lll*_34020 (VOID) ( volttll* ULONO *ptr; •{(WHOM »)DPYCTl) a 0; •ta (" NUA IT "); Inl ..ramdae ()| t*ti-p_gr*phlc ( ); ** Mlenamel gip nlt.e • ' Purpoiei OIP Inltlallxitlon. • • Oatat 08/10/93 ** Authori Joyce Young • • Hlitoryi • • 02/18/04 Joyce You-*, modify the offiet of PLAIN active Image -' 05/05/94 Joyce Young, If Image parameter It 255, let default value " 06/03/94 Joyce Young, adjuat th* offiet of ROLL/PLAIN ective Image in HINORAM for new board *" 06/28/94 Joyce Vowvj, turn lIvninator.on In fnlt<al<ιe_34020, otheru *. ** turning Illuminator off during calibration and then receiving ABORT cceaand will cauae the lllu-inetor off after ABORT done * • 07/14/94 Joyce Young, change default ro(l »ek_llL-ta_level " 101 pleln_peιkjlluβ_lβvβl ■ 10 •• 08/11/94 Tl, fix up offiet* to that they add to the offteti cileuleted ** from the dark level hlttogram Inateed of replacing It. ** 09/05/94 Tt, change tagging to that a 0 change_threιhold value ctueet * • everything to be tagged. ** 09/22/94 JY, move tttup of t*lon_font(CORPUS29) I t*lon_fontCC0HPUS49] from PrlntTltltO to »*.up_gr*phie(), otherwite, If calling ** PrlntTitteO leveral timei, will men up the tιlon_font table ** 09/29/94 TS, fixed error In Equ Sram InitialItitlon • needed to tubtrnct • * out offiet ifter tcallng. Cau*e tevere clipping it white. • * 01/18/95 JY, reed exiitlng of pelm.equ from PC_PARAMETERS •• 01/20/95 JY, delete t-mecetierγ Include ilet ** 01/23/95 JY, load pela equ to EQU_0RAM If file exlttt */ / Include* •Include <gtpreg.h> I'nclude <gtptypeι.h> •Include <gtpglob*.h> •Include "ttdtypβe.h" •Include "gιp_font.h" •include "lmg_d*f*.h" •Include "m*m_addr.h" iInclude >mtm_elle.h I •Ifndef PAU»_*CAJHieR •Include "gιp_lmg*.h" •en If Extern Vtrltbl* definition /• ** variable* for th* graphic •/ extern FONT corρu*29, eorpu*49; Olobet variable definition fONTINfO fontlnfo; ihort iml font d, blgfont d; •nort tml font_chιrhlgh, blgfont_cherhlgh; thort tal font_eh*rwldβ, blgfont_charwide; /* ** va iable! for the image proceiilng • / /US97/07427 - 40 - • * n*w_*c*n_lin* a old_»c*n_llne; > elte If (roll.dlr aa LEfT_0JR) < n*w_medlιn a (tcan_tpllt«lβft * (8-tcιn_tpllt)*right) /β; If (new_median < old_!can_llne) < new_.cen_llne a (fector*new_aedion ♦ (β-faetor)*old_»c*n_lln* ♦ 4)/8; If (new_*c*n_lln* < old_scan_ltn* • max_colum*) new_*ean_Une old_*c*n_lin* • mβx_eolunn*; > tit* new_ιc*n_lln* a old_ιcen_ltne; ) elte new_*can_llne a n*w_madian; r*turn(new_*e*n_llna); ) /• Int tmooth tcan line */ " replace any t tigged pixel! (even value!) in the dettlnatlon iret " with vilue • / VOID fUl_even_ptxelι(KtM *deιt,int value) ( regltter UBYTE *pρ; regliter Int w.JJ; int w.h.ll; w a value; ml»_ιlιe(d*tt,lw,th); for (HaO; »l«h; II**) < pp a mia_adr(de*t,0,li); Jl -; do < If (K'pp t D) *pp • w; / /* end of fngrcapt.e */ ■im_n*w(*ιre_roir*,mlm_adr(*oure*,0,11),4*mim_lne(ιource),w,h/4); mlm_new(td*t_row*,mlm_adr(d*at,0 > i<),3*mim_lnc(deet),0,0); aia_mov*(itrc_rowe,ld*t_row*); ) ) /• dlιplιy.4_Jv •/ / •/ /• •• n*m*ι VOID fI U_eol_4_3(> ** Purpote: fill * column In • rang* reduced by 4/3 • • Raturni: None • / VOID flU_eol_4_3(NIN *deιt, int col, Int vilue) ( reglitβr Int ll.k.dj; regliter ι#ι*ign*d char *d; Int w,h; k a value; ■lm_tixe(dett,tw,(h); d mln_edr(dett,col*3/4,0); d_l a lajnc(deιt); llah; do < •d-k; d*ad ; ) while (--11); ) /• fUl_eol_4_3 •/ / V /* *• Fine namei Int ιmooth_ιcιn_l<ne() ** Purpote: even out the scan line ttep* ind limit them to • mexlmu* ill*. '* Return*i new *c*n IIn* V Int tmooth_*c*n_lln*(!nt old_*ean_l ine, Int right, int left, R0U_0IRECTION roll_dlr, Int max_eol-mns) C Int n*w_medl*n, new_*can_tlne; Int *ean_tpllt 5; Int factor > 4; { new_mediβn a (right ♦ left) / 2; return (n*w_modien); ) If (roll.dlr aa RICMT_0IR) < new_medlan a (*can_ιpllt*right ♦ (β»*c*n_*pllt)*l*f t) /B; If <new_median > otd_*e*n_llne) n*w_*«an_l In* • (factor*n*w_m*dlan ♦ (β-factor)*old_ιe*n_Hne ♦ 4)/8; If (new_te*n_lln* > old_*em_lln* * a*x_columβ) n*w_ιcan_line * old_ιetn_linβ ♦ aax_cotuan*; ) - 42 - C*»* »TYPE_ROtl_tE«T_LITTLE* •CMΠ ■ KOI.; •hand • LEFT; *d*wn**r a LEfT_0IR; break; cat* tTYPE_PUUN_TwO_TMUHBS: •camera a ROLL; •hand RIGHT; •d**m**r a HO.DIR; returnd ); break; cat* STYPE_P INJUGHT4: •camera PLAIN; •hand ■ RIGHT; •detmear NO.DtR; break; cite STYPE_PLAtN_LEFT4: •camera a PLAIN; •h*nd LEfT; •decmear a HO HR; break; cat* $TYPE_P _RIONT_THL»«: •camera a ROLL; •hand a RIGHT ; *d** o*r a NO.DIR; break; ca»* STYPE_PLAIN_L£fT_THUMB: •camera a ROLL; •h*nd a LEfT; •deemeer a MO_DIR; br**k; default t rβturnl 1 ); ) return (0); ) /• lnger ^ type.eheck •/ fine name: VOID dltplιy_4_3vO Purpoaet dltplay the whole fingerprint with a 4:3 reduction In the vertical direction, drop every fourth line Return*: None / VOID ditplιy_t_Jv(NlN ••ourca.HIN *d**t) ( MIN *rc_row»,d»t_row«; Int w,h,ιj,ll; mlm_ttt*(toure*,lw,lh); for (11-0; IMS; !!♦•) ( r*turn(0); ) /• f-_d*t*ct_edge* •/ ' / /• • • Fine mat: ι*ve_eolι_nn*() ** Purpose: block tranafer (elected cotueni of the lource to the Image •• Return: None V voio ιav*_cotLmn*(«IH '$rc,ntn *d*ιt,lnt ttirt, Int Hop) ( Int ι_w,ι_h; NIN ιre_colι,d*!t_colι; ■l-_ιl.*(ιre,lι_w,lι_h); •lm__ub**t(*re,i*rc_colι.»t*rt,0,«toρ-ttιrt,t O; αlm_*ube*t(d**t,ld**t_coL*,*t*rt,0,0,0); mim_mov*(i*rc_eol*,ide*t_cot*); ) /• *av* coluent •/ V /• • * func mate: flnger_type_cneck() * • Purpo**: decode th* finger type, cimeri, whether to detmeer and validity • • Return*: 0 • If no error 1 • otherwi** •/ i nt f lnger_type_check(*c*n_type_t fng_mιa, lawge_type_t 'camera, HANO_TTPE •hand, ROLL.DIRECTiON •detmeir) ( /• *• decode the finger type, camera, whether to deamoer ind vtlldlty •* return (0) if no error •/ twitch ( fng_nu* ) ( CHI STYPE_ROLl_RIGHT_TMU*β: •camri a ROLL; •hand RIGHT; •dee eer a LEfT_DI«; break; caie $TYPE_ROLL_RJGHT_IN0EX: eaae -TTPE_ROtl_RI0HT_NI0OLE: can $TYPE_ROLL_ IGHT_RIMG: eaia BTYPE_R0LL_,«ICNT_ ITTLE: •camera a ROLL; •hand a RIGHT; •detmeer a R|GHT_0IR; break; eat* ITYPt_tΛL_LEFT_TIU»B: •earner* a ROLL; •hand LEFT; •deMMar a R]CMT_D1R; break; cat* $TTPE_ROLL_lEfT_t»EX: cat* ITTPE_ROLL_LEFT_IIID0LE ι cue ITYPE ROLL LEFT RING: r*turn( CA»T_ *ON0_TYP£ ); r*turn( CAPT.IAVCIHO ); func namei Int l_d*tect.edge*() Purpo**t 0*t*rmln* th* right and left *dg«* of the contict itrlp of the fingerprint Return*: 0 • If there Is no contact 1 ■ otherwise nt fz_d*tect_edge*(HIH 'row, Int edge_coιm, Int threihold, Int •rlght.edge, Int # lef t_edge) Int wldth,hιlght, l l ,tun; unelgned ch*r *lp,*rρ; / • •• Get the center row* from th* Image ** Or together all the tag bit* •/ mia_flU(td*tect_row, 0); mlm_movι_e(row,tdetect_row,0x200c); mlm_ιlιe(row, (width, (height); lp a mlm_*dr(ld*t*ct_row,0,0); rp a lp»width-1; /• find th* l*ft edge by edding -p *nd th* right edge by adding down •/ for (liaO; IMwidth; ll*»> < If (*lp»* ( 1) ( »ι_»**; If dun >a edge_count) break; > > •left.edge-ll; for (llewldth'1; ll»>0; II--) ( If («rp-- 8 1) < if (tua >a *dg*_count) break; ) ) •rlght_*dg*a||; /• •• thora la contact If th* right odg* ii f*rth*r right than th* left •• odg* •/ If (•rtght_*dg* > »l*ft_*dg*) r*turn(1); elte •/ lf( key_ore***d •« TYPE.SCANJCEY ) tum_grab_on ( I ag*. camera, 1 ); retum( re*pon**_ml*fng(k*y_ re**e -l ); ) /• PrevSevaAct •/ ** fuc name: CapttctnActO * • Purpo**ι Action* iΛβn SCAN key pre*ιed in capture ter*en, •• Return*: CAPT iOJtESPONSE •• Hfttory: 01-31-94 Joyce Young: Add return velue •/ capture,t C*ptScanAct( IHAC€_ATTR_T Imege ) ( •••• Turn grabber off ••••/ turn_grab_off ( Image. camera); return (CAPT_N0_RESP0NS£); ) / / /• * • func name: CaptSβveActO * • Purpoie: Actlont when SAVE key pretied In capture screen. •• Rβturnβ i CAPT_IAVtlMO/CAPT_WRON0_TYPE * • Hittoryi 02-18-94 Joyce Vou g: Pen cameri In eopy_fmιge_to_Drιm ( ) V caρture_t C*ptS*v*Act( IMAGE_ATTR_T imege ) ( Int wd iord*, ht_bytee, w, h; / • •• grabber ihould ilreedy be off • / I f ( Image. cimeri a PLAIN) ( /•--• Tag the Image* for change* from the ramaindar Imege ••-•/ loed_LUTTβ._to_Mln$r*a ((UBTTE •)FNGR AGGING_IUTTRL); turn_gr*b_on (Image.camera, 1); turn_grab_off ( Image. camera); dltplry_f Ingerprint ( Image. caaa ra, Imege. trC-addr, Image. d*t_eddr); flt l_evβn_plxelι(tplβln_dltp_wlπdow,254); /*••- Download Image to the OSP DRAM • ••*/ wd_word* e PLAIN β βftOB; ht_byt** • WJIIN.HT_BYTEI; eopy_fm*ge_to_Dr*m ( Image. earner*, I igi.it or e_addr, ht_byt*ι, wd_wordι); > alt* I f ( iMg*. camera ea ROLL) ( lo*d_LUTTBL_,tO_Nlr r*m ((UBTTE •)FNGR_TAO0IN0_LUTTBL); tum_gr*b_on_norm*l ( Imege. corner*, i >• turn_gr*b_off( lm*g*.e*m*r»); al»jaov*(lgmfnrιm,ldat-_ιtor*); ■la_*lι*(ld*t*_ιtor*,tw,ih); dlιpl*y_eolunnt_4_3(tdet*_ltora,tdltp_wln κM,0,w); f π i_*ven >lxβlι(idt ιp_wlndow,234); ) el ta - 46 - /• / /• •* Func n*m*ι Pr*vt< *nAct() *• Purpo t Action* when SCAM key pr****d In pr*vl*w tcreen. •• Return* i CAPT ,ojtE$PONSE/CAPT_WRONG_TYPE, no captured Imege* or ** wrong cemeri type. • / capturβ_t PrevScanAcK IHA«_ATTR_T Image ) ( /••-• Turn grabber off ••••/ turn_greb_off( imege.camera ); /• •• Load minfune f rom Dram to MlnSrem • / •If IMG_DEBυC lo*d_ttr*ight_thruLUT_to_EquSram .); load_LUTTBL_to_HlnSrβm ((UBYTE •)STRAIGHT_THRU_LUTTβL); a*it* lo*d_LUTTBL_tO_NlnSr*rι ((UBYTE •)N FUNC_LUTTBL); itndlf r*turn( CAP1_NO_RESPONSE ); ) /• Pr*vSe*Λλct •/ / / /• •• Func name: PrevSaveActO " Purpose: ActIone when SAVE key pretted In preview tcreen. *• Return*: CAPT iOJtESPQ SE/CAPT IISSFNG, no captured Image* or mt*»lng •• finger •• Hlitoryt 01-31-94 Joyce Yociigt Turn on th* grβbbβr I f SCAN key pretted •/ copture_t PrevSaveAct( IKAGE_ATTR_T Image ) ( keytypβ_t key_preιιed; cιpture_t re*ρon**_ai»fng () ( CAPT_NO_RESPONSE, CAPT_«0_RESPONSE, CAPT IO lEtPONSE , CAPT.HISSFNQ, CAPT tlSSFNO, >; /•• • • Turn grabber of f •-••/ turn_grιb_of f( I ige. camera ); key-oreaied • TYPE.NO_RESPONSE; whl l*( k*y >reιted I a TYPE_SCAN_KEY U key_pre**ed I a TYPE_SAVE_ttY ) k*y_pr*tι*d a OSQPond teyQ; l f( (•■lafngβcr.kβγ.βcr βy aaaad. ) l» NULL ) (• mlafng*cr_k*y_*ertk*y_pr****el) )( Imag*. ORAU ); /• *• SCAN key will go to preview tereen, *• w* turn off th* grebber tbove, •* to th* grebber need* to turn on here, otherwtte, th* finger Imege will •• not »how on th* preview tereen l f( eaaairi ee ROLL ) rιmd*c_dl*pt*y_ero*»_*ya4Sol(); •rc_atβrt_ptr • (UBYTE •)«β_V»Jvi_ > BNO; βre_βtβrt.ptr -a ECR . • 30 • TV; d*t_*t*rt_ptr a (UBYTE *)DPY_VllA 1_BASE; d*t_*t*rt_ptr » SCR_ • 4 ♦ 12; I f ( emri aa PLAIN ) { •re_»t*rt_ptr *a 20; d*t_*tart_ptr *a $CR_W • (732 - INC_PLAIN_H>; > load_*tr«<ght_thruLUT_to_EquSr*m ( ); load_LUTTIL_to_HlnSr*r» ((UBYTE •)STRAICHT_TrlRU_LUTlBL); turn_grtb_on ( corne i, 1 ); for (;; ) ( dlι lay_f Ingerprint (camera, ιre_ιtιrt_ptr, d»t_*t*rt_ptr); twitch ( key_type a 0S0Pend_key ( ) ) < cete TYPE_SCΛNJCEY: cote TYPE_SAVEJCEY: c*t* TTPE_AβORT : turn_gr*b_off (cimeri); i f( cimeri aa ROLL ) rmrd*c_e I eir_croit_iymbol ( ) ; riturn; > > ) /• dlιplιy_eemβr* •/ / / /• • • Func namei PrevtnitAetO • * Purpoie: Action* when enter • preview tcreen. • * Return!i CAPT_NO_R£SPONSE, no c*ptur*d imag** • / capture. t Prβvlnl tActC IHACE_ATTR_T imag* ) ( / • •• load itnlght thru LUT from Dram to NlnSrmi •/ «lf IMO.OEBUG loed_itrilght_thruLUT_«"._to_E-"J-raa (); felt* lo#d_LUTTBL_to_«lnSra* ((UBYTE •)STRAIOHT_THRU_LUTTBL); lendlf /• ** Turn (ratibar on 2 frame, otherwlie, th* aecond finger imag* will *• dl*pt*y garbage tine* If uelng altlpt* finger buffer* •/ turn_gr*b_on (Image.cameri, 2); return( CAPT_N0_RESPONSE ); ) /• Prevlnl tAct •/ - 48 - lf( r*t ■■ CAPT.tAVEIKO ) < r*tum( r*t >; > > > /• end of while •/ ) /• end of If •/ > /• end of while */ ) /• l ag*_c*ptur* •/ Func namai VOID dl*pl*y_fIngβrp lntO • Purpo**ι Draw th* fingerprint In reduced form In dltplay window. • Th* fingerprint thru th* TB'* camera I* *tor*d upβlde-down In the OVRAM. • th* horitont*l reduction I* don* tn harduar* • the v*rtlc*l reduction Ii done by dropping 1 of 4 Unei In the roll • and 1 of 2 Unei In th* plain. / VOID dlιplay_ftng*rprlnt (tm*g*_typ*_t cemtrt, UBYTE •ιrc_»t*rt_ptr, UBYTE *d*t_*t*rt_ptr) UBYTE •ire.ptr, •dβt Jtr; Int II; If ( c*m*r* aa ROLL ) ( /• **t up 4/3 reduction •/ dl*pl*y_4_Jv(lgvrem.r*duced,ldi*p_window); > alt* C / • •• Only dltpliy *v*ry othtr t in**) ** »o Increment the toure* irπy 2 I ir***, dett. *rr*y 1 Una •• Th* f lrct dltpliy I In* I* In th* middle of th* tereen. •/ pok*_br*g (BADDR, *rc_*t*rt_otr)j /• BOi *t*rtlng *ddr of toure* trr*y */ pok*_br*g (OASOR, d*t_*tart_ptr)| /• S2t ttirtlng a dr βf datt. *rr*y •/ pok*_breg (SPTCH, PLAIN.ORSVRAN.PITCM); /• Bi t th* pi tch of toure* array •/ pok*_br*g (OPTCH, PLAIN.DPYVUH.PI TCH); /• S.i th* pitch of dett . *rr*y •/ pok*_br*g (DYDX, PLAIN )YDX_VAL)J /* B7ι OX: *rr*y width, OYt *rr*y height •/ •M (" PIXBLT L, L ■ )) > ) /* dl*pl*y lng*rp lnt •/ / / /• •* f-nc namai VOID dltpl*y_c*mβrβO *• PurpoMi Oliplay th* Hell or Plain imag* from th* iven c*m*r* •* (Roll or Plβln) by ualng ιtrιlght_thru function ** R*turn*i None • / VOIO dl*pl*y„c-m*r* (lm*ge_ιype_t earner*) ( kaytypβ.t kβy.typ*; UBYTE •»re_»t*rt_ptr, *d*t_*t*rtj»tr; ml*_mov*(lgvram,idata_*tor*); break; c*t* ROILJIIGHT: •*v*_eolLmn*(lgvr*«,tdata_*tor*, ιean_t ln*, ι_w); break; eate R0LL .EFT : ieve_colunna(tgvram,tdeta_ttori , 0, tcan_l Ine); break; > turn_gr*b_of f (canon); ■lm_move(ldata_*tor*,igmlnram); i f ( (*e*pt»er_k*y_*er (kβy_prβ*ιed. ) I NULL ) (*captιcr_key_!cr(key_prβι»ecrj )( Image, DRAW ); l f ( (•cιpt_er_key_βet .kβy_prβιιβd. ) l a NULL ) ret (*c*pttcr_k*y_*ct (key_pre**ed] )( image ); l f ( ret aa CAPT_SAVEIHG > ( return( ret ); > ) ) /• end of while •/ •111 If ((camera aa ROLL U capt_dtr a. MO_DIR) || emneri aa PLAIN) ( turn_grιb_on (Image.eameri, 1); key_preιιed a TYPE_NO_RESPONSE; whlle( key_preιιed la TYPE_SCAN_rEτ U key_preιιed la TYPE_SAVE_«T) < /• •• Dltpliy imege by copy fingerprint from grebber VRAM to ** dltpliy VRAM. •/ dlιpl*y_fing*rprint (earner*, «rc_*t*rt_ptr, d*t_«t*rt_ptr); k*y_pr*»**d a 0S0P*nd_k*y(>; /• •• turn off the grabber when the ttvi key It pritted •/ tf(k*y_pr**»*d aa TTPE_SAVE_KEY> ( turn_grab_o (eameri); > lf( (•e*ρt*cr_k*y_*cr(k*y_pr**»*cπ) la HULL ) (•e*pt*er_k*y_ιcrtk*y_pr**»*dl)( Imegi, DRAW ); lf( (•e*ptιcr__*y_*ct(k*y_pre***d1) |a MU ) r*t a (•c*ptter_key_ιeUk*y_pr**ι*d.)( Imag* )• If (l_*dg* < f*r _*dg*> f*r_l_*dg* a l_edge; I f (r_*dg* > f*r_r_*dg*) f *r_r_*dg*«r .edge; ) III* < i*v*_colurr«(tgvr*m > td*t*_ttor*,0 > tcin_l lne),' dlιptιy_eotumn*_4_3(ld*t*_*tor*, ( dl*p_wlndow,0,*can_l in*); capt_ttltι» lfT; br**k; et** LIFT: /• *• wait for the active area to go away *• whan It doe*, detect the changed ar*** and ** tag th* final imag* •/ if (fΛ_.iβteet_edge»(*c*ntr*l_row»,*dg*_tol,*etlv*_thr*»hold, lr_*dαe,il_ed«e)) ( ) el** ( turn_greb_of f( Imege. camera); cipt.itateaCONE; > breik; cue CONE : /• •• don't do anything •/ break; d«f*ult: break; ) k*y_pr*ιι*d a 0S0P*nd_k*y()j /• ** fix ι_p th* d*t* ttora In en* th* **v* k*y It praatad •* before the end of the roll ** Then turn the gr*bb*r off and ov* th* deti.ttor* •• back Into the grabber min drβ . •/ l f(kβy_pre»*ed •■ TYPE_SAVEJCEY) ( switch (eιρt_ttιt*> { e*** BLANK: eat* PRESSi voio lo*d_lUTTBL..to tln8r*m (UBYTE *ιre_ptr) ( r*gi»t*r ULONO «d; regla ar UBYTE *•; reglitir LONO I I ; i ■ *re_ptr; d • (ULONO *)M1N_SRAM_BASE; , II a 6.Ϊ-0; do •d** m *%**; whl l* ( - - i i ); ) /• lo*d_LUTTBL_to_NlnSr*»ι •/ / */ /• •• C«leul*t* th* Min firction and ttor* to th* Dr*n, *• lettr wi l l copy to MinSrcm • / VOID eιleulιt*_mlnftιιelUT_t._Oram (VOID) ( UBYTE ι_d, mm, *ptr, out; ULONG cond; ptr a (UBYTE *)NIHFUNC_LUTTBL; for ( m*m a 0; mm < 2)6; man** ) for ( *_d a 0; *_d < 2S6; *_d** > < eond (UBYTE)f toorO (mam, a_d) * r*cur*ive_f*ctor; I f ( cond »• SO ) out a mm* • (eond * SO) / 100; •l*« If ( eond a 0 > out a (UBTTE>floorO (ma, I); tli* out a mam; if (*_d < detect evel) • ptr** a out I 1; •I** •ptr** a out t 0«fe; > ) /• e*leul*t*_mlnfuncLUT_to_Or*m •/ / • •• C*tculιt* th* Straight Thru and (tor* to th* Dram, • • later will copy to NlnSri V VOIO c*lcu(*t*_*tr*lght_thruLUT_toJ>r*m (VOID) ( UBYTE a.d, mm, *ptr; ptr a (UBTTE •)STRAIGHT_THRU_lUTTSl; for ( mm a 0; mm < 216; mi n ) for ( » ύ a 0; «_d « 256; *_d*» ) I f (• d < ISO) - 52 - •ptr** • a_d I 1; •l*« •ptr** a a_d 1 Oxf*; ) /• cιleulβtβ_ιtr*lght_thruLU7_to_Dr*m •/ /* •* Cilcullti th* Tagging Function *nd ttore to th* Dram, • • l*t*r will copy to NfnSram • / VOIO eιleul*t*_t*gglngLUT_to_Oram (VOIO) ( UBYTE ι_d, mm, "ptr; UBTTE w; ptr • (UBYTE •)FNGR_TAGGING_LUTTBL; for ( mem 0; mm < 2S6; mm** ) for ( ι_d a 0; β_d < 256; *_d** ) ( I ( Cheng ing_threthold > 0) < w a ((UL0NG)ι_d * (UL0NG)(100 • ch*nglng_thre*hold) / (ULONG) 100); If ( (w < mm) | | (ι_d < too_dark_vιlue) ) •ptr** a mm 1 OxFFFf ffFE; /• untig (whi te) •/ •lit •ptr** a am I I; /• tig (dirk ) •/ ) • It* •ptr** a ne | 1; > ) /• c*lcul*t*_t*gglngLUT_to_Oram ■ / / / / • •* Copy img* f rom Nlrtran (2048 * 1024) to Orem (ROLL : 76, 976. . . or *• PLAINi UOO, 1600. .. cont inuoualy) . •• Th* img* I* up* Id* down in Nlrfirm *nd I* ttorβd to Dram rlghttld* up • / VOIO copy_lmg*_to_Dram (lmge_type_t camera, ULONG img_»tor*_*ddr, int ht_byt**, int κd_words) ( Int II, JJ; ULONO •ιre_ptr, *d*t_ptr; /• •• calculate th* offaat of th* *ctiv* Imag* •• NOTEi img* of ι*t in copy_lmg*_toJ)r*m(), lo*d_equr*f_to_EquOrm(), •• proc*ιι_eιllbrιtlon() ihould be th* t*m. •/ d*t_ptr a (ULONO •)lmg.itor»_*ddr; *rc_ptr • (ULONG •)MIN_0RAM_BASE; If ( earner! aa ROLL ) < irejitr *a MlN0RAM_UO_WOROS • (ht jytβl ♦ HIN0RAM.R0LL_R0W_B.0ff SET ) ♦ MIN0RAM_R0lL_C0L_W_0f fSET; /• 512 • (960 ♦ Jβ) ♦ 24 •/ ) - 53 - •lie < •rc_ptr *a MI DRAM_WO_W0RDS • (ht.bytet ♦ M!N0RAM_PLAtM_R0W_β_0FFSET) ♦ NIN0RAM.PUIN_COL_W_OFFSET; /• 512 • (9.'6 ♦ 31) ♦ 39 •/ ) for ( II a 0; II < ht.byt**; II** ) ( for ( JJ ■ 0; JJ < wd.word*; jj** ) •d*t_ptr»* a *»re_ptr**; / • •• go to th* beginning of the previou* row •/ *rc_ptr -a MINORAM_WO_UOROS * wd.wordi; ) ) /• eoρy_img«_to_Or*m •/ / / /• ** copy th* equal it* reference of the given caπwr* from the Or am to EquOram V VOIO load_*quref_to_Ec ram ( imβgβ_typβ_t eameri) ( ULONG »tre_ptr, •dιt_ptr; ULONG of tet ovel; Int wd.wordi, ht_byt*»; Int II, J], *qu_*xt»tt; ULONG dark.offiet a 0; regtitir ULONO *t,*d; If ( cemra aa ROLL ) ( ht_bytβι a ROLL_NT_BYTES; wd.worda • ROLL_UD_WORDS; •rc_ptr a (ULONG *)ROLL_EOU_REFTBL; *qu_*xi*tt a roltequ.βxliti; o fiet.levet a rolt.offiet; ) elte ( ht.bytei a PLAIN_HT_βTTES; wd.wordi a PLAIN -O_W0R0S; ire_ptr a (ULONG •)PLAIN_EOU_REFTBL; *gu_*xlιtι a pl*in*qu_*xi»tt; offιet_level a pl*ln_o tit; ) If ( *qu_*xl*tt ) ( /• •* if the equellmlon r*f*r*nc* exlttt w* get the velue of the •• dark offiet calculated from the peik level of •• th* dark img* latogrm. •/ dark_off**t a «(uβYTE *)*re_ptr; /• •* Th* Img* at th* Ecf-Oram ihould b* ixictty •• MlrOrtm. So u*« *ll •• Mlrørtffl deftnei. - 54 - ** calculata th* offaat of th* ac lv* Img* *• NQTEi Img* off**t In eopv_lmg*_to_Drm(), *• load.equrif.to.EqtOrmO, proc*tt_cιllbrιtlon() ihould be •* the »*m. •/ d*t_ptr a (ULONO •)E0U_0RAM_SASE; If ( camr* aa ROLL ) ( d*t_ptr ♦• MllβRAM_WO_WORDS • (ht.byt** ♦ NIN0RAM_ROLL_ROW_B.OFFSET ) ♦ MINORAM_ROLL_COL_W_OFFSET; /• 512 • (960 ♦ 3β) ♦ 24 •/ > •It a ( d*t_ptr ♦• NINORΛM.UD.WOROS * (ht.byt** » MtNORAM.PLA .ROW.B.OFFSET) ♦ NINORAM.P tN.COL.W.OFFSET; /• 512 • (976 ♦ 31) ♦ 39 •/ ) /• *• tr*n*f«r th* byt** to th* word* V • a *re_ptr; liaht_bγt**; do ( d a d»t_ptr; JJewd.wordt; do ( •d** •»♦*; ) whil* (--J|); d*t_ptr -a MI DRAM.WD.WOROS; > whl l* (-- I I ); • If IMO.OEBUG lo*d.(tr*lght_thruLUT_NEM_to_EquSr*m (); «*lt* lo*d_*quLUT_to_EOUSram (o f»*t_l*v*l ,d*rk_of ft*t,d*»lr*d_*qu_v*lu*); lend If ) •Itt ( load_*tr*ight_thruLUT_to_EquSrw (); > *qur*f_e*m*r* a camera; ) /• load_eca_r*f_to_E- >ra* •/ •* β /• PALM.SCANNER */ / / /• '* Calculate tha Itraight Thru and atora to tha Hlπtram for PALH acanπar • / voiO toad_*tr*lght.thι-jLUT_to_M»nSrm (VOID) ( ULONO a_d, mm, «ptr; ptr a (ULONG *)MIN_SRAM_BASE; - 55 - for ( mm a 0; mm < 256; mm** ) for ( » i • 0; *_d < 256; *_d** ) < •ptr** • a_d J 1; > > /* lo*d_*tr*lght_thruLUT.to_Mln$rm •/ / •/ /• '* copy th* equal lie reference of PALM from the Dram to Eq tran • / voio lo*d_Mla_*cjur*f_to_Ecf-Or*m (VOID) ( USYTE ••re.ptr; ULONG *dtt_ptr; Int I I ; ULONG dark_off**t; I f ( pelmcj.exlltl ) ( •rc_ptr a (UBYTE *)PALM_EOU_REFTBL; dlt_ptr a (ULONG •)EOU_0RAM_BASE; /* •• we get the velue of the dark offtet calculated from the peak *• level of the dark image hlttogram. •/ dβrk.offiβt *(UL0NG *)trc )tr; ιre_ptr *a 7; for ( II • 0; II < PALM_UO_P ELS; II** ) •d»t_ptr*» a *»rc_ptr**; «lf IKG.DEBUG lo*d_*tr*ig t_thruLUT_MEM_to_EC Srm (); •alt* to»d_ec .UT_to_EQUSrem (pβl .o ιιt,dβrk_of tβt,deιl ed_equ_veluβ); IandIf > •la* load_βtr*tght_thruLUT_to_EquSr*m (); *qur*f_c*mr* a PALM.SCAN; ) /• lo*d_*qur*f_tO_EquDr*m •/ len If /• PALM_SCANNER •/ /• ** below ft-nction* *r* common for f lng*r »c*nn*r »nd palm *eann*r •/ / / / • • * Calculate the equallie LUT TABLE end *tor* to th* EQU.SRAM •/ VOID lo*d_*quLUT_to_EOU*r*m (ULONO off**t, ULONO dark_eff*«t, ULONO d**lr*d) ( ULONO *_d, mm, *ρtr, out, w, **; - 56 - ptr e (ULONQ *)EOU_SRAM_BASE; for ( *_d a 0; a_d < 256; *_d** ) for ( mm ■ 0; mm « 256; mm** ) ( M a f loorO (mm, dark.o iet); I f ( ee la 0 ) < out • (UL0N0)(de*l r*d*off**t > * f loor0(*.d,dark_off**t) / ee; I f (out > of flit) out a out • of fiet; •lit out a 0; ) •t*« out a 254; I f ( out < 0 ) out a 0; I f ( out » 254 ) out a 254; •ptr** a out I 1; > ) / • to*d_*quLUT_to_EOUSrm •/ • Cileulit* th* Straight Thru of new Imege ind ttore to the Equ Sram / 010 load.ttralght.thruLUT.to.EquSrm (VOID) ULONO a_d, mm, *ptr; ptr • (ULONG •)EΘU_SλAM_BASE; for ( ι_d β 0; *_d < 256; ».d** ) for ( m*m 0; mm < 256; mem** ) •ptr** ■ *_d I 1; > ) /• lo*d_«tr*lght_thruLUT_to_Equirm •/ 'I IMC.DEBUG / / / • •* Cilculat* the Straight Thru of mmory't img* end ttore to the Equ Srm • * NOTEi Thll routine lι for debugging purpoie V VOID lo*d_ιtr*ight_thruLUT_MEM_to_EquSr (VOIO) ( ULONG *_d, mm, *ptr; ptr a (UL0N0 •)EOU_S*AM_BASE; for ( *_d a 0; *_d < 256; *_d** ) for ( mm a 0; mm < 256; mm** ) - 57 - < •ptr** a mm I 1; > > /• load_itr*tght_thruLUT_*M_to_Equ*rm •/ Rendlf / /• •* Calculate the diviilon to gat rid of th* overflow ULONO floorO (ULONO a, ULONO b) ( If ( a >a b ) return (• • b); •It* return (0); ) /• floorO •/ •• / Setup the batlc graphic function void tetup.grephic (void) ( iit.conftg (0, 10); cl*ar_whol*_*creen(); Mlfont.ld a InttiU.font Ucorpu.29); bigfont.fd ■ imtall.font (lcorpu*49); t*lon_font .CO*PUS29) a ln*t*t l_font ((corpuι29); t*len.font (CO«PU*49) lnet*l l_font (icorpu*49>; tetect.font (mlfont.ld) ; get.f ont Info (mlfont.ld, tfont lnfo); •mlfont.chirhlgh a fontlnfo.charhtgh; •mlfont.chirwtde ■ fontlnfo.cherwfde; •*l*ct_font (blgfont.id); get.fontlnfo (blgfont.id, tfontlnfo); blgfont.eharhig t a fontlnfo.charhigh; blgfont.charwlde a font Info. charulde; /* **tup_gr*phic •/ /• end of gtp Inlt.e */ - 58 Fi le na : u**rintf .c Purpo**: Uι*r lnt*rf*c« on ictnner for telon 1000. Oete: Jan-05-94 Author: Ellen Yu Hfitory: 05-12-94 Joyci Young, fill HirOram with OxFFFFFFFF It not needed. 06-13-94 Joyce Young, add I 1 Ifndef NPA for NPA 06-30-94 Ellen Yu, turn grebber on 2 frame in PrevlnltAet 09-12-94 Joyce Young, add dliptay.textO to dltpliy generil menage to call text.outO t ken]I.out() leperetely 09/22/94 JY, move **tbp of t*lon_font(C0RPUS29) t t*lon_font(CORPUS49) from PrlntTltl*() to •*tup_gr*ρhlc(), otherwite, if calling PrlntTttleO leveral tlmei, will mat* up the talon.font table 11-15-94 JY, delete flfndef NPA, to keep dltpliyIng MlNfinc Imge 11-17-94 JY, add text.lengthO to get text length to cell text_wldth() t kanJI.lengthO teperately 11/18/94 JY, delete CAPT.ABORT can 12-21-94 ET, fixed dltpli Ing MlNfine Image 01/21/95 JY, delete vmecesiarγ Include filet 02/17/95 TS, moved out button ection routInet to fngrcapt Include* (Include "ttdtypet.h" llnelude "eolordef .h" flncludo "coorddef .h" llnelude »g»p_d*f*.h» llnelude "gtp. ont .h" flncludo "gip.text.h" llnelude ■ Imgglobe .h" llnelude "m iUc.h" External funct ion* /• Prototype VOID PrintTitl* (VOIO); VOIO dl*pl*y_t*xt (SHORT xx, SHORT yy, VOID •»trlng, SHORT knj.font); SHORT Mxt.length (VOtO ••tring, SHORT knj.font); /• Global V*r* / SCRTEXT.T tl tl*t*xt(] ■ ( ( C0BPUS49, GREY6, WHITE, TITLE_TXT_X, TITLE.TXT.Y, TI TLE.TXT.X, T I TLE.FONT.H, 0, TITLE XT >, { CORPUS49, CAIT4. WHITE, COPYIUGHT_TXT_X, C0PTRIGHT_TXT_Y, COPYRIGHT.TXT.X, COfYEICHT.FONT.H, 0, COf>Y«tGNT_TXT ), ll fndef PALM_SCANNER ( CORPUS29, 0REY6, WHITE, VERSION_TXT_X, VERSION.TXT.T, VERSION.TXT.X, VERSION.FONT.H, 0, FNGR_VER.TXT ) fall* ( CORPUS29, GREY6. WHITE, VERSION.TXT.X, VERSION.TXT.Y , VERSION.TXT.X, VERSION_FONT_H, 0, PALM_VER.TXT > aβndlf ) ; / /• • • Dltpliy th* given ttring on th* (xx, yy) petition for either Engtiih or •• kanjl • / VOIO ditpley.text (SHORT xx, SHORT yy, VOID •ttring, SHORT knj_font) ( •Ifndef KANJI tβxt.out (xx, yy, (ehβr •)*tring); «el*e kanjl.out (xx, yy, (SHORT *)ιtrlng, knj.font); le dif ) /• ditpliy.tixt •/ / /• • • Get the length of the given ttring either for Englftn or for Kmjl */ SHORT text.length (VOIO 'ttring, SHORT knj.font) ( thort txt.w; fl fndef KANJI txt.w a text.width ((char •)ιtrlng); ** lie txt.w a kanj l.lβngth ((SHORT *)ιtrfng, knj.font); lendi f return (txt.w); > /• tβxt_lβngth •/ /• • • • • • • • • « • • • • a * fine nmne: PrlntTitleO 4 * Purpoie: Dltpliy the TALON 1000 title end copyright a * Dete: Jen-05-94 a * Author: Ellen Yu voio PrintTltte (VOID) ( SCRTEXT.T 'txtptr; ihort txt.w; /• •* Company title •/ txtptr a Itfttetext(O); **t_colort( tιtptr->fcolor, t«tptr- >bcolor ); - 60 - »*t*ct_font( t*lon_ ontttxtρtr-> ont) ); txt.w • t*xt_wldth ( txtptr->*trptr >; txtptr « >xpo*n ■ (SCR.W • txt.w) / 2; t*xt.out( txtptr->xpo»n, txtptr-»ypo»n, txtptr->»trptr ); /• •• Copyright •/ txtptr Ititlβtβxt O) ; tet.colortl txtptr->fcolor, txtptr>>bcotor ); ■elect.font( t*lon_f ont [txtptr- >fontl ); txt.w a text.width ( txtptr-»trptr ); txtptr-axpotn a (SCR.W • txt.w) / 2; tιxt_out( txtptr->xpoιn, txtptr->ypoιn, txtptr->ιtrptr ); /• *• V*r*1on and type of tcemer •/ txtptr a tt l tleteκt (2) ; tet_colorι( txtptr->feolor, txtρtr-»bcotor ); ιelect_font( t*lon.font (txtptr->fontJ ); txt.w a text.width ( txtptr-ntrptr ); txtptr->xpo*n a (SCR.W • txt.w) / 2; t*xt_out( txtptr->xρo«n, txtptr->ypotn, txtptr-»ttrptr ); ) /• PrintTltl* •/ /• end of uterlntf .e •/ Fi t* n*m: almio.c Purpoi*: Routine* for handl ing memory imge* In the 34010. Oatti Oet -05-93 Author: Tom Sartor Hlttory: Include! *include "mlmlo.h" vold byt*blt(),byt*fll(); void mim_n*w(d,*,l,w,h) N1H »d; imlgned chir *e; int l,w,h; < d->! a β d->l a I d->w a u d->h a void «lm.*ub!it(i,d,x,y,w,h) MIN »ι,«d; int x.y.w.h; ( d->l a |->l; d->β • (ι->e)*x*y*(d->l); d->w a w; d-»h a h; ) void mim.move(ι,d) MIN •ι,*d; ( byteblt(ι-»ι,(ι->l)«3,d->*,(d->l)«3,*->h,»->w,0x000c); ) V void ■lm_mpv*_e(t,d,e) MIN •«,• ; Int c; ( bytebtt(ι-»a,(ι->l)«3,d->e,(d->i)«3,ι->h,ι->w,c); ) • / iralgned char * mim_adr(*,x,y) MIM •*; Int *,y; ( r*turn((*-»*)*x*y*(*->l)); void ■<a_*l.*(ι, w, h) "IN ••; •w a *->w; •h a !->h; • / nt ala.incdJ IM *ι; rιturn(ι->l); void alm.fllKd, v) IN »d; nt v; byteffl(v40xff,d->β,(d->i)«3,d->h,d->w,0x000c); void miβ.fllt_c(d, v, e) IM *d; nt v,e; bytβfll(vt0xff,d-»*,(d->l)«3,d->h,d->w,e); V end of alalo.e •/ /• " Fllβnβmi grabber.c *• Purpo**! Routine* to handle the Orabber. ** Datai 11/16/93 ** AuthorI Joyc* Young ** Hlttory: • • 05/05/94 Joyc* Young, Add m«k r*gl*t*r for dltpliy (GRABBER.CTRL1.BASE) • * 01/04/95 Ellin Yu, Change Identetln ityie. • • 04/13/95 t* • added different turn.grβb.on.norml, modified turn.off, • • and moved prototype* to gip.func.h •• 04/19/95 EY • Added commentI. V •include "itdtypei.h" •include "lmg_d*f*.h a llnelude •mm.eddr.h" •Include •gtp.fine.h" / / / • •• Inlttill.e the GSP Grabber: ««tup the Video Control and Grabber Control. • / VOIO inlt_g*p.gr*bb*r (VOID) ( /• •• Setup the Video Control: ** read the Sy*t*m Resource* (addre** It th* »amβ at Video Control), •• If th* value of the SVGA Sync input detected (bit 6) it 0 (normal It 1). * • then tit Video Source a* External Syne Source (bit1-0 • 01), otherwlte, ** lit at Internal Syne Source (blt1-0 • 00). V •(ULONO •)Vt0EO_CONTROL_BASE a 0x00000000; •{ULONO •>GRABβER_CTRLl_βASE • OxffFFFFFF; /• •• Turn th* βrebber OFF */ turn_gr»b_off (ROLL); > /• Inlt.gtp.gribber •/ / / /• • * Turn Grab off, potting Grebber »t*tu* tilt off (bltO a 0). V VOID turn_gr*b_off (<mg«_typ*_t earneri) ( •Ifndef OISABLE.GRAB /•••• Be mr» bit 7 b* c(**r*d, no Img* reduction ■ • • / If ( cmπ aa ROLL ) •(UBTTE •)GAA*βER_CTRL0_βASE a 0x70; •(UBYTE •)GRAB8EI.CTRL0_BASE OxEO; / • *• wait for Crab (• dItabled (BITO bocomei 1) •/ whi te ( l ((*(UBTTE *)GRABBER CTRL0 BASE) I 1 ) ) - 64 - /• •• wait for th* VBLANK *t*rt •• NOTE: n*ed to wait VBLANK off/on, otharwi**, Grebber tome11met do** not •* r**tly turn off •/ whll* ( 1(("(UBYTE •)GRABBER_CTRLθ_βASE> I 2) ) whit* ( ((*(UBYTE *)GRA8BER_CTRL0_BASE) I 2) ) * •endif ) /• turn_gr*b_off •/ /• /• ** Turn Crabber on with reduced ditplay *• polling Grabber ttatut till on (bltO 1). */ VOID turn.grab.on (Imβge.type.t earner*, Int fr*me.nιjιι) ( •Ifndef DISABLE.GRAB Int II; if ( camera aa ROLL ) •(UBYTE *)GRASBER_CTRL0_BASE a OxFF; elie •(UBYTE •)GRABBER_CTRLθ_BASE • OxEF; /• •• wilt for Grtb It enabled (BITO become* 0) •/ while ( ((•(UBYTE •)GRABBER_CTRLO_BASE) I 1) > for ( II a 0; II < framβ.πu ; II** ) ( while ( I(('(UBYTE *)GRABBER_CTRLO.BASE) I 2) ) hile ( ((*(USYTE •)GRABBER_CTRLO_BASE) I 2) ) ) *endlf ) /• turn.grab ^ on •/ /• •• Turn Grabber on with norm* I dltplay •* polling Gr»bb*r status till on (bltO 1) . • ' / VOIO turn.gr A_on_nom-.t (lmg*_typ*_t e*m*rt, Int frβme.rur.) ( flfndaf DISABLE.GRAB Int I I; I f ( ctmra aa ROLL > •(UBYTE •)GI ββER_CTRLO.BASE ■ OxTFj • It* •(UBYTE •)GAAββεa_CTRLO_BASE a OxEF; • / typ*d*f m lmg*_typ*_t { ROLL, PLAIN, PALK.SCAK, KOH.CAMERA ) Imge.type.t; •endlf /• INC.DEFS.N •/ Fllanamt 1mg_d*f».h Purpo**: Oa lnltlona to handt* th* Imge* diaplay or captur* for Ho*t, DSP and CSP. Oltll 10/11/93 Authori Joyc* Young R*vl**dι 11/02/93 Elian Yu 01/28/94 Joyc* Young, Add ROLL.RESOLUTION I PLAIN.RESOLUT10N 02/02/94 Elian Yu, Seperat* into img.dafa.h and Imggloba.h. 02/02/94 Joc* Young, Add th* definition* for th* PALM earner* 11/21/94 JY, Add fifdef NEU.PALM to -upport new PALM 01/13/95 JY, chang* palm pixel* for new NPA palm il ndef IN6.0EFS.H •define tMG 0EFS H ROLL: mu*t b* 0 •endif /* OSP UP •/ •end If /• KEM.ALLC.H •/ •* CSP .COFF.PROCRAM wi ll be stored after all tables, then fol lowed by ** FtXAL IMAGE AOOR. •def ine DSPOSP CMC BUF 0xCOO020O0 /• OxlOOU •/ The order of th* PC.PARAMETERS (ULONO)! For Finger *c*nn*r 1. flag of th* ROLL equalization file exl*tt (laexlttc) 2. fl*g of th* PLAIN equalization file exlttt (1-eκiβta) 3. leg of the perimeter file exlttt (1«axl*tt) 4.... the number* of th* v*lue* In th* pert.dit fit* if exist* For Palm *c*nn*r 1. flag of th* PALM equalization file (palm.equ) exlttt <1«βxl*tι) 2. flag of tha PALM dewerplng fill (palm.wrp) exiitt (1«exlιtt) •define PC PARAMETERS 0xC0OO4000 /• 0x40 •/ /• ** The general return retult* of CSP command procetting, defined In the ** temcfflπ .h, will be itored ifter ell imege parameter! In PC.PAR METERS. *• if total rxjTtoβπ of the imege parametert exceed to 0x40 In the future, •• t it addreti need! to be chinged. •define COMMAM0 RETURN RESULTS OxC0004600 /• reserved 10U ipace* */ " below for Finger tcβnnβr •/ •define STRAICHT.YHRU.LUTTBL OxC0004800 /• 0x4000 256*256/4 •define N1NFUNC.LUTTBL OxC0064800 /• 0x4000 256*256/4 •define FNCR.TACβlNC.LUTTBL OxC0104800 /• 0x4000 256*256/4 •define ROLL.EOU.REFTBL OxC01848OO /• 0x38400 960*960/4 •define PUIN EOU REFTBL OxCOββCβOO /• OxJFSOO 1600*9/6/4 •• GORAN *ddr*«* In fngrgipe.cmd t f grgtpj.em. need to be metehed with •* FNCR GSP COFF PROCRAM. If eny one been changed, change the other, too •define FNGR.GSP.COFF.PROCRAM OxC1476800 /• 0x7000 •/ •define FNGR FINAL IMAGE AOOR OxCoOOOOOO ** below for PALM scanner •/ /• •* GORAN addre** In pβtmgtpe.αnd t pelmgipj.cmd need to be matched with •• PALM.GSP.COFF.PROGRAM. If any one been eh*ng*d, eh*ng* th* other, too V •define PALM.EOU.REFTBL 0xC0O04800 /• 2400/4 •/ •define PALM CSP COFF PROCRAM OxCOOOCoOO /* 0x7000 ■ / •Ifndef NEU.PALN •define PALM.FINAL.INACE.AODR OxCOOECβOO /• 2748»274β/4a0x1CCE84 •/ •el** •def ine PALM.DEUARP.TBL OxCOOECβOO /• 0x300 (3072/4) •/ •de ine HEEL.FINAL MAGE.AOOR 0xC00F2800 /• 2400*1040/4-0x98580 •/ •def ine PALM.FINAL.tNACE.AOOR 0xC13FD800 /* 2400*2040/4-Ox12ad40 */ lendif 1. flag of th* ROLL equalization file exist* ( exlitt) 2. flag of th* PUIN equalization file exlct* (1-*xi*tt> 3. fl*g of th* p*r*m*t*r fll* *xl*t* (laexiiti) 4.... the rxj-bβn of th* value* In th* para.dat fll* If *xlttt For Pita learner 1. flag of th* PALM *qu*l1z*tlon fll* (ptlm.βqu) exlttt ( xitt*) 2. fl*g of th* PALM dewarping file (pelm.wrp) «xi*tt <1«_xl*tι) •define PC PARAMETERS 0xCOO2O0 /• 0x40 • The retultl of the p ten check for the finger tcwmer, defined in the • (tr etur* of pliten.cheek.rβtult.t in icincπnd.h, will be ttored *ft«r • ill img* pβramβtert In PC.PARAMETERS. If total number* of the image parameter! exceed to 0x40 in the future, thll eddre** need* to be changed. •define COMMAND RETURN RESULTS OxCOOZSO /* reserved 10U space* •/ •• below for Finger (earner •define ST«AIGMT_THRU_LUTTBL OxC00240 /• 0x4000 256*256/4 •define NtNFUNC_LUTTSL 0XC04240 /• 0x4000 256*256/4 •define FNGR.TAGGING.LUTTBL OxC08240 /• 0x4000 256*256/4 •define ROLL.EOU.REFTBL OxCOC240 /• 0x3*400 960*960/4 •define PUIN EOU REFTBL 0xC44640 /• 0x5F50O 1600*976/4 ** G0RAM addr*** In fngrgipa.cmd I fngrgtpj.cmd need to be matched with *• FHCR.GSP.COFF.PROGRAM. If eny one been changed, change the other, too */ ■define FNCR.GSP.COFF.PROGRAM OxCA3B40 /* 0x7000 */ •define FNCfl FINAL IMAGE AD0R OxFOOOOO ** below for PALM tcanrwr V /* •* GDRAM addr*** in palmgtpe.cmd I petmgtpj.cmd need to be metehed with •• PALM.CSP.COFF.PROCRAM. If any one been changed, change the other, too •/ •define PALM.EOU.REFTBL 0xC00240 /* 2400/4 •/ •define PALM GSP COFF PROGRAM 0xC00640 /* 0x7000 */ fifndef NE .PALN •define PALN.FINAL_tMAGE.A0OR 0xC07640 /• 2748*274β/4a0x1CCE84 •/ •*l»* •def ine PAUt.DEWAIlP.TBL 0xC07640 /• 0x300 (3072/4) •/ •cmf ln* HEEL.f I NAL.IMACE.AOOR OxCO O /• 2400* 1040/4.0x98580 •/ •define PALM FINAL IMAGE AOOR 0XC9FEC0 /* 2400*2040/4a χ12adU) •/ •«ndlf •el** /• GSP HAP •/ •• Drtm *ra* to *tor* the Imege procei* by UOR0 lengths •• The f lrtt 2 Item*, DSPGSP.Ot .BUF, PC.PARAMETERS will be the ten* area • • to the f inger .carrier and the pelm icanner . 70 - PurpoMi Definition of m ry attoeatlon of toftwar*. If tha progrm* wants to nn GSP/RAMDAC/8051 function* under th* OSP map, add th* compiler option -oSSP.MAP; otherwltβ, tho»* fu-iction* will run under GSP amp. D*t*: 05/27/94 Author: Joyc* Yoing H toryi 02/04/94 Joyc* Yotng, Add th* definition* of the GSP ORAM BANK* 03/13/94 Joyc* Young, R**rr*ng* th* 0r*mβ*nk* 04/07/94 Joyc* Young, Rearrange the OremBanki to tupport Kanjf 05/20/94 Ellen Yu, Removed uvwc****ry deflne'i. Changed the FNGR_PINAL.IMACE.AOOR from OxEOOOOO to O f0OOO0 06/07/94 Joyce Yotng, add COMMANO.RETURN.RESULTS to tupport platen check. 06/13/94 Joyce Young, modify the comment* 11/22/94 JY, add flfndef NEU.PALM to lupport new PALH 01/18/95 JY, modify for pata table* •Ifndef MEM.ALLC.H •define MEM.ALLC.H /• *• Below memory nape *r* different from DSP end GSP. •• We uei the *«n* n n* on th* both GSP and OSP code*, but *• compile with -dDSP.MAP option if the program i* emulited on DSP or ** co pll* without -ofiSP.NAP option if th* program it emulited on GSP. •/ •f def DSP.MAP /* • • NOTE: finger tcamer will u*« B*nk0 i Bβnk3, • • palm tcamer will us* ill bank*. '* If *πy *ddr*ι* I* changed in me .addr.h, make lure the addret* here •* will be matched. •• ♦ ♦ •* DramβankO: OxCOOIOO | 1N words valid | *• * ♦ •• Ormrttnkl: 0x000000 | IM word* valid | •a ♦ a • * Ormnβanl.2: OxEOOOOO | 1M word* valid | •• ♦ ♦ •• DramSankS: OxFOOOOO | 1M word* vetId | •• * ♦ */ /* *• Drm* *r«* to (tor* th* lm*g« proc*** by UMO length: *• Th* f ir»t 2 i tem*, OSPGSP.Ote.BUF, PC.PARAMETERS wi l l b* th* lam* *r*a *• to th* f inger *cann*r and th* palm *cann*r. *• CSP.COFF.PROGRAN wi l l be »tor*d *ft*r al l tablet, then fol lowed by •• FtNAL_JMA«_A00«. */ •def ine OSPCSP.Otβ.BUF OxCOOIOO /• OxlOOW •/ /* •• The order of the PC.PARAMETERS (ULONG)t •• For Finger tcamer /• F l l*n***ι I gglobβ.h Purpo**: Def ini tion t v*ri*bl*» to handle the liwgei dltpliy or capture on OSP/GSP. Dete: 10/11/93 Author: Joyce Young 11/02/93 Ellen Yu 06/07/94 El len Yu, Support pleten check function, add dl rty.threthold and damge.threihold to tha iaage.object.t itructure. 11/18/94 JY, delete CAPT.ABORT In cepture.t; •xpand length of lc.name In Iaage.object.t 12/21/94 JY, add CAPT.NULL 1 CAPT.SAVE.PALM In capture.t •include "ttdtypet.h" •ifndef IHCGLOBS.H •define IHCGLOBS.H typedef entn capture.t < CAPT.NO.RESPONSE, CAPT.SAVEIMG, /* ROLL or PUIN for finger, PALM t HEEL for palm •/ CAPT.MISSFNG, /• mining finger/hand •/ CA _URONG_TYPE, /• Imgβgi type ind finger nltmitched */ CAPT.NULL, /* 4 riterved for ADNIT.ABORT •/ CAPT.SAVE.PALM /• teve PALM only; only used by palm tcamer •/ ) eipture.t; /• *• I f NAX.NAME.LEN In tcanαirad.h expendt, ic_ntme needs to expand too. •/ typedef itruct imegι_object_t ( ULONG le.cmd; /• ROLL, PLAIN */ ULONG le.iite; /• lizeof (imege_obJoct_t)/t eof (ULONC) */ ULONG le_*e*ntyp*; /• STYPE.... •/ ULONO le.imgtyp*; /* ROLL, PLAIN or PALH •/ ULONG ic.Mt; /• OR of thlfted Image 10* •/ ULONO lc.addr; /• th* addr*** of imege •/ ULONG lc.nameM1); convict name (4 chert/ULONG) */ ULONG lc_r***rv*1; ULONG ie_dlrty_thre»hold; ULONO <c_d*mag*_thr**hold; ULONG lc_r***rv*2; ULONG ie.flag; /* the flag Indlciti ill word! written •/ ) im*g*.obJ*et_t; •endlf /• INGCL08S N */ ** Fll*n*m*t g*p_fcrκ.h ** Purpo**: function prototypes *• Data: 04-19-95 *• Author: Ellen Yu •• Htitoryi */ /• grabber.c VOtO lnlt_gtp.gr*bb*r (VOIO); VOID turn_gr*b.off (lm*g*_typ*.t earner*); VOI0 turn.grab.on (Imaga.type.t cemere. 'fit freme.num); VOID turn_gr*b_on_norm*l (Imecc.tj e.t eamr*, Int freme.num); VOID welt.for_grib_VBLANK_on.off (VOID); /• iMββdβπ 0ι/t1000/g*p/«laιlo.h_v 1.0 08 Apr 1995 11 :06:02 TOH * •/ /• • SLog: α:/t1000/g*p/mlalo.h_v S a R*v 1.0 08 Apr 1995 11:06:02 TOM • Initial revision. a • lev 1.2 26 Oct 199217:44:50 TOM • added alm.flll declaration* 4 Rev 1.1 16 Oct 199201:52:10 TOM Rev 1.0 16 Sep 1992 18:41:04 TOM • Ini ial ravltlon. •/ file: mlalo.h definition* for memory imege tegmentt only 8-blt pixili ere allowed typedef ttruct alm*g* ( unelgned char *e; /• addreit of f1rat element of firit row •/ Int I; /• increment In bytet from row to row •/ int w; /• image width */ int h; /• image height */ > NIN; void mla_n*w(MIH *d,-r*igned char *a, Int I, int w.int h ); void mla_ιubιet( HIM *»,MIM *d, Int x.lnt y.lnt w.lnt h ); void alm_mov*( HIM *ι,NlM *d ); void aia_mov*_c( HIN *» NIM *d,lnt e); vold alm_op_move( NIM *t,NIM *d ); uτ*lgn*d eh*r *alm_*dr( MIN *t,lnt x.int y >; void ala_ιlz*( NIM •*, int *w, Int *h ); Int ■la_lnc( NIN *ι); vold mla. llK NIN *d, Int v ); void ala.fiIl_e( NIM *d, Int v, Int c ); ilename: gip.lmgt.h Purpo**: Definition I ver bl** to h*ndt* th* imigtt dltpliy or captur*. Datot 18/01/94 Authori Ell*n Yu HI*torγ: 02/20/94 Joyc* Young, modify th* HINORAM offtβt 06/03/94 Joyc* Yotng, adjuit th* offtit of ROLL/PUIN ictiv* Image In MINORAM for new board 06/09/94 Ellen Yu, edd -define PROTOTYPE difference the hardware prototype board and other new rovliion*. •I ndef GSP.IMGS.H •define GSP IMGS H •define MINORAH.UD.BYTES 2048 •define MINDRAM.UO.UOROS (MINORAH.UD.BYTES / 4) •define MINDRAM.HT.BTTES 1024 •define MIN0RAM_PITCH_BYTE$ 2048 •define MIN0RAH_PITCN_BITS (MINORAM.PI TCH.BYTES • 8) /• 0x4000 •/ •Ifndef PROTOTYPE •define MlNORAM.R0LL_ROW_B.OFFSET 38 •define MINORAM.ROLL.COL.W.OFFSET 24 •define MIN0RAM_ROLL_COl_β.OFFSET (H DRAM_R0LL_C0L_U_0FfSET 4) •define MINORAM.PUIN_ROU_B_OFFSET 31 •define MINORAM.PUIN.COL.W.OFFSET 38 •define MINORAM PUIN COL B OFFSET (HINORAM PLAIN COL V OFFSET • 4) •elte •define MINORAM_ROU_B_0FFSET 32 •define HIN0RAN_COL_W_OFFSET 24 •define MIN0RAM_C0L_B_0FFSET (MIN0RAM.COL_U_OFfSET • 4) •define MINDRAM_PLAIN_COL.U_OFFSET 13 •define MINORAM PLAIN COL B OFFSET (MINORAM PLAIN COL '- OFFSET 4) •endlf •define GRBVRAM_UD_BYTES 1024 •define GRBVRAM_HT_BYTES 1024 •define CRSVRAM_PITCH_BYTES 1024 •define GRBVRAM PITCH BITS (GRBVRAM PITCH BYTFS 8) /* 0x2000 •/ •def ine DPYVRAM_WD_BYTES 1024 Me f in* OPYVRAM.HT.BYTES 1024 •dβfin* DPYVRAM_PITCH_BYTES 1024 «d*f ln* DPYVRAM PITCH BITS (1024 8) /• 0x2000 •/ •d*ftn* ROLL. ITCH.BYTES 1024 fd*fln* ROLL.PITCH.BITS (ROLL.PITCH.BYTES • 8) adeflnβ ROLL.CRBVRAM.PITCH (•(GRBVRAM. ITCH.BITS • 4>) •define ROLL.DPYVRAN.PITCN (DPTVRAM.PITCH.BITS * 3) •define ROLL DYOX V*. ((((IMG.ROLL.H • 12) / S) « 16) | (IHG.ROLL.U • 16)) •define PLAIN.PITCH.BYTES 2048 •def ine PUIN_P1TCK_BITS (PUIN.PITCH.BYTES • 8) •def ine PUIN.GRBVRAH.PITCH ( •(CRBVR.AM_PITCH.BITS • 2)) •def ine PUIN_DPYVRAM_PITCH (DPTVRAM.PITCH.BITS) •define PUIN DYOX VAL (( IMG.PUIN • 12) « 16) | (1MG.PUIN.U 12) •" ) ' /• CSP I WCS H • / ERASE, ORAU ) TEXT_OPER_T; typedef •rut < SCANJCEY, SAVEJCEY > KEYJΓYPE; typedef enua ( RET_ERR_ADOR, REAO_FOREVER, U ITE.FOREVER ) NEM_TEST_RESULT_TYPE; typedef erum ( UNPRESSED.BUTTON, PRESSED.BUTTON ) BUTTON OPER TYPE; Attribute! for text ditpleyed on tcreen typedef struct ( thort font; /• font Index of the t»lon_font tibia •/ ihort fcolor; /• foreground color •/ thort bcolor; /• background color •/ ihort xpoin; /• x position •/ •hort ypom; /• y position •/ thort align; / ■ Alignment (retetive to baieline or topleft) •/ thort font.h; /• height of font •/ thort tβxt.w; /• width of text itring •/ char •itrptr; /* text itring ptr •/ ) SCRTEXT.T; typedef itruet { imge.type.t earner*; KANO.TYPE hand; •e*n_typ*_t fng.mn; ULONG •tor*_*ddr; UBYTE ••rc_*ddr; UBYTE •d*t_*ddr; ) IMAGE ATTR T; β e dl f /• OSP.DEFS.R •/ •* uier-ielected type of the key pretted or commend for imege caputre */ typedef •rum keytype.t ( TTPE.NO.RESPONSE, TTP£_SCAN_ttY, RELEASE_SCANJCEY, TYPE.SAVE CEY, RELEAS .SAV CEY, TYPE_ABO«T ) keytype.t; typedef *r ι /• *• Ml enema: gap.deft.h •• Purpott: Mafine in OSP application. •• Dite: 10-05-93 • • Author: Ellen Yu •• Mlitoryi • • 01-31-94 Joyci Young, Changed the «rc_*ddr t d*t_*ddr in IMAGE.ATTR.T is ** pointer •• 02-25-94 Joyce Young, Added the fng_nLiιι In tMΛGE.ATTR •• 04-01-94 Joyc* Young, »upport KANJI In MOOE.TYPE " 12-19-94 Ellen Yu, remove tome unuaed define • / •ifndef GSP_DEFS_H •define GSP.DEFS.H iinclude "lmg_defι.h" iinclude *tctncm-d.h H •define NULL 0 -define FALSE 0 KiefIne TRUE 1 • / •define X1E 0x0002 •define HIE 0x0200 •de ine INTIN 0x0008 -define INT0UT 0x0080 •define B1T0 0x01 •define BIT1 0x02 •define BIT2 0x04 •define II Tϊ OxOβ V typedef emm ( NOOE.ROLL, R OE.PLAIH, KXE.MEV, HCDE.CENTR, MOOE.RARROW, roXE.LARRO , MOOE.PLAC HOLD, MOOE.PLACEHOLDI, NOOE.ROLLNOLO, H00E_ROLLHOL01, MOOE.LIFTNANO ) MCOE.TYPE; typedef eui ( FINGER.IEGE O, MOOe_LEGEN0 1 »CS lEGENO _'TPf ; /• •• wait for Grab I* enabled (BITO became 0) */ while ( (('(UBYTE *)GRAB8ER CTRLO BASE) I 1) > for ( II 0; II < fra e.nut; Ii** ) < unite ( l((*(UβTTE *)GRABBER_CTRL0_βASE) t 2) ) white ( ((*(U8YTE *)GRABBER_CTRL0_8ASE) I 2) ) ) fendif ) /• turn.greb.on.nonβl •/ /* /* *• wait for the VBLANK itirt on and off */ VOID walt_for_grab.VBLANr.on_off (VOIO) ( •Ifndef DISABLE.GRAB hile ( l((*(UBYTE *)GRAβBER CTRLO BASE) t 2) ) an lie ( ((•(UBTTE *)ORABBER CTRLO BASE) I 2) > •end If ) /• wett_for_grβb_VBLANK_on_off • / /• end of grabber.e •/ The present invention has been described in terms of preferred embodiments. The invention, however, is not limited to the embodiments depicted and described. Rather, the scope of the invention is defined by the appended claims.

Claims: CLAIMS; 1. A method of reducing smear in a rolled fingerprint image represented by a rolled image array, comprising the steps of: sequentially generating frames of an optical image signal which includes data values characteristic of light intensities of corresponding locations of an optical image, wherein the optical image includes a fingerprint image of a finger rolling on a surface; determining, for each frame of the optical image signal, a freeze column representing a line positioned between leading and trailing edges of the fingerprint image and oriented transverse to a direction of roll of the rolling finger; sequentially updating an interim array that is an accumulation of the frames of the optical image signal and characteristic of an interim image of a rolled fingerprint, a current update of the interim array being formed by reducing pixel values of the interim array by a portion of the difference between corresponding data values from a current frame of the optical image signal and the pixel values of the interim array if the corresponding data values of the current frame of the optical image signal are less than the pixel values of the interim array; and generating the rolled image array by transferring portions of the interim array to the rolled image array, wherein the transferred portion of the current update of the interim array extends forward in the direction of finger roll from the freeze column determined from a preceding frame of the optical image signal that preceded the current frame of the optical image signal. 2. The method of claim 1, wherein the transferred portion of the current update of the interim array includes data characteristic of a portion of the interim image up to approximately the leading edge of the rolled fingerprint of the interim image. 3. The method of claim 1, wherein the transferred portion of the current update of the interim array extends up to approximately the freeze column determined from the current frame of the optical image signal . 4. The method of claim 1, wherein the freeze line represented by the freeze column determined from each frame of the optical image signal is positioned at least approximately half a distance in the direction of roll between the leading and trailing edges of the fingerprint image. 5. The method of claim 1, wherein the freeze line represented by the freeze column determined from each frame of the optical image signal is positioned more than half a distance in the direction of roll between the leading and trailing edges of the fingerprint image. 6. The method of claim 1, wherein a first transferred portion of the interim array extends rearward in the direction of finger roll from approximately the freeze column determined from a first frame of the optical image signals. 7. The method of claim 6, wherein the first transferred portion of the interim array is characteristic of a portion of the interim image forward in the direction of roll from about the trailing edge of the first interim image. 8. The method of claim 1, further comprising initializing pixels in the interim array with maximum values. 9. The method of claim 1, further comprising initializing the interim array with data values of a frame of the optical image signal. 10. The method of claim 1, further comprising saving the rolled image array after transferring the portion of a final interim array to the rolled image array. 11. The method of claim 1, further comprising displaying a rolled fingerprint image represented by the rolled image array on a display device as it is generated. 12. The method of claim 11, further comprising decimating the transferred portion such that the rolled image array has fewer pixels than the interim array. 13. The method of claim 1, wherein sequentially updating the interim array includes updating the interim array in real time as frames of the optical image signal are generated, and wherein generating the rolled image array includes transferring a portion of the interim array to the rolled image array in real time as the interim array is updated. 14. The method of claim 1, wherein the transferred portions of the interim array are adjacent and non-overlapping. 15. A method of generating a rolled fingerprint image array characteristic of a rolled fingerprint image, comprising the steps of: generating a series of frames of an optical image signal characteristic of an optical image of a finger rolling on a surface at sequential times, wherein the frames include data, the value of each datum being characteristic of a light intensity of a corresponding location of the optical image of the rolling finger; determining a freeze column from each frame, wherein each freeze column is representative of a position between leading and trailing edges of the corresponding optical image of the rolling finger; sequentially updating an interim array in an image memory with the frames as they are generated, the interim array being characteristic of an interim image of a rolled fingerprint that has a leading edge and a trailing edge, including first updating the interim array by transferring a first one of the optical image signals to the image memory, and then further updating the interim array by reducing pixel values of the interim array with a portion of the difference between corresponding data values of a current frame and the pixel values of the interim array if the corresponding data values of the current frame indicate a darker image than the pixel values of the interim array; associating the freeze columns determined from the frames with corresponding updates of the interim array; and sequentially updating the rolled fingerprint image array in an output memory with the updates of the interim array by sequentially transferring a portion of each update of the interim array to the output memory, including transferring a portion of the first update of the interim array that extends in a direction of finger roll rearward from approximately the freeze column associated with the first updated interim array, and then transferring a portion of a subsequent update of the interim array that extends forward in the direction of finger roll from approximately the freeze column associated with a preceding update of the interim array. 16. The method of claim 15, wherein the transferred portion for a subsequent update of the interim array extends forward only to the freeze column of the subsequently updated interim array. 17. The method of claim 15, wherein the transferred portions of sequential updates of the interim array are adjacent and non-overlapping. 18. The method of claim 15, wherein the transferred portions of sequential updates of the interim array are adjacent and do not overlap rearward in the direction of finger roll from the freeze column determined from the preceding optical image signal. 19. A device for reducing smear in a rolled fingerprint image represented by a rolled image array, comprising: an imaging system for sequentially generating frames of a series of electronic signals characteristic of an optical image that includes a fingerprint image of a finger rolling on a surface; means for sequentially generating frames of an optical image signal in response to the electronic signals, each optical image signal including data, the value of each datum being characteristic of a light intensity of a corresponding location of the optical image; an image capture system responsive to the optical image signals for sequentially updating an interim array characteristic of an interim image of a rolled fingerprint that has a leading edge and a trailing edge, a current update of the interim array being formed from a preceding update of the interim array and a current frame of the optical image signal by reducing pixel values of the preceding update of the interim array with a portion of the difference between the corresponding data values of the current frame and the pixel values of the preceding update of the interim array if the corresponding data values of the current frame are characteristic of darker images than the pixel values of the preceding update of the interim array; means for determining, for each frame of the optical image signal, a freeze column representing a line positioned between leading and trailing edges of the fingerprint image and oriented transverse to a direction of roll of the rolling finger; and means for generating the rolled image array by transferring a portion of the current interim array to the rolled image array, wherein the transferred portion of the current interim array extends forward in the direction of finger roll from the freeze column determined from a preceding frame of the optical image signal that preceded the current frame of the optical image signal. 20. The method of claim 1, wherein the current update of the interim array F n is formed according to the relation: where F" is a pixel value of the current update of interim array, F n_1 is the pixel value of interim array, I" is the corresponding data value of the optical image signal, and K is a factor less than or equal to one. 21. The method of claim 20, wherein K is in a range of 0.25 to 0.5. 22. The method of claim 20, wherein K is approximately 0.33.

Inventors: MAASE DANIEL FREDERICK, SARTOR THOMAS FRANK, MAASE, DANIEL, FREDERICK, SARTOR, THOMAS, FRANK
Applicants: IDENTIX INC, IDENTIX INCORPORATED
Application year: 1997
Main classification: G06K9
IPC codes: A61B5, G06K9, G06T1