Dot growth system and method

The present disclosure relates to a method and system for processing isolated dots of an image to be printed by a printer. The method includes detecting whether pixels corresponding to an isolated dot in the image are in an on state. A first sum of pixels that are in an on state in a first pixel ring surrounding the pixels corresponding to the isolated dot when the pixels in the isolated dot are detected to be in the on state is determined. The first sum of pixels in the first pixel ring that are in the on state is compared with a first threshold sum. A first number of pixels in at least a second pixel ring either comprising of or surrounding the pixels corresponding to the isolated dot are turned on when the first sum of pixels in the on state is less than the first threshold sum.

CROSS REFERENCE TO RELATED APPLICATIONS

This application is related to U.S. patent application entitled “DOT GROWTH SYSTEM AND METHOD,” Ser. No. 13/547,802, “ISOLATED HOLE DETECTION AND GROWTH,” Ser. No. 13/547,839, “ISOLATED HOLE DETECTION AND GROWTH,” Ser. No. 13/547,875, “METHOD AND SYSTEM FOR ISOLATED HOLE DETECTION AND GROWTH IN A DOCUMENT IMAGE,” Ser. No. 13/547,670, “METHOD AND SYSTEM FOR ISOLATED DOT DETECTION AND GROWTH IN A DOCUMENT IMAGE,” Ser. No. 13/547,738, all filed concurrently with the present application, and all incorporated by reference herein in their entireties.

FIELD

The present application relates to a method and system for processing dots of an image for displaying and/or printing.

BACKGROUND

One common problem seen on xerographic marking engines is the inability to consistently or uniformly print small, isolated dots, for example, in binary bitmaps of an image. This causes image quality defects such as missing highlight tone and dotted lines. To deal with marking engines of different characteristics and to achieve the desired growth behavior in general, finer control of density adjustment is needed that can avoid inconsistent outputting of a single isolated dot in an output image. Using error diffusion, which is a popular rendering method in copy path, or using optimizing halftone design as well as other frequency modulated screening techniques such as stochastic screen, single dots may be avoided to some extent. However, inconsistent and non-uniform isolated small dots are still hard to avoid resulting in artifacts in an output image.

SUMMARY

One aspect of the present application provides a method for processing isolated dots of an image to be printed by a printer. The method includes detecting whether one or more pixels corresponding to an isolated dot in the image are in an on state, the on state defined by a higher binary logic level relative to a binary logic level corresponding to an off pixel, determining a first sum of pixels that are in an on state in a first pixel ring surrounding the one or more pixels corresponding to the isolated dot when the one or more pixels in the isolated dot are detected to be in the on state, comparing the first sum of pixels in the first pixel ring that are in the on state with a first threshold sum, turning on a first number of one or more pixels in at least a second pixel ring either comprising of or surrounding the one or more pixels corresponding to the isolated dot when the first sum of pixels in the on state is less than the first threshold sum, wherein the second pixel ring is inside the first pixel ring, and outputting the isolated dot including the turned on first number of pixels in the second pixel ring on a printable medium as an output image.

According to one aspect of the invention, a method for processing isolated dots of an image to be printed by a printer includes detecting whether one or more pixels corresponding to an isolated dot in the image are in an on state, the on state defined by a higher binary logic level relative to a binary logic level corresponding to an off pixel, determining one or more pixel distances of one or more pixels in a turned on state nearest to the one or more pixels corresponding to the isolated dot, comparing each pixel distance to a threshold pixel distance, and turning on a first number of one or more pixels either comprising of or surrounding the detected one or more pixels based upon the comparing such that the turning on is carried out when one or more of the pixel distances are greater than the threshold pixel distance for outputting the isolated dot using an image output device.

According to one aspect of the invention, a method for processing isolated dots of an image to be printed by a printer includes detecting whether one or more pixels corresponding to an isolated dot in the image are in an on state, the on state defined by a higher binary logic level relative to a binary logic level corresponding to an off pixel, determining a first sum of pixels, corresponding to a sum of dots different from the isolated dot, that are in a turned on state in at least a half scan line in one of a fast scanning and a slow scanning direction of the image, comparing the sum of pixels to a threshold sum, and turning on at least a first number of one or more pixels in at least a pixel ring comprising or surrounding the detected one or more pixels corresponding to the isolated dot when the sum of turned on pixels is less than the threshold sum for outputting the isolated dot using an image output device.

According to one aspect of the invention, a system for processing isolated dots of an image to be printed by a printer includes one or more processors. The one or more processors are configured to detect whether one or more pixels corresponding to an isolated dot in the image are in an on state, the on state defined by a higher binary logic level relative to a binary logic level corresponding to an off pixel, determine a first sum of pixels that are also in an on state in a first pixel ring surrounding the one or more pixels corresponding to the isolated dot when the one or more pixels in the isolated dot are detected to be in the on state, compare the first sum of pixels in the first pixel ring that are in the on state with a first threshold sum, turn on a first number of one or more pixels in at least a second pixel ring either comprising of or surrounding the one or more pixels corresponding to the isolated dot when the first sum of pixels in the on state is less than the first threshold sum, wherein the second pixel ring is inside the first pixel ring, and output the isolated dot including the turned on first number of pixels in the second pixel ring on a printable medium as an output image.

