Visual information regarding intensity and intensity-based gradient information
is used in a multi-step process for accurately locating and decoding an encoded
visual symbol matrix. A symbol is preprocessed with filtering and morphology. A
set of coarse locations of candidate symbols is filtered according to coarse geometric
criteria to determine which image locations are most viable. Depending upon the
symbol type, and information about the edges of the symbols, additional symbol-specific
filtering and refinements can be applied or skipped. For 2D matrices filtering
according to intensity variance criteria is followed by an edge-locating refinement
and by identifying finder patterns and timing patterns. Once finder patterns and
timing patterns are precisely located, the data region is decoded. Where a data
region does not decode validly, another pass is run, using the non-morphed image,
resulting in an overall saving of time, as rejections may require operator intervention.