SELECTIVELY ENCODING OR DECODING PIXELS OF AN IMAGE USING RUN-LENGTH ENCODING OR DECODING OR GRADIENT ENCODING OR DECODING

The selective coding method optimizes image compression by determining the most efficient coding scheme for each image portion, reducing computational load and power consumption while ensuring high compression ratios and lossless transmission.

DE112023003971T5Pending Publication Date: 2025-07-03MICROCHIP TECHNOLOGY INC
View PDF 1 Cites 0 Cited by

Patent Information

Application Number
DE112023003971
Authority / Receiving Office
DE · DE
Patent Type
Applications
Current Assignee / Owner
Priority Date
2022-09-20
Filing Date
2023-09-20
Publication Date
2025-07-03

AI Technical Summary

Technical Problem

Existing image coding technologies are computationally intensive and power-hungry, making them unsuitable for low-power devices, and do not effectively consider line boundaries in image data, leading to inefficient compression and transmission.

Method used

A selective coding method that determines the maximum number of pixels compressible via run-length or gradient coding for each image portion and applies the most efficient coding scheme, using an indicator bit to distinguish between run-length and gradient encoding, thereby optimizing compression and transmission.

Benefits of technology

This approach reduces computational complexity and power consumption while achieving higher compression ratios and ensuring lossless data transmission, particularly suitable for grayscale images with uniform or smoothly varying pixel values.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 00000026_0000
    Figure 00000026_0000
  • Figure 00000027_0000
    Figure 00000027_0000
  • Figure 00000028_0000
    Figure 00000028_0000
Patent Text Reader

Abstract

One or more examples relate to selectively row-based encoding of pixels of an image via run-length encoding or gradient encoding. A method includes, for at least a portion of an image, determining a maximum number of: a number of pixels in a run compressible via run-length encoding and a number of pixels in a run compressible via gradient encoding; and selectively encoding at least some pixels of an image via one of the run-length encoding or the gradient encoding that corresponds to the determined maximum number.
Need to check novelty before this filing date? Find Prior Art

Description

CROSS-REFERENCE TO RELATED APPLICATION

[0001] This application claims the benefit under 35 USC § 119(e) of the priority date of U.S. Provisional Patent Application Serial No. 63 / 376,407, filed September 20, 2022, for LOSSLESS COMPRESSION ENCODING AND DECODING FOR IMAGES WITH RELATED APPARATUS AND METHODS, the contents and disclosure of which are incorporated herein by this reference in their entirety. AREA

[0002] Examples relate to image coding and decoding, and in particular to selective coding or decoding of portions of an image via gradient coding or decoding or run-length coding or decoding. BACKGROUND

[0003] Image coding is the process of converting image data into a specific format or representation, often to facilitate storage, transmission, or compression, and often for applications that use the same. BRIEF DESCRIPTION OF THE DRAWINGS Fig. Figure 1 is a flowchart showing a process for encoding an image using run-length coding or gradient coding. Fig. 2 illustrates an example process for determining the maximum number of: the number of pixels in a run that is compressible via run-length encoding and the number of pixels in a run that is compressible via gradient encoding, according to one or more examples. Fig. 3 illustrates an example process for determining the number of pixels in a run that is compressible via run-length encoding, according to one or more examples. Fig. 4 illustrates an example process for determining the number of pixels in a run that is compressible via gradient coding, according to one or more examples. Fig. 5 illustrates an example process for transmitting an encoded image data line, according to one or more examples. Fig. 6 is a block diagram showing an example of a portion of a transmission including encoded image data, according to one or more examples. Fig. 7 illustrates an example process for decoding an image, according to one or more examples. Fig. 8 illustrates an example process for decoding an encoded line of image data, according to one or more examples. Fig. 9 is a flowchart illustrating a process for compressing image data according to one or more examples. Fig. 10 is a flowchart illustrating an example process for a subroutine for determining a number of pixels in a run that is compressible via run-length encoding for each pixel value in image data, according to one or more examples. Fig. 11 is a flowchart illustrating an example process for a subroutine for determining a number of pixels in a run that is compressible via gradient coding for each difference value exhibited by the image data, according to one or more examples. Fig. 12 is a block diagram illustrating a system according to one or more examples. Fig. 13 is a block diagram illustrating an apparatus 1300 for encoding a line of image data via run-length coding or gradient coding, according to one or more examples. Fig. 14 illustrates non-limiting examples of implementations of functional elements disclosed herein. MODE(S) FOR CARRYING OUT THE INVENTION

[0004] In the following detailed description, reference is made to the accompanying drawings, which form a part of this document, and in which is shown by way of illustration specific examples of embodiments in which the present disclosure may be practiced. These embodiments are described in sufficient detail to enable one of ordinary skill in the art to practice the present disclosure. However, other embodiments contemplated herein may be utilized, and changes in structure, material, and process may be made without departing from the scope of the disclosure.

[0005] The illustrations presented herein are not intended to be actual views of any particular method, system, device, or structure, but are merely idealized representations used to describe embodiments of the present disclosure. In some cases, similar structures or components may retain the same or similar numbering in the various drawings for the convenience of the reader; however, similarity in numbering does not necessarily imply that the structures or components are identical in size, composition, configuration, or any other characteristic.

[0006] The following description may include examples to enable one of ordinary skill in the art to practice the disclosed embodiments. The use of the terms "exemplary," "as an example," and "for example" means that the accompanying description is illustrative, and while the scope of the disclosure is intended to include examples and their legal equivalents, the use of such terms is not intended to limit the scope of any embodiment or this disclosure to the specified components, steps, features, functions, or the like.

[0007] It should be understood that the components of the embodiments, as generally described herein and illustrated in the drawings, could be arranged and configured in a wide variety of different configurations. Thus, the following description of various embodiments is not intended to limit the scope of the present disclosure, but is merely representative of various embodiments. While the various aspects of the embodiments may be illustrated in the drawings, the drawings are not necessarily drawn to scale unless expressly indicated.

[0008] Furthermore, the specific implementations shown and described are only examples and should not be construed as the only way to implement the present disclosure unless otherwise stated herein. Elements, circuits, and functions may be shown in block diagram form in order not to obscure the present disclosure with unnecessary detail. Conversely, specific implementations shown and described are only examples and should not be construed as the only way to implement the present disclosure unless otherwise stated herein. Furthermore, block definitions and the partitioning of logic between various blocks are exemplary of a specific implementation. It will be readily apparent to those skilled in the art that the present disclosure may be practiced using numerous other partitioning solutions.Details of timing considerations and the like have largely been omitted to the extent that such details are not necessary for a complete understanding of the present disclosure and are within the capabilities of those skilled in the art.

[0009] Those of ordinary skill in the art will understand that information and signals may be represented using a variety of different technologies and techniques. Some drawings may illustrate signals as a single signal for clarity of illustration and description. Those of ordinary skill in the art will understand that the signal may represent a bus of signals, where the bus may have a variety of bit widths, and the present disclosure may be implemented with any number of data signals, including a single data signal.

[0010] The various illustrative logic blocks, modules, and circuits described in connection with the embodiments disclosed herein may be implemented or performed using a general-purpose processor, a special-purpose processor, a digital signal processor (DSP), an integrated circuit (IC), an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof configured to perform the functions described herein. A general-purpose processor (which may also be referred to herein as a host processor or simply a host) may be a microprocessor, but alternatively, it may be any conventional processor, control unit, microcontroller, or state machine.A processor may also be implemented as a combination of data processing devices, such as a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration. A general-purpose computer including a processor is considered a special-purpose computer, while the general-purpose computer is configured to execute computational instructions (e.g., software code) related to embodiments of the present disclosure.

[0011] Embodiments may be described with respect to a process represented as a flowchart, a flow diagram, a structure diagram, or a block diagram. Although a flowchart may describe operational acts as a sequential process, many of these acts may be performed in a different order, in parallel, or substantially simultaneously. Furthermore, the order of the acts may be changed. A process may correspond to a method, a thread, a function, a procedure, a subroutine, a subprogram, another structure, or combinations thereof. Furthermore, the methods disclosed herein may be implemented in hardware, software, or both. When implemented in software, the functions may be stored or broadcast as one or more instructions or as code on computer-readable media.Computer-readable media includes both computer storage media and communications media, including any media that supports the transfer of a computer program from one location to another.

[0012] Any reference to an element herein using a label such as "first," "second," etc., does not limit the quantity or order of those elements unless such a limitation is expressly stated. Rather, these labels may be used herein as a convenient method of distinguishing between two or more elements or instances of an element. Thus, a reference to a first and a second element does not imply that only two elements may be employed or that the first element must precede the second element in any way. Furthermore, unless otherwise stated, a set of elements may include one or more elements.

[0013] As used herein, the term "substantially" with respect to a given parameter, property, or condition means, and includes, to an extent understood by one skilled in the art, that the given parameter, property, or condition is satisfied with a small degree of variance, such as within acceptable manufacturing tolerances. By way of example, depending on the specified parameter, property, or condition that is substantially satisfied, the parameter, property, or condition may be at least 90% satisfied, at least 95% satisfied, or even at least 99% satisfied.

[0014] For many applications, images can be transmitted from a source (e.g., camera, storage device) to a sink (e.g., display, or algorithm). For many applications, lossless transmission of data (image or other data) is mandatory, such as security-critical applications without limitation. Transmitting an image pixel-by-pixel (e.g., transmitting image data pixel-by-pixel, without limitation) is typically bandwidth-intensive. Lossless compression reduces bandwidth and essentially ensures that no image data is lost or altered in a way that requires correction.

