# Patent

## Title
Image processing system with image cropping and skew correction

## Abstract

This related Application is incorporated herein by reference.

## Background
1. Field of the Invention

The present invention is directed to a system for finding a gray-level pattern in an image.

2. Description of the Related Art

There has been a significant amount of work on the problem of locating the best transformation of a gray-level pattern in an image. A transformation, in a broad sense, is a movement of a pattern or image. For example, while recording a sequence of video images, an object may move causing its position in the recorded images to change as the video sequence progresses. One transformation of interest is a translation, which is defined as movement in two dimensions (e.g. x and y directions) without rotation. A more complicated transformation is the affine transformation, which includes translation, rotation, scaling and/or shear. With affine transformations, parallel lines in the pattern remain parallel even after being transformed.

The ability to locate the best transformation of a gray-level pattern in an image forms the basis of one of the components of MPEG encoding. It is also part of computer vision systems that are used to navigate robots, find parts automatically in an inventory or manufacturing facility, register images, track objects, etc.

One method for searching for the correct transformation of a pattern in an image is to determine every possible transformation, and to compare the pattern to the image at every transformation. The transformation with the lowest error is the actual transformation of the image. Because this method tests every transformation, it is slow and requires a lot of computer resources. Previous work to improve on the above-described method has concentrated on search methods that are less expensive, but may not find the best transformation.

For example, the computer vision community have experimented with methods that utilize the sum-of-squared-differences to compute intensity image patches; however, such work has concentrated on search methods that are not guaranteed to find the best corresponding patches. For example, pyramid-based systems work with multi-resolution representations of the image and the pattern, and match first at the coarsest resolution, then the next finer resolution in a smaller region around the coarser match, then the next finer resolution and so on. A mistake at the coarsest resolution can easily cause a large error in the final result.

Motion compensation for video compression has also been the focus of much investigation. The emphasis has been searching for a translation in an efficient manner, but not evaluating every translation. Again, the methods have not been guaranteed. That is, the previous work does not guarantee finding the best translation. Experimentation reveals that the previous work will not be accurate enough to correctly find the pattern in a new image.

The prior art attempts to improve on the traditional methods for finding a pattern in an image by reducing compute time at the expense of sacrificing accuracy. Therefore, a system is needed that can find a transformation of a gray-level pattern in an image that is faster than trying every transformation but more accurate than the prior art.

The present invention is directed to a system for finding a transformation of a gray level pattern in an image. The system recursively searches a transformation space in a multi-resolution manner. At each resolution, the transformation space is divided into groups of translations. For each group, a set of difference values are computed and compared against a previously known best difference value. If any of the computed difference values are greater than the previously known best difference value, the corresponding group of translations is removed from further consideration.

In one embodiment, the system divides the transformation space into a plurality of groups of translations and creates one or more image arrays. Each image array includes one or more sums of pixels in a region of the image. The system also creates one or more pattern arrays, one or more minimum arrays and one or more maximum arrays. Each pattern array includes one or more sums of pixels in a region of the pattern. The system determines a first difference value for each group of translations. Each first difference value is based on a first pattern array corresponding to a first image array, a first minimum array corresponding to the first image array, a first maximum array corresponding to the first image array. Translations in one or more groups having a first difference value greater than a previously determined best known difference value are discarded. Translations that have not been discarded are further investigated to determine which translation has an optimal difference value. The translation with the optimal difference value is the transformation of the gray level pattern in the image.

In one embodiment, the system also determines a second difference value for at least a subset of remaining groups that have not been discarded. Each second difference value is based on a second pattern array corresponds to a second image array, a second minimum array corresponding to the second image array, a second maximum array corresponding to the second image array. Translations in groups having a second difference value greater than the previously determined best known difference value are discarded. The system determines a third difference value for at least a subset of remaining groups. Each third difference value is based on a third pattern array corresponding to a third image array, a third minimum array corresponding to the third image array, a third maximum array corresponding to the third image array. Translations in one or more groups having a third difference value greater than the previously determined best known difference value are discarded.

In one embodiment the task of determining which translation includes the steps of subdividing a group of translations that has a first difference value less than or equal to the best known difference value, creating a new set of minimum arrays and maximum arrays based the new group size and repeating the steps of determining a first difference value, and discarding translations using the new set of minimum arrays and maximum arrays.

These and other objects and advantages of the present invention will appear more clearly from the following detailed description in which the preferred embodiment of the invention has been set forth in conjunction with the drawings.

FIG. 1 is a block diagram of one exemplar hardware architecture that can be used to practice the present invention.

FIG. 2 shows a pattern P, an image I and a representation of transformation space T.

FIG. 3 is a flow chart illustrating the steps of finding a pattern in successive video images.

FIG. 4 is a flow chart describing the steps of finding a transformation of a pattern in an image.

FIG. 5 is a flow chart explaining the steps calculating a difference value for a particular transformation.

FIGS. 6A-6C are flow charts describing a second embodiment for discarding transformations during the search for the transformation of the pattern in the image.

FIG. 7 is an example pattern.

FIG. 8 is an example image.

FIGS. 9A and 9B are example pattern arrays.

FIGS. 10A and 10B are example image arrays.

FIGS. 11A-11C are example minimum arrays.

FIGS. 12A-12C are example maximum arrays.

FIG. 1 is a high level block diagram of one exemplar hardware architecture that can be used to practice the present invention. In one embodiment, the present invention can include video camera 8 and a general purpose computer 10. Video camera 8 can be any video camera known in the art that can capture sufficiently good quality images for transmission to a computer system. One example of a video camera is a camera that captures interlaced video at 30 frames per second in NTSC format. The video signal from camera 8 is sent to computer 10. In one embodiment, computer 10 is a general purpose computer. In another embodiment, computer 10 can be a special purpose computer adapted for use with video applications.