Yet another aspect of the present application provides a computer readable medium having stored thereon instructions for processing isolated dots of an image to be printed by a printer, which when executed by one or more processors cause the one or more processors to detect whether one or more pixels corresponding to an isolated dot in the image are in an on state, the on state defined by a higher binary logic level relative to a binary logic level corresponding to an off pixel, determine a first sum of pixels that are also in an on state in a first pixel ring surrounding the one or more pixels corresponding to the isolated dot when the one or more pixels in the isolated dot are detected to be in the on state, compare the first sum of pixels in the first pixel ring that are in the on state with a first threshold sum, turn on a first number of one or more pixels in at least a second pixel ring either comprising of or surrounding the one or more pixels corresponding to the isolated dot when the first sum of pixels in the on state is less than the first threshold sum, wherein the second pixel ring is inside the first pixel ring, and output the isolated dot including the turned on first number of pixels in the second pixel ring on a printable medium as an output image.

Other objects, features, and advantages of the present disclosed technology will become apparent from the foregoing detailed description, the accompanying drawings, and the appended claims.

DETAILED DESCRIPTION

As used in this disclosure, an “image” is a pattern of physical light that in digital image processing and xerographic applications is converted to a two-dimensional array of data. Such data could be multi-bit or binary. Alternatively, the image may be defined using additional dimensions for different planes or components of the image. For example, a monochrome image has one color plane and a color image has three or four color planes. Example embodiments disclosed herein relate to both monochrome as well as color images. An image may include characters, words, and text as well as other features such as graphics, including pictures. An image may be divided into “segments,” each of which is itself an image. A segment of an image may be of any size up to and including the whole image.

An item of data can be used to define an image when the item of data includes sufficient information to produce the image. For example, a two-dimensional array can define all or any part of an image, with each item of data in the array providing a value indicating the color of a respective location of the image. Likewise, one or more “scanlines” can be used to define an image. A scanline divides an image into a sequence of (typically horizontal) strips. A scanline can be further divided into discrete pixels for processing in a computer, xerographic, or printing system. This ordering of pixels by rows is known as raster order, or raster scan order.

Each location in an image may be called a “pixel.” In an array defining an image in which each item of data provides a value, each value indicating the color of a location may be called a “pixel value”. Each pixel value is a bit in a “binary form” of an image, a gray scale value in a “gray scale form” of an image, or a set of color space coordinates in a “color coordinate form” of an image, the binary form, gray scale form, and color coordinate form each being a two-dimensional array defining an image. A “central pixel” is not literally the center pixel in a region, rather the term describes a target pixel in a scanline being a single pixel or having a plurality of pixels. It will be appreciated that many or all of the pixels become the “central” or “target” pixel during the process of enhancing an entire image. Generally, the pixels make up individual features of the image. A binary pixel can take on two values: a 1 or a 0, 1 meaning ON and 0 meaning OFF. Specifically, one or more pixels that are ON and are contiguous or in close vicinity of each other define one or more dots that are to be printed by a printing device. The illustrated aspects of this disclosure relate generally to a system, a method, and a computer readable medium having stored thereon instructions for selectively processing isolated dots of an image to be printed by the printing device. In some aspects of the disclosure, one or more pixels may make a dot, e.g., an isolated dot as described herein.

The term “ON state” of a pixel is defined with respect to the pixel having a binary logic level higher than that of a pixel with a lower binary logic level. For example, a pixel that is at a “1” level is in an ON state as compared to a pixel at a ‘0’ binary level or an “OFF state.” The ON and OFF states of the pixels can be stored in a register in a memory device, although forms of physical storage may be used.

The term “data” refers herein to physical signals that indicate or include information. When an item of data can indicate one of a number of possible alternatives, the item of data has one of a number of “values.” For example, a binary item of data, also referred to as a “bit,” has one of two values, interchangeably referred to as “1” and “0” or “ON” and “OFF” or “high” and “low.” An N-bit item of data has one of 2Nvalues, where N is an integer value. A “multi-bit” item of data is an item of data or signal that includes more than one bits. The bits of a binary number are ordered in sequence from Most Significant Bit (MSB) to Least Significant Bit (LSB) or vice versa. As used herein, “left” and “leftward” arbitrarily refer to a direction toward an MSB in sequence while “right” and “rightward” arbitrarily refer to a direction toward an LSB in sequence.

The term “data” includes data existing in any physical form, and includes data that are transitory or are being stored or transmitted. For example, data could exist as electromagnetic or other transmitted signals or as signals stored in electronic, magnetic, or other form.

An item of data relates to a part of an image, such as a pixel or a larger segment of the image, when the item of data has a relationship of any kind to the part of the image. For example, the item of data could define the part of the image, as a pixel value defines a pixel; the item of data could be obtained from data defining the part of the image; the item of data could indicate a location of the part of the image; or the item of data could be part of a data array such that, when the data array is mapped onto the image, the item of data maps onto the part of the image.

An operation performs “image processing” when it operates on an item of data that relates to part of an image. A “neighborhood operation” is an image processing operation that uses data relating to one part of an image to obtain data relating to another part of an image.

Pixels are “neighbors” or “neighboring” within an image when there are no other pixels between them or if they meet an appropriate criterion for neighboring. For example, using a connectivity criterion if the pixels are rectangular and appear in rows and columns, each pixel has a total of 8 neighboring pixels contiguous with the pixel of interest.

Another criterion for defining a “neighborhood” includes selecting a threshold distance between two pixels that are enabled or in an ON state for printing or display, as discussed below. Yet another criterion includes counting a threshold number of pixels in an s×t window surrounding the pixel of interest, s and t each being integers.

