A method of reconstructing successive scans of bar codes having a plurality of dark elements separated from light elements, comprising the steps of: performing a first scan of the bar code thereby determining the position and the width of the elements in the first scan with respect to an absolute reference position; calculating the position which the elements in the first scan will take with respect to the absolute reference position in a subsequent scan; making a second scan of the bar code thereby determining the position and the width of the elements in the second scan with respect to the absolute reference position; carrying out a correspondence search step for finding at least one reference element for the first scan and one reference element for the second scan, which have substantially the same position with respect to the absolute reference position and substantially the same width; and combining the elements in the first scan with the elements in the second scan, generating a reconstructed scan.
|
1. A method of reconstructing at least one bar code comprising a plurality of elements,
comprising the steps of: a) providing a current area; b) providing a plurality of loading areas for storing elements of a bar code under reconstruction; c) performing a scan of said at least one bar code; d) associating a sequence of adjacent bar code elements in said scan with said current area; e) attempting to combine the elements in said current area with the elements stored in each of said loading areas. 32. A method of reconstructing at least one bar code comprising a plurality of elements,
comprising the steps of: a) providing a current area; b) providing a plurality of loading areas for storing elements of a bar code under reconstruction, each of said loading areas having a failed attempts counter; c) performing a scan of said at least one bar code; d) associating a sequence of adjacent bar code elements in said scan with said current area; and the steps, repeated for each loading area, of: e) attempting to combine the elements in said current area with the elements stored in each of said loading areas; f) if said step of attempting to combine gives a negative result, incrementing the failed attempts counter of the loading area; g) checking whether said failed attempts counter of the loading area exceeds a predetermined threshold value, and h) if the result of said checking step g) is positive, rendering the loading area available for storing new elements. 26. A method of reconstructing at least one bar code comprising a plurality of elements,
comprising the steps of: a) providing a current area; b) providing at least one loading area for storing elements of a bar code under reconstruction, each loading area having a respective failed attempts counter; c) performing a scan of said at least one bar code; d) associating a sequence of adjacent bar code elements in said scan with said current area; and the steps, repeated for each loading area, of: e) attempting to combine the elements in said current area with the elements stored in said loading area; f) if said step of attempting to combine gives a negative result for said loading area, incrementing the failed attempts counter of said loading area; g) checking whether said failed attempts counter of said loading area exceeds a predetermined threshold value, and h) if the result of said checking step g) is positive, rendering said loading area available for storing new elements. 2. The method of
ea) checking whether at least one element in said current area corresponds to a respective element in said loading area, eb) if said step ea) gives a positive result, storing the elements of said current area different from the elements in said loading area into said loading area.
3. The method of
4. The method of
5. The method of
6. The method of
7. The method of
8. The method of
9. The method of
b1) associating to each loading area a status index capable of assuming a first value indicating that the loading area has no elements stored therein, and at least one value indicating that the loading area has elements stored therein; g) keeping the value of the status index of each loading area up-to-date after each execution of said step e).
10. The method of
e1) checking the value of said status index of the loading area, e2a) if the value of said status index of the loading area has said at least one value indicating that the loading area has elements stored therein, checking whether at least one element in the current area corresponds to a respective element in said loading area, and e3) if said step e2a) gives a positive result, storing the elements of said current area different from the elements in said loading area into said loading area.
11. The method of
12. The method of
ba) associating to each loading area a failed attempts counter, and the steps, repeated for each loading area, of ga) if an execution of said step e) for the loading area gives a negative result, incrementing the value of the failed attempt counter of the loading area, and ha) checking whether said failed attempt counter of the loading area exceeds a predetermined threshold value, and if the result is positive, setting said status index to said first value for rendering the loading area available for storing new elements.
13. The method of
a second value selected from the group consisting of a value indicating that no execution of said step e) gave a positive result for said loading area, and a value indicating that no execution of said step e) occurred for said loading area, and a third value indicating that at least one execution of said step e) gave a positive result for said loading area.
14. The method of
e1) checking the value of said status index of the loading area, e2a1) if the value of said status index of the loading area has said second value, checking whether the elements of said current area comprise a synchronism character and whether at least one element of the current area corresponds to a respective element of said loading area, e2a2) if the value of said status index of the loading area has said third value, checking whether at least one element of the current area corresponds to a respective element of said loading area, e3) if a step, selected from the group consisting of said steps e2a1) and e2a2), gives a positive result, storing the elements of said current area different from the elements of said loading area into said loading area.
15. The method of
16. The method of
17. The method of
18. The method of
19. The method of
b1) associating to each loading area a status index capable of assuming a first value indicating that the loading area has no elements stored therein, and at least one value indicating that the loading area has elements stored therein; g) keeping the value of the status index of each loading area up-to-date after each execution of said step e).
20. The method of
e1) checking the value of said status index of the loading area, e2a) if the value of said status index of the loading area has said at least one value indicating that the loading area has elements stored therein, checking whether at least one element in the current area corresponds to a respective element in said loading area, and e3) if said step e2a) gives a positive result, storing the elements of said current area different from the elements in said loading area into said loading area.
21. The method of
22. The method of
ba) associating to each loading area a failed attempts counter, and the steps, repeated for each loading area, of ga) if an execution of said step e) for the loading area gives a negative result, incrementing the value of the failed attempt counter of the loading area, and ha) checking whether said failed attempt counter of the loading area exceeds a predetermined threshold value, and if the result is positive, setting said status index to said first value for rendering the loading area available for storing new elements.
23. The method of
a second value selected from the group consisting of a value indicating that no execution of said step e) gave a positive result for said loading area, and a value indicating that no execution of said step e) occurred for said loading area, and a third value indicating that at least one execution of said step e) gave a positive result for said loading area.
24. The method of
e1) checking the value of said status index of the loading area, e2a1) if the value of said status index of the loading area has said second value, checking whether the elements of said current area comprise a synchronism character and whether at least one element of the current area corresponds to a respective element of said loading area, e2a2) if the value of said status index of the loading area has said third value, checking whether at least one element of the current area corresponds to a respective element of said loading area, e3) if a step, selected from the group consisting of said steps e2a1) and e2a2), gives a positive result, storing the elements of said current area different from the elements of said loading area into said loading area.
25. The method of
27. The method of
ea) checking whether at least one element in said current area corresponds to a respective element in said loading area, eb) if said step ea) gives a positive result, storing the elements of said current area which are different from the elements of said loading area into said loading area.
28. The method of
29. The method of
30. The method of
31. The method of
|
This application is a continuation of application Ser. No. 09/316,119 filed May 20, 1999 now U.S. Pat. No. 6,394,352. The invention relates to a method of reconstructing successive scans of a bar code.
As is known, bar codes (
Reading devices for the said bar codes usually comprise an illumination device (e.g. a laser beam source) adapted to send an optical reading beam which moves along a scanning path intersecting the bar code and also comprise a sensor (e.g. a photodiode) which receives part of the diffused light from the portion of the scanning path illuminated by the laser spot. The sensor, in response to the radiation falling on it as a result of scanning a bar code, outputs an alternating electric signal having a wave shape which is modulated by the succession of light and dark elements in the bar code. As is known, light is absorbed by the bars and reflected by the spaces, so that the signal generated by a space has a high value owing to the large amount of incident radiation on the sensor, whereas the signal generated by a bar has a low value owing to the small amount of incident radiation on the sensor.
In this manner, a signal generated by scanning the bar code is successively binarised and has a two-level wave shape which represents the elements of the bar code and comprises a first high level when scanning a space and a second low level when scanning a bar.
Normally bar codes are examined in a scanning direction which does not coincide with the longitudinal axis of the code. The scanning direction is therefore usually at an angle to the longitudinal axis of the bar code. More particularly, when this angle exceeds a threshold value αmax (FIG. 2), a subset of the code elements are scanned and the binarised signal, which relates to a partial scan of the bar code, comprises a subset of the code elements.
In known devices also, relative movement occurs between the illumination device and the objects bearing the bar codes. For example the illumination device is fixed and the objects move with respect to the illumination device at a constant speed, when carried by a moving device.
For this reason, successive partial scans normally relate to scanning of various adjacent subgroups in the bar code.
Some known reconstruction devices are adapted to put together successive partial scans of the same code, made in different positions, in order to reconstruct and decode the bar code.
Reconstruction devices of this kind, which put together those elements of a partial scan which have a given --inclination with respect to the longitudinal axis of the bar code, effect an omnidirectional readout of the code.
The object of the invention is to provide a method of reconstructing successive partial scans of a bar code, featuring a particularly efficient omnidirectional reading of the code. Furthermore, object of the invention is to provide a method of reconstructing successive partial scans so as to efficiently manipulate the successive partial scans.
This object is achieved by the invention, which relates to a method of reconstructing successive scans of a bar code comprising a plurality of elements, said elements having a first and a second reflectivity and being represented by a position with respect to a reference position and by a width, characterized by the steps of: performing a first scan of the bar code, determining the position and the width of the elements in the first scan with respect to an absolute reference position; calculating the position which said elements in said first scan will take respect to said absolute reference position in a subsequent scan; making a second scan of the bar code, determining the position and the width of the elements in said second scan with respect to said absolute reference position; carrying out a correspondence search step to find at least one reference element in said first scan and one reference element in said second scan which both have substantially the same position with respect to said absolute reference and substantially the same width; and combining the elements in said first scan with t elements in said second scan so as to generate a reconstructed scan.
More particularly, said correspondence search step is followed by a coupling check step for checking that at least a predetermined number of elements in said first scan and said second scan have substantially the same position with respect to the absolute reference position and substantially the same width.
More particularly, the coupling check step is carried out by comparing at least one minimum defined set of elements in said first scan with a minimum defined set of elements in said second scan.
The invention will now be described with reference to the accompanying drawings which illustrate a non-limitative embodiment thereof and in which:
In
The light and dark portions of the code, i.e. the bars and spaces, are the elements of the bar code. In the following description, therefore, a code "element" will mean a bar or a space of the code.
Adjacent elements of the code together form a character of the code, to which coded information is associated.
More particularly the bar code, near a first end portion thereof, has a plurality of elements which together define a code starting character, hereinafter called a START pattern (FIG. 2). Furthermore, the bar code, near a second-end portion thereof, has a plurality of elements which together define an end-of-code character, hereinafter called a STOP pattern. The beginning-of-code and end-of-code characters, i.e. the START pattern and the STOP pattern, define the so-called "synchronism characters" of the code.
The reading head 5 comprises a known illumination device 17 (e.g. comprising a laser source 17a and a rotating prismatic mirror 17b adapted to reflect the laser beam produced by the source 17a), for directing a laser scanning beam F on to the optical codes 8 and scanning the codes 8.
More particularly the laser beam F moves in a substantially inclined plane and intersects the belt 6 and the objects thereon along a scanning path L on which the laser spot moves from a beginning-of-scanning position Li to an end-of-scanning position Lf.
The reading head 5 also comprises a sensor 20 (e.g. a photodiode) associated with an optical acquisition and focusing system 21 (diagrammatically represented) for picking up the diffused light radiation R in order to generate an output analog signal S(t) having an intensity proportional to the brightness of the portion of the path L which is being scanned at that moment. The analog signal S(t) is fed to-an electronic unit 22 which processes the analog signal S(t) according to the invention. The unit 22 is also adapted to pick up the coded information associated with the code.
Of course, the reading device described with reference to
More particularly
The analog signal S(t) typically has an initial portion corresponding to scanning the beginning-of-scanning position Li (FIG. 1), a final portion corresponding to scanning the end-of-scanning position Lf and an intermediate section which, corresponding to a scanned bar code, comprises an alternating section (shown in
In the wave form of the alternating section of the signal S(t), a peak P represents a space whereas a valley V represents a bar.
The analog signal S(t) is then binarised in the block 100 and, corresponding to an alternating section thereof, outputs a signal Sd(t) having two levels (shown in
The wave form of the binarised signal Sd(t) is situated on a time axis having its origin (time to) at the instant when scanning begins, i.e. the instant at which the laser spot illuminates the beginning-of-scanning position Li.
The beginning-of-scanning position Li is an absolute spatial reference to which the positions of the bar code elements are referred and consequently the instant to is taken as an absolute time reference with respect to which the positions in time of the code elements represented by the signal Sd(t) are measured.
More particularly the time Tp measured between the time origin to and an instant ti when a digitized signal front Sd(t) is present, represents the time distance between the bar code element following the considered front and the absolute reference (to).
The time interval Tp represents the position of a bar code element with respect to the beginning-of-scanning position.
The time width Tc of the high-level portion HI and/or low-level portion LO of the digitized signal Sd(t) represents the width of a bar code element. For this reason, each bar code element is represented in the signal Sd(t) by a time interval Tp which represents the position of the bar code element with respect to the absolute reference (time to equivalent to the beginning-of-scanning position Li) and by a time interval Tc which represents the width of the code element.
In the subsequent description, for simplicity, reference I will be made to the position of the code element, meaning by this term the time distance Tp thereof, whereas by "width of the code element" the time interval Tc is meant.
In the following description also, the term FRAME will mean a set of code elements as represented by the digitized signal Sd(t).
In other words, each FRAME comprises a plurality of positions and widths representing the elements of the scanned bar code.
A FRAME, for example, can be represented by a table TABF (
a first line comprises a number of cells each of which contains the position, with respect to the absolute reference to (time Tp), of an element of the FRAME and therefore represents the position of a bar code element; and
a second line comprises a plurality of cells each of which contains the width (time Tc) of the corresponding FRAME element and consequently represents the width of a bar code element.
In the following description, the term CLUSTER means a set of FRAMES grouped together by methods described hereinafter. In practice, each CLUSTER represents a storage area in which the FRAMES relating to a given bar code are stored, in the same order as the FRAMES themselves are acquired during successive scans as explained hereinafter.
In similar manner to the FRAMES, the CLUSTER elements are represented e.g. by a table TABC (
a first row comprises a plurality of cells each of which contains the position, with respect to the absolute reference to (time Tp), of an element of the CLUSTER and therefore represents the position of a bar code element grouped in the CLUSTER; and
a second row comprises a plurality of cells each of which contains the width (time Tc) of the corresponding element of the CLUSTER and therefore represents the width of a bar code element grouped in the CLUSTER.
Tables TABC and TABF can be scanned by respective pointers i And j which are able to select pairs of cells (one from the first row and another from the second row) which define a bar code element through its position and its width.
When a number of optical codes or a number of portions of optical codes are illuminated by a single scan, the signal Sd(t) comprises a set of distinct different FRAMES F1, F2, . . . Fn.
A FRAME contains all the elements of a bar code only when the scan occurs along a line between the longitudinal axis H of the code and a line L' (
However, the objects 7 and the optical codes 8 thereon have an arbitrary relative arrangement with respect to the scanning path L. Consequently the scanning line normally intersects only a part of the bar code.
For this reason, each FRAME normally relates to scanning of a subgroup of the bar code elements (not of the entire bar code). Consequently each FRAME relates to a partial scan and represents the cited subgroup of elements.
Furthermore, owing to the motion of the objects 7 with respect to the reading head 5, successive partial scans L1, L2, . . . (
As will be clearer in the following description, the successive FRAMES relating to scanning of the same code are grouped in a respective CLUSTER which can be individually selected on the basis of the value taken by a pointer i.
Each CLUSTER is also marked by a first index called STATUS, which indicates the state of the CLUSTER; more particularly the index can take three values corresponding to three different situations:
STATUS=0--the associated CLUSTER is empty, i.e. is not associated with any active data structure in which FRAMES can be grouped;
STATUS=1--the associated CLUSTER contains a frame whereby a synchronism character, i.e. a START pattern or a STOP pattern, has been recognized for a first time; and
STATUS=2--the CLUSTER contains at least two FRAMES whereby synchronism characters have been recognized.
In the following description, STATUS 1 and STATUS 2 will be called active states, whereas STATUS 0 will be called inactive state. Of course, when the algorithm is activated, the STATUS index of all the CLUSTERS will be zero. Subsequently the STATUS index of the CLUSTERS is modified (transferred to one of the two active states or set at zero) depending on the result of checks made on the CLUSTER itself or on the result of attempts to couple each CLUSTER to the extracted FRAMES as described--in detail. Consequently, active CLUSTERS and inactive CLUSTERS will generally be present at every moment.
Each CLUSTER is also marked by a second index called NOMATCH which represents the number of failed attempts made to associate additional FRAMES to the same CLUSTER.
The block 100 is followed by a block 110 for canceling the contents i of a counter in accordance with the logic operation i=0.
The block 110 is followed by a block 120 which selects the ith CLUSTER and checks the status of the first STATUS index associated with this ith CLUSTER. More particularly the block 120 checks whether the STATUS index of the ith CLUSTER is an active state, i.e.:
CLUSTER(i), STATUS=1; or
CLUSTER(i), STATUS=2
In the case where the check by block 120 gives a positive result (i.e. the ith CLUSTER examined is in the active state), a block 130 is selected; otherwise (ith CLUSTER inactive) the block 120 is followed by a block 140.
The block 130 re-selects the ith CLUSTER and checks the value of the second NOMATCH index; more particularly if the NOMATCH index is equal to or above a threshold value MAX-NOMATCH, i.e. if at least MAX-NOMATCH failed attempts have been made to associate the ith CLUSTER with additional FRAMES, block 130 will select a block 150 for forcing to zero the first STATUS index of the i CLUSTER which at present is active, i.e., CLUSTER(i), STATUS=0.
In other words, active CLUSTERS for which at least MAX-NOMATCH failed attempts have been made to associate them with new FRAMES are transferred to the inactive state, i.e. cancelled and made available for storing FRAME elements which cannot be associated with active CLUSTERS.
The block 150 is followed by block 140.
The block 140 is adapted to examine the current value i of the counter; If the value is below the maximum number of CLUSTERS present in the memory (i<MAXIMUM NUMBER OF CLUSTERS) the block 140 is followed by a block 160 which increases by one unit the contents i of the counter, by the logic operation i=i+1, and a return is made from block 160 to block 120.
If block 140 detects that the contents i of the counter is equal to the number of CLUSTERS present in the memory (i=MAXIMUM NUMBER OF CLUSTER) block 140 is followed by block 170.
The preceding operations have the combined result of scanning the set of all the CLUSTERS present in the memory and the following operations are performed for each scanned CLUSTER:
if the CLUSTER is marked by an inactive state index (STATUS=0), the CLUSTER is not modified (i.e. no type of operation is performed); and
if the CLUSTER is marked by an active state index (STATUS=1, 2), the number of failed attempts to associate the said CLUSTER with additional frames is checked and, if the threshold value MAX-NOMATCH is exceeded, the CLUSTER is put in the inactive state by forcing to zero the STATUS index.
The block 170 is adapted in known manner to select a single FRAME Fi from the signal Sd(t) relating to a complete scan.
The block 170 is followed by a block 180 adapted to count the number Nf of elements of the FRAME Fi previously selected, i.e. the number of bar code elements represented by the FRAME. If the number Nf is above a minimum number of elements defining a threshold value, the block 180 is followed by a block 190, otherwise the block 180 is followed by a block 200. The block 190 (described in detail hereinafter) selected when the FRAME Fi comprises a number of elements above the minimum number of elements is adapted to process the FRAME, i.e. is adapted to try to associate the FRAME Fi with each active CLUSTER. The block 190 is in any case followed by the block 200, which checks whether the FRAME Fi under examination is the last FRAME contained in the scan detected by the block 100. If not, a return is made from block 200 to block 170 in order to select another FRAME Fi+1, or otherwise (after examination of the FRAMES in the scan) a return is made from block 200 to block 100 in order to acquire another scan. In the other scan, of course, the objects 7 will be in a different position from the preceding scan and consequently different portions of the bar code will be scanned and FRAMES will be detected relating to partial scans of the codes made in different successive positions from the positions in the preceding scan.
More particularly, the block 190 comprises a block 191 adapted to select a first CLUSTER. The block 191 is followed by a block 192 which checks whether the selected CLUSTER is the last CLUSTER present in the memory. If not so (other CLUSTERS are present in the memory) the block 190 selects a block 193, otherwise (after examination of the CLUSTERS present in the memory) the block 192 selects a block 194.
More particularly, the block 190 comprises a block 192 adapted to select a first CLUSTER. The block 192 is followed by a block 193 which checks whether the selected CLUSTER is an active CLUSTER; if so (the selected CLUSTER is active) the block 193 is followed by a block 195, otherwise (the selected CLUSTER is inactive) a block 191 is selected, which checks whether the selected CLUSTER is the last CLUSTER present in the memory. If not so (other CLUSTERS are present in the memory) the block 191 returns to block 192, otherwise (after examination of the memory) the block 191 returns to block 192, otherwise (after examination of the CLUSTERS present in the memory) the block 191 selects a block 194.
The block 193 checks whether the selected CLUSTER is an active CLUSTER; if so (the selected CLUSTER is active) the block 193 is followed by a block 195, otherwise (the selected CLUSTER is inactive) a return is made from block 193 to block 191.
The combined results of the previously-described operation is to scan all the CLUSTERS (active and inactive) and select the active CLUSTERS only. In the case of each selected active CLUSTER, an attempt is made to associate the FRAME Fi as described hereinafter.
Initially, the block 195 (described in detail hereinafter) checks whether the FRAME Fi and the selected CLUSTER intersect, i.e. whether the FRAME and the CLUSTER comprise elements which have comparable positions when superposed.
If the check of the block 195 gives a negative result (the FRAME Fi and the CLUSTER do not intersect) a return is made from block 195 to block 191. Otherwise (the FRAME Fi and the CLUSTER intersect and can be combined) the block 195 is followed by a block 196.
The block 196 modifies a state index of the FRAME, by putting it in a state indicating the use made of the FRAME. Indeed this use is made subsequently during the next attempt to combine the FRAME Fi with the various active CLUSTERS.
The block 196 is followed by a block 197 which checks whether the FRAME Fi has already been decoded; if not (no attempt has yet been made to decode the FRAME) the block 197 is followed by a block 197a which attempts this decoding. Otherwise (the FRAME has already been decoded) the block 197 is followed by a block 198. The fact that the FRAME has been successfully decoded in block 197a means that this FRAME comprises all the elements of the bar code; in that case it is of course unnecessary to reconstruct the successive partial scans. The decoded code is therefore transmitted to the exterior of the unit 22.
The block 198 (described in detail hereinafter) tries to combine the FRAME Fi with a first active CLUSTER; if the attempt has a negative result, the contents of a counter measuring the NOMATCH number of failed combination attempts made by the CLUSTER is incremented by one unit and the block 198 is followed by the block 191 for selecting another active CLUSTER and repeating the effort to combine the same FRAME Fi with the additional CLUSTER. The block 198 (described in detail hereinafter) tries to combine the FRAME Fi with a first active CLUSTER; if the attempt has a negative result, the contents of a counter measuring the NOMATCH number of failed combination attempts made by the CLUSTER is incremented by one unit and the block 198 is followed by the block 191 and, if this was not the last cluster, by the block 192 for selecting.
If the combination process in the block 198 has given a positive result, the block 198 is followed by a block 198a which tries to decode the CLUSTER to which the FRAME Fi has been successfully added. If the CLUSTER is successfully decoded, the decoded code is transmitted to the exterior of the unit 22. The block 198a is likewise followed by the block 191.
The block 194 checks the value of the state index of the FRAME Fi indicative of its use. If the index indicates that the FRAME Fi has been subjected to a combination attempt with at least one active CLUSTER, a transition is made from block 194 to block 200 (
The block 195 comprises a first block 195a which checks whether the position Tf1 (
If the inequality (1) hereinbefore gives a positive result, the CLUSTER and the FRAME are recognized as non-superposable and a return is made from block 195a to block 191. If the inequality (1) hereinbefore gives a negative result, the block 195a is followed by a block 195b.
The block 195b checks whether the position TFf of the first element in the FRAME with respect to the absolute reference is higher than the position TCl of the last element in the CLUSTER with respect to the absolute reference, i.e.: TCl<TFf (2).
If the inequality (2) hereinbefore gives a positive result, the CLUSTER and the FRAME are recognized as non-superposable and a return is made from block 195b to block 191. If both the inequalities (1) and (2) hereinbefore give a negative result, the CLUSTER and the FRAME are recognized as superposable and the block 195b is followed by the block 196.
The block 197a, 198a comprises an initial block 201 which checks whether the length of the FRAME (or the CLUSTER) is acceptable for a bar code, i.e. whether it contains a number of elements compatible with a bar code.
If not (the FRAME or CLUSTER has a length incompatible with the length of a bar code) the block 201 is followed by the block 198 (or 191), otherwise the block 201 is followed by a block 202. The block 202 tries to decode the FRAME (or the CLUSTER) in a manner known per se, e.g. as described in U.S. Pat. Nos. 3,723,710, 3,761,685 or 3,838,251. Decoding the frame in block 202 is sufficient in those fortunate cases where the entire code is read from the first scans. In such cases it is impossible to couple the FRAME to the relevant CLUSTER a second time (as explained in detail hereinafter with reference to block 400 in
The block 207 copies all the elements of the FRAME inside a CLUSTER by transferring the position and width of all the FRAME elements to the CLUSTER.
The block 207 is followed by a block 208 which sets the state index of the CLUSTER at 1, i.e. STATUS=1 in that the CLUSTER now contains a FRAME containing a synchronism character. The block 208 is followed by the block 200.
In other words, if the FRAME has not been used in any active CLUSTER, an attempt at initialization is made by copying the FRAME in a new CLUSTER, but only if the FRAME has a synchronism character.
The block 198 comprises an initial block 300 which controls the state index, variable between 1 and 2, of the CLUSTER. The CLUSTERS examined by block 300 are only active CLUSTERS, i.e. undoubtedly contain at least one FRAME in which a synchronism character is present. The block 300 selects a block 310 if a STATUS of 1 is detected, or a block 320 if a STATUS of 2 is detected.
Basically the block 310 is selected on examination of a CLUSTER which contains a single FRAME in which a synchronism character is present.
The block 310 checks whether the FRAME under examination contains a second synchronism character. If the check is negative, the block 310 is followed by a block 330 which cancels the CLUSTER by setting its state at zero, i.e. the CLUSTER is made inactive and the possible reconstruction is blocked. The block 330 is also followed by the block 191.
In the case of a positive check by the block 310, i.e. if the FRAME contains a second synchronism character, reconstruction begins. Therefore, reconstruction begins only after detection of two successive FRAMES each containing a synchronism character.
To this end the block 310 is followed by a block 340 (described in detail hereinafter) which checks for correspondence between the FRAME and the CLUSTER in order to check whether the FRAME and the CLUSTER belong to the same code.
The block 340 selects a block 345 if the check gives a negative result (FRAME and CLUSTER not aligned) or a block 350 if the check is positive (FRAME and CLUSTER in line), thus setting the STATUS of the CLUSTER at 2. The block 345 increases the counter defining the NOMATCH number by one unit; this block is in fact selected after a failed attempt when searching for correspondence between a FRAME and a CLUSTER. The block 345 is then followed by the block 191.
The block 340 then calculates the distance between the synchronism character of the FRAME and the corresponding synchronism character of the CLUSTER.
In this connection reference should be made to
The block 340 comprises an initial block 400 which checks whether the number of elements in the FRAME is greater than the number of elements in the CLUSTER. If this is not so, an error situation is detected and the block 400 is followed by block 345 and 191; otherwise the block 400 is followed by block 410. Of course, in the fortunate case in which the entire bar code has already been read in the preceding scan and the present scan also relates to all the elements of the code, the check made in block 400 will prevent coupling between the actual FRAME and the CLUSTER and the situation will be as described hereinbefore with reference to block 197a in
The block 410 calculates the number f of code elements which are superposed in the FRAME and in the CLUSTER, i.e. which have the same position with respect to the absolute reference and the same width, by making the comparison (
The block 410 is followed by a block 420 which calculates the number r of elements which are superposed in the FRAME and in the CLUSTER, i.e. which have the same position with respect to the absolute reference and the same width, starting the comparison from the last element of the FRAME and from the last element of the CLUSTER (corresponding to the right or REVERSE).
Referring to
The block 420 is followed by a block 430 which checks whether the number r is equal to the number f. If the numbers r and f are equal, an uncertainty situation is detected (the number of superposable elements on the right corresponds to the number of superposable elements on the left) and consequently the code is not reconstructed. The block 430 is followed by blocks 345 and 191. If the numbers r and f are different, the block 430 is followed by a block 440 which checks whether the number r or the number f is different from zero. If at least one of the said numbers is equal to zero, a non-correspondence situation is detected and consequently the code is not reconstructed. Blocks 430 and 440 are followed by blocks 345 and 191. If either the number r or the number f are different from zero, a block 450 is selected which checks whether the number f is greater than the number r. If the number f is greater than the number r a block 460f is selected, otherwise (f is less than r) a block 460r is selected.
The block 460f checks whether the number f of superposable elements starting from the left is greater than a threshold value MINMATCH; if f is less than the threshold (i.e. when there are a limited number of elements which are superposed in the FRAME and in the CLUSTER), an error is detected, reconstruction does not begin and consequently blocks 345 and 191 are selected. If f is greater than the MINMATCH threshold (i.e. if there are a sufficient number of superposed elements in the FRAME and in the CLUSTER) the block 460f selects a block 470f which stores the superposition condition starting from the left (or FORWARD direction) of the bar code with respect to the reading head. The block 470f is followed by a block 480f which calculates the value Δ-position as the difference between the position of the first element in the FRAME and the position of the first element in the CLUSTER (see FIG. 7).
Reconstruction of the code therefore begins and the block 480f is followed by a block 350 (
The block 460r checks whether the number r of superposable elements starting from the right is greater than a threshold value MINMATCH. If r is less than the threshold (i.e. if there are a limited number of corresponding elements in the FRAME and in the CLUSTER) an error is detected, reconstruction does not begin and the blocks 345 and 191 are selected. If r is above the MINMATCH threshold (i.e. when there is a sufficient number of superposed elements in the FRAME and in the CLUSTER) the block 460r selects a block 470r which stores the superposition condition starting from the right (BACKWARDS or REVERSE direction) of the bar code with respect to the reading head. The block 470r is followed by a block 480r which calculates the value Δ-position as the difference between the position of the last element in the FRAME and the position of the last element in the CLUSTER.
Reconstruction of the code therefore begins and the block 480r is also followed by the block 350 which sets the state index at two.
Returning to
The block 355 is followed by a block 380 which recalculates the position of the CLUSTER by disposing it in the position provided for the subsequent scan (due to the movement of the conveyor belt 6 (
To this end, note that the belt 6 moves at a substantially constant speed (e.g. 3 meters per second) with respect to the reading head; the mirror 17b also rotates at high speed, e.g. sufficient for 1000 scans per second. The time between one scan and the next is very short, equal to {fraction (1/1000)} of a second in the present case. During this time interval the speed of the belt is practically constant, in that substantial variations in speed would require very high acceleration (of the order of several tens of g) which are obviously unobtainable or unimaginable in the case of a conveyor-belt device.
Consequently the position to be taken by the CLUSTER in order to be comparable with a FRAME detected in a subsequent scan is approximated with high accuracy by the block 380 (
The block 380 is then followed by the block 198a.
The block 320 (described in detail hereinafter) reached when reconstruction is begun, STATUS=2, checks whether the FRAME Fi and the CLUSTER analyzed by block 300 can be associated. The CLUSTER taking part in the operations of block 320 is a CLUSTER which contains two FRAMES each comprising a synchronism character; the block 320 is normally selected during the third or fourth scan of the bar code.
If the association attempted by block 320 is unsuccessful, block 320 is followed by a block 360 which increases by one unit the counter which defines the number NOMATCH; the block 360 is then followed by the block 191.
If the association attempt by block 320 is successful, the block 320 is followed by a block 365 (described in detail hereinafter) which corrects the calculation of the distance Δ-position between the FRAME and the CLUSTER∼ previously calculated in block 340 (
Block 365 is followed by a block 370 (similar to block 355) which, after the operations performed by block 320, associates the new FRAME elements in the CLUSTER. The operations of block 370 will be described in detail hereinafter.
Blocks 355 and 370 are followed by block 380, which in turn is followed by block 198a.
The block 320 comprises an initial block 500 (
Block 510 selects the last-but-one element in the CLUSTER, defined by the value ic of a pointer in Table TABC and the last-but-one element of the FRAME, defined by the value jn of a pointer in Table TABF (FIG. 9). In the description hereinafter, for brevity, the term "element ic in the CLUSTER" is used to identify the element in the CLUSTER which is defined by the pointer value ic and "element jn in the FRAME" is used to identify the element of the FRAME which is defined by the pointer value jn.
The block 510 is followed by a block 520 which checks whether the position of element ic of the CLUSTER with respect to the absolute reference is approximately equal to the position of the element jn of the FRAME with respect to the same absolute reference.
In the negative case (the positions of ic and jn do not coincide) the block 520 is followed by the block 530. Otherwise (the positions of ic and jn substantially coincide) the block 520 is followed by a block 540.
The block 530 checks whether the position of element ic in the CLUSTER is higher than the position of element jn in the FRAME.
If so (the position of element ic in the CLUSTER is higher than the position of the element jn in the FRAME) a block 555 is selected; otherwise a block 550 is selected.
The block 550 decrements by one unit the value of jn, i.e. performs the operation jn=jn-1, in order to select a FRAME element having a lower position than the preceding one. Correspondingly, the block 555 decrements by unity the value of ic, i.e. performs the operation ic-1, in order to select a CLUSTER element having a lower position than the preceding one.
Blocks 555 and 550 are both followed by a block 560 which checks whether the values ic and jn (previously modified by the respective blocks 555 and 550) are now below a threshold value MINMATCH, i.e.:
or
If at least one of the inequalities hereinbefore is satisfied, block 560 is followed by block 360 (
If neither inequality of block 560 is satisfied, a return is made from block 560 to block 320, which re-checks the position of the elements ic of the CLUSTER and jn of the FRAME; the check is made by a different element of the CLUSTER or FRAME from the element used in the preceding check step.
The block 540 is selected when the elements ic and jn of the CLUSTER and of the FRAME have substantially the same position. In the example in
Block 540 performs the following operations:
select a plurality of CLUSTER elements starting from the element marked ic in the REVERSE direction towards elements (ic-1, ic-2, . . . ic-n) preceding the said element ic. "Preceding elements" with respect to a given element mean elements having a lower position than the given element.
select a plurality of FRAME elements starting from the element marked jn in the REVERSE direction towards elements (jn-1, jn-2, . . . jn-m) preceding the considered element; and
calculate the number A(ic,jn) of superposable elements by comparing at least MINMATCH selected elements in the CLUSTER and in the FRAME, starting from ic and jn. "Superposable elements" means a continuous sequence of elements of the FRAME and of the CLUSTER in which each element of the FRAME of the sequence corresponds to a respective element of the CLUSTER having the same position and the same width.
Block 540 is followed by a block 580 which checks whether the number A(ic, jn) is greater than the number MINMATCH, i.e.:
If so (A(ic,jn)>MINMATCH) the block 580 is followed by blocks 365 and 370 (
If so, i.e. if the check shows that the FRAME and CLUSTER can be successfully coupled, a move is made (
The operations illustrated with reference to
Block 520b (
Block 520b is followed by a block 590 which checks whether the position of the CLUSTER element ic detected with respect to the absolute reference is approximately the same as the position of the FRAME element jn detected with respect to the absolute reference.
If not (i.e. if the positions of the elements associated with ic and jn do not coincide) block 590 is followed by block 600, otherwise (the position of the elements associated with ic and jn substantially coincide) block 590 is followed by a block 610.
Block 600 checks whether the position of element ic in the CLUSTER is higher than the position of the FRAME element jn. If so (position of CLUSTER element ic>position of FRAME element jn), a block 620 is selected, otherwise, a block 630 is selected.
The block 620 increases the value of jn by one unit, i.e. performs the operation jn=jn+1, in order to select a FRAME element having a higher position than the preceding one. Similarly block 630 increases the value of ic by one unit, i.e. performs the operation ic=ic+1, in order to select a CLUSTER element having a higher position than the preceding one.
Blocks 620 and 630 are both followed by a block 640 which checks whether the values of ic and jn (previously modified by the blocks 630 and 620 respectively) are now greater than the number of elements in the CLUSTER minus a threshold value MINMATCH, i.e.:
or
If at least one of the inequalities hereinbefore is satisfied, block 640 is followed by block 360 (
If none of the inequalities is satisfied in block 640, block 640 is followed by block 590 which re-checks the position of the elements associated with ic and jn. The check is made on a different CLUSTER element or FRAME element from that used in the preceding check step.
The block 610 is selected when the elements associated with ic and jn have substantially the same position and performs the following operations:
it selects a plurality of CLUSTER elements starting from the element marked ic and in the FORWARD direction towards elements (ic+1, ic+2, . . . ic+n) which follow the last element ic. "Elements which follow a given element" mean elements having a higher position than the given element.
it selects a plurality of FRAME elements starting from the element marked jn and in the FORWARD direction towards elements (jn+1, jn+2, . . . jn+m) following the last element jn and
it calculates the number A(ic,jn) of superposable elements by comparing at least MINMATCH selected elements of the CLUSTER and the FRAME.
Block 610 is followed by a block 660 which checks whether the number A(ic,jn) is greater than the number MINMATCH, i.e.:
If so, A(ic,jn)>MINMATCH, the block 660 is followed by blocks 365 and 370; if not (A(ic,jn)<MINMATCH), block 660 is followed by block 600.
In the positive case, i.e. where the FRAME and CLUSTER can be successfully coupled, a move is made to block 365 (
Element ic is therefore a reference element with respect to which the CLUSTER and the FRAME are aligned. Block 370 also carries out a "junction" step between the FRAME and the CLUSTER in which all the FRAME elements disposed on a given side with respect to the reference element are copied in the CLUSTER. More particularly in the FORWARD case (
The operations performed by block 320 define a correspondence search step in which a selection is made (blocks 510 and 520a) of an element (denoted by the pointer value ic, ic-1, ic+1) for beginning a check of the CLUSTER; a selection is made (blocks 510 and 520a) of a check start element (denoted by pointer value jn) of the FRAME and a corresponding check step is carried out (blocks 520 and 590) to check whether the position of the check start element in the CLUSTER with respect to the absolute reference is approximately the same as the position of the check start element of the FRAME with respect to the absolute reference.
If the correspondence check step gives a negative result, an iterative modification step is carried out (by blocks 530, 555, 559, 560; 600, 620, 630, 640) in order to select subsequent CLUSTER or FRAME elements adjoining the check start element. The iterative modification step is carried out by other CLUSTER or FRAME elements until the correspondence check step arrives at a positive result (output to blocks 540 and 610). In such cases, a possible coupling between FRAME and CLUSTER is initially detected. Initially the coupling is detected in the case of a single element of the FRAME or the CLUSTER. In order however to recognize the coupling with greater reliability, a series of further operations are performed in the method according to the invention, including the following:
selecting (blocks 540, 610) a plurality of CLUSTER elements starting from the reference element which satisfies the correspondence check step in a predetermined direction (i.e. in the REVERSE or the FORWARD direction), starting from the reference element towards elements remote from the reference element;
selecting (blocks 540, 610) a plurality of FRAME elements starting from the reference element (jn) which satisfies the correspondence check step and in a predetermined direction (the said REVERSE and FORWARD directions) starting from the reference element towards elements remote from the reference element;
calculating (blocks 540, 610) the number of superposable elements among those selected in the CLUSTER and in the FRAME and
detecting (blocks 580 and 660) that the correspondence search step has given a positive result when the number of superposable elements has a predetermined relation to (more particularly is greater than) the reference MINMATCH.
In this manner, coupling between FRAME and CLUSTER is recognized with greater reliability in that FRAME elements and CLUSTER elements are compared together.
Note that the correspondence search operations start from the last-but-one element of the FRAME or the CLUSTER. The last FRAME or CLUSTER element is not selected, since it may provide information which is insufficiently reliable, e.g. because of noise.
The last-but-one element is chosen because (see
In this way, the reliability of the correspondence search algorithm is improved.
As can be seen, therefore, the term Δ-position is initially calculated a first time in block 340 at the beginning of the coupling operations and is successively refined by calculation in block 365.
In the variant shown, block 540 comprises a block 540a which performs the following operations:
it selects a plurality of CLUSTER elements starting from the element denoted by ic in the backward (REVERSE) direction towards elements (ic-1, ic-2, . . . ic-n) preceding element ic. "Elements preceding a given element" means elements having a lower position than this element.
it selects a plurality of FRAME elements starting from the element denoted by jn in the backward (REVERSE) direction towards element (jn-1, jn-2, . . . jn-m) preceding this element and
it calculates the number A(ic,jn) of superposable elements by comparing at least MINMATCH selected elements of the CLUSTER and of the FRAME starting from ic and jn. "Superposable elements" means a continuous sequence of elements of the FRAME and of the CLUSTER in which each FRAME element of the sequence corresponds to a respective CLUSTER element having the same position and the same width.
The block 540a is followed by block 540b, which performs the following operations:
it selects a plurality of CLUSTER elements starting from the element denoted by ic-1 in the backward (REVERSE) direction towards elements (ic-2, ic-3, . . . ic-n) preceding element ic-1;
it selects a plurality of FRAME elements starting from the element denoted by jn in the backward (REVERSE) direction towards elements (jn-1, jn-2, . . . jn-m) preceding this element and
it calculates the number B(ic-1,jn) of superposable elements by comparing at least MINMATCH selected elements of the CLUSTER and of the FRAME.
The block 540b is followed by the block 540c which performs the following operations:
It selects a plurality of CLUSTER elements starting from the element denoted by ic+1 in the backward (REVERSE) direction towards elements (ic, ic-i, . . . ic-n) preceding element ic+1;
it selects a plurality of FRAME elements starting from the element denoted by jn in the backward (REVERSE) direction towards elements (jn-1, jn-2, . . . jn-m) preceding this element and
it calculates the number C(ic+i,jn) of superposable elements by comparing at least MINMATCH selected elements of the CLUSTER and of the FRAME.
The block 540c (the last step in block 540) is followed by a block 570 which searches for the largest number Mb among the numbers A(ic,jn), B(ic-1,jn), C(ic+1,jn) which have previously been calculated in blocks 540a, 540b and 540c.
The block 570 is followed by a block 580 which checks whether the previously-extracted number Mb is greater than a threshold value MINMATCH; if the check made by block 580 has given a negative result (Mb<MINMATCH) a return is made to block 520; if not (Mb>MINMATCH) a move is made from block 580 to block 365.
If it is found that the FRAME and CLUSTER have been successfully coupled, therefore, block 365 (recalculating the value Δ-position) and block 370 are selected (
In the variant shown, block 610 comprises a block 610a which performs the following operations:
it selects a plurality of CLUSTER elements starting from the element denoted by ic in the FORWARD direction towards elements (ic+1, ic+2, . . . ic+n) following the last element ic. "Elements following a given element" means elements having a higher position than the given element.
it selects a plurality of FRAME elements starting from the element denoted by jn in the FORWARD direction towards elements (jn+1, jn+2, . . . jn+m) following the last element jn; and
it calculates the number A(ic,jn) of superposable elements by comparing at least MINMATCH selected elements of the CLUSTER and of the FRAME.
The block 610a is followed by block 610b which performs the following operations:
it selects a plurality of CLUSTER elements starting from the element denoted by ic-i in the FORWARD direction towards elements (ic, ic+1, . . . ic+n) following element ic-i;
it selects a plurality of FRAME elements starting from the element denoted by jn in the FORWARD direction towards elements (jn+1, jn+2, . . . jn+m) following element jn and
it calculates the number B(ic-1,jn) of superposable elements by comparing at least MINMATCH selected elements of the CLUSTER and of the FRAME.
The block 610b is followed by block 610c which performs the following operations:
it selects a plurality of CLUSTER elements starting from the element denoted by ic+1 in the FORWARD direction towards elements (ic+2, ic+3, . . . ic+n) following element ic+1;
it selects a plurality of FRAME elements starting from the element denoted by jn in the FORWARD direction towards elements (jn+1, jn+2, . . . jn+m) following element jn and
calculates the number C(ic+1,jn) of superposable elements by comparing at least MINMATCH selected elements of the CLUSTER and of the FRAME.
The block 610 is followed by a block 650 which searches for the largest number Mf from among the numbers A(ic,jn), B(ic-1,jn), C(ic+1,jn) previously calculated by the blocks 610a, 610b and 610c.
Block 650 is followed by a block 660 which checks, whether the number Mf extracted by the previous block 650 is greater than the number MINMATCH, i.e.: Mf>MINMATCH.
If so (Mf>MINMATCH), block 660 is followed by blocks 365 and 370; if not (Mf>MINMATCH) block 660 is followed by block 600.
In the positive case, i.e. where the FRAME and CLUSTER have been successfully coupled, a move is made to block 365 (
Obviously, numerous modifications and variants can be made to the method described and illustrated here, all coming within the scope of the invention as defined in the accompanying claims. In particular it is stressed that the present method, instead of being of the continuous kind and continually scanning and processing the code even after transmission of the decoded code (as described with reference to
Also the algorithm can be modified by inserting some checks. In particular, each CLUSTER can be associated with an additional indicator (a zero scan counter) which is incremented after any scan which does not result in updating of the CLUSTER. In such cases the reading of the zero scan counter is checked after every scan (e.g. at the initial block 100), if the reading exceeds a given threshold value, the STATUS index of the CLUSTER is set at zero, thus making the CLUSTER available. This operation, however, is not strictly necessary since scans are rarely without elements, owing to the noise which exists even in the intervals between one bar code and the next. The noise however enables CLUSTERS to be opened and subsequently closed by setting the STATUS index of the CLUSTERS at zero, thus making them available for subsequent scans of effective code elements.
Patent | Priority | Assignee | Title |
6802450, | Aug 07 2002 | AMBIR TECHNOLOGY, INC | Guiding a scanning device to decode 2D symbols |
9495571, | Sep 30 2015 | DATALOGIC USA, INC | Two-dimensional representation of linear barcode derived from laser barcode scanner scanline data |
Patent | Priority | Assignee | Title |
3723710, | |||
3761685, | |||
3838251, | |||
4916297, | Nov 17 1986 | Tokyo Kogaku Kikai Kabushiki Kaisha | Code reader |
5241164, | Jan 05 1990 | Symbol Technologies, Inc. | Method of decoding bar code symbols from partial scans |
5387787, | Sep 14 1992 | SICK, INC | Scanning device for reconstructing a complete code from scanned segments |
5457308, | Sep 14 1993 | Symbol Technologies, Inc. | Bar code scan stitching |
5777310, | Nov 06 1995 | Intermec IP CORP | Problem reduction with low level information integration in bar code decoding |
5979768, | Jan 14 1988 | Intermec IP CORP | Enhanced bar code resolution through relative movement of sensor and object |
6267293, | Feb 22 1999 | SICK AUTO IDENT, INC | Bar code scanning system and method |
EP436072, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Mar 25 2002 | Datalogic S.p.A. | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Nov 23 2007 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Nov 26 2007 | ASPN: Payor Number Assigned. |
Nov 25 2011 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Nov 24 2015 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Date | Maintenance Schedule |
Jun 01 2007 | 4 years fee payment window open |
Dec 01 2007 | 6 months grace period start (w surcharge) |
Jun 01 2008 | patent expiry (for year 4) |
Jun 01 2010 | 2 years to revive unintentionally abandoned end. (for year 4) |
Jun 01 2011 | 8 years fee payment window open |
Dec 01 2011 | 6 months grace period start (w surcharge) |
Jun 01 2012 | patent expiry (for year 8) |
Jun 01 2014 | 2 years to revive unintentionally abandoned end. (for year 8) |
Jun 01 2015 | 12 years fee payment window open |
Dec 01 2015 | 6 months grace period start (w surcharge) |
Jun 01 2016 | patent expiry (for year 12) |
Jun 01 2018 | 2 years to revive unintentionally abandoned end. (for year 12) |