In one embodiment, computer 10 contains a processor unit 12 and main memory 14. Processor unit 12 may contain a single microprocessor or may contain a plurality of microprocessors for configuring computer system 10 as a multi-processor system. Main memory 14 stores, in part, instructions and data for execution by processor unit 12. If the system for finding a transformation of a pattern is wholly or partially implemented in software, main memory 14 stores the executable code when in operation. Main memory 14 may include banks of dynamic random access memory (DRAM) as well as high speed cache memory.

Computer system 10 further includes a mass storage device 16, peripheral device(s) 18, input device(s) 20, portable storage medium drive(s) 22, a graphics subsystem 24 and an output display 26. For purposes of simplicity, the components in computer system 10 are shown in FIG. 1 as being connected via a single bus. However, computer system 10 may be connected through one or more data transport means. For example, processor unit 12 and main memory 14 may be connected via a local microprocessor bus, and the mass storage device 16, peripheral device(s) 18, portable storage medium drive(s) 22, graphics subsystem 24 may be connected via one or more input/output (I/O) buses. Mass storage device 16, which may be implemented with a magnetic disk drive or an optical disk drive, is a non-volatile storage device for storing data and instructions for use by processor unit 12. In one embodiment, mass storage device 16 stores the system software for determining a transformation of an image for purposes of loading to main memory 14.

Portable storage medium drive 22 operates in conjunction with a portable non-volatile storage medium, such as a floppy disk, to input and output data and code to and from computer system 10. In one embodiment, the system software for determining a transformation is stored on such a portable medium, and is input to the computer system 10 via the portable storage medium drive 22. Peripheral device(s) 18 may include any type of computer support device, such as an input/output (I/O) interface, to add additional functionality to the computer system 10. For example, peripheral device(s) 18 may include a network interface card for interfacing computer system 10 to a network, a modem, etc.

Input device(s) 20 provide a portion of the user interface for computer system 10. Input device(s) 20 may include an alpha-numeric keypad for inputting alpha-numeric and other information, or a cursor control device, such as a mouse, a trackball, stylus, or cursor direction keys. In order to display textual and graphical information, computer system 10 contains graphics subsystem 24 and the output display 26. Output display 26 includes any suitable monitor display device. Graphics subsystem 24 receives textual and graphical information, and processes the information for output display 26. Output display 26 can be used to report the results of the method for finding a transformation. Computer 10 also includes a video input device 28. In one embodiment, video input device 28 can include any one or a combination of the following: a video input card, analog to digital converter, video interface port, or other hardware to interface between a video camera and a computer. The signal from camera 8 is sent to video input device 28 for use by computer 10.

The components contained in computer system 10 are those typically found in general purpose computer systems, and are intended to represent a broad category of such computer components that are well known in the art. The system of FIG. 1 illustrates one platform which can be used for the present invention. Numerous other platforms can also suffice, such as platforms with different bus configurations, networked platforms, multi-processor platforms, other personal computers, workstations, mainframes, and so on.

The present invention is directed to a system for finding a transformation of a gray-level pattern in an image. Given a gray-level image I that is I.sub.w.times.I.sub.h pixels and a pattern P that is P.sub.w.times.P.sub.h pixels, the system looks to find the subregion of I that best matches P. For example, FIG. 2 shows a pattern P and an image I. Although FIG. 2 shows pattern P and image I to be rectangular, a rectangular shape is not necessary. For exemplar purposes, assume that image I is a rectangular image at 300.times.300 pixels. Each pixel is identified by a set of x and y coordinates. The pixel at location C in image I is at the origin and has the coordinates (0, 0). The pixel at location F2 has the coordinates (299, 299). Assume for exemplar purposes that pattern P is a rectangular pattern with 50.times.100 pixels. Pattern P can be placed inside image I. Assume that the transformation is such that the entire pattern P fits within image I. Box T represents the transformation space of all possible transformations of P into I. For a translation, each potential transformation is represented by a set of coordinates (x, y) such that the x-coordinate represents the amount of x direction transformation and the y-coordinate represents the amount of the y direction transformation. Thus, the location A in transformation T has the coordinates (0, 0) and represents a translation with no movement in the x or y directions. That is, if pixel B in pattern P was at location C in a first image, then after being transformed by transformation A, pixel B would still be at location C. There are 251 possible x translations and 201 possible y translations. Point D in translation T represents a translation of (250, 200). Translation D could correspond to pixel E of pattern 60 being translated from point F1 (49, 99) to F2 (299, 299) in image I. The discussion above in regard to transforming pattern P describes two dimensional transformations. However, the present invention also applies to other transformations including affine transformations.

The problem of finding the transformation of P in I is best understood by thinking of two tasks: the block difference function and the search technique. The block difference function is a function that takes the pattern P and a candidate transformation of P and returns some measure of the difference between the transformed P and the corresponding region of I. The search technique is the manner in which candidate transformations are searched to find the best-matching transformation.

First, it is useful to discuss a number of block difference functions, and some generalizations and modifications to increase their tolerance of various forms of error.

A block difference function takes an array of pixel intensity values P[x, y] (defined for 0.ltoreq.x<P.sub.w and 0.ltoreq.y<P.sub.h), an image array I[x, y] (defined for 0.ltoreq.x<I.sub.w and 0.ltoreq.y<I.sub.h) and a translation (t.sub.x, t.sub.y), and computes some measure of the difference between the array P and the sub-array of I corresponding to the transformation. The most commonly-used measure is the sum of squared differences: ##EQU1##

