Source: http://www.google.com.hk/patents/US5764798
Timestamp: 2013-05-25 09:34:24
Document Index: 783494965

Matched Legal Cases: ['ART) 306', 'ART) 304', 'ART) 702', 'ART) 701', 'ART) 306', 'ART) 306', 'ART) 1002', 'ART) 1001', 'ART) 304', 'ART) 306', 'ART) 1202', 'ART) 1201']

�M�Q US5764798 - Prioritized searching methods for finding a coded symbol in a digitized image - Google �M�Q�j�M �Ϥ� �a�� Play YouTube �s�D Gmail ���ݵw�� ��h »�i���M�Q�j�M | �������� | �n�J�i���M�Q�j�M�M�QAn electro-optical imaging system that utilizes an efficient search algorithm to find a coded symbol within a digitized image is provided. A digitized image of an area of an object having a coded symbol attached or printed thereon is created and stored in an image memory. A search algorithm is then activated...http://www.google.com.hk/patents/US5764798?utm_source=gb-gplus-share�M�Q US5764798 - Prioritized searching methods for finding a coded symbol in a digitized image���}��US5764798 A�X���������v�ӽЮѽs��08/617,026�o�G���1998�~6��9���ӽФ��1996�~3��18�� �u���v���1996�~3��18���o��HLingnan Liu��M�Q�v�HIntermec CorporationIntermec Ip Corp. ���M�Q������382/190382/312��ڱM�Q������G06K9/32 �X�@����G06K9/3233 �ڬw������G06K9/32R�ѦҤ��m�M�Q�ޥ� (21)�Q�H�U�M�Q�ޥ� (6)�~���s�����M�Q�ӼЧ� ���M�Q�ӼЧ��M�Q����T�� �ڬw�M�Q��Prioritized searching methods for finding a coded symbol in a digitized imageUS 5764798 A�K�n An electro-optical imaging system that utilizes an efficient search algorithm to find a coded symbol within a digitized image is provided. A digitized image of an area of an object having a coded symbol attached or printed thereon is created and stored in an image memory. A search algorithm is then activated to search for the coded symbol within the digitized image stored in the image memory. The search is limited to an area of the digitized image that is defined by boundary parameters. The search begins with the scan of an initial horizontal line of pixels that passes through the center of the search area, and an initial vertical line of pixels that also passes through the center of the search area. Subsequent horizontal and vertical lines of pixels are then scanned, one each subsequent line is located an integer multiple number of step sizes from one of the initial lines. Once the above described search pattern expands beyond the boundaries of the search area, the step sizes are reduced, and the search is continued.
What is claimed is: 1. A method of searching for a predetermined symbol within a predefined search area of a digitized image comprising the steps of: (a) scanning a first initial line of said digitized image located within said predefined search area, said first initial line passing through a first scan point located along a first boundary of said predefined search area; (b) changing a location of said first scan point such that a first subsequent line of said digitized image that is parallel to said first initial line and passes through said changed first scan point is located a distance equal to a product of a first multiplier and a first step size away from said first initial line in a first scan point change direction; (c) scanning said first subsequent line of said digitized image; (d) increasing a size of said first multiplier; and (e) determining whether to end said search for said predetermined symbol.
2. The method of claim 1 further comprising the step of: repeating said steps (b)-(e) until it is determined at said determining step to end said search for said predetermined symbol.
3. The method of claim 2, wherein said determining step further comprises the step of: determining to end said search for said predetermined symbol if one of said first initial line and said first subsequent line crosses at least a portion of said predetermined symbol.
4. The method of claim 2, wherein said determining step further comprises the step of: determining to end said search for said predetermined symbol if said first subsequent line of said digitized image does not pass through at least a portion of said predefined search area.
5. A method of searching for a predetermined symbol within a predefined search area of a digitized image comprising the steps of: (a) scanning a first initial line of said digitized image located within said predefined search area, said first initial line passing through a first scan point located along a first boundary of said predefined search area; (b) changing a location of said first scan point such that a first subsequent line of said digitized image that is parallel to said first initial line and passes through said changed first scan point is located a distance equal to a product of a first multiplier and a first step size away from said first initial line in a first scan point change direction; (c) scanning said first subsequent line of said digitized image; (d) increasing a size of said first multiplier; (e) determining whether to end said search for said predetermined symbol, said determining step comprising the steps of reducing said first step size and resetting said first multiplier if said first subsequent line does not pass through at least a portion of said predefined search area, and determining to end said search for said predetermined symbol if said first step size is less than a minimum first step size; and (f) repeating said steps (b)-(e) until it is determined at said determining step to end said search for said predetermined symbol.
6. The method of claim 1 further comprising the steps of: (f) changing said location of said first scan point again such that a first additional subsequent line of said digitized image that is parallel to said first initial line and passes through said again changed first scan point is located a distance equal to a product of said first multiplier and said first step size away from said first initial line in a direction that is opposite to said first scan point change direction; and (g) scanning said first additional subsequent line of said digitized image.
7. The method of claim 6 further comprising the step of: repeating said steps (b)-(g) until it is determined at said step (e) to end said search for said predetermined symbol.
9. A method of searching for a predetermined symbol within a predefined search area of a digitized image comprising the steps of: (a) scanning a first initial line of said digitized image located within said predefined search area, said first initial line passing through a first scan point located along a first boundary of said predefined search area; (b) changing a location of said first scan point such that a first subsequent line of said digitized image that is parallel to said first initial line and passes through said changed first scan point is located a distance equal to a product of a first multiplier and a first step size away from said first initial line in a first scan point change direction; (c) scanning said first subsequent line of said digitized image; (d) increasing a size of said first multiplier; (e) scanning a second initial line of said digitized image located within said predefined search area, said second initial line passing through a second scan point located along a second boundary of said predefined search area; (f) changing a location of said second scan point such that a second subsequent line of said digitized image that is parallel to said second initial line and passes through said changed second scan point is located a distance equal to a product of a second multiplier and a second step size away from said second initial line in a second scan point change direction; (g) scanning said second subsequent line of said digitized image; (h) increasing a size of said second multiplier; and (i) determining whether to end said search for said predetermined symbol.
10. A method of searching for a predetermined symbol within a predefined search area of a digitized image comprising the steps of: (a) scanning a first initial line of said digitized image located within said predefined search area, said first initial line passing through a first scan point located along a first boundary of said predefined search area; (b) changing a location of said first scan point such that a first subsequent line of said digitized image that is parallel to said first initial line and passes through said changed first scan point is located a distance equal to a product of a first multiplier and a first step size away from said first initial line in a first scan point change direction; (c) scanning said first subsequent line of said digitized image; (d) increasing a size of said first multiplier; (e) determining whether to end said search for said predetermined symbol; (f) scanning a second initial line of said digitized image located within said predefined search area, said second initial line passing through a second scan point located along a second boundary of said predefined search area; (g) changing a location of said second scan point such that a second subsequent line of said digitized image that is parallel to said second initial line and passes through said changed second scan point is located a distance equal to a product of a second multiplier and a second step size away from said second initial line in a second scan point change direction; (h) scanning said second subsequent line of said digitized image; (i) increasing a size of said second multiplier; and (j) repeating said steps (b)-(e) and (g)-(i) until it is determined at said step (e) to end said search for said predetermined symbol.
11. A method of searching for a predetermined symbol within a predefined search area of a digitized image comprising the steps of: (a) scanning a first initial line of said digitized image located within said predefined search area, said first initial line passing through a first scan point located along a first boundary of said predefined search area; (b) changing a location of said first scan point such that a first subsequent line of said digitized image that is parallel to said first initial line and passes through said changed first scan point is located a distance equal to a product of a first multiplier and a first step size away from said first initial line in a first scan point change direction; (c) scanning said first subsequent line of said digitized image; (d) increasing a size of said first multiplier; (e) changing said location of said first scan point again such that a first additional subsequent line of said digitized image that is parallel to said first initial line and passes through said again changed first scan point is located a distance equal to a product of said first multiplier and said first step size away from said first initial line in a direction that is opposite to said first scan point change direction; (f) scanning said first additional subsequent line of said digitized image; (g) scanning a second initial line of said digitized image located within said predefined search area, said second initial line passing through a second scan point located along a second boundary of said predefined search area; (h) changing said location of said second scan point such that a second subsequent line of said digitized image that is parallel to said second initial line and passes through said changed second scan point is located a distance equal to a product of a second multiplier and a second step size away from said second initial line in a second scan point change direction; (i) scanning said second subsequent line of said digitized image; (j) changing said location of said second scan point again such that a second additional subsequent line of said digitized image that is parallel to said second initial line and passes through said again changed second scan point is located a distance equal to a product of said second multiplier and said second step size away from said initial line in a direction that is opposite to said second scan point change direction; (k) scanning said second additional subsequent line of said digitized image; (l) increasing a size of said second multiplier; and (m) determining whether to end said search for said predetermined symbol.
12. A method of searching for a predetermined symbol within a predefined search area of a digitized image comprising the steps of: (a) scanning a first initial line of said digitized image located within said predefined search area, said first initial line passing through a first scan point located alone a first boundary of said Redefined search area; (b) changing a location of said first scan point such that a first subsequent line of said digitized image that is parallel to said first initial line and passes through said changed first scan point is located a distance equal to a product of a first multiplier and a first step size away from said first initial line in a first scan point change direction; (c) scanning said first subsequent line of said digitized image; (d) increasing a size of said first multiplier; (e) determining whether to end said search for said predetermined symbol; (f) changing said location of said first scan point again such that a first additional subsequent line of said digitized image that is parallel to said first initial line and passes through said again changed first scan point is located a distance equal to a product of said first multiplier and said first step size away from said first initial line in a direction that is opposite to said first scan point change direction; (g) scanning said first additional subsequent line of said digitized image; (h) scanning a second initial line of said digitized image located within said predefined search area, said second initial line passing through a second scan point located along a second boundary of said predefined search area; (i) changing said location of said second scan point such that a second subsequent line of said digitized image that is parallel to said second initial line and passes through said changed second scan point is located a distance equal to a product of a second multiplier and a second step size away from said second initial line in a second scan point change direction; (j) scanning said second subsequent line of said digitized image; (k) changing said location of said second scan point again such that a second additional subsequent line of said digitized image that is parallel to said second initial line and passes through said again changed second scan point is located a distance equal to a product of said second multiplier and said second step size away from said initial line in a direction that is opposite to said second scan point change direction; (l) scanning said second additional subsequent line of said digitized image; (m) increasing a size of said second multiplier; and (n) repeating said steps (b)-(g) and (i)-(m) until it is determined at said step (e) to end said search for said predetermined symbol.
16. An article of manufacture comprising a machine readable media embodying instructions for instructing said machine to perform a method of searching for a predetermined symbol within a predefined search area of a digitized image comprising the steps of: (a) scanning a first initial line of said digitized image located within said predefined search area, said first initial line passing through a first scan point located along a first boundary of said predefined search area; (b) changing a location of said first scan point such that a first subsequent line of said digitized image that is parallel to said first initial line and passes through said changed first scan point is located a distance equal to a product of a first multiplier and a first step size away from said first initial line in a first scan point change direction; (c) scanning said first subsequent line of said digitized image; (d) increasing a size of said first multiplier; (e) determining whether to end said search for said predetermined symbol; (f) changing said location of said first scan point again such that a first additional subsequent line of said digitized image that is parallel to said first initial line and passes through said again changed first scan point is located a distance equal to a product of said first multiplier and said first step size away from said first initial line in a direction that is opposite to said first scan point change direction; (g) scanning said first additional subsequent line of said digitized image; (h) scanning a second initial line of said digitized image located within said predefined search area, said second initial line passing through a second scan point located along a second boundary of said predefined search area; (i) changing said location of said second scan point such that a second subsequent line of said digitized image that is parallel to said second initial line and passes through said changed second scan point is located a distance equal to a product of a second multiplier and a second step size away from said second initial line in a second scan point change direction; (j) scanning said second subsequent line of said digitized image; (k) changing said location of said second scan point again such that a second additional subsequent line of said digitized image that is parallel to said second initial line and passes through said again changed second scan point is located a distance equal to a product of said second multiplier and said second step size away from said initial line in a direction that is opposite to said second scan point change direction; (l) scanning said second additional subsequent line of said digitized image; and (m) increasing a size of said second multiplier.
17. An apparatus for searching for a predetermined symbol within a predefined search area of a digitized image comprising: a memory device in which said digitized image is stored; means for setting a location of a first scan point equal to a first reference point located along a first boundary of said predefined search area; first changing means for changing said location of said first scan point such that a line of said digitized image that is perpendicular to said first boundary and passes through said first scan point is located, in a first scan point change direction, a distance equal to a product of a first multiplier and a first step size away from a line that is perpendicular to said first boundary and passes through said first reference point; means for scanning a line of said digitized image that is located within said predefined search area and passes through said first scan point; means for increasing a size of said first multiplier; and means for determining whether to end said search for said predetermined symbol.
18. The apparatus of claim 17 further comprising: second changing means for changing said location of said first scan point such that a line that is perpendicular to said first boundary and passes through said first scan point is located, in a direction opposite to said first scan point change direction, a distance equal to said product of said first multiplier and said first step size away from said line that is perpendicular to said first boundary and passes through said first reference point.
19. The apparatus of claim 18, wherein said scanning means further includes: means for scanning said line of said digitized image in a direction indicated by a scan direction indicator; and means for changing said direction indicated by said scan direction indictor.
20. An apparatus for searching for a predetermined symbol within a predefined search area of a digitized image comprising: a memory device in which said digitized image is stored; means for setting a location of a first scan point equal to a first reference point located along a first boundary of said predefined search area; first changing means for changing said location of said first scan point such that a line of said digitized image that is perpendicular to said first boundary and passes through said first scan point is located, in a first scan point change direction, a distance equal to a product of a first multiplier and a first step size away from a line that is perpendicular to said first boundary and passes through said first reference point; means for scanning a line of said digitized image that is located within said predefined search area and passes through said first scan point; means for increasing a size of said first multiplier; means for setting a location of a second scan point equal to a second reference point located along a second boundary of said predefined search area; second changing means for changing said location of said second scan point such that a line that is perpendicular to said second boundary and passes through said second scan point is located, in a second scan point change direction, a distance equal to a product of a second multiplier and a second step size away from a line that is perpendicular to said second boundary and passes through said second reference point; means for scanning a line of said digitized image that is located within said predefined search area, is perpendicular to said second boundary, and passes through said second scan point; means for increasing a size of said second multiplier; and means for determining whether to end said search for said predetermined symbol.
21. An apparatus for searching for a predetermined symbol within a predefined search area of a digitized image comprising: a memory device in which said digitized image is stored; means for setting a location of a first scan point equal to a first reference point located along a first boundary of said predefined search area; first changing means for changing said location of said first scan point such that a line of said digitized image that is perpendicular to said first boundary and passes through said first scan point is located, in a first scan point change direction, a distance equal to a product of a first multiplier and a first step size away from a line that is perpendicular to said first boundary and passes through said first reference point; means for scanning a line of said digitized image that is located within said predefined search area and passes through said first scan point; means for increasing a size of said first multiplier; means for setting a location of a second scan point equal to a second reference point located along a second boundary of said predefined search area; second chancing means for changing said location of said second scan point such that a line that is perpendicular to said second boundary and passes through said second scan point is located, in a second scan point change direction, a distance equal to a product of a second multiplier and a second step size away from a line that is perpendicular to said second boundary and passes through said second reference point; means for scanning a line of said digitized image that is located within said predefined search area, is perpendicular to said second boundary, and passes through said second scan point; means for increasing a size of said second multiplier; means for determining whether to end said search for said predetermined symbol; third changing means for changing said location of said first scan point such that a line that is perpendicular to said first boundary and passes through said first scan point is located, in a direction opposite to said first scan point change direction, a distance equal to said product of said first multiplier and said first step size away from said line that is perpendicular to said first boundary and passes through said first reference point; and fourth changing means for further changing said location of said second scan point such that a line that is perpendicular to said second boundary and passes through said second scan point is located, in a direction opposite to said second scan point change direction, a distance equal to said product of said second multiplier and said second step size away from said line that is perpendicular to said second boundary and passes through said second reference point.
22. The apparatus of claim 17, wherein said determining means further comprises: means for determining to end said search for said predetermined symbol if said line that is perpendicular to said first boundary and passes through said first scan point does not pass through at least a portion of said predefined search area.
23. The apparatus of claim 17, wherein said determining means further comprises: means for determining to end said search for said predetermined symbol if said line of said digitized image scanned by said scanning means crosses at least a portion of said predetermined symbol.
24. The apparatus of claim 17, wherein said determining means further comprises: means for reducing said first step size and resetting said first multiplier if said line that is perpendicular to said first boundary and passes through said first scan point does not pass through said predefined search area; and means for determining to end said search for said predetermined symbol if said first step size is less than a minimum first step size.
26. A method of searching for a plurality of symbols within a digitized image comprising the steps of: (a) initializing a step size to a value greater than one, said value calculated to minimize the number of steps needed to locate said plurality of symbols; (a) scanning an initial line of said digitized image; (b) calculating a subsequent line of said digitized image, said subsequent line parallel to said initial line and located a distance equal to a product of said step size and a multiplier away from said initial line; (c) scanning said subsequent line; (d) increasing the value of said multiplier; and (e) determining whether to end said search for said plurality of symbols.
28. An apparatus for searching for a plurality of symbols within a digitized image comprising: an image memory in which said digitized image is stored; and a processor and a program memory storing instructions to be performed by said processor, said instructions including: initializing a step size such that said plurality of symbols will be located with a minimal number of scans, defining an initial line of said digitized image, defining a scan line a distance equal to a product of a multiplier and a step size away from said initial line, scanning said scan line, increasing the size of said multiplier, and determining whether to end said search for said plurality of symbols.
Operation of a preferred embodiment of the symbol locator block 104 will now be described with reference to FIGS. 4a-4e. Operation of the preferred embodiment begins with an initialization process. More particularly, parameters defining a search area 302 of the digitized image 320 are received at step 402. As illustrated in FIG. 3, the search area 302 is preferably rectangular and defined by a horizontal start boundary 304, a horizontal end boundary 308, a vertical start boundary 306, and a vertical end boundary 310. The horizontal start boundary 304 is preferably defined by a Y-axis value (HORIZ.sub.-- START), and the horizontal end boundary 308 is preferably defined by another Y-axis value (HORIZ.sub.-- END). Likewise, the vertical start boundary 306 and the vertical end boundary 310 are preferably defined by two X-axis values, respectively (VERT.sub.-- START and VERT.sub.-- END).
A target pixel pattern stored in a target pattern array (TARGET.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) is also received at step 402. The target pattern array may be a single-dimensional array, and the number of pixels in the pattern may be defined by a pattern size parameter (PATTERN.sub.-- SIZE) also received at step 402. The target pixel pattern is characteristic of the type of symbol being searched for, and as the symbol locator block 104 scans lines of pixels stored in the image memory 18, it looks for a sequence of pixels that matches the target pixel pattern.
The target pixel pattern may be any pattern that is characteristic of the coded symbol being searched for. For example, all of the coded symbols illustrated in FIGS. 11a-11i include at least one dark colored bar or line that has a minimum thickness. The target pixel pattern for any of those coded symbols could comprise a series of sequential "dark" pixels in which the number of pixels in the series corresponds to the minimum thickness of a dark colored bar or line. A dark gray scale threshold parameter (DARK.sub.-- GRAY.sub.-- SCALE.sub.-- THRESHOLD) may also be received at step 402 defining a threshold gray scale value that distinguishes a "dark" pixel from a "light" pixel.
A minimum horizontal step size (HORIZ.sub.-- MIN.sub.-- STEP) and a minimum vertical step size (VERT.sub.-- MIN.sub.-- STEP) are also received at step 402. As will become apparent, the minimum horizontal step size (HORIZ.sub.-- MIN.sub.-- STEP) and the minimum vertical step size (VERT.sub.-- MIN.sub.-- STEP) define the fineness of the final iteration of the search pattern generated by the symbol locator block 104. To ensure that a coded symbol located within the search area is not missed, both minimum step sizes should be smaller than the target pixel pattern.
An initial horizontal line value (HORIZ.sub.-- CENT) and an initial vertical line value (VERT.sub.-- CENT) are calculated at step 404. The initial horizontal line value (HORIZ.sub.-- CENT) is preferably a Y-axis value that defines a horizontal line passing through the center of the search area. Likewise, the initial vertical line value (VERT.sub.-- CENT) is preferably an X-axis value that defines a vertical line passing through the center of the search area.
A horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) and a vertical step size (VERT.sub.-- STEP.sub.-- SIZE) are calculated at step 406. As will become apparent, the horizontal step size and the vertical step size define the coarseness of each iteration of the search pattern generated by the symbol locator block 104. For example, the initial value of the horizontal step size may be equal to one-fourth the length of a vertical boundary of the search area 306, 310. Likewise, the initial value of the vertical step size may be equal to one-fourth the length of a horizontal boundary of the search area 304, 308.
A multiple targets flag (MULT.sub.-- TARGETS.sub.-- FLAG) is set equal to "false" at step 408, indicating that only one symbol is to be searched for within the search area. Also, an orientation flag (ORIENT.sub.-- FLAG) is set to "horizontal" at step 408, indicating that the search for the coded symbol will begin with the scan of a horizontal line of pixels stored in the image memory 18. In addition, a horizontal direction flag (HORIZ.sub.-- DIR.sub.-- FLAG) is set equal to "forward" at step 408, indicating that the initial horizontal line of pixels will be scanned in the forward direction. Likewise, a vertical direction flag (VERT.sub.-- DIR.sub.-- FLAG) is set equal to "forward" at step 408, indicating that the initial vertical line of pixels will be scanned in the forward direction. The forward direction is away from a start boundary and toward an end boundary. The reverse direction is away from an end boundary and toward a start boundary.
The next horizontal line value (Y.sub.1) and the next vertical line value (X.sub.1) are initialized at step 412. The next horizontal line value (Y.sub.1) defines a location along the Y-axis through which the next horizontal line of pixels to be scanned passes. Likewise, the next vertical line value (X.sub.1) defines a location along the X-axis through which the next vertical line of pixels to be scanned passes. Preferably, the next horizontal line value (Y.sub.1) is initially set equal to the initial horizontal line value (HORIZ.sub.-- CENT), and the next vertical line value (X.sub.1) is initially set equal to the initial vertical line value (VERT.sub.-- CENT).
A horizontal multiplier (HORIZ.sub.-- MULT) and a vertical multiplier (VERT.sub.-- MULT) are initialized at step 410. As will be seen, the horizontal multiplier is utilized to move the next horizontal line value (Y.sub.1) away from the initial horizontal line value (HORIZ.sub.-- CENT) after scanning a horizontal line of pixels. Likewise, the vertical multiplier is utilized to move the next vertical line value (X.sub.1) away from the initial vertical line value (VERT.sub.-- CENT) after scanning a vertical line of pixels.
A horizontal line counter (HORIZ.sub.-- LINE.sub.-- COUNT) and a vertical line counter (VERT.sub.-- LINE.sub.-- COUNT) are initialized at step 410. As will be seen, the horizontal line counter (HORIZ.sub.-- LINE.sub.-- COUNT) is incremented each time the next horizontal line value (Y.sub.1) is changed, and the vertical line counter (VERT.sub.-- LINE.sub.-- COUNT) is incremented each time the next vertical line value (X.sub.1) is changed. As will also be seen, the horizontal line counter is utilized to ensure that the horizontal multiplier is incremented only after two horizontal lines of pixels are scanned. Likewise, the vertical line counter is utilized to ensure that the vertical multiplier is incremented only after two vertical lines of pixels are scanned.
A pixel counter (PIXEL.sub.-- COUNT) is also initialized at step 410. The pixel counter keeps track of the total number of pixels found during the scan of one line that match the target pixel pattern stored in the target pattern array.
After completing the above described initialization process, a line of pixels is scanned. Initially, it is determined whether to scan a horizontal or a vertical line at step 420. If the orientation flag (ORIENT.sub.-- FLAG) is equal to "horizontal" at step 420, a horizontal line is scanned. If, on the other hand, the orientation flag is equal to "vertical" at step 420, a vertical line is scanned.
Assuming that the orientation flag (ORIENT.sub.-- FLAG) is equal to "horizontal" at step 420, processing continues at step 422, where it is determined whether the horizontal line will be scanned in a "forward" or a "reverse" direction. If the horizontal direction flag (HORIZ.sub.-- DIR.sub.-- FLAG) is equal to "forward" at step 424, the X-axis value (X) of the current scan point (X.sub.s,Y.sub.s) is set equal to the vertical start boundary (VERT.sub.-- START), and the Y-axis value (Y.sub.s) of the current scan point (X.sub.s,Y.sub.s) is set equal to the next horizontal line value (Y.sub.1) at step 424. If, on the other hand, the horizontal direction flag is equal to "reverse" at step 424, the X-axis value (X.sub.s) of the current scan point (X.sub.s,Y.sub.s) is set equal to the vertical end boundary (VERT.sub.-- END), and the Y-axis value (Y.sub.s) of the current scan point (X.sub.s,Y.sub.s) is set equal to the next horizontal line value (Y.sub.1) at step 426.
A "scan a line" routine is then called at step 427. As explained in more detail below, the "scan a line" routine scans a line of pixels stored in the image memory 18 beginning at the current scan point (X.sub.s,Y.sub.s). The line is oriented as indicated by the orientation flag (ORIENT.sub.-- FLAG). Moreover, if the orientation flag (ORIENT.sub.-- FLAG) is equal to "horizontal," scanning occurs in the direction indicated by the horizontal direction flag (HORIZ.sub.-- DIR.sub.-- FLAG). If the orientation flag is equal to "vertical," scanning occurs in the direction indicated by the vertical direction flag (VERT.sub.-- DIR.sub.-- FLAG). While scanning a line, the "scan a line" routine searches for a pattern of pixels that matches the target pixel pattern stored in the target pattern array (TARGET.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!). If the target pattern is found, the "scan a line" routine sets a hit flag (HIT.sub.-- FLAG) equal to "true."
After the "scan a line" routine completes processing, the hit flag (HIT.sub.-- FLAG) is examined at stop 428 to determined whether the target pixel pattern was found. If the hit flag (HIT.sub.-- FLAG) indicates that the target pixel pattern was found and the multiple targets flag (MULT.sub.-- TARGETS.sub.-- FLAG) indicates that only one symbol is being searched for, operation of the symbol locator block ends at step 432. Otherwise, the horizontal direction flag (HORIZ.sub.-- DIR.sub.-- FLAG) is changed at steps 434, 435, 438.
After scanning a horizontal line of pixels as described above, the next horizontal line value (Y.sub.1) is changed at steps 440-452. More particularly, the horizontal line counter (HORIZ.sub.-- LINE.sub.-- COUNT) is incremented at step 440. If the resulting value of the horizontal line counter is an even integer at step 442, the next horizontal line value (Y.sub.1) is set equal to the initial horizontal line value (HORIZ.sub.-- CENT) minus the product of the horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) and the horizontal multiplier (HORIZ.sub.-- MULT) at step 450. This means that the next horizontal line of pixels to be scanned will be located an integer number (HORIZ.sub.-- MULT) of horizontal step sizes (HORIZ.sub.-- STEP.sub.-- SIZE) below the initial horizontal line value (HORIZ.sub.-- CENT).
If the value of the horizontal line counter is an odd integer at step 442, the horizontal multiplier (HORIZ.sub.-- MULT) is incremented at step 444. If the resulting value of the horizontal multiplier is an odd integer at step 446, the current horizontal line value (Y.sub.1) is set equal to the sum of the initial horizontal line value (HORIZ.sub.-- CENT) and the product of the horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) and the horizontal multiplier (HORIZ.sub.-- MULT) at step 452. This means that the next horizontal line of pixels to be scanned will be located an integer number (HORIZ.sub.-- MULT) of horizontal step sizes (HORIZ.sub.-- STEP.sub.-- SIZE) above the initial horizontal line value (HORIZ.sub.-- CENT).
If, on the other hand, the value of the horizontal multiplier is an even integer at step 446, the horizontal line counter (HORIZ.sub.-- LINE.sub.-- COUNT) is incremented two times at steps 448 and 440, causing the horizontal multiplier (HORIZ.sub.-- MULT) to increment to the next odd valued integer at step 444. Thus, even integer values of the horizontal multiplier (HORIZ.sub.-- MULT) are not utilized to change the value of the next horizontal line value (Y.sub.1).
After changing the next horizontal line value (Y.sub.1) as described above, it is determined whether the next horizontal line value (Y.sub.1) is within the search area 302 at steps 454-464. More particularly, it is determined whether the next horizontal line value (Y.sub.1) is greater than the value of the horizontal start boundary (HORIZ.sub.-- START) 306 but less than the value of the horizontal end boundary (HORIZ.sub.-- END) 310 at step 454. If so, the orientation flag (ORIENT.sub.-- FLAG) is set to "vertical" at step 464, indicating that the next line of pixels to be scanned will be a vertical line. Processing then returns to step 420 to scan a vertical line.
If, however, it is determined at step 454 that the next horizontal line value (Y.sub.1) is not located within the search area, the horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) is reduced at step 456, and it is determined whether the horizontal step size is less than the minimum horizontal step size (HORIZ.sub.-- MIN.sub.-- STEP) at step 458. If so, operation of the symbol locator block 104 ends at step 460. Otherwise, the horizontal multiplier (HORIZ.sub.-- MULT) and the horizontal line counter (HORIZ.sub.-- LINE.sub.-- COUNT) are reset at step 462; the next horizontal line value (Y1) is set equal to the sum of the initial horizontal line value (HORIZ.sub.-- CENT) and the horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) at step 462; the orientation flag (ORIENT.sub.-- FLAG) is set to "vertical" at step 464; and processing returns to step 420 to scan a vertical line.
If it is determined at step 420 that the orientation flag (ORIENT.sub.-- FLAG) is equal to "vertical," processing continues at step 470, where it is determined whether the vertical line will be scanned in the "forward" or the "reverse" direction. If the vertical direction flag (VERT.sub.-- DIR.sub.-- FLAG) is equal to "forward" at step 470, the X-axis value (X.sub.s) of the current scan point (X.sub.s,Y.sub.s) is set equal to the next vertical line value (X.sub.1), and the Y-axis value (Y.sub.s) of the current scan point (X.sub.s,Y.sub.s) is set equal to the horizontal start boundary (HORIZ.sub.-- START) at step 474. If, on the other hand, the vertical direction flag (VERT.sub.-- DIR.sub.-- FLAG) is equal to "reverse" at step 470, the X-axis value (X.sub.s) of the current scan point (X.sub.s,Y.sub.s) is set equal to the next vertical line value (X.sub.1), and the Y-axis value (Y.sub.s) of the current scan point (X.sub.s,Y.sub.s) is set equal to the horizontal end boundary (HORIZ.sub.-- END) at step 472. The "scan a line" routine is then called at step 475.
After the "scan a line" routine completes processing, the hit flag (HIT.sub.-- FLAG) is examined at step 476 to determined whether the target pixel pattern stored in the target pattern array (TARGET.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) was found. If the hit flag (HIT.sub.-- FLAG) indicates that the target pixel pattern was found and the multiple targets flag (MULT.sub.-- TARGETS.sub.-- FLAG) indicates that only one target is being searched for, the symbol locator block ends at step 479. Otherwise, the symbol locator block changes the vertical direction flag (VERT.sub.-- DIR.sub.-- FLAG) at steps 480, 482, 484.
After scanning a vertical line of pixels as described above, the next vertical line value (X.sub.1) is changed at steps 486-498. More particularly, the vertical line counter (VERT.sub.-- LINE.sub.-- COUNT) is incremented at step 486. If the resulting value of the vertical line counter is an even integer at step 488, the next vertical line value (X.sub.1) is set equal to the initial vertical line value (VERT.sub.-- CENT) minus the product of the vertical step size (VERT.sub.-- STEP.sub.-- SIZE) and the vertical multiplier (VERT.sub.-- MULT) at step 496. This means that the next vertical line of pixels to be scanned will be located an integer number (VERT.sub.-- MULT) of vertical step sizes (VERT.sub.-- STEP.sub.-- SIZE) to the left of the initial vertical line value (VERT.sub.-- CENT).
If the value of the vertical line counter is an odd integer at step 488, the vertical multiplier (VERT.sub.-- MULT) is incremented at step 492. If the resulting value of the vertical multiplier is an odd integer at step 492, the next vertical line value (X.sub.1) is set equal to the sum of the initial vertical line value (VERT.sub.-- CENT) and the product of the vertical step size (VERT.sub.-- STEP.sub.-- SIZE) and the vertical multiplier (VERT.sub.-- MULT) at step 496. This means that the next vertical line of pixels to be scanned will be located an integer number (VERT.sub.-- MULT) of vertical step sizes (VERT.sub.-- STEP.sub.-- SIZE) to the right of the initial vertical line value (VERT.sub.-- CENT).
If, on the other hand, the value of the vertical multiplier is an even integer at step 492, the vertical line counter (VERT.sub.-- LINE.sub.-- COUNT) is incremented two times at steps 494 and 486, causing the vertical multiplier (VERT.sub.-- MULT) to increment to the next odd valued integer at step 490. Thus, even integer values of the vertical multiplier (VERT.sub.-- MULT) are not utilized to change the value of the next vertical line value (X.sub.1).
After changing the next vertical line value (X.sub.1) as described above, it is determined whether the next vertical line value (X.sub.1) is within the search area 302 at steps 500-508. More particularly, it is determined whether the next vertical line value (X.sub.1) is greater than the value of the vertical start boundary (VERT.sub.-- START) 304 but less than the value of the vertical end boundary (VERT.sub.-- END) 308 at step 500. If so, the orientation flag (ORIENT.sub.-- FLAG) is set to "horizontal" at step 510, indicating that the next line of pixels to be scanned will be a horizontal line. Processing then returns to step 420 to scan a horizontal line.
If, however, it is determined at step 500 that the next vertical line value (X.sub.1) is not located within the search area, the vertical step size (VERT.sub.-- STEP.sub.-- SIZE) is reduced at step 502, and it is determined whether the vertical step size is less than the minimum vertical step size (VERT.sub.-- MIN.sub.-- STEP) at step 504. If so, operation of the symbol locator block 104 ends at step 506. Otherwise, the vertical multiplier (VERT.sub.-- MULT) and the vertical line counter (VERT.sub.-- LINE.sub.-- COUNT) are reset at step 508; the next vertical line value (X.sub.1) is set equal to the sum of the initial vertical line value (VERT.sub.-- CENT) and the vertical step size (VERT.sub.-- STEP.sub.-- SIZE) at step 508; the orientation flag (ORIENT.sub.-- FLAG) is set to "horizontal" at step 510; and processing returns to step 420 to scan a horizontal line.
An exemplary operation of the "scan a line" routine will now be described with reference to FIG. 5a. A current point (X,Y) defining the pixel of the digitized image stored in the image memory 18 that is currently being read is initially set equal to the current scan point (X.sub.s,Y.sub.s) at step 604. A hit flag (HIT.sub.-- FLAG) is also initialized at step 604 by setting it to "false," indicating that the target pixel pattern stored in the target pattern array (TARGET.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) has not yet been found.
A "pixel pattern matching" subroutine is then called at step 606. As will be described below, the "pixel pattern matching" subroutine determines whether the pixel located at the current point (X,Y) within the digitized image stored in the image memory 18 matches the pixel in the target pixel pattern array pointed to by the pixel counter (PIXEL-COUNT). After the "pixel pattern matching" subroutine completes processing, it is determined whether the current point (X,Y) matches the last pixel in the target pixel pattern at step 608. If so, the hit flag (HIT.sub.-- FLAG) is set equal to "true" at step 610, and operation of the "scan a line" routine ends at step 612. Otherwise, the "scan a line" routine examines the orientation flag (ORIENT.sub.-- FLAG) at step 614 to determine whether the line being scanned is a horizontal or a vertical line.
If the line being scanned is a horizontal line, the "scan a line" routine increments or decrements the X-axis value (X) of the current point (X,Y) at steps 618 or 620, depending on whether the horizontal direction flag (HORIZ.sub.-- DIR.sub.-- FLAG) is set to "forward" or "reverse." The "scan a line" routine then determines whether the X-axis value (X) of the current point (X,Y) is within the search area at steps 622 or 624. If so, the "scan a line" routine returns to the step of calling the "pixel pattern matching" subroutine at step 606. Otherwise, the "scan a line" routine ends at step 626.
An exemplary operation of the "pixel pattern matching" subroutine will now be described with reference to FIGS. 5b-5c. The subroutine begins by setting a pattern found flag (PATTERN.sub.-- FOUND) equal to "false" at step 640, indicating that the target pixel pattern stored in the target pattern array (PIXEL.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) has not yet been found. It is then determined at step 642 whether the pixel of the digitized image stored in the image memory 18 at the current point (X,Y) is a "dark" or "light" pixel. As shown in FIG. 5b, that determination is made by comparing the gray scale value of the pixel located at the current point (X,Y) with the minimum dark gray scale value received at step 402. The result of that determination is stored in the element of the line pattern array (LINE.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) pointed to by the pixel counter (PIXEL.sub.-- COUNT) at step 644 or 646. The most recent series of pixels located along the line of pixels currently being scanned that match corresponding pixels in the target pattern are stored in the line pattern array. Like the target pattern array, the line pattern array (LINE.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) can be a single dimensional array.
The pixel at the current point (X,Y) is then compared to the pixel stored in the target pattern array at the element pointed to by the pixel counter (TARGET.sub.-- PATTERN PIXEL.sub.-- COUNT!) at step 648. If there is a match at step 648, the pixel counter is incremented at step 650, and it is determined whether the pixel counter (PIXEL.sub.-- COUNT) is larger than the target pattern size (PATTERN.sub.-- SIZE) at step 652. If so, a pattern of pixels matching the target pixel pattern has been found, and the pattern found flag (PATTERN.sub.-- FOUND) is set equal to "true" at step 654. If the pixel counter is not larger than the target pattern size, all of the pixels in the target pixel pattern have not yet been found, and processing returns to the "scan a line" routine at step 656.
If there is not a match at step 648, it is determined whether any portion of the previously scanned pixels stored in the line pattern array (LINE.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) match a corresponding portion of the target pixel pattern stored in the target pattern array (TARGET.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!). More particularly, the sequence of pixels stored in the line pattern array beginning at the second element (LINE.sub.-- ARRAY 1!) and ending at the element pointed to by the pixel counter (LINE.sub.-- ARRAY PIXEL.sub.-- COUNT!) are compared to the pixels stored in the target pattern array beginning at the first element (TARGET.sub.-- PATTERN 0!) and ending at an element pointed to by the pixel counter minus one (TARGET.sub.-- PATTERN PIXEL.sub.-- COUNT-1!) at steps 662, 664, 666. If the above described sequence in the line pattern array matches the above described sequence in the target pattern array, the pixel stored in the first element of the line pattern array (LINE.sub.-- PATTERN 0!) is discarded, and the pixel in every remaining element of the line pattern array is moved to the preceding element of the line pattern array at steps 672, 674, 676. For example, the pixel stored in the second element of the line pattern array (LINE.sub.-- PATTERN 1!) is moved to the first element of the line pattern array (LINE.sub.-- PATTERN 0!); the pixel stored in the third element of the line pattern array (LINE.sub.-- PATTERN 2!) is moved to the second element of the line pattern array (LINE.sub.-- PATTERN 1!); etc.
If the above described sequence in the line pattern array does not match the above described sequence in the target pattern array, repeatedly smaller sequences of pixels stored in the line pattern array are compared to equally smaller sequences of corresponding pixels stored in the target pattern array at steps 660, 662, 664, 666, 668. This continues until either matching sequences are found, or it is determined that no sequence of pixels stored in the line pattern array (LINE.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) matches a sequence of pixels stored in the target pattern array (TARGET.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!). If matching sequences are found, the matching sequence is stored in the first elements of the line pattern array (LINE.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) at steps 672, 674, 676, and the pixel counter (PIXEL.sub.-- COUNT) is set equal to the next empty element in the line pattern array at step 678. If, on the other hand, it is determined that no sequence of pixels stored in the line pattern array (LINE.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) matches a sequence of pixels stored in the target pattern array (TARGET.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!), the pixel counter (PIXEL.sub.-- COUNT) is set to zero at step 678.
An exemplary search pattern generated by the preferred embodiment of the symbol locator block illustrated in FIGS. 4a-4e is shown in FIGS. 6a-6m. The search area shown in FIGS. 6a-6m is bounded by a horizontal start boundary (HORIZ.sub.-- START) 702, a horizontal end boundary (HORIZ.sub.-- END) 704, a vertical start boundary (VERT.sub.-- START) 701, and a vertical end boundary (VERT.sub.-- END) 703. Because the orientation flag (ORIENT.sub.-- FLAG) is initially set equal to "horizontal" and the horizontal direction flag (HORIZ.sub.-- DIR.sub.-- FLAG) is initially set equal to "forward" at step 408, the process illustrated in FIGS. 4a-4e begins by scanning an initial horizontal line 706 in the forward direction as shown in FIG. 6a. An initial vertical line 708 is then scanned in the forward direction as shown in FIG. 6b. Subsequent horizontal and vertical lines 710, 712, 714, 716 are then scanned as shown in FIGS. 6c-6f. Each subsequent horizontal line 710, 714 is located an odd multiple of horizontal step sizes either above or below the initial horizontal line 706. Also, the direction in which each subsequent horizontal line 710, 714 is scanned is alternated between forward and reverse. Likewise, each subsequent vertical line 712, 716 is located an odd multiple of vertical step sizes either to the right or left of the initial vertical line 708, and the direction in which each subsequent vertical line 712, 716 is scanned is alternated between forward and reverse.
Once it is determined that a subsequent horizontal line would be located on or outside a horizontal boundary 702, 704 at step 500 and the horizontal line step size (HORIZ.sub.-- STEP.sub.-- SIZE) is reduced at step 502, a series of additional horizontal lines 718, 722, 726, 730 are scanned. Those additional horizontal lines are located an odd multiple of the reduced horizontal step size above and below the initial horizontal line 706 as shown in FIGS. 6g, 6i, 6k, and 6m. The direction in which those additional lines are scanned is alternated between forward and reverse.
Likewise, once it is determined that a subsequent vertical line would be located on or outside a vertical boundary 701, 703 at step 454 and the vertical step size (VERT.sub.-- STEP.sub.-- SIZE) is reduced at step 456, a series of additional vertical lines 720, 724, 728 are scanned. Those additional vertical lines are located an odd multiple of the reduced vertical step size to the right or left of the initial vertical line 708 as shown in FIGS. 6h, 6j, and 6l, and the direction in which those additional lines is scanned is alternated between forward and reverse.
Assuming that the predetermined symbol is not found, the above search pattern would continue until either the horizontal step size becomes smaller than the minimum horizontal step size or the vertical step size becomes smaller than the minimum vertical step size. In the exemplary pattern shown in FIGS. 6a-6m, the horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) is reduced to a value that is less than the minimum horizontal step size (HORIZ.sub.-- MIN.sub.-- STEP) after line 730 is scanned, which causes the symbol locator block 104 to terminate processing at step 460.
Operation of a first alternative embodiment of the symbol locator block 104 will now be described with reference to FIGS. 7a-7d. Operation of the first alternative embodiment of the symbol locator block 104 begins with an initialization process that is similar to the initialization process of the preferred embodiment as described above with two exceptions. First, a single direction flag (DIR.sub.-- FLAG) is utilized in the first alternative embodiment, rather than a horizontal direction flag (HORIZ.sub.-- DIR.sub.-- FLAG) and a vertical direction flag (VERT.sub.-- DIR.sub.-- FLAG) as used in the preferred embodiment. Second, the first alternative embodiment initially sets the orientation flag (ORIENT.sub.-- FLAG) equal to "vertical" at step 808.
After completing the above described initialization process, a line of pixels is scanned. Initially, it is determined whether to scan a horizontal or a vertical line at step 820. If the orientation flag (ORIENT.sub.-- FLAG) is equal to "horizontal" at step 820, the X-axis value (X.sub.s) of the current scan point (X.sub.s, Y.sub.s) is set equal to the initial vertical line value (VERT.sub.-- CENT), and the Y-axis value (Y.sub.s) of the current scan point (X.sub.s, Y.sub.s) is set equal to the next horizontal line value (Y.sub.1) at step 822. If, on the other hand, the orientation flag (ORIENT.sub.-- FLAG) is equal to "vertical" at step 820, the X-axis value (X.sub.s) of the current scan point (X.sub.s, Y.sub.s) is set equal to the next vertical line value (X.sub.1), and the Y-axis value (Y.sub.s) of the current scan point (X.sub.s, Y.sub.s) is set equal to the initial horizontal line value (HORIZ.sub.-- CENT) at step 824.
The "scan a line" routine is then called at step 828. Operation of the "scan a line" routine has been described above with reference to FIGS. 6a-6c. After the "scan a line" routine completes processing, the hit flag (HIT.sub.-- FLAG) is examined at step 830 to determine whether the target pixel pattern stored in the target pattern array (TARGET.sub.-- PATTERN 0:PATTERN.sub.-- SIZE!) was found. If the hit flag indicates that the target pixel pattern was found and the multiple targets flag (MULT TARGETS.sub.-- FLAG) indicates that only one symbol is being searched for, operation of the symbol locator block ends at step 834. Otherwise, the direction flag (DIR.sub.-- FLAG) is changed at steps 840, 842, 844, and the "scan a line" routine is called again at step 828, and the steps of determining whether the target pixel pattern was found or the multiple targets flag is equal to "true" are repeated.
Assuming that the target pixel pattern was not found or that the multiple targets flag is equal to "true," it is next determined whether the orientation flag (ORIENT.sub.-- FLAG) is equal to "horizontal" at step 846. If it is determined at step 846 that the orientation flag is equal to "horizontal," the orientation flag is set equal to "vertical" at step 848, and the value of the next horizontal line value (Y.sub.1) is changed. The steps for changing the next horizontal line value (Y.sub.1) are illustrated by steps 850-862 of FIG. 7c, and are similar to the steps utilized by the preferred embodiment to change the next horizontal line value (Y.sub.1), which are described above with reference to steps 440-452 of FIG. 4d.
After changing the next horizontal line value (Y.sub.1) as described above, it is determined whether the next horizontal line value is within the search area at steps 864-872. More particularly, it is determined whether the next horizontal line value (Y.sub.1) is greater than the horizontal start boundary (HORIZ.sub.-- START) 306 but less than the horizontal end boundary (HORIZ.sub.-- END) 310 at steps 864, 866. If so, processing returns to step 820 to scan a new line.
If, however, it is determined at steps 864, 866 that the next horizontal line value (Y.sub.1) is not located within the search area, the horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) is reduced at step 868, and it is determined whether the horizontal step size is less than the minimum horizontal step size (HORIZ.sub.-- MIN.sub.-- STEP) at step 870. If so, operation of the symbol locator block 104 ends at step 906. Otherwise, the horizontal multiplier (HORIZ.sub.-- MULT) and the horizontal line counter (HORIZ.sub.-- LINE.sub.-- COUNT) are reset at step 872; the next horizontal line value (HORIZ.sub.-- ONE) is set equal to the sum of the initial horizontal line value (HORIZ.sub.-- CENT) and the horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) at step 872; and processing returns to step 820 to scan a new line.
If it is determined at step 846 that the orientation flag is equal to "vertical," the orientation flag is set equal to "horizontal" at step 880, and the value of the next vertical line value (X.sub.1) is changed. The steps utilized to change the next vertical line value (X.sub.1) are illustrated by steps 882-894 of FIG. 7c, and are similar to the steps utilized by the preferred embodiment to change the next vertical line value (X.sub.1), which are described above with reference to steps 486-498 of FIG. 4e.
After changing the next vertical line value (X.sub.1) as described above, it is determined whether the next vertical line value is within the search area at steps 864-872. More particularly, it is determined whether the next vertical line value (X.sub.1) is greater than the vertical start boundary (VERT.sub.-- START) 306 but less than the vertical end boundary (VERT.sub.-- END) 310 at steps 896, 898. If so, processing returns to step 820 to scan a new line.
If, however, it is determined at steps 896, 898 that the next vertical line value (X.sub.1) is not located within the search area, the vertical step size (VERT.sub.-- STEP.sub.-- SIZE) is reduced at step 902, and it is determined whether the vertical step size is less than the minimum vertical step size (VERT.sub.-- MIN.sub.-- STEP) at step 904. If so, operation of the symbol locator block 104 ends at step 906. Otherwise, the vertical multiplier (VERT.sub.-- MULT) and the vertical line counter (VERT.sub.-- LINE.sub.-- COUNT) are reset at step 908; the next vertical line value (X.sub.1) is set equal to the sum of the initial vertical line value (VERT.sub.-- CENT) and the vertical line size (VERT.sub.-- STEP.sub.-- SIZE) at step 908; and processing returns to step 820 to scan a new line.
An exemplary search pattern generated by the first alternative embodiment of the symbol locator block is shown in FIGS. 8a-8l. The search area shown in FIGS. 8a-8l is bounded by a horizontal start boundary (HORIZ.sub.-- START) 1002, a horizontal end boundary (HORIZ.sub.-- END) 1004, a vertical start boundary (VERT.sub.-- START) 1001, and a vertical end boundary (VERT.sub.-- END) 1003. Because the orientation flag (ORIENT.sub.-- FLAG) is initially set equal to "vertical" at step 408, the process illustrated in FIGS. 7a-7d scans an initial vertical line 1006/1008, first in the forward direction 1006 and then in the reverse direction 1008 as illustrated in FIGS. 8a-b. An initial horizontal line 1010/1012 is then scanned, first in the reverse direction 1010 and then in the forward direction 1012 as illustrated in FIGS. 8c-8d.
In the exemplary pattern shown in FIGS. 8a-8l, the horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) is reduced to a value that is less than the minimum horizontal step size (HORIZ.sub.-- MIN.sub.-- STEP) after line 1026/1028 is scanned, which causes the symbol locator block 104 to terminate processing at step 906. However, if the reduced value of the horizontal step size was not less than the minimum horizontal step size after line 1026/1028 was scanned, a series of additional vertical lines would be scanned, and those additional vertical lines would be located an odd multiple of the reduced vertical step size to the right or left of the initial vertical line 1006/1008. Likewise, a series of additional horizontal lines would be scanned, and those additional horizontal lines would be located an odd multiple of a reduced horizontal step size above or below the initial horizontal line 1010/1012.
Operation of a second alternative embodiment of the symbol locator block 104 will now be described with reference to FIGS. 9a-9e. Operation of the second alternative embodiment of the symbol locator block 104 begins with an initialization process that is similar to the initialization process of the preferred embodiment as described above with the following exceptions. The second alternative embodiment receives a horizontal step size (HORIZ.sub.-- STEP.sub.-- SIZE) and a vertical step size (VERT.sub.-- STEP.sub.-- SIZE) at step 1102, rather than calculating those parameters. Also, the second alternative embodiment does not receive minimum step size parameters. In addition, the second alternative embodiment initially sets the orientation flag (ORIENT.sub.-- FLAG) equal to "vertical" at step 1106.
After completing the above described initialization process, the second alternative embodiment scans a series of horizontal and vertical lines. Like the preferred embodiment, the second alterative embodiment changes the next horizontal line value (Y.sub.1) after scanning a horizontal line, and changes the next vertical line value (X.sub.1) after scanning a vertical line. Unlike the preferred embodiment, however, the second preferred embodiment simply stops processing at step 1148 if it is determined at step 1144 that the next horizontal line value (Y.sub.1) is less than or equal to the horizontal start boundary (HORIZ.sub.-- START) 304 or greater than or equal to the horizontal end boundary (HORIZ.sub.-- END) 308. Likewise, the second preferred embodiment stops processing at step 1183 if it is determined at step 1182 that the next vertical line value (X.sub.1) is less than or equal to the vertical start boundary (VERT.sub.-- START) 306 or greater than or equal to the vertical end boundary (VERT.sub.-- END) 310.
An exemplary search pattern generated by the second alternative embodiment of the symbol locator block is shown in FIGS. 10a-10f. The search area shown in FIGS. 10a-10f is bounded by a horizontal start boundary (HORIZ.sub.-- START) 1202, a horizontal end boundary (HORIZ.sub.-- END) 1204, a vertical start boundary (VERT.sub.-- START) 1201, and a vertical end boundary (VERT END) 1203. Because the orientation flag (ORIENT.sub.-- FLAG) is initially set equal to "vertical" and the vertical direction flag (VERT.sub.-- DIR.sub.-- FLAG) is initially set equal to "forward" at step 1106, the process illustrated in FIGS. 9a-9e scans an initial vertical line 1206 in the forward direction as shown in FIG. 10a. An initial horizontal line 1208 is then scanned in the forward direction as shown in FIG. 10b. Subsequent horizontal and vertical lines 1210, 1212, 1214, 1216 are then scanned as shown in FIGS. 10c-10f. Each subsequent horizontal line 1212, 1216 is located an odd multiple of horizontal line step sizes either above or below the initial horizontal line 1208. Also, the direction in which each subsequent horizontal line 1212, 1216 is scanned is alternated between forward and reverse. Likewise, each subsequent vertical line 1210, 1214 is located an odd multiple of vertical step sizes either to the right or left of the initial vertical line 1206, and the direction in which each subsequent vertical line 1210, 1214 is scanned is alternated between forward and reverse. Once it is determined that a subsequent horizontal line would be located on or outside a horizontal boundary 1202, 1204 at step 1144 or that a subsequent vertical line would be located on or outside a vertical boundary 1201, 1203 at step 1182, processing ends at step 1148 or 1183.
Having thus described several embodiments of the invention, it should be apparent to those skilled in the art that certain advantages have been achieved. It should also be appreciated that various modifications, adaptations, and alternative embodiments thereof may be made within the scope and spirit of the present invention. For example, the orientation flag (ORIENT.sub.-- FLAG) could initially be set to either "horizontal" or "vertical" in any of the above described embodiments. Likewise, any of the direction flags could initially be set to either "forward" or "reverse." Moreover, the multiple targets flag could be set to "true" in any of the above embodiments, causing the symbol locator block to search for multiple symbols within the search area. In addition, the scan direction of horizontal lines and vertical lines need not be alternated between forward and reverse.
BRIEF DESCRIPTION OF THE DRAWINGS FIG. 1 is an illustration of an electro-optical imaging system;
SUMMARY OF THE INVENTION In accordance with the teachings of the present invention, an electro-optical imaging system utilizes an efficient search algorithm to locate a coded symbol within a digitized image.
�M�Q�ޥ� �ޥΪ��M�Q�ӽФ���o�G��� �ӽЪ��M�Q�W��US41830131976�~11��29��1980�~1��8��Coulter Electronics, Inc.System for extracting shape features from an imageUS47287841987�~1��30��1988�~3��1��Federal Express CorporationApparatus and method of encoding and decoding barcodesUS49162971989�~7��12��1990�~4��10��Tokyo Kogaku Kikai Kabushiki KaishaCode readerUS49738291989�~3��30��1990�~11��27��Eastman Kodak CompanyBar code reading methodUS51290121990�~3��21��1992�~7��7��Sony CorporationDetecting line segments and predetermined patterns in an optically scanned documentUS52951961992�~5��19��1994�~3��15��Cummins-Allison Corp.Method and apparatus for currency discrimination and countingUS52966911992�~9��14��1994�~3��22��Lazerdata CorporationScanning device for reconstructing a complete code from scanned segmentsUS53430281992�~8��10��1994�~8��30��United Parcel Service Of America, Inc.Method and apparatus for detecting and decoding bar code symbols using two-dimensional digital pixel imagesUS53675781991�~9��18��1994�~11��22��Ncr CorporationSystem and method for optical recognition of bar-coded characters using template matchingUS53749991992�~12��22��1994�~12��20��Silitek CorporationScan control systemUS53788811993�~5��28��1995�~1��3��Olympus Optical Co., Ltd.Bar code reader for accurately reading two-dimensional bar code imagesUS53864821992�~7��16��1995�~1��31��Scan-Optics, Inc.Address block location method and apparatusUS53877871993�~12��9��1995�~2��7��Lazerdata CorporationScanning device for reconstructing a complete code from scanned segmentsUS54381881994�~4��1��1995�~8��1��United Parcel Service Of America, Inc.Method and apparatus for decoding bar code images using information from previous scan linesUS54442311995�~1��18��1995�~8��22��Symbol Technologies, Inc.Bar code scan stitchingUS54573081993�~9��14��1995�~10��10��Symbol Technologies, Inc.Bar code scan stitchingUS54789991994�~5��27��1995�~12��26��United Parcel Service Of America, Inc.Method and apparatus for decoding bar code symbols along search stepsUS54897691993�~5��25��1996�~2��6��Olympus Optical Co., Ltd.Symbol information reading apparatusUS55043221994�~10��26��1996�~4��2��Symbol Technologies, Inc.High density two dimensional bar code symbologyUS55458871994�~10��25��1996�~8��13��United Parcel Service Of America, Inc.Method and apparatus for decoding bar code symbols using subpixel scan linesUS55503651994�~3��22��1996�~8��27��United Parcel Service Of America, Inc.Method and apparatus for decoding bar code symbols using subpixel interpolation�Q�H�U�M�Q�ޥ� �ޥΥ��M�Q�ӽФ���o�G��� �ӽЪ��M�Q�W��US61119841998�~1��21��2000�~8��29��Fujitsu LimitedMethod for matching input image with reference image, apparatus for the same, and storage medium storing program for implementing the methodUS61284141997�~9��29��2000�~10��3��Intermec Ip CorporationNon-linear image processing and automatic discriminating method and apparatus for images such as images of machine-readable symbolsUS63325741999�~11��12��2001�~12��25��Denso CorporationMethod of reading bar codeUS66784122000�~4��6��2004�~1��13��Denso CorporationMethod for detecting a two-dimensional code existing area, method reading two-dimensional code, and a recording medium storing related programsUS69177201997�~7��4��2005�~7��12��Daimlerchrysler AgReference mark, method for recognizing reference marks and method for object measuringUS71068891998�~7��1��2006�~9��12��Oxoid LimitedImage analysis systems and devices for use therewith������l�Ϥ�Google ���� - Sitemap - USPTO �j�q�U�� - ���p�v�F�� - �A�ȱ�� - ���� Google �M�Q - �N���^�X��ƬO�Ѭ��ӷ~�M�Q��Ʈw (IFI CLAIMS Patent Services) ����©2012 Google