An “image input device” is a device that can receive an image and provide an item or items of data defining a version of the image. A desktop “scanner” is an example of an image input device that receives an image by a scanning operation, such as by scanning a document. The resulting scanned document will have an input density of pixels. Scanning is carried out using, for example, a scanning bar in the mage input device. The scanning bar scans the input image on a line by line basis. The direction in which the scanning bar scans the image is termed as a “fast scan” direction at the beginning of each scanline of the image. A second direction is termed as a “slow scan” direction that corresponds to a direction of movement of a printable medium (e.g., sheet(s) of printing paper) storing the image. The adjectives “fast” and “slow” refer to relative speed of movement of the scan bar and the printable medium.

An “image output device” is a device that can receive an item of data defining an image and provide the image as output. A “display” and a “laser printer” are examples of image output devices that provide the output image in human viewable form, although any type of printing device known to one of ordinary skill in the art may be used. The resulting output image will have an output density of pixels. The visible pattern presented by a display is a “displayed image” or simply “image” while the visual pattern rendered on a substrate by the printer is a “printed image”. The output image is printed using movement of one or more components in the image output device.

“Circuitry” or a “circuit” is any physical arrangement of matter that can respond to a first signal at one location or time by providing a second signal at another location or time. Circuitry specifically includes logic circuits existing as interconnected components, programmable logic arrays (PLAs) and application specific integrated circuits (ASICs). Circuitry “stores” a first signal when it receives the first signal at one time and, in response, provides substantially the same signal at another time. Circuitry “transfers” a first signal when it receives the first signal at a first location and, in response, provides substantially the same signal at a second location.

“Memory circuitry” or “memory” is any circuitry that can store data, and may include local and remote memory and input/output devices. Examples include semiconductor ROMs, EPROMs, EEPROMs, RAMs, and storage medium access devices with data storage media that they can access. A “memory cell” is memory circuitry that can store a single unit of data, such as a bit or other n-ary digit or an analog value.

“User input circuitry” or “user interface circuitry” is circuitry for providing signals based on actions of a user. User input circuitry can receive signals from one or more “user input devices” that provide signals based on actions of a user, such as a keyboard, a mouse, a joystick, a touch screen, and so forth. The set of signals provided by user input circuitry can therefore include data indicating mouse operation, data indicating keyboard operation, and so forth. Signals from user input circuitry may include a “request” for an operation, in which case a system may perform the requested operation in response.

For purposes of this disclosure, and not by way of limitation, an “isolated dot” is generally defined as a dot that satisfies one or more criteria such as how close that dot is to the nearest pixel or group of pixels corresponding to another dot. Similarly, an isolated dot may be defined as a dot that has a threshold number of dots surrounding that dot that are enabled for printing. Other criteria for defining an isolated dot may be used too. The system may be generically considered a printing system having an input image that is processed for printing or displaying as an output image. The input image has an input density of dots with one or more pixels in an ON state making up the input image. Correspondingly, the output image has an output density or a desired density of dots making up the output image. Typically, input and output densities are different since input density of dots is optimized for removing artifacts to result in the output density of dots.

“Dot growth” generally refers to a process in which a size of an isolated dot that does not meet a threshold size criterion suitable for outputting is increased. For example, such increase in size may be reflected by selecting one or more pixels in a neighborhood of the detected dot and enabling those pixels for outputting or printing.

Referring toFIG. 1, a there is depicted a partly functional and partly schematic diagram of an aspect of the present technology. An aspect of the present disclosure is employed as a system100for processing an input digital image generated and/or provided by an Image Input Terminal (IIT)106to optimize growth of isolated dots therein. By way of example only, input image can be provided as a plurality of binary data signals representing, for example, the text, halftone and graphic image regions that make up a source document from with the input image was generated, or is being generated in real-time. That is, the input image may be produced as a digitized representation of a hardcopy document, for example, by scanning on a scanner. As illustrated inFIG. 1, the source of the digital image (interchangeably referred to herein as “input image”) may be any IIT, where the image is passed to or stored in memory110. Alternatively, the term “input image” may be used to describe an image that is input to a dot growth system114, described below. Memory110may be suitable for the storage of the entire image or it may be designed to store only a portion of the image data (e.g., several rasters or fast-scan lines). More specifically memory110stores data that is representative of the imaging areas in the digital image. Memory110can comprise computer readable media, namely computer readable or processor readable storage media, which are examples of machine-readable storage media. Computer readable storage/machine-readable storage media can include volatile, nonvolatile, removable, and non removable media implemented in any method or technology for storage of information, e.g., computer readable/machine-executable instructions, data structures, program modules, or other data, which can be obtained and/or executed by one or more processors.

Memory110is a generic term and it may comprise a single memory or a plurality of separate memories. Such memories refer to computer readable media, and may be of the type that are removable from the camera, or of the type that are integrated into IIT106(e.g., a camera). Examples of such memory may include, but are not limited to flash memory, USB thumb drives, a memory stick, CDs, DVDs or other optical recording media, floppy disks or other magnetic recording media, or any other type of memory now known or later developed. Where memory110comprises a single memory, the input image may be stored separately in memory110. Likewise, the lower resolution images could be stored to a first memory and the higher resolution images could be stored to a physically separate second memory.