The sum of absolute differences D.sup.sad and the maximum of absolute differences D.sup.mad have also been used. ##EQU2##

Another difference function that has been proposed is the pixel difference classification measure. This measure relies on an additional threshold .tau. (e.g. 20), and classifies two pixels as the same if their absolute difference is no larger than .tau.; it then counts mismatched pixels. Let ##EQU3##

be a threshold function based on .tau.. The difference function is now ##EQU4##

An additional rank block difference function can be derived by letting .function. be a value between 0 and 1 (e.g. 0.75) and defining ##EQU5##

where ##EQU6##

(.alpha.) denotes the .function.-th quantile value of g(a) over the set A, for some value of .function. between zero and one. For example, the 1-th quantile value is the maximum and the 1/2-th quantile value is the median.

D.sup.rank is derived by analogy with the partial Hausdorf distance, which is explained in "Comparing Images Using The Hausdorf Distance," Huttenlocher, Klanderman and Rucklidge, IEEE Transactions on Circuits and Systems, 37(5): 649-651, May 1990, incorporated by reference. D.sup.rank is also a generalization of D.sup.mad. If.function.=1, then the two functions (D.sup.rank and D.sup.mad) are the same, since both report the maximum absolute pixel difference. D.sup.mad is too unstable for practical use, as a single corrupted pixel value causes it to be large, even if all the other pixel values match well. Setting .function. to some value lower than 1 allows some of the pixels to be treated as outliers.

All of the block functions discussed above are based on the pixel difference function .delta.(x.sub.p,y.sub.p,x.sub.I,y.sub.I)=.vertline.P[x.sub.p,y.sub.P ]-I[x.sub.I,y.sub.I ].vertline., the absolute difference between a pixel of the transformed pattern P and the corresponding pixel of the image I. The pixel difference function can be replaced with a function based on comparing the pattern pixel to a range of values in a region (or neighborhood) of the image, and report the difference between the pattern pixel's value and that range.

Let N(x, y) represent some neighborhood of the location (x, y) in I. Define the maximum pixel intensity of the neighborhood M.sub.N [x, y] and the minimum pixel intensity of the neighborhood m.sub.N [x, y] as: ##EQU7##

Thus, .delta..sub.N (x.sub.P,y.sub.P,x.sub.I,y.sub.I)--the pixel/region difference function--encodes the difference between the pixel P[x.sub.P, y.sub.P ] and the region N(x.sub.I, y.sub.I). If the value P[x.sub.P, y.sub.P ] is inside the range of maximum and minimum values in N(x.sub.I, y.sub.I), then the difference is zero; if it is outside this range, then it is the difference between P[x.sub.P, y.sub.P ] and the nearest endpoint of the range. If the neighborhood N(x, y) consists just of the single point (x,y), then .delta..sub.N (x.sub.P, y.sub.P, x.sub.I, y.sub.I)=.delta.(x.sub.P, y.sub.P, x.sub.I, y.sub.I). Thus, .delta..sub.N is a generalization of the absolute pixel difference function used in the block difference functions, and can be substituted in any of the block difference functions.

The block difference functions using .delta..sub.N are not as sensitive to slight non-translational components of the transformation of the pattern. For example, suppose that P represents an object to be located in I. It is unlikely that I contains an exact copy of P. Let P' be the patch of I that actually corresponds to the object. The standard block difference functions are primarily designed for the situation where P' is just P corrupted by some pixel-based noise process. Each pixel of P and the corresponding pixel of P' are the same point on the object, but their values are different due to lighting changes, sensor noise, and so on. However, if the object appears in P' slightly larger than it does in P, these difference functions have problems since there is no simple translational correspondence between the pixels of P and P'. Adding a neighborhood to the pixel difference function counteracts this problem somewhat because each pixel in P is compared against a neighborhood in I (and thus P'), and (at the correct translation) this neighborhood is more likely to contain the pixel of P' corresponding to the point of the object that generated this pixel of P. If the neighborhood used is too large, however, it produces a block difference function with no discriminating power.

The block difference function D.sup.sad can be extended to incorporate .delta..sub.N as follows: ##EQU8##

Any of the other block difference functions can similarly be extended to incorporate .delta..sub.N. Another possible modification involves replacing the absolute difference of pixel intensities .delta.(x.sub.P, y.sub.P, x.sub.I, y.sub.I) with any monotonic function of the absolute difference.

Searching for the best translation of the pattern is appropriate in a number of application domains, when the object represented by the pattern is moving parallel to the image plane, or when the frame-to-frame change in the pattern's appearance is small. However, in many applications a more general transformation of the pattern better fits the change in appearance of the target object. An affine transformation can capture translation, rotation, scale change, and/or foreshortening. An affine transformation can be considered as a 2.times.2 matrix A together with a translation (t.sub.x, t.sub.y), representing a mapping of:

where A is the matrix ##EQU9##

The affine transformation can also be represented as a six-tuple (a.sub.00, a.sub.01, a.sub.10, a.sub.11, t.sub.x, t.sub.y).

The block difference functions described above are based on the pixel difference function .delta.(x.sub.P, y.sub.P, x.sub.I, y.sub.I)=.vertline.P[x.sub.p, y.sub.p ]-I[x.sub.I, y.sub.I ].vertline.. The pixel difference for pixel (x.sub.P, y.sub.P) of the pattern, when the pattern is being transformed by the affine transformation (A, t.sub.x, t.sub.y), is >,<a.sub.10 x.sub.p +a.sub.11 y.sub.p +t.sub.y >)