[0015] Typical algorithms for encoding or decoding image data are computationally intensive and power-hungry, making them unsuitable for low-power devices such as embedded microcontrollers. To reduce computational complexity and power consumption, some algorithms designed for embedded applications limit the maximum compression ratio that an algorithm can achieve. Limiting the maximum possible compression ratio can, as non-limiting examples, reduce processing time, reduce memory usage, reduce arithmetic complexity, or reduce the need for hardware accelerators, without limitation. Algorithms that limit the maximum compression ratio may not achieve a suitable compression ratio.

[0016] In network applications (e.g., Ethernet, without limitation), some transmission protocols require line-by-line transmission of image data (this "line-by-line" encoding is also called "scanline encoding"). However, some algorithms do not consider line boundaries within an image or image data.

[0017] Run-length coding is the process of representing sequences of data with the same value or pattern of values using a value or pattern of values and a count value. In the context of encoding image data, run-length coding is the process of representing sequences of pixels with the same pixel value as a single data value and count value. Run-length coding is particularly effective when portions of an image have a uniform color. The inventors of this disclosure appreciate that RLE is also effective when portions of an image have a uniform color, repeating patterns, or both. In one or more examples, in the case of patterns of values or repeating patterns, a symbol may be used to identify the pattern. The symbol may be identified in an index or dictionary that links symbols and patterns.A decoder with an index or dictionary that links the symbol to the pattern can decode the symbol.

[0018] In gradient coding, sometimes called "difference coding," pixels in an image are represented by the difference between pixel values of neighboring pixels (rather than by the absolute pixel values), thus using fewer bits. Sequences of pixels with the same difference in pixel value can be represented as a pixel value and a count. Many natural images exhibit smooth transitions (small deltas from pixel to pixel), so encoding the differences between neighboring pixels can result in compressed data.

[0019] Run-length coding and gradient coding can be applied line by line (the “line by line” coding is also called “scanline coding”) or to an entire image.

[0020] A "run" is one or more consecutive data items from a set of data items. The "run length" of a run is the number of data items in the run. In one or more examples, the data items of a run may or may not be consecutive in the data item set. In one or more examples, a data item may be a pixel value or a difference between two pixel values.

[0021] In general, gradient coding is more computationally intensive than run-length coding because gradient coding involves subtraction for each pixel and stores the difference between one pixel and the next, whereas run-length coding scans an image pixel by pixel and counts the repetitions. However, for images with long, smooth transitions, gradient coding results in higher compression rates than run-length coding.

[0022] One or more examples generally relate to partially encoding image data using run-length coding or gradient coding. For the respective image data, the number of pixels in a run compressible via run-length coding and the number of pixels in a run compressible via gradient coding are determined. The higher of the determined number of pixels in a run compressible via run-length coding and the determined number of pixels in a run compressible via gradient coding is determined. To encode a portion of the image data, the coding scheme (run-length coding or gradient coding) corresponding to the higher of the determined number of pixels in a run is used. The number of pixels encoded in the image data portion may correspond to the determined number of pixels in a run compressible for the coding scheme used.Image data may be processed iteratively until, as non-limiting examples, a line of image data or an entire image of image data is encoded.

[0023] In one or more examples, for a given row of image data, the number of pixels in each run that are compressible via run-length coding is determined, and the maximum number of pixels in any one of the respective runs that are compressible via run-length coding is determined. For the given row of image data, the number of pixels in each run that are compressible via gradient coding is determined, and the maximum number of pixels in any one of the respective runs that are compressible via gradient coding is determined. The coding scheme corresponding to the higher of the maximum number of pixels in the single run that is compressible via run-length coding or the maximum number of pixels in the single run that is compressible via gradient coding is used to encode the row of image data. This process may be performed iteratively until all of the rows of image data are encoded.

[0024] In one or more examples, any suitable means for expressing the number of pixels may be used without exceeding the scope of this disclosure. As a non-limiting example, a number of pixels may be expressed as a value representing a quantity of pixels, such as a count (e.g., 1, 2, 3, ... 10, ... 100 pixels, without limitation), a quantity (e.g., bytes used to represent pixel values, without limitation); a value representing a pixel density (e.g., pixels per inch, without limitation); or a fraction of a total quantity (e.g., 1 / 100, 1 / 10, 1 / 4, or 1 / 2 of the pixels in a line of image data or a scene represented by an image, without limitation).

[0025] In one or more examples, the number of pixels in a run compressible via run-length coding or gradient coding may be directly counted, measured, or calculated. In other examples, proxy values may be used for the number of pixels in the individual run compressible via run-length coding or gradient coding. As a non-limiting example, the number of runs per row may be determined for run-length coding and gradient coding, and the coding scheme with the fewest number of runs may be selected. Using the coding scheme that encodes the row with the fewest number of runs means that fewer runs are used to represent the row of image data and, therefore, it is more compact than the alternative coding scheme.

[0026] The examples discussed herein may be particularly suitable for grayscale image coding. A grayscale image is an image in which the value of each pixel represents only an amount of light. A pixel value therefore represents only the intensity. Grayscale images differ from single-bit, bitonal black-and-white images, which in the context of computer imaging are images with only two colors: black and white. In a grayscale image, the respective pixels may, as a non-limiting example, have a value ranging from 0 (black) to 255 (white) for 8-bit images. The use of other pixel value ranges does not exceed the scope of this disclosure. The values in between represent different shades of gray (i.e., the amount of light present).

[0027] Because pixel values in grayscale images represent only intensity, or the amount of light, in a natural image captured with a still or motion-capturing device, portions of the image closer to a light source will have more captured light than portions farther from the light source. In an image of a natural scene, some portions of the image farther from a light source may have uniform light intensity (a uniform pixel value), and some portions of the image closer to a light source may have less uniform or varying light intensity (varying pixel values).As explained above, run-length coding may be particularly suitable for those portions of the image that have uniform pixel values, and gradient coding may be particularly suitable for those portions of the image that have smoothly varying pixel values.

[0028] One or more examples relate to a scanline encoder that provides both run-length coding and gradient coding and selectively applies run-length coding or gradient coding to a line of a grayscale image to provide improved compression.

[0029] Machine vision applications, such as detecting moving objects or light patterns, often use grayscale images generated by cameras or computed based on information captured or generated by cameras. For example, a modern car headlight (a complete lighting arrangement at the front of the vehicle, which may include one or more of the high beam, low beam, turn signals, and optionally other lights) includes a camera. The headlight camera typically has a high resolution (> 16,000 pixels) and a frame rate of at least 60 frames per second (fps). A headlight unit or zone controller transmits an 8-bit grayscale image using a transmission protocol (e.g., RFC4175, without limitation) over an Ethernet physical layer to a device controlling the headlight. The bandwidth to transmit a 32-bit grayscale image is limited.The transmission speed of a 1,000-pixel, 8-bit / pixel image is 23,000 pixels * 8-bit / pixel * 60 fps = 15.36 Mbps. RFC4175 specifies line-by-line transmission. Compression is helpful, but functional safety requires lossless data compression.

[0030] One or more examples generally relate to an image capture system including a grayscale image capture device and a scanline encoder that selectively applies run-length coding or gradient coding to a grayscale image generated by the image capture device to provide enhanced compression. In one or more examples, the image capture system may be included in an automotive headlight.

[0031] Fig. 1 is a flowchart showing a process 100 for encoding an image via run-length coding or gradient coding.

[0032] Although the example process 100 illustrates a particular sequence of operations, the sequence may be changed without departing from the scope of the present disclosure. For example, some of the illustrated operations may be performed in parallel or in a different sequence that does not significantly affect the function of the process 100. In other examples, different components of an example device or system implementing the process 100 may perform functions at substantially the same time or in a specific sequence.

[0033] According to one or more examples, the process 100 includes, for at least a portion of an image, determining a maximum of: a number of pixels in a run that is compressible via run-length coding and a number of pixels in a run that is compressible via gradient coding at operation 102. In one or more examples, the process 100 may include determining the number of pixels per run that is compressible via run-length coding and the number of pixels per run that is compressible via gradient coding. The process 100 may include determining the maximum number of pixels in a run that is compressible via run-length coding and the maximum number of pixels in a run that is compressible via gradient coding.The process 100 may include determining the maximum number of pixels in a run that is compressible by run-length encoding and the maximum number of pixels in a run that is compressible by gradient encoding.

[0034] According to one or more examples, process 100 includes selectively encoding at least some pixels of an image via run-length encoding or gradient encoding according to the determined maximum number of pixels in a run that is compressible at operation 104. In one or more examples, the number of pixels encoded at operation 104 corresponds to the total number of pixels in an image row. In one or more examples, the number of pixels encoded at operation 104 may correspond to a portion of a row. The row portion may include a number of pixels corresponding to the maximum number of pixels in a run determined at operation 102.

[0035] The process 100 may optionally include selectively encoding remaining pixels of the image using one or more of run-length encoding or gradient encoding, based at least in part on the respectively determined maximum number of pixels in individual runs that are compressible using run-length encoding or gradient encoding. The process 100 may optionally include transmitting the image over a network, wherein the image comprises a portion of image data encoded using run-length encoding and a portion of the image data encoded using gradient encoding.

[0036] Fig. 2 illustrates an example process 200 for determining the maximum number of: the number of pixels in a run that is compressible via run-length encoding and the number of pixels in a run that is compressible via gradient encoding, according to one or more examples.