The data may be extracted from memory110on a raster basis or on a pixel-by-pixel basis for use by the subsequent components or steps. More specifically, a pixel region window block112(referred to as window112) serves to select some or all pixels within a region of the image (accesses or extracts from memory110), so as to make the data for the respective pixels available for processing. It will be appreciated that while described as a static system, the disclosed embodiment is intended to continuously operate on pixel data in a “streaming” fashion, and that window112may be any suitable apparatus or methodology that allows access to a plurality of pixels.

As described herein, window112determines different regions of the digital image, the regions including a plurality of imaging areas. Such regions are suitable for optimizing and controlling growth of isolated dots therein. According to one aspect of the disclosure, such windowing may include a plurality of fast-scan data buffers, wherein each buffer contains a plurality of registers or similar memory cells for the storage of image data therein, with the data being clocked or otherwise advanced through the registers. The number of registers is dependent upon the “horizontal” (fast-scan) window size and/or line width, whereas the number of buffers is dependent upon the “vertical” (slow-scan) window size. As will be appreciated, the window size is dependent upon a context, as discussed inFIG. 2below, that is required to implement the particular image adjustment desired and the level of addressability of the imaging areas (higher levels of addressability will inherently result in more data stored to provide the required context). While one windowing technique has been generally described, it will be appreciated that similar means may be implemented using hardware and/or software to point/access a memory device, so that data for selected imaging areas may be accessed, rather than having the data separately stored in a buffer. It will also be appreciated that alternative configurations may be employed for the buffer. For example, a single, long, buffer may be employed, where image data is simply clocked through the buffer. Thus the various alternatives all employ some form of memory for storing image data representing image areas in at least one region of the image.

Output from window112is provided to dot growth system114. Dot growth system114includes one or more look-up tables (LUTs)116, a dot growth module124communicably coupled to a pseudo-random number generator122(interchangeably referred to as a random number generator122) and a density control module125as shown by example connecting arrows, a processor124, a local memory126, and other logic circuitry (not shown). In one alternative aspect of this disclosure, LUTs116may be a part of local memory126. Dot growth system114carries out various functions and methods related to detection and growth of isolated dots in an input image provided by IIT106, and received by dot growth system114as a bitmap of pixels from window112and provided to an Image Output Terminal (IOT)128as an input for display and/or printing purposes. Dot growth module124, random number generator122, and density control module125may be implemented using hardware (e.g., memory, registers, and circuits). Alternatively, dot growth module124, random number generator122, and density control module125may be software modules with code residing upon tangible computer readable medium to carry out various features and functions related to dot detection and growth. Further, dot growth module124, random number generator122, and density control module125may be a combination of hardware and software, as may be contemplated by one of ordinary skill in the art. By way of example only, and not by way of limitation, processor124can be conveniently implemented using one or more general purpose computer systems, microprocessors, digital signal processors, micro-controllers, application specific integrated circuits (ASIC), programmable logic devices (PLD), field programmable logic devices (FPLD), field programmable gate arrays (FPGA) and the like, programmed according to the teachings as described and illustrated herein, as will be appreciated by those skilled in the computer, software and networking arts. For example, processor124can be a PENTIUM® processor provided by Intel Corporation, Santa Clara, Calif. Further, although a single processor is illustrated, more than one processors coupled by a bus may be used. Local memory126is similar to memory110and therefore, structure of local memory126is not being described in detail.

After processing at dot growth system114(e.g., using processor124), input image is transformed into an output image for printing and/or displaying at IOT128. IOT28comprises a display unit (not shown) for displaying output image, although in alternative embodiments, IOT128could also print the output image (e.g., when IOT128is at a print end of a copier). As will be appreciated, additional LUTs and storage and logic circuitry may be used for producing the output image at IOT128.

Referring toFIG. 2A, a context window202with respect to a fast scan and a slow scan direction is shown. Context window202includes a center pixel or a target pixel204, an inner row or ring of pixels206, and an outer row or ring of pixels208surrounding or in the neighborhood of center pixel204. In one aspect, context window202is a part of an input image that comprises a plurality of scanlines that are further made of a plurality of context windows, similar to context window202. Pixels shown in context window202can be represented as a matrix (or other known data structure) by at least one binary value (“0” or “1”). A high binary value (e.g., “1”) indicates that the pixel is enabled for outputting (printing and/or displaying), and a low binary value (e.g., “0”) indicates that the pixel will not be printed or displayed in an output image outputted by IOT128. Therefore, context window202may be represented as a comprising a bitmap of binary values stored, for example, in a register in memory110. In the example shown inFIG. 2, inner ring206is a 3×3 pixel ring where pixels are denoted as “N,” “S,” “E,” “W,” “NE,” “NW,” “SE,” and “SW” in terms of their location relative to center pixel204. The pixels in the inner 3×3 window are used to form an index to a programmable 256-entry G-bit look up table in look up tables116(e.g., LUT1). Such an index can be defined as: index={NW, N, NE, W, E, SW, S, SE}, although other formats for defining the index may be used. For example, the order of pixels forming the index may be changed. The look up table indexed by the index is used for detection of center pixel204at beginning of each scanline of the input image. For example, the MSB of the 6-bit detection look-up table (“detectionLUT”) determines a region of the input image to which context window202belongs. The remaining 5 bits of the 6-bit detectionLUT are used to obtain one or more matching templates that will be used to output image on IOT128and will form an output image context window that may replace context window202. For example, when a value of the remaining 5-bits is greater than 31, center pixel204is skipped and is not detected for dot growth of the dot in the input image corresponding to either a center pixel204or any of its adjacent neighboring pixels. In such a scenario, context window202will be unchanged in the output image. As will be appreciated by one of ordinary skill in the art, additional criteria may be applied toward determining whether or not center pixel204will be detected for dot growth. Such additional criteria for inner ring206pixel values are disclosed in related U.S. patent application entitled “DOT GROWTH SYSTEM AND METHOD,” Ser. No. 13/547,802 referenced above, filed concurrently with the present application, the disclosure of which is incorporated by reference herein in its entirety. An example of such criteria is described inFIG. 2B.