where (.cndot.) represents rounding a value to the nearest integer. Thus, each pattern pixel is compared to the image pixel closest to its transformed location. Similar to the discussion above, .delta..sub.N can be substituted for .delta. for affine transformations. Each pattern pixel is compared to the range of values in the neighborhood surrounding the image pixel closest to that pattern pixel's transformed coordinates.

For convenience, let: x.sub.p +a.sub.01 y.sub.p +t .sub.x >,<a.sub.10 x.sub.p +a.sub.11 y.sub.p +t.sub.y >),

and (x.sub.p,y.sub.p,<a.sub.00 x.sub.p +a.sub.01 y.sub.p +t.sub.x >,<a.sub.10 x.sub.p +a.sub.11 y.sub.p +t.sub.y >),

Then, the block difference function for the sum of squared differences for affine transformations can be written as: ##EQU10##

the block difference functions D.sup.pdc and D.sup.rank can similarly be rewritten for affine transformations.

The difference functions involve comparing the transformed pattern pixel to the nearest image pixel or region. Other systems have compared the transformed pattern pixel, without rounding, to an interpolated version of the image, typically by performing a bilinear interpolation of the four image pixels closest to the pattern pixel's transformed location. This is more computationally expensive, but reduces the effects of artifacts due to rounding. The above equations could be redefined without rounding, in terms of an interpolated image. However, if the pixel/region difference function .delta..sub.N is being used, there is less difference between the interpolated and rounded functions, at least for the common case of bilinear interpolation. If a pattern pixel is compared to the neighborhood consisting of the four image pixels surrounding its transformed position, then it is being compared to the four pixels from which the interpolated image value would have been drawn.

The pattern P could be located in image I by trying every possible transformation, evaluating the appropriate block difference function for each transformation, and reporting the transformation where the best result was found. Performing each block difference function evaluation is an expensive operation; therefore, the overall search using this strategy is unlikely to have acceptable performance. To increase performance, the present invention proposes a search method that will find the transformation minimizing the block difference function, but does not need to evaluate every transformation. Instead, it performs some pre-computation that allows it to rule out a large number of transformations at once.

Let w and h be any positive integers. Define ##EQU11##

where the values of I[x, y] lying outside its actual bounds should be considered to be -.infin. for M.sub.wh and .infin. for m.sub.wh. Define ##EQU12##

Similar to .delta..sub.N, .delta..sub.wh measures the difference between the pattern pixel (x.sub.p, y.sub.p) and range of values contained in the w by h rectangle of the image I at (x.sub.I, y.sub.I). If w=h=1, then .delta..sub.wh (x.sub.P, y.sub.P, x.sub.I, y.sub.I)=.delta.(x.sub.P, y.sub.P, x.sub.I, y.sub.I).

The block difference function for the sum of squared differences can be written as: ##EQU13##

The other block difference functions can similarly be modified to be defined in terms of .delta..sub.wh. The affine versions of the block difference functions can also be extended in a similar manner.

Using the above described computations, the search operates, as described in FIG. 3, by recursively searching transformation space in a multi-resolution manner on one or more successive images. In step 102, the pattern to be recognized is identified. There are several ways to identify the target pattern. For example, if the target pattern is part of a first image, the pattern can be identified using a pointing device, inputting coordinate boundaries or providing the pattern itself (e.g. in a file). Other means for identifying a pattern are also suitable. The exact method for identifying the pattern in step 102 is not necessarily important to the present invention. In step 104, a new image is received at the processor. For example, an image can be captured by camera 8 and received by processor unit 12 (see FIG. 1). Alternatively, an image can be received by email, file transfer, etc. The present invention can function using any one of various means for receiving images. In step 106, the transformation space is identified for the particular pattern and image. By definition, the transformation space exists on its own as a symbolic representation of the different transformations possible. In various alternatives, steps 102, 104 and 106 are optional.

In step 108, the system finds the best transformation for the pattern P in image I. If the image I is part of a sequence of images, then the transformation found would be the transformation from the position of P in the previous image to the position of P in the current image. In step 110, the system reports the results of step 108. Reporting the results can include showing the pattern found at the transformation identified in step 108 on a display or monitor, graphically identifying the coordinates of the pattern, graphically displaying the best transformation, returning from a function call and reporting the transformation or coordinates of the pattern, passing a pointer to the transformation or coordinates of a pattern, writing the transformation or the pattern coordinates into a file, passing any of the above information to another software process, transmitting any of the above information to other hardware, etc. In step 112, the system determines whether there are more images to be analyzed. If there are no more images, then the method of FIG. 3 is completed. If there are more images to be analyzed, the system updates the pattern in step 114. That is, when finding the pattern in the next image I.sub.A+1, the system uses the pattern previously found in step 108 from image I.sub.A rather than the pattern from image I.sub.A-1. In an alternative embodiment, step 114 can be skipped and the system can continue to use the original pattern identified in step 102. After step 114 is completed, the system loops back to step 104 and operates on the next image. It is possible that step 104 was performed prior to step 114. In fact, the system can continue to receive images (step 104) simultaneously while performing any of the other steps of FIG. 3. Thus, the order of the other steps shown in FIG. 3 can be rearranged as suitable depending on the particular application.