[0037] Although example operation 200 illustrates a particular sequence of operations, the sequence may be changed without departing from the scope of the present disclosure. For example, some of the illustrated operations may be performed in parallel or in a different sequence that does not significantly affect the function of operation 200. In other examples, different components of an example device or system implementing operation 200 may perform functions at substantially the same time or in a specific sequence.

[0038] According to one or more examples, process 200 includes determining the number of pixels in a run that is compressible via run-length encoding in operation 202. In one or more examples, this determination is made for a respective row of an image.

[0039] According to one or more examples, process 200 includes determining the number of pixels in a run that is compressible via gradient encoding in operation 204. In one or more examples, this determination is made for the same respective image row as operation 202.

[0040] According to one or more examples, process 200 includes determining the maximum number of the following elements: the number of pixels in a run that is compressible via run-length encoding and the number of pixels in a run that is compressible via gradient encoding, at operation 206. Any suitable technique may be used to determine the highest number. As non-limiting examples, the numbers of pixels compressible in respective runs may be counted and compared; the amount of data compressed in respective runs may be determined and compared; the numbers of respective runs that are compressible via run-length and gradient encoding may be determined, and the encoding scheme corresponding to the fewest number of runs; and combinations and subcombinations thereof may be selected.

[0041] Fig. 3 illustrates an example process 300 for determining the number of pixels in a run that is compressible via run-length encoding, according to one or more examples.

[0042] Although the example process 300 illustrates a particular sequence of operations, the sequence may be changed without departing from the scope of the present disclosure. For example, some of the illustrated operations may be performed in parallel or in a different sequence that does not significantly affect the function of the process 300. In other examples, different components of an example device or system implementing the process 300 may perform functions at substantially the same time or in a specific sequence.

[0043] According to one or more examples, process 300 includes determining a number of pixels in a pixel sequence having the same pixel value at operation 302. In one or more examples, process 300 may count the number of pixels in a sequence that each have the same pixel value. In a case where an entire row of image data is to be encoded using run-length coding or gradient coding, process 300 may determine, for the row, the number of pixels in respective sequences that each have the same pixel values.

[0044] The respective pixel sequences compressible by one of the respective encoding algorithms represent a "run," and the number of pixels in a run is the "run length." A respective row may have multiple runs of pixel values, and process 300 may determine respective run lengths for multiple respective runs in a respective row.

[0045] According to one or more examples, process 300 includes determining the number of pixels in a run that is compressible via run-length coding based at least in part on the determined number of pixels in the sequence that have the same pixel value in operation 304. In a case where an entire line of image data is to be encoded using run-length coding or gradient coding, and a respective line has multiple runs, process 300 may select the longest run-length (run with the highest pixel count) and use that number as the number of pixels in a run that is compressible via run-length coding.

[0046] Fig. 4 illustrates an example process 400 for determining the number of pixels in a run that is compressible via gradient coding, according to one or more examples.

[0047] Although the example process 400 illustrates a particular sequence of operations, the sequence may be changed without departing from the scope of the present disclosure. For example, some of the illustrated operations may be performed in parallel or in a different sequence that does not significantly affect the function of the process 400. In other examples, different components of an example device or system implementing the process 400 may perform functions at substantially the same time or in a specific sequence.

[0048] According to one or more examples, process 400 includes determining a number of pixels in a sequence where a difference between adjacent pixel values in a sequence is the same at operation 402. In one or more examples, process 400 may include counting the number of consecutive pixels having the same difference between adjacent pixel values for a respective row of the image, where the sequence is the pixels in the respective row. The respective sets of such consecutive pixels have a constant change, and the number of consecutive pixels having the constant change is the length of a run of constant change. A row of image data may have multiple runs of constant change, and therefore, process 400 may determine respective lengths for multiple respective constant changes of runs of constant change in a respective row.

[0049] According to one or more examples, process 400 optionally includes setting the determined number of pixels at which the difference between adjacent pixel values is equal to zero or NULL in response to and to indicate a determination that the difference between adjacent pixel values exceeds a second predetermined threshold at operation 406. In one or more examples, the second predetermined threshold may represent an upper limit for a difference in pixel values that may be present, for example, in a transmission, such as transmission 600 of Fig. 6. In one or more examples, the upper limit may be determined by a number of bits available to represent the difference in pixel values. In the Fig. 6, two 4-bit two's complement numbers are used to determine a difference in pixel values of a run encoded via gradient coding. The two 4-bit numbers represent a difference of -8 to 7 or -7 to 8. If a difference between two adjacent pixels is greater than the second predetermined threshold, no gradient coding is used, and the determined number of pixels where the difference between adjacent pixel values is the same is set to zero or ZERO. The second predetermined threshold may be chosen based on specific operating conditions, such as the number of bits available to represent the difference in pixel values (using more or fewer bits to represent the difference does not exceed the scope of this disclosure) or a convention used to represent the number (e.g.,two's complement, without restriction).

[0050] According to one or more examples, process 400 optionally includes setting the determined number of pixels at which the difference between adjacent pixel values is equal to zero or NULL in response to and to indicate a determination that the difference between adjacent pixel values exceeds a second predetermined threshold at operation 406. In one or more examples, the second predetermined threshold may represent an upper limit for a difference in pixel values that may be present, for example, in a transmission, such as transmission 600 of Fig. 6. In one or more examples, the upper limit may be determined by a number of bits available to represent the difference in pixel values. In the Fig. 6, two 4-bit two's complement numbers are used to indicate a difference in pixel values of a run encoded via gradient encoding. The two 4-bit numbers may be used to represent a difference from -8 to 7 or -7 to 8. If a difference between two adjacent pixels is greater than the second predetermined threshold, no gradient encoding is used, and the determined number of pixels where the difference between adjacent pixel values is equal is set to zero or NULL. The second predetermined threshold may be chosen based on specific operating conditions, such as the number of bits available to represent the difference in pixel values or a convention used to represent the number (e.g., two's complement, without limitation).

[0051] According to one or more examples, process 400 includes determining the number of pixels in a run that is compressible via gradient coding based at least in part on the determined number of pixels, where the difference between adjacent pixel values in the sequence is the same at operation 408. In a case where a respective line of image data has multiple constant changes, process 400 may select the longest run length and use that number as the number of pixels in a run that is compressible via gradient coding.

[0052] Fig. 5 illustrates an example process 500 for transmitting an encoded line of image data, according to one or more examples.

[0053] Although the example process 500 illustrates a particular sequence of operations, the sequence may be changed without departing from the scope of the present disclosure. For example, some of the illustrated operations may be performed in parallel or in a different sequence that does not significantly affect the function of the process 500. In other examples, different components of an example device or system implementing the process 500 may perform functions at substantially the same time or in a specific sequence.

[0054] According to one or more examples, process 500 includes selectively encoding a portion of an image via run-length encoding or gradient encoding, whichever provides the determined maximum number of pixels in runs compressible via run-length encoding or gradient encoding in operation 502. In one or more examples, process 500 may encode the image data line according to one or more of process 100, process 200, process 300, and process 400.

[0055] According to one or more examples, at operation 504, process 500 includes setting a value of an indicator bit of a transmission including an encoded portion of an image, where the value of the indicator bit indicates the encoding scheme used to encode the encoded image portion. A first value settable at the indicator bit indicates gradient encoding, and a second value settable at the indicator bit indicates run-length encoding, where the first value is different from the second value. In one or more examples, a first value of the indicator bit (e.g., a "0" or a "1") indicates gradient encoding, and a second value of the indicator bit (e.g., the other of "0" or "1") indicates run-length encoding. In one or more examples, a bit of a Real-Time Transport Protocol (RTP) frame may be used as the indicator bit.RTP typically involves sending lines of uncompressed image and video data, so there may be unused bits due to the reduced size of the encoded image data line.

[0056] According to one or more examples, process 500 includes sending the transmission over a network, wherein the transmission includes the encoded line of image data and the set indicator bit. In one or more examples, the transmission may have a format according to the RTP payload format for uncompressed video, except that the line of image data may be encoded / compressed according to operation 502.

[0057] Fig. 6 is a block diagram illustrating an example of a portion of a transmission 600 (also referred to herein as “transmission portion 600”) for transmitting encoded image data, according to one or more examples.

[0058] The transmission section 600 includes fields for the grayscale byte 602, the encoded data length 604, and the gradient value 608. The encoded data length field 604 includes a bit for the indicator bit 606. The gradient value field 608 includes respective subfields for a first component 610 and a second component 612.