Referring toFIG. 2B, an exemplary set of patterns200may be used in isolated dot detection. For example, if the specified minimum dot size is two after growth then only a row200A showing a single pattern is used. Similarly, if the dot size after growth is to be three pixels, row200A and a row200B of patterns are used. If the dot size after growth is specified as four pixels, then all the patterns200in rows200A-200H inFIG. 2Bare searched for use as template for dot detection. If all the growth of up to three pixels is to be enabled but the growth from a three-pixel dot to a four-pixel dot is to be controlled, for example, growth recording and disablement of pixels may be invoked only when patterns starting from a row200C are detected. Similarly, if all growth to two pixels is to be enabled but growth to three pixels is to be controlled, growth recording and disablement may be invoked only when patterns in row200B inFIG. 2Bare detected. Additional examples of templates used for dot detection may be found in related U.S. patent application entitled “METHOD AND SYSTEM FOR ISOLATED DOT DETECTION AND GROWTH IN A DOCUMENT IMAGE,” Ser. No. 13/547,738 filed concurrently with the present application, the disclosure of which is incorporated herein by reference in its entirety.

Referring back toFIG. 2A, in the example shown, the pixels from outer ring208of the 5×5 window are arranged in a 16-bit array as {R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15}, although other numbers and/or other orderings of pixels may be used. In one aspect of the disclosure, a number of “ON” pixels surrounding current pixel204are counted using processor124. The “ON” state pixels correspond to one or more dots in the input image that are already enabled. Although the counting is carried out for outer ring206in 5×5 context window202, any window of size s×t within a neighborhood of current pixel204may be used, where s and t are integers. By way of example only, the 16-bit array may be stored in a register of memory110.

Various aspects of the present disclosure effectively deal with a variety of artifacts introduced in growth of dots in an image to be outputted by IOT128, and to better accommodate marking engines of different characteristics by using finer and more flexible control of dot growth. Some examples of such artifacts include missing groups of scanline in the output image, and lower than a desired density of dots in each scanline of the output image outputted by IOT128. As discussed with respect to flowcharts300-600inFIGS. 3-6below, the enabling of dot growth in various regions of an image (e.g., highlights, known to one of ordinary skill in the art) is determined by using percentage control of a number of enabled pixels in conjunction with output density control of different regions of the image based upon an input density of the input image obtained from IIT106. The image is subsequently stored in memory110as an n-dimensional image array, n being an integer greater than zero (0). Such a percentage can either be a function of the number of dots not grown in the neighborhood of the current pixel, or it can be controlled using a random number generator. In some aspects of the disclosure, the percentage can be a function of both a random number and a number of dots not grown. As can be appreciated, the output image at IOT128will have dot density dependent upon the technique or the combination of techniques used.

The various functions of the elements of system100may be controlled by a central microprocessor (e.g., processor124), and the instructions to carry out the exemplary methodology may be embedded in a chip, or may be loaded into a memory associated with the microprocessor as software. Such features and functions are illustrated and described with reference to the flowcharts herein, and the steps in the flowcharts are by way of example only and not by way of limitation. For example, steps may be interchanged, combined, or added to implement various features and functionalities of the technology in this disclosure. The particular manner in which the elements of system100are controlled and the method or process of the flowcharts is performed is not particularly critical, and other control structure or architecture may be used for system100.

Referring toFIG. 3, an example process for density control of output dots based upon the number of ON pixels in the neighborhood of detected isolated dots in an input image is described using flowchart300.

In block302, processor124counts a number of pixels that are in an ON state in a neighborhood of center pixel204. For example, processor124can count a number of ON pixels in outer ring208surrounding center pixel204. Alternatively, processor124can count a total number of ON pixels in an s×t neighborhood of center pixel204, where s and t are integers. The number determined from such counting is stored in local memory126of dot growth system114as a variable (“ring16”). The number of pixels in an ON state in the neighborhood of current pixel204define an input density of the input image for each pixel of each scanline making up the input image.

In block304, processor124determines if current center pixel204was detected to be grown by a dot detection and growth algorithm. For example, processor124may check such detection usingFIG. 2B, although any other form of dot detection and growth algorithm may be used. If yes, the flow proceeds to block306. If no, the flow proceeds to block308.

In block306, processor124determines if the value of ring16 variable determined in block302is less than or equal to a programmable parameter or threshold value (“TH_SUM”), the flow proceeds to block310. For example, value of ring16 may be based on pixels in a first ring (e.g., outer ring208) or a second ring (e.g., inner ring206), although other neighborhoods beyond such rings or rows may be used. If not, the flow proceeds to block308.

In block308, if processor124determines that center pixel204was not detected as a pixel for dot growth, current center pixel is left as is in its current state. Such marking comprises updating registers and flags stored in local memory126indicating that center pixel204will not be used for dot growth. In one example, processor124may revert to step302for a next pixel after block308.