The details of the step of finding the best transformation (step 108) are explained in the flow chart of FIG. 4. In step 140, the transformation space is subdivided into groups called cells. Each cell includes a number of possible transformations. For example, looking back at transformation T of FIG. 2, transformations G, H, Q, J, K, L, M, N and O can be grouped together as a cell. For translations, the cell would be two dimensional. For the affine transformation, the cell is six dimensional. The first time step 140 is performed on transformation space (e.g. the highest resolution level), the transformation space should be divided into a limited number of equally sized cells. For example, the transformation space can be divided into four equally sized cells having a width w and height h. In step 142, a maximum map is created using equation A above, based on w and h for a division into cells in step 140. In step 144, a minimum map is created using equation B, based on w and h from step 140. The maximum map is set up as an array such that each value in the max map represents a maximum value for the neighborhood of pixels in image I, where the neighborhood is the size w x h and the coordinate (x, y) in the max map corresponds to the corner of the neighborhood. The minimum map is set up in a similar fashion. The maps can be computed in log (wh) passes over image I.

In step 146, the system calculates a difference value D.sub.wh for each cell for the current resolution level. FIG. 5 is a flow chart describing the method of performing step 146 for each cell. Each cell has a reference transformation. The reference transformation is defined as the smallest transformation of all the transformations in a cell. For example, looking back at FIG. 2, if the cell consists of transformations G, H, Q, J, K, L, M, N and O, the reference transformation would be G where G=(t.sub.Gx, t.sub.Gy). If a cell only has one transformation, then that one transformation is the reference transformation.

In step 204, the next pixel is considered. If this is the first time step 204 is being performed, then the first pixel of the pattern is the pixel being operated on. To determine which pixel to operate on, the system starts with the pixel having the smallest x and y coordinates. For future iterations, increment x and/or y. In step 206, the system determines whether the pixel intensity value P of the pixel under consideration is within the minimum and maximum pixel values for the corresponding neighborhood. If so, then .delta..sub.wh =0. If not, the system tests whether the pixel intensity is greater than or equal to the maximum value for the corresponding neighborhood (step 210). If so, .delta..sub.wh =P-max (the maximum pixel intensity value for the neighborhood) (step 212). If the pixel intensity is not greater than the max, then the pixel value must be less than or equal to the minimum; therefore, .delta..sub.wh =min-P. where min is the minimum value for the neighborhood (step 214). After steps 208, 212 and 214, the system determines whether any more pixels in the pattern need to be examined. If so, the system loops back to step 204 and considers the next pixel. If all the pixels have been examined, then the system proceeds to step 218 to evaluate the appropriate block difference function using the values for .delta..sub.wh for each pixel. Steps 204 through 216 implement equation C.

Note that in the above discussion, when evaluating a cell the corresponding neighborhood for a pattern pixel is the neighborhood obtained by transforming the pattern pixel by the cell's reference transformation, and using that transformed location as the upper left corner of a box in the image whose width is w and whose height is h (where w and h are determined based on the cell's size). The box is the corresponding neighborhood. More precisely, the neighborhood is that neighborhood whose maximum value is M.sub.wh (t(p)), where p is the pattern pixel and t is the cell's reference transformation.

After the system calculates a difference value for each cell in step 146, the system identifies the cell (or associated reference transformation) with the smallest difference value in step 148. Rather than test for the smallest difference value, the system can use another predefined set of criteria to determine one or more cells for further operation. In step 150, the system determines whether the cells at the current resolution level are the smallest possible cell size. In many cases, the smallest possible cell size will include one transformation. The criteria for defining the smallest possible cell size will differ by application. If the cells of the current resolution level are not the smallest possible size, then in step 152 the cell identified in step 148 is subdivided into smaller equally sized cells. Thus, new cells are created with a new w and a new h and are at a new resolution level. The system loops back to step 142 and performs step 142 through 150 for the new resolution level of cells.

If, in step 150 the system determines that it has reached the smallest possible cell, then the system proceeds to step 154 and replaces the value D.sub.best with the difference value D for the cell identified in the previous iteration of step 148. At the beginning of the method, the value of D.sub.best is initially set to infinity or some other very high number. In step 156, the system backtracks up one level of cells (e.g. to the previous level) and, in step 158, the system picks one of the cells from the new level under consideration. The system attempts to pick the best cell first, with "best" being based on a difference value. The system determines whether the cell picked in step 158 has a difference value less than D.sub.best (step 160). If it doesn't, that cell is discarded from further consideration (step 162) and the system determines whether there are any more cells at the current level (step 164). If there are more cells to consider, the system loops back to step 158. If there are no more cells to consider, then the system proceeds to step 166 and determines whether there is another level of cells above the current level of cells being considered. If there are no more levels of cells, the method of FIG. 4 is completed. If there is another higher level of cells, the system loops back to step 156 and the next higher level of cells is considered. For each cell identified in step 160 that has a difference value less than the current D.sub.best, the system performs step 108 starting from that cell. That is, the system recursively calls the "find best transformation" step of FIG. 3 starting from that particular cell. Whenever the system reaches the smallest possible cell in step 150, it will replace D.sub.best with the difference value D of the cell if the difference value D of the cell is less than D.sub.best. Thus, after backtracking through all levels of recursion, the final value for D.sub.best represents the difference value calculated for the best transformation. Thus, the transformation associated with D.sub.best is the best transformation reported in step 110 of FIG. 3.

The size of the grid of cells imposed on the transformation space (e.g. the cells) determines how fine the search is. For translations, the system considers only those translations with integral coordinates. For affine transformations, a.sub.00 and a.sub.10 can be discretised with a grid step of 1/P.sub.w ; a.sub.01 and a.sub.11 can be discretised with a grid step of 1/P.sub.h ; and t.sub.x and t.sub.y can be discretised with a grid step of 1. Thus, changing a transformation's parameters by one grid step in one dimension changes the location of each transformed pattern pixel by no more than one image pixel.