[0059] Grayscale byte 602 is the value of one byte in a respective row of image data. Encoded data length 604 is the length or number of pixels represented in that encoding. In the case of run-length encoding, the value of encoded data length 604 represents the run-length for the value stored in grayscale byte 602. Indicator bit 606 indicates run-length encoding or gradient encoding. If indicator bit 606 indicates gradient encoding, then grayscale byte 602 is the value of the beginning byte of the image data row. First component field 610 and second component field 612 each store signed 4-bit values (using two's complement notation) that together represent a difference between grayscale values.

[0060] In one or more examples, image data encoded according to one or more examples may be recovered by processing the encoded image data using the decoding algorithm corresponding to the encoding algorithm. Any suitable technique may be used to specify the encoding algorithm used to encode a respective line of the encoded image (e.g., specify the decoder, without limitation), namely run-length encoding or gradient encoding. Notably, any scanline gradient decoder or scanline run-length decoder may be used once the appropriate decoder has been identified.

[0061] Fig. 7 illustrates an example process 700 for decoding an image, according to one or more examples.

[0062] Although the example process 700 illustrates a particular sequence of operations, the sequence may be changed without departing from the scope of the present disclosure. For example, some of the illustrated operations may be performed in parallel or in a different sequence that does not significantly affect the function of the process 700. In other examples, different components of an example device or system implementing the process 700 may perform functions at substantially the same time or in a specific sequence.

[0063] According to one or more examples, process 700 includes determining an encoding scheme used to encode a portion of the encoded image data, at least in part in response to an indicator bit included in the encoded image data in operation 702. In one or more examples, a value of the indicator bit is used to indicate run-length encoding or gradient encoding. A first value of the indicator bit indicates run-length encoding, and a second value of the indicator bit indicates gradient encoding. In one or more examples, the indicator bit may be associated with the portion of the encoded image data. As a non-limiting example, the indicator bit may be associated with the portion of the encoded image data based on a predetermined format for a packet or frame for transmitting the portion of the encoded image data.For example, the position of the indicator bit in a transmission is pre-assigned to a position in the transmission that includes the portion containing the encoded image data. As a non-limiting example, the indicator bit 606 is the first bit of the encoded data length field 604 of the transmission 600, and it is associated with the gradient value field 608 of . Fig. 6 pre-assigned.

[0064] According to one or more examples, process 700 includes decoding the portion of the encoded image data using run-length decoding in response to the indicator bit indicating that the portion of the encoded image data was encoded using run-length coding; or gradient decoding in response to the indicator bit indicating that the portion of the encoded image data was encoded using gradient decoding at operation 704.

[0065] Fig. 8 illustrates an example process 800 for decoding a line of image data, according to one or more examples.

[0066] Although the example process 800 illustrates a particular sequence of operations, the sequence may be changed without departing from the scope of the present disclosure. For example, some of the illustrated operations may be performed in parallel or in a different sequence that does not significantly affect the function of the process 800. In other examples, different components of an example device or system implementing the process 800 may perform functions at substantially the same time or in a specific sequence.

[0067] According to one or more examples, process 800 includes obtaining (e.g., extracting through processing, without limitation) a pixel value from a portion of the encoded image data at operation 802. In one or more examples, the pixel value may be obtained, without limitation, from a predetermined byte of the encoded image data, such as the beginning byte of the encoded image data.

[0068] According to one or more examples, process 800 includes obtaining (e.g., extracting through processing, without limitation) an encoded data length value from the portion of the encoded image data at operation 804. In one or more examples, the encoded data length value may be obtained from one or more predetermined bytes of the encoded image data, such as the next N bytes (where N is an integer greater than 1) sequentially following a predetermined byte that includes the pixel value, without limitation.

[0069] According to one or more examples, process 800 includes obtaining an indicator value, where the indicator value indicates a coding scheme used to encode the portion of the encoded image data at operation 806. The coding schemes that can be indicated by the indicator value include run-length coding and gradient coding. In one or more examples, the indicator value may be obtained from an indicator bit included in the portion of the encoded image data. In one or more examples, the indicator bit may be a bit of the portion of the encoded image data or may be a bit of a transmission (e.g., one or more packets, without limitation) that included the portion of the encoded image data.

[0070] According to one or more examples, process 800 includes decoding the portion of the encoded image data via the encoding scheme indicated by the indicator and decoding any remaining portions of the encoded image data via one or more of run-length encoding or gradient encoding at operation 808. In one or more examples, decoding the portion of the encoded image data includes decoding via gradient encoding or run-length encoding, as indicated by the indicator. Process 800 may be performed to decode the remaining portions of the image data, if any.

[0071] Fig. 9 is a flowchart illustrating a process 900 for encoding image data according to one or more examples.

[0072] At block 902, process 900 receives unencoded image data having a length LEN_U (i.e., having an enclosed number of pixels equal to LEN_U). In one or more examples, this is image data for one line of a grayscale image.

[0073] In block 1000, the process 900 executes a subroutine ("Subroutine 1000") "Get Same Color Count" (where "Color" is understood to be the pixel value), which is a subroutine that determines and returns, for each pixel value in the unencoded image data of length LEN_U, a value representing the number of pixels in a run that is compressible via run-length coding. The subroutine 1000 is described further below with reference to Fig. 10. In one or more examples, some or all of the operations of subroutine 1000 may be performed by a run-length encoding circuit that also performs run-length encoding.

[0074] In block 1100, the process 900 executes a subroutine ("Subroutine 1100") "Get amount of color gradients," which is a subroutine that determines and returns, for each difference value that the unencoded image data of length LEN_U has, a number of pixels in a run that is compressible via gradient coding. The subroutine 1100 is described below with reference to Fig. 11. Subroutine 1100 may be initialized and executed for a period of time that partially or completely overlaps with a period of time that subroutine 1000 executes, or for a period of time that does not overlap with a period of time of subroutine 1000. In one or more examples, some or all of the operations of subroutine 1100 may be performed by a gradient encoding circuit that also performs gradient encoding.

[0075] Block 904 receives the output of subroutine 1000 and determines the number of pixels in a run that is compressible via run-length coding, where the number of pixels in a run that is compressible via run-length coding is denoted by LEN_R for the uncoded image data. Block 906 receives the output of subroutine 1100 and determines the number of pixels in a run that is compressible via gradient coding, where the number of pixels in a run that is compressible via gradient coding is denoted by LEN_G for the uncoded image data. Block 904 and block 906 may be executed during respective substantially overlapping time periods.

[0076] In block 908, process 900 determines whether LEN_R is greater than or equal to LEN_G. If "yes," process 900 proceeds to block 912; if "no," process 900 proceeds to block 910. In one example, run-length encoding is preferable when the number of pixels in a run compressible via gradient encoding is equal to the number of pixels in a run compressible via run-length encoding, because the payload and gradient value do not need to be transmitted, thereby saving bandwidth.

[0077] In block 912, process 900 encodes the amount LEN_R of uncoded image data using run-length coding. In block 914, process 900 subtracts the number of pixels in a run that is compressible using run-length coding LEN_R from the number of pixels in the uncoded image data LEN_U, and the result is the remaining number of uncoded pixels in the image data.

[0078] In block 910, process 900 gradient-encodes the set LEN_G of uncoded image data. In block 916, the number of pixels in a run that is compressible via gradient encoding LEN_G is subtracted from the number of pixels in the uncoded image data LEN_U, and the result is the remaining number of uncoded pixels in the image data.

[0079] In block 918, process 900 determines whether the number of remaining image data pixels = 0 (i.e., whether the entire image has been encoded) or not. If "no," process 900 returns to block 902. If "yes," process 900 compresses all remaining unencoded pixels—such as all individual pixels to which neither run-length encoding nor gradient encoding has been applied, without limitation—using RLE and exits.

[0080] Fig. 10 is a flowchart illustrating a subroutine 1000 for determining a number of pixels in a run compressible via run-length encoding for each pixel value in image data, according to one or more examples.

[0081] In block 1002, subroutine 1000 receives uncoded image data of length LEN_U. In block 1004, subroutine 1000 executes a function to obtain the first pixel value of the uncoded image data and sets a variable "current value" equal to the output of the function. In block 1006, the function executed in block 1004 returns a pixel value stored in "current value," which can be compared to the next pixel value (if any).

[0082] In block 1008, subroutine 1000 determines whether a next pixel value exists. If "no," subroutine 1000 ends. If "yes," then subroutine 1000 executes a function in block 1010 to obtain the next pixel value of the unencoded image data. In block 1012, subroutine 1000 receives and stores the output of the function in the variable "next_value." In block 1014, subroutine 1000 determines whether the current value is equal to the next value. If "no," the subroutine ends. If "yes," then subroutine 1000 executes an "increment_equal_counter" function in block 1016, which increments a variable "equal_count_value," used as a runlength counter. In block 1018, subroutine 1000 updates the value of the equal_counter (increments it by 1).In block 1020, subroutine 1000 sets the current value equal to the next value, effectively making the next value the current value, and then returns to block 1006.

[0083] Fig. 11 is a flowchart illustrating a subroutine 1100 for determining a number of pixels in a run that is compressible via gradient encoding for each difference value exhibited by the image data, according to one or more examples.

[0084] In block 1102, subroutine 1100 receives uncoded image data of length LEN_U. In block 1104, subroutine 1100 executes a function to obtain the first pixel value of the uncoded image data and sets a variable "current value" equal to the output of the function. In block 1106, the function executed in block 1104 returns a pixel value stored in "current value," which can be compared to the next pixel value (if any).

[0085] In block 1108, subroutine 1100 determines whether a next pixel value exists. If "no," subroutine 1100 ends. If "yes," subroutine 1100 executes a function in block 1110 to obtain the next pixel value of the unencoded image data. In block 1112, subroutine 1100 receives and stores the output of the function in the variable "next_value."

[0086] In block 1114, subroutine 1100 subtracts the current value from the next value and sets a variable "diff" equal to the result. In block 1116, subroutine 1100 stores the output of the difference operation in block 1114 in the variable "difference."

[0087] In block 1118, subroutine 1100 determines whether the difference value is within predetermined bit boundaries. Bit boundaries are the set of bits used to store or transmit the gradient. If the number of bits required to represent the value exceeds the number of bits available to store or transmit the gradient, gradient encoding cannot be used in this case, and since the result is "no," subroutine 1100 ends. If "yes," then in block 1120, subroutine 1100 executes an "increment gradient counter" function that increments a variable "gradient_count," which is used as a counter for the gradient length. In block 1122, subroutine 1100 updates the value of the gradient counter (increments it by 1).In block 1124, subroutine 1100 sets the current value equal to the next value, effectively making the next value the current value, and then returns to block 1106.

[0088] Fig. 12 is a block diagram illustrating a communication system 1200 according to one or more examples.

[0089] The system 1200 includes an encoder 1202, a network 1234, and a decoder 1204. The encoder 1202 includes a frame buffer 1206, a line scanner 1208, a line compressor 1210, a serializer 1212, a network protocol 1214, a network stack 1216, and a network interface driver 1218. The decoder 1204 includes a network interface driver 1220, a network stack 1222, a network protocol 1224, a deserializer 1226, a line decompressor 1228, a line renderer 1230, and a frame buffer 1232.

[0090] The encoder device 1202 is a device or system that includes the encoder discussed herein, for example, a headlight unit or a zone controller of an automobile that includes an encoder and includes or is coupled to an imager (e.g., for electrical communication, without limitation) (e.g., an image capture device that includes a camera and optionally includes sensors (e.g., infrared, sonar, lidar, without limitation), without limitation). In one or more examples, the imager may include an encoder discussed herein. Using the example of a headlight, the brightness may be controlled via a pulse width modulation (PWM) signal applied to a controller (e.g.,a headlight controller or an automotive controller including headlight control functionality, without limitation) at least in response to the imager capturing and encoding an image of the resulting light, an image of the light from one or more other light sources (e.g., a headlight of another vehicle, without limitation), or both, without limitation. The discussion of headlights and automobiles is not intended to limit the scope of this disclosure in any way, and other applications are not beyond the scope of this disclosure. To change the brightness, the duty cycle (relative time between on and off) is changed (e.g., the duty cycle is decreased to increase brightness and increased to decrease brightness, or vice versa, without limitation).

[0091] The decoding device 1204 is a device that includes a decoder discussed herein, such as the headlight controller mentioned above. The encoding device 1202 and the decoding device 1204 communicate over the network 1234, which may be, for example, an automotive network as a non-limiting example. When the encoding device 1202 transmits encoded image data over the network 1234 to the decoding device 1204, the encoding device 1202 may also be referred to as "transmitter 1202" and the decoding device may also be referred to as "receiver 1204."

[0092] The frame buffer 1206 is a temporary storage device that holds a current frame (image data) to be encoded.

[0093] The line scanner 1208 scans the image line stored in the frame buffer 1206 line by line, for example, from top to bottom or from bottom to top. The line scanner 1208 reads the image data line from the frame buffer 1206 and prepares the reading of the image data line for encoding.

[0094] Line compressor 1210 (which may also be referred to herein as "line encoder 1210") encodes the scanned image data line to reduce the amount of data. Line compressor 1210 may perform some or all of the operations of process 100, process 200, process 300, process 400, process 500, process 900, subroutine 1000, or subroutine 1100 discussed above.

[0095] The serializer 1212 converts the encoded image data line into a serial format, ie a bit sequence that can be transmitted over a network.

[0096] The network protocol 1214 defines the rules for how data (here, the encoded image data line) is sent over the network 1234. The network protocol 1214 structures the serialized, encoded image data line into packets or frames and adds headers and footers.

[0097] The network stack 1216 is a collection of software layers that prepares the serialized, encoded image data line for transmission over the network 1234. Each layer has a specific area of responsibility, such as error checking or addressing.

[0098] The network interface driver 1218 is a software component that interfaces with physical network hardware (such as Ethernet or WLAN, without limitation). The network interface driver 1218 takes the packets from the network stack 1216 and sends them over the network 1234. The network protocol 1214, the network stack 1216, and the network interface driver 1218 perform functions of network devices for sending and receiving data over a network, including, but not limited to, the network 1234.

[0099] The network interface driver 1220 is a software component interface with the hardware of the network 1234 and receives the incoming data packets from the network 1234, which includes the serialized, encoded line of image data.

[0100] Network stack 1222 processes the incoming data packets from network 1234, including the serialized, encoded image data line. Network stack 1222 extracts the data from the packets, checks them for errors, and prepares them for further processing by the upper layers.

[0101] The network protocol 1224 extracts the serialized data from the structured packets or frames. The network protocol 1224 understands the rules (headers and footers) specified by the corresponding network protocol 1214 of the encoding device 1202.

[0102] The network interface driver 1220, the network stack 1222, and the network protocol 1224 perform network device functions to send and receive data over a network, including, but not limited to, the network 1234.

[0103] The deserializer 1226 does the opposite of the serializer 1212 and converts the serialized, encoded image data line back into a format suitable for decoding.

[0104] Line decompressor 1228 (which may also be referred to herein as "line decoder 1228") decodes the line of image data back to its original format, undoing the work of the line encoder in the encoding device. Line decompressor 1228 performs some of a set of operations from process 700, process 800, or 900.

[0105] The line renderer 1230 reassembles the image data lines received via the network 1234 and recreates the image from the line data.

[0106] Frame buffer 1232 holds the reconstructed frame (image) after decoding. It can be compared to a canvas on which the image information is displayed after processing.

[0107] Fig. 13 is a block diagram illustrating an apparatus 1300 for encoding a line of image data via run-length encoding or gradient encoding, according to one or more examples. In encoding examples, the apparatus 1300 is a non-limiting example of a line compressor 1210 of Fig. 12.

[0108] Device 1300 includes run-length encoding circuit 1302, gradient encoding logic circuit 1306, and image data 1308.

[0109] Run-length encoding circuit 1302 receives a portion of image data 1308 and encodes a portion of the portion of image data 1308 using gradient encoding, and outputs the portion of the portion of image data 1308 encoded using gradient encoding. Gradient encoding circuit 1304 receives a portion of image data 1308 and encodes a portion of the portion of image data 1308 using run-length encoding, and outputs the portion of the portion of image data 1308 encoded using run-length encoding.In one or more examples, run-length encoding circuitry 1302 determines and provides one or more values representing the number of pixels per run compressible via run-length encoding of the portion of the image data portion 1308, and gradient encoding circuitry 1304 determines and provides one or more values representing the number of pixels per run compressible via gradient encoding of the portion of the image data portion 1308. Logic circuitry 1306 selects the highest number of the number of pixels in a run compressible via run-length encoding circuitry 1302 and gradient encoding circuitry 1304, and logic circuitry 1306 instructs the respective run-length encoding circuitry 1302 and gradient encoding circuitry 1304 to encode the respective portion of the image data portion 1308 according to the highest number of pixels in a run.Logic circuit 1306 iteratively determines the maximum number of pixels in a run that is compressible by run-length encoding circuit 1302 and gradient encoding circuit 1304 until image data portion 1308 has been compressed by one or more of run-length encoding circuit 1302 and gradient encoding circuit 1304.

[0110] As described above, logic circuit 1306 receives respective values representing the number of pixels in a compressible run from run-length encoding circuit 1302 and gradient encoding circuit 1304, determines the highest of one of the numbers, and selectively encodes the portion of the line of image data 1308 with the corresponding one of run-length encoding circuit 1302 and gradient encoding circuit 1304 that corresponds to the highest number. In one or more examples, 1306 may select the output from one of run-length encoding circuit 1302 and gradient encoding circuit 1304 that corresponds to the highest number and use it as the encoded portion, which in combination form image data line 1308. Thus, the number of pixels in the run is defined by the maximum number of pixels compressible via the one of run-length encoding circuit 1302 and gradient encoding circuit 1304.

[0111] In one or more examples, logic circuitry 1306 may perform some or all of the operations of the processes discussed above, including, without limitation, process 100, process 200, or process 900. In one or more examples, run-length encoding circuitry 1302 may perform some or all of the operations of the processes discussed above, including, without limitation, process 300 or subroutine 1000. In one or more examples, gradient encoding circuitry 1304 may perform some or all of the operations of the processes discussed above, including, without limitation, process 400 or system 1200.

[0112] It will be understood by one of ordinary skill in the art that functional elements of embodiments disclosed herein (e.g., functions, operations, acts, processes, and / or methods) may be implemented in any suitable hardware, software, firmware, or combinations thereof. Fig. 14 illustrates non-limiting examples of implementations of functional elements disclosed herein. In some embodiments, some or all portions of the functional elements disclosed herein may be executed by hardware specifically configured to execute the functional elements.

[0113] Fig.14 is a block diagram of circuitry 1400 that may be used, in some embodiments, to implement various functions, operations, acts, processes, and / or methods disclosed herein. Circuitry 1400 includes one or more processors 1402 (sometimes referred to herein as "processors 1402") operably coupled to one or more data storage devices (sometimes referred to herein as "storage 1404"). Storage 1404 includes machine-executable code 1406 stored thereon, and processors 1402 include logic circuitry 1408. Machine-executable code 1406 includes information describing functional elements that may be implemented (e.g., performed) by logic circuitry 1408. The logic circuitry 1408 is configured to implement (e.g., perform) the functional elements described by the machine-executable code 1406.When executing the functional elements described by machine-executable code 1406, circuit logic 1400 should be considered special-purpose hardware configured to execute functional elements disclosed herein. In some embodiments, processors 1402 may perform the functional elements described by machine-executable code 1406 sequentially, concurrently (e.g., on one or more different hardware platforms), or in one or more parallel process streams.

[0114] When implemented by logic circuitry 1408 of processors 1402, machine-executable code 1406 adapts processors 1402 to perform operations of embodiments disclosed herein. For example, machine-executable code 1406 may adapt processors 1402 to perform at least a portion or all of the operations of process 100, process 200, process 300, process 400, process 500, process 700, process 800, process 900, subroutine 1000, subroutine 1100, or system 1200. Machine-executable code 1406 may adapt processors 1402 to include or perform at least a portion or all of the operations of system 1200, encoder 1202, and decoder 1204.

[0115] Processors 1402 may include a general-purpose processor, a special-purpose processor, a central processing unit (CPU), a microcontroller, a programmable logic controller (PLC), a digital signal processor (DSP), an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, another programmable device, or any combination thereof configured to perform the functions disclosed herein. A general-purpose computer, including a processor, is considered a special-purpose computer, while the general-purpose computer executed functional elements corresponding to machine-executable code 1406 (e.g., software code, firmware code, hardware descriptions) related to embodiments of the present disclosure.It should be noted that a general-purpose processor (which may also be referred to herein as a host processor or simply a host) may be a microprocessor, but processors 1402 may alternatively include any conventional processor, controller, microcontroller, or state machine. Processors 1402 may also be implemented as a combination of computing devices, such as a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.

[0116] In some embodiments, storage 1404 includes volatile data storage (e.g., random access memory (RAM)), non-volatile storage (e.g., flash memory, a hard disk drive, a solid-state drive, an erasable programmable read-only memory (EPROM), etc.). In some embodiments, processors 1402 and storage 1404 may be implemented in a single device (e.g., a semiconductor device product, a system-on-chip (SOC), etc.). In some embodiments, processors 1402 and storage 1404 may be implemented in separate devices.

[0117] In some embodiments, the machine-executable code 1406 may include computer-readable instructions (e.g., software code, firmware code). As a non-limiting example, the computer-readable instructions may be stored by the storage 1404, which may be directly accessible by the processors 1402, and executed by the processors 1402 using at least the logic circuitry 1408. Also as a non-limiting example, the computer-readable instructions may be stored in the storage 1404, transferred to a storage device (not shown) for execution, and executed by the processors 1402 using at least the logic circuitry 1408. Accordingly, in some embodiments, the logic circuitry 1408 includes electrically configurable logic circuitry 1408.

[0118] In some embodiments, machine-executable code 1406 may describe hardware (e.g., circuitry) to be implemented in logic circuitry 1408 to perform the functional elements. This hardware may be described at a variety of abstraction levels, from low-level transistor layouts to high-level description languages. At a high abstraction level, a hardware description language (HDL), such as an IEEE standard hardware description language (HDL), may be used. As non-limiting examples, VERILOG®, SYSTEMVERILOG™, or a Very Large Scale Integration (VLSI) hardware description language (VHDL™) may be used.

[0119] HDL descriptions can be converted at will into descriptions at any of numerous other levels of abstraction. As a non-limiting example, a high-level description can be converted into a logic-level description, such as a register transfer language (RTL), a gate-level description (GL), a layout-level description, or a mask-level description. As a non-limiting example, micro-operations performed by hardware logic circuits (e.g.,The logic circuitry 1408 may be described in an RTL and then converted into a GL description by a synthesis tool, and the GL description may be converted into a layout-level description by a placement and routing tool, corresponding to a physical layout of an integrated circuit, a programmable logic device, discrete gate or transistor logic, discrete hardware components, or combinations thereof. Accordingly, in some embodiments, the machine-executable code 1406 may include an HDL, an RTL, a GL description, a mask-level description, another hardware description, or any combination thereof.

[0120] In embodiments where machine-executable code 1406 includes a hardware description (at any level of abstraction), a system (not shown, but including storage 1404) may be configured to implement the hardware description described by machine-executable code 1406. As a non-limiting example, processors 1402 may include a programmable logic device (e.g., an FPGA or a PLC), and logic circuitry 1408 may be electrically controlled to implement circuitry corresponding to the hardware description into logic circuitry 1408. Also as a non-limiting example, logic circuitry 1408 may include hard-wired logic fabricated by a manufacturing system (not shown, but including storage 1404) according to the hardware description of machine-executable code 1406.

[0121] Regardless of whether the machine-executable code 1406 includes computer-readable instructions or a hardware description, the logic circuitry 1408 is adapted to perform the functional elements described by the machine-executable code 1406 when implementing the functional elements of the machine-executable code 1406. It should be noted that although a hardware description may not directly describe functional elements, a hardware description indirectly describes functional elements that the hardware elements described by the hardware description can perform.

[0122] As used in the present disclosure, the terms "module" or "component" may refer to specific hardware implementations configured to perform the actions of the module or component and / or software objects or software routines that may be stored on and / or executed by general-purpose hardware (e.g., computer-readable media, processing devices, etc.) of the computing system. In some embodiments, the various components, modules, engines, and services described in the present disclosure may be implemented as objects or processes that execute on the computing system (e.g., as separate threads).Although some of the systems and methods described in the present disclosure are generally described as being implemented in software (stored on and / or executed by general purpose hardware), specific hardware implementations or a combination of software and specific hardware implementations are also possible and are contemplated.

[0123] As used in the present disclosure, the term "combination" with respect to a plurality of elements may include a combination of all of the elements or any of various different subcombinations of some of the elements. For example, the phrase "A, B, C, D, or combinations thereof" may refer to one of A, B, C, or D; the combination of each of A, B, C, and D; and any subcombination of A, B, C, or D, such as A, B, and C; A, B, and D; A, C, and D; B, C, and D; A and B; A and C; A and D; B and C; B and D; or C and D.

[0124] Terms used in the present disclosure and in particular in the appended claims (e.g., contents of the appended claims) are generally intended to be "open-ended" terms (e.g., the term "including" should be interpreted as "including, but not limited to," the term "comprising" should be interpreted as "at least comprising," the term "includes" should be interpreted as "includes, but not limited to," etc.).

[0125] Furthermore, if a specific number of introduced claim statements are intended, that intention will be expressly stated in the claim, and in the absence of such reciting, no such intention exists. As an aid to understanding, for example, the following appended claims may include the use of the introductory phrases "at least one" and "one or more" to introduce claim statements. However, the use of such phrases should not be construed to imply that the introduction of a claim statement by the indefinite articles "a" or "an" limits a particular claim containing such introduced claim statement to embodiments containing only one such statement, even if the same claim includes the introductory phrases "one or more" or "at least one" and indefinite articles such as "a" and / or "an" (e.g.,"a" and / or "an" should be interpreted to mean "at least one" or "one or more"; the same applies to the use of certain articles used to introduce claim particulars.

[0126] Furthermore, even if a particular number of introduced claim details is explicitly recited, those skilled in the art will recognize that such a recited number should be interpreted to mean at least the recited number (e.g., simply stating "two details" without other modifiers means at least two details or two or more details). Furthermore, where a convention analogous to "at least one of A, B, and C, etc." or "one or more of A, B, and C, etc." is used, such construction is generally intended to include A alone, B alone, C alone, A and B together, A and C together, B and C together, or A, B, and C together, etc.

[0127] Furthermore, any disjunctive word or phrase representing two or more alternative terms, whether in the description, claims, or drawings, should be understood to contemplate the possibility of including either term, one term or the other, or both. For example, the phrase "A or B" should be understood to include the possibilities "A" or "B" or "A and B."

[0128] Other non-limiting examples include: Example 1: A method comprising: for at least a portion of an image, determining a maximum number of: a number of pixels in a run compressible via run-length coding and a number of pixels in a run compressible via gradient coding; and selectively encoding at least some pixels of the image via one of the run-length coding and the gradient coding that corresponds to the determined maximum number. Example 2: The method of example 1, comprising: selectively encoding the remaining pixels of the image via one or more of run-length encoding or gradient encoding, based at least in part on the respectively determined maximum numbers of pixels in runs that are compressible via run-length encoding or gradient encoding. Example 3: The method of any one of examples 1 and 2, comprising sending a transmission over a network, wherein the transmission includes the encoded image and an indicator bit, the indicator bit indicating a coding scheme used to encode the encoded image, the coding scheme to be indicated by the indicator bit including run-length coding and gradient coding. Example 4: The method of any one of Examples 1 to 3, wherein determining the maximum number of: the number of pixels in the run compressible via run-length encoding and the number of pixels in the run compressible via gradient encoding comprises: determining the number of pixels in the run compressible via run-length encoding; determining the number of pixels in the run compressible via gradient encoding; and determining the maximum number of: the number of pixels in the run compressible via run-length encoding and the number of pixels in the run compressible via gradient encoding. Example 5: The method of any one of examples 1 to 4, wherein determining the number of pixels in the run that is compressible via run-length encoding comprises: determining a number of pixels in a sequence having the same pixel value; and determining the number of pixels in the run that is compressible via run-length encoding based at least in part on the determined number of pixels in the sequence having the same pixel value. Example 6: The method of any one of examples 1 to 5, wherein determining the number of pixels in the run that is compressible via gradient encoding comprises: determining a number of pixels in a sequence where a difference between adjacent pixel values is the same; and determining the number of pixels in the run that is compressible via gradient encoding based at least in part on the determined number of pixels in the sequence where a difference between adjacent pixel values in the sequence is the same. Example 7: The method of any one of examples 1 to 6, comprising indicating that the determined number of pixels at which the difference between adjacent pixel values is the same is less than a first predetermined threshold. Example 8: The method of any one of examples 1 to 7, comprising setting the determined number of pixels at which the difference between adjacent pixel values is the same to zero in response to a determination that the determined number of pixels at which the difference between adjacent pixel values is the same is less than a first predetermined threshold. Example 9: The method of any one of examples 1 to 8, comprising indicating that the difference between adjacent pixel values exceeds a second predetermined threshold. Example 10: The method of any one of examples 1 to 9, comprising setting the determined number of pixels at which the difference between adjacent pixel values is the same to zero in response to a determination that the difference between adjacent pixel values exceeds a second predetermined threshold. Example 11: The method of any one of examples 1 to 10, wherein selectively encoding at least some pixels of the image via run-length coding or gradient coding corresponding to the determined maximum number comprises: selectively encoding a remaining portion of the image via one or more of run-length coding and gradient coding. Example 12: The method of any one of examples 1 to 11, comprising determining a value of an indicator bit of a transmission including an encoded portion of the image, the value of the indicator bit indicating an encoding scheme used to encode the encoded portion of the image. Example 13: An apparatus comprising: at least one processor; and a memory for storing machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: determine a maximum number of: a number of pixels in a run compressible via run-length coding and a number of pixels in a run compressible via gradient coding; and selectively encoding at least some pixels of an image via one of the run-length coding or the gradient coding that corresponds to the determined maximum number. Example 14: The apparatus of Example 13, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: selectively encode remaining pixels of the image via one or more of run-length encoding or gradient encoding, based at least in part on the respectively determined maximum numbers of pixels in runs compressible via run-length encoding or gradient encoding. Example 15: The apparatus of any one of examples 13 and 14, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: determine the number of pixels in the run that is compressible via run-length encoding; determine the number of pixels in the run that is compressible via gradient encoding; compare the determined number of pixels in the run that is compressible via run-length encoding and the determined number of pixels in the run that is compressible via gradient encoding; and in response to the comparison: determine the maximum number of: the number of pixels in the run that is compressible via run-length encoding and the number of pixels in the run that is compressible via gradient encoding. Example 16: The apparatus of any one of examples 13 to 14, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: determine a number of pixels in a sequence having the same pixel value; and determine the number of pixels in a run that is compressible via run-length encoding based at least in part on the determined number of pixels in the sequence having the same pixel value. Example 17: The apparatus of any one of examples 13 to 16, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: determine a number of pixels in a sequence where a difference between adjacent pixel values is the same; and determine the number of pixels in a run that is compressible by gradient coding based at least in part on the determined number of pixels in the sequence where a difference between adjacent pixel values in the sequence is the same. Example 18: The apparatus of any one of Examples 13 to 17, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: set the determined number of pixels at which a difference between adjacent pixel values is the same to zero in response to a determination that the determined number of pixels at which the difference between adjacent pixel values is the same does not exceed a predetermined threshold. Example 19: The apparatus of any one of examples 13 to 28, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: Indicate that the determined number of pixels at which the difference between adjacent pixel values is the same does not exceed a predetermined threshold. Example 20: The apparatus of any one of Examples 13 to 19, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: set the determined number of pixels at which a difference between adjacent pixel values is the same to zero in response to a determination that the determined number of pixels at which the difference between adjacent pixel values is the same is less than a first predetermined threshold. Example 21: The apparatus of any one of examples 13 to 20, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: Indicate that a certain number of pixels where the difference between adjacent pixel values is the same is less than a first predetermined threshold. Example 22: An apparatus comprising: a run-length encoding circuit; a gradient encoding circuit; and logic circuitry for: determining a maximum number of: a number of pixels in a run compressible via run-length encoding and a number of pixels in the run compressible via gradient encoding; and selectively encoding at least some pixels of an image via one of the run-length encoding and the gradient encoding corresponding to the determined maximum number. Example 23: The apparatus of Example 22, wherein the run-length encoding circuit is to determine the number of pixels in the run that is compressible via run-length encoding. Example 24: The apparatus of any one of examples 22 and 23, wherein the run-length encoding circuit for determining the number of pixels in the run that is compressible via run-length encoding is to: determine a number of pixels in a sequence having the same pixel value; and determine the number of pixels in the run that is compressible via run-length encoding based at least in part on the determined number of pixels in the sequence having the same pixel value. Example 25: The apparatus of any one of examples 22 to 24, wherein the gradient encoding circuit is to determine the number of pixels in the run that is compressible by gradient encoding. Example 26: The apparatus of any one of Examples 22 to 25, wherein the gradient encoding circuit for determining the number of pixels in the run compressible via gradient encoding is to: determine a number of pixels in a sequence where a difference between adjacent pixel values is the same; and determine the number of pixels in the run compressible via gradient encoding based at least in part on the determined number of pixels in the sequence where the difference between adjacent pixel values in the sequence is the same. Example 27: The apparatus of any one of examples 22 to 25, wherein the logic circuit is to: selectively encode remaining pixels of the image via one or more of run-length encoding or gradient encoding based at least in part on the respectively determined maximum numbers of pixels compressible in runs via run-length encoding or gradient encoding. Example 28: The apparatus of any one of examples 22 to 27, comprising network equipment for transmitting the image to a network, wherein the image comprises a portion of the image data encoded via run-length coding and a portion of the image data encoded via gradient coding. Example 29: The apparatus of any one of examples 22 to 28, wherein the logic circuit is to determine a value of an indicator bit of a transmission including an encoded portion of the image, the value of the indicator bit to indicate an encoding scheme used to encode the encoded portion of the image. Example 30: A method comprising: determining an encoding scheme used to encode a portion of the encoded image data responsive at least in part to an indicator bit included with the encoded image data, wherein a state of the indicator bit is for identifying one of run-length encoding or gradient encoding; and decoding the portion of the encoded image data using: run-length decoding responsive to the indicator bit indicating that the portion of the encoded image data was encoded using run-length decoding; or gradient decoding responsive to the indicator bit indicating that the portion of the encoded image data was encoded using gradient decoding. Example 31: The method of Example 30, comprising: obtaining a pixel value from the portion of the encoded image data; and obtaining an encoded data length value from the portion of the encoded image data. Example 32: The method of any one of examples 30 and 31, comprising: decoding the encoded image data using the encoding scheme specified by the indicator bit, the pixel value, and the encoded data length value. Example 33: The method of any one of examples 30 to 32, comprising: obtaining a further pixel value from a further portion of encoded image data; obtaining a further encoded data length value from a further portion of encoded image data; and decoding the further portion of encoded image data using an encoding scheme indicated by a further indicator bit, the further pixel value, and the further encoded data length value, wherein the further indicator bit is included with the further encoded image data. Example 34: The method of any one of examples 30 to 33, wherein the pixel value comprises a grayscale value or a color value. Example 35: The method of any one of examples 30 to 34, wherein the indicator bit is adjustable to alternately indicate run-length coding or gradient coding. Example 36: The method of any one of examples 30 to 35, comprising: decoding remaining portions of the image data via one or more of run-length decoding or gradient decoding. Example 37: An apparatus comprising: at least one processor; and a memory having hardware-executable instructions stored thereon, the instructions, when executed by the at least one processor, enabling the at least one processor to: determine an encoding scheme used to encode a portion of the encoded image data at least in part in response to an indicator bit included with the encoded image data, wherein a value of the indicator bit is to identify one of run-length encoding or gradient encoding; in response to the determined encoding scheme, decode the portion of the encoded image data using: run-length decoding in response to the indicator bit indicating that the portion of the encoded image data was encoded using run-length encoding;or gradient decoding in response to the indicator bit indicating that the portion of the encoded image data was encoded using gradient decoding; Example 38: The apparatus according to Example 37, comprising: a run-length decoding circuit for decoding coded image data via run-length decoding; and a gradient decoding circuit for decoding coded image data using gradient decoding. Example 39: The device according to any one of examples 37 and 38, wherein the indicator bit is adjustable to alternately indicate run-length coding or gradient coding. Example 40: The apparatus of any one of examples 37 to 39, wherein the instructions, when executed by the at least one processor, enable the at least one processor to: obtain a pixel value from the portion of the encoded image data; and obtain an encoded data length value from the portion of the encoded image data. Example 41: The apparatus of any one of examples 37 to 40, wherein the instructions, when executed by the at least one processor, enable the at least one processor to: decode the encoded image data using the encoding scheme indicated by the indicator bit, the pixel value, and the encoded data length value. Example 42: The apparatus of any one of examples 37 to 41, wherein the instructions, when executed by the at least one processor, enable the at least one processor to: obtain a further pixel value from a further portion of the encoded image data; obtain a further encoded data length value from a further portion of encoded image data; and decode the further portion of encoded image data using an encoding scheme indicated by a further indicator bit, the further pixel value, and the further encoded data length value, the further indicator bit being included with the further encoded image data. Example 43: The device of any one of examples 37 to 42, wherein the pixel value comprises a grayscale value or a color value.

[0129] Although the present disclosure has been described herein with reference to certain illustrated embodiments, those of ordinary skill in the art will recognize and appreciate that the present invention is not limited thereto. Rather, many additions, omissions, and modifications may be made to the illustrated and described embodiments without departing from the scope of the invention as claimed below, along with its legal equivalents. Furthermore, features of one embodiment may be combined with features of another embodiment and still be included within the scope of the invention contemplated by the inventor. QUOTES CONTAINED IN THE DESCRIPTION

[0000] This list of documents submitted by the applicant was generated automatically and is included solely for the convenience of the reader. This list is not part of the German patent or utility model application. The DPMA assumes no liability for any errors or omissions. Cited patent literature

[0000] US 63 / 376,407

[0001]

Claims

[1] Method comprising: for at least one section of an image, determining a maximum number of: a number of pixels in a run that is compressible via run-length coding and a number of pixels in a run that is compressible via gradient coding; and selectively encoding at least some pixels of the image using one of the run-length encoding or the gradient encoding corresponding to the determined maximum number. [2] A method according to claim 1, comprising: selectively encoding the remaining pixels of the image via one or more of run-length coding or gradient coding, based at least in part on the respectively determined maximum numbers of pixels in runs that are compressible via run-length coding or gradient coding. [3] The method of claim 2, comprising sending a transmission over a network, the transmission including the coded image and an indicator bit, the indicator bit indicating a coding scheme used to encode the coded image, the coding scheme to be indicated by the indicator bit including run-length coding and gradient coding. [4] The method of claim 1, wherein determining the maximum number of: the number of pixels in the run compressible via run-length coding and the number of pixels in the run compressible via gradient coding. Determining the number of pixels in the run that is compressible via run-length coding; Determining the number of pixels in the run that is compressible via gradient coding; and Determining the maximum number of: the number of pixels in the run that is compressible via run-length coding and the number of pixels in the run that is compressible via gradient coding. [5] The method of claim 4, wherein determining the number of pixels in the run that is compressible via run-length coding comprises: Determining a number of pixels in a sequence with the same pixel value; and Determining the number of pixels in the run that is compressible via run-length coding based at least in part on the determined number of pixels in the sequence that have the same pixel value. [6] The method of claim 4, wherein determining the number of pixels in the run that is compressible by gradient coding comprises: Determining a number of pixels in a sequence, wherein a difference between adjacent pixel values is the same; and Determining the number of pixels in the run that is compressible by gradient coding based at least in part on the determined number of pixels in the sequence where a difference between adjacent pixel values in the sequence is the same. [7] The method of claim 6, comprising setting the determined number of pixels at which the difference between adjacent pixel values is the same to zero in response to a determination that the determined number of pixels at which the difference between adjacent pixel values is the same is less than a first predetermined threshold. [8] The method of claim 6, comprising setting the determined number of pixels at which the difference between adjacent pixel values is the same to zero in response to a determination that the difference between adjacent pixel values exceeds a second predetermined threshold. [9] The method of claim 1, wherein selectively encoding at least some pixels of the image via one of run-length encoding or gradient encoding corresponding to the determined maximum number comprises: selectively encoding a remaining portion of the image via one or several of run-length coding or gradient coding. [10] A method according to claim 1, comprising determining a value of an indicator bit of a transmission including an encoded portion of the image, the value of the indicator bit indicating a coding scheme used to encode the encoded portion of the image. [11] Facility comprising: at least one processor; and a memory for storing machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: Determining a maximum number of: a number of pixels in a run that is compressible via run-length coding and a number of pixels in a run that is compressible via gradient coding; and selectively coding at least some pixels of an image using run-length coding or gradient coding according to the specified maximum number. [12] The apparatus of claim 11, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: selectively encoding the remaining pixels of the image via one or more of run-length coding or gradient coding, based at least in part on the respectively determined maximum numbers of pixels in runs that are compressible via run-length coding or gradient coding. [13] The apparatus of claim 11, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: Determining the number of pixels in the run that is compressible via run-length encoding; Determining the number of pixels in the run that is compressible via gradient coding; Comparing the determined number of pixels in the run that is compressible by run-length coding and the determined number of pixels in the run that is compressible by gradient coding; and in response to the comparison: determining the maximum number of: the number of pixels in the run that is compressible via run-length coding and the number of pixels in the run that is compressible via gradient coding. [14] The apparatus of claim 13, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: Determining a number of pixels in a sequence with the same pixel value; and Determining the number of pixels in a run that is compressible via run-length coding based at least in part on the determined number of pixels in the sequence that have the same pixel value. [15] The apparatus of claim 12, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: Determining a number of pixels in a sequence, wherein a difference between adjacent pixel values is the same; and Determining the number of pixels in a run that is compressible by gradient coding based at least in part on the determined number of pixels in the sequence where a difference between adjacent pixel values in the sequence is the same. [16] The apparatus of claim 12, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: Setting the determined number of pixels at which the difference between adjacent pixel values is the same to zero in response to a determination that the determined number of pixels at which the difference between adjacent pixel values is the same does not exceed a predetermined threshold. [17] The apparatus of claim 12, wherein the memory is configured to store machine-executable instructions that, when executed by the at least one processor, enable the at least one processor to: Setting the determined number of pixels at which the difference between adjacent pixel values is the same to zero in response to a determination that the determined number of pixels for which the difference between adjacent pixel values is the same is less than a first predetermined threshold. [18] Facility comprising: a run-length encoding circuit; a gradient coding circuit; and a logic circuit for: Determining a maximum number of: a number of pixels in a run, which is compressible via run-length coding, and a number of pixels in the run which is compressible via gradient coding; and selectively coding at least some pixels of an image using run-length coding or gradient coding according to the specified maximum number. [19] The apparatus of claim 18, wherein the run-length encoding circuit is to determine the number of pixels in the run that is compressible via run-length encoding. [20] The apparatus of claim 19, wherein the run-length encoding circuit for determining the number of pixels in the run that is compressible via run-length encoding performs the following: Determining a number of pixels in a sequence with the same pixel value; and Determining the number of pixels in the run that is compressible via run-length coding based at least in part on the determined number of pixels in the sequence that have the same pixel value. [21] The apparatus of claim 19, wherein the gradient coding circuit is to determine the number of pixels in the run that is compressible via gradient coding. [22] The apparatus of claim 20, wherein the gradient coding circuit for determining the number of pixels in the run that is compressible via gradient coding is for: Determining a number of pixels in a sequence, wherein a difference between adjacent pixel values is the same; and Determining the number of pixels in the run that is compressible by gradient coding based at least in part on the determined number of pixels in the sequence where a difference between adjacent pixel values in the sequence is the same. [23] The device of claim 18, wherein the logic circuit is for: selectively encoding the remaining pixels of the image via one or more of run-length coding or gradient coding, based at least in part on the respectively determined maximum numbers of pixels compressible in runs via run-length coding or gradient coding. [24] Apparatus according to claim 18, comprising network equipment for transmitting the image to a network, the image comprising a portion of the image data encoded via run-length coding and a portion of the image data encoded via gradient coding. [25] Apparatus according to claim 18, wherein the logic circuit is for determining a value of an indicator bit of a transmission including an encoded portion of the image, the value of the indicator bit being intended to indicate a coding scheme used to encode the encoded portion of the image. [26] Method comprising: determining an encoding scheme used to encode a portion of the encoded image data, at least in part in response to an indicator bit, which is included with the coded image data, wherein a state of the indicator bit is used to identify one of the run-length coding or gradient coding; and Decoding the portion of the encoded image data using: Run-length decoding in response to the indicator bit indicating that the portion of the coded image data was coded using run-length coding; or Gradient decoding in response to the indicator bit indicating that the portion of the coded image data was coded using gradient coding. [27] A method according to claim 26, comprising: Obtaining a pixel value from the portion of the encoded image data; and Obtaining an encoded data length value from the portion of encoded image data. [28] A method according to claim 27, comprising: Decoding the encoded image data using the encoding scheme specified by the indicator bit, the pixel value, and the encoded data length value. [29] A method according to claim 27, comprising: Obtaining another pixel value from another portion of the encoded image data; Obtaining another coded data length value from another section of coded image data; and Decoding the further portion of encoded image data using an encoding scheme indicated by a further indicator bit, the further pixel value and the further encoded data length value, wherein the further indicator bit is included with the further encoded image data. [30] The method of claim 27, wherein the pixel value comprises a grayscale value or a color value. [31] The method of claim 26, wherein the indicator bit is adjustable to alternately indicate run-length coding or gradient coding. [32] A method according to claim 27, comprising: Decoding the remaining portions of the image data using one or more of run-length decoding or gradient decoding. [33] Facility comprising: at least one processor; and a memory having hardware-executable instructions stored thereon, the instructions, when executed by the at least one processor, enabling the at least one processor to: determining an encoding scheme used to encode a portion of the encoded image data at least in part in response to an indicator bit included with the encoded image data, wherein a state of the indicator bit is used to identify one of run-length encoding or gradient encoding; in response to the determined coding scheme, decoding the portion of the encoded image data using: Run-length decoding in response to the indicator bit indicating that the portion of the coded image data was coded using run-length coding; or Gradient decoding in response to the indicator bit indicating that the portion of the coded image data was coded using gradient coding. [34] Device according to claim 33, comprising: A run-length decoding circuit for decoding coded image data using run-length decoding; and Gradient decoding circuit for decoding coded image data using gradient decoding. [35] The device of claim 33, wherein the indicator bit is adjustable to alternately indicate run-length coding or gradient coding. [36] The apparatus of claim 33, wherein the instructions, when executed by the at least one processor, enable the at least one processor to: Obtaining a pixel value from the portion of the encoded image data; and Obtaining an encoded data length value from the portion of encoded image data. [37] The apparatus of claim 36, wherein the instructions, when executed by the at least one processor, enable the at least one processor to: Decoding the encoded image data using the encoding scheme specified by the indicator bit, the pixel value, and the encoded data length value. [38] The apparatus of claim 36, wherein the instructions, when executed by the at least one processor, enable the at least one processor to: Obtaining another pixel value from another portion of the encoded image data; Obtaining another coded data length value from another section of coded image data; and Decoding the further portion of encoded image data using an encoding scheme indicated by a further indicator bit, the further pixel value and the further encoded data length value, wherein the further indicator bit is included with the further encoded image data. [39] The device of claim 36, wherein the pixel value comprises a grayscale value or a color value.

Citation Information

Patent Citations

  • 63/376,407