In block310, current center pixel204is grown by turning ON a pixel value. Such enabling comprises marking pixels neighboring center pixel204to an ON state resulting in an enlarged dot comprising one or more pixels that may include center pixel204and additional pixels surrounding center pixel204(e.g., one or more contiguous or non-contiguous pixels from inner ring206and outer ring208). Corresponding updates may be made to registers and flags stored in local memory126indicating a growth of a dot corresponding to center pixel204.

Referring toFIG. 4, an example process for density control of output dots based upon grown isolated dots in the neighborhood of the current isolated dot (e.g., center pixel204) in an input image is described using flowchart400.

In block402, at start of each scanline of the input image, processor124sets a register in local memory126to zero. For example, a register used for bit shifting purposes (“BitShift”) may be set to all zeros. In one example, 8-bit register BitShift is used to keep track of the pixels turned ON in the fast scan direction, although other sizes of BitShift register in other scan directions may be used.

In block404, processor124determines if current center pixel204was detected to be grown by a dot detection and growth algorithm. For example, processor124may check such detection usingFIG. 2B, although any other form of dot detection and growth algorithm may be used. If yes, the flow proceeds to block406. If not, the flow proceeds to block412.

In block406, processor124determines if value of BitShift register is less than or equal to a programmable parameter (“LocalDensity_TH1”). If yes, the flow proceeds to block408, and if no, the flow proceeds to block412.

In one variation of the process shown by flowchart400, after block406, the flow proceeds to block407including blocks407aand407b. In block407a, when the condition in block406is satisfied, processor124determines a sum of all ON bits in BitShift register and stores the sum in a variable (“SumOn”). In block407b, processor124determines if this sum stored in variable SumOn is less than or equal to the local density threshold variable “LocalDensity_TH2”. If yes, the flow proceeds to block412, and if not, the flow proceeds to block408.

In block408, current center pixel204is grown by turning ON a pixel value. Such enabling comprises marking pixels neighboring center pixel204to an ON state resulting in an enlarged dot comprising one or more pixels that may include center pixel204and additional pixels surrounding center pixel204(e.g., one or more contiguous or non-contiguous pixels from inner ring206and outer ring208). Corresponding updates may be made to registers and flags stored in local memory126indicating a growth of a dot corresponding to center pixel204.

In block410, the BitShift register is updated by right shifting a binary “1” into BitShift register.

In block412, when the dot is not to be grown, the BitShift register is updated by right shifting a binary “0” into BitShift register.

Referring toFIG. 5, an example process for density control of output dots based upon density of grown dots in the current scanline, which would be the scanline of the current detected isolated dot, in an input image is described using flowchart500.

In block502, at start of each scanline of the input image, a counter (“OnCount”) is set to zero. In one example, such a counter may be a 4 bit counter with binary values stored therein, although other types of counters implemented using processor124and local memory126may be used.

In block504, processor124determines if current center pixel204was detected to be grown by a dot detection and growth algorithm. For example, processor124may check such detection usingFIG. 2B, although any other form of dot detection and growth algorithm may be used. If yes, the flow proceeds to block510. If not, the flow proceeds to block506.

In block506, center pixel204is not marked for growth and in block508, processor124leaves counter OnCount in current state without altering its contents.

In block510, when center pixel204is determined to be selected for dot growth, processor124determines whether or not the value stored in counter OnCount is less than or equal to an output density threshold (“OutputDensity_TH”). In one example, OutputDensity_TH may be a 5-bit programmable register. If the counter value is less than the threshold, the flow proceeds to block512. If the counter value is not less than the threshold, the flow proceeds to block516.

In block512, current center pixel204is grown by turning ON a pixel value. Such enabling comprises marking pixels neighboring center pixel204to an ON state resulting in an enlarged dot comprising one or more pixels that may include center pixel204and additional pixels surrounding center pixel204(e.g., one or more contiguous or non-contiguous pixels from inner ring206and outer ring208). Corresponding updates may be made to registers and flags stored in local memory126indicating a growth of a dot corresponding to center pixel204.

In block514, after current center pixel204is grown, processor124increments counter OnCount by one to indicate that current pixel204was grown.

In block516, when the condition in block510is not satisfied, processor124resets counter OnCount to zero.

Flowchart300and400offer local density control for each pixel whereas flowchart500provides density control for a full scanline. Further, flowchart300checks the input density of the image whereas flowcharts400and500look at the output density of the image. The methodologies disclosed in flowcharts300-500modify the desired output density based on the input and/or output dotgrowth density in some local or global neighborhood of the current detected isolated dot to obtain an optimal output image for printing and/or display by IOT128.

It is to be noted that the bit depths specified for the registers described above are typical values and other values are possible. By setting the programmable thresholds accordingly, only flowchart300may be carried out by processor124, only flowchart400may be carried out by processor124, or only flowchart500may be carried out by processor124. Further, processor124may carry out any combination of the three adjustments of dot density illustrated by the processes of flowcharts300-600. Furthermore, although flowcharts400and500are carried out by processor124in the fast scan direction only to keep the implementation simple, other variant implementations in other scan directions (e.g., slow scan direction) may be additionally or optionally carried out by processor124. The adjustments described by the processes of flowcharts300-500can be invoked at different stages of dot growth.

FIG. 6illustrates an example process for enabling dot growth in various regions on the input image (e.g., in highlight regions) by using a percentage control method described using flowchart600.