The reference transformation for each cell is easy to determine: for the translation-only search it is a translation of the cell having the smallest t.sub.x and t.sub.y parameters. For the affine search, it is similarly the transformation in the cell with the smallest t.sub.x, t.sub.y and a.sub.ij parameters. Increasing any of these parameters can only increase the x and y coordinates of any transformed pattern pixel, as all the pattern pixel's original coordinates are non-negative.

Similarly, given the cell size for level i, w.sub.i and h.sub.i are easy to compute. In the translation case they are the size of the cell in the t.sub.x and t.sub.y dimensions, respectively. In the affine case, w.sub.i for a cell is the sum of the cell's edge lengths (counted in the appropriate grid steps) in the a.sub.00, a.sub.01 and t.sub.x dimensions; h.sub.i is the sum of the edge lengths in the a.sub.10, a.sub.11 and t.sub.y dimensions.

Computing the minimum and maximum maps for each level can include computing the minimum and maximum maps for lower levels. A lower level means a level with smaller cell sizes, but higher resolution. For example, completing a minimum and maximum map for a level having 8.times.8 cells can include creating the minimum and maximum maps for levels of 4.times.4 cells and 2.times.2 cells. Thus, steps 142 and 144 can be performed in earlier iterations of the method. More details of the above discussion can be found in "Efficient Guaranteed Search For Gray-Level Patterns," William J. Rucklidge, Proceedings of Computer Vision and Pattern Recognition 1997, p. 717-723, incorporated herein by reference.

The method discussed above ultimately attempts to find the best match for a pixel of the pattern to a pixel of the image. That is, at the bottom level of recursion a pattern pixel is compared to an image pixel. If the version of the pattern in the image has been changed (e.g. a change in size), a pixel to pixel comparison for the entire pattern may not be very accurate or efficient. In such a case, it is preferred to compare a pixel of the pattern to a neighborhood of pixels in the image, even at the lowest level of comparison. Thus, one embodiment of the present invention makes use of a modified pixel difference calculation D.sub.Nwh, where even at the lowest level of cells, a pattern pixel is compared to a neighborhood of pixels. For example, consider the translation case for the sum of squared differences. ##EQU14##

and in the affine case: ##EQU15##

.delta..sub.Nwh is determined by: ##EQU16##

The maps for evaluating .delta..sub.Nwh are: ##EQU17##

If the neighborhood N(x, y) consists of the point (x, y) and its eight neighbors (those directly or diagonally adjacent), then:

Thus, incorporating a 3.times.3 neighborhood N into the search can be done just by increasing w.sub.i and h.sub.i from each level by two, and offsetting the coordinates of the translations by one. For a 5.times.5 neighborhood, w.sub.i and h.sub.i are increased by three and the coordinates of the translation are offset by two. This modification (requiring almost no extra pre-computation) increases the robustness of the search. This observation applies whenever N(x, y) is a rectangular neighborhood.

In another embodiment, the method of the present invention can be improved for the case where the difference function is D.sup.sad (sum of absolute differences) and the search is over the space of translations. For purposes of the following discussion, it is assumed that the pattern's width and height (P.sub.w and P.sub.h) are both 16. The technique described below works for other widths and heights, but is easier to explain the technology in terms of a fixed power of two.

Define ##EQU18##

I.sup.s is an image array such that I.sup.s [x, y] is equal to the sum of the pixel intensities for the s.times.s square of I (the image) whose upper left corner is (x, y). P.sup.s is a pattern array such that P.sup.s [x, y] is equal to the sum of the pixel intensities for the s.times.s square of P (the pattern) whose upper left corner is (x, y). M.sup.s.sub.wh and m.sup.s.sub.wh, are like M.sub.wh and m.sub.wh, but computed over I.sup.s rather than I.

The equation [0,0].vertline..ltoreq.D.sup.sad (t.sub.x,t.sub.y)

states that the absolute difference between the sums of the pixel intensities (or values) in the pattern and a region of the image is no greater than the sum of the absolute differences between the individual pixels. This inequality can be generalized to the more complete set of inequalities ##EQU19##

These inequalities show that the pattern can be compared with a portion of the image by considering the 16.times.16 sums of the pattern's pixels and the image's pixels, or four 8.times.8 sums of the pattern's pixels, or 4.times.4 or 2.times.2 sums. A bad match of any of these sum-based comparisons means that the pattern and that portion of the image do not match well. Thus, using these inequalities, a single translation (t.sub.x, t.sub.y) can be proved to be no better than D.sub.best by and comparing the result to D.sub.best ; values (four each from I.sup.8 and P.sup.8) and comparing the result to D.sub.best ; values (16 each from I.sup.4 and P.sup.4) and comparing the result to D.sub.best ; values (64 each from I.sup.2 and P.sup.2) and comparing the result to D.sub.best ; and values (256 each from I and P) and comparing the result to D.sub.best.

If all goes well, most translations can be eliminated in the first few steps, so the total work done to consider every translation is greatly reduced.

Using these observations, the method of FIG. 4 can be modified as follows. Define

When a.ltoreq.b, this is equivalent to the definition ##EQU20##

Note that +y],M.sub.wh [t.sub.y +x,t.sub.y +y],P[x,y])

Define

D.sub.wh16.sup.sad (t.sub.x,t.sub.y)=.DELTA.(m.sub.wh.sup.16 [t.sub.x,t.sub.y ], M.sub.wh.sup.16 [t.sub.x, t.sub.y ],P.sup.16 [0,0])

