BARCODE DETECTION DEVICE WITH ROTATION ANGLE DETECTION
20220383015 · 2022-12-01
Inventors
Cpc classification
G06K19/06131
PHYSICS
G06K7/1456
PHYSICS
International classification
Abstract
There is provided a barcode detection device including an image sensor and a processor. The image sensor captures an image frame of a barcode. The processor calculates a gradient vector of bars of the barcode in the image frame for determining a rotation angle of the image sensor. The rotation angle is used to calibrate a detected bar width.
Claims
1. A barcode detection device, comprising: an image sensor, configured to capture an image frame of a barcode, wherein the image frame has a size of N×N pixels, and the barcode has separately arranged multiple bars; and a processor, coupled to the image sensor, and configured to calculate a gradient direction in the captured image frame; and calculate a rotation angle of the multiple bars between the gradient direction and a predetermined direction of the captured image frame before recognizing the barcode, wherein the processor is configured to calculate a convolution of the image frame respectively with a first gradient matrix and a second gradient matrix to obtain (N−1)×(N−1) gradient vectors, and calculate an average gradient vector of the (N−1)×(N−1) gradient vectors indicating the gradient direction of the multiple bars, wherein the average gradient vector has an X-component and a Y-component, and the gradient direction is calculated by arctan(Y-component/X-component).
2. (canceled)
3. The barcode detection device as claimed in claim 1, wherein the first gradient matrix is configured to subtract a left column from a right column, separated from the left column by one pixel column, of the image frame to obtain an X-gradient component of one gradient vector associated with a convolution region of the image frame, and the second gradient matrix is configured to subtract an upper row from a lower row, separated from the upper row by one pixel row, of the image frame to obtain a Y-gradient component of the one gradient vector associated with the convolution region of the image frame.
4. The barcode detection device as claimed in claim 1, wherein in calculating the average gradient vector, the processor is configured to recognize gradient vectors among the (N−1)×(N−1) gradient vectors directing to a first direction and a second direction, change the gradient vectors among the (N−1)×(N−1) gradient vectors directing to the second direction to direct to the first direction, and average (N−1)×(N−1) gradient vectors directing to the first direction.
5. The barcode detection device as claimed in claim 1, wherein in calculating the average gradient vector, the processor is configured to recognize gradient vectors among the (N−1)×(N−1) gradient vectors directing to a first direction and a second direction, and average the gradient vectors among the (N−1)×(N−1) gradient vectors directing only to the first direction or directing only to the second direction.
6. The barcode detection device as claimed in claim 1, wherein in calculating the average gradient vector, the processor is configured to calculate an inner product or an angle difference of two gradient vectors among the (N−1)×(N−1) gradient vectors to determine whether the two gradient vectors direct to a same direction or not.
7-20. (canceled)
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0011] Other objects, advantages, and novel features of the present disclosure will become more apparent from the following detailed description when taken in conjunction with the accompanying drawings.
[0012]
[0013]
[0014]
[0015]
[0016]
DETAILED DESCRIPTION OF THE EMBODIMENT
[0017] It should be noted that, wherever possible, the same reference numbers will be used throughout the drawings to refer to the same or like parts.
[0018] The barcode detection device of the present disclosure is adapted to calibrate a rotation angle (as well as to identify a scanned width, if needed) of bars of a barcode and determine a scan direction before recognizing the barcode. In this way, the barcode detection device of the present disclosure can identify whether it is lifted up or still being operated during the recognizing to avoid error recognition of the barcode. Furthermore, the barcode detection device of the present disclosure only needs to scan once along the determined scan direction so as to reduce computation loading, which is generally ¼ of the computation loading of conventional detection devices that determine a scan direction after scanning four directions.
[0019] Please referring to
[0020] The output interface 14 is a wireless interface, e.g., a Bluetooth interface, but not limited to. The output interface 14 is used to communicate with an external host, e.g., a game host, a cellphone or the like. In another aspect, the barcode detection device 100 does not include the output interface 14, and the processor 12 controls the object on which the barcode detection device 100 is embedded.
[0021] The image sensor 11 is a CMOS image sensor, a CCD image sensor or the like, and is used to capture an image frame of a barcode 90, which has separately arranged multiple bars. The multiple bars have different colors or different reflectivity, e.g., represented by different filled types of lines in
[0022] For example,
[0023] The processor 12 is a microcontroller unit (MCU) or an application specific integrated circuit (ASIC), and performs calculations and operations thereof (described below) using hardware and/or firmware. The processor 12 is coupled to the image sensor 11 to receive the captured image frame IF therefrom, and determines a scan direction Ascan (as shown in
[0024] In the present disclosure, the processor 12 calculates a convolution of the image frame IF respectively with a first gradient matrix M.sub.X and a second gradient matrix M.sub.Y to obtain (N−1)×(N−1) gradient vectors, for example,
[0025] As shown above, the first gradient matrix M.sub.X is used to subtract a left column from a right column, separated from the left column by one pixel column, of the image frame IF to obtain an X-gradient component of the gradient vector associated with a convolution region CR (as shown in
[0026] In another aspect, the first gradient matrix is used to subtract a right column from a left column, separated from the right column by one pixel column, of the image frame IF to obtain an X-gradient component of the gradient vector associated with a convolution region CR of the image frame IF; and the second gradient matrix M.sub.Y is used to subtract an lower row from a upper row, separated from the lower row by one pixel row, of the image frame IF to obtain a Y-gradient component of the gradient vector associated with the convolution region CR of the image frame IF. That is, in M.sub.X, the first column contains positive components, and the third column contains negative components; and in M.sub.Y, the first row contains positive components, and the third row contains negative components. It is appreciated that sizes of M.sub.X and M.sub.Y are not limited to 3×3.
[0027] Referring to
[0028] The convolution between the first gradient matrix M.sub.X and one convolution region CR obtains one X-component of a gradient vector, shown as G.sub.X22, G.sub.X23 . . . G.sub.XN−1N−1 in
[0029] As shown in
[0030] It is appreciated that if the first gradient matrix M.sub.X and a second gradient matrix M.sub.Y have a larger size, e.g., 4×4, a number of times for calculating the convolution between the convolution region CR (also having 4×4 pixels) and the first gradient matrix M.sub.X as well as the second gradient matrix M.sub.Y is decreased, e.g., obtaining (N−2)×(N−2) gradient vectors.
[0031] Then, the processor 12 calculates an average gradient vector (G.sub.Xave, G.sub.Yave) of the (N−1)×(N−1) gradient vectors associated with (N−1)×(N−1) convolution regions CR of the image frame IF, wherein the average gradient vector also has an X-component G.sub.Xave and a Y-component G.sub.Yave. Referring to
G.sub.Xave=(G.sub.X22+G.sub.X23+ . . . +G.sub.X2N−1+G.sub.X32+G.sub.X33+ . . . +G.sub.X3N−1+ . . . +G.sub.XN−1N−1)/(N−1).sup.2
G.sub.Yave=(G.sub.Y22+G.sub.Y23+ . . . +G.sub.Y2N−1+G.sub.Y32+G.sub.Y33+ . . . +G.sub.Y3N−1+ . . . +G.sub.YN−1N−1)/(N−1).sup.2
[0032] However, in calculating the average gradient vector (G.sub.Xave,G.sub.Yave), the (N−1)×(N−1) gradient vectors are not always directed to a same direction. Mostly, about a half of gradient vectors among the (N−1)×(N−1) gradient vectors are positive and another half of gradient vectors among the (N−1)×(N−1) gradient vectors are negative (i.e. directed in opposite directions); and thus the average gradient vector (G.sub.Xave,G.sub.Yave) are close to (0,0) without considering noises.
[0033] In one aspect, the negative gradient vector herein is referred to a gradient vector that has a negative value of arrangement angle Abar (e.g., calculated by arctan(G.sub.Y22/G.sub.X22), arctan(G.sub.Y23/G.sub.X23), . . . , arctan(G.sub.YN−1N−1/G.sub.XN−1N−1)); and a positive gradient vector herein is referred to a gradient vector that has a positive value of arrangement angle Abar.
[0034] In a word, to solve the cancellation issue (e.g., summation of gradient vectors having opposite directions becoming 0) in calculating the average gradient vector (G.sub.Xave,G.sub.Yave), gradient vectors having opposite directions are firstly changed to the same direction before calculating the average gradient vector (G.sub.Xave,G.sub.Yave).
[0035] In one aspect, it is possible to calculate the inner product of two gradient vectors among the (N−1)×(N−1) gradient vectors to determine whether the two gradient vectors are in the same direction or not. If the inner product of two gradient vectors is larger than 0, then the two gradient vectors are in the same direction. If the inner product of two gradient vectors is not larger than 0, it is known that one of the two gradient vectors directs to a first direction and the other one of the two gradient vectors directs to a second direction, e.g., opposite to the first direction. By adding a minus sign to the other one gradient vector directing to the second direction, a direction of the other one gradient vector is changed to direct to the first direction.
[0036] In another aspect, it is possible to calculate the absolute difference between two gradient vectors among the (N−1)×(N−1) gradient vectors to determine whether the two gradient vectors are in the same direction or not. If the angle difference of two gradient vectors is smaller than 90 degrees, the two gradient vectors are in the same direction. If the angle difference of two gradient vectors is not smaller than 90 degrees, it is known that one of the two gradient vectors directs to a first direction and the other one of the two gradient vectors directs to a second direction, e.g., opposite to the first direction. By adding a minus sign to the other one gradient vector directing to the second direction, a direction of the other one gradient vector is changed to direct to the first direction.
[0037] Then, the average gradient vector (G.sub.Xave,G.sub.Yave) is calculated by averaging (N−1)×(N−1) gradient vectors directing to the first direction (including direction changed and non-changed gradient vectors); or, by averaging the gradient vectors among the (N−1)×(N−1) gradient vectors directing only to the first direction or directing only to the second direction and ignoring gradient vectors not directing to the same direction.
[0038] In one aspect, the arrangement angle Abar (also called a gradient direction of multiple bars herein) is calculated using arctan(G.sub.Yave/G.sub.Xave) by the processor 12. As the scan direction Ascan in scanning the multiple bars of the barcode 90 in the image frame IF is only set in four directions, including a longitudinal direction Y, a transverse direction X, a 45-degree tilt direction (a diagonal line) and a 135-degree tilt direction (another diagonal line) of the image frame IF, the processor 12 further calculates an angle difference θ between the arrangement angle Abar and a predetermined direction selected from the longitudinal direction Y, the transverse direction X, the 45-degree tilt direction and the 135-degree tilt direction of the image frame IF.
[0039] For example, after the arrangement angle Abar is obtained, the processor 12 selects one of the longitudinal direction Y, the transverse direction X, the 45-degree tilt direction and the 135-degree tilt direction closest to the arrangement angle Abar of the average gradient vector (G.sub.Yave,G.sub.Xave), e.g.,
[0040] The processor 12 also calculates a scanned width W of the multiple bars.
[0041] Referring to
[0042] After the scanned width W is obtained, the processor 12 calibrates the scanned width W using the angle difference θ to obtain a calibrated width, e.g., Wcal=W/secθ.
[0043] As mentioned above, the calibrated width Wcal indicates the real width of the bars, the spaces or a bar pitch of the barcode 90. In one aspect, the processor 12 compares the calibrated width Wcal with a predetermined threshold to determine whether the barcode detection device 100 is lifted by a user or not. For example, if the calibrated width Wcal is smaller than the predetermined threshold, the barcode detection device 100 is determined to be lifted. For example, if the barcode detection device 100 is determined to be lifted, the processor 12 does not recognize the current barcode or does not output the recognized barcode from the output interface 14 or does not perform the predetermined control. In another aspect, the calibrated width Wcal is used to indicate a lifted height. For example, the calibrated width Wcal is compared with multiple thresholds, each interval between two thresholds indicating one height, to determine a height of the barcode detection device 100 with respect to the barcode 90.
[0044] In another aspect, the processor 12 further identifies a variation of the average gradient vector (G.sub.Yave,G.sub.Xave) or the arrangement angle Abar to determine whether the barcode detection device 100 is steady or not. For example, if the average gradient vector (G.sub.Yave,G.sub.Xave) or the arrangement angle Abar changes between adjacent or successive image frames, it means that the barcode detection device 100 is still being operated by a user and thus the processor 12 does not recognize the current barcode or does not output the recognized result from the output interface 14 or does not perform the predetermined control.
[0045] As mentioned above, the average gradient vector (G.sub.Yave,G.sub.Xave) is used to calculate the arrangement direction Abar of the multiple bars of the barcode 90, e.g., calculating arctan(G.sub.Yave/G.sub.Xave), and then used to determine a scan direction of scanning the multiple bars closest to the arrangement direction Abar. However, the computation of arctan(G.sub.Yave/G.sub.Xave) is difficult to be implemented using the hardware. In some scenarios that a width deviation of the multiple bars of the barcode 90 caused by the angle difference θ is tolerable or ignorable, the processor 12 uses another way to determine a scan direction of scanning the multiple bars of the barcode 90 according to the X-component G.sub.Xave and the Y-component G.sub.Yave of the average gradient vector (G.sub.Yave,G.sub.Xave).
[0046] For example, when 53×|G.sub.Xave|>128×|G.sub.Yave| (i.e. within a transverse region as shown
[0047] It should be mentioned that although the gradient vector mentioned in the above embodiments is a gradient vector of multiple bars, the gradient vector is also a gradient vector of spaces between the multiple bars since each space is arranged between two adjacent bars.
[0048] As mentioned above, if the sensor is not steady during recognizing a barcode, an incorrect barcode may be recognized. Accordingly, the present disclosure further provides an optical barcode detection device (e.g.,
[0049] Although the disclosure has been explained in relation to its preferred embodiment, it is not used to limit the disclosure. It is to be understood that many other possible modifications and variations can be made by those skilled in the art without departing from the spirit and scope of the disclosure as hereinafter claimed.