In block602, at start of each scanline of the input image, initialization of various counters and registers in memory110and/or local memory126is carried out. For example, a counter that counts a number of pixels that were initially enabled for dotgrowth based on some isolated dot detection and growth algorithm but were later disabled for dot growth is initialized to a number “0” at start of each scanline (“DotsNotGrown=0”). Likewise, location of a first center pixel or target pixel is recorded into a variable identifier “DotsNotGrownLocation” for which a binary dotgrowth flag was initially set but is later reset to a binary “0”. Likewise, a register (e.g., a “DotShift” register) storing density control values is initialized to zero. Density control value is used to control the local density of the dots grown in some neighborhood of the current pixel (e.g., center pixel204).

In block604, for each pixel in the scanline (e.g., current center pixel204), processor124determines whether or not the pixel is in an ON state, or is enabled for printing. For example, processor124may determine whether or not a dot corresponding to the current pixel is to be grown. This may be indicated by setting a flag (e.g., “dotgrowthflag=1”). If not, processor124in dot growth system114goes to the next pixel, as indicated in block606and checks for the condition in block604again for the next pixel. As noted earlier, one or more pixels (e.g., center pixel204) can correspond to one or more dots in the input image. Dots in the input image determine an input density of dots (and therefore, pixels). Likewise, the output image has a corresponding output density of dots that is desired to overcome or remove the artifacts in the input image.

In block608, processor124counts a number of pixels that are in an ON state in a neighborhood of center pixel204. For example, processor124can count a number of ON pixels in outer ring208surrounding center pixel204and store this number in a variable (“ring16”). Alternatively, processor124can count a total number of ON pixels in an s×t neighborhood of center pixel204, where s and t are integers. The number determined from such counting is stored in local memory126of dot growth system114. The number of pixels in an ON state in the neighborhood of current pixel204define an input density of the input image for each pixel of each scanline making up the input image. This number is then used to obtain values between −2nto 2nin a look-up table discussed with respect to block614below. Upon determining the number of ON pixels, processor124carries out the processes of blocks610,612, and614in parallel, although in some examples these processes may be carried out in series.

In block610, using random number generator122, processor124generates a random number. In one aspect of this disclosure, the generated random number is in a finite range of −2mto 2m, where m is an integer, although other ranges may be used. An exemplary value of m is 9, although other values may be used. It is to be noted that any technique of generating random numbers known to those of ordinary skill in the art could be used, and the present disclosure is not limited to any particular technique of generating random numbers. For example, the random number could be a “true” random number or a pseudo-random number, and may be generated by one or more computational techniques known to one of ordinary skill in the art implemented using processor124.

In block612, the value of ring16 from block608is used as an index to one or more LUTs116to output a density control value that is used as a threshold against the density of grown dots in some neighborhood of the current isolated dot (e.g., center pixel204).

In block614, the number of ON pixels counted in block608is used to generate a percentage value for enabling a number of pixels for dot growth in a plurality of pixels making up the scanline. Such percentage value may be obtained from a look-up table mapping values from the look-up table (LUT) that maps values between values of “ring16” and −2nto 2nfor percentage control. The output of the LUT which are the percentage control values determine a percentage of enabled pixels out of a total number of enabled pixels in the scanline that will be selectively enabled for dot growth by dot growth system114, and outputted by IOT128. An exemplary table is shown as Table I below, although tables with other values may be developed:

For example, using the above table, if no pixels in the neighborhood of the current isolated dot detected and enabled for growth are in an ON state, a 100% of these enabled pixels will be grown based on this criteria only, although additional criteria (as discussed below) may reduce the percentage value Likewise, if 5 pixels in outer ring208are ON, then about 37.5% of enabled pixels are selectively enabled in the output image outputted by IOT128. As seen from Table I above, more than one (e.g., two or more) values for number of pixels in outer ring208that are in an ON state may correspond or map to the same percentage value of pixels that are to be enabled in the output image. Further, it is to be noted that the selected percentage of pixels can be less than 100% indicating that not all pixels corresponding to one or more isolated dots will be grown. The flow proceeds to block618.

In block616, processor124compares if a number of dots that were enabled for dot growth based on some isolated dot detection and dot growth algorithm but were not grown in a past context with respect to current center pixel204is greater than or equal to a threshold number. If not, the flow proceeds to block622. If yes, the flow proceeds to block618.

In block618, processor124determines if location of current center pixel204is less than or equal to a threshold distance from a location of the last dot that was supposed to be grown based on some isolated dot detection and growth algorithm but was not grown as discussed below in blocks642and646. Processor124may carry out this determination by calculating an absolute value of the difference between a current center pixel204and a “DotsNotGrown” variable initialized in block602. Alternatively or additionally, processor124may determine if the random number generated in block610is greater than the percentage value obtained from Table I above. If either of these conditions in block618is true, the flow proceeds to block620, else the flow proceeds to block622.

In block620, processor124sets a dot density value equal to a density control value obtained from block612.

In block622, processor124sets the dot density value equal to zero. As a result, blocks620and622are used to perform density control in two different ways (used alone or as a combination of the two respective separate techniques).

The flow from blocks620and622then proceeds to block624.

In block624, processor124counts a number of ON bits in the DotShift register of block602. This count may be stored in a variable “DotCount” in local memory126.

In block626, processor124determines if the value of variable DotCount is greater than the value of the variable DotDensity of blocks620and622. If yes, the flow proceeds to block634. If no, the flow proceeds to block628.

In block628, processor124sets the variable DotsNotGrown counter to zero.

In block630, processor124sets a least significant bit (LSB) of DotShift register to 1.

In block632, processor124sets a DotGrowthFlag to “1” indicating that a dot corresponding to the current pixel (e.g., center pixel204) will be grown. The flow then proceeds to block646.