This is the difference between the pattern's sum and the range of image sums seen in a w-by-h region.

It can be proved that if

then for all translations (t'.sub.x, t'.sub.y) such that t.sub.x.ltoreq.t'.sub.x <t.sub.x +w and t.sub.y.ltoreq.t'.sub.y <t.sub.y +h,

and it is safe to discard from consideration all translations in the cell having t.sub.x.ltoreq.t'.sub.x <t.sub.x +w and t.sub.y.ltoreq.t'.sub.y <t.sub.y +h. This is proved as follows. By construction, for any (t'.sub.x, t'.sub.y) in the cell, ].ltoreq.M.sub.wh.sup.16 [t.sub.x,t.sub.y ]

and so [t'.sub.x,t'.sub.y ]-P.sup.16 [0,0].vertline.

and (t'.sub.x,t'.sub.y)

We can define ##EQU21##

and show that, for a w-by-h cell of translations whose upper left corner is (t.sub.x, t.sub.y) and a translation (t'.sub.x, t'.sub.y) in that cell, t'.sub.y)>D.sub.best t'.sub.y)>D.sub.best t'.sub.y)>D.sub.best

Thus, the method of FIG. 4 can be modified by the steps of FIGS. 6A-6C. In step 302 of FIG. 6A, the image arrays (e.g. I.sup.16, I.sup.8, I.sup.4 and I.sup.2) are precomputed. In step 304, the pattern arrays (e.g. P.sup.16, P.sup.8, P.sup.4 and P.sup.2) are precomputed. At every level in the search, where the cell size is w-by-h, the minimum arrays (e.g. m.sub.wh, m.sup.2.sub.wh, m.sup.4.sub.wh, m.sup.8.sub.wh and m.sup.16.sub.wh) are computed (step 310 of FIG. 6B) and the maximum arrays (e.g. M.sup.16.sub.wh, M.sup.8.sub.wh, M.sup.4.sub.wh, M.sup.2.sub.wh and M.sub.wh) are computed (step 312 ). The steps of FIGS. 6A and 6 B are performed prior to the steps of FIG. 6C.

When a cell is being considered for discarding, the steps of FIG. 6C are performed. In step 330, the system computes D.sub.whN.sup.sad (t.sub.x, t.sub.y), where N equals the width of the pattern (e.g. 16). If D.sub.whN.sup.sad is greater than D.sub.best (step 332 ), then discard (e.g. remove from further consideration) the translations in the cell (step 334). If D.sub.whN.sup.sad is not greater than D.sub.best, then determine whether N is at a minimum value (e.g. 1) in step 336. If N is at the minimum value, the cell cannot be discarded (step 340). If N is not equal to the minimum value, then the system determines D.sub.whN.sup.sad for the next lower value of N. It is easiest to keep N as a power of 2. Therefore, if the previous iteration of steps 332-336 included N=16, step 338 would compute D.sub.wh8.sup.sad. After performing step 338, the system loops back to step 332. Thus, D.sub.wh8.sup.sad, D.sub.wh4.sup.sad, D.sub.wh2.sup.sad,and D.sub.wh.sup.sad would be successively compared to D.sub.best until the inequality of step 332 is satisfied (e.g. a difference value is greater than D.sub.best).

Reconciling and modifying the steps of FIG. 4 with the steps of FIG. 6C includes calculating D.sub.whN.sup.sad (step 330 of FIG. 6C) for the highest level of N in step 146 of FIG. 4. Steps 160 and 162 of FIG. 4 can be replaced by steps 332-340 of FIG. 6C. If steps 336 and 340 determine that the cell cannot be discarded, the method of FIG. 4 continues with step 108. If a cell is discarded in step 334, then the method of FIG. 4 continues with step 164.

All of the decisions in step 332 err on the side of caution, so if any of them says that discarding is safe, then it is safe. On the other hand, it might be safe even though none of the decisions say that it is. The decisions are ordered so that the cheapest comes first and if that one allows the cell to be discarded, then a considerable amount of work has been saved.

Although the embodiment of FIGS. 6A-C will, in most cases, run faster than the embodiment described in FIG. 4, the tradeoffs are that all of the various arrays that are computed take up memory and, for cells that are not pruned, this embodiment takes more time.

For example, let the pattern P be the 4.times.4 array shown in FIG. 7. That is, each box in FIG. 7 represents a pixel intensity. Let the image I be the 8.times.8 array shown in FIG. 8. Let w=h=2. FIG. 9A shows P.sup.2 and FIG. 9B shows P.sup.4. FIG. 10A shows I.sup.2 and FIG. 10B shows I.sup.4. FIG. 11A shows m.sub.wh, FIG. 11B shows m.sup.2.sub.wh, and FIG. 11C shows m.sup.4.sub.wh. The maximum array M.sub.wh is depicted in FIG. 12A, M.sup.2.sub.wh is depicted in FIG. 12B and M.sup.4.sub.wh is depicted in FIG. 12C.

Now, consider the w.times.h (i.e., 2.times.2) cell of translations at t.sub.x 32 0, t.sub.y 0. Suppose that D.sub.best is 100. D.sub.wh4.sup.sad is ##EQU22##

so based on the 4.times.4 sums, it is not possible to discard this cell. ##EQU23##

which is greater than D.sub.best. Thus, based on the 2.times.2 sums, it is possible to discard this cell, and no more computations need to be done for the translations in the cell.

If the system had been using the method described in FIG. 4, the system would have computed ##EQU24##

