WO2021064272A1 - Código visual, procedimiento para generar un código visual y procedimiento para decodificar un código visual - Google Patents

Código visual, procedimiento para generar un código visual y procedimiento para decodificar un código visual Download PDF

Info

Publication number
WO2021064272A1
WO2021064272A1 PCT/ES2020/070598 ES2020070598W WO2021064272A1 WO 2021064272 A1 WO2021064272 A1 WO 2021064272A1 ES 2020070598 W ES2020070598 W ES 2020070598W WO 2021064272 A1 WO2021064272 A1 WO 2021064272A1
Authority
WO
WIPO (PCT)
Prior art keywords
cells
color
code
colors
cell
Prior art date
Application number
PCT/ES2020/070598
Other languages
English (en)
French (fr)
Inventor
Pedro Enrique LÓPEZ DE TERUEL ALCOLEA
Alberto RUIZ GARCÍA
Felix Jesús GARCÍA CLEMENTE
Original Assignee
Universidad De Murcia
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Universidad De Murcia filed Critical Universidad De Murcia
Publication of WO2021064272A1 publication Critical patent/WO2021064272A1/es

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K19/00Record carriers for use with machines and with at least a part designed to carry digital markings
    • G06K19/06Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code

Definitions

  • Visual code procedure for generating a visual code and procedure for decoding a visual code
  • the present description refers to a visual code for, for example, identifying elements or locating people or other assets, comprising a two-dimensional array of colored cells surrounded by a dark colored frame.
  • the description also refers to a method for generating a visual code such as the one described, and to a method for decoding this visual code. It also refers to a computer program product for executing the visual code generation procedure, as well as a computer program product for executing the decoding procedure.
  • the invention falls within the technologies for recognition and data support, more specifically recording media for use with machines.
  • a visual code is a representation, for example, in print or in digital format, of certain information that can be automatically read by some type of image acquisition or capture device connected to a computer or electronic system (the acquisition device or image capture can be the computer or electronic system itself).
  • the acquisition device or image capture can be the computer or electronic system itself.
  • its capacity is measured in the number of different combinations that can be stored and subsequently decoded. Therefore, its capacity can be simply quantized with a specific number N of stored bits.
  • these codes are used in a wide variety of applications both in industry and in commerce, that is, where the simple identification of any element on which a certain type of follow-up is to be carried out is required.
  • these codes offer the possibility of having quick access to information linked to each code, which cover from the areas of commerce (stock control, quick calculation of the amount of a purchase, etc.) to healthcare ( access immediate to medical records, control of medical material, etc.), passing through security (access control, personal identification, etc.), entertainment (video games, augmented reality), or industrial applications (control of manufacturing processes , traceability, etc.), it can be said that visual codes are already ubiquitous in almost any area of the economy and society.
  • the first visual codes were one-dimensional (the popular barcodes, originally introduced in [US Patent 2,612,994 (1952) "Classifying apparatus and method”]), and were designed to be read by devices based on a specific optical technology that, at the time, it allowed making sensors simpler and cheaper than cameras.
  • These codes were quickly adopted by postal services in the beginning, although they later spread rapidly in the field of labeling and identification of products, both in commercial and industrial environments, generalizing the range of sensors available, which are currently generally available. already based on laser or conventional cameras.
  • a two-dimensional code also called a matrix code, also represents the information in an easily detectable and visually decodable form automatically, but it has the advantage of being able to store more information in the same area.
  • the best known visual code of this type is undoubtedly the QR code [US Patent 5,726,435 (1998) "Optically readable two-dimensional code and method and apparatus using the same”].
  • QR codes comprise two-dimensional binary matrices, in which each cell can take on a black or white color, and which allow different sizes (in number of cells) in order to offer a wide range of different capacities, being able to , in the higher resolution, even get to encode up to complete URLs, with several hundred bytes.
  • the main field of application of this patent is that of applications for the blind, and in particular, therefore, the detection and decoding of static codes, located in different places in the environment by means of smartphones or other types of mobile devices (for (example, places of interest in a city, transport stops, specific locations inside buildings, etc.).
  • Document EP2105868A1 discloses (paragraphs 0018-0035) a code composed of a plurality of cells arranged in a matrix, which is distinguished from the background using a square border. Cells can have different colors, densities, or luminances. The cells are distributed in blocks (aggregation of a plurality of cells) with specific starting patterns (facilitates the orientation of the code) and end, specific error correction blocks (in the outer cells, next to the border) and data blocks (forming a square with the inner cells).
  • Document EP1443452A2 discloses (paragraphs 0030-0051) a code ( Figure 1A) containing five patterns at specific locations to facilitate orientation thereof. Associated with these patterns are also the five color references necessary to decode the code. Similarly, (paragraphs 0074, 0092, 0109) the different predetermined location of the reference colors makes it possible to recognize the size of the code matrix. The rest of the matrix (paragraphs 0113-0148) maps entirely to data blocks made up of predetermined sets of cells. The grouping between cells of the same block is indicated by a constant value "86", and an error detection code is incorporated in each data block.
  • Document US2014270511A1 discloses (paragraphs 0048-0050, 0064-0070) a code that is framed in a black and white border to facilitate orientation, it also has a special frame (zebra) that makes it possible to determine the size of the cells. In some predetermined position (inside or outside said frame), special color reference cells are also included for calibration. The rest of the cells are used for data. There is a certain control of errors when transmitting the original CRC in a header (not located in the code), in order to be able to compare it with the CRC of the decoded information.
  • Document US2007278303A1 discloses (paragraphs 0016, 0019) a code that incorporates a black and white configuration block in a predetermined location.
  • the rest of the cells are considered data blocks, they are the same size as the configuration block, and they can use any color.
  • the configuration block incorporates error correction type information as metadata, it does not detail this configuration.
  • Document US2013092738A1 discloses (paragraphs 0019-0020) a code that is intended to be an alternative to black and white codes. In this case, the superposition of three overlapping levels with different colors is used, using error control information in each layer.
  • Document EP2806377A2 discloses (paragraphs 0015-0031) a code comprising several cells: cells with the reference palette that are located on the periphery in a predetermined order, alternative black and white cells to position the code, and data cells . It does not refer to any type of error detection or control.
  • Document EP2068117A2 discloses (paragraphs 0027-0031) a code that has differentiated sections to facilitate orientation, color reference, data and an additional section that could be used for error detection.
  • the documents analyzed describe different blocks to perform different functionalities. Thus, for example, they describe one or more blocks that have the ability to provide information about the orientation of the code and another different block (or more) to provide additional information related to error correction.
  • a visual code comprises a two-dimensional array of cells and a dark colored frame surrounding the array of cells.
  • the code is characterized by the fact that the cell array comprises at least one of: • one or more groups of four cells in which: o the cells are arranged in two rows and two columns, or in the visual code reading position, two of the cells in each group of four cells, of the three that form the first row and the first column are each of a light color and / or a dark color, and the remaining two are of different colors from each other, of a plurality of colors that does not include the light color and the dark color;
  • each group comprises three connected cells aligned or in an L shape, o each group of three cells has a single cell of a light color or a dark color and the rest of the cells are of different colors from each other, of the plurality of colors; in which the groups of cells encode information and / or implement a redundancy system for the detection of errors in the decoding of the visual code.
  • a multi-color visual code is achieved that can be decoded, from images taken with a suitable capture device, in a robust way under potentially problematic capture conditions, such as the increasing color degradations and loss of resolution that occur. by moving the code to be identified away from the optical sensor and / or significantly varying the lighting conditions.
  • the code obtains a compromise between the ability to encode information and the robustness to be detected at potential long distances.
  • This compromise is obtained by representing three different numerical values, each of which can be recognized using different interpretation procedures on the visual code.
  • the first numeric value offers greater expressiveness (greater number of possible combinations) than the second numerical value and, in turn, the second numeric value offers a more informative value than the third numerical value.
  • the robustness in the determination of the codes is inversely proportional to the capacity, with the second numerical value and the third numerical value supporting certain types of color degradation and other types of image noise incrementally better. Later, the three numerical values will be described in more detail.
  • the code may be specially designed for industrial use; in particular, its main scope of application may be the identification of elements such as products, boxes or pallets in traceability control, although other alternative applications are not ruled out, such as, for example, the location of people, vehicles or any other type of mobile assets.
  • Using this technology it is feasible to read codes from several meters away, even for relatively small label print sizes (e.g. 5-10 cm per side), requiring only a direct line of sight between the code and the image capture device (for example, a camera connected to a computing device, using any wireless or wired communication means).
  • the image capture device for example, a camera connected to a computing device, using any wireless or wired communication means.
  • it allows the simultaneous and computationally efficient reading of several codes in each captured image, thus allowing to cover a wide visual and work space with a single capture. It is, therefore, a more economical and flexible solution than other identification systems, such as wireless solutions (for example, RFID), which in addition to being more expensive may have fewer guarantees in poorly controlled environments, where there may
  • the code shares certain design similarities with previous visual codes.
  • the main features provided are the elimination of color calibration cells, to increase the code capacity by keeping the number of available cells fixed; the existence of an internal consistency in the distribution of colors by groups of cells, which adds an additional error control mechanism (and therefore complementary) to the classic checksunr, and the separate use of chromatic / monochrome information to obtain the three values simultaneous numerical data (at least one of them), with the previously mentioned compromises between capacity and robustness.
  • the codes described can be designed to be printed on a label, paper, adhesive, plastic, fabric, or any other type of support that can be attached by some means to any type of potentially mobile asset (products, materials, people, etc. ) on which you are interested in tracking or traceability.
  • a fundamental characteristic of them, then, is that they must be extremely robust to large variations in lighting in the decoding scenario: typically, it is mainly the cameras that are statically located at key points of the application scenario, although not There is also no limitation in that these can also be detected by mobile cameras, such as cameras mounted on trucks. motorized, but the codes will inevitably be located in mobile assets, and can therefore suffer large variations in the lighting they receive. This greatly affects how they are sensed by the corresponding image capture devices.
  • the main design considerations of the proposed visual codes can therefore be fundamentally based on the idea of making the localization and subsequent decoding procedures as robust as possible to the image degradations usually produced in said conditions of mobility and constant lighting changes.
  • the encoding of the information can be done through at least one group of three cells, while the implementation of the redundancy system for error detection can be achieved through at least one group of four cells, although other variants are possible.
  • the quaternaries could be used to encode information, without the code implementing a redundancy system for error detection, or triples could be used to implement a redundancy system or be part of it (for example, together with some quatern).
  • the visual code may comprise a background of a light color external to the frame of a dark color, which facilitates the initial detection of the code in the captured image, to be later decoded.
  • the width of the frame of a dark color can be, for example, equal to the width of a cell or it can be half the width of a cell.
  • the visual code may comprise, at the visual code reading position, a group of four cells arranged in the upper left corner of the cell array.
  • the visual code may comprise a group of three cells connected in an L shape at each of the remaining corners of the cell array.
  • this code orientation block based on the described group of four cells can combine in a single block the ability to provide information about the orientation of the code and additional information related to error correction (the latter functionality will be described further go ahead).
  • the possible use of blocks made up of three cells (triplets), without having to predefine their specific shape, apart from being useful to determine the proper orientation or reading position of the code, allows identifying which set of cells they belong to each block solely because of the specific distribution of the assigned colors.
  • the restriction required so that a cell of each triple can only have the colors white or black (light or dark), and their possible determination of them by comparing them with the frame of a dark color and the background of a light color makes it possible to use the code in difficult lighting situations.
  • the additional use in the other two cells of each triple of the combination of two colors (with their particular restrictions), the information storage capacity for more favorable lighting situations is expanded.
  • the use of colors eliminates the need to incorporate a reference palette in the code, again allowing the information contained in the code to be expanded without the need to expand its size.
  • the particular configuration of the orientation control block that incorporates the redundancy codes (quaternary) and the specific configuration of colors of the data blocks (triples) provide, among others, the effects of increasing the capacity of information stored in the code for a fixed number of available cells. No specific cell reservation is required for error handling, or to enter a reference color palette.
  • chromatic information plural of colors
  • monochromatic information light color, for example, white, and dark color, for example, black
  • the plurality of colors comprises at least three of the following colors: cyan, magenta, yellow, red, green, blue.
  • cyan magenta
  • yellow yellow
  • red green
  • blue blue
  • the plurality of colors can also be represented in a gray scale.
  • a dark color can be the color black. Actually, it can be any dark color, but the black (matte) color allows you to maximize the contrast with the environment or light background (for example, white), making it easier to detect the visual code. In either case, the light color can be a much lighter color than the dark frame.
  • the dark color of the frame and the light color of the background can serve as a reference for a light and / or dark color used in some of the cells of the cell matrix.
  • the cell array can have the same number of rows as columns, although it is not essential that the array is square. Rectangular, hexagonal, etc. structures can be designed that would have their specific cell groupings but follow the same coding procedure.
  • the information encoded by the groups of cells may comprise at least a first numerical value (also referenced as Code A) that is determined from values obtained from the cells of a light color or of a dark color and of the colored cells within the plurality of colors, of the groups of three cells.
  • a first numerical value also referenced as Code A
  • the decoding of this first numerical value depends on the correct chromatic identification of the colors of the plurality of colors, so that the decoding of the specific combination is less robust to possible chromatic degradations of the captured image of the visual code.
  • the information encoded by the groups of cells may comprise at least a second numerical value (also referenced as Code B) that is determined from values obtained from the cells based on their color on a gray scale, of groups of three cells.
  • a second numerical value also referenced as Code B
  • encoded information is obtained in the form of a second numerical value or Code B, whose decoding is robust to color degradation.
  • the information encoded by the cell groups may comprise at least a third numeric value (also referenced as Code C) that is determined by Starting from values obtained from all cells of a light color or a dark color in the cell array.
  • This Code C can be provided only for the case in which the reading of Code A and Code B fails, as a hash, with a much smaller range than Codes A and B. It does not have a redundancy system for detection of errors in the decoding of the visual code, to control possible errors. Therefore, it can be used as a last resort in extreme lighting conditions, working only on a binary version (0/1) of the input image.
  • the redundancy system for the detection of errors in the decoding of the visual code can be implemented from values obtained from the cells of a light color or of a dark color and of the colored cells within the plurality of colors, of the groups of four cells, to detect errors in the decoding of the first numerical value.
  • the redundancy system for the detection of errors in the decoding of the visual code can be implemented from values obtained from the cells of a light color or a dark color of the groups of four cells, to detect errors in the decoding. of the second numeric value.
  • the visual codes proposed can introduce a hierarchical scheme of checksums aimed at increasing the overall robustness and avoiding the possible acceptance of erroneous codes.
  • This scheme can be provided by at least a group of four cells that can also be used to obtain the orientation of the visual code.
  • This duplicity of functions performed by the same set of cells (quatern) allows reducing the number of cells required.
  • a method for generating a visual code as described above includes:
  • assign two colors of the plurality of colors, which does not include the light color and the dark color, to the two remaining cells of the group of three cells, defining a third parameter that takes a default value that depends on at least one color not chosen of the plurality of colors, and defining a fourth parameter that takes a predetermined value that depends on the order of the two colors assigned to the cells, based on a pre-established order of the colors of the plurality of colors; or for each group of four cells of the given combination:
  • assign a light color and / or a dark color to two of the three cells that make up the first row and the first column of the group of four cells, defining a fifth parameter that takes a default value that depends on the cell that is not assigned a light color or a dark color, and defining a sixth parameter that takes a predetermined value that depends on the combination of light color and / or dark color assigned to the two cells;
  • assign two colors of the plurality of colors, which does not include the light color and the dark color, to the two remaining cells of the group of four cells, defining a seventh parameter that takes a default value that depends on at least one color not chosen of the plurality of colors, and defining an eighth parameter that takes a predetermined value that depends on the order of the two colors assigned to the cells, based on a pre-established order of the colors of the plurality of colors.
  • the first parameter can take a value of 0 or 1 (although the values could be different) depending on whether the color assigned to the cell is the light color or the dark color, that is, the first parameter can take the value 0 if the assigned color is dark color (for example, black) or value 1 if the assigned color is light color (for example, white), or vice versa.
  • This first parameter can be referred to as the monochromatic bit (bm) of the triple.
  • the second parameter can take a value 0, 1 or 2 (although they can be others) depending on whether the cell to which the light color or the dark color is assigned, in the reading position of the code, is the first cell, second cell, or third cell in the group of three cells.
  • the second parameter can take three different values, for example, 0 if the light color or the dark color is in the first cell of the group of three cells, 1 if it is in the second cell or 2 if it is in the third. cell (although the assignment of values can be any other).
  • This second parameter can be referred to as monochromatic trit (tm) of the triple.
  • the third parameter can take a value of 0, 1 or 2 (although it can be others) depending on the color not chosen from the plurality of colors.
  • the third parameter can take, for example, the value 0 if the discarded color is cyan, the value 1 if the discarded color is magenta, and the value 2 if the discarded color is yellow.
  • This third parameter can be referred to as chromatic trit (te) of the triple.
  • the fourth parameter may take a value of 0 or 1 (although it may be others) depending on whether or not the order coincides with the pre-established order of the colors of the plurality of colors.
  • the fourth parameter can take the value 0 if the order matches the preset order (for example, cyan ⁇ magenta ⁇ yellow) or the value 1 if the order does not match, or vice versa.
  • the fifth parameter can take a value of 0, 1 or 2 (although they can be others) depending on whether the cell to which the light color is not assigned or the dark color, in the reading position of the code, is the first cell, the second cell, or the third cell of the three cells that make up the first row and the first column of the group of four cells.
  • the value of the fifth parameter can take the value 0, if it is the second cell it can take the value 1 and if it is the third cell it can take the value 2 (although the assignment of values can be any other).
  • the fifth parameter can be referenced as additional monochromatic trit (tme) for each quatern or group of four cells.
  • the sixth parameter takes a value ⁇ (0,0), (0,1), (1, 0), (1,1) ⁇ (although they can be others) depending on the combination of light color and / or dark color assigned to the two cells.
  • the sixth parameter can take the value (0,0)
  • the combination is dark-light it can take the value (0,1)
  • the combination is light-dark it can take the value (1, 0)
  • the combination is light-light it can take the value (1, 1), although the assignment of values can be any other.
  • This sixth parameter can be referenced as two additional monochrome bits (bmcO, bmc1) for the quad.
  • the seventh parameter can take a value of 0, 1 or 2 (although it can be others) depending on the color not chosen from the plurality of colors.
  • the seventh parameter can take, for example, the value 0 if the discarded color is cyan, the value 1 if the discarded color is magenta, and the value 2 if the discarded color is yellow. Obviously any discarded value / color combination is acceptable.
  • This seventh parameter can be referred to as additional chromatic trit (tcc) of the quatern.
  • the eighth parameter can take a value of 0 or 1 (although it could be others) depending on whether or not the order coincides with the pre-established order of the colors of the plurality of colors.
  • the eighth parameter can take the value 0 if the order matches the preset order (for example, cyan ⁇ magenta ⁇ yellow) or the value 1 if the order is not coincident, or vice versa.
  • This eighth parameter can be referred to as an additional chromatic bit (bcc).
  • groups of three cells can encode the information, while groups of four cells can implement the system for detecting errors in decoding the visual code.
  • Other configurations are also possible, such that both the triples and the four encode information and, therefore, an error detection system is not implemented.
  • a computer program product comprises program instructions to cause a system to perform a procedure to generate a visual code, such as that described above.
  • the computer program may be stored on physical storage media, such as recording media, computer memory, or read-only memory, or it may be carried by a carrier wave, such as electrical or optical.
  • a system for generating a visual code, such as that described above.
  • the system comprises:
  • means to assign a light color or a dark color to one of the cells of the group of three cells, defining a first parameter that takes a default value that depends on whether the color assigned to the cell is light color or dark color, and defining a second parameter that takes a predetermined value that depends on the cell, of the group of three cells, to which the light color or the dark color is assigned;
  • means of assigning two colors of the plurality of colors, not including the light color and the dark color, to the two remaining cells of the group of three cells, defining a third parameter that takes a predetermined value that depends on at least one color not chosen from the plurality of colors, and a fourth parameter being defined that takes a predetermined value that depends on the order of the two colors assigned to the cells, based on a pre-established order of the colors of the plurality of colors; or for each group of four cells of the given combination:
  • means to assign a light color and / or a dark color to two of the three cells that make up the first row and the first column of the group of four cells, defining a fifth parameter that takes a default value that depends on the cell that does not it is assigned a light color or a dark color, and a sixth parameter is defined that takes a predetermined value that depends on the combination of light color and / or dark color assigned to the two cells;
  • means of assigning two colors of the plurality of colors, not including the light color and the dark color, to the two remaining cells of the group of four cells, defining a seventh parameter that takes a default value that depends on at least one color not chosen from the plurality of colors, and an eighth parameter being defined that takes a predetermined value that depends on the order of the two colors assigned to the cells, based on a pre-established order of the colors of the plurality of colors.
  • a system is provided for generating a visual code.
  • This system is configured to:
  • assign a light color or a dark color to one of the cells of the group of three cells, defining a first parameter that takes a default value that depends on whether the color assigned to the cell is light color or dark color, and defining a second parameter that takes a predetermined value that depends on the cell, of the group of three cells, to which the light color or the dark color is assigned;
  • assign two colors of the plurality of colors, which does not include the light color and the dark color, to the two remaining cells of the group of three cells, defining a third parameter that takes a default value that depends on at least one color not chosen of the plurality of colors, and defining a fourth parameter that takes a predetermined value that depends on the order of the two colors assigned to the cells, based on a pre-established order of the colors of the plurality of colors; or for each group of four cells of the given combination:
  • assign a light color and / or a dark color to two of the three cells that make up the first row and the first column of the group of four cells, defining a fifth parameter that takes a default value that depends on the cell that is not assigned a light color or a dark color, and defining a sixth parameter that takes a predetermined value that depends on the combination of light color and / or dark color assigned to the two cells;
  • assign two colors of the plurality of colors, which does not include the light color and the dark color, to the two remaining cells of the group of four cells, defining a seventh parameter that takes a default value that depends on at least one color not chosen of the plurality of colors, and defining an eighth parameter that takes a predetermined value that it depends on the order of the two colors assigned to the cells, based on a pre-established order of the colors of the plurality of colors.
  • a system for generating a visual code.
  • the system comprises a memory and a processor.
  • the memory stores computer program instructions executable by the processor.
  • the instructions comprise functionalities for executing a procedure to generate visual code, such as that described above.
  • a method for decoding a visual code such as that described above is provided.
  • This visual code is encoded according to a procedure for generating a visual code also described above.
  • the decoding procedure comprises:
  • Obtaining the image can be done by means of an image capture device of the system to decode a visual code, which will be described later, or it can be obtained in the form of an image previously captured by another device that the system collects or receives from it. or from another device that stores it.
  • locating each candidate code in the image may include:
  • the dynamic image thresholding algorithm can use an adaptive threshold, which calculates the value of a different threshold for each image position, depending on the distribution of gray values of a small image region around each pixel. , as described, for example, in ["Local Adaptive Thresholding.” Li SZ, Jain A. (eds) Encyclopedia of Biometrics. Springer "(2009)].
  • locating each candidate code in the image may comprise correcting for radial distortion in the image introduced by the image capture element. It should be said that the correction of the possible radial distortion introduced by the camera may not in principle be necessary, since the codes are explicitly designed to be small and to be viewed at a long distance. However, for close viewing (for example, with a Smartphone or smartphone located near the code), a pre-correction of said distortion may have to be carried out in some cases, especially for wide-angle lenses.
  • extracting the color of each cell from a candidate code may include:
  • the square canonical frame can be, for example, 100x100 pixels in size.
  • extracting the color from each cell of the candidate code may comprise performing a sub-pixel alignment of each contour of the candidate code.
  • obtaining, from the rectified image, a cell matrix with a simple color vector (R, G, B) in each cell may comprise performing a white balance using the light and dark colors of the background itself and of the frame, respectively, as calibration elements, whose positions in the rectified image are already fully known.
  • the median filter can be wide enough to consistently cover the center of each cell in its corresponding area of the rectified image, without invading the rest of the contiguous cells of the cell array.
  • decoding the encoded information and / or the redundancy system for error detection based on the color extracted from each cell may comprise:
  • decoding the encoded information and / or the redundancy system for the detection of errors based on the color extracted from each cell can include, if the first numerical value (Code A) and the second numerical value ( Code B)
  • a computer program product comprises program instructions to cause a system to perform a procedure to decode a visual code, such as that described above.
  • the computer program may be stored on physical storage media, such as recording media, computer memory, or read-only memory, or it may be carried by a carrier wave, such as electrical or optical.
  • a system for decoding a visual code, such as that described above.
  • the visual code has been coded by a system to generate a visual code also described.
  • the decoding system comprises:
  • a system for decoding a visual code, such as that described above.
  • the visual code has been coded by a system to generate a visual code also described.
  • the decoding system is configured to: Obtain an image comprising at least one visual code to be decoded; Locate each candidate code in the image obtained;
  • a system for decoding a visual code, such as that described above.
  • the visual code has been coded by a system to generate a visual code also previously described.
  • the system comprises a memory and a processor.
  • the memory stores computer program instructions executable by the processor. These instructions comprise functionalities for executing a procedure to decode a visual code, as previously described.
  • Figure 1 schematically shows an example of visual code, using a specific matrix size of 4x4 cells and five different colors (white (B), black (N), cyan (C), magenta (M) and yellow (A)) , and a width of the black frame equal to that of a cell.
  • Figure 2 schematically shows an example of visual code equivalent to that of Figure 1, but with a smaller border, in particular with a width equal to half the width of a cell.
  • Figure 3 schematically shows an example of visual code for a 4x4 matrix, identifying the four triples ta, tb, te and td, as well as the fourth c.
  • Figure 4 schematically shows the visual code of the example in Figure 1, highlighting the different triples and the quatern.
  • Figure 5 schematically shows an example of visual code for a 5x5 matrix, identifying the seven triples ta, tb, te, td, te, tf and tg, as well as the quatern c.
  • Figure 6 shows a flow diagram of a procedure for decoding a visual code, more specifically for reading the numerical codes associated with the visual code, in three main blocks: location of candidate codes, generation of tensor and decoding by levels.
  • Figure 7 schematically shows an application scenario, in which one or more cameras, connected to an intranet, send the images captured in a certain area of a plant to a central computer system, where they are processed. Circulating through the plant there are, for example, mobile trucks carrying some type of product on which a label with one of the visual codes has been attached.
  • One of the objectives of the present invention is the design of a multi-color visual code together with the corresponding automated encoding and decoding procedures from images taken with a suitable capture device.
  • the code itself consists of a square matrix of colors (although it can take other shapes such as rectangular or hexagonal) surrounded by a dark outline or frame, such as black. It is explicitly designed for the code to be robustly decoded under potentially problematic capture conditions, such as increasing color gradations and loss of resolution that occur when moving away from the capture device (which comprises, for example, an optical sensor) the code to identify, and / or significantly vary the lighting conditions.
  • the code obtains a compromise between the ability to encode information and the robustness to be detected at potential long distances.
  • This compromise is obtained by representing three different numerical values, which from now on will be called Code A (first numerical value), Code B (second numerical value) and Code C (third numerical value), each of which is recognized using different interpretation procedures on the code.
  • Code A offers greater expressiveness (greater number of possible combinations) than Code B and, in turn, Code B offers a more informative value than Code C.
  • the robustness in the determination of each code is inversely proportional to capacity, with Code B and Code C increasingly supporting certain types of color gradations and other types of image noise.
  • Figure 1 shows the general appearance of an example code 101, using a specific size of 4x4 cells 103 of five different colors (white (B), black ( N), cyan (C), magenta (M) and yellow (A)), and a width of the black frame 102 equal to that of a cell, all on a white background. It is only a specific embodiment of the invention, other variants being also possible, with a different number and arrangement of cells, as well as a greater or lesser border width. The same happens at the level of colors.
  • RGB cube can be any combination, but it may be appropriate to choose three colors that are as far apart as possible in the RGB cube, such as, for example, the above combination (cyan, magenta and yellow) or the combination of red, green and blue.
  • the background can be a much lighter color than the frame rectangle, to again maximize the contrast with the frame.
  • Figure 1 and the rest of the figures are intended to illustrate different examples of visual codes and procedures for encoding and decoding these codes, and in no case should they be understood as limits to the scope of their application.
  • Figure 2 shows an equivalent code, but with a smaller border (width equal to half the width of a cell)
  • Figure 5 shows a visual code with a matrix of 5x5 cells to increase encoding capability, albeit at the cost of a possible loss of viewing range.
  • the colors of the visual code are not limited to exposed white (B), black (N), cyan (C), magenta (M) and yellow (A).
  • This visual code is structured by blocks or groups of four and / or three cells as shown in Figure 3. Only one block 301, located in the upper left corner of the matrix, is formed by a quatern of cells c1, c2 , c3, c4, that is, a group of four cells, while the rest of the cells are grouped into four groups 302,303,304,305, of three cells each, corresponding to the triples (ta1, ta2, ta3), (tb1, tb2, tb3), (tc1, tc2, tc3), and (td1, td2, td3), respectively. Both the triples and the quatern have a series of restrictions on the colors to be used by each cell.
  • a triple can have one and only one cell of a color other than C, M or A (that is, it always has a cell B or a cell N), while the other two cells must necessarily be of two different colors chosen from the set ⁇ C, M, A ⁇ .
  • the rules are slightly different: two of the three cells ⁇ c1, c2, c3 ⁇ (those that are in contact with the frame) must be colored B and / or N, while the remaining two , that is, c4 and the only cell in the set ⁇ c1, c2, c3 ⁇ that is not of color B or N, are again necessarily of two different colors, chosen from the set ⁇ C, M, A ⁇ .
  • the example code shown in Figure 1 perfectly complies with the specified construction rules.
  • one and only one of its cells can have a color N or a color B.
  • This color defines a first bit (which we will call “monochromatic bit”, or bm ) of said shortlist.
  • the convention can be followed of taking this bit as 0 for color N, and as 1 for color B, although it could be the other way around.
  • Said cell B or N therefore, is necessarily in one and only one of the three positions of the triple, which will give rise to a second item of information, which in this case can take three different values, and which is assigned can be called "monochromatic trit", or tm, of the triple.
  • a trit equal to 0 is associated if the B / W color is in the first cell of the triple, 1 if it is in the second, or 2 if it is in the third, although this association could be different .
  • the order in which the two remaining colors appear in the triplet mark a last bit of information, which can be referred to as the "chromatic bit" of the triplet, or be.
  • N_B bm_a + 2 * bm_b + 4 * bm_c + 8 * bm_d + 16 * (tm_a + 3 * tm_b + 9 * tm_c + 27 * tm_d) (eq.1)
  • N_A the number of Code A, N_A, as follows:
  • N_H bc_a + 2 * bc_b + 4 * bc_c + 8 * bc_d + 16 * (tc_a + 3 * tc_b + 9 * tc_c + 27 * tc_d) (eq.3)
  • checksums redundancy codes
  • the colors of the two remaining cells, c2 and c4 are respectively A and M.
  • An advantage of the described coding scheme is that it is completely invariant to rotations, by construction. This means that even if the code appears rotated in the captured image, in any of the four possible angles of rotation of a square (0, 90, 180 or 270 degrees), the decoding procedure can easily determine correctly which corner is the one corresponding to the upper left, that is, to the quadrant of cells (c1, c2, c3, c4). And this is due to the fact that of the four triples of cells corresponding to the four corners, only the triplet (c1, c2, c3) (see Figure 3) necessarily contains two colors B and / or N, compared to the other three corners, in which one and only one color of the cells of the corresponding triple can have a B or N color. This property is important to be able to decode the visual codes in any relative position of these with respect to the camera, regardless of the rotation position with respect to it with which they are being viewed at all times.
  • a specific cyclic redundancy code has been chosen, of a simple modular checksum type, to carry out a relatively simple error control.
  • CRC cyclic redundancy code
  • some examples could include other types of alternative solutions that are equally capable of detecting (for example, with parity digits, hash functions, etc.) or even correcting (Reed Solomon codes, Turbo codes, etc.) possible errors.
  • dedicating more bits / trits to said error control at the cost of reducing the number of valid codes.
  • the processing algorithm begins with the exact location 601 in the scene (captured image) of each candidate code.
  • a dynamic image thresholding algorithm which takes into account the possible different lighting conditions in different areas of the input image.
  • An adaptive threshold is used in the example, which calculates the value of a different threshold for each position of the image, depending on the distribution of gray values of a small image region around each pixel, as described, by For example, in ["Local Adaptive Thresholding.” Li SZ, Jain A. (eds) Encyclopedia of Biometrics. Springer "(2009)].
  • a pre-correction may have to be carried out in some cases. ion of such distortion, especially for wide-angle type lenses.
  • a second processing stage 602 and after an optional sub-pixel alignment of each extracted contour or frame, its four corners are used to perform a homographic rectification of the original image to a square canonical frame of sufficient size, for example (of new without loss of generality) of 100x100 pixels.
  • this rectified image is treated with various algorithms with the intention of obtaining a 4x4 cell matrix with a simple color vector (R, G, B) in each cell, as faithful as possible to the original colors.
  • a white balance is (optionally) carried out using the black and white colors of the edges (whose positions in the rectified image are already fully known) as calibration elements. Then, using a median filter to remove possible camera sensor noise, a single RGB vector value per cell is obtained. Said filter has a sufficient width to consistently cover the center of each cell in its corresponding area of the rectified image, without invading the rest of the contiguous cells.
  • the final result of this stage is a tensor of (4x4x3) values, with a vector (R, G, B) with values between [0,0,0] and [255,255,255] for each cell.
  • the third and final stage 603 of processing begins with the determination of the correct orientation of the 4x4 color matrix, which is simple given the aforementioned restriction that only the three cells of the upper left quadrant glued to the edge (c1, c2 and c3 in Figure 3) can contain exactly two colors B and / or N. Thus, the other three of the four possible orientations can be eliminated.
  • the contour is automatically discarded, without returning any of the Code A or Code B values. If the second occurs, producing a Code A is discarded, but it continues trying to produce a Code B.
  • the next step if not Having already discarded the contour or frame, it is to compute the Codes A and B (or only the B, if applicable), using equations (eq.1), (eq.2) and (eq.3), once determined the corresponding bits and trits per triplet, according to the coding scheme described above. Therefore, it only remains to generate the checksum values for Codes A and B, contained in the colors of the cells (c1, c2, c3, c4) of Figure 3 according to the scheme also described, and check its correctness.
  • the corresponding values of the computed checksums, C_A and C_B will be determined from equations (eq.6) and (eq.7), and their correction will be checked for the respective Codes A and B, checking if they are given. the equalities (eq.5) and (eq.4), respectively.
  • Use scenarios can be considered in which it is previously known that the visual code to be recognized cannot be just any one, but is necessarily found in a subset more limited default (and previously known) code. For example, it could be known, by the particularities of the production process, that in a plant only a reduced set of, for example, 100 different codes could circulate in a given period of time. If these codes are previously known, the problem of their decoding does not start, like the procedure described above, from absolute ignorance, but rather there is certain a priori information that could be exploited to detect said codes even under lighting conditions and / or extremely challenging picture shooting. It is in this scenario where the existence of the Code C of last resort can be useful. This code will be computed only in case of previously failed detection of Codes A and B.
  • the maximum of the four values ⁇ 16417, 12416, 34818, 268 ⁇ is 34818, so that, finally, the latter is the Code C value returned as a last resort hash value, to be compared with the hashes for each of the possible candidate codes of the input set.
  • the second important consideration is that the hash value obtained for Code C is obviously not unique for each original Code A. That is, it causes collisions (several Codes A, or even several Codes B, different can give rise to the same valid Code C). This is the reason why, although ultimately it may be useful to reduce ambiguity, it is not always valid to uniquely determine the detected code from among a possible set of candidate input codes, depending, of course, on the specific values of the same.
  • the following describes, within the decoding procedure, the specific process for determining the specific color of each cell, within the total subset of colors used ⁇ B, N, C, M, A ⁇ .
  • a couple of important characteristics of the invention are that a) said color determination is carried out by a process that is free of any threshold, and b) that does not need to enable cells that have to be used as calibration.
  • the first characteristic makes the procedure more robust, as it does not depend on manually adjusted thresholds (it is, on the contrary, a completely self-thresholding procedure).
  • the second characteristic avoids the cost that would have in terms of loss of number of possible combinations the having to use part of the visual code cells for said control cells (scheme that, on the other hand, follow some of the color codes exposed and described above, thus losing them to encode the data). Eliminating this need is particularly important to make the codes as small as possible (in number of cells), in the context of detection with long-range robustness that is pursued in the industrial applications for which the codes may be designed.
  • the pair of different colors chosen from the set ⁇ C, M, A ⁇ for the other two cells of the corresponding triplet / quatern, it is also determined with a procedure again free of thresholds and all kinds of calibration information. exterior chromatic. For this, the two remaining cells after determining the position and type (B / W) of the monochromatic control cell are simply calculated the minimum of their R, G or B value. If said minimum is in channel R, the color assigned to it is C. Similarly, a color M or A is assigned if said minimum is reached in channels G or B, respectively.
  • the procedure is again resistant to variations in light intensity, which in principle affect all parameters equally. channels.
  • the procedure can be easily modified to detect the new color set , in this case attending not to the minimum of the three channels (R, G, B) of the cell, but, of course, to the maximum of them.
  • the procedure could eventually fail in light situations that are far from white light, which is not usually a problem in industrial environments, except in very specific cases, or in conditions in which the correct sensorization of the color is very problematic, as can be the case in situations close to glare, or alternatively excessive darkening of the label comprising the code, as can be produced, for example, by strong backlights in the scene.
  • the chromatic inconsistencies alluded to in the decoding procedure (processing step 603 in Figure 6) are probably detected, such as two of the colors of a tupia being the same, instead of always different, or that, later on, the checksum of the corresponding Code A fails.
  • Code B can be determined by not depending in any case on any color other than B or the N pure.
  • said cell can be taken as the canonical color C, M or A for the entire code, and act, in addition to being an information item, also as a calibration item, that is, as a reference for the other cells.
  • Figure 7 shows an example of the implementation of the entire proposed code generation, detection and decoding scheme, specifically on the main floor of a company dedicated to the production and packaging of fresh produce of fruit and vegetable origin.
  • the specific application scenario is the correct location and monitoring in time and space of pallets loaded with products, which are unloaded at the company docks, and monitored from the moment they enter the packaging plant.
  • the boxes with the products are labeled already at the time of their collection in the field, with visual codes such as those described, in a clearly visible place on them.
  • This implementation example uses the two specific variants of the code described in this document: first, the color version ⁇ B, N, C, M, A ⁇ in a 4x4 cell matrix, with labels printed in color (example of Figure 1); and second, a version of the 5x5 cell matrix code (shown in Figure 5), only, in this particular case, instead of a five-color code, a monochrome version with only three colors is used, ⁇ B, Gr, N ⁇ , where Gr is an intermediate gray level located between the values B and N.
  • the color code is discarded from the start (substituting all the values C, M and A for Gr in the visual codes generated), with which the described procedure always fails, by construction, in determining Code A (chromatic), although the decoding of Code B (monochromatic) is perfectly feasible.
  • the sensorization system proposed for this example has a variable number of cameras, interconnected to the company's main network using Gigabit Ethernet technology.
  • cameras with resolutions of up to 3840x2160 pixels and 60 frames per second, and variable zoom optics that allow viewing angles between 37 ° and 109 ° horizontally are used.
  • the boxes 703 with the products from the loading docks, already duly labeled 704, are transported by palletizing trucks 702 inside the packaging plant.
  • the cameras 701, mounted at certain key points in the plant continuously monitor the evolution of the trucks, sending the captured images continuously to a central server 706, through a dedicated Intranet 705, whose bandwidth (1 Gbps) allows, in combination with a suitable factor Image compression, the simultaneous delivery of multiple video streams at tens of frames per second from multiple cameras.
  • the cameras used in the present example are equipped with their own CPU and memory to compress the video in real time, using Zipstream technology.
  • This technology uses a H.262 codee with variable bit-rate, which allows a speed in fps and bandwidth controllable from the central server.
  • the communication between the cameras and the central server can be done wired (with cables) or wirelessly.
  • the connection can be made through serial ports, such as USB, micro USB, mini USB, Firewire or Ethernet (such as the Intranet described above).
  • the connection can be made using short-range wireless communications modules (cameras and server are close enough), for example, Bluetooth, NFC, Wifi, IEEE 802.11 or Zigbee.
  • the connection can be made using communication modules based on GSM, GPRS, 3G, 4G, 5G technology or satellite technology (for example, if the communication is made through a global communication network, such as the Internet) or even through a communications network for the Internet of Things (loT - Internet of Things).
  • this communication can be ensured by, for example, username / password, cryptographic keys and / or by means of an SSL tunnel established in the communication.
  • Said Python code is executed, in this particular implementation, on a server with an 8-core CPU and 16 GB of RAM.
  • the performance obtained depends on the resolution of the input images, being of the order of (taking a concrete example) about 20 milliseconds per frame for an input resolution of 1920x1080, being able to detect several codes (for example, up to 6) per image (without there being a strict limit in this regard either).
  • the viewing distance and correct decoding depend on both the focal length of the camera (and therefore its field of vision) and the image resolution used, but in this specific environment it is possible to state that the observed limit Recognition robustness for Code A is approximately a minimum of 3x3 pixels for each cell in the input image. This corresponds to approximately -18x18 pixel sizes for a complete 4x4 type code, including a border width equal to that of a cell, as in the example version of Figure 1, or a few pixels less for sizes of lower frame, as shown in the example in Figure 2.
  • PIX Resulting size of the visual code in the image (in pixels).
  • TC Size of the printed visual code (in mm).
  • RH Horizontal resolution of the image (in pixels).
  • D Distance from the camera to the label (in meters).
  • AVH Camera horizontal angle of view (in degrees).
  • the system shows a good tolerance to different sources of noise that translate into different causes of loss of sharpness in the image, such as point blurring, rapid movements in the scene, “salt and pepper” noise in the sensorized image motivated due to low lighting conditions, and even artifacts caused by image compression.
  • both the encoding procedure and the decoding procedure described above can each be implemented with a system with a fully computerized, fully electronic configuration, or by a combination of both.
  • the system may comprise a memory and a processor (for example, a microprocessor), in which the memory stores computer program instructions executable by the processor , these instructions comprising functionalities for executing a procedure for decoding or a procedure for encoding a visual code such as those described.
  • a processor for example, a microprocessor
  • the memory of this computer system may be within the processor or it may be external. If it is included in the processor itself, it can be, for example, an EEPROM type memory or the like. In the case that it is external, it can be, for example, data storage media such as magnetic discs (for example, hard drives), optical discs (for example, DVD or CD), memory cards, flash memories ( e.g. flash drives) or solid state drives (RAM-based, flash-based SSDs, etc.). These storage means can be part of the computer system itself and / or can be arranged remotely to it, connected by wire (with cables) or wirelessly. In the case of a wired (wired) communication, the connection can be made through serial ports, such as USB, micro USB, mini USB, Firewire or Ethernet.
  • serial ports such as USB, micro USB, mini USB, Firewire or Ethernet.
  • the connection can be made using short-range wireless communications modules (the system and the storage media are close enough), for example, Bluetooth, NFC, Wifi, IEEE 802.11 or Zigbee. If the communications are long-range (the system and the storage media are far apart), the connection can be made using communication modules based on GSM, GPRS, 3G, 4G, 5G technology or satellite technology (for example, if the communication it is carried out through a global communication network, such as the Internet) or even through a communications network for the Internet of Things (loT- Internet of Things). In the latter case of a system with remote storage means, the communication established between the system and the storage means can be ensured by, for example, username / password, cryptographic keys and / or by means of an SSL tunnel established in communication between the system and the storage media.
  • the set of computer program instructions (a computer program) executable by the processor can be stored in physical storage media, such as those mentioned, but can also be carried by a carrier wave (the carrier medium can be any entity or device capable of carrying the program), such as electrical or optical, which can be transmitted via electrical or optical cable or by radio or other means.
  • the carrier medium can be any entity or device capable of carrying the program
  • electrical or optical which can be transmitted via electrical or optical cable or by radio or other means.
  • the carrier medium may be an integrated circuit in which the computer program is embedded, said integrated circuit being adapted to perform or to be used in performing the relevant procedures.
  • the computer program may be in the form of source code, object code, or in a code intermediate between source code and object code, such as partially compiled form, or in any other form suitable for use in implementing the described procedures.
  • at least one of the systems can have a purely electronic configuration, so it could be formed by a programmable electronic device such as a CPLD (Complex Programmable Logic Devicé), an FPGA (Field Programmable Gafe Array) or an ASIC (Application-Specific Integrated Circuit).
  • At least one of the systems can also have a hybrid configuration between computing and electronics.
  • the system must comprise a memory and a processor to computerically implement a part of its functionalities, as well as certain electronic circuits to implement the rest of the functionalities.

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Processing (AREA)

Abstract

Se refiere a un código visual que comprende una matriz bidimensional de celdas y un marco de color oscuro que rodea la matriz. Ésta comprende al menos uno de uno o más grupos de cuatro celdas en los que están dispuestas en dos filas y dos columnas, y, en la posición de lectura del código visual, dos de las celdas, de las tres que forman la primera fila y la primera columna, son cada una de color claro y/o color oscuro, y las dos restantes son de colores diferentes entre sí, de una pluralidad de colores; uno o más grupos de tres celdas en los que cada grupo comprende tres celdas conectadas alineadas o en forma de L, y cada grupo tiene una única celda de color claro u oscuro y el resto son de colores diferentes entre sí, de la pluralidad de colores; en el que los grupos de celdas codifican información y/o implementan un sistema de detección de errores en la decodificación.

Description

Código visual, procedimiento para generar un código visual y procedimiento para decodificar un código visual
La presente descripción se refiere a un código visual para, por ejemplo, identificar elementos o localizar personas u otros activos, que comprende una matriz bidimensional de celdas de colores rodeada por un marco de color oscuro.
La descripción se refiere también a un procedimiento para generar un código visual tal como el descrito, y a un procedimiento para decodificar este código visual. También se refiere a un producto de programa informático para ejecutar el procedimiento de generación de un código visual, así como a un producto de programa informático para ejecutar el procedimiento de decodificación.
La invención se encuadra dentro de las tecnologías para reconocimiento y el soporte de datos, más concretamente soportes de registro para utilización con máquinas.
Esta solicitud reivindica la prioridad de la solicitud de patente española P201930860 presentada el 04 octubre 2019.
ESTADO DE LA TÉCNICA ANTERIOR
Un código visual es una representación, por ejemplo, impresa o en formato digital, de una determinada información que es susceptible de ser leída automáticamente por algún tipo de dispositivo de adquisición o captura de imagen conectado a un sistema informático o electrónico (el dispositivo de adquisición o captura de imagen puede ser el propio sistema informático o electrónico). Como portador de una determinada cantidad de información, su capacidad se mide en el número de combinaciones distintas que pueden almacenarse y, posteriormente decodificarse. Por lo tanto, su capacidad puede cuantificarse simplemente con un número concreto N de bits almacenados.
En general, estos códigos son utilizados en una amplia variedad de aplicaciones tanto en la industria como en el comercio, es decir, allí donde se requiera la identificación sencilla de un elemento cualquiera sobre el que se quiera realizar un determinado tipo de seguimiento. Con el amplio rango de aplicaciones potenciales que ofrece la posibilidad de tener un acceso rápido a información vinculada con cada código, que cubren desde los ámbitos del comercio (control de stock, cálculo rápido del importe de una compra, etc.) hasta la sanidad (acceso inmediato a expedientes médicos, control de material médico, etc.), pasando por la seguridad (control de accesos, identificación de personal, etc.), el entretenimiento (videojuegos, realidad aumentada), o las aplicaciones industriales (control de procesos de fabricación, trazabilidad, etc.), se puede decir que los códigos visuales son ya ubicuos en casi cualquier ámbito de la economía y la sociedad.
Históricamente, los primeros códigos visuales eran unidimensionales (los populares códigos de barras, introducidos originalmente en [US Patent 2,612,994 (1952) “Classifying apparatus and method”]), y estaban diseñados para su lectura mediante dispositivos basados en una tecnología óptica específica que, en su momento, permitía fabricar sensores más sencillos y baratos que las cámaras. Dichos códigos fueron rápidamente adoptados por los servicios postales en sus inicios, si bien se extendieron posteriormente con rapidez en el ámbito del etiquetado e identificación de productos, tanto en entornos comerciales como industriales, generalizándose la gama de sensores disponibles, que en la actualidad suelen estar ya basados en láser o en cámaras convencionales.
A partir de la década de los 90, y precisamente a partir de la disponibilidad cada vez mayor de dispositivos de adquisición digital de imágenes conectables a, por ejemplo, un sistema informático, comenzaron a desarrollarse los códigos bidimensionales. Un código bidimensional, también llamado matricial, representa igualmente la información de una forma fácilmente detectable y decodificable visualmente de forma automática, pero tiene la ventaja de poder almacenar más información en una misma área. El código visual de este tipo más conocido es sin duda el código QR [US Patent 5,726,435 (1998) “Optically readable two- dimensional code and method and apparatus using the same’’].
La característica principal de estos códigos QR es que comprenden matrices binarias bidimensionales, en las que cada celda puede tomar un color blanco o negro, y que permiten diversos tamaños (en número de celdas) de cara a ofrecer una amplia gama de capacidades distintas, pudiéndose, en los de mayor resolución, incluso llegar a codificar hasta URLs completos, con varios centenares de bytes.
A partir de los códigos QR descritos, se han propuesto otros códigos bidimensionales similares. Algunos de los ejemplos más populares son los AztecCodes, AR Codes, DataMatrix, EZ codes, usados en los ámbitos comerciales, industriales, transportes, videojuegos o realidad aumentada, entre otros muchos. Todos estos diseños son estrictamente binarios, basándose los respectivos códigos en el uso exclusivo del blanco y el negro, habitualmente en forma de matriz dividida en celdas cuadradas, sin faltar tampoco diseños alternativos, como el circular en el que está basado ShotCode. De todos ellos puede obtenerse información muy completa en, por ejemplo, [https://en. wiki pedia. org/wiki/Barcode#Matrix_(2D)_barcodes) ].
Una idea adicional, explotada por propuestas posteriores, es la extensión de la idea original de los códigos bidimensionales matriciales binarios para incluir colores diferentes al blanco y negro puros (por ejemplo, los colores primarios rojo, verde y azul, o sus complementarios cían, magenta y amarillo) para aumentar la capacidad de los códigos, manteniendo acotado el número de celdas de los mismos. Uno de los primeros ejemplos a este respecto sería [US Patent 2004/0182930 (2004) “Two dimensional code, methods and apparatuses for generating, displaying and reading the same’’]. Posteriormente, [“High Capacity Color Barcode (HCCB)”, G. Janke (2007)], diseñado por Microsoft, fue otro de los pioneros en incorporar el color con el objetivo fundamental de aumentar la capacidad. Más recientemente, esta misma idea ha sido explotada también por los denominados JAB codes [“JAB Code: Colorful barcode against counter feiting”, Fraunhofer SIT (2018)], en este caso en el ámbito específico de la seguridad y las medidas antifraude.
En general, la mayoría de los códigos que usan el color para aumentar la capacidad suelen incluir una paleta de colores predeterminada, y cuentan con una cierta área incluida en el propio código habilitada a efectos de auto-calibración cromática de los mismos. En este sentido, por ejemplo, la patente [US Patent 2014 / 0,270,511 A1, “Image fragmentation for distortion correction of color space encoded image” (2014)], que fundamentalmente aporta la idea de poder almacenar cantidades de información mucho mayores que unas pocas decenas de bits, incluyendo la posibilidad de fragmentar la misma en múltiples marcos, habilita en cada uno de los fragmentos una zona ad-hoc para incluir la paleta de celdas con todos los colores usados, para disponer en todo momento de ella como referencia en el momento de la decodificación. Esta realización de usar ciertas celdas de posiciones fijas para incluir la información de calibración de color es la misma utilizada en la patente española [ES 2,616, 146 B2, “Método de detección y reconocimiento de marcadores visuales de largo alcance y alta densidad”, (2018)], que usa sólo los cuatro colores básicos negro, magenta, cían y amarillo, colocándolos sistemáticamente en un orden predeterminado en las correspondientes celdas de las cuatro esquinas de cada código visual, en una implementación concreta de códigos bidimensionales a color diseñados específicamente para ser leídos a distancia por teléfonos inteligentes, tabletas u otros dispositivos móviles, con el objetivo de guiar a discapacitados visuales. Esta última patente pone el énfasis en la posibilidad de decodificación a larga distancia, más que en el aumento de la capacidad. Además, el ámbito principal de aplicación de esta patente es el de las aplicaciones para invidentes, y en particular, por tanto, la detección y decodificación de códigos estáticos, situados en diferentes lugares del entorno mediante teléfonos inteligentes u otro tipo de dispositivos móviles (por ejemplo, lugares de interés en una ciudad, paradas de transporte, ubicaciones específicas en el interior de edificios, etc.).
Por otro lado, la gran mayoría de los códigos visuales comentados hasta este punto introducen alguna forma de redundancia con el objetivo de detectar (y en algunos casos incluso autocorregir) posibles errores en el proceso de decodificación (bits de paridad, checksums, CRCs, códigos polinomiales, Reed Solomon, etc.).
Otros documentos relacionados con la invención son los que se comentan a continuación.
El documento EP2105868A1 divulga (párrafos 0018-0035) un código compuesto por una pluralidad de celdas dispuestas en forma de matriz, que se distingue del fondo usando un borde cuadrado. Las celdas pueden tener diferentes colores, densidades o luminancias. Las celdas se distribuyen en bloques (agregado de una pluralidad de celdas) con unos patrones específicos de inicio (facilita la orientación del código) y fin, bloques específicos de corrección de errores (en las celdas exteriores, junto al borde) y bloques de datos (formando un cuadrado con las celdas interiores).
El documento EP1443452A2 divulga (párrafos 0030-0051) un código (figura 1A) que contiene cinco patrones en ubicaciones específicas para facilitar la orientación del mismo. Asociados a estos patrones se sitúan también las cinco referencias de color necesarias para decodificar el código. Igualmente, (párrafos 0074, 0092, 0109) la distinta ubicación predeterminada de los colores de referencia permite reconocer el tamaño de la matriz del código. El resto de la matriz (párrafos 0113-0148) se asigna completamente a bloques de datos compuestos por conjuntos predeterminados de celdas. La agrupación entre celdas de un mismo bloque se indica por un valor constante “86”, y se incorpora un código de detección de errores en cada bloque de datos.
El documento US2009310874A1 divulga (párrafos 0008-0016) un código en el que se definen celdas específicas para facilitar tanto la orientación del código, como la paleta de colores (figuras 1 y 2). Por ejemplo en la figura 1, en las celdas de esquinas diagonalmente opuestas se utiliza un mismo color base, y en las tres celdas adyacentes de cada esquina se utiliza el resto de colores, en una posición predeterminada, como paleta de referencia (seis colores adicionales). El resto de celdas se utiliza para datos. No se realizan referencias a la incorporación de códigos de detección de errores. Se centra únicamente en la orientación y en la identificación efectiva de la paleta de colores.
El documento US2014270511A1 divulga (párrafos 0048-0050, 0064-0070) un código que se enmarca en un borde blanco y negro para facilitar la orientación, también dispone de un marco especial (cebra) que posibilita determinar el tamaño de las celdas. En alguna posición predeterminada (dentro o fuera de dicho marco), también se incluyen unas celdas especiales de referencia de color para calibración. El resto de las celdas se utiliza para datos. Existe un cierto control de errores al transmitir en una cabecera (no ubicada en el código) el CRC original, con objeto de poder compararlo con el CRC de la información decodificada. El documento US2007278303A1 divulga (párrafos 0016, 0019) un código que incorpora un bloque de configuración en blanco y negro en una ubicación predeterminada. El resto de las celdas se consideran bloques de datos, son de igual tamaño que el bloque de configuración, y pueden utilizar cualquier color. Se dispone de un marco blanco, en cuyo interior se encuentran unos marcadores de esquinas (de configuración predeterminada) que delimitan el código. Para delimitar las celdas que componen cada bloque de datos se incorporan elementos separadores. Aunque indica (párrafos 0024-0030) que el bloque de configuración incorpora como metadatos información del tipo corrección de errores, no detalla esta configuración. El documento US2013092738A1 divulga (párrafos 0019-0020) un código que quiere ser una alternativa a los códigos en blanco y negro. En este caso se utiliza la superposición de tres niveles superpuestos con distintos colores, utilizando información de control de errores en cada capa. El documento EP2806377A2 divulga (párrafos 0015-0031) un código que comprende diversas celdas: celdas con la paleta de referencia que se encuentran ubicadas en la periferia en un orden predeterminado, celdas alternativas en blanco y negro para posicionar el código, y celdas de datos. No referencia ningún tipo de detección o control de errores. El documento EP2068117A2 divulga (párrafos 0027-0031) un código que dispone de secciones diferenciadas para facilitar la orientación, referencia de colores, datos y una sección adicional que pudiera usarse para detección de errores.
En los documentos analizados, se han encontrado diversos documentos en los que el código se circunscribe dentro de un marco blanco y negro. Igualmente, existen documentos en los que el conjunto de celdas disponibles se divide en bloques; y en los que ciertos bloques se utilizan para facilitar el posicionamiento utilizando patrones específicos (formas, colores) en ubicaciones predeterminadas. En todos los casos estos bloques o celdas particulares tienen una disposición (forma y/o color) predeterminado y su única función es indicar la orientación del código. Únicamente, en un documento (EP1443452) se utiliza una combinación diferente de colores para incorporar información sobre la paleta y adicionalmente informar sobre el tamaño de la matriz. Respecto a la capacidad de corrección de errores de los códigos analizados, algunos disponen de ubicaciones específicas para mostrar esta información, otros los incorporan junto con la información de datos, e incluso en algún caso la información de error es transmitida previamente en una cabecera. Esto significa que, en caso de incorporar dicha información, requiere celdas adicionales.
Respecto al bloque de orientación del código, los documentos analizados describen diferentes bloques para realizar diferentes funcionalidades. Así, por ejemplo, describen uno o más bloques que tienen la capacidad de proporcionar información sobre la orientación del código y otro bloque diferente (o más) para proporcionar información adicional relacionada con la corrección de errores.
Respecto a los bloques de datos, algunos documentos analizados no detallan su estructura, otros utilizan elementos separadores especiales, y otros una secuencia específica que se incorpora en el código.
En consecuencia, hay una necesidad de un código visual que resuelva al menos parcialmente los problemas mencionados anteriormente.
EXPLICACIÓN DE LA INVENCIÓN
En un primer aspecto, se proporciona un código visual. El código visual comprende una matriz bidimensional de celdas y un marco de un color oscuro que rodea la matriz de celdas. El código se caracteriza por el hecho de que la matriz de celdas comprende al menos uno de: • uno o más grupos de cuatro celdas en los que: o las celdas están dispuestas en dos filas y dos columnas, o en la posición de lectura del código visual, dos de las celdas de cada grupo de cuatro celdas, de las tres que forman la primera fila y la primera columna, son cada una de un color claro y/o un color oscuro, y las dos restantes son de colores diferentes entre sí, de una pluralidad de colores que no incluye el color claro y el color oscuro;
• uno o más grupos de tres celdas en los que: o cada grupo comprende tres celdas conectadas alineadas o en forma de L, o cada grupo de tres celdas tiene una única celda de un color claro o de un color oscuro y el resto de las celdas son de colores diferentes entre sí, de la pluralidad de colores; en el que los grupos de celdas codifican información y/o implementan un sistema de redundancia para la detección de errores en la decodificación del código visual.
De este modo, se consigue un código visual multicolor que puede ser decodificado, a partir de imágenes tomadas con un dispositivo de captura adecuado, de forma robusta en condiciones de captura potencialmente problemáticas, tales como las degradaciones cromáticas y pérdidas de resolución crecientes que se producen al alejar el código a identificar del sensor óptico y/o variar significativamente las condiciones lumínicas.
El código obtiene un compromiso entre la capacidad de codificación de información y la robustez a ser detectado a potenciales largas distancias. Este compromiso se obtiene representando tres valores numéricos diferentes, cada uno de los cuales puede ser reconocido usando procedimientos de interpretación diferentes sobre el código visual. Así, el primer valor numérico ofrece una mayor expresividad (mayor número de combinaciones posibles) que el segundo valor numérico y, a su vez, el segundo valor numérico ofrece un valor más informativo que el tercer valor numérico. En contrapartida, la robustez en la determinación de los códigos es inversamente proporcional a la capacidad, con el segundo valor numérico y el tercer valor numérico soportando incrementalmente mejor cierto tipo de degradaciones de color y otros tipos de ruido de imagen. Más adelante, los tres valores numéricos serán descritos con más detalle.
El código puede estar especialmente diseñado para su uso industrial; en particular su ámbito principal de aplicación puede ser la identificación de elementos tales como productos, cajas o palets en control de trazabilidad, si bien tampoco se descartan otras aplicaciones alternativas, como, por ejemplo, la localización de personas, vehículos o cualquier otro tipo de activos móviles. Usando esta tecnología, resulta viable realizar la lectura de códigos a varios metros de distancia, incluso para tamaños de impresión de etiquetas relativamente pequeños (por ejemplo, de entre 5 y 10 cm de lado), requiriéndose únicamente una línea visual directa entre el código y el dispositivo de captura de imagen (por ejemplo, una cámara conectada con un dispositivo informático, usando cualquier medio de comunicación inalámbrico o cableado). Además, permite la lectura simultánea y computacionalmente eficiente de varios códigos en cada imagen capturada, permitiendo así cubrir un espacio visual y de trabajo amplio con una sola captura. Resulta, por tanto, una solución más económica y flexible que otros sistemas de identificación, como soluciones inalámbricas (por ejemplo, RFID), que además de más costosas pueden tener menos garantías en entornos poco controlados, donde pueda haber interferencias causadas por elementos como agua o metal.
El código comparte ciertas similitudes de diseño con otros códigos visuales previos. En particular, el uso de una matriz bidimensional de celdas, la asignación de diferentes colores a éstas para aumentar la capacidad de codificación, el marco oscuro (por ejemplo, negro) sobre fondo claro (por ejemplo, blanco) para facilitar la detección inicial, junto con el empleo de algún tipo de redundancia para la detección de errores en el proceso de decodificación, son características particularmente comunes en este tipo de códigos. Sin embargo, las principales características aportadas son la eliminación de celdas de calibración de color, para aumentar la capacidad de código manteniendo fijo el número de celdas disponibles; la existencia de una consistencia interna en la distribución de colores por grupos de celdas, que añade un mecanismo de control de errores adicional (y por tanto complementario) al clásico checksunr, y el uso separado de la información cromática/monocromática para obtener los tres valores numéricos simultáneos (al menos uno de ellos), con los previamente mencionados compromisos entre capacidad y robustez.
Los códigos descritos pueden estar diseñados para ser impresos sobre una etiqueta, papel, adhesivo, plástico, tejido, o cualquier otro tipo de soporte que pueda ser adherido por algún medio a cualquier tipo de activo potencialmente móvil (productos, materiales, personas, etc.) sobre el que interese realizar un seguimiento o trazabilidad. Una característica fundamental de los mismos, pues, es que deben ser extremadamente robustos a variaciones grandes de iluminación en el escenario de decodificación: típicamente, son fundamentalmente las cámaras las que se encuentran situadas de forma estática en puntos clave del escenario de aplicación, aunque no existe tampoco ninguna limitación en que éstos puedan ser igualmente detectados por cámaras móviles, como por ejemplo cámaras montadas en carretillas motorizadas, pero los códigos estarán situados indefectiblemente en activos móviles, y pueden sufrir, por lo tanto, grandes variaciones en la iluminación que reciben. Ello afecta en gran medida a cómo son sensorizados por los correspondientes dispositivos de captura de imagen. Las consideraciones principales de diseño de los códigos visuales propuestos pueden basarse fundamentalmente, pues, en la idea de hacer los procedimientos de localización y posterior decodificación lo más robustos posible a las degradaciones de imagen producidas habitualmente en dichas condiciones de movilidad y cambios de iluminación constantes.
En algunos ejemplos, la codificación de la información puede realizarse mediante al menos un grupo de tres celdas, mientras que la implementación del sistema de redundancia para la detección de errores puede conseguirse a través de al menos un grupo de cuatro celdas, aunque otras variantes son posibles. Por ejemplo, se podrían usar las cuaternas para la codificación de información, sin que el código implemente un sistema de redundancia para la detección de errores, o se podrían utilizar ternas para implementar un sistema de redundancia o formar parte de él (por ejemplo, junto con alguna cuaterna).
En algunos ejemplos, el código visual puede comprender un fondo de un color claro externo al marco de un color oscuro, lo que facilita la detección inicial del código en la imagen capturada, para ser posteriormente decodificado.
Por otro lado, el ancho del marco de un color oscuro puede ser, por ejemplo, igual al ancho de una celda o puede ser la mitad del ancho de una celda.
De acuerdo con algunos ejemplos, el código visual puede comprender, en la posición de lectura del código visual, un grupo de cuatro celdas dispuesto en la esquina superior izquierda de la matriz de celdas. Además, el código visual puede comprender un grupo de tres celdas conectadas en forma de L en cada una de las esquinas restantes de la matriz de celdas.
De este modo, se consigue un código visual que es invariante a rotaciones, dado que se puede determinar correctamente cuál de sus esquinas es la correspondiente a la superior izquierda, teniendo en cuenta el hecho de que, de los cuatro grupos de tres celdas correspondientes a las cuatro esquinas, solo el grupo de tres celdas que forma parte del grupo de cuatro celdas puede comprender forzosamente dos colores claro y/u oscuro, frente a las tres esquinas restantes que solo pueden contener una celda de color claro u oscuro. Por lo tanto, este bloque de orientación del código en base al grupo de cuatro celdas descrito puede combinar en un único bloque la capacidad de proporcionar información sobre la orientación del código e información adicional relacionada con la corrección de errores (esta última funcionalidad se describirá más adelante). La utilización de un grupo de cuatro celdas (cuaterna) diferente del tamaño de los bloques de datos (grupos de tres celdas o ternas), junto con la distribución y restricciones particulares de colores de las cuatro celdas de dicho bloque, proporciona esta doble funcionalidad. Esta duplicidad de funciones realizada por un mismo conjunto de celdas permite reducir el número de celdas requeridas.
Respecto a los bloques de datos, la posible utilización de bloques formados por tres celdas (ternas), sin tener que predefinir su forma específica, aparte de ser útiles para determinar la orientación adecuada o posición de lectura del código, permite identificar qué conjunto de celdas pertenecen a cada bloque únicamente por la distribución específica de los colores asignados. Además, la restricción exigida para que una celda de cada terna únicamente pueda tener los colores blanco o negro (claro u oscuro), y su posible determinación de los mismos mediante la comparación con el marco de un color oscuro y el fondo de un color claro, posibilita la utilización del código en situaciones complicadas de iluminación. Con la utilización adicional en las otras dos celdas de cada terna de la combinación de dos colores (con sus restricciones particulares), se amplía la capacidad de almacenamiento de información para situaciones más favorables de iluminación. Además la utilización de colores, con las restricciones exigidas, elimina la necesidad de incorporar una paleta de referencia en el código, permitiendo de nuevo ampliar la información contenida en el código sin necesidad de ampliar el tamaño del mismo.
En consecuencia, la configuración particular del bloque de control de orientación que incorpora los códigos de redundancia (cuaterna) y la configuración específica de colores de los bloques de datos (ternas) proporcionan, entre otros, los efectos de incrementar la capacidad de información almacenada en el código para un número fijo de celdas disponibles. No se requiere la reserva de celdas específicas para control de errores, o para introducir una paleta de colores de referencia. Además, la posibilidad de usar de forma independiente pero complementaria la información cromática (pluralidad de colores) y monocromática (color claro, por ejemplo, blanco, y color oscuro, por ejemplo, negro) posibilita que un código de este tipo sea usado en distintos entornos de acuerdo con la iluminación disponible en cada caso, ampliando así la capacidad de almacenamiento en las situaciones de iluminación apropiadas. En algunos ejemplos, la pluralidad de colores comprende al menos tres de los siguientes colores: cían, magenta, amarillo, rojo, verde, azul. Por ejemplo, puede ser cualquier combinación de colores, pero es posible elegir tres colores que estén lo más separados posible en el cubo RGB, como pueden ser las combinaciones {cían, magenta, amarillo} o {rojo, verde, azul}. La pluralidad de colores también puede representarse en una escala de grises.
De acuerdo con algunos ejemplos, un color oscuro puede ser el color negro. En realidad, puede ser cualquier color oscuro, pero el color negro (mate) permite maximizar el contraste con el entorno o fondo claro (por ejemplo, blanco), lo que facilita la detección del código visual. En cualquier caso, el color claro puede ser de un color mucho más claro que el del marco oscuro. Además, el color oscuro del marco y el color claro del fondo pueden servir de referencia para un color claro y/o oscuro utilizado en alguna de las celdas de la matriz de celdas.
De acuerdo con algunos ejemplos, la matriz de celdas puede tener el mismo número de filas que de columnas, aunque no es esencial que la matriz sea cuadrada. Pueden diseñarse estructuras rectangulares, hexagonales, etc., que tendrían sus agrupamientos de celdas específicos pero seguirían el mismo procedimiento de codificación.
En algunos ejemplos, la información codificada por los grupos de celdas puede comprender al menos un primer valor numérico (también referenciado como Code A) que se determina a partir de valores obtenidos de las celdas de un color claro o de un color oscuro y de las celdas de colores dentro de la pluralidad de colores, de los grupos de tres celdas. En este caso, la decodificación de este primer valor numérico depende de la correcta identificación cromática de los colores de la pluralidad de colores, por lo que la decodificación de la combinación concreta es menos robusta a posibles degradaciones cromáticas de la imagen capturada del código visual.
En algunos ejemplos, la información codificada por los grupos de celdas puede comprender al menos un segundo valor numérico (también referenciado como Code B ) que se determina a partir de valores obtenidos de las celdas en base a su color en una escala de grises, de los grupos de tres celdas. De este modo, se consigue información codificada en forma de segundo valor numérico o Code B, cuya decodificación es robusta a degradaciones cromáticas.
En algunos ejemplos, la información codificada por los grupos de celdas puede comprender al menos un tercer valor numérico (también referenciado como Code C) que se determina a partir de valores obtenidos de todas las celdas de un color claro o de un color oscuro de la matriz de celdas. Este Code C puede proporcionarse solo para el caso en que la lectura del Code A y del Code B falle, a modo de hash, con un rango bastante más reducido que los Codes A y B. No dispone de un sistema de redundancia para la detección de errores en la decodificación del código visual, para controlar posibles errores. Por lo tanto, puede ser utilizado como último recurso en condiciones de iluminación extremas, trabajando únicamente sobre una versión binaria (0/1) de la imagen de entrada.
De acuerdo con algunos ejemplos, el sistema de redundancia para la detección de errores en la decodificación del código visual puede implementarse a partir de valores obtenidos de las celdas de un color claro o de un color oscuro y de las celdas de colores dentro de la pluralidad de colores, de los grupos de cuatro celdas, para detectar errores en la decodificación del primer valor numérico.
En algunos ejemplos, el sistema de redundancia para la detección de errores en la decodificación del código visual puede implementarse a partir de valores obtenidos de las celdas de un color claro o un color oscuro de los grupos de cuatro celdas, para detectar errores en la decodificación del segundo valor numérico.
Por lo tanto, los códigos visuales propuestos pueden introducir un esquema jerárquico de checksums dirigido a aumentar la robustez global y evitar la posible aceptación de códigos erróneos. Este esquema puede venir proporcionado al menos por un grupo de cuatro celdas que puede ser usado también para obtener la orientación del código visual. Esta duplicidad de funciones realizada por un mismo conjunto de celdas (cuaterna) permite reducir el número de celdas requeridas.
De acuerdo con otro aspecto, se proporciona un procedimiento para generar un código visual tal como se ha descrito anteriormente. El procedimiento comprende:
• obtener el número de filas y columnas de la matriz de celdas;
• determinar la combinación de uno o más grupos de tres celdas y/o uno o más grupos de cuatro celdas adecuada para el número obtenido de filas y columnas de la matriz de celdas;
• obtener la información a codificar;
• codificar la información y/o implementar el sistema de redundancia para la detección de errores en la decodificación del código visual, en base a la siguiente configuración: o para cada grupo de tres celdas de la combinación determinada: asignar un color claro o un color oscuro a una de las celdas del grupo de tres celdas, definiéndose un primer parámetro que toma un valor predeterminado que depende de si el color asignado a la celda es el color claro o el color oscuro, y definiéndose un segundo parámetro que toma un valor predeterminado que depende de la celda, del grupo de tres celdas, a la que se le asigna el color claro o el color oscuro;
asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de tres celdas, definiéndose un tercer parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un cuarto parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores; o para cada grupo de cuatro celdas de la combinación determinada:
asignar un color claro y/o un color oscuro a dos de las tres celdas que forman la primera fila y la primera columna del grupo de cuatro celdas, definiéndose un quinto parámetro que toma un valor predeterminado que depende de la celda que no tiene asignado un color claro o un color oscuro, y definiéndose un sexto parámetro que toma un valor predeterminado que depende de la combinación de color claro y/o color oscuro asignada a las dos celdas;
asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de cuatro celdas, definiéndose un séptimo parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un octavo parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores.
De este modo, se genera un código visual con las características descritas con anterioridad.
En algunos ejemplos, el primer parámetro puede tomar un valor 0 o 1 (aunque los valores podrían ser otros) dependiendo de si el color asignado a la celda es el color claro o el color oscuro, es decir, el primer parámetro puede tomar el valor 0 si el color asignado es el color oscuro (por ejemplo, negro) o el valor 1 si el color asignado es el color claro (por ejemplo, blanco), o viceversa. Este primer parámetro puede referenciarse como bit monocromático (bm) de la terna. Por otro lado, el segundo parámetro puede tomar un valor 0, 1 o 2 (aunque pueden ser otros) dependiendo de si la celda a la que se le asigna el color claro o el color oscuro, en posición de lectura del código, es la primera celda, la segunda celda o la tercera celda del grupo de tres celdas. De este modo, el segundo parámetro puede tomar tres valores diferentes, por ejemplo, 0 si el color claro o el color oscuro está en la primera celda del grupo de tres celdas, 1 si está en la segunda celda o 2 si está en la tercera celda (aunque la asignación de valores puede ser cualquier otra). Este segundo parámetro puede referenciarse como trit monocromático (tm) de la terna.
En consecuencia, con esta configuración entre el bit y el trit monocromático se consigue un total de 2x3=6 posibilidades diferentes por cada terna, es decir, (bm,tm)={(0,0),(1,0),(0,1),(1 ,1),(0,2),(1 ,2)}. Dependiendo del número de ternas se conseguirá un número determinado de posibilidades diferentes, las cuales pueden ser decodificadas incluso en condiciones de pérdida absoluta de la información de color, requiriendo simplemente que la celda de color claro o de color oscuro pueda ser correctamente localizada en cada terna. Dado el procedimiento descrito, este requerimiento siempre será posible porque cada una de las otras dos celdas de la terna tienen necesariamente un color de la pluralidad de colores (por ejemplo, cían, magenta y amarillo), y estos colores pueden mostrar una diferencia de valor de gris medio mayor que la que muestra el elemento de color claro o de color oscuro con su correspondiente color claro o color oscuro calibrado, obtenidos estos últimos directamente del exterior y del interior del marco de color oscuro sobre fondo blanco del código visual. Estas posibilidades descritas forman el correspondiente segundo valor numérico ( Code B ) descrito anteriormente, para la codificación de información.
De acuerdo con algunos ejemplos, el tercer parámetro puede tomar un valor 0, 1 o 2 (aunque pueden ser otros) dependiendo del color no escogido de la pluralidad de colores. Así, por ejemplo, si la pluralidad de colores comprende cían, magenta y amarillo, el tercer parámetro puede tomar, por ejemplo, el valor 0 si el color descartado es el cían, el valor 1 si el color descartado es el magenta, y el valor 2 si el color descartado es el amarillo. Obviamente, es aceptable cualquier combinación de valor/color descartado. Este tercer parámetro puede referenciarse como trit cromático (te) de la terna.
En algunos ejemplos el cuarto parámetro puede tomar un valor 0 o 1 (aunque pueden ser otros) dependiendo de si el orden coincide o no con el orden preestablecido de los colores de la pluralidad de colores. De este modo, por ejemplo, el cuarto parámetro puede tomar el valor 0 si el orden coincide con el orden preestablecido (por ejemplo, cian<magenta<amarillo) o el valor 1 si el orden no es coincidente, o viceversa.
Por lo tanto, de nuevo se consiguen 2x3=6 posibilidades diferentes para unos valores concretos (be, te) que, si se aprovecha la combinatoria inducida por un número determinado de ternas (es decir, grupos de tres celdas), se consiguen posibilidades adicionales que, además, son completamente independientes de las combinaciones monocromáticas (bm,tm) descritas anteriormente. La combinación de la información monocromática y de la información cromática da lugar a una combinatoria elevada de combinaciones distintas, cada una de las cuales da lugar al primer valor numérico ( Code A) descrito anteriormente, para la codificación de información. Sin embargo, en este caso sí que la decodificación depende de la correcta identificación cromática de los colores de la pluralidad de colores, por lo que la decodificación de la combinación concreta es menos robusta a posibles degradaciones cromáticas de la imagen capturada del código visual.
En algunos ejemplos, el quinto parámetro puede tomar un valor 0, 1 o 2 (aunque pueden ser otros) dependiendo de si la celda a la que no se le asigna el color claro o el color oscuro, en posición de lectura del código, es la primera celda, la segunda celda o la tercera celda de las tres celdas que forman la primera fila y la primera columna del grupo de cuatro celdas. De este modo, por ejemplo, si la celda a la que no se le asigna el color oscuro o el color claro es la primera celda, el valor del quinto parámetro puede tomar el valor 0, si es la segunda celda puede tomar el valor 1 y si es la tercera celda puede tomar el valor 2 (aunque la asignación de valores puede ser cualquier otra). El quinto parámetro puede referenciarse como trit monocromático (tme) adicional para cada cuaterna o grupo de cuatro celdas.
De acuerdo con algunos ejemplos, el sexto parámetro toma un valor {(0,0), (0,1), (1 ,0), (1,1)} (aunque pueden ser otros) dependiendo de la combinación de color claro y/o color oscuro asignada a las dos celdas. Así, si la combinación es oscuro-oscuro el sexto parámetro puede tomar el valor (0,0), si la combinación es oscuro-claro puede tomar el valor (0,1), si la combinación es claro-oscuro puede tomar el valor (1 ,0), o si la combinación es claro-claro puede tomar el valor (1 ,1), aunque la asignación de valores puede ser cualquier otra. Este sexto parámetro puede referenciarse como dos bits monocromáticos (bmcO, bmc1) adicionales para la cuaterna.
En este caso, acumulando la información de tme, bmc1 y bmcO se dispone de un total de 3x2x2=12 posibilidades que, de nuevo, puede ser determinadas con robustez a degradaciones cromáticas extrema. Estas 12 posibilidades o valores pueden usarse para aumentar el número de posibles segundos valores numéricos ( Code B), aunque se propone utilizarlos como checksum de los valores codificados por las ternas, para detectar posibles errores en la decodificación, es decir, como sistema de redundancia para la detección de errores en la decodificación del Code B.
En algunos ejemplos, el séptimo parámetro puede tomar un valor 0, 1 o 2 (aunque pueden ser otros) dependiendo del color no escogido de la pluralidad de colores. Así, si se parte del mismo ejemplo que el utilizado para las ternas, el séptimo parámetro puede tomar, por ejemplo, el valor 0 si el color descartado es el cían, el valor 1 si el color descartado es el magenta, y el valor 2 si el color descartado es el amarillo. Obviamente, es aceptable cualquier combinación de valor/color descartado. Este séptimo parámetro puede referenciarse como trit cromático (tcc) adicional de la cuaterna.
De acuerdo con algunos ejemplos, el octavo parámetro puede tomar un valor 0 o 1 (aunque podrían ser otros) dependiendo de si el orden coincide o no con el orden pre-establecido de los colores de la pluralidad de colores. De este modo, por ejemplo, el octavo parámetro puede tomar el valor 0 si el orden coincide con el orden pre-establecido (por ejemplo, cian<magenta<amarillo) o el valor 1 si el orden no es coincidente, o viceversa. Este octavo parámetro puede referenciarse como bit cromático (bcc) adicional.
Una vez más, también en este caso se obtienen 2x3=6 posibilidades o valores diferentes para cada par de valores concretos (bcc, tcc), que pueden ser utilizados a modo de checksum para controlar posibles errores de decodificación de, en este caso, el primer valor numérico o Code A, ya que la decodificación de estos ítems de información (bcc, tcc) dependen de la correcta identificación de la pluralidad de colores (por ejemplo, cían, magenta y amarillo). En consecuencia, su determinación no es tan robusta como los ítems de información monocromática descritos anteriormente, para las diferentes combinaciones correspondientes a los Code B.
En resumen, sólo identificando correctamente las posiciones de los valores claro y oscuro (por ejemplo, blanco y negro respectivamente) en la/s terna/s y en la/s cuaterna/s, es posible codificar un número determinado de posibilidades diferentes (depende del número de ternas y de cuaternas establecido en la matriz de celdas), controladas por un checksum. Estas posibilidades forman el llamado segundo valor numérico o Code B, robusto a degradaciones cromáticas. Si, además, se tiene la capacidad de determinar correctamente los colores de la pluralidad de colores (por ejemplo, cían, magenta y amarillo), es posible disponer de otro número determinado, tal como el Code A, de posibilidades o valores, controladas por otro checksum.
Por otro lado, si uno de estos grupos de cuatro celdas se encuentra, en posición de lectura del código, en la esquina superior izquierda de la matriz de celdas y el resto de las esquinas presenta ternas en forma de L, puede conseguirse un procedimiento de codificación invariante a rotaciones. Ello significa que, aunque el código aparezca rotado en la imagen capturada, en cualquiera de los cuatro posibles ángulos de rotación de un cuadrado (0, 90, 180 o 270 grados), el procedimiento de decodificación puede determinar sin problemas cuál de las esquinas es la correspondiente a la superior izquierda, es decir, a la cuaterna de celdas. Ello es debido a que, de las cuatro ternas de celdas correspondientes a las cuatro esquinas, sólo las celdas que forman parte de la primera fila y de la primera columna de la cuaterna contienen forzosamente dos colores claro y/u oscuro, frente a las otras tres esquinas, en la que un y sólo un color de las celdas de la terna correspondiente puede tener un color claro u oscuro. Esta propiedad es importante para poder decodificar los códigos visuales en cualquier posición relativa de éstos respecto a la cámara, independientemente de la posición de giro concreto respecto a la misma con el que se estén visualizando en cada momento.
En algunos ejemplos, los grupos de tres celdas pueden codificar la información, mientras que los grupos de cuatro celdas pueden implementar el sistema para la detección de errores en la decodificación del código visual. También son posible otras configuraciones, tales que tanto las terna como las cuaternas codifican información y, por lo tanto, no se implementa un sistema de detección de errores.
Según otro aspecto, se proporciona un producto de programa informático. El producto de programa informático comprende instrucciones de programa para provocar que un sistema realice un procedimiento para generar un código visual, tal como el descrito anteriormente. El programa informático puede estar almacenado en unos medios de almacenamiento físico, tales como unos medios de grabación, una memoria de ordenador, o una memoria de sólo lectura, o puede ser portado por una onda portadora, tal como eléctrica u óptica.
De acuerdo con otro aspecto, se proporciona un sistema para generar un código visual, tal como el descrito anteriormente. El sistema comprende:
• medios para obtener el número de filas y columnas de la matriz de celdas; • medios para determinar la combinación de uno o más grupos de tres celdas y/o uno o más grupos de cuatro celdas adecuada para el número obtenido de filas y columnas de la matriz de celdas;
• medios para obtener la información a codificar;
• medios para codificar la información y/o implementar el sistema de redundancia para la detección de errores en la decodificación del código visual, en base a la siguiente configuración: o para cada grupo de tres celdas de la combinación determinada:
medios para asignar un color claro o un color oscuro a una de las celdas del grupo de tres celdas, definiéndose un primer parámetro que toma un valor predeterminado que depende de si el color asignado a la celda es el color claro o el color oscuro, y definiéndose un segundo parámetro que toma un valor predeterminado que depende de la celda, del grupo de tres celdas, a la que se le asigna el color claro o el color oscuro;
medios para asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de tres celdas, definiéndose un tercer parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un cuarto parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores; o para cada grupo de cuatro celdas de la combinación determinada:
medios para asignar un color claro y/o un color oscuro a dos de las tres celdas que forman la primera fila y la primera columna del grupo de cuatro celdas, definiéndose un quinto parámetro que toma un valor predeterminado que depende de la celda que no tiene asignado un color claro o un color oscuro, y definiéndose un sexto parámetro que toma un valor predeterminado que depende de la combinación de color claro y/o color oscuro asignada a las dos celdas;
medios para asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de cuatro celdas, definiéndose un séptimo parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un octavo parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden preestablecido de los colores de la pluralidad de colores. De acuerdo aún con otro aspecto, se proporciona un sistema para generar un código visual.
Este sistema está configurado para:
• obtener el número de filas y columnas de la matriz de celdas;
• determinar la combinación de uno o más grupos de tres celdas y/o uno o más grupos de cuatro celdas adecuada para el número obtenido de filas y columnas de la matriz de celdas;
• obtener la información a codificar;
• codificar la información y/o implementar el sistema de redundancia para la detección de errores en la decodificación del código visual, en base a la siguiente configuración: o para cada grupo de tres celdas de la combinación determinada:
asignar un color claro o un color oscuro a una de las celdas del grupo de tres celdas, definiéndose un primer parámetro que toma un valor predeterminado que depende de si el color asignado a la celda es el color claro o el color oscuro, y definiéndose un segundo parámetro que toma un valor predeterminado que depende de la celda, del grupo de tres celdas, a la que se le asigna el color claro o el color oscuro;
asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de tres celdas, definiéndose un tercer parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un cuarto parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores; o para cada grupo de cuatro celdas de la combinación determinada:
asignar un color claro y/o un color oscuro a dos de las tres celdas que forman la primera fila y la primera columna del grupo de cuatro celdas, definiéndose un quinto parámetro que toma un valor predeterminado que depende de la celda que no tiene asignado un color claro o un color oscuro, y definiéndose un sexto parámetro que toma un valor predeterminado que depende de la combinación de color claro y/o color oscuro asignada a las dos celdas;
asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de cuatro celdas, definiéndose un séptimo parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un octavo parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores.
Según otro aspecto, se proporciona un sistema para generar un código visual. El sistema comprende una memoria y un procesador. La memoria almacena instrucciones de programa informático ejecutables por el procesador. Las instrucciones comprenden funcionalidades para ejecutar un procedimiento para generar un código visual, tal como el descrito anteriormente.
De acuerdo con otro aspecto, se proporciona un procedimiento para decodificar un código visual tal como el descrito anteriormente. Este código visual está codificado de acuerdo con un procedimiento para generar un código visual también descrito anteriormente. El procedimiento de decodificación comprende:
Obtener una imagen que comprende al menos un código visual a decodificar; Localizar en la imagen obtenida al menos un código candidato;
Para cada código candidato localizado:
Extraer el color de cada celda del código candidato;
Decodificar la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda.
La obtención de la imagen puede realizarse mediante un dispositivo de captura de imágenes propia del sistema para decodificar un código visual, el cual será descrito más adelante, o puede obtenerse en forma de imagen previamente capturada por otro dispositivo que el sistema recoge o recibe del mismo o de otro dispositivo que la almacena.
En algunos ejemplos, localizar en la imagen cada código candidato puede comprender:
• Aplicar un algoritmo de umbralizado dinámico de la imagen, que tenga en cuenta las posibles diferentes condiciones de iluminación en diferentes áreas de la captura;
• Aplicar un algoritmo de extracción de contornos cerrados, sobre la imagen binarizada resultante de aplicar el algoritmo de umbralización;
• Reducir los contornos cerrados extraídos, mediante una aproximación poligonal;
• Verificar cuáles de los contornos reducidos son proyectivamente equivalentes a un cuadrado, obteniéndose, para cada contorno proyectivamente equivalente a un cuadrado, un código candidato. La aproximación poligonal puede seguir, por ejemplo, el procedimiento descrito en [“Algorithms forthe reduction ofthe number of points required to represen t a digitized Une orits caricature", David Douglas & Thomas Peucker, The Canadian Cartographer 10(2), 112-122, (1973)].
Además, el algoritmo de umbralizado dinámico de la imagen puede utilizar un umbral adaptativo, el cual calcula el valor de un umbral diferente para cada posición de la imagen, dependiendo de la distribución de valores de gris de una pequeña región de imagen alrededor de cada píxel, tal y como se describe, por ejemplo, en [“Local Ada ptive Thresholding.’’Li S.Z., Jain A. (eds) Encyclopedia of Biometrics. Springer" (2009)].
En algunos ejemplos, localizar en la imagen cada código candidato puede comprender corregir la distorsión radial en la imagen introducida por el elemento de captura de la imagen. Cabe decir que la corrección de la posible distorsión radial introducida por la cámara puede no ser en principio necesaria, ya que los códigos están explícitamente diseñados para ser pequeños y ser visualizados a larga distancia. No obstante, para su visualización cercana (por ejemplo, con un Smartphone o teléfono inteligente situado cerca del código), podría tener que realizarse en algún caso una precorrección de dicha distorsión, especialmente para objetivos de tipo gran angular.
En algunos ejemplos, extraer el color de cada celda de un código candidato puede comprender:
• Realizar una rectificación homográfica de la imagen original, usando las cuatro esquinas del contorno del código candidato, a un marco canónico cuadrado de tamaño suficiente;
• Obtener, de la imagen rectificada, una matriz de celdas con un simple vector de color (R,G,B) en cada celda;
• Obtener un solo valor de vector RGB por celda de la matriz de celdas obtenida, mediante un filtro de mediana para eliminar posible ruido del sensor; siendo el resultado obtenido un tensor de un número determinado de valores (el número de valores depende, por ejemplo, del tamaño de la matriz de celdas), con un vector (R,G,B) con valores entre [0,0,0] y [255,255,255] para cada celda.
Por otro lado, el marco canónico cuadrado puede tener, por ejemplo, un tamaño de 100x100 píxeles. En algunos ejemplos, extraer el color de cada celda del código candidato puede comprender realizar un alineamiento sub-píxel de cada contorno del código candidato.
De acuerdo con algunos ejemplos, obtener, de la imagen rectificada, una matriz de celdas con un simple vector de color (R,G,B) en cada celda puede comprender realizar un balance de blancos usando los propios colores claro y oscuro del fondo y del marco, respectivamente, como elementos de calibración, cuyas posiciones en la imagen rectificada son ya plenamente conocidas.
Por otro lado, el filtro de mediana puede tener una anchura suficiente como para cubrir de forma consistente el centro de cada celda en el área que le corresponde de la imagen rectificada, sin invadir el resto de las celdas contiguas de la matriz de celdas.
En algunos ejemplos, decodificar la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda puede comprender:
• Determinar la orientación correcta de la matriz de celdas;
• Decodificar cada grupo de tres celdas, comprobando que que se cumplen las restricciones referentes a que cada grupo de tres celdas tiene una única celda de un color claro o de un color oscuro, entendida como una restricción monocromática, y el resto de las celdas son de colores diferentes entre sí, de la pluralidad de colores, entendida como una restricción cromática;
• Decodificar cada grupo de cuatro celdas, comprobando que se cumplen las restricciones referentes a que, en la posición de lectura del código visual, dos de las celdas de cada grupo de cuatro celdas, de las tres que forman la primera fila y la primera columna, son cada una de un color claro y/o un color oscuro, entendida como una restricción monocromática, y las dos restantes son de colores diferentes entre sí, de una pluralidad de colores que no incluye el color claro y el color oscuro, entendida como una restricción cromática;
• Si no se cumple la restricción monocromática de los grupos de tres celdas y/o de los grupos de cuatro celdas, descartar el código candidato;
• Si no se cumple la restricción cromática de los grupos de tres celdas y/o de los grupos de cuatro celdas, o descartar el primer valor numérico ( Code A) o Obtener el segundo valor numérico ( Code B ) que se determina a partir de valores obtenidos de las celdas en base a su color en una escala de grises, de los grupos de tres celdas; o Obtener el valor de redundancia del segundo valor numérico ( Code B) a partir de valores obtenidos de las celdas de un color claro o un color oscuro de los grupos de cuatro celdas; o Comprobar el valor de redundancia obtenido, con el segundo valor numérico ( Code B ) obtenido, para detectar errores en la lectura; o Si la comprobación no es correcta, descartar el segundo valor numérico ( Code B) obtenido; o Si la comprobación es correcta, proporcionar el segundo valor numérico ( Code B) obtenido;
• Si se cumplen las restricciones monocromática y cromática de los grupos de tres celdas y/o de los grupos de cuatro celdas, o Obtener el primer valor numérico (Code A) que se determina a partir de valores obtenidos de las celdas de un color claro o de un color oscuro y de las celdas de colores dentro de la pluralidad de colores, de los grupos de tres celdas; o Obtener el valor de redundancia del primer valor numérico ( Code A) a partir de valores obtenidos de las celdas de un color claro o de un color oscuro y de las celdas de colores dentro de la pluralidad de colores, de los grupos de cuatro celdas; o Comprobar el valor de redundancia obtenido, con el primer valor numérico ( Code A) obtenido, para detectar errores en la lectura; o Si la comprobación no es correcta, descartar el primer valor numérico ( Code A) obtenido; o Si la comprobación es correcta, proporcionar el primer valor numérico ( Code
A) obtenido; o Obtener el segundo valor numérico ( Code B) que se determina a partir de valores obtenidos de las celdas en base a su color en una escala de grises, de los grupos de tres celdas; o Obtener el valor de redundancia del segundo valor numérico ( Code B) a partir de valores obtenidos de las celdas de un color claro o un color oscuro de los grupos de cuatro celdas; o Comprobar el valor de redundancia obtenido, con el segundo valor numérico ( Code B) obtenido, para detectar errores en la lectura; o Si la comprobación no es correcta, descartar el segundo valor numérico ( Code
B) obtenido; o Si la comprobación es correcta, proporcionar el segundo valor numérico ( Code B ) obtenido.
De acuerdo con algunos ejemplos, decodificar la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda puede comprender, si se descarta el primer valor numérico ( Code A) y el segundo valor numérico (Code B)
• Obtener el tercer valor numérico ( Code C) a partir de valores obtenidos de todas las celdas de un color claro o de un color oscuro de la matriz de celdas;
• Proporcionar el tercer valor numérico ( Code C) obtenido.
Por lo tanto, sólo en el caso de que la lectura de ambos Codes A y B fallase, se podría devolver un simple valor de Code C (tercer valor numérico), a modo de hash, con un rango bastante más reducido que los Codes A y B, que ya no dispone de ningún sistema de redundancia para la detección de errores, y que es utilizado como último recurso en condiciones de iluminación extremas, trabajando únicamente sobre una versión binaria (0/1) de la imagen de entrada.
Según otro aspecto, se proporciona un producto de programa informático. El producto de programa informático comprende instrucciones de programa para provocar que un sistema realice un procedimiento para decodificar un código visual, tal como el descrito anteriormente. El programa informático puede estar almacenado en unos medios de almacenamiento físico, tales como unos medios de grabación, una memoria de ordenador, o una memoria de sólo lectura, o puede ser portado por una onda portadora, tal como eléctrica u óptica.
De acuerdo con otro aspecto, se proporciona un sistema para decodificar un código visual, tal como el descrito anteriormente. El código visual ha sido codificado por un sistema para generar un código visual también descrito. El sistema de decodificación comprende:
Medios para obtener una imagen que comprende al menos un código visual a decodificar;
Medios para localizar en la imagen obtenida cada código candidato;
Medios para extraer el color de cada celda del código candidato;
Medios para decodificar la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda. De acuerdo con aún otro aspecto, se proporciona un sistema para decodificar un código visual, tal como el descrito anteriormente. El código visual ha sido codificado por un sistema para generar un código visual también descrito. El sistema de decodificación está configurado para: Obtener una imagen que comprende al menos un código visual a decodificar; Localizar en la imagen obtenida cada código candidato;
Para cada código candidato localizado:
Extraer el color de cada celda del código candidato;
Decodificar la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda.
Según otro aspecto, se proporciona un sistema para decodificar un código visual, tal como el descrito anteriormente. El código visual ha sido codificado por un sistema para generar un código visual también previamente descrito. El sistema comprende una memoria y un procesador. La memoria almacena instrucciones de programa informático ejecutables por el procesador. Estas instrucciones comprenden funcionalidades para ejecutar un procedimiento para decodificar un código visual, tal como se ha descrito con anterioridad.
Otros objetos, ventajas y características de realizaciones de la invención se pondrán de manifiesto para el experto en la materia a partir de la descripción, o se pueden aprender con la práctica de la invención.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
A continuación, se describirán realizaciones particulares de la presente invención a título de ejemplo no limitativo, con referencia a los dibujos adjuntos, en los cuales:
La Figura 1 muestra esquemáticamente un ejemplo de código visual, usando un tamaño concreto de matriz de 4x4 celdas y cinco colores diferentes (blanco (B), negro (N), cían (C), magenta (M) y amarillo (A)), y un ancho del marco negro igual al de una celda.
La Figura 2 muestra esquemáticamente un ejemplo de código visual equivalente al de la Figura 1 , pero con un borde más pequeño, en particular, de ancho igual a la mitad del ancho de una celda.
La Figura 3 muestra esquemáticamente un ejemplo de código visual para una matriz de 4x4, identificando las cuatro ternas ta, tb, te y td, así como la cuaterna c. La Figura 4 muestra esquemáticamente el código visual del ejemplo de la Figura 1, resaltando las diferentes ternas y la cuaterna.
La Figura 5 muestra esquemáticamente un ejemplo de código visual para una matriz de 5x5, identificando las siete ternas ta, tb, te, td, te, tf y tg, así como la cuaterna c.
La Figura 6 muestra un diagrama de flujos de un procedimiento para decodificar un código visual, más concretamente para la lectura de los códigos numéricos asociados al código visual, en tres bloques principales: localización de códigos candidatos, generación de tensor y decodificación por niveles.
La Figura 7 muestra esquemáticamente un escenario de aplicación, en el que una o más cámaras, conectadas a una intranet, envían las imágenes captadas en una determinada zona de una planta a un sistema informático central, donde son procesadas. Circulando por la planta hay, por ejemplo, carretillas móviles portando algún tipo de producto sobre el cual se ha adherido una etiqueta con uno de los códigos visuales.
EXPOSICIÓN DETALLADA DE MODOS DE REALIZACIÓN
Uno de los objetivos de la presente invención es el diseño de un código visual multicolor junto con los correspondientes procedimientos automatizados de codificación y decodificación del mismo a partir de imágenes tomadas con un dispositivo de captura adecuado. El código en sí consiste en una matriz cuadrada de colores (aunque puede tomar otras formas tal como rectangular o hexagonal) rodeada por un contorno o marco oscuro, tal como negro. Su diseño pretende explícitamente que el código sea decodificado de forma robusta en condiciones de captura potencialmente problemáticas, tales como las degradaciones cromáticas y pérdidas de resolución crecientes que se producen al alejar del dispositivo de captura (que comprende, por ejemplo, un sensor óptico) el código a identificar, y/o variar significativamente las condiciones lumínicas.
Para conseguir este objetivo, el código obtiene un compromiso entre la capacidad de codificación de información y la robustez a ser detectado a potenciales largas distancias. Este compromiso se obtiene representando tres valores numéricos diferentes, que de aquí en adelante serán denominados como Code A (primer valor numérico), Code B (segundo valor numérico) y Code C (tercer valor numérico), cada uno de los cuales es reconocido usando procedimientos de interpretación diferentes sobre el código. Así, Code A ofrece una mayor expresividad (mayor número de combinaciones posibles) que Code B y, a su vez, Code B ofrece un valor más informativo que Code C. En contrapartida, la robustez en la determinación de cada código es inversamente proporcional a la capacidad, con Code B y Code C soportando incrementalmente mejor cierto tipo de degradaciones de color y otros tipos de ruido de imagen.
Entrando en detalle en el diseño de un código visual de acuerdo con la invención, la Figura 1 muestra el aspecto general de un código 101 de ejemplo, usando un tamaño concreto de 4x4 celdas 103 de cinco colores diferentes (blanco (B), negro (N), cían (C), magenta (M) y amarillo (A)), y un ancho del marco 102 negro de anchura igual a la de una celda, todo ello sobre un fondo blanco. Se trata sólo de una realización concreta de la invención, siendo también posibles otras variantes, con diferente número y disposición de celdas, así como ancho de borde mayor o menor. Lo mismo sucede a nivel de los colores. Puede ser cualquier combinación, pero puede se adecuado elegir tres colores que estén lo más separados posible en el cubo RGB, como es, por ejemplo, la combinación citada (cían, magenta y amarillo) o la combinación rojo, verde y azul. También puede variar el color del marco, que puede ser cualquier color oscuro pero con el color negro se consigue maximizarel contraste con el fondo blanco, lo que facilita la detección del marcador. El fondo puede ser de un color mucho más claro que el del rectángulo marco, para nuevamente maximizar el contraste con el marco.
Tanto la Figura 1 como el resto de las figuras tienen como propósito la ilustración de diferentes ejemplos de códigos visuales y de procedimientos de codificación y decodificación de estos códigos, y en ningún caso deben entenderse como límites del alcance de aplicación de los mismos. Así, por ejemplo, la Figura 2 muestra un código equivalente, pero con un borde más pequeño (de ancho igual a la mitad del ancho de una celda), mientras que la Figura 5 muestra un código visual con una matriz de 5x5 celdas para aumentar la capacidad de codificación, si bien a costa de una posible pérdida de alcance de visualización. Igualmente, los colores del código visual no están limitados a los expuestos blanco (B), negro (N), cían (C), magenta (M) y amarillo (A). En particular, otras ternas cromáticas bien diferenciadas podrían sustituir a los colores C, M y A (por ejemplo, por los colores rojo, verde y azul) en la medida en que el test de pertenencia a cada uno de dichos colores pueda ser determinado con el procedimiento libre de umbrales y celdas de calibración que se describirá más adelante en el apartado correspondiente. Así pues, de aquí en adelante se utiliza un ejemplo de código visual de 4x4 celdas y colores B, N, C, M y A de la Figura 1, sin que ello suponga ninguna pérdida de generalidad en la descripción, ni de limitación en las reivindicaciones de la invención.
Este código visual se halla estructurado por bloques o grupos de cuatro y/o tres celdas según se muestra en la Figura 3. Sólo un bloque 301, situado en la esquina superior izquierda de la matriz, está formado por una cuaterna de celdas c1 ,c2,c3,c4, es decir, un grupo de cuatro celdas, mientras que el resto de celdas están agrupadas en cuatro grupos 302,303,304,305, de tres celdas cada una, correspondientes a las ternas (ta1,ta2,ta3), (tb1 ,tb2,tb3), (tc1,tc2,tc3) y (td1,td2,td3), respectivamente. Tanto las ternas como la cuaterna tienen una serie de restricciones en los colores a ocupar por cada celda. En particular, una terna puede tener una y solo una celda de color distinto de C, M o A (es decir, tiene siempre una celda B o una celda N), mientras que las otras dos celdas deben forzosamente ser de dos colores diferentes escogidos del conjunto {C,M,A}. En cuanto a la cuaterna, la reglas son ligeramente diferentes: dos de las tres celdas {c1 ,c2,c3} (las que se encuentran en contacto con el marco) deben ser de color B y/o N, mientras que las dos restantes, es decir, c4 y la única celda del conjunto {c1 ,c2,c3} que no sea de color B ni N, son de nuevo forzosamente de dos colores diferentes, escogidos del conjunto {C,M,A}. Como puede observarse, el código de ejemplo mostrado en la Figura 1 cumple perfectamente con las reglas de construcción especificadas.
Teniendo en cuenta las restricciones anteriores, y por construcción, dada una terna cualquiera, una y solo una de sus celdas puede tener un color N o un color B. Dicho color define un primer bit (al que llamaremos "bit monocromático", o bm) de dicha terna. Puede seguirse el convenio de tomar dicho bit como 0 para el color N, y como 1 para el color B, aunque podría ser al revés. Dicha celda B o N, por tanto, está necesariamente en una y sólo una de las tres posiciones de la terna, lo que dará lugar a un segundo ítem de información, que en este caso puede tomar tres valores diferentes, y al que se le puede denominar "trit monocromático", o tm, de la terna. En el presente ejemplo, se asocia un trit igual a 0 si el color B/N está en la primera celda de la terna, 1 si se halla en la segunda, o 2 si se encuentra en la tercera, aunque esta asociación podría ser diferente. Esto hace un total de 2x3=6 posibilidades diferentes para cada terna, a saber (bm,tm) = {(0,0), (1,0), (0,1), (1,1), (0,2), (1 ,2)}. Dado que en el presente ejemplo hay un total de cuatro ternas, es decir, ta, tb, te y td, esto hace un total de 6M=1296 posibilidades diferentes que, lo que es más importante, pueden ser decodificadas incluso en condiciones de pérdida absoluta de la información de color, simplemente exigiendo, eso sí, que la celda B o N pueda ser correctamente localizada en cada terna. Pero, por el procedimiento de construcción general descrito para el código, esto siempre es posible, ya que las otras dos celdas tienen necesariamente un color C, M o A, y dichos colores siempre muestran una diferencia de valor de gris medio mayor que la que muestra el elemento B o N con su correspondiente color B o N calibrado, obtenidos estos últimos directamente del exterior y el interior del marco negro sobre fondo blanco de la imagen de entrada. Las 1296 posibilidades descritas son las que forman el correspondiente Code B de cada código visual.
A continuación, se describe cómo es posible utilizar el color de las dos celdas restantes de cada terna para añadir más información. De nuevo, por la regla de construcción señalada anteriormente, estas dos celdas restantes tienen que ser de dos colores diferentes escogidos del conjunto {C,M,A}. El color descartado es utilizado para codificar un nuevo trit de información, que en este caso puede denominarse "trit cromático", o te, de la terna. El convenio elegido es tc=0, si se descarta el color C, tc=1, si se descarta el color M, o tc=2, si se descarta el A, aunque esta asignación puede ser diferente.
Por último, el orden en el que aparecen los dos colores restantes en la terna marcan un último bit de información, que puede referenciarse como "bit cromático" de la terna, o be. Así, si dicho par de colores aparecen, en orden de lectura por posiciones de la terna, en un orden consistente con el orden predefinido por convenio como C<M<A (aunque el orden puede ser otro), entonces puede establecerse que bc=0. En caso contrario, se establece que bc=1. De nuevo, se obtienen 2x3=6 posibilidades diferentes para unos valores concretos (be, te) que, aprovechando la combinatoria inducida por la existencia de las cuatro ternas ta, tb, te y td, llevan a otras 6M=1296 posibilidades adicionales, que además son completamente independientes de las combinaciones monocromáticas (bm,tm) anteriores.
La combinación de la información monocromática y la cromática da una combinatoria de 6L4*6l4 = 1296*1296 = 6L8 = 1 ,679,616 combinaciones distintas, que conforman otros tantos Code A diferentes. En este caso, sin embargo, sí que se depende de la correcta identificación cromática de los colores C, M y A, por lo que la determinación (es decir, la decodificación) de la combinación concreta es menos robusta a posibles degradaciones cromáticas de la imagen de entrada, de forma que estas 1296 posibilidades adicionales no son usadas para la determinación del Code B, sino solo del Code A.
A continuación, se realiza la descripción del procedimiento de codificación que se sigue para la cuaterna de la esquina superior izquierda c1,c2,c3,c4. En este caso, tal y como se ha comentado anteriormente, dos y solo dos de los colores de las celdas c1,c2,c3 de la cuaterna que lindan con el marco son de color B y/o N. Esta configuración o restricción lleva a la existencia de un primer trit monocromático adicional para esta cuaterna, al que se referencia como tmc, con un valor de 0, 1 o 2 si, respectivamente, la celda de color diferente a B o N es la c1, la c2 o la c3 (aunque puede establecerse cualquier otro orden). Además, las cuatro combinaciones NN, NB, BN y BB para las otras dos celdas sirven para codificar dos bits monocromáticos adicionales para la cuaterna, que pueden referenciarse como bmcO y bmc1, con valores respectivos (bmc1, bmcO) = {(0,0), (0,1), (1 ,0) y (1,1)} para dichas combinaciones (estas combinaciones pueden tener otras asignaciones a las citadas en el presente ejemplo). En este caso, pues, acumulando la información de tmc, bmc1 y bmcO se dispone de un total de 3*2*2 = 12 posibilidades, que de nuevo pueden ser determinadas con robustez a degradaciones cromáticas extremas, de una forma análoga a lo que ocurre con los valores bm y tm de cada terna de celdas. Estos 12 valores pueden usarse para aumentar el número de posibles Code B diferentes, si bien, en lugar de ello, se propone usarlos como un checksum de los 1296 posibles valores codificados por las ternas, como procedimiento de detección de posibles errores. Más adelante se describirá el procedimiento de cómputo exacto del checksum propuesto.
La información que puede codificarse usando las dos celdas restantes de la cuaterna, es decir, aquellas que toman dos valores diferentes a B y/o N, se describe a continuación. Puesto que estas dos celdas deben tomar de nuevo dos colores diferentes escogidos del conjunto {C,M,A}, de una forma absolutamente análoga a lo que ocurre en cada terna, estas dos celdas definen un trit cromático adicional, que puede referenciarse como tcc, con tcc=0 si se descarta el color C, tcc=1 si se descarta el M, o tcc=2 si se descarta el A (aunque esta asignación, en algunos ejemplos, puede ser diferente). Finalmente, y de nuevo de forma análoga, un bit cromático adicional, que puede referenciarse como bcc, tiene valor bcc=0 si dicho par de colores aparecen, en orden de lectura por posiciones de la cuaterna, en un orden consistente con el orden predefinido por convenio como C<M<A, o bcc=1 si ocurre al contrario. Una vez más, se tienen 2*3 = 6 posibilidades diferentes para cada par de valores concretos 15 (bcc, tcc), que es utilizado de nuevo a modo de checksum para controlar posibles errores de decodificación de, en este caso, el Code A, ya que la decodificación de estos ítems de información depende de la correcta identificación de los colores C, M y A. Por lo tanto, su determinación no es tan robusta como los ítems de información monocromática descritos anteriormente para las diferentes combinaciones correspondientes a los Code B.
En consecuencia, a partir de todo lo descrito se desprende que solo identificando correctamente las posiciones de los valores B y N en las cuatro ternas 302,303,304,305 (ver Figura 3), así como en las posiciones c1 , c2 y c3 de la cuaterna 301 , es posible codificar hasta 1296 posibilidades diferentes, controladas por un checksum con 12 valores distintos. Estas posibilidades forman el llamado Code B, robusto a degradaciones cromáticas. Si, además, se pueden determinar correctamente los colores C, M y A restantes, entonces se dispone de, adicionalmente, otras 1296 posibilidades independientes de las anteriores, y controladas en este caso por un checksum de solo seis valores diferentes. Junto con la información completamente independiente del Code B, puede verse que esta situación lleva al total de 1296*1296 = 1 ,679,616 posibilidades diferentes mencionadas anteriormente, con un checksum correspondiente de 6*12 = 72 valores posibles. Cada una de estas posibilidades son las correspondientes a un Code A válido diferente, que, eso sí, no es robusto a degradaciones cromáticas tales que no permitan la correcta identificación de los colores C, M Y A.
A continuación, se describen los pesos exactos asignados a cada uno de los bits y trits definidos sobre las ternas para asignar un número concreto entre 0 y 1 ,679,615 al Code A, así como un número concreto entre 0 y 1295 al Code B, correspondientes ambos a un código visual concreto que sigue las reglas de construcción establecidas. Referenciando bmj / tmj / bcj / tcj, con i = a, b, c o d para las ternas ta , tb, te y td, respectivamente, el número de Code B, N_B correspondiente a un código visual dado responde a la fórmula:
N_B = bm_a+2*bm_b+4*bm_c+8*bm_d + 16*(tm_a+3*tm_b+9*tm_c+27*tm_d) (eq.1)
De forma análoga es posible definir el número de Code A, N_A, de la siguiente manera:
N_A = 6L4*N_H + N_B = 1296*N_H + N_B (eq.2) con:
N_H = bc_a+2*bc_b+4*bc_c+8*bc_d + 16*(tc_a+3*tc_b+9*tc_c+27*tc_d) (eq.3)
Con estas definiciones se consigue que codes consecutivos vayan variando continuamente N_B, dando una vuelta completa a sus posibles 1296 valores diferentes antes de volver a repetirse. Esto puede tener ciertas ventajas en entornos industriales, donde interesa que la secuencia de Codes B correspondientes a códigos visuales generados secuencialmente vuelvan a repetirse lo más espaciadamente posible, de cara a lograr la máxima capacidad de desambiguación posible entre etiquetas para las que sólo N_B (pero no N_A) ha podido determinarse con fiabilidad.
Por último, los correspondientes checksums (códigos de redundancia) contenidos en la cuaterna pueden quedar definidos como sigue:
C_B = 11 - N_B% 12 (eq.4) y:
C_A = 5 - N_H%6 (eq.5) con:
C_B = 4*tmc + 2*bmc1+ bmcO (eq.6) y:
C_A = 2*tcc + bcc (eq.7)
Para terminar la descripción del procedimiento de codificación, a continuación se plantea un ejemplo concreto que ayudará a la comprensión de todo el procedimiento propuesto.
Si se toma, por ejemplo, el valor N_A = 1,234,567. De (eq.2), se deduce que N_B = N_A % 6M = N_A % 1296 = 775, mientras que N_H = N_A / 6M = N_A / 1296 = 952 (usando en todo momento la división entera). Según (eq.1), entonces, los bits monocromáticos de las cuatro ternas, (bm_a,bm_b,bm_c,bm_d), deben codificar el número N_B % 16 = 775 % 16 = 7. Dado que bm_a es el bit de menos peso, y bm_d el de más, se deduce que (bm_a,bm_b,bm_c,bm_d) = (1,1, 1,0). Respecto a los trits monocromáticos
(tm_a,tm_b,tm_c,tm_d), y de nuevo según (eq.2), deben codificar el número N_B / 16 = 775 / 16 = 48. Pero el número 48 expresado en base 3 es exactamente (1210)3, ya que 48 = 1*27+2*9+1*3+0*1, y por ello, siguiendo el convenio de que el trit tm_a es el de menor peso, y tm_d el de mayor, se concluye que:
(tm_a,tm_b,tm_c,tm_d) = (0,1, 2, 1). Terminado el procedimiento con los bits y trits monocromáticos, se continúa ahora con los cromáticos. El procedimiento es completamente análogo al anterior usado para N_B, solo que con el valor N_H. Según (eq.3), entonces, se tiene que los bits cromáticos de las cuatro ternas, (bm_a,bm_b,bm_c,bm_d), deben codificar el número N_H % 16 = 952 % 16 = 8. Dado que bcja es el bit de menos peso, y bc_d el de más, se deduce que (bc_a,bc_b,bc_c,bc_d) = (0,0, 0,1). Respecto a los trits cromáticos (tc_a,tc_b,tc_c,tc_d), y otra vez según (eq.3), deben codificar el número N_H / 16 = 952 / 16 = 59. El número 59 expresado en base 3 es (2102)3, ya que 59 = 102*27+0*9+1*3+2*1, y por ello, siguiendo el convenio de que el trit teja es el de menor peso, y tejd el de mayor, se concluye que (tc_a,tc_b,tc_c,tc_d) = (2, 1,0,2).
Se calculan finalmente los bits y los trits monocromáticos y cromáticos correspondientes al checksum. Por (eq.4) se deduce que C_B = 11 - N_B% 12 = 11 - 15775%12 = 4, de donde, por (eq.6), (tmc,bmc1,bmc0) = (1,0,0). Análogamente, de (eq.5) se tiene que C_A = 5 - N_H% 6 = 5 - 952%6 = 1, de donde, por (eq.7), (tcc,bcc) = (0, 1).
En resumen, se ha deducido que, para el Code A 1,234,567, el correspondiente Code B es 775, y los correspondientes bits y trits monocromáticos y cromáticos son:
(bm_a, bm_b, bm_c, bm_d) = (1, 1, 1,0)
(tm_a,tm_b,tm_c,tm_d) = (0,1, 2,1)
(bc_a,bc_b,bc_c,bc_d) = (0,0, 0,1)
(tc_a, tc_b, tc_c, tc_d) = (2, 1,0, 2)
(tmc,bmc1,bmc0) = (1,0,0)
(tcc,bcc) = (0,1)
Pasando estos bits y trits a colores, según los esquemas definidos previamente, se puede comprobar que el código de color resultante es exactamente el definido en la Figura 1. Así, se puede comprobar en dicha figura (y recordando la distribución de tupias mostrada en la Figura 3) que los colores B/N de las ternas (ta,tb,tc,td) son de colores (B,B,B,N), como corresponde a (bm_a,bm_b,bm_c,bm_d) = (1,1, 1,0). Igualmente se puede comprobar que las posiciones de dichos colores B y N están en las celdas (ta1,tb2,tc3,td2), que corresponde a (tm_a,tm_b,tm_c,tm_d) = (0,1, 2, 1). Las parejas de colores escogidas del conjunto {C,M,A} en las ternas (ta,tb,tc,td) son, en orden de lectoescritura, (CM,CA,MA,MC). Dado que (C<M, C<A, M<A, M>C), eso se corresponde exactamente con (bc_a,bc_b,bc_c,bc_d) = (0,0, 0,1). Además, los colores del conjunto {C,M,A} faltantes en las ternas (ta,tb,tc,td) son, respectivamente, (A,M,C,A), como corresponde a los valores (tc_a,tc_b,tc_c,tc_d) = (2, 1,0, 2). En cuanto a la cuaterna de la esquina superior izquierda, las dos celdas de colores B y/o N de la misma son ambas de color N, que están en las posiciones c1 y c3, de modo que tmc=1 (por quedar libre c2, del conjunto {c1,c2,c3}), y (bmc1,bmc0) = (0,0), por tratarse de una pareja de celdas ambas de color N. Finalmente, los colores de las dos celdas restantes, c2 y c4, son respectivamente A y M. El color faltante en dicha pareja es C, como corresponde al trit tcc=0, y ocurre que A>M, como corresponde a bcc=1.
Una ventaja del esquema de codificación descrito es que es completamente invariante a rotaciones, por construcción. Ello significa que aunque el código aparezca rotado en la imagen capturada, en cualquiera de los cuatro posibles ángulos de rotación de un cuadrado (0, 90, 180 o 270 grados), el procedimiento de decodificación puede determinar sin problema correctamente cuál de las esquinas es la correspondiente a la superior izquierda, es decir, a la cuaterna de celdas (c1 ,c2,c3,c4). Y ello es debido a que de las cuatro ternas de celdas correspondientes a las cuatro esquinas, sólo la terna (c1 ,c2,c3) (ver Figura 3) contiene forzosamente dos colores B y/o N, frente a las otras tres esquinas, en la que un y solo un color de las celdas de la terna correspondiente puede tener un color B o N. Esta propiedad es importante para poder decodificar los códigos visuales en cualquier posición relativa de éstos respecto a la cámara, independientemente de la posición de giro concreto respecto a la misma con el que se estén visualizando en cada momento.
En el ejemplo descrito se ha elegido un código de redundancia cíclica (CRC) concreto, de tipo checksum modular simple, para realizar un control relativamente sencillo de errores. No obstante, en algunos ejemplos podrían incluirse otro tipo de soluciones alternativas igualmente capaces de detectar (por ejemplo, con dígitos de paridad, funciones de hash, etc.) o incluso corregir (Reed Solomon codes, Turbo codes, etc.) los posibles errores en el proceso de decodificación, dedicando más bits/trits a dicho control de errores, a costa de disminuir la cantidad de códigos válidos. Igualmente, si se quisiera aumentar el número de combinaciones válidas, a costa de reducir la capacidad de detectar y/o corregir errores, podría también decidirse dedicar menos bits/trits al control de errores. Por ejemplo, si se dedicase íntegramente la cuaterna (c1 ,c2,c3,c4) de la Figura 3 también a contener datos, en lugar de como checksum, el número de Codes A y Codes B válidos pasarían a ser, respectivamente, 2*6**10 = 120,932,352 y 2*6**5 = 15,552. Sin embargo, en ese caso no se tendría la protección ofrecida por el checksum frente a posibles errores en el proceso de decodificación.
Una vez impresa una etiqueta con un código determinado sobre papel, adhesivo, plástico, tejido, u otro tipo de soporte que pueda ser adherido por algún medio a cualquier tipo de activo (productos, materiales, personas, etc.) sobre el que interese realizar un seguimiento o trazabilidad, es necesario describir el procedimiento para localizar y decodificar correctamente el código a partir de una imagen en la que el mismo aparezca visible. Un posible escenario de aplicación sería el mostrado en la Figura 7, que se describirá en detalle más adelante, donde una serie de una o más cámaras 701, conectadas a una intranet 705, envían las imágenes captadas en una determinada zona de una planta a un sistema informático central 706 o servidor, donde son procesadas. Circulando por la planta podría haber, por ejemplo, carretillas móviles 702 portando algún tipo de producto 703 sobre el cual se ha adherido una etiqueta con uno de los códigos 704. Es posible que en una misma imagen aparezcan varios códigos, así como que, simultáneamente, varias cámaras capturen un mismo código o conjunto de códigos en cada instante determinado. Un programa informático de procesamiento de imágenes instalado en el servidor debe procesar cada imagen de entrada para detectar y decodificar correctamente todos y cada uno de los códigos visibles en cada imagen procesada. A continuación, se describen las etapas involucradas en dicho procesamiento, cuyo esquema global se muestra en la Figura 6.
El algoritmo de procesamiento comienza con la localización 601 exacta en la escena (imagen capturada) de cada código candidato. Para ello, se procede primero con un algoritmo de umbralizado dinámico de la imagen, que tenga en cuenta las posibles diferentes condiciones de iluminación en diferentes áreas de la imagen de entrada. Se utiliza en el ejemplo un umbral adaptativo, que calcula el valor de un umbral diferente para cada posición de la imagen, dependiendo de la distribución de valores de gris de una pequeña región de imagen alrededor de cada píxel, tal y como se describe, por ejemplo, en [“Local Ada ptive Thresholding." Li S.Z., Jain A. (eds) Encyclopedia of Biometrics. Springer" (2009)]. A continuación, se procede con un algoritmo de extracción de contornos cerrados sobre la imagen binarizada resultante, que son posteriormente reducidos mediante una aproximación poligonal (por ejemplo, siguiendo el procedimiento descrito en [“Algorithms forthe reduction ofthe number of points required to represent a digitized Une orits caricature", David Douglas & Thomas Peucker, The Canadian Cartographer 10(2), 112-122, (1973)]). Sólo aquellos contornos que pasen un test de ser proyectivamente equivalentes a un cuadrado pasan a la siguiente etapa de procesamiento. Es importante destacar que la corrección de una posible distorsión radial introducida por la cámara no se considera en principio necesaria, ya que los códigos están explícitamente diseñados para ser pequeños y ser visualizados a larga distancia. No obstante, para su visualización cercana (por ejemplo, con un teléfono inteligente o smartphone situado cerca del código), podría tener que realizarse en algún caso una pre-corrección de dicha distorsión, especialmente para objetivos de tipo gran angular. En una segunda etapa 602 de procesamiento, y tras un opcional alineamiento sub-píxel de cada contorno o marco extraído, se usan sus cuatro esquinas para realizar una rectificación homográfica de la imagen original a un marco canónico cuadrado de tamaño suficiente, por ejemplo (de nuevo sin pérdida de generalidad) de 100x100 píxeles. A continuación, esta imagen rectificada es tratada con varios algoritmos con la intención de obtener una matriz de 4x4 celdas con un simple vector de color (R,G,B) en cada celda, lo más fiel posible a los colores originales. Para ello, se realiza (opcionalmente) un balance de blancos usando los propios colores blanco y negro de los bordes (cuyas posiciones en la imagen rectificada son ya plenamente conocidas) como elementos de calibración. A continuación, y mediante un filtro de mediana para eliminar posible ruido del sensor de la cámara, se obtiene un solo valor de vector RGB por celda. Dicho filtro tiene una anchura suficiente como para cubrir de forma consistente el centro de cada celda en el área que le corresponde de la imagen rectificada, sin invadir el resto de las celdas contiguas. El resultado final de esta etapa es un tensor de (4x4x3) valores, con un vector (R,G,B) con valores entre [0,0,0] y [255,255,255] para cada celda.
La tercera y última etapa 603 de procesamiento comienza con la determinación de la orientación correcta de la matriz de 4x4 colores, que resulta sencilla dada la restricción ya mencionada anteriormente de que sólo las tres celdas de la cuaterna superior izquierda pegadas al borde (c1, c2 y c3 en Figura 3) pueden contener exactamente dos colores B y/o N. Pueden eliminarse, pues, las otras tres de las cuatro posibles orientaciones. Una vez que la matriz de colores está correctamente orientada, se procede a decodificar terna a terna, comprobando para cada una que se cumplen todas las restricciones impuestas por el diseño del código: esto es, que cada terna (ta1,ta2,ta3), (tb1 ,tb2,tb3), (tc1 ,tc2,tc3) y (td1,td2,td3) (ver Figura 3) contiene exactamente sólo uno de los colores B ó N, y dos colores diferentes del conjunto {C,M,A} en las otras dos celdas. De no ser así en alguna de las ternas, se considera un error de consistencia, que puede ser debido a la restricción monocromática (una celda B ó N en cada terna), o a la restricción cromática (dos colores diferentes del conjunto {C,M,A}). De producirse el primero, se descarta automáticamente el contorno, sin devolver ninguno de los valores Code A o Code B. De producirse el segundo, se descarta producir un Code A, pero se continúa intentando producir un Code B. El siguiente paso, de no haber sido ya descartado el contorno o marco, es computar los Codes A y B (o sólo el B, en su caso), usando las ecuaciones (eq.1), (eq.2) y (eq.3), una vez determinados los correspondientes bits y trits por terna, según el esquema de codificación descrito anteriormente. Por lo tanto, ya solo queda generar los valores de checksum para los Codes A y B, contenido en los colores de las celdas (c1 ,c2,c3,c4) de la Figura 3 según el esquema también descrito, y comprobar su corrección. De nuevo, sin embargo, podría ocurrir que hubiese un error de consistencia en la cuaterna (c1 ,c2,c3,c4) (es decir, que no hubiese exactamente dos celdas en ella de colores B y/o N, y las otras dos de dos colores diferentes extraídos del conjunto {C,M,A}). En ese caso, de producirse el primer error se descartaría devolver ninguno de los dos Codes A o B, mientras que de producirse solo el segundo, se descartaría sólo el Code A, pero se continuaría el procedimiento para el Code B.
En otro caso, los correspondientes valores de los checksums computados, C_A y C_B se determinarán a partir de las ecuaciones (eq.6) y (eq.7), y se comprobará su corrección para los respectivos Codes A y B chequeando si se dan las igualdades (eq.5) y (eq.4), respectivamente.
De haberse comprobado la corrección del Code A y su correspondiente checksum, el procedimiento de decodificación devuelve este Code A como detectado para el contorno actual. Si, por el contrario, el checksum de A es incorrecto, o fallase alguno de los tests de consistencia cromática para cualquiera de las ternas o la cuaterna de celdas, entonces se devuelve sólo el Code B como detectado, suponiendo, claro está, que se superaron todos los tests de consistencia monocromática para las ternas y la cuaterna de celdas, y que el correspondiente checksum para el mismo es correcto. Finalmente, y solo para el caso en que la lectura de ambos codes fallase, se podría devolver un simple valor de Code C, a modo de hash, con un rango bastante más reducido que los Codes A y B, que ya no dispone de CRC ninguno para controlar posibles errores, y que es utilizado como último recurso en condiciones de iluminación extremas, trabajando únicamente sobre una versión binaria (0/1) de la imagen de entrada.
Más adelante se describe el cómputo de este valor de hash de último recurso, cuyo uso queda restringido a posibles tareas de emparejado dentro de un pequeño subconjunto de códigos previamente conocidos.
En cualquier caso, todo el procesamiento descrito para las etapas segunda 602 y tercera 603 se repite mientras quede algún contorno cuadrado candidato detectado por la primera etapa 601.
Pueden plantearse escenarios de uso en los que se sabe con anterioridad que el código visual a reconocer no puede ser cualquiera, sino que necesariamente se halla en un subconjunto predeterminado más limitado (y previamente conocido) de códigos. Por ejemplo, podría conocerse, por las particularidades del proceso de producción, que en una planta podrían circular en un periodo determinado de tiempo sólo un conjunto reducido de, por ejemplo, 100 códigos diferentes. Si dichos códigos son previamente conocidos, el problema de su decodificación no parte, como el procedimiento anteriormente descrito, del absoluto desconocimiento, sino que se tiene una cierta información a priori que podría ser explotada para detectar dichos códigos incluso en condiciones de iluminación y/o toma de imagen extremadamente desafiantes. Es en este escenario donde puede tener utilidad la existencia del Code C de último recurso. Este code se computará solamente en caso de haber fallado previamente la detección de los Codes A y B. Se basa solamente en la localización de celdas N en la matriz de 4x4, y se determina de la manera descrita a continuación. Numerando las celdas de dicha matriz en orden de lectoescritura, con un índice i=0 para la celda de arriba a la izquierda, y de i=15 para la de abajo a la derecha, se asigna a cada una de las 4x4=16 celdas el correspondiente peso 2Ai. El Code C resultante será la suma de los pesos correspondientes a todas las celdas para las que se determinó un color N.
Naturalmente, en esta situación en la que solamente se han podido localizar las celdas de color N, pero no había ni siquiera una consistencia monocromática completa (esto es, se desconocen incluso las posibles ubicaciones de las celdas blancas), no es posible tener seguridad de haber corregido bien la posible rotación de la plantilla, llevando la cuaterna de control a la posición correcta, en la esquina superior izquierda (ver Figura 3). Es por ello que, para hacer el Code C invariante a la rotación, se calcula en realidad dicho valor para las cuatro posibles rotaciones de la plantilla, realizando las cuatro interpretaciones binarias correspondientes, y seleccionando la mayor de esas cuatro interpretaciones como Code C definitivo.
De nuevo, a continuación se muestra el cómputo de este Code C usando el código visual de ejemplo mostrado en la Figura 4. En esta figura, cuando está correctamente orientada, las posiciones de las celdas de color N en la plantilla son, usando el orden de lectoescritura, las correspondientes a las celdas i=0 (fila 1 , columna 1), i=5 (fila 2, columna 1) e i=14 (fila 4, columna 3). El valor correspondiente a la suma de los pesos de las potencias de dos correspondientes será, pues, 2L0 + 2L5 + 2L14 = 16417. No obstante, es necesario repetir el procedimiento para las otras tres posibles orientaciones, dado que a priori no se conoce la rotación exacta con la que aparece la plantilla en la imagen de entrada. Se puede comprobar fácilmente que, para las rotaciones de 90, 180 y 270 grados de la matriz de la Figura 4, los correspondientes valores de i son {i=7,i=12,i=13} (que produce un valor 2L7 + 2L12 + 2L13 = 12416), en el primer caso, {i=1,i=11 ,i=15} (que produce un valor 2L1 + 2L11 + 2L15 = 34818), en el segundo caso, y {i=2,i=3,i=8} (que produce un valor 2L2 + 2L3 + 2L8 = 268), en el tercer 20 caso. El máximo de los cuatro valores {16417, 12416, 34818, 268} es 34818, de modo que, finalmente, éste último es el valor del Code C devuelto como valor de hash de último recurso, a comparar con los hash para cada uno de los posibles códigos candidatos del conjunto de entrada.
Existen aún un par de consideraciones finales importantes respecto al cómputo del Code C. La primera es que la configuración de las posiciones de los unos podría salir inconsistente, bajo cualquiera de las cuatro rotaciones, con las reglas de construcción del código. Por ejemplo, un código que contuviese dos o más celdas de color N en dos o más esquinas sería claramente inconsistente con las reglas de construcción expuestas anteriormente. De la misma forma, es imposible también, por ejemplo, que tres de las cuatro celdas centrales de la matriz 4x4 sean de color N, por las restricciones sobre las tupias expuestas también anteriormente. De este modo, antes de devolver un Code C como posible hash, se realiza un último chequeo de consistencia del patrón de celdas consideradas como N para su cómputo según lo expuesto. De no superar tampoco este último chequeo, el código es completamente descartado (Figura 6, bloque 603).
La segunda consideración importante es que el valor del hash obtenido para el Code C es, obviamente, no único para cada Code A original. Es decir, provoca colisiones (varios Codes A, o incluso varios Codes B, diferentes pueden dar lugar a un mismo Code C válido). Este es el motivo por el que, aunque en última instancia pueda resultar útil para reducir la ambigüedad, no siempre vale para determinar unívocamente el código detectado de entre un posible conjunto de códigos candidatos de entrada, dependiendo, por supuesto, de los valores concretos de los mismos.
Como siguiente cuestión, a continuación se describe, dentro del procedimiento de decodificación, el proceso específico de determinación del color concreto de cada celda, dentro del subconjunto total de colores empleado {B,N,C,M,A}. Un par de características importantes de la invención son que a) dicha determinación del color se realiza mediante un proceso que se encuentra libre de todo umbral, y b) que no necesita habilitar celdas que se tengan que emplear como calibración. La primera característica consigue que el procedimiento sea más robusto, al no depender de umbrales ajustados manualmente (es, por el contrario, un procedimiento completamente auto-umbralizado). La segunda característica evita el coste que tendría en términos de pérdida de número de combinaciones posibles el tener que emplear parte de las celdas del código visual para dichas celdas de control (esquema que, por otro lado, siguen algunos de los códigos de color expuestos y descritos anteriormente, perdiéndolas así para codificar los datos). La eliminación de esta necesidad es particularmente importante para hacer los códigos lo más pequeños posible (en número de celdas), en el contexto de detección con robustez a largo alcance que se persigue en las aplicaciones industriales para las que los códigos pueden estar diseñados.
En primer lugar, se realiza la descripción para el procedimiento monocromático, destinado a localizar correctamente las posiciones de las celdas B y N tanto en las ternas como en la cuaterna de checksums. Para el caso concreto de una terna, por ejemplo, simplemente se toma aquella celda cuyo vector de color (R,G,B), en cualquier tipo de medida de distancia bien definida (por ejemplo, euclídea, o de Manhattan), esté más cercano a cualquiera de los dos vectores (R,G,B) de control extraídos a partir de los píxeles del borde interior (para el color N; borde interno a 101 en Figura 1) o exterior (para el color B; borde externo a 101 en Figura 1) de la propia imagen, en el entorno del polígono de cuatro lados inicialmente extraído, y que ejercen como únicos colores de calibración inicialmente disponibles. Es importante notar que, de esta forma, se evita tener que añadir celdas de control de color (esto es, de calibración) adicionales a la matriz del código visual, ya que los mismos bordes interno (N) y externo (B) utilizados para la propia detección del código (etapa 601 en el algoritmo de la Figura 6) pueden ejercer perfectamente dicho papel. El caso de la cuaterna, es absolutamente similar, solo que, dado que por construcción en ella debe haber dos celdas (y no solo una) de colores B y/o N, son las dos celdas con distancia menor a cualquiera de los dos colores base extraídos de los bordes las que se etiquetan con los colores B y/o N correspondientes. Obsérvese que, al estar basado en una comparación de distancias con dos colores observados a partir de la propia imagen, en lugar de en cualesquiera valores concretos de umbralizado predeterminados, el proceso es resistente a prácticamente cualquier tipo de variación de iluminación de la escena típicamente posible (excepto casos extremos de deslumbramiento u oscuridad prácticamente totales).
En cuanto a la pareja de colores diferentes escogidos del conjunto {C,M,A}, para las otras dos celdas de la correspondiente terna/cuaterna, se determina igualmente con un procedimiento de nuevo libre de umbrales y de todo tipo de información de calibración cromática exterior. Para ello, simplemente, a las dos celdas restantes tras la determinación de la posición y tipo (B/N) de la celda de control monocromática, se les calcula el mínimo de su valor R, G o B. Si dicho mínimo se encuentra en el canal R, el color asignado a la misma es el C. Análogamente, se asigna un color M o A si dicho mínimo se alcanza en los canales G o B, respectivamente. Obsérvese que, de nuevo, al utilizar un valor mínimo en una comparación (en lugar de la comparación con un umbral concreto predeterminado), el procedimiento es de nuevo resistente a variaciones de intensidad de la luz, que afectan en principio por igual a todos los canales. También, en caso de optar por el conjunto de colores {R,G,B} en lugar de {C,M,A} (una posible variante citada con anterioridad), el procedimiento puede ser fácilmente modificado para detectar el nuevo conjunto de colores, atendiendo en este caso no ya al mínimo de los tres canales (R,G,B) de la celda, sino, por supuesto, del máximo de los mismos.
No obstante, el procedimiento podría eventualmente fracasar en situaciones de luz que se alejase mucho de la luz blanca, lo cual no suele ser un problema en entornos industriales, salvo casos muy específicos, o bien en condiciones en las que la correcta sensorización del color fuese muy problemática, como puede ser el caso en situaciones cercanas al deslumbramiento, o alternativamente el oscurizado excesivo de la etiqueta que comprende el código, como puede producirse, por ejemplo, por fuertes contraluces en la escena. Es para estos casos para los que, probablemente, se detecten las inconsistencias cromáticas aludidas en el procedimiento de decodificación (etapa de procesamiento 603 en la Figura 6), como que dos de los colores de una tupia sean iguales, en lugar de siempre diferentes, o que, más adelante, falle el checksum del correspondiente Code A. Una vez más, es en estos casos en los que el Code B, no obstante, puede ser determinado al no depender en ningún caso de ningún color que no sea el B o el N puros.
Cabe también comentar que, una vez determinadas aquellas celdas cuya diferencia entre el canal menor de los tres (R,G,B) y los otros dos sea mayor, dicha celda puede tomarse como color canónico C, M o A para todo el código, y ejercer, además de como ítem de información, también como ítem de calibración, es decir, como referencia para las demás celdas. Ello equivale, en cierta forma, a localizar los píxeles "más cyan" (es decir, con mayor diferencia entre el R y el min(G,B)), "más magenta" (con mayor diferencia entre el G y el min(R,B)) y "más amarillo" (con mayor diferencia entre el B y el min(R,G)) de toda la matriz, y tomarlos como canónicos, es decir, como celdas de calibración, para comparar el resto de colores de las celdas con ellos, mediante una medida distancia convencional. De esta forma, y aún manteniendo el esquema global libre de umbrales y de la necesidad de celdas utilizadas sólo para calibrar, se pueden solventar aún algunos casos adicionales en los que ciertas áreas del código visual hayan podido sufrir degradaciones cromáticas superiores a otras.
En la Figura 7 se presenta un ejemplo de implementación de todo el esquema de generación, detección y decodificación de códigos propuesto, en concreto sobre la planta principal de una empresa dedicada a la producción y envasado de productos frescos de origen hortofrutícola. El escenario específico de aplicación es la correcta localización y seguimiento en el tiempo y en el espacio de palets cargados con productos, que son descargados en los muelles de la empresa, y monitorizados desde el mismo momento de su entrada en la planta de envasado. Para ello, las cajas con los productos son etiquetadas ya en el momento de su recolección en el campo, con códigos visuales como los descritos, en un lugar bien visible en las mismas.
Este ejemplo de implementación emplea las dos variantes concretas del código descrito en este documento: en primer lugar, la versión de colores {B,N,C,M,A} en una matriz de celdas de 4x4, con etiquetas impresas a color (ejemplo de la Figura 1); y en segundo lugar, una versión del código de matriz de celdas de 5x5 (mostrado en la Figura 5), sólo que, en este caso particular, se emplea en lugar de un código de cinco colores, una versión monocromática con sólo tres colores, {B,Gr,N}, siendo Gr un nivel de gris intermedio situado entre los valores B y N. En esta última implementación particular, pues, se descarta de partida el código de color (sustituyendo todos los valores C, M y A por Gr en los códigos visuales generados), con lo que el procedimiento descrito siempre fracasa, por construcción, en la determinación del Code A (cromático), si bien es perfectamente viable la decodificación del Code B (monocromático). Ocurre que, dada la mayor cantidad de ternas de esta variante (siete ternas ta, tb, te, td, te, tf, tg en la Figura 5), el Code B, siendo extremadamente robusto a las más variadas condiciones de luz, y funcionando incluso en toma de imágenes en blanco y negro, permite aún 6L7 = 279,936 posibilidades diferentes, controladas por su correspondiente checksum de la cuaterna de la esquina superior izquierda, que sigue tomando un valor en el rango [0..11]
El sistema de sensorización planteado para este ejemplo cuenta con un número variable de cámaras, interconectadas a la red principal de la empresa mediante tecnología Gigabit Ethernet. En esta implementación particular se usan cámaras con resoluciones de hasta 3840x2160 píxeles y 60 frames por segundo, y ópticas de zoom variable que permiten ángulos de visión de entre 37° y 109° en horizontal.
Desde su entrada en el almacén, las cajas 703 con los productos procedentes de los muelles de carga, ya debidamente etiquetadas 704 son transportadas por carretillas paletizadoras 702 por el interior de la planta de envasado. Las cámaras 701 , montadas en ciertos puntos clave de la planta, monitorizan de forma continua la evolución de las carretillas, enviando las imágenes capturadas de forma continua a un servidor central 706, a través de una Intranet dedicada 705, cuyo ancho de banda (1 Gbps) permite, en combinación con un adecuado factor de compresión de imagen, el envío simultáneo de varias secuencias de vídeo a decenas de trames por segundo desde múltiples cámaras. Las cámaras usadas en el presente ejemplo están dotadas de una CPU y memoria propias, para realizar la compresión del vídeo en tiempo real, empleando la tecnología Zipstream. Esta tecnología utiliza un codee H.262 con bit-rate variable, que permite una velocidad en fps y ancho de banda controlables desde el servidor central.
En este punto es importante destacar que la comunicación entre las cámaras y el servidor central puede realizarse de manera alámbrica (con cables) o inalámbricamente. En el caso de una comunicación cableada (alámbrica), la conexión puede realizarse mediante puertos serie, tales como USB, micro USB, mini USB, Firewire o Ethernet (tal como la Intranet descrita anteriormente). En el caso de comunicaciones inalámbricas, la conexión puede realizarse mediante módulos de comunicaciones inalámbricas de corto alcance (las cámaras y el servidor están lo suficientemente cerca), por ejemplo, Bluetooth, NFC, Wifi, IEEE 802.11 o Zigbee. Si las comunicaciones son de largo alcance (las cámaras y el servidor están alejados), la conexión puede realizarse mediante módulos de comunicaciones basados en tecnología GSM, GPRS, 3G, 4G, 5G o tecnología por satélite (por ejemplo, si la comunicación se realiza a través de una red global de comunicación, tal como Internet) o incluso a través de una red de comunicaciones para Internet de las cosas ( loT - Internet of Things). Para securizar la comunicación entre las cámaras y el servidor, esta comunicación puede asegurarse mediante, por ejemplo, nombre de usuario/contraseña, claves criptográficas y/o mediante un túnel SSL establecido en la comunicación.
Cada vez que una imagen nueva llega al servidor 706, éste la procesa mediante una implementación del algoritmo descrito en la Figura 6, localizando y decodificando, en su caso, todas las etiquetas visuales detectadas en la escena. La implementación del mismo se ha realizado en el lenguaje Python, en su versión 3.6, haciendo uso de las librerías OpenCV (versión 3.4) y Numpy (versión 1.14) para todas las funciones relativas al proceso de imagen: umbralizado, extracción y poligonización de contornos, alineamiento y rectificación homográfica, balance de blancos, filtros de supresión de ruido y el proceso de decodificación final del código de color. La interacción con el resto de las aplicaciones y bases de datos relevantes para el sistema de control de producción y trazabilidad de la empresa se hace a través de un API REST específicamente diseñado para ello, que se apoya en la librería Flask (versión 0.12). Dicho código Python es ejecutado, en esta implementación particular, en un servidor con una CPU ¡7 de 8 núcleos y 16 GB de RAM. El rendimiento obtenido depende de la resolución de las imágenes de entrada, siendo del orden de (tomando un ejemplo concreto) unos 20 milisegundos por trame para una resolución de entrada de 1920x1080, pudiéndose detectar varios códigos (por ejemplo, hasta 6) por imagen (sin que tampoco haya un límite estricto en este sentido). La distancia de visualización y correcta decodificación depende a su vez tanto de la distancia focal de la cámara (y por tanto, de su campo de visión) como de la resolución de imagen empleada, pero en este entorno concreto es posible afirmar que el límite observado de robustez en reconocimiento del Code A es de, aproximadamente, un mínimo de 3x3 píxeles por cada celda en la imagen de entrada. Ello se corresponde a, aproximadamente, tamaños de -18x18 píxeles para un código completo del tipo 4x4, incluyendo un ancho de borde igual al de una celda, como en la versión de ejemplo de la Figura 1, o con algunos píxeles menos para tamaños de marco inferiores, como los mostrados en el ejemplo de la Figura 2.
Jugando adecuadamente con ópticas de zoom variable, y dependiendo por supuesto del tamaño físico de impresión de la etiqueta, ello equivale a posibles distancias de decodificación de incluso decenas de metros. La tabla siguiente muestra algunos escenarios concretos de ejemplo:
Figure imgf000046_0001
Todas las anteriores posibilidades responden en realidad a la siguiente fórmula general:
PIX = TC*RH/(2000*D*tan(AVH/2)) (eq.8) donde:
PIX = Tamaño resultante del código visual en la imagen (en píxeles). TC = Tamaño del código visual impreso (en mm).
RH = Resolución horizontal de la imagen (en píxeles).
D = Distancia de la cámara a la etiqueta (en metros). AVH = Ángulo de visión horizontal de la cámara (en grados).
En teoría, y con restricción a las cámaras con las ópticas mencionadas anteriormente, esto permite igualmente detectar y decodificar códigos impresos a tamaño, por ejemplo, 200 mm de ancho a distancias superiores a los 60 metros (para el ángulo de visualización correspondiente al mayor zoom admitido por la óptica de la cámara, 37°, y su mayor resolución, de 3840x2160 píxeles). Por supuesto, montando ópticas de teleobjetivo con mayores focales (y por tanto menor ángulo de visión), estas distancias de decodificación pueden aumentarse aún más. En el escenario concreto del ejemplo descrito, sin embargo, en ningún caso es necesaria una configuración de tales características, optándose por tamaños más pequeños en la implementación final, con códigos visuales impresos a 80 mm de ancho y distancias de visualización típicamente inferiores a los 10 m. En todo momento el sistema muestra una buena tolerancia a diferentes fuentes de ruido que se traducen en diferentes causas de pérdida de nitidez en la imagen, como desenfoques puntuales, movimientos rápidos en la escena, ruido de “sal y pimienta” en la imagen sensorizada motivado por las bajas condiciones de iluminación, e incluso artefactos originados por la compresión de la imagen.
Es importante destacar que tanto el procedimiento de codificación como el procedimiento de decodificación descritos con anterioridad pueden implementarse, cada uno, con un sistema con una configuración totalmente informática, totalmente electrónica o mediante una combinación de ambos.
En el caso de que un sistema sea puramente informático (por ejemplo, un servidor informático), el sistema puede comprender una memoria y un procesador (por ejemplo, un microprocesador), en el que la memoria almacena instrucciones de programa informático ejecutables por el procesador, comprendiendo estas instrucciones funcionalidades para ejecutar un procedimiento para decodificar o un procedimiento para codificar un código visual tal como los descritos.
La memoria de este sistema informático puede estar comprendida en el procesador o puede ser externa. Si está comprendida en el propio procesador, puede tratarse, por ejemplo, de una memoria tipo EEPROM o similar. En el caso de que sea externa, puede ser, por ejemplo, unos medios de almacenamiento de datos tales como discos magnéticos (por ejemplo, discos duros), discos ópticos (por ejemplo, DVD o CD), tarjetas de memoria, memorias flash (por ejemplo, pendrives) o unidades de estado sólido (SSD basadas en RAM, basadas en flash, etc.). Estos medios de almacenamiento pueden formar parte del propio sistema informático y/o pueden estar dispuestos remotos al mismo, conectados de manera alámbrica (con cables) o inalámbricamente. En el caso de una comunicación cableada (alámbrica), la conexión puede realizarse mediante puertos serie, tales como USB, micro USB, mini USB, Firewire o Ethernet. En el caso de comunicaciones inalámbricas, la conexión puede realizarse mediante módulos de comunicaciones inalámbricas de corto alcance (el sistema y los medios de almacenamiento están lo suficientemente cerca), por ejemplo, Bluetooth, NFC, Wifi, IEEE 802.11 o Zigbee. Si las comunicaciones son de largo alcance (el sistema y los medios de almacenamiento están alejados), la conexión puede realizarse mediante módulos de comunicaciones basados en tecnología GSM, GPRS, 3G, 4G, 5G o tecnología por satélite (por ejemplo, si la comunicación se realiza a través de una red global de comunicación, tal como Internet) o incluso a través de una red de comunicaciones para Internet de las cosas (loT- Internet of Things). En este último caso de un sistema con los medios de almacenamiento dispuestos remotos, la comunicación establecida entre el sistema y los medios de almacenamiento puede asegurarse mediante, por ejemplo, nombre de usuario/contraseña, claves criptográficas y/o mediante un túnel SSL establecido en la comunicación entre el sistema y los medios de almacenamiento.
Por lo tanto, el conjunto de instrucciones de programa informático (un programa informático) ejecutables por el procesador puede estar almacenado en unos medios de almacenamiento físico, tales como los citados, pero también puede ser portado por una onda portadora (el medio portador puede ser cualquier entidad o dispositivo capaz de portar el programa), tal como eléctrica u óptica, que puede transmitirse vía cable eléctrico u óptico o mediante radio u otros medios. De este modo, cuando el programa informático está contenido en una señal que puede transmitirse directamente mediante un cable u otro dispositivo o medio, el medio portador puede estar constituido por dicho cable u otro dispositivo o medio.
Alternativamente, el medio portador puede ser un circuito integrado en el que está encapsulado ( embedded) el programa informático, estando adaptado dicho circuito integrado para realizar o para usarse en la realización de los procedimientos relevantes.
El programa informático puede estar en forma de código fuente, de código objeto o en un código intermedio entre código fuente y código objeto, tal como en forma parcialmente compilada, o en cualquier otra forma adecuada para usar en la implementación de los procedimientos descritos. Por otro lado, al menos uno de los sistemas (el que ejecuta el procedimiento de codificación y/o el que ejecuta el procedimiento de decodificación) puede tener una configuración puramente electrónica, por lo que podría estar formado por un dispositivo electrónico programable tal como un CPLD ( Complex Programmable Logic Devicé), un FPGA ( Field Programmable Gafe Array) o un ASIC ( Application-Specific Integrated Circuit).
Finalmente, al menos uno de los sistemas puede presentar también una configuración híbrida entre informática y electrónica. En este caso, el sistema debe comprender una memoria y un procesador para implementar informáticamente una parte de sus funcionalidades, así como determinados circuitos electrónicos para implementar el resto de las funcionalidades.
A pesar de que se han descrito aquí sólo algunas realizaciones y ejemplos particulares de la invención, el experto en la materia comprenderá que son posibles otras realizaciones alternativas y/o usos de la invención, así como modificaciones obvias y elementos equivalentes. Además, la presente invención abarca todas las posibles combinaciones de las realizaciones concretas que se han descrito. Los signos numéricos relativos a los dibujos y colocados entre paréntesis en una reivindicación son solamente para intentar aumentar la comprensión de la reivindicación, y no deben ser interpretados como limitantes del alcance de la protección de la reivindicación. El alcance de la presente invención no debe limitarse a realizaciones concretas, sino que debe ser determinado únicamente por una lectura apropiada de las reivindicaciones adjuntas.

Claims

REIVINDICACIONES
1. Código visual (101) que comprende una matriz bidimensional de celdas (103) y un marco (102) de un color oscuro que rodea la matriz de celdas, caracterizado por el hecho de que la matriz de celdas comprende al menos uno de:
• uno o más grupos de cuatro celdas (301;401) en los que: o las celdas están dispuestas en dos filas y dos columnas, o en la posición de lectura del código visual, dos de las celdas de cada grupo de cuatro celdas, de las tres (c1 ,c2,c3) que forman la primera fila y la primera columna, son cada una de un color claro y/o un color oscuro, y las dos restantes son de colores diferentes entre sí, de una pluralidad de colores que no incluye el color claro y el color oscuro;
• uno o más grupos de tres celdas (302,303,304,305;402,403,404,405) en los que: o cada grupo comprende tres celdas conectadas alineadas o en forma de L, o cada grupo de tres celdas tiene una única celda de un color claro o de un color oscuro y el resto de las celdas son de colores diferentes entre sí, de la pluralidad de colores; en el que los grupos de celdas codifican información y/o implementan un sistema de redundancia para la detección de errores en la decodificación del código visual.
2. Código visual (101) según la reivindicación 1, que comprende un fondo de un color claro externo al marco (102) de un color oscuro.
3. Código visual (101) según una cualquiera de las reivindicaciones 1 o 2, en el que el ancho del marco (102) de un color oscuro es igual al ancho de una celda (103).
4. Código visual (101) según una cualquiera de las reivindicaciones 1 o 2, en el que el ancho del marco (102) de color oscuro es la mitad del ancho de una celda (103).
5. Código visual (101) según una cualquiera de las reivindicaciones 1 a 4, que comprende, en la posición de lectura del código visual, un grupo (301 ;401) de cuatro celdas (c1 ,c2,c3,c4) dispuesto en la esquina superior izquierda de la matriz de celdas.
6. Código visual (101) según la reivindicación 5, que comprende un grupo (302,304,305) de tres celdas conectadas en forma de L en cada una de las esquinas restantes de la matriz de celdas. 7. Código visual (101) según una cualquiera de las reivindicaciones 1 a 6, en el que la pluralidad de colores comprende al menos tres de los siguientes colores:
• cían;
• magenta;
• amarillo;
• rojo;
• verde;
• azul.
8. Código visual (101) según una cualquiera de las reivindicaciones 1 a 7, en el que la pluralidad de colores se representa en una escala de grises.
9. Código visual (101) según una cualquiera de las reivindicaciones 1 a 8, en el que un color oscuro es el color negro.
10. Código visual (101) según una cualquiera de las reivindicaciones 1 a 9, en el que un color claro es el color blanco.
11. Código visual (101) según una cualquiera de las reivindicaciones 1 a 10, en el que la matriz de celdas (103) tiene el mismo número de filas que de columnas.
12. Código visual (101) según la reivindicación 1 a 11, en el que la información codificada por los grupos de celdas comprende al menos un primer valor numérico que se determina a partir de valores obtenidos de las celdas de un color claro o de un color oscuro y de las celdas de colores dentro de la pluralidad de colores, de los grupos (302,303,304,305) de tres celdas.
13. Código visual (101) según una cualquiera de las reivindicaciones 1 a 12, en el que la información codificada por los grupos de celdas comprende al menos un segundo valor numérico que se determina a partir de valores obtenidos de las celdas en base a su color en una escala de grises, de los grupos (302,303,304,305) de tres celdas.
14. Código visual (101) según una cualquiera de las reivindicaciones 1 a 13, en el que la información codificada por los grupos de celdas comprende al menos un tercer valor numérico que se determina a partir de valores obtenidos de todas las celdas de un color claro o de un color oscuro de la matriz de celdas. 15. Código visual (101) según una cualquiera de las reivindicaciones 1 a 14, en el que el sistema de redundancia para la detección de errores en la decodificación del código visual se implementa a partir de valores obtenidos de las celdas de un color claro o de un color oscuro y de las celdas de colores dentro de la pluralidad de colores, de los grupos (301;401) de cuatro celdas, para detectar errores en la decodificación del primer valor numérico.
16. Código visual (101) según una cualquiera de las reivindicaciones 1 a 14, en el que el sistema de redundancia para la detección de errores en la decodificación del código visual se implementa a partir de valores obtenidos de las celdas de un color claro o un color oscuro de los grupos (301;401) de cuatro celdas, para detectar errores en la decodificación del segundo valor numérico.
17. Procedimiento para generar un código visual (101) según una cualquiera de las reivindicaciones 1 a 16, que comprende:
• obtener el número de filas y columnas de la matriz de celdas (103);
• determinar la combinación de uno o más grupos (302,303,304,305;402,403,404,405) de tres celdas y/o uno o más grupos (301 ;401) de cuatro celdas adecuada para el número obtenido de filas y columnas de la matriz de celdas;
• obtener la información a codificar;
• codificar la información y/o implementar el sistema de redundancia para la detección de errores en la decodificación del código visual, en base a la siguiente configuración: o para cada grupo de tres celdas de la combinación determinada:
asignar un color claro o un color oscuro a una de las celdas del grupo de tres celdas, definiéndose un primer parámetro que toma un valor predeterminado que depende de si el color asignado a la celda es el color claro o el color oscuro, y definiéndose un segundo parámetro que toma un valor predeterminado que depende de la celda, del grupo de tres celdas, a la que se le asigna el color claro o el color oscuro;
asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de tres celdas, definiéndose un tercer parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un cuarto parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores; o para cada grupo de cuatro celdas de la combinación determinada:
asignar un color claro y/o un color oscuro a dos de las tres celdas que forman la primera fila y la primera columna del grupo de cuatro celdas, definiéndose un quinto parámetro que toma un valor predeterminado que depende de la celda que no tiene asignado un color claro o un color oscuro, y definiéndose un sexto parámetro que toma un valor predeterminado que depende de la combinación de color claro y/o color oscuro asignada a las dos celdas;
asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de cuatro celdas, definiéndose un séptimo parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un octavo parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores.
18. Procedimiento según la reivindicación 17, en el que el primer parámetro toma un valor 0 o 1 dependiendo de si el color asignado a la celda es el color claro o el color oscuro.
19. Procedimiento según una cualquiera de las reivindicaciones 17 o 18, en el que el segundo parámetro toma un valor 0, 1 o 2 dependiendo de si la celda a la que se le asigna el color claro o el color oscuro, en posición de lectura del código, es la primera celda, la segunda celda o la tercera celda del grupo de tres celdas.
20. Procedimiento según una cualquiera de las reivindicaciones 17 a 19, en el que el tercer parámetro toma un valor 0, 1 o 2 dependiendo del color no escogido de la pluralidad de colores.
21. Procedimiento según una cualquiera de las reivindicaciones 17 a 20, en el que el cuarto parámetro toma un valor 0 o 1 dependiendo de si el orden coincide o no con el orden pre establecido de los colores de la pluralidad de colores.
22. Procedimiento según una cualquiera de las reivindicaciones 17 a 21 , en el que el quinto parámetro toma un valor 0, 1 o 2 dependiendo de si la celda a la que no se le asigna el color claro o el color oscuro, en posición de lectura del código, es la primera celda, la segunda celda o la tercera celda de las tres celdas que forman la primera fila y la primera columna del grupo de cuatro celdas. 23. Procedimiento según una cualquiera de las reivindicaciones 17 a 22, en el que el sexto parámetro toma un valor {(0,0),(0,1),(1 ,0),(1 ,1)} dependiendo de la combinación de color claro y/o color oscuro asignada a las dos celdas.
24. Procedimiento según una cualquiera de las reivindicaciones 17 a 23, en el que el séptimo parámetro toma un valor 0, 1 o 2 dependiendo del color no escogido de la pluralidad de colores.
25. Procedimiento según una cualquiera de las reivindicaciones 17 a 24, en el que el octavo parámetro toma un valor 0 o 1 dependiendo de si el orden coincide o no con el orden preestablecido de los colores de la pluralidad de colores.
26. Procedimiento según una cualquiera de las reivindicaciones 17 a 25, en el que los grupos (302,303,304,305;402,403,404,405) de tres celdas codifican la información, mientras que los grupos (301;401) de cuatro celdas implementan el sistema de redundancia para la detección de errores en la decodificación del código visual.
27. Producto de programa informático que comprende instrucciones de programa para provocar que un sistema realice un procedimiento según una cualquiera de las reivindicaciones 17 a 26 para generar un código visual (101).
28. Producto de programa informático según la reivindicación 27, que está almacenado en unos medios de grabación.
29. Producto de programa informático según la reivindicación 27, que es portado por una señal portadora.
30. Sistema para generar un código visual (101) según una cualquiera de las reivindicaciones 1 a 16, que comprende:
• medios para obtener el número de filas y columnas de la matriz de celdas (103);
• medios para determinar la combinación de uno o más grupos
(302,303,304,305;402,403,404,405) de tres celdas y/o uno o más grupos (301 ;401) de cuatro celdas adecuada para el número obtenido de filas y columnas de la matriz de celdas;
• medios para obtener la información a codificar; • medios para codificar la información y/o implementar el sistema de redundancia para la detección de errores en la decodificación del código visual, en base a la siguiente configuración: o para cada grupo de tres celdas de la combinación determinada:
medios para asignar un color claro o un color oscuro a una de las celdas del grupo de tres celdas, definiéndose un primer parámetro que toma un valor predeterminado que depende de si el color asignado a la celda es el color claro o el color oscuro, y definiéndose un segundo parámetro que toma un valor predeterminado que depende de la celda, del grupo de tres celdas, a la que se le asigna el color claro o el color oscuro;
medios para asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de tres celdas, definiéndose un tercer parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un cuarto parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores; o para cada grupo de cuatro celdas de la combinación determinada:
medios para asignar un color claro y/o un color oscuro a dos de las tres celdas que forman la primera fila y la primera columna del grupo de cuatro celdas, definiéndose un quinto parámetro que toma un valor predeterminado que depende de la celda que no tiene asignado un color claro o un color oscuro, y definiéndose un sexto parámetro que toma un valor predeterminado que depende de la combinación de color claro y/o color oscuro asignada a las dos celdas;
medios para asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de cuatro celdas, definiéndose un séptimo parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un octavo parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden preestablecido de los colores de la pluralidad de colores.
31. Sistema para generar un código visual (101) según una cualquiera de las reivindicaciones
1 a 16, estando el sistema configurado para:
• obtener el número de filas y columnas de la matriz de celdas (103); • determinar la combinación de uno o más grupos (302,303,304,305;402,403,404,405) de tres celdas y/o uno o más grupos (301;401) de cuatro celdas adecuada para el número obtenido de filas y columnas de la matriz de celdas (103);
• obtener la información a codificar;
• codificar la información y/o implementar el sistema de redundancia para la detección de errores en la decodificación del código visual, en base a la siguiente configuración: o para cada grupo de tres celdas de la combinación determinada:
asignar un color claro o un color oscuro a una de las celdas del grupo de tres celdas, definiéndose un primer parámetro que toma un valor predeterminado que depende de si el color asignado a la celda es el color claro o el color oscuro, y definiéndose un segundo parámetro que toma un valor predeterminado que depende de la celda, del grupo de tres celdas, a la que se le asigna el color claro o el color oscuro;
asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de tres celdas, definiéndose un tercer parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un cuarto parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores; o para cada grupo de cuatro celdas de la combinación determinada:
asignar un color claro y/o un color oscuro a dos de las tres celdas que forman la primera fila y la primera columna del grupo de cuatro celdas, definiéndose un quinto parámetro que toma un valor predeterminado que depende de la celda que no tiene asignado un color claro o un color oscuro, y definiéndose un sexto parámetro que toma un valor predeterminado que depende de la combinación de color claro y/o color oscuro asignada a las dos celdas;
asignar dos colores de la pluralidad de colores, que no incluye el color claro y el color oscuro, a las dos celdas restantes del grupo de cuatro celdas, definiéndose un séptimo parámetro que toma un valor predeterminado que depende de al menos un color no escogido de la pluralidad de colores, y definiéndose un octavo parámetro que toma un valor predeterminado que depende del orden de los dos colores asignados a las celdas, en base a un orden pre-establecido de los colores de la pluralidad de colores.
32. Sistema para generar un código visual (101) según una cualquiera de las reivindicaciones 1 a 16, comprendiendo el sistema una memoria y un procesador, en el que la memoria almacena instrucciones de programa informático ejecutables por el procesador, comprendiendo estas instrucciones funcionalidades para ejecutar un procedimiento según una cualquiera de las reivindicaciones 17 a 26 para generar un código visual.
33. Procedimiento para decodificar un código visual (101) según una cualquiera de las reivindicaciones 1 a 16, codificado de acuerdo con un procedimiento para generar un código visual según una cualquiera de las reivindicaciones 17 a 26, comprendiendo el procedimiento de decodificación:
Obtener una imagen que comprende al menos un código visual a decodificar; Localizar (601) en la imagen obtenida al menos un código candidato;
Para cada código candidato localizado:
Extraer (602) el color de cada celda del código candidato;
Decodificar (603) la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda.
34. Procedimiento según la reivindicación 33, en el que localizar (601) en la imagen cada código candidato comprende:
• Aplicar un algoritmo de umbralizado dinámico de la imagen, que tenga en cuenta las posibles diferentes condiciones de iluminación en diferentes áreas de la captura;
• Aplicar un algoritmo de extracción de contornos cerrados, sobre la imagen binarizada resultante de aplicar el algoritmo de umbralización;
• Reducir los contornos cerrados extraídos, mediante una aproximación poligonal;
• Verificar cuáles de los contornos reducidos son proyectivamente equivalentes a un cuadrado, obteniéndose, para cada contorno proyectivamente equivalente a un cuadrado, un código candidato.
35. Procedimiento según la reivindicación 34, en el que el algoritmo de umbralizado dinámico de la imagen utiliza un umbral adaptativo.
36. Procedimiento según una cualquiera de las reivindicaciones 34 o 35, en el que localizar (601) en la imagen cada código candidato comprende:
• Corregir la distorsión radial en la imagen introducida por el elemento de captura de la imagen. 37. Procedimiento según una cualquiera de las reivindicaciones 33 a 36, en el que extraer
(602) el color de cada celda de un código candidato comprende:
• Realizar una rectificación homográfica de la imagen original, usando las cuatro esquinas del contorno del código candidato, a un marco canónico cuadrado de tamaño suficiente;
• Obtener, de la imagen rectificada, una matriz de celdas con un simple vector de color (R,G,B) en cada celda;
• Obtener un solo valor de vector RGB por celda de la matriz de celdas obtenida, mediante un filtro de mediana para eliminar posible ruido del sensor.
38. Procedimiento según la reivindicación 37, en el que extraer (602) el color de cada celda del código candidato comprende:
• Realizar un alineamiento sub-píxel de cada contorno del código candidato.
39. Procedimiento según una cualquiera de las reivindicaciones 37 o 38, en el que obtener, de la imagen rectificada, una matriz de celdas con un simple vector de color (R,G,B) en cada celda comprende:
Realizar un balance de blancos usando los propios colores claro y oscuro del fondo y del marco, respectivamente, como elementos de calibración.
40. Procedimiento según una cualquiera de las reivindicaciones 37 a 39, en el que el filtro de mediana tiene una anchura suficiente como para cubrir de forma consistente el centro de cada celda en el área que le corresponde de la imagen rectificada, sin invadir el resto de las celdas contiguas de la matriz de celdas.
41. Procedimiento según una cualquiera de las reivindicaciones 33 a 40, en el que decodificar
(603) la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda comprende:
• Determinar la orientación correcta de la matriz de celdas;
• Decodificar cada grupo de tres celdas, comprobando que que se cumplen las restricciones referentes a que cada grupo de tres celdas tiene una única celda de un color claro o de un color oscuro, entendida como una restricción monocromática, y el resto de las celdas son de colores diferentes entre sí, de la pluralidad de colores, entendida como una restricción cromática; • Decodificar cada grupo de cuatro celdas, comprobando que se cumplen las restricciones referentes a que, en la posición de lectura del código visual, dos de las celdas de cada grupo de cuatro celdas, de las tres que forman la primera fila y la primera columna, son cada una de un color claro y/o un color oscuro, entendida como una restricción monocromática, y las dos restantes son de colores diferentes entre sí, de una pluralidad de colores que no incluye el color claro y el color oscuro, entendida como una restricción cromática;
• Si no se cumple la restricción monocromática de los grupos de tres celdas y/o de los grupos de cuatro celdas, descartar el código candidato;
• Si no se cumple la restricción cromática de los grupos de tres celdas y/o de los grupos de cuatro celdas, o descartar el primer valor numérico ( Code A) o Obtener el segundo valor numérico ( Code B ) que se determina a partir de valores obtenidos de las celdas en base a su color en una escala de grises, de los grupos de tres celdas; o Obtener el valor de redundancia del segundo valor numérico ( Code B ) a partir de valores obtenidos de las celdas de un color claro o un color oscuro de los grupos de cuatro celdas; o Comprobar el valor de redundancia obtenido, con el segundo valor numérico ( Code B) obtenido, para detectar errores en la lectura; o Si la comprobación no es correcta, descartar el segundo valor numérico ( Code B) obtenido; o Si la comprobación es correcta, proporcionar el segundo valor numérico ( Code B) obtenido;
• Si se cumplen las restricciones monocromática y cromática de los grupos de tres celdas y/o de los grupos de cuatro celdas, o Obtener el primer valor numérico (Code A) que se determina a partir de valores obtenidos de las celdas de un color claro o de un color oscuro y de las celdas de colores dentro de la pluralidad de colores, de los grupos de tres celdas; o Obtener el valor de redundancia del primer valor numérico ( Code A) a partir de valores obtenidos de las celdas de un color claro o de un color oscuro y de las celdas de colores dentro de la pluralidad de colores, de los grupos de cuatro celdas; o Comprobar el valor de redundancia obtenido, con el primer valor numérico ( Code A) obtenido, para detectar errores en la lectura; o Si la comprobación no es correcta, descartar el primer valor numérico ( Code A) obtenido; o Si la comprobación es correcta, proporcionar el primer valor numérico ( Code
A) obtenido; o Obtener el segundo valor numérico ( Code B ) que se determina a partir de valores obtenidos de las celdas en base a su color en una escala de grises, de los grupos de tres celdas; o Obtener el valor de redundancia del segundo valor numérico ( Code B ) a partir de valores obtenidos de las celdas de un color claro o un color oscuro de los grupos de cuatro celdas; o Comprobar el valor de redundancia obtenido, con el segundo valor numérico ( Code B) obtenido, para detectar errores en la lectura; o Si la comprobación no es correcta, descartar el segundo valor numérico ( Code
B) obtenido; o Si la comprobación es correcta, proporcionar el segundo valor numérico ( Code B) obtenido.
42. Procedimiento según la reivindicación 41 , en el que el que decodificar (603) la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda comprende, si se descarta el primer valor numérico ( Code A) y el segundo valor numérico ( Code B)
• Obtener el tercer valor numérico ( Code C) a partir de valores obtenidos de todas las celdas de un color claro o de un color oscuro de la matriz de celdas;
• Proporcionar el tercer valor numérico ( Code C) obtenido.
43. Producto de programa informático que comprende instrucciones de programa para provocar que un sistema realice un procedimiento según una cualquiera de las reivindicaciones 33 a 42 para decodificar un código visual.
44. Producto de programa informático según la reivindicación 43, que está almacenado en unos medios de grabación.
45. Producto de programa informático según la reivindicación 43, que es portado por una señal portadora.
46. Sistema para decodificar un código visual (101) según una cualquiera de las reivindicaciones 1 a 16, codificado por un sistema para generar un código visual según una cualquiera de las reivindicaciones 30 a 32, comprendiendo el sistema de decodificación:
Medios para obtener una imagen que comprende al menos un código visual a decodificar;
Medios para localizar en la imagen obtenida cada código candidato;
Medios para extraer el color de cada celda del código candidato;
Medios para decodificar la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda.
47. Sistema para decodificar un código visual (101) según una cualquiera de las reivindicaciones 1 a 16, codificado por un sistema para generar un código visual según una cualquiera de las reivindicaciones 30 a 32, estando configurado el sistema de decodificación para: - Obtener una imagen que comprende al menos un código visual a decodificar;
Localizar (601) en la imagen obtenida cada código candidato;
Para cada código candidato localizado:
Extraer (602) el color de cada celda del código candidato;
Decodificar (603) la información codificada y/o el sistema de redundancia para la detección de errores en base al color extraído de cada celda.
48. Sistema para decodificar un código visual (101) según una cualquiera de las reivindicaciones 1 a 16, codificado por un sistema para generar un código visual según una cualquiera de las reivindicaciones 30 a 32, comprendiendo el sistema de decodificación una memoria y un procesador, en el que la memoria almacena instrucciones de programa informático ejecutables por el procesador, comprendiendo estas instrucciones funcionalidades para ejecutar un procedimiento según una cualquiera de las reivindicaciones 33 a 42 para decodificar un código visual.
PCT/ES2020/070598 2019-10-04 2020-10-02 Código visual, procedimiento para generar un código visual y procedimiento para decodificar un código visual WO2021064272A1 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
ES201930860A ES2817652B2 (es) 2019-10-04 2019-10-04 Codigo visual, procedimiento para generar un codigo visual y procedimiento para decodificar un codigo visual
ESP201930860 2019-10-04

Publications (1)

Publication Number Publication Date
WO2021064272A1 true WO2021064272A1 (es) 2021-04-08

Family

ID=75336116

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/ES2020/070598 WO2021064272A1 (es) 2019-10-04 2020-10-02 Código visual, procedimiento para generar un código visual y procedimiento para decodificar un código visual

Country Status (2)

Country Link
ES (1) ES2817652B2 (es)
WO (1) WO2021064272A1 (es)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ES2933648B2 (es) * 2022-07-12 2023-05-23 4I Intelligent Insights S L Sistema y procedimiento de codificacion y decodificacion de informacion a traves de imagenes con decodificacion robusta a media distancia

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090310874A1 (en) * 2008-06-13 2009-12-17 Dixon Brad N Decoding information from a captured image
US20120145779A1 (en) * 2009-04-08 2012-06-14 Continental Teves Ag & Co. Ohg Two-dimensional symbol code and method for reading the symbol code
US20130092738A1 (en) * 2011-10-12 2013-04-18 University Of Rochester Color Barcodes for Mobile Applications: A Per Channel Framework
EP2806377A2 (en) * 2013-05-24 2014-11-26 King Abdulaziz City for Science and Technology OK CODE: A Multidimensional Color Barcode

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090310874A1 (en) * 2008-06-13 2009-12-17 Dixon Brad N Decoding information from a captured image
US20120145779A1 (en) * 2009-04-08 2012-06-14 Continental Teves Ag & Co. Ohg Two-dimensional symbol code and method for reading the symbol code
US20130092738A1 (en) * 2011-10-12 2013-04-18 University Of Rochester Color Barcodes for Mobile Applications: A Per Channel Framework
EP2806377A2 (en) * 2013-05-24 2014-11-26 King Abdulaziz City for Science and Technology OK CODE: A Multidimensional Color Barcode

Also Published As

Publication number Publication date
ES2817652B2 (es) 2021-10-19
ES2817652A1 (es) 2021-04-07

Similar Documents

Publication Publication Date Title
US9406010B2 (en) Producing, capturing and using visual identification tags for moving objects
ES2750536T3 (es) Transmisión de datos utilizando códigos ópticos
US8194973B2 (en) Decoding information from a captured image
CN101978380B (zh) 二维符号及其读取方法
ES2823232T3 (es) Sistema de generación de marcador y método
US11610299B2 (en) Method and system for optical product authentication
CN103339642A (zh) 机器可读符号
CA3045391C (en) Method for detection and recognition of long-range high-density visual markers
US20140138441A1 (en) Color micro bar code marker and system
EP3200120B1 (en) Enhanced matrix symbol error correction method
ES2817652B2 (es) Codigo visual, procedimiento para generar un codigo visual y procedimiento para decodificar un codigo visual
KR101109510B1 (ko) 2차원 바코드 인식방법
Tian et al. Polartag: Invisible data with light polarization
ES2817926B2 (es) Codigo visual y procedimiento para codificar y decodificar una imagen bidimensional
Dean et al. Quick layered response (qlr) codes
JP2022546540A (ja) オブジェクトのマーキング、製造方法、及び認証方法
BR102018003125B1 (pt) Método para reconhecimento ótico de marcadores em ambiente externo
KR101109509B1 (ko) 모바일 기기용 2차원 바코드
US20150109331A1 (en) System and method for superimposing an optical readable data matrix code on an image
WO2016082055A1 (es) Etiqueta inteligente con campos de informacion estaticos y dinamicos

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 20871355

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 20871355

Country of ref document: EP

Kind code of ref document: A1