In block646, the parameter DotsNotGrownLocation is set to 0, indicating for the future detected dots in that scanline that a dot has been grown in some pre-defined neighborhood of the current detected dot. The flow then proceeds to block606via block644discussed below.

In block634, processor124sets a least significant bit (LSB) of DotShift register to “0”.

In block636, processor124sets a DotGrowthFlag to “0” indicating that a dot corresponding to the current pixel (e.g., center pixel204) will not be grown.

In block638, processor124increments DotsNotGrown counter. The flow then proceeds to block640.

In block640, processor124determines if DotsNotGrownCounter is equal to “1”. If yes, it indicates that a pixel in the neighborhood of the current detected dot is a first dot that was not grown and is detected as a result of any earlier dot growth logic previously applied on the current pixel (e.g., center pixel204). The flow proceeds to block642. If no, it indicates that further initialization in the current scanline is not needed and the flow goes to block644.

In block642, processor124sets a DotNotGrownLocation variable to current center pixel204's location.

In block644, processor124carries out a left shift operation in the DotShift register by 1 bit. The flow then goes back to block606.

The processes described in flowcharts300-600may be summarized in Table II below.

Table II illustrates an example with various parameters, variables, and conditions discussed above in flowcharts300-600. For example, for Table II, for ring16=0, LUT116implies DensityVal=2, and LUT116, PercentageVal=0 which means 50% of the pixels enabled for dotgrowth based on a dot growth algorithm (such as those known to one of ordinary skill in the art) may be selectively enabled based on the examples of dot growth algorithm in accordance with an embodiment. Similarly, for ringNum=1 LUT116implies DensityVal=1, and LUT116, PercentageVal=68 means approximately 40% of the pixels enabled for dotgrowth can be enabled for dotgrowth based on examples of dot growth algorithm in accordance with an embodiment.

For example, as shown in block616, pixels N+7 and N+9 have an initial value of DotGrowthFlag=1 coming from some prior art dot detection algorithm. For pixel N+7, random number generated is less than PercentageVal (0 in this case for ring16=0) thus turning the DotGrowthFlag OFF. For pixel N+9, random number generated is greater than PercentageVal but number of dots grown in DotCount (Block626) is greater than the DensityVal (same as DotDensity=2 in this case-block612), thus turning the DotGrowthFlag OFF. Pixel N+12 satisfies the conditions for random number as well as the local dot density (DotCount) and will be grown only if DotsNotgrownCounter conditions are met with (items 5 and 6 in Table II. DotsNotGrownCounter value is 2 coming from the previous pixel). Table II above shows that dots that were supposed to be grown using some known dotgrowth algorithm are 7 out of a total of 16 in this example (i.e., 7/16). Out of these 7 pixels enabled for dotgrowth, 3 were selectively enabled as a result of DotsNotGrownCounter (3/16). Additionally, out of these 7 pixels enabled for dotgrowth, 4 were selectively enabled as a result of random number generator (4/16) or (4/7), and out of these 7 pixels enabled for dotgrowth, the total number of pixels selectively enabled were 5 (5/16) or (5/7). Thereafter, applying additional logic of dot density control discussed above, dots actually grown finally are three (3) in number, i.e., 3/7 or approximately 42.8% of total number of pixels initially enabled for dotgrowth by some prior art dotgrowth algorithm.

FIG. 7illustrates a plot700showing flexible dot growth pattern based on one or more conditions described above as a function of a number (n) of pixels surrounding center pixels204that are in an ON state. Generally, plot700shows a percentage of pixels enabled in the output image for dot growth. The output density is adjusted based upon one or more methodologies illustrated in flowcharts300-600as discussed above. For example, line702in plot700shows percentage of pixels enabled for dot growth using random number generator122(e.g., in blocks610-618). Line704illustrates further fine tuning by processor124to account for a number and distance of pixels that were enabled for dot growth based on some known growth algorithm but were not grown in a past context of context window202, as discussed with respect to blocks616and618inFIG. 6. Likewise, line706shows additional fine tuning using the density control value discussed inFIGS. 3-6. As can be seen in plot700, depending on which technique or combination of techniques that are being used by processor124to adjust growth of isolated dots, a particular percentage of pixels in each scanline of the output image will be enabled. For example, if 1-2 pixels surrounding center pixel204are in an ON state in the input image, for the output image the number of pixels enabled for dotgrowth will be in a range centered around 50% of total number of pixels in the scanline in one case, by way of example only and not by way of limitation. The range exists since processor124adjusts the percentage of pixels depending on which methodology shown inFIGS. 3-6is used. If only, a random number generator122is used by processor124, then solid line (similar to line702) closest to the 50% mark indicates the output density of the scanline. Likewise, if only dots not grown in a past context of center pixel204is utilized by processor124, then chained line (similar to line704) indicates the output density of the scanline. However, since processor124may utilize all or more than one methodology, each resulting in a different output density, the final outputted scanline will have an output density that could be a fine tuned or modulated average of the output densities obtained by the methodologies described inFIGS. 3-6. Further, it is to be noted that the ranges/margins of output percentage of pixels enabled is for example purposes only and is not meant to be limiting.

The foregoing aspects of the disclosure have been provided as examples within the scope of the technology disclosed and should not be regarded as limiting. To the contrary, the present disclosure is intended to encompass all modifications, substitutions, alterations, and equivalents within the spirit and scope of the following claims.