Not only would more work have been performed, but it would not have been possible to discard the cell based on this work.

The foregoing detailed description of the invention has been presented for purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed, and obviously many modifications and variations are possible in light of the above teaching. The described embodiments were chosen in order to best explain the principles of the invention and its practical application to thereby enable others skilled in the art to best utilize the invention in various embodiments and with various modifications as are suited to the particular use contemplated. It is intended that the scope of the invention be defined by the claims appended hereto.

## Claims

1. A method for finding a transformation of a gray level pattern in an image, comprising the steps of: sums of pixels of a region of said image; more sums of pixels of a region of said pattern; said minimum arrays contain the minimum value of a portion of said image arrays; said maximum arrays contain the maximum value of a portion of said image arrays; value based on a first pattern array, a first minimum array corresponding to said first image array and a first maximum array corresponding to said first image array; value greater than a previously determined best known difference value, wherein the best known difference value corresponds to a first difference value for a previously considered group; and difference value, said translation having said optimal difference value is said transformation of said gray level pattern in said image.

2. A method according to claim 1, further including the steps of:

3. A method according to claim 2, further including the step of:

4. A method according to claim 1, wherein: transformations to index said first minimum array and said first maximum array.

5. A method according to claim 1, wherein: corresponding image array.

6. A method according to claim 1, wherein: corresponding image array.

7. A method according to claim 1, further including the steps of: groups, each second difference value based on a second pattern array corresponding to a second image array, a second minimum array corresponding to said second image array and a second maximum array corresponding to said second image array; and value greater than said previously determined best known difference value.

8. A method according to claim 7, further including the steps of: groups, each third difference value based on a third pattern array corresponding to a third image array, a third minimum array corresponding to said third image array and a third maximum array corresponding to said third image array; and value greater than said previously determined best known difference value.

9. A method according to claim 8, wherein: said pattern array; and said pattern array.

10. A method according to claim 7, wherein: said pattern array; and pattern array.

11. A method according to claim 7, wherein: said pattern array, four values from said maximum array and four values from said minimum array.

12. A method according to claim 1, wherein said step of determining which translation includes the steps of: than or equal to said best known difference value, said step of subdividing creates a new set of groups having a new group size; group size; and translations using said new set of minimum arrays and maximum arrays.

13. A processor readable storage medium having processor readable code embodied on said processor readable storage medium, said processor readable code for programming a processor to perform a method for discarding incorrect transformations when trying to find an optimal transformation of a gray level pattern in an image, the method comprising the steps of: sums of pixels of a region of said image; more sums of pixels of a region of said pattern; said minimum arrays contain the minimum value of a portion of said image arrays; said maximum arrays contain the maximum value of a portion of said image arrays; value based on a first pattern array, a first minimum array corresponding to said first image array and a first maximum array corresponding to said first image array; and value greater than a previously determined best known difference value, wherein the best known difference value corresponds to a first difference value for a previously considered group.

14. A processor readable storage medium according to claim 13, wherein said method further includes the step of: difference value, said translation having said optimal difference value is said best transformation of said gray level pattern in said image.

15. A processor readable storage medium according to claim 14, wherein said step of determining which translation includes the steps of: than or equal to said best known difference value, said step of subdividing creates a new set of groups having a new group size; group size; and translations using said new set of minimum arrays and maximum arrays.

16. A processor readable storage medium according to claim 13, wherein: transformations to index said first minimum array and said first maximum array.

17. A processor readable storage medium according to claim 13, wherein: corresponding image array.

18. A processor readable storage medium according to claim 13, wherein said method further includes the step of: groups, each second difference value based on a second pattern array corresponding to a second image array, a second minimum array corresponding to said second image array and a second maximum array corresponding to said second image array; and value greater than said previously determined best known difference value.

19. A processor readable storage medium according to claim 18, wherein said method further includes the step of: groups, each third difference value based on a third pattern array corresponding to a third image array, a third minimum array corresponding to said third image array, a third maximum array corresponding to said third image array; and value greater than said previously determined best known difference value.

20. A processor readable storage medium according to claim 19, wherein: said pattern array; and said pattern array.

21. A processor readable storage medium according to claim 18, wherein: said pattern array; and pattern array.

22. An apparatus for finding a transformation of a gray level pattern in an image, comprising: and unit, said processor readable storage device storing processor readable code, said processor readable code for programming said processing unit to perform a method comprising the steps of: sums of pixels of a region of said image, more sums of pixels of a region of said pattern, said minimum arrays contain the minimum value of a portion of said image arrays, said maximum arrays contain the maximum value of a portion of said image arrays, value based on a first pattern array, a first minimum array corresponding to said first image array and a first maximum array corresponding to said first image array, value greater than a previously determined best known difference value, wherein the best known difference value corresponds to a first difference value for a previously considered group, and difference value, said translation having said optimal difference value is said best transformation of said gray level pattern in said image.

23. An apparatus according to claim 22, wherein: successive video images captured by said video camera.

24. A method according to claim 22, wherein: transformations to index said first minimum array and said first maximum array.

25. A method according to claim 22, wherein said method further includes the steps of: groups, each second difference value based on a second pattern array corresponding to a second image array, a second minimum array corresponding to said second image array and a second maximum array corresponding to said second image array; and value greater than said previously determined best known difference value.

26. A method according to claim 25, wherein: said pattern array; and pattern array.

27. A method according to claim 22, wherein said step of determining which translation includes the steps of: than or equal to said best known difference value, said step of subdividing creates a new set of groups having a new group size; group size; and translations using said new set of minimum arrays and maximum arrays.