Abstract:
A color barcode symbology is disclosed that can be accurately decoded despite severe distortions, misreads or altered symbols. This disclosed barcode is a color transition barcode having linear growth properties designed to resist the single or combined effects of: scaling distortions, perspective distortions, shear distortions, and wave distortions of both the uniform and non-uniform type distributed across the barcode&#39;s vertical or horizontal axis. This color barcode symbology is also resistant to missing symbols and altered symbols while offering, high security, error checking, and double error correcting capability.

Description:
This application claims the priority of United States provisional application Ser. No. 60/043,441 filed on Apr. 8, 1997. 
    
    
     BACKGROUND OF THE INVENTION 
     The invention relates to a color barcode symbology that can be accurately decoded despite severe distortions, misreads or altered symbols. More particularly, the present invention relates to a color transition barcode having linear growth properties designed to resist the single or combined effects of: scaling distortions, perspective distortions, shear distortions and wave distortions of both the uniform type and non-uniform type distributed across the barcode&#39;s vertical or horizontal axis. The color barcode symbology of the present invention is also resistant to missing symbols and altered symbols while offering, high security, error checking, and double error correcting capability. 
     There are three major classification of barcodes: one-dimensional, two-dimensional, and transition codes. 
     One-dimensional codes are typically a linear array of elements that are either printed directly on an object or on labels that are affixed to the object. As shown in FIG. 1, barcode elements typically are comprised of parallel bars and spaces, with bars of varying widths representing strings binary ones and spaces of varying widths representing strings of binary zeros. The specific arrangement of elements defines the encoded data according to a set of rules and definitions specified by the specific type of encoding being used. The height of a one-dimensional barcode is the height of each of the parallel bars and spaces. As more information is encoded into the barcode, the barcode width changes and the barcode height stays constant. A barcode exhibiting these growth characteristics is referred to as having linear growth properties. 
     As noted above, the parallel bars and spaces of one-dimensional barcodes have varying widths. Generally, the bars and spaces can be no smaller than a specified minimum width termed the barcode&#39;s &#34;x dimension&#34;. While the theoretical minimum &#34;x dimension&#34; size is the wavelength of the light being used to read the barcode, other practical limitations exist. Among these limitations are the desired depth of field of the reading equipment, the limitations of a given printing process and the robustness of the printed image to be correctly read despite dust, dirt, and minor physical damage. The relative size of the bars and spaces is determined by the type of coding use. The number of characters per unit length represented by the barcode symbol is referred to as the density of the symbol. 
     To encode a desired sequence of characters, a collection of element arrangements are concatenated together to form the complete barcode symbol, with each character of the message being represented by its own corresponding group of elements. In some symbologies, a &#34;start&#34; and &#34;stop&#34; character is used to indicate where the barcode begins and ends. A limitation of barcodes that use start and stop patterns is that these patterns take up wasted space because they are not used to encode any data. 
     Because most one-dimensional codes can get unusably long as lengthy data strings are encoded, most one-dimensional barcodes contain only five or six letters or digits. In view of the relatively small amount of data contained in a typical one-dimensional barcode, the most typical applications of a one-dimensional barcode is to use the encoded data merely as an index to a file or data base associated with the computer system where more comprehensive information is available. A number of different one-dimensional barcode symbologies exist including UPC/EAN, Coder 39, Code 93, Code 128, and Interleaved 2 of 5. 
     There are multiple variations of two-dimensional barcodes that currently exist. As for one-dimensional codes, two-dimensional codes can either printed directly on an object or on labels that are affixed to the object. One such two-dimensional barcode variation is an extension of a one-dimensional barcode in that one-dimensional barcodes are stacked with horizontal guard bars between them to increase the density. An example of such a barcode is shown in U.S. Pat. No. 4,794,239 to Allais. Other two-dimensional codes do not require a guard bar. 
     An example of a barcode not requiring a guard bar can be seen in U.S. Pat. No. 5,304,786 to Pavlidis et al and is referred to as PDF417 and is shown in FIG. 3. The &#39;786 patent eliminates the use of guard bars by having data values (codewords) in alternating rows being selected from mutually exclusive subsets of bar and space patterns. The subsets are defined in terms of particular values of discriminator function which is a function of the bar and space pattern in a given codeword. Alternating rows of bar and space patterns selected from mutually exclusive subsets of bar and space patterns allows the scanner to recognize whether a scan line has crossed a row in the middle of a codeword, because if a row has been crossed, the codewords scanned will not yield the same discriminator value as the previous row. 
     A limitation of two-dimensional barcodes which are comprised of a plurality of stacked one-dimensional codes is that they are sensitive to printing variations. This limitation occurs because the relative widths of the bars and spaces determine the data encoded in the barcode and any variation thereof will cause data errors to be incurred when scanning. The &#39;786 patent also discloses the broad concept of using codewords of different colors in alternate rows. That is, all rows of a multi-row label could use the same subset of bar and space patterns as codewords, but in different colors; the determination whether a row has been crossed would be made based on whether a color change had occurred. 
     Another type of two-dimensional barcode that exists is one containing a matrix of cells. The matrix has a respective width and height. DATA CODE is an example of this type of barcode and is shown in FIG. 4. These types of codes currently are formed under an invisible square grid. Cells under the grid are selectively darkened to be read by an optical scanning device. Decoding two-dimensional barcodes composed out of a matrix of cells is performed by laying down an imaginary grid over the matrix of cells and sampling over each grid center to determine if each cell is darkened or not darkened. Depending on the specification for the code, certain combinations of cells being darkened and other cells not being darkened can be translated by the optical scanning device into numeric or character data depending on the specification for the barcode. 
     Most two-dimensional barcodes are capable of storing much more information than one-dimensional barcodes as described in the &#39;786 patent. The size of two-dimensional barcodes containing a matrix of cells is proportional to the amount of data being stored in the barcode. Most two-dimensional barcodes containing a matrix of cells have an equal width and height but that is not always a requirement. Other two-dimensional barcodes which are comprised of stacked one-dimensional barcodes generally do not keep their width and height constant. In the case of PDF417, the height of each stacked linear barcode is allowed to variably change at each linear row as shown in FIG. 5 where rows 1 and 2 are of different heights. 
     Transition barcodes encode information by inserting transition indicia between adjacent barcode elements. One such transition code is shown in FIG. 2. This barcode is a one-dimensional barcode symbology in which solid bars and spaces of specified widths are replaced by cell columns of no required width. The barcode contains a plurality of cell column combinations that are concatenated together to form the complete barcode symbol, with each character of the message being represented by its own corresponding group of cell columns. The barcode uses &#34;start&#34; and &#34;stop&#34; characters to indicate where the barcode begins and ends. Only certain cell column combinations are chosen to form the complete barcode symbol. The cell column pattern chosen to represent a data value is dependent on the cell column pattern of the previous cell column to guarantee that enough change between adjoining cell columns is present. The change between adjacent cell columns is a form of transition indicia. Because the barcode is guaranteed on having a certain amount of change between each adjoining cell column, this type of barcode can be scanned by a barcode scanner having a variable scanning rate without using an additional clock track on the barcode or a positional encoder on the barcode scanner. This can be accomplished because the change between each adjacent cell column is used to signal that the cell column has been traversed. Because of this, the barcode symbology is fairly robust against distortions caused by low quality printing process, direct marking processes and hand-held scanning with linear CCD barcode scanners as will be discussed hereinafter. 
     The barcode symbology of FIG. 2 can also be viewed as a two-dimensional symbology formed as a matrix of cells. As additional data is encoded in the barcode, the barcode grows in a linear direction and the height of the barcode does not change unless subjected to a printing or scanning anomaly. The barcode symbology of FIG. 2 can additionally be viewed as a sparse matrix symbology where there is guaranteed absence of cells in the symbology depending on the data being encoded. This absence of cells coupled with the data encoding specification for the barcode is a form of transition indicia and aids in distortion resistance. 
     Another type of transition code can be found in U.S. Pat. No. 3,637,993 to Christie et al and is shown in FIG. 6. The &#39;993 patent discloses a linear barcode comprised of a plurality of contiguous colored bars, where each colored bar is of a color different from the color of its neighboring color bars. FIG. 6 shows an embodiment of this prior art barcode having three different colored bars 4, 5 and 6. The color change between adjacent colored bars is a form of transition indicia. Like the barcode of FIG. 2, this type of barcode can be scanned by a barcode scanner having a variable scanning rate without using an additional clock track on the barcode or a positional encoder on the barcode scanner. This barcode has the advantage of being distortion resistant and is approximately half the size of a similar color barcode having an integrated clock track. However, because the barcode is linear, the data encoding capacity of the barcode is limited and the barcode does not contain any means for error detection and correction as described next. 
     To resist against damage, one-dimensional, two-dimensional, and transition codes can contain error detection and error correction check-digits. One well known method for performing error detection and error correction is to use Reed-Soloman encoding and decoding and is described in U.S. Pat. No. 5,479,515 to Longacre Jr. Some linear barcodes and most two-dimensional barcodes and transition barcodes use Reed-Soloman encoding. 
     Reed-Soloman encoding requires the use of check-digits to be appended to the data portion of the barcode symbology. If a group of barcode elements (cells or bar and space patterns) in any type of barcode symbology that forms a single data value is damaged, error detection and correction check-digits will detect the error and correct the error. This is referred to as single or level error correction. The number of errors that can be corrected is proportional to the number of check-digits present in the symbology. Often times, additional check-digits are used to diminish the possibility of misdecodes. These additional check-digits can either be additional Reed-Soloman check-digits or Cyclic Redundancy Check digits. 
     In existing two-dimensional matrix type barcodes and transition barcodes, a grouping of cells is generally used to represent one data value. Traditionally, if one cell out of that group of cells is damaged, the data value assigned to that group of cells cannot be determined. As previously discussed, however, the data value associated with that group of cells can be detected and corrected by the error detection and correction check-digits. 
     It is a continuous goal to improve the error correction capability of any barcode symbology. To the inventors&#39; knowledge, single level error correction has only been done. The present invention improves data correcting capability by creating cell groups that are either self-correcting or yield a restricted set of possible solutions in absence of any error correcting or error detecting digits. This type of error correction system of the present invention is defined to be double level error correction. 
     Distortions common among printing and hand-held scanning devices include wave, shear, scale and perspective and combinations thereof. Any of these distortions can be oriented in the horizontal or vertical direction and be uniform or non-uniform in nature. A consistent three word naming system is used to classify distortion types. The first term explains the consistency of the code and is always uniform or non-uniform. The second term describes the major axis or the distortion and is always either horizontal or vertical. The final term describes the distortion type and is either wave, shear, scale or perspective. For example, codes could be named uniform vertical wave, or non-uniform horizontal shear. This allows a consistent language to describe the distortions, and nearly any imaginable mutation of a barcode can be described by the composition of one or more of these distortion types. Non-uniform distortions simply indicate that a distortion is not consistent across the major axis listed in the distortion naming description. 
     A first type of distortion is perspective distortion or sometimes referred to as a projection distortion. Perspective distortion is generally caused by an artifact in the scanning system where the imaging plane of the scanner is not placed parallel to the image plane of the barcode being scanned. Perspective distortion can either be uniform or non-uniform in nature. Uniform perspective distortion can be horizontal or vertical as shown in FIGS. 7 and 8, respectively. An example of non-uniform horizontal and vertical perspective distortion is shown in FIGS. 26 and 27, respectively. 
     Existing one-dimensional barcode symbologies can be difficult to decode under uniform perspective distortions because the relative spacing of bars and spaces is not preserved as shown in FIG. 13. The exception to this is when CCD two-dimensional scanners are used where the magnitude of perspective distortion can be calculated and the perspectively distorted scanned image can then be corrected. When decoding two-dimensional matrix symbologies, a grid is constructed over the symbology as described previously except the grid is uniformly scaled to fit over the perspectively distorted image. Unfortunately, this process is computationally intensive, requires extensive computer processing power, and takes time to perform. Transition symbologies, like the barcode of FIG. 2, can generally be easily decoded under uniform perspective distortions but, at times, require some processing to determine the extent and parameters of the perspective distortion. Transition barcodes as disclosed in the &#39;993 patent are not affected by perspective distortions. 
     A second type of distortion is scaling distortion. Scaling distortions can be caused by errors in the printing system or caused by artifacts in the scanning system. Scaling distortions can uniformly occur over both the horizontal and vertical axis as shown in FIGS. 9 and 10, respectively, and can be non-uniformly distributed over the horizontal and vertical axis as shown in FIGS. 11 and 12, respectively. 
     Most linear barcode symbologies are not affected by uniform scaling distortions because the relative size of the bars and spaces remain constant. However, some linear barcode symbologies, like UPC, require that the barcode be of a specific length. Uniform horizontal scaling distortions would cause the overall linear barcode length to shrink or expand rendering a barcode, like the UPC symbology, to be out of tolerance and, likewise, unscannable. Two-dimensional barcode symbologies are not affected by uniform horizontal or vertical scaling distortions unless the distortions causes the element sizes or the aspect ratio of the code to exceed the maximum specified for that specific barcode symbology. Because all transition codes in the &#39;993 patent have no aspect ratio requirements or element size restrictions, they are not rendered unscannable under uniform horizontal or vertical scaling distortions. 
     Linear barcode symbologies are not affected by non-uniform vertical scaling distortions as the appearance of the bars and spaces would not change. However, non-uniform horizontal scaling distortions are disastrous to linear barcode symbologies as the relative sizes of the bars and spaces will change rendering the barcode unreadable as shown in FIG. 14. The exception to this are linear barcodes having clock tracks formed within, such as the barcode known as Postnet. These types of linear barcodes can be non-uniformly horizontally distorted and still be scanable. 
     As for linear barcode symbologies, linear stacked two-dimensional symbologies are most affected by non-uniform horizontal scaling distortions as the relative sizes of the bars and spaces will change causing the barcode to be unscannable. 
     Generally, two-dimensional matrix symbologies are more tolerant of non-uniform scaling distortions across any major axis. Decoding two-dimensional matrix symbologies having non-uniform horizontal or vertical scaling distortions requires that an imaginary grid be non-uniformly distorted in the same fashion as the distorted barcode and placed over the distorted barcode. Forming a non-uniformly distorted imaginary grid is difficult to do in absence of any indicia on the barcode to indicate how the barcode is non-uniformly distorted. Clock tracks are often added to two-dimensional matrix symbologies to aid in forming this imaginary grid but with any major scaling distortions will still render these codes unscannable. In addition, mathematically forming a non-uniformly distorted imaginary grid is time consuming and requires a substantial amount of computing capability. 
     All existing transition codes are highly resistant to all types of non-uniform horizontal and vertical scaling distortions because varying element widths and heights does not affect the decodability of the code as a result of the presence of transition indica inherent in the symbology. Examples of the transition code of FIG. 2 being subjected to non-uniform horizontal and vertical scaling distortion may be found in FIGS. 15 and 16, respectively. 
     A third type of distortion is shear distortion. This type of distortion is often caused by the elements of a printhead not being exactly perpendicular to the direction of movement of the substrate being marked. Shear distortion can be created as an artifact of the scanning apparatus. For example, FIG. 25 shows a hand-held, one-dimensional scanning apparatus 7 scanning a non-distorted barcode 8 on a piece of paper. The scanning apparatus 7 will view the barcode 8 as having a shear distortion if axis 9 of the scanning elements of the scanning apparatus 7 is not perpendicular to the major axis 10 of the barcode 8 being scanned. 
     FIG. 17 shows an example of uniform horizontal shear distortion and FIG. 18 shows an example of uniform vertical shear distortion. All barcode types are generally resistant to mild forms of uniform shear distortion. However, excessive amounts of this distortion will render most existing barcode symbologies unscannable except the color transition code disclosed in the &#39;993 patent. Scanning under severe shear distortions becomes difficult because bar and space widths become difficult to determine in linear and stacked two-dimensional symbologies and element locations in two-dimensional matrix symbologies also become difficult to determine without extensive processing. Transition codes, such as the barcode of FIG. 2, are more tolerant of uniform shear distortions but they can become very difficult to decode under severe shear distortions because the transition point of each cell column becomes difficult to determine. The color transition barcode disclosed in the &#39;993 patent is not affected by uniform shear distortions because the intersection angle between each adjoining colored bar changes but does not affect scanability. 
     Non-uniform horizontal and vertical shear distortions as shown in FIGS. 19 and 20, respectively, are disastrous for all existing types of barcodes because the positions and relative spacing of the elements of these barcodes cannot be reliably determined. There are two exceptions however. The color transition barcode disclosed in the &#39;993 patent is not affected by non-uniform shear distortions because the intersection angle between each adjoining colored bar changes but does not affect scanability. The transition code of FIG. 2 is resistant to small amounts of this type of non-uniform shear distortion but excessive amounts of this distortion type will render this barcode unscannable because the transition point of each cell column becomes impossible to determine. 
     Referring again to FIG. 25, non-uniform horizontal and vertical shear distortions are most commonly caused by artifacts of the scanning process when the longitudinal axis 9 of the scanning elements of the hand-held barcode scanner 7 variably change in relationship to the major axis 10 of the barcode 8 being scanned. This can occur when the hand-held barcode scanner 7 is rotated around its longitudinal axis 11 as the barcode 8 is being scanned. 
     The last type of barcode distortion is wave distortion. Wave distortion can occur over the horizontal or vertical axis of a barcode and can be both uniform and non-uniform in type. Wave, in the context of this disclosure, implies a disturbance or oscillation between two points across the barcode in the direction parallel to the major axis of distortion. The disturbance or oscillation can be any type, such as sinusoidal, triangle, square, or saw. FIGS. 21 and 22, show examples of both uniform horizontal and vertical distortions having a sinusoidal waveform type. One characteristic attribute of uniform wave distortion is that the wave type is the same magnitude and phase on each end of the barcode. Non-uniform horizontal and vertical wave distortions shown in FIGS. 23 and 24, respectively, do not have the same magnitude and phase on each opposing end of the barcode. 
     Wave distortions can occur during the printing process where the object being marked moves relative to the printing apparatus. Wave distortions can be caused by an artifact of the scanning system. Referring again to FIG. 25, ideally, the barcode scanner 7 should not move along axis 12 of barcode 8 and only travel along the major axis 10 of barcode 8. Uniform wave distortions will be created if the hand-held scanner 7 begins to oscillate along axis 12 as the barcode is being scanned along axis 10. 
     Linear barcodes are very tolerant of uniform horizontal wave distortions. However, they are not very tolerant of uniform vertical wave distortions because a scanner may perceive improper bar and space widths if the barcode scanner is not scanning exactly parallel to the axis of the barcode being scanned. 
     Two-dimensional barcodes are not tolerant of any type of wave distortion as attempting to compute an imaginary grid over the barcode symbology to decode it is time consuming, requires a substantial amount of computing power and may be impossible without the aid of any suitable indicia from the barcode symbology indicating how the barcode is wave distorted. Barcode finder patterns and clock tracks help but under any substantial wave distortion, these indicia are generally not sufficient. 
     Transition codes, such as the barcode of FIG. 2, are extremely tolerant of uniform horizontal wave distortion. However, transition indica becomes lost under the remaining types of wave distortions and, likewise, the barcode of FIG. 2 becomes increasingly difficult to decode under these types of distortions. The color transition code disclosed in the &#39;993 patent and shown in FIG. 6, would be resistant to any type of uniform or non-uniform wave distortion because no transition indicia is lost under any type of wave distortion. 
     A propagation error in a barcode symbology occurs when an error in one element of the barcode propagates to the next or preceding element of the barcode. Therefore, one error becomes two or more errors. This phenomenon generally is caused by elements values of a barcode symbology being dependent on the value or structure of an adjacent element. The barcode of FIG. 2 is one example of a barcode symbology that is subject to propagation errors. 
     Propagation errors can also occur in color barcodes. U.S. Pat. No. 5,576,528 to Chew et al. describes a method for increasing information density of a barcode symbology by generating multiple constituent barcode symbols where each symbol is formed in a different color selected from a group of various primary colors. Each colored symbol is then overlaid on top of each other thus forming an aggregate barcode symbol of various colors. In areas where the differently colored bars overlap each other, colors distinct from those in the original group of colors are formed. Using a reverse process, each individual barcode can then be separated and individually processed. 
     Although this encoding method increases information density, robustness of the aggregate barcode symbology decreases as a result of propagation error phenomenon. This occurs because an error or color change in one element of the barcode may, under most circumstances, prevent the remaining color layers of the barcode from being determined. 
     The only barcode symbology that exhibits extraordinary resistance to all types of damage and distortions and is not subject to propagation errors is the color transition barcode disclosed in the &#39;993 patent. This barcode, however, is limited in its data capacity, does not contain a space efficient data encoding method, and does not contain any means for error correction and detection. 
     Distortion and damage resistance is very important in barcode symbologies when using hand-held printers and hand-held scanners because the human hand tends to be unsteady which can cause variations in the printing and scanning processes. A barcode having inherent distortion resistance is easier and quicker to scan with area and linear barcode scanning devices. 
     Damage and distortion resistance is also important when low quality printing processes are used, such as industrial ink-jet marking machines. Providing high quality marking and scanning machines is expensive and unnecessary if the barcode symbology being used is highly distortion resistant and contains a substantial amount of error detection and correction means. Distortion resistance is also important for most types of scanning applications because artifacts of the scanning system can cause the barcode to appear distorted. 
     With inexpensive color printing and scanning means becoming more prevalent, using color information in a barcode symbology is not unreasonable and quite desirable because color information, when used properly, aids in damage and distortion resistance while increasing the informational density of the barcode. Color is also eye appealing and desirable for marking consumer goods. 
     For the foregoing reasons, there is a need for a color transition barcode symbology that is resistant to the effects of all types of damage and distortions discussed hereinabove coupled with a space-efficient data encoding structure, and double error correction capability. 
     OBJECTS AND SUMMARY OF THE INVENTION 
     An object of the present invention to provide a color barcode symbology where the relative sizes of its elements is not critical, thereby rendering the barcode resistant to any type of distortion or combinations thereof discussed hereinabove. 
     Another object of the present invention to provide a color transition barcode symbology that can be decoded using a simple decoding algorithm without determining the type and magnitude of its distortion. 
     Yet another object of the present invention to provide a color transition barcode symbology that can be scanned by an area imager or a linear imager with and without positional feedback. 
     A further object of the present invention to provide a color transition barcode symbology that does not require start and stop patterns. 
     An even further object of the present invention to provide a color transition barcode symbology that incorporates a space efficient data encoding system. 
     Another object of the present invention to provide a color transition barcode symbology that can be printed at very high and low densities. 
     Yet another object of the present invention to provide a color transition barcode symbology that has double error correction capabilities. 
     An even further object of the present invention to provide a color transition barcode symbology that does not exhibit propagation error phenomenon. 
     Briefly, and in accordance with the foregoing, the present invention is directed to a color transition barcode symbology that satisfies the need for a barcode symbology that is resistant to the effects of all types of damage and distortions discussed previously, coupled with a space-efficient data encoding structure and double error correction capability. 
     A color transition barcode symbology having features of the present invention comprises a plurality of values that can be concatenated together according to a set of rules and definitions for encoding data. To represent each of these values, a plurality of mutually exclusive color sets is formed. A plurality of color cells is then created, each having a color chosen from any of the available colors contained in any of the color sets. 
     A plurality of unique color cell groups are then formed where each color cell group comprises a plurality of color cells chosen from the same color set. Each color cell group can then be referred to as have been formed from one of the available color sets. Each color cell in each color cell group is always bounded by a color cell of another color from the same color set creating a first form of transition indicia. 
     Each data value that the barcode symbology can encode is correlated to two or more color cell groups formed from different sets. As the barcode symbology is formed, each color cell group is bounded by a color cell group formed from a different color set creating a second form of transition indicia. To form a completed symbology, each data value to be concatenated together for encoding information is selected from one of the two or more color cell groups chosen to represent that data value. The actual color set of the color cell group chosen to represent that value depends on the color sets of the cell groups that will be bounding it in the barcode symbology so that two color cell groups from the same color set are never contiguous. A finder pattern is then constructed around the cell groups used to encode the data. 
     The combinations of cell elements forming color cell groups are strategically chosen to be able to unambiguously correct or minimize the number of possibilities the damaged color cell group could contain. When attempting to decode this barcode, the first process of attempting to correct each color cell group is performed before the second error correction process requiring check-digits is initiated. This process is, therefore, a form of double error correction which increases the error correction capability of this barcode symbology and further increases the barcode&#39;s resistance to damage and distortions by increasing the efficiency of the Reed-Soloman error correction algorithms. Also, because each color cell group represents a value directly, propagation phenomenon is not present. 
     The values for each of the check-digits are represented by a group of color cell groups that are exclusive from the group of color cell groups used to represent the encoded data. This eliminates the use of start and stop patterns in the barcode symbology because check-digits can be placed at the end of the barcode and data at the beginning of the barcode, thereby, inherently identifying the starting point and ending point of the barcode symbology. 
     These and other features, aspects, and advantages of the present invention will become better understood with regard to the following description, appended claims and accompanying drawings. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS AND APPENDICES 
     The file of this patent contains at least one drawing executed in color. Copies of this patent with color drawing(s) will be provided by the Patent Office upon request and payment of necessary fee. 
     The organization and manner of the structure and operation of the invention, together with further objects and advantages thereof, may best be understood by reference to the following description, taken in connection with the accompanying drawings, wherein like reference numerals identify like elements in which: 
     FIG. 1 illustrates a prior art linear barcode symbology; 
     FIG. 2 illustrates a prior art transition barcode symbology; 
     FIG. 3 illustrates a prior art PDF417 barcode symbology; 
     FIG. 4 illustrates a prior art DATA CODE two-dimensional barcode symbology; 
     FIG. 5 illustrates a prior art PDF417 barcode symbology having been subjected to non-uniform vertical scaling distortion; 
     FIG. 6 illustrates a prior art color transition barcode symbology; 
     FIG. 7 illustrates a two-dimensional barcode symbology having been subjected to uniform horizontal perspective distortion; 
     FIG. 8 illustrates a two-dimensional barcode symbology having been subjected to uniform vertical perspective distortion; 
     FIG. 9 illustrates a two-dimensional barcode symbology having been subjected to uniform horizontal scaling distortion; 
     FIG. 10 illustrates a two-dimensional barcode symbology having been subjected to uniform vertical scaling distortion; 
     FIG. 11 illustrates a two-dimensional barcode symbology having been subjected to non-uniform horizontal scaling distortion; 
     FIG. 12 illustrates a two-dimensional barcode symbology having been subjected to non-uniform vertical scaling distortion; 
     FIG. 13 illustrates a linear barcode symbology having been subjected to uniform horizontal perspective distortion; 
     FIG. 14 illustrates a linear barcode symbology having been subjected to non-uniform horizontal scaling distortion; 
     FIG. 15 illustrates a transition barcode symbology having been subjected to non-uniform horizontal scaling distortion; 
     FIG. 16 illustrates a transition barcode symbology having been subjected to non-uniform vertical scaling distortion; 
     FIG. 17 illustrates a two-dimensional barcode symbology having been subjected to uniform horizontal shear distortion; 
     FIG. 18 illustrates a two-dimensional barcode symbology having been subjected to uniform vertical shear distortion; 
     FIG. 19 illustrates a two-dimensional barcode symbology having been subjected to a non-uniform horizontal shear distortion; 
     FIG. 20 illustrates a two-dimensional barcode symbology having been subjected to a non-uniform vertical shear distortion; 
     FIG. 21 illustrates a two-dimensional barcode symbology having been subjected to uniform horizontal wave distortion having a sine wave function; 
     FIG. 22 illustrates a two-dimensional barcode symbology having been subjected to a uniform vertical wave distortion having a sine wave function; 
     FIG. 23 illustrates a two-dimensional barcode symbology having been subjected to a non-uniform horizontal wave distortion having a sine wave function; 
     FIG. 24 illustrates a two-dimensional barcode symbology having been subjected to a non-uniform vertical wave distortion having a sine wave function; 
     FIG. 25 illustrates a view of a hand-held barcode scanner scanning a barcode; 
     FIG. 26 illustrates a two-dimensional barcode symbology having been subjected to a non-uniform horizontal perspective distortion; 
     FIG. 27 illustrates a two-dimensional barcode symbology having been subjected to a non-uniform vertical perspective distortion; 
     FIG. 28 illustrates a view of the two-dimensional color barcode which incorporates features of the present invention; 
     FIG. 29 illustrates a flow chart describing a genetic algorithm for generating an optimal active set combination; 
     FIG. 30 illustrates a diagram showing two active sets being cross-bred; 
     FIG. 31 illustrates a flow chart of a first decoding algorithm that starts at a top cell of a cell column; 
     FIG. 32 illustrates a flow chart of a second decoding algorithm that starts at a bottom cell of a cell column; 
     FIG. 33 illustrates a view of a distorted two-dimensional color barcode of this invention showing typical scan paths of the first and second decoding algorithms; and 
     FIG. 34 illustrates a bar code. 
     APPENDIX A is a listing of an active set of cell columns; 
     APPENDIX B is a listing of the valid set of cell columns; 
     APPENDIX C shows the data cell column mapping; 
     APPENDIX D shows the Reed-Soloman cell column mapping; 
     APPENDIX E shows the miscellaneous cell column mapping; 
     APPENDIX F shows all the possible error types a cell column may be subjected to; 
     APPENDIX G shows a computer program listing in C++ for generating cell column solution statistics; 
     APPENDIX H shows a first sample output listing from the computer program in APPENDIX G showing the details regarding the correctability of cell columns in an active set; and 
     APPENDIX I shows a second sample output listing from the computer program in APPENDIX G showing the average correctability of each cell column in an active set. 
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     While the invention may be susceptible to embodiment in different forms, there is shown in the drawings, and herein will be described in detail, a specific embodiment with the understanding that the present disclosure is to be considered an exemplification of the principles of the invention, and is not intended to limit the invention to that as illustrated and described herein. 
     The preferred embodiment of the present invention is now described in detail. Referring to FIG. 28, a barcode of variable length is constructed. The barcode has a finder pattern of a unique pattern having two components: a solid horizontal line of contiguous black cells 13 on the top edge of the barcode, and two solid vertical lines 14 and 15 of contiguous black cells placed along the start side edge 16 of the barcode and along the stop side edge 17 of the barcode. This finder pattern is used to define physical size, orientation and symbol distortion. This finder pattern is also used to discriminate this barcode from other barcode symbologies. 
     Inside the finder pattern, a plurality of cell groups are formed and positioned. In the preferred embodiment, the amount of cell columns is always greater than one and increases and in proportion to the amount of data encoded inside the barcode. Each cell group is formed from a plurality of cells where each cell has a specific position within the cell group. In the preferred embodiment, each cell group is one cell wide by eight cells long and may be referred to as a cell column. Each cell in each cell column can be referenced by a cell position number where the lowest number, 0, represents the bottom cell in a cell column and the highest number, 7, represents the top cell in a cell column. These cell positions are referenced by a variable k. Each cell in each cell column has a color associated with it and the color chosen is either from a first set of colors or from a second set of colors. In the preferred embodiment, the first set of colors are RED, GREEN and BLUE otherwise known as additive colors. The second set of colors are CYAN, MAGENTA and YELLOW otherwise known as subtractive colors. The additive colors and subtractive colors are referred to as opposite color sets in this disclosure. An example of a cell column may be found in FIG. 28 where cell column 18 comprises of cells 19-26. The top cell 19 has a k value of 7 and the bottom cell 26 has a k value of 0. 
     There are three specific rules associated with each cell column. First, the color of the cells used in each cell column must only be from the additive color set or the subtractive color set. Combining cells of colors from both sets in one cell column is prohibited. Second, two cells of the same color in a cell column may not be contiguous. Third, a cell having a k value of 0 in a cell column may not have the same color as a cell having a k value of 7 in the same cell column. 
     In order to encode data into the barcode, each cell column must represent a data value. Likewise, unique combinations of cell colors in each cell column represent specific data values. Because working with color names is inconvenient, each color of the additive and subtractive color sets are correlated into numbers. 
     Because cell columns can either be formed from the additive set of colors or the subtractive set of colors, a single number can represent a color from both sets of colors. The following table shows the correlation: 
     
         ______________________________________VALUE        ADDITIVE     SUBTRACTIVE______________________________________0            RED          CYAN1            GREEN        MAGENTA2            BLUE         YELLOW______________________________________ 
    
     A cell column formed from either additive or subtractive sets of colors has the same cell column value. In other words, a value in the barcode can be represented two ways; by a cell column formed from cells having colors from the additive color set or by a cell column formed from cells having colors from the subtractive color set. Further reference to cell column values will now be made using the value associated with each cell, not the color of each cell. 
     For example, a cell column formed from cells having additive colors: 
     
         ______________________________________CELL POSITION(k VALUE)      CELL COLOR CELL VALUE______________________________________0              RED        01              GREEN      12              BLUE       23              RED        04              BLUE       25              RED        06              GREEN      17              BLUE       2______________________________________ 
    
     has an equivalent cell column value as a cell column formed from cells having the following subtractive colors: 
     
         ______________________________________CELL POSITION(k VALUE)      CELL COLOR CELL VALUE______________________________________0              CYAN       01              MAGENTA    12              YELLOW     23              CYAN       04              YELLOW     25              CYAN       06              MAGENTA    17              YELLOW     2______________________________________ 
    
     These two cell columns represent the same cell column value because each respective cell in each of the above cell columns has the same value associated with it. For example, cell position 1 from the additive cell column is RED and has a corresponding value of 0 and cell position 1 from the subtractive cell column is CYAN which also has a corresponding value of 0. 
     Because each cell can represent three different values, 0, 1 and 2, each column could theoretically represent 3 8  =6561 different combinations. 
     There are a couple different ways of referencing the value of a cell column. A first way is by the cell column&#39;s raw value. Every unique combination of cells in a cell column is represented by a cell column raw number. The cell column raw number is computed by the following formula: ##EQU1## 
     In the two examples cited above, both cell columns have equivalent cell column values because each cell in each respective cell column have equivalent values. The raw cell column value is calculated as follows: 
     
         3.sup.0 (0)+3.sup.1 (1)+3.sup.2 (2)+3.sup.3 (0)+3.sup.4 (2)+3.sup.5 (0)+3.sup.6 (1)+3.sup.7 (0)=912 
    
     Every raw value representing every possible combination of cell values in a cell column forms the global set. However, not every raw cell column value between 0 and 6561 would represent a valid cell column. This is because of the rules stated previously where two of the same cell colors (or cell values) cannot be contiguous and the color or value of the top cell cannot be the same color or value as the bottom cell. Under these constraints, a valid set of cell columns can be constructed, known hereinafter as the valid set. The valid set is comprised of two hundred and fifty-eight cell column combinations and is a subset of the global set. The valid set of cell columns formed from the global set is found in APPENDIX B where each valid cell column combination is tagged or identified by its raw cell column number. 
     Because this invention uses Reed-Soloman error detection and correction, the barcode must be able to represent forty-seven different values which is the size of the Galois Field (GF) chosen in the preferred embodiment. In prior art barcodes, the set size of cell columns or groups chosen is the same size as the barcode&#39;s Galois Field (GF) and the same cell groups used for data encodation are also used to encode the check-digits. This can cause ambiguity when decoding damaged barcodes because, under damage, it can be difficult to determine if the specific cell group represents a data value or check-digit value. 
     The preferred embodiment uses ninety-four cell columns constructed from unique combinations of eight cell values. The first forty-seven cell columns represent data values and the second forty-seven cell groups represent Reed-Soloman check-digit values. Cell columns representing data values are described as data cell columns and cell columns representing Reed-Soloman check-digit values are described as Reed-Soloman cell columns. The actual value that each of the ninety-four cell columns represents has to be between 0 and 46 under a Galois Field of forty-seven but each cell column set is distinguishable from each other because they are now formed from unique combinations of cell values, thereby eliminating any ambiguity. 
     Other miscellaneous cell columns are needed for the barcode of the present invention as well. The miscellaneous cell column set provides information about the structure of the barcode. The preferred embodiment uses twelve miscellaneous cell columns. 
     Including the data value set, Reed-Soloman value set, and the miscellaneous set, the barcode requires a total of one hundred and six unique cell column combinations. As stated previously, each of the one hundred and six cell column combinations used in the barcode can either be represented with an additive set of colors or a subtractive set of colors. The one hundred and six cell column combinations used to encode the data value set, the Reed-Soloman value set, and the miscellaneous set are a subset of the two hundred and fifty-eight cell columns that comprise the valid set. These one hundred and six cell column combinations are referred to as the active set of cell columns and are shown in APPENDIX A. 
     Each active cell column may be subjected to a number of different types of errors. In fact, a cell column comprised of eight cells may be subjected to a total of two hundred and fifty-five different types of cell column errors as shown in APPENDIX F where the &#34;?&#34; represents an unknown cell value and a &#34;-&#34; represents a known cell value. For each cell column error type, a set of valid solutions can be generated. Each possible solution must conform to the rules where two of the same cell colors, or cell values, cannot be contiguous and the color or value of the top cell cannot be the same color or value as the bottom cell of a cell column. In addition, each solution must be a member of the active set. A valid solution that conforms to this final requirement is called an active solution. By using these three constraints, the amount of possible solutions for each cell column error type diminishes. To clarify, the number of valid solutions for each cell column error type is the same no matter what combination of cell columns are chosen for the active set. The number of active solutions is always less than the number of valid solutions, because the active set is smaller than and a subset of the valid set and depends on the combinations of cell columns used to construct the active set. 
     One of the objects of this invention is to incorporate double data correcting ability in the barcode symbology. Double data correcting ability involves attempting to correct errors in each cell column before the Reed-Soloman error correction algorithms are used to detect and correct errors. To create an effective double data correcting barcode, one hundred and six cell columns are strategically chosen from the available cell columns contained in the valid set, thereby forming an active set of cell columns. 
     The objective is to pick a group of one hundred and six cell columns from the valid set where the number of active solutions available for each cell column error type shown in APPENDIX F is minimized. This can best be demonstrated in reference to an active set of one hundred and six cell columns chosen as shown in APPENDIX A. 
     A computer program can be written by one skilled in the art that takes a cell column from the active set in APPENDIX A and subjects each cell column to each cell column error type listed in APPENDIX F. One such computer program is found in APPENDIX G. The number of valid and active solutions is then calculated for each error type. APPENDIX H is a small portion of the output of such a computer program for the cell column having a raw value of eight hundred and seventy-five from the active set shown in APPENDIX A. 
     The computer program shown in APPENDIX F also compiles the number of active solutions for each cell column error type in each cell column of the active set being analyzed. A summary of this information for the active set of APPENDIX A is shown in APPENDIX I. To explain this summary in APPENDIX I: column 27 represents the raw number of the cell column of the active set being analyzed; column 28 represents the cell values comprising each cell column referenced by k value, column 29 represents the percentage of cell column error types found in APPENDIX F subjected to each respective cell column that have only one active solution or, in other words, are unambiguously correctable; column 30 represents the percentage of cell column error types found in APPENDIX F subjected to each respective cell column that have two active solutions; and column 31 represents the percentage of cell column error types found in APPENDIX F subjected to each respective cell column that have three active solutions. An average of one, two, and three active solution percentages is computed for all cell columns in the active set and is shown on line 32 of APPENDIX I. 
     It is desired to find the most optimal set of cell columns for use in the active set. Because the valid set comprises two hundred and fifty-eight cell columns and the active set size in the preferred embodiment must be comprised of one hundred and six cell columns, the following formula describes the total number of possible active set combinations that can be formed from the valid set: ##EQU2## 
     Because there are an overwhelming number of active set combinations, it would not be practical to evaluate the correctability of each cell column in each of the possible active set combinations for determining the best combination of cell columns to use for the final active set. Therefore, an algorithm needs to be used to converge on the most optimal solution. The inventor chose to use a genetic algorithm to attempt to find the most optimal solution set. 
     The genetic algorithm used to find the best group of one hundred and six cell columns for the active set can be best understood when referencing FIG. 29. The genetic algorithm starts out in step 3601 and progresses to step 3602 where, a population of ten active sets are retrieved. These ten active sets are known as parent sets. Step 3603 randomly selects two active sets from the ten active sets created in step 3602. Step 3604 then crossbreeds the two random selected active sets from 3603 forming a first active child set and a second active child set. Step 3605 determines if the first child set is more fit than both its respective parents. If so, that first child set is stored in step 3606. If the first child set is not more fit than both its respective parents, then it is discarded in step 3607. Step 3610 then determines if the second child set is more fit than both its respective parents. If so, that second child set is stored in step 3608. If the second child set is not more fit than both its respective parents then it is discarded in step 3609. Step 3612 then determines if ten new children have been stored. If not, then step 3603 is re-executed to create in attempt to create more children that are more fit then their respective parents. If ten new children have been stored, then the algorithm terminates in step 3611. 
     The function of cross-breeding can best be understood when referencing FIG. 30. Two active sets 3701 and 3702 are chosen to be crossbred. Active set 3701 can also be referred to as active set A and active set 3702 can also be referred to as active set B. Active sets A and B are to be combined at crossover location 3705, thereby, forming two children 3703 and 3704. Crossover location 3705 is randomly changed to provide more variety in the offspring created every time the algorithm in FIG. 29 is executed. Children 3703 and 3704 are also known as child sets AB and BA, respectively. Child set AB is formed by combining cell columns left of crossover point 3705 in active set A with cell columns right of crossover point 3705 in active set B. Likewise, child set BA is formed by combining cell columns left of crossover point 3705 in active set B with cell columns right of crossover point 3705 in active set A. 
     Determining whether a child set is more fit than its parents is dependent on two factors. The first factor is whether or not the child set comprises a valid set of cell columns. A cell column set is only valid if it contains cell columns found in the valid set of cell columns and if none of the cell columns in the child set are repeated more than once. The second factor is whether or not the child set has a higher score than both its parents. In the preferred embodiment, each set is assigned a score which is the average percentage of all unambiguously correctable cell column errors for each cell column in the set being analyzed. This score is generated by the computer program in APPENDIX F and shown in APPENDIX I at location 33. Therefore, a higher score indicates that, on average, each cell column comprising that active set is more correctable than an active set with a comparable lower score. 
     The algorithm in FIG. 29 is repeated as many times as desired until a suitable active set is found. The first time the algorithm is executed, ten active sets of one hundred and six cell columns each are randomly created from the valid set of cell columns. Each subsequent time the algorithm in FIG. 29 is repeated, the ten active parent sets loaded in step 3602 are the resultant child sets from the last execution of the algorithm. Therefore, each generation of ten active sets generated by the algorithm are always more fit or have higher scores than the previous generation. As is well known in the art of genetic algorithms, a mutation is periodically introduced in one or more of the ten active parent sets in an attempt to create more variability of the active parent population and, likewise, create more fit offspring. 
     An active set generated from multiple iterations of such a genetic algorithm is shown in APPENDIX A. It should be obvious that other active set combinations could be used that may have higher scores using these methods. At the time of the priority date, the most fit active set found by the inventors was the active set found in APPENDIX A. 
     Now that the method in which the barcode&#39;s cell columns and respective values have been chosen, the inventor maps the data, Reed-Soloman, and miscellaneous values to actual cell columns to each cell column of the active set APPENDIX A. APPENDIX C shows the data cell column mapping, APPENDIX D shows the Reed-Soloman cell column mapping, and APPENDIX E shows the miscellaneous cell column mapping. 
     The barcode is formed by first determining which data values need to be concatenated together to encode the desired information according to the rules chosen to encode the desired information or data. Next, Reed-Soloman check-digits are computed. Finally, various miscellaneous values are determined that describe the data error correction format and structure of the barcode. All of these values are correlated to respective cell columns values (i.e. data values to data cell columns; Reed-Soloman values to Reed-Soloman cell columns; and miscellaneous values to miscellaneous cell columns) using the tables found in APPENDICES C, D and E. The cell columns values are then concatenated together in a sequence using specific rules of the symbology. In the preferred embodiment, the first cell column in the sequence is a miscellaneous cell column describing the starting mode of the barcode. Data cell columns are then added to the sequence. Reed-Soloman cell columns follow the data cell columns. The final cell column in the sequence is another miscellaneous cell column describing parameters for the Reed-Soloman error correction check-digits. 
     With reference to FIG. 28, cell columns are placed within the finder pattern starting from the left inner side 34 of the barcode finder pattern. It is required that when each cell column is placed in the barcode, that the cell columns alternate between the additive and subtractive color sets so that each cell column is always surrounded by a cell column of the opposite color set (i.e. additive cell columns are surrounded by subtractive cell columns etc.). The exception is the first and last cell columns where the left and right sides respectively are bounded by black finder pattern cells. For example, the first cell column placed in location 35 is chosen from the additive set of colors. The second cell column placed in location 36 must be formed from the subtractive colors and the third cell column placed in location 37 must be formed from the additive colors, etc. The last cell column placed at location 38 within the finder pattern must always be from the subtractive set of colors. 
     A completed barcode symbology has now been formed having resistance to the single or combined effects of: scaling distortions, perspective distortions, shear distortions, and wave distortions of both the uniform and non-uniform type traversing the barcode&#39;s vertical or horizontal axis. This can best be demonstrated by discussing methods of decoding this barcode symbology. 
     Referencing FIG. 28, the finder pattern is first located in the field of view of the barcode scanning apparatus. This process requires a two-dimensional barcode scanner or a linear barcode scanner that is capable of storing two-dimensional bitmap image for decoding. Next, it is required to find the top cell of the first cell column for decoding. This can be done by locating both the solid vertical line of the finder pattern 15 on side 16 of the barcode, and the top horizontal bar 13 of the finder pattern. The intersection point of both these finder pattern components surrounds the top left corner of the top cell of the first cell column 38. Before the actual decoding process is initiated, it is desirable to find the center of the top cell of the first cell column. Because the top left corner has been identified, it is a simple matter to first scan towards the right and towards the bottom of the barcode until the top right, bottom right, and bottom left corners are located which yields the general size and shape of the top cell. The center point of the top cell is approximated using this information. 
     The center of the top cell of the first cell column 38 is used as the starting point for the cell decoding algorithm shown in FIG. 31. In fact, the starting point for decoding all cell columns using the algorithm in FIG. 31 is always the center point of the top cell of the specific cell column being decoded. 
     The operation of the decoding algorithm depicted in FIG. 31 will now be discussed. A visual representation of how this decoding algorithm works should be done in reference to FIG. 33 which depicts a moderately distorted barcode symbology of the type disclosed in this instant invention. The objective of the decoding algorithm in FIG. 31 is to scan along each cell column until all eight cells in the cell column have been traversed and decoded. Line 39, depicts a path that the scanning algorithm of FIG. 31 could incur. 
     The decoding algorithm of FIG. 31 starts out with step 3801. Step 3802 is next executed where initial data values and parameters are initialized. The variable i is a cell counter and represents the amount of cells traversed in the current cell column. The variable j represents the amount of cell columns that have been decoded and the current value of j always represents the current cell column being subjected to the decoding algorithm. Step 3802 initializes the scan angle to 180 degrees. Scan angles are always measured in degrees where a scan angle of 0 degrees or 360 degrees indicates a scan direction towards the top of the barcode. Step 3803 is executed next where the current scan position is placed in the center of the bottom cell of the current cell column being decoded using the procedure described previously. The color of that cell is determined and stored in step 3804. Step 3805 then advances the scan position towards the next cell immediately above the current cell using the current scan angle. Step 3806 then looks for a color transition, if there is no color transition, then the scan continues in step 3805 using the current scan angle along the same path. When step 3806 detects a color transition, step 3807 is executed which determines if the color of the newly penetrated cell is derived from the same color set as the recently exited cell. If this is not the case, then this is an indication that the newly penetrated cell is a member of an adjacent cell column or finder pattern. Step 3808 then relocates the scan position to the point immediately before the last color transition point and the new scan angle is chosen in step 3809. The new scan angle chosen should be chosen to avoid scanning in the reverse direction. 
     If the color of the newly penetrated cell in step 3807 is derived from the same color set as the recently exited cell, then this is indication that the newly penetrated cell is a member of the same cell column. In this case, step 3810 is executed storing the color of the newly penetrated cell. Step 3811 increments i to keep track of how many cells have been traversed in the current cell column. Step 3812 determines if all eight cells in the cell column have been decoded. If not, then step 3805 is reentered to continue scanning for additional cells. If all eight cells have been traversed, then step 3813 is executed which resets the cell counter i and increments the cell column counter j. Step 3814 checks to see if all of the cell columns have been scanned. If no, then step 3803 is reentered which initiates a new scan at the top cell of the next cell column. If step 3814 determines that all of the cell columns have been scanned, then the decoding algorithm terminates in step 3815. 
     Under cases of damage to the barcode symbology, the scanning algorithm may not be capable of crossing the entire length of each cell column. In this case, the data captured using the scanning algorithm of FIG. 31 is saved and the scanning algorithm shown in FIG. 32 is then used to attempt to capture the remaining cells of the cell column being scanned. This scanning algorithm is similar to the scanning algorithm shown in FIG. 31 except the scanning is initiated from the bottom cell of each cell column instead of the top cell. Normally the second scanning algorithm in FIG. 32 is only used if the first scanning algorithm shown in FIG. 31 cannot be successfully completed. Because the second scanning algorithm needs to start at the bottom cell of the cell column to be scanned, that bottom cell needs to be located. This can be done by scanning along the bottom row of the barcode and counting transitions until the desired cell column is located. 
     The operation of the decoding algorithm depicted in FIG. 32 will now be discussed. A visual representation of how this decoding algorithm works should be done in reference to FIG. 33 which depicts a moderately distorted barcode symbology of the type disclosed in this instant invention. The objective of the decoding algorithm in FIG. 32 is to scan along each cell column until all eight cells in the cell column have been traversed and decoded. Line 40 depicts the path on which the scanning algorithm of FIG. 32 could incur. 
     The decoding algorithm of FIG. 32 starts with step 3901. Step 3902 is next executed where initial data values and parameters are initialized. The variable i is a cell counter and represents the amount of cells traversed in the current cell column. The variable j represents the amount of cell columns that have been decoded and the current value of j always represents the current cell column being subjected to the decoding algorithm. In this scanning algorithm, i is set to seven so that the bottom cell of the cell column is scanned first and the scan-angle is set to 0 degrees so that the scanning direction generally proceeds towards the solid horizontal line of contiguous black cells 13. Step 3903 is executed next where the current scan position is placed in the center of the top cell of the current cell column being decoded using the procedure described previously. The color of that cell is determined and stored in step 3904. Step 3905 then advances the scan position towards the next cell immediately below the current cell using the current scan angle along path 40. Step 3906 then looks for a color transition, if there is no color transition, then the scan continues in step 3905 using the current scan angle along the same path. When step 3906 detects a color transition, step 3907 is executed which determines if the color of the newly penetrated cell is derived from the same color set as the recently exited cell. If this is not the case, then this is an indication that the newly penetrated cell is a member of an adjacent cell column or finder pattern. Step 3908 then relocates the scan position to the point immediately before the last color transition point and the new scan angle is chosen in step 3909. The new scan angle chosen should be close to the previous scan angle to avoid scanning in the reverse direction. 
     If the color of the newly penetrated cell in step 3907 is derived from the same color set as the recently exited cell, then this is indication that the newly penetrated cell is a member of the same cell column. In this case, step 3910 is executed storing the color of the newly penetrated cell. Step 3911 decrements i to keep track of how many cells have been crossed in the current cell column. Step 3912 determines if all eight cells in the cell column have been decoded. If not, then step 3905 is reentered to continue scanning for additional cells. If all eight cells have been traversed, then step 3913 is executed which resets the cell counter i and increments the cell column counter j. Step 3914 checks to see if all of the cell columns have scanned. If no, then step 3903 is reentered which initiates a new scan at the bottom cell of the next cell column. If step 3914 determines that all of the cell columns have been scanned, then the decoding algorithm terminates in step 3915. 
     Because of the structure of the barcode, the barcode can be decoded using the above two decoding algorithms and, likewise, is resistant to all types of distortions discussed in this disclosure for the following reasons: (1) Because the barcode is transition based, the length of each cell in each cell column is not critical. The decoding algorithm shown in FIG. 31 will successfully decode a cell of any length in a cell column by remaining in steps 3805 and 3806 until a color transition is detected. Therefore, any distortions that cause each cell height to variably change will not render the barcode unscannable. (2) When the decoding algorithm scans down each cell column, each color transition within the same color set serves as a clock track or indication that a new cell has been entered. Because each cell is always surrounded by a cell of a different color, a plethora of inherent clock tracks are formed within the barcode. Under practically any type of distortion, the clock tracks serve as indicators on how the barcode is distorted throughout the entire width and height of the barcode. This is advantageous under non-uniform distortions where the distortion is not uniformly distributed throughout the barcode symbology. (3) Lastly, because each cell column is surrounded by a cell column formed from cells of the opposite color system, each cell column is bounded by a form of indicia that indicates that the decoding algorithm has traversed an adjoining cell column. Because of this indicia, the decoding algorithm shown in FIG. 31 or FIG. 32 is able to accurately track along each cell column under extreme amounts of uniform and non-uniform wave, shear, scaling and perspective distortions. 
     The next step in the decoding process involves decoding the colors of the cells of each cell column into their respective data, Reed-Soloman, and miscellaneous values. As each cell in each cell column is decoded through both scanning algorithms, the corresponding value of the color of each cell is stored in an eight element array. The array is then converted into a raw value using the following formula: ##EQU3## where k is the position within the array and CellValue(k) represents the value of a cell placed in array position k. 
     The raw value is then correlated, through a look-up table, to a data value, a Reed-Soloman value, or a miscellaneous value. 
     In the case that some of the elements in the eight element array are unknown as a result of damage in the cell column, a determination of the cell column value may still be made without resorting to the Reed-Soloman check-digits. This is the first step in double data correction. This is done by substituting every available cell value combination in the unknown element positions in the eight element array until one or more active solutions are found. For example, the following eight element array is filled with cell value data extracted from a cell column except that the first or top cell (Cell position k=7) of the cell column could not be determined. 
     
         ______________________________________Cell Position (k)        0     1      2   3    4   5    6   7Cell Value   ?     0      1   2    1   0    1   0______________________________________ 
    
     Cell position 0 can only take three possible values: 0, 1 or 2. Substituting each of these three possible values into the unknown cell position 0 yields the following three cell column possibilities. 
     Cell Column Raw Value=873 
     
         ______________________________________Cell Position (k)        0     1      2   3    4   5    6   7Cell Value   0     0      1   2    1   0    1   0______________________________________ 
    
     Cell Column Raw Value=874 
     
         ______________________________________Cell Position (k)        0     1      2   3    4   5    6   7Cell Value   1     0      1   2    1   0    1   0______________________________________ 
    
     Cell Column Raw Value=875 
     
         ______________________________________Cell Position (k)        0     1      2   3    4   5    6   7Cell Value   2     0      1   2    1   0    1   0______________________________________ 
    
     The first possibility having a cell column raw value of 873 is an invalid cell column combination because contiguous cell positions 0 and 1 both contain a cell value of 0. The second possibility having a cell column raw value of 874 is a valid cell column but it is not part of the active set found in APPENDIX A, therefore, it is not an active solution. The third possibility having a cell column raw value of 875 is a member of the active set in APPENDIX A and is the only possible active solution. In this case, the damaged cell column can be immediately corrected. Because the active set in APPENDIX A has been optimally chosen using genetic algorithms, the number of active possibilities, in the case of damage, for all cell columns in the active set has been minimized. 
     In the case where more than one active solution is possible or when a cell column is missing or severely damaged, the cell column can be treated as an erasure and corrected using Reed-Soloman error correction algorithms. After each cell column has been successfully decoded, the desired information encoded in the barcode is extracted using the symbology&#39;s data encodation rules. 
     When decoding symbologies that have had substantial environmental exposures, fading can occur which can render them difficult to decode as a result of the barcode&#39;s cells changing in contrast, brightness and color. The instant invention attempts to eliminate that problem by strategically placing color cells that inform the scanning apparatus what the contrast, brightness and color thresholds are at various points within the barcode. These color cells are incorporated within the miscellaneous cell column values shown in APPENDIX E. Each of these miscellaneous cell columns has the last three cells (k=5, 6, 7) being 0, 1 and 2, respectively. Because a miscellaneous cell column is always placed at the beginning and at the end of the symbology in the preferred embodiment, a cell value of 0, 1 and 2 is always present at cells 41, 42 and 43, respectively, at the beginning of the symbology and at cells 44, 45 and 46 at the end of the symbology, see FIG. 34. Because the first cell column at the beginning of the symbology is composed of cells from the additive set, cell 44 is always BLUE, cell 45 is always GREEN, and cell 46 is always RED. Likewise, because the last cell column at the end of the symbology is composed of cells from the subtractive set, cell 47 is always YELLOW, cell 48 is always MAGENTA, and cell 49 is always CYAN. Because cells 41, 42, 43, 44, 45, and 46 are all abeam the barcode&#39;s finder pattern, they are all easily found by the decoding algorithm before decoding of each cell column commences. 
     While a preferred embodiment of the present invention is shown and described, it is envisioned that those skilled in the art may devise various modifications of the present invention without departing from the spirit and scope of the appended claims. ##SPC1##