AU2003268575A1 - Tiling a Compressed Image - Google Patents

Tiling a Compressed Image Download PDF

Info

Publication number
AU2003268575A1
AU2003268575A1 AU2003268575A AU2003268575A AU2003268575A1 AU 2003268575 A1 AU2003268575 A1 AU 2003268575A1 AU 2003268575 A AU2003268575 A AU 2003268575A AU 2003268575 A AU2003268575 A AU 2003268575A AU 2003268575 A1 AU2003268575 A1 AU 2003268575A1
Authority
AU
Australia
Prior art keywords
tile
current
encoded data
decoding
sub
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
AU2003268575A
Other versions
AU2003268575B2 (en
Inventor
Peter Leslie Bell
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from AU2002953377A external-priority patent/AU2002953377A0/en
Application filed by Canon Inc filed Critical Canon Inc
Priority to AU2003268575A priority Critical patent/AU2003268575B2/en
Publication of AU2003268575A1 publication Critical patent/AU2003268575A1/en
Application granted granted Critical
Publication of AU2003268575B2 publication Critical patent/AU2003268575B2/en
Anticipated expiration legal-status Critical
Ceased legal-status Critical Current

Links

Landscapes

  • Compression Of Band Width Or Redundancy In Fax (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Description

S&F Ref: 658521
AUSTRALIA
PATENTS ACT 1990 COMPLETE SPECIFICATION FOR A STANDARD PATENT Name and Address of Applicant: Canon Kabushiki Kaisha 30-2, Shimomaruko 3-chome, Ohta-ku Tokyo 146 Japan Actual Inventor(s): Address for Service: Invention Title: Peter Leslie Bell Spruson Ferguson St Martins Tower Level 31 Market Street Sydney NSW 2000 (CCN 3710000177) Tiling a Compressed Image ASSOCIATED PROVISIONAL APPLICATION DETAILS [33] Country [31] Applic. No(s) AU 2002953377 [32] Application Date 16 Dec 2002 The following statement is a full description of this invention, including the best method of performing it known to me/us:- IP Austraa Documents were received on:
Q.
9 DEC 2003 Batch No: 5815c -1- TILING A COMPRESSED IMAGE Copyright Notice This patent specification contains material that is subject to copyright protection.
The copyright owner has no objection to the reproduction of this patent specification or related materials from associated patent office files for the purposes of review, but otherwise reserves all copyright whatsoever.
Field of the Invention The present invention relates to digital image compression and in particular to image compression in raster image processing systems.
Background Image compression is widely used in colour raster image processing systems such as those found in printers. Image compression is used in these systems to reduce the amount of memory required to store raster images in the stages between pixel generation and the time when the final output has been delivered from the printer. Reducing the amount of memory reduces the total system cost.
In colour printing environments the total uncompressed size of a generated pixel images is often large and it is advantageous to avoid storing the entire image. Such pixel images are typically generated in raster or band order. In particular, pixels, scanlines, groups of scanlines, or tiles, are emitted in a stream from a raster image processor (RIP) that has as input an object graphic description of the page to be printed. In some simple cases this raster image data stream may be fed directly to a print engine. But in many circumstances this is not possible. This may be because the print engine requires realtime data delivery, because the image must be kept in case error recovery is required, or because the image must be kept for printing later in a duplexing system. Many other reasons exist. In systems where the raster image data must be kept, it is often fed to a compressor in a pipeline fashion such that intermediate storage between the RIP and the compressor is small compared with the total uncompressed image size. The output of the compressor is also considerably smaller than the uncompressed image size.
Many compression schemes can be used in this environment. One widely used method for colour images is the baseline method of the Joint Photographic Experts Group 658521.doc (JPEG) standard. However compression using baseline JPEG standard and other methods suffers a number of serious flaws that make their use difficult in systems with limited memory resources. Existing compression schemes all exhibit one or more of the following flaws when presented with streamed input data: The memory available to receive the compression data can be over-run.
Compression schemes are typically highly data-dependent and without knowing details of the input data ahead of time it is not possible to predict what size the output buffer will be required to accept the compressed data. This is a serious problem for systems with limited memory resources. Allocating a large output buffer is typically wasteful, and often still not a guarantee that the compressed data will fit. Some schemes exist that limit total compressed size by maintaining a sufficiently high compression factor on local regions of the image, but in these schemes it is not possible to trade off one part of the image that compresses well against another that does not.
For lossy compression schemes (such as baseline JPEG) the degree of loss must be selected ahead of time. Control of the degree of perceptual degradation (in short, loss) is a common method of controlling the output compression size. But this must generally be selected consistently across a whole image to achieve consistent visual quality, and must be selected at the start of the compression operation.
The image may become unnecessarily compressed. Where a high-loss setting is used for a compression operation, it may transpire that the image data compressed well and a less-lossy setting could have been used in comparison with the system's available memory. A less-lossy setting would have resulted in higher final image quality, which is advantageous.
-The compression scheme may require random access to, or multiple passes over, the uncompressed image data. Some compression schemes exist that overcome one or more of the earlier problems by using either random access to the uncompressed image data or by performing multiple passes over it. But this is disadvantageous because it requires storage either of the uncompressed image data or of the original data that is used to generate the image data.
658521.doc -3- United States Patent Application No. 20020131084 publishes a method for compressing an image to fit within a buffer of a fixed memory size. In this method, entropy encoders encode respective partitions of the DCT blocks of the original image.
The method stores the coded partitions iri the buffer and if it determines the buffer is full, then a coded least significant partition currently stored in the buffer is overwritten by data from a coded more perceptually significant partition. This method overcomes the problems of the prior art in that it is able to store the compressed image in one pass within a buffer of fixed size.
In recent years, image processing applications have typically included more and more functionality for the displaying or printing of images. Some of these applications have included the capability of performing rotations and reflections of the image. It would be convenient if it were possible to perform rotations and reflections directly on a compressed image. However, the method of U.S. Patent Application No. 20020131084 suffers from the disadvantage in that it does not readily allow such rotations and reflections on the compressed image.
These problems may also occur in many other related raster image processing systems such as digital cameras and scanners.
Summary of the Invention It is an object of the present invention to substantially overcome, or at least ameliorate, one or more disadvantages of existing arrangements.
According to one aspect of the invention, there is provided a method of coding a digital image, the method comprising: a dividing step for dividing the digital image into a plurality of blocks of pixels; a transforming step for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding step for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the coded representation comprises at least one contiguous encoded data stream; a first decoding step for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients, and said first decoding step comprises the sub-steps of: a retrieving sub-step for retrieving 658521.doc -4encoded data in the at least one contiguous encoded data stream associated with a current band of a current tile utilising a corresponding at least one stored current address; a decoding sub-step for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing sub-step for storing at least one address which addresses encoded data in the at least one contiguous encoded data stream associated with an end of the current band of the current tile; a first repeating sub-step for repeating said decoding, storing and retrieving sub-steps for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repeating sub-step for repeating said decoding, storing, retrieving, and first repeating sub-steps for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding step for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation.
According to another aspect of the invention, there is provided a method of coding a digital image, the method comprising: a dividing step for dividing the digital image into a plurality of blocks of pixels; a transforming step for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding step for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image; a first decoding step for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients; and a second encoding step for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation.
According to another aspect of the invention, there is provided a method of coding a digital image, the method comprising: a dividing step for dividing the digital image into a plurality of blocks of pixels; a transforming step for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding step for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the encoding step comprises the sub-steps of; a partitioning sub-step for partitioning the blocks of transform coefficients into a plurality 658521.doc of partitions, wherein each partition comprises data from each block of transform coefficients, and the plurality of partitions comprises a perceptually significant partition and a perceptually insignificant partition and partitions of varying perceptually significance there between; an encoding sub-step for encoding the partitions to form corresponding contiguous encoded data streams; and a managing sub-step for managing the storing of the contiguous encoded data streams in a storage of fixed memory size, wherein during the storing of the contiguous encoded data streams if it is determined the storage is full a contiguous encoded data stream corresponding to the least perceptually significant partition currently stored is overwritten by data from a contiguous encoded data stream corresponding to a more perceptually significant partition, wherein said stored contiguous data streams form the first coded representation; a first decoding step for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients, and said first decoding step comprises the sub-steps of: a retrieving sub-step for retrieving encoded data in the contiguous encoded data streams associated with a current band of a current tile utilising a corresponding at least one stored current address; a decoding sub-step for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing sub-step for storing at least one address which addresses encoded data in the contiguous encoded data streams associated with an end of the current band of the current tile; a first repeating sub-step for repeating said decoding, storing and retrieving sub-steps for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repeating sub-step for repeating said decoding, storing, retrieving, and first repeating sub-steps for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding step for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation, wherein said second encoding step comprises the sub-step of: padding with zeros any bits in the decoded block of transform coefficients that were discarded as a result of the overwritting.
658521.doc -6- According to another aspect of the invention, there is provided apparatus for coding a digital image, the apparatus comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the coded representation comprises at least one contiguous encoded data stream; a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients, and said first decoding module comprises: a retrieval unit for retrieving encoded data in the at least one contiguous encoded data stream associated with a current band of a current tile utilising a corresponding at least one stored current address; a decoding unit for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing unit for storing at least one address which addresses encoded data in the at least one contiguous encoded data stream associated with an end of the current band of the current tile; a first repetition unit for repeating the operations of said decoding, storing and retrieval units for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repetition unit for repeating the operations of said decoding, storing, retrieval, and first repetition units for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation.
According to another aspect of the invention, there is provided apparatus for coding a digital image, the apparatus comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image; a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, 658521.doc -7wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients; and a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation.
Apparatus for coding a digital image, the apparatus comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the first encoding module comprises; a partitioning unit for partitioning the blocks of transform coefficients into a plurality of partitions, wherein each partition comprises data from each block of transform coefficients, and the plurality of partitions comprises a perceptually significant partition and a perceptually insignificant partition and partitions of varying perceptually significance there between; an encoding unit for encoding the partitions to form corresponding contiguous encoded data streams; and a managing unit for managing the storing of the contiguous encoded data streams in a storage of fixed memory size, wherein during the storing of the contiguous encoded data streams if it is determined the storage is full a contiguous encoded data stream corresponding to the least perceptually significant partition currently stored is overwritten by data from a contiguous encoded data stream corresponding to a more perceptually significant partition, wherein said stored contiguous data streams form the first coded representation; a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients, and said first decoding module comprises: a retrieving unit for retrieving encoded data in the contiguous encoded data streams associated with a current band of a current tile utilising corresponding stored current addresses; a decoding unit for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing unit for storing addresses which address encoded data in the contiguous encoded data streams associated with an end of the current band of the current tile; a first repeating unit for repeating the operations of said decoding, 658521.doc -8storing and retrieving units for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repeating unit for repeating said decoding, storing, retrieving, and first repeating units for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation, wherein said second encoding unit comprises: a padding unit for padding with zeros any bits in the decoded block of transform coefficients that were discarded as a result of the overwritting.
According to another aspect of the invention, there is provided a computer program for coding a digital image, the computer program comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the coded representation comprises at least one contiguous encoded data stream; a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients, and said first decoding module comprises: a retrieval sub-module for retrieving encoded data in the at least one contiguous encoded data stream associated with a current band of a current tile utilising a corresponding at least one stored current address; a decoding sub-module for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing sub-module for storing at least one address which addresses encoded data in the at least one contiguous encoded data stream associated with an end of the current band of the current tile; a first repetition sub-module for repeating the operations of said decoding, storing and retrieval submodules for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repetition sub-module for repeating the operations of said decoding, storing, retrieval, and first repetition sub-modules for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a 658521.doc -9second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation.
According to still another aspect of the invention, there is provided a computer program for coding a digital image, the computer program comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image; a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients; and a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation.
According to still another aspect of the invention, there is provided a computer program for coding a digital image, the computer program comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the first encoding module comprises; a partitioning sub-module for partitioning the blocks of transform coefficients into a plurality of partitions, wherein each partition comprises data from each block of transform coefficients, and the plurality of partitions comprises a perceptually significant partition and a perceptually insignificant partition and partitions of varying perceptually significance there between; an encoding sub-module for encoding the partitions to form corresponding contiguous encoded data streams; and a managing sub-module for managing the storing of the contiguous encoded data streams in a storage of fixed memory size, wherein during the storing of the contiguous encoded data streams if it is determined the storage is full a contiguous encoded data stream corresponding to the least perceptually significant partition currently stored is overwritten by data from a contiguous encoded data stream corresponding to a 658521.doc more perceptually significant partition, wherein said stored contiguous data streams form the first coded representation; a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients, and said first decoding module comprises: a retrieving sub-module for retrieving encoded data in the contiguous encoded data streams associated with a current band of a current tile utilising corresponding stored current addresses; a decoding sub-module for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing sub-module for storing addresses which address encoded data in the contiguous encoded data streams associated with an end of the current band of the current tile; a first repeating sub-module for repeating the operations of said decoding, storing and retrieving sub-modules for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repeating sub-module for repeating said decoding, storing, retrieving, and first repeating sub-modules for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation, wherein said second encoding module comprises: a padding sub-module for padding with zeros any bits in the decoded block of transform coefficients that were discarded as a result of the overwritting.
Brief Description of the Drawings A number of embodiments of the present invention will now be described with reference to the drawings, in which: Fig. 1 shows a block diagram of a colour raster image processing system in accordance with the preferred arrangement; Fig. 2A, 2B and 2C are a block diagram of an overview of an raster image processing system of Fig. 1; and Fig. 3 illustrates an example of a number of linked lists and a memory management table used in the raster image processing system of Fig 1; 658521.doc -11 Figs. 4A and 4B show a flow chart of a method of managing the storing of compressed image data in the first buffer of the image processing system of Figs. 2A, 2B, and 2C; Fig. 5A shows a table indicating the order in which the scan bitstreams are written to the first buffer of the image processing system of Figs. 2A, 2B, and 2C; Fig. 5B shows a table indicating the order in which the scan bitstreams are read from the first buffer of the image processing system of Figs. 2A, 2B, and 2C; Fig. 6 shows the memory layout of the compressed image in the first buffer and the MCU line pointers buffer of the image processing system of Figs. 2A, 2B, and 2C; Fig. 7 shows a flow chart of a method of managing the reading of compressed image data from the first buffer of the image processing system of Figs. 2A, 2B, and 2C; Figs. 8 shows in more detail a block diagram of the image compression module of the image processing system of Fig. 1; Figs. 9 shows in more detail a block diagram of the image decompression module of the image processing system of Fig. 1; Fig. 10OA shows a table illustrating the scans of an 8x8 block of quantised DCT coefficients; Fig. 10B shows another table for illustrating the scans of an 8x8 block of quantised DCT coefficients; Fig. 10C illustrates the indices of the coefficients in the 8x8 block of quantised DCT coefficients; Fig. 11 shows a block diagram of a part of the image decompression module of Fig. 9 that processes the DC coefficient; and Fig. 12 shows a block diagram of a part of the image decompression module of Fig. 9 that processes the AC coefficients.
Detailed Description including Best Mode Where reference is made in any one or more of the accompanying drawings to steps and/or features, which have the same reference numerals, those steps and/or features have for the purposes of this description the same function(s) or operation(s), unless the contrary intention appears.
658521.doc -12- The principles of the arrangements described herein have general applicability to digital image compression. However, for ease of explanation, the arrangements are described with reference to digital image compression used in a colour raster image processing system. However, it is not intended that the present invention be limited to the described arrangements. For example, the invention may have application to any arrangement utilising compression where memory resources are limited. Also, the invention may have application to image compression of grey scale images.
Preferably, the arrangement is implemented as an application specific integrated circuit (ASIC). It may equally be implemented as a sub-component of a larger ASIC system, discrete logic, or any mixture thereof. The arrangement may also be practiced as a software program operating on a general-purpose processing unit or as a sub-component of a larger software system.
Turning now to Fig. 1, there is shown a colour raster image processing system 100 in accordance with the preferred arrangement. The colour raster image processing system 100 comprises a device controller computer 101, a RIP ASIC 102 and associated memory 103, an image compressor/decompressor ASIC 104 and associated main memory 108. The image compressor/decompressor ASIC 104 comprises a colour conversion module 105, an image compression module 106 together with an associated memory buffer 107, an image decompression module 109, and a printer interface 111 together with an associated memory buffer 110.
The image processing system 100 is adapted to receive as input an image and has the capability of rotating the image before printing the image on a printer device (not shown). The device control computer 101 acts as the interface between the printer (not shown) and the outside world. The device control computer 101 accepts a stream of data defining the page to be printed from a net work or similar interface. This interface can be Ethernet, USB, firewire, PCI, or similar, and the stream of data can be in a PostScript, PCL, or similar format. The device control computer 101 performs any conversions necessary to the format required by the RIP ASIC 102, and passes the data to the RIP ASIC 102, which stores the data in memory item 103. The RIP ASIC 102 converts the print job into a stream of pixels for printing onto paper. This pixel stream is passed to a 658521.doc -13colour conversion module 104 of the compressor/decompressor ASIC 104. The colour conversion module 105 converts the pixel stream from the input colour space (commonly RGB) to the colour space of the printer (typically a variant of CMYK).
This converted pixel stream of the original image is buffered in memory 107, and then compressed by the image compression module 106. The compressed image is then stored in a first buffer 205 in main memory 108, where the first buffer 205 is of a predefined fixed memory size. The image compression module compresses the original image in somewhat similar fashion to progressive JPEG. However, distinct from JPEG, the image compression module 106 is able to compress any image to fit within the first buffer 205 without exceeding the buffer's memory constraints. It achieves this by generating a compressed image comprising, instead of one bitstream, a plurality of independent bitstreams. These independent bitstreams comprise a perceptually significant bitstream through to a perceptually insignificant bitstream with bitstreams of varying perceptually significance there between. Preferably, the perceptually significant bitstream comprises the more significant bits of the DC coefficients of the DCT blocks of the image. On the other hand, the perceptually insignificant bitstream comprises the least insignificant bits of a range of AC coefficients of the DCT blocks of the image. If the compressed image is too large to fit in the first buffer 205, the image compression module 106 ensures those least perceptually significant of the bitstreams are discarded until the resultant compressed image is able to fit into the first buffer 205. The compressed image is progressive in that image quality increases with decompression of consecutive independent bitstreams. Whilst the compressed image may not comply with the JPEG standard, a JPEG compressed bitstream can be reconstituted from the compressed image.
Once the original image has been compressed and stored in the first buffer 205, the image decompression module 109 then converts the compressed image into a further compressed image. This further compressed image comprises multiple small JPEG compressed sub-images (tiles) of the original image, where each small JPEG compressed sub-image (tile) is JPEG compliant. This further compressed image is herein after referred to as a tiled JPEG compressed image. The tiled JPEG compressed image is then 658521.doc -14stored back into a second buffer 210 in the main memory 108. The image decompression module 109 transcodes the original compressed image to the tiled JPEG compressed image. It does this by first decoding the original compressed image in a tile order to form consecutive tiles, where each tile comprises a plurality of DCT blocks of transform coefficients, and secondly encoding these tiles of transform coefficients to form a tiled JPEG compressed image. Preferably, the image decompression module 109 during the transcoding reconstitutes those bits of the DCT blocks, which formed part of those perceptually insignificant bitstreams that were discarded during the original compression, by padding these bits with zeros. Though this tiled JPEG compressed image now includes encoded zero bits which were discarded in the original compression, the tiled JPEG compressed image will in most instances fit within a second buffer of the same memory size as the first buffer 205. Preferably, the image decompression module 109 includes a error mechanism to inform the device control computer in the cases where the tiled JPEG compressed image does not fit in the second buffer.
When the printer is ready to print the image, a rotation device 222 (Fig. 2C) of the image decompression module 109 reads the compressed tiles of the tiled JPEG compressed image in an appropriate order for printing. The image can be rotated into any one of eight rotations or mirror image combinations. The tiles are then decompressed by the image decompression module 109, and buffered in memory 110 until the printer engine (not shown) is ready to print the result, as controlled by the printer interface module 111.
Turning to Figs. 2A, 2B and 2C, there is shown in more detail the image compression module 106 and image decompression module 109 of the colour raster image processing system 100. For the sake of illustration purposes only, the first buffer 205 and the second buffer 210 are duplicated in these Figs.
The image compression module 106 comprises a discrete cosine transform (DCT) unit 204 for accepting colour raster image data 202, at least one encoder 206 for encoding the transform coefficients produced by the DCT unit 204, a scan output manager 208 for managing the storing of the transform coefficients in a first buffer 205 of a fixed memory size. This first buffer 205 is allocated in the main memory 108.
658521.doc Preferably, the DCT unit 204 can be any known DCT unit, which operates in conformity with the JPEG standard. Alternatively a lossless DCT can be used. The colour raster image data 202 in the preferred embodiment is typically organised as four colour channels, cyan, magenta, yellow, and black, but can also be organised as three channels representing either one luminance component and two chrominance components (Cb and Cr), with 8 bits of precision per channel, (referred to as YCbCr), or one red, one green and one blue channel (RGB). Other colour encodings can be used.
The DCT unit 204 buffers the colour raster image data 202 for each channel so as to operate on 8 pixel by 8 pixel blocks of channel data. This is preferably done by buffering 8 sequential scan-lines of each channel data followed by the sequential processing of each 8 by 8 pixel block in the buffered scan-lines.
The preferred arrangement of the image processing system 100 follows a particular mode of progressive JPEG. Further other alternatives are possible. A particular mixture of the progressive modes of successive approximation and spectral approximation is used by the preferred arrangement.
The DCT unit 204 performs a discrete cosine transform on each channel of each block of image data according to the JPEG standard. The resultant transformed data is preferably quantized also according to the JPEG standard. For the purposes of this description, the quantizer is taken to be incorporated in the DCT unit 104 and is not shown. Preferably the quantization table for each component is a "flat" table where each entry consists of the value 8. However other quantization tables are possible. As an example, a quantization table where the DC value is 2 for each component, and is 4 for the AC values for each component.
The quantized blocks are then converted to descriptors, which are then encoded in scans by the sixteen encoders 206(1) to one encoder for each scan. The DCT unit 204 splits the descriptors into bitstreams in accordance with the scans as described below with reference to Figs 10A, 10B and Turning firstly to Fig. 10B, there is shown an 8x8 block of quantised DCT coefficients. For present purposes, the DCT coefficients are indexed in a zigzag sequence. The DC coefficient is indexed as coefficient 0, the AC coefficient (second 658521.doc -16column, first row) is indexed as coefficient 1, the AC coefficient (first column, second row) is indexed as coefficient 2, and so on to the AC coefficient (eighth column, eighth row) which is indexed as coefficient 63. As can be seen, the DCT coefficients that are arranged in the zigzag sequence represent increasing spatial frequencies.
Turning now to Fig. 10OA there is shown a table illustrating the scans of an 8x8 block of quantised DCT coefficients. Each row in the scan table specifies one (encoding) scan for each component. The scans are encoded in row order. The Ss Se column specifies the start (Ss) and end (Se) index, following the aforementioned zigzag sequence of DCT coefficients, of a contiguous sub-sequence of DCT coefficients that are encoded in the scan. Thus for example the second row of the table specifies that in the second scan DCT coefficients 1 to 5 are encoded. The Ah Al column specifies the bit precision high and bit precision low parameters respectively used in the successive approximation mode of progressive JPEG. In the first scan for a coefficient Ah is set to 0 as in the first 4 rows in the scan table. There are separate sets of scans for each colour component of the input image, for a three colour image this means there are a total of 48 scans, for a four colour image a total of 64 scans.
The successive approximation mode of JPEG defines two slightly different point transforms. The use or purpose of the point transform is to essentially partition the coefficients by bit-plane. However, depending upon the point transform the result may or may not correspond to a bit-plane. Nevertheless, the term bit-plane is used herein to refer to a partition resulting from a point transform.
To elucidate upon the scan definition, the scans of the Scan Table of Fig. 10 OA are explained more explicitly. In the first four scans the data from bit-planes 3 and above are included only. The bit-planes are numbered consecutively from the least significant bitplane (zero bit-plane). This is specified by the Ah:AI 0:3 pair. The parameter AI=3 specifies that bit-plane 3 is the lowest bit-plane included, while the parameter Ah=0 specifies that this is the first partition of the bit-planes, and hence to include all bit-planes above Al inclusive. Scan 1 comprises the DC coefficient (scan index 0) for the component. That is bit-plane 3 and above for each DC coefficient is included in this scan.
Scan 2 comprises the bit-plane data for all bit-planes above Al inclusive for AC 658521.doc -17coefficients 1-5, for each component. Similarly, Scan 3 comprises the bit plane data for all bit planes above Al for AC coefficients 6-15. Similarly, Scan 4 comprises the same for AC coefficients 16-63. In Scan 5 a new Ah:A1 3:2 pair is used. This pair specifies that bit-plane A1=2 are transmitted in this scan. Thus in Scan 5 the bit-plane 2 of the DC coefficient for the component is included. In Scan 6 bit-plane 2 for AC coefficients 1 to for the component is included. Similarly in Scan 7 bit-plane 2 for AC coefficients 6 to of the component is included, and so on. In Scan 9 a new Ah:AI=2:1 pair is used. This pair specifies that bit-plane A= is transmitted in this scan. Thus in Scan 9, the bitplane 1 of the DC coefficient for the component is included. In Scan 13 bit-plane 0 for DC coefficient of the component is included, and so on.
Turning now to Fig. 10 OB, there is shown another table for further illustrating the scans of an 8x8 block of quantised DCT coefficients. In this table, the first column corresponds to the coefficient 0 (ie the DC coefficient), the second column corresponds to AC coefficients 1 to 5, the third column corresponds to the AC coefficients 6 to 20, and the fourth column corresponds to the AC coefficients 21 to 63. Also in this table, the first row corresponds to bitplane 3 and higher of the DCT block of coefficients, the second row corresponds to bitplane 2 of the DCT block of coefficients, the third row corresponds to bitplane 1 of the DCT block of coefficients, and the fourth row corresponds to bitplane 0 of the DCT block of coefficients. The entries of the table of Fig. correspond to respective scans of the DCT block. For example, scan 6 includes those bits of coefficients 1 to 5 in bitplane 2.
Returning now to Figs. 2A, 2B, and 2C, the DCT unit 204 splits the DCT blocks of each colour component into these scans and outputs these scans as bitstream scans, such that each bitstream scan contains data from each DCT block in raster block order. Thus where the colour space is CYMK, there are in total 64 scans, 16 for each color component.
The bitstream scans to (16) of each colour component are fed to respective encoders 206(1) to 206(16). There are four types of encoder 206: SThe DC Base encoder. There is only one DC Base encoder 206(1) in the preferred arrangement. This encoder is a Huffman entropy encoder which 658521.doc
I
-18- Huffman encodes the difference between the base scan (ie. scan 1 of Fig. 10 A) of the DC coefficient of the current DCT block and the base scan (ie. scan 1 of Fig. 10 A) of the DC coefficient of the previous DCT block. If the current block is the first block, then it encodes the base scan (ie. scan 1 of Fig. 10 A) of the DC coefficient of the current DCT block.
The DC Progressive encoder. There are three DC Progressive encoders 206(5), 206(9), 206(13) in the preferred arrangement. There is one DC progressive encoder for each one of the three least significant bits of the DC coefficient of the DCT block. These DC progressive encoders 206(5), 206(9), 206(13) output their respective scan bit streams 5, 9, and 13 (see Fig. 10A) without any compression. Other variations of the arrangement could use a run length or Huffman encoding to further compress these streams.
The AC Base encoder. There are three AC Base encoders 206(2), 206(3), 206(4) in the preferred arrangement. These encoders are Huffman entropy encoders and encode the base of a selected range of AC coefficients. Specifically, the AC Base encoder 206(2) encodes scan 2 of the DCT block, the AC base encoder 206(3) encodes scan 3 of the DCT block, and the AC base encoder 206(4) encodes scan 4 of the DCT block (see Fig. The AC Progressive encoder. Preferably, there are nine of AC Progressive encoders, three for each of the AC Base streams. These encoders are Huffman entropy encoders and each compress one of the least significant bits of a sub-set of the 2 nd to 64 th coefficients. For example, the AC Progressive encoder 206(11) encodes the second least significant bits of the AC coefficients AC6 to (ie. scan 11 see Fig. 10A). It is not necessary for the AC Progressive streams to match the AC Base streams, but it is convenient to do so.
In this fashion it can seen that DC and AC base encoders compress the base of the DC and AC coefficients, where the base is the more significant bits of the DCT block, while the DC and AC progressive encoders progressively compress the remaining least significant bits.
658521.doc -19- Preferably, the AC base and AC progressive encoders use a Huffman encoding method substantially similar to that used in JPEG AC Huffman encoding. In particular, the AC base and AC progressive encoders utilise the End-Of-Bands (EOBs) code sequences used in JPEG AC Huffman encoding. These EOBs code sequences include a EOB code identifier and extension field indicating the number of following blocks including the current block that have only zero coefficients. For example, an EOB run length of 5 means that the current block and the next four blocks have no nonzero coefficients.
In a further variation of the preferred arrangement, a set of 64 encoders 206 may be used, one for each scan/colour component combination. In a still further variation of the preferred arrangement, fewer Huffman coders 206 may be used, whereby one Huffman coder encodes several scans. For example, one Huffman coder could be used to encode the four scans 2, 6, 10 and 14, another the four scans 3, 7, 11, and 15, and another the four scans 4, 8, 12, and 16. Although one Huffman encoder may encode several scans, generally each type of scan has a separate Huffman table. In a still further variation of the preferred arrangement, all of the encoders may be implemented as Huffman entropy encoders.
The arrangement of scans is such that the 16 encoders 206 used for each colour component are considering separated streams of data that differ in their perceptual contribution to the resultant image. In this case the first encoder 206(1) considers the perceptually most significant contribution and the last encoder 206(16) the perceptually least significant, with the others ordered in between these two extremes. In the preferred arrangement 100 perceptual scans are achieved by encoding bit planes separately.
The encoded codewords are output from the encoders into respective bit-streams that are shifted into respective output buffers of the encoders 206. This output buffer is 32 bytes or some similar size selected to allow a fraction of the buffer to be efficiently transferred through the memory sub-system used to access the output buffer. There is one output (bit) stream corresponding to each encoded scan.
The encoders 206(1),...,206(16) each have a output buffer that can be read by the scan output manager 208. This scan output manager 208 is signalled by each 658521.doc encoder 206(1), 206(16) each time the encoder 206(1),...,206(16) fills enough of its output buffer to allow a transfer of the data to the first buffer 205 in main memory 108.
The scan output manager 208 has random access to the first buffer 205 in main memory 108. The main memory 108 is typically implemented with DRAM, SDRAM or RDRAM memory, but other schemes are possible.
The scan output manager 208 maintains a table in internal memory with four entries for each scan. In the preferred arrangement the 16 scans for each color component are coded by respective encoders An example of such a table 300 is shown in Fig. 3. These entries are: 1. A linked list root address 304. This is the address in the first buffer 205 in main memory 108 of the first of a linked list of blocks that contain the encoded data of this stream.
2. A current block address 306. This is the address in the first buffer 205 in main memory 108 of the last block in the linked list and is the block that is currently being filled.
3. A fill index 308. This is a count of how many words of encoded data have so-far been written into the current block and is thus also the index at which new data will be written.
4. An active flag 310. This flag indicates whether this encoded stream is still to produce data versus the stream has been stopped.
An address of a MCU (minimum compression unit) line pointer buffer. There is one MCU line pointer buffer associated with each scan stream, and each buffer comprises a plurality of MCU line pointers. The address is the address of the corresponding MCU line pointer buffer in main memory 108 associated with the scan stream. The MCU line pointers point to those parts within their associated scan stream where a new line of the image starts. It should be noted that the scan streams in effect each comprise a sequence of MCUs (Miminum Compression Units) of encoded data, where the MCUs correspond to respective DCT blocks in raster order. These MCU line pointer buffers will be described below in more detail with reference to Fig. 6.
658521.doc -21- The scan output manager 208 also holds in a free block register 312 the address, in the first buffer 205 in main memory 108, of the first block of a linked list of free blocks that are not currently assigned to any active entropy encoded stream.
Turning now to Figs. 4A and 4B, there is shown a flow chart of a method of managing the storing of compressed image data in the first buffer 205 of fixed memory size in the main memory 108. This method is performed by the scan output manager 208, which is preferably implemented as a component of the application specific integrated circuit (ASIC) of the preferred arrangement 100. The scan output manager 208 may also be practiced as a software program operating as a sub-component of a larger software system implementation of the preferred arrangement 100. The method 400 performed by the scan output manager 208 commences when the image compression module 106 starts the compression of the colour raster data 102. The scan output manager 208 then undertakes a initialisation process where: 9 The first buffer 205 of a fixed memory size is allocated in main memory 9 The entire first buffer 205 in the main memory 108 is divided into blocks that form a free list. Alternatively this may also be done implicitly as blocks are first needed. Also, memory is set aside at the head of the first buffer 205 in the main memory 108 for subsequent storage of information concerning each scan stream. This information includes for each scan stream its scan stream number and its corresponding linked list root address (if any).
Each active flag 310 of the memory management table 300 is set to indicate that the corresponding entropy encoded scan stream is active.
Each linked list root address and each current block address of the memory management table 300 is set to zero.
Each fill index of the memory management table 300 is set to the value that indicates the block is full.
After initialisation, the scan output manager 208 then proceeds to an idle state 406, where it waits for a signal from an encoder 206. Each time the scan output manager 208 is signalled that a fragment of encoded data is available on a particular scan stream (hereinafter called the current scan stream), it considers 410 the active flag of that stream.
658521.doc 22 If the corresponding active flag entry of the memory management table 300 indicates that the current scan stream is stopped (ie false), the scan output manager 208 discards the fragment of encoded data and returns to its idle state 406. Otherwise, the scan output manager 208 considers 412 the fill index entry of the current scan stream in the memory management table 300.
If the fill index entry of the current scan stream is not equal to the maximum allowed value, the scan output manager 208 proceeds to step 426. On the other hand, if it is equal to the maximum allowed value, the scan output manager 208 obtains 414 the address of a free block using a sub-process as described below with reference to Fig. 4B.
The scan output manager 208 then considers 416 whether the current block address entry of the current scan stream in the memory management table 300 is zero. If it is zero, then the linked list root address entry in the memory management table 300 for the current scan stream is set 418 to this free block address. Furthermore, the current block address entry in the memory management table 300 for the current scan stream is set 420 to this free block address. On the other hand, if the current block address is not zero, then the scan output manager 208 proceeds directly to step 420, where the current block address entry is set to this free block address. After the current block address entry is set 420 to this free block address, the scan output manager 208 updates 420 the free block register to the address of the next free block in the linked list of free blocks. If there are no more free blocks available in the linked list of free blocks the scan output manager 208 sets the free block register 312 to zero. The scan output manager 208 then sets the fill index entry of the memory management table 300 to zero. After completion of step 422, the scan output manager 208 proceeds to step 426.
During step 426, the fragment of encoded data is written by the scan output manager 208 into the first buffer 205 of the main memory 108. This data is written to that location in the current block indicated by the current block address entry and fill index entry in the memory management table 300 corresponding to the current scan stream.
After the data is written, the fill index entry corresponding to the current scan stream is incremented to account for the new data. If this fragment of encoded data is the start of a new line in the image, a pointer pointing to this data is added to the associated MCU line 658521.doc
I
-23pointer buffer. The scan output manager 208 then returns to its idle state 406. The operations of the scan output manager 208 are terminated upon instructions from a higher level software application (not shown) in the case of a software implementation or a controller (not shown) in the case of a hardware implementation. Prior to termination, the scan output manager 208 stores in the first buffer 205 in the main memory 108 the information indicating for each scan stream its scan stream number and its corresponding linked list root address (if any).
Turning now to Fig. 4B, there is shown a flow chart of the sub-processes of step 414 of Fig. 4A. If the fill index entry of the current scan stream is equal to the maximum allowed value, the scan output manager 208 considers 450 whether the free block register is zero. If the free block register is not zero, the scan output manager 208 obtains 460 the address of this free block stored in the free block register 312 and proceeds to decision block 416. During this step 460, the scan output manager 208 also updates the free block register 312 by assigning the address of the next free block in the linked list of free blocks to the free block register 312. If there is no next free block in the linked list of free blocks, the scan output manger 208 sets the free block register 312 to zero.
On the other hand, if the scan output manager 208 determines 450 that the free block register 312 is zero the scan output manager 208 sets 452 the active flag entry in the memory management table 300 of the most perceptually insignificant of the active scan streams to inactive. The scan output manager 208 then assigns 454 the linked root address of the just previously flagged inactive scan stream to the free block register 312.
Once the free block register 312 becomes non-zero, that address is used as the address of the next free block. The scan output manger 208 then considers 456 whether the just previously flagged inactive scan stream is the current scan stream.
If the encoded stream that just became inactive is the current scan stream, the fragment of encoded data is discarded 458 and the scan output manager 208 returns to its idle state 406. Otherwise, the scan output manager 208 returns to decision block 450, where once again the scan output manager 208 determines 450 whether the free block register is zero.
658521.doc -24- The scan output manager 208 is able to detect that the first buffer 205 in main memory 108 is full by determining 450 that the free block register 312 is zero. In this situation, the scan output manager 208 by then assigning 452 the linked root address of the most perceptually insignificant scan stream to the free block register, allows data of a more perceptually significant scan stream to simply overwrite the most perceptually insignificant scan stream. In this way, the image processing system 100 performs a simple one-pass processing for fitting the compressed data into the buffer of fixed memory size. The scan output manager 208 allocates the same scan, for example scan 18, of each DCT block to the same linked list. Thus when the scan output manager 208 assigns the linked root address of the most insignificant scan stream to the free block register, it is effectively discarding from storage in the first buffer 205 in main memory 108 the same most perceptually insignificant scans of all the DCT blocks. Thus the perceptual degradation introduced to achieve compression of a fixed size is applied consistently to the whole image.
The operation of the scan output manager 208 is illustrated by the following pseudo code: struct block struct block *next; word data[1000]; struct stream struct block *head; struct block *current; int fillindex; bool active; 658521.doc struct stream streams[1 6]; struct block *free_root; struct block *free tail; int n_active; void emit-entropy encoded-data(int s, word data) if (!streams[s]. active) return; if (stream s[s].filIli nd ex ==1000) while (free root NULL) n_active; free-root streams[nactive]. head; stream s[nactive]. active false; if (n_active s) return; if (streams[s].current NULL) streams[s].head free-root; else streams[s].current->next free-root; streams[s].current free-root; free-root free-root-> next; streams[s].cu rrent-> next NULL; streams[s].fill_index 0; streams[s] .current->data[streams[s] .fill_index] =data; 658521 .doc -26- ++streams[s].fiII_index; The compressed image bit stream as it resides in the first buffer 205 in main memory 108 may not comply with the JPEG standard. This is the case because of the way the scans are kept as independent bit streams, as managed by the scan output manager 208, and not formed into one contiguous bit stream. However the linked list information describing the scan structure in the first buffer 205 in main memory 108 is maintained with the compressed image for decompression, thus the JPEG compressed bit stream can be reconstituted from this link list information and scan structure.
As an image is being compressed in substantially raster (or 8-line raster) order, the scan output manager 208 ensures that the compressed image bit stream does not overflow the first buffer 205 in main memory 108. Should the buffer become full at any stage before encoding is complete, the scan output manager 208 discards the least perceptually significant scan that remains in the first buffer 205 in main memory 108, thereby reclaiming buffer space for remaining portions of the compressed image bit stream. In this way several scans may be discarded during compression. Any scans discarded during compression are not part of the final compressed image bit stream.
In the case where a lossless DCT is employed, if no scans are discarded the compressed image bit stream represents the input image without loss. That is the compressed image bit stream can be decompressed to give the original input image.
Regardless of which transform is employed, should a compressed image bit stream, consisting of all scans, be too large for the first buffer 205 in main memory 108, the scan manager 208 ensures that the least perceptually significant scans are discarded. In this way the final compressed image bit stream consists of the perceptually most important scans, fits into the first buffer 205 in main memory 108, and is formed in one pass in substantially raster order.
Corresponding to each scan is a compressed image. For a given scan the corresponding compressed image is the image represented by the given scan and all previous scans. Thus corresponding to the sequence of scans is a sequence of compressed 658521.doc -27images. For increasing sequence number the compressed image quality increases, while the compressed image size increases. The compression method in effect selects the largest compressed image (or highest quality compressed image) that fits into the first buffer 205 in main memory 110. That is the next larger compressed image in the sequence after the selected compressed image does not fit in the first buffer 205. There is some redundancy in the sense that the final compressed image, will not, in general, totally fill the first buffer 205. In order to minimise this redundancy it is desirable to have a sequence with fine granularity. That is the increase in size from one scan to the next is small. This suggests a lot of scans. However the more scans that are used the more complicated the encoding process, so there is a trade off.
Returning now to Figs. 2A, 2B, and 2C the image decompression module 109 takes the compressed image from the first buffer 205 in main memory 110 and transcodes the compressed image to a tiled JPEG compressed image. The image compression module 109 comprises a scan input manager 212 for retrieving each compressed scan from the first buffer 205 in main memory 108, decoders 214(1),...,214(16) for decoding the scans in a tile order, and an encoder 216 for encoding the decoded scans to produce a tiled compressed image and for storing the tiled JPEG compressed image in a second buffer 210 in main memory 108. The compressed image in the first buffer 205 is decoded by the decoders in a tile raster scan order, producing decompressed tiles comprising preferably a plurality of 8x8 blocks of DCT quantised transform coefficients, which tiles are then each recompressed in accordance with JPEG to form a tiled JPEG compressed image. During the recompression, the image decompression module 109 pads with zeros those bits of the DCT blocks that formed part of the bitstream scans that were discarded during the original compression.
Subsequently, the tiled image decompressor 220 retrieves the final tiled JPEG compressed image from the second buffer 210 in main memory 108, in an order determined by the desired rotation and reflection of the image to be output. Information concerning the desired rotation and reflection is obtained from the print job sent to the device control computer 101 and is forwarded to the tile selector 222. The tile selector 222 determines the order in which the tiles are to be retrieved from the main 658521.doc -28memory based on the desired rotation and reflection. The tile decompressor 224 then decompresses each retrieved tile, and the decompressed image is output to the printer interface memory 110.
Preferably the image compression module 109 comprises 16 decoders one for each scan 1 to 16, each working substantially in parallel. The 16 encoded bitstream scans of each colour component are fed respectively to 16 decoders 214(1) to 214(16). The decoders 214(1) to (16) comprise the following decoders: one DC base decoder 214(1); three DC progressive decoders 214(2) to three AC base decoders 214(5) to and nine AC progressive decoders 214(8) to (16).
The DC base decoder 214(1), AC base decoders 214(5) to and AC progressive decoders 214(8) to (16) are preferably Huffman entropy decoders. The DC progressive decoders 214(2) to preferably decode and output the bits of the corresponding scans 2 to 4 without decompression, that is they output the bits in the same form they are input.
These decoders 214 are complementary to their corresponding encoders 206.
As with the decoder 206 using fewer Huffman decoders 214 are also possible. The Huffman decoders 214 are staggered so that a Huffman decoder 214 decoding bits at a lower bit plane has available the necessary information from higher bit planes (decoded from a Huffman decoder) to decode each coefficient in the scan. Each Huffman decoder 214 is fed the necessary compressed data from a scan input manager 212. The scan input manager 212 first retrieves the linked list information from the first buffer 205 in the main memory 108. From this information, the scan input manager 212 is able locate the bitstream scans in the first buffer 205 in main memory 108 and output the bitstream scans in a tile order to their respective decoders. Preferably, the decoders 214 are adapted to distinguish between DCT blocks in a similar manner to the JPEG baseline manner. When the decoding of the coefficients of a given tile is complete the tile is compressed by the tiled encoder 216 in accordance with the JPEG standard and stored in a second buffer 210 in main memory 108. The tiled encoder 216 continues in this fashion 658521.doc -29until all the tiles have been compressed and stored in the second buffer 210 in main memory. The tiled JPEG compressed image comprises a header and all of these individual compressed tiles. The main header of the tiled compressed image comprises pointers pointing to respective individual compressed tiles of the image. Preferably, any data in the individual headers of the JPEG compressed tiles that is common to all can be removed to the main header.
Preferably, the tiled JPEG compressed image consists of multiple small compressed images (tiles) each of which is 32 pixels by 32 pixels. In further variations of the present arrangement, other sizes can be used. Each tile can be decompressed by the tile image decompressor 220 for display or printing with out any knowledge of preceding or following tiles. By decompressing these tiles in different orders the overall image can be displayed or printed rotated by a multiple of 90 degrees, or vertically or horizontally flipped.
Turning now to Fig. 5A and 5B, the manner in which the scan bitstreams are read in tile order from the first buffer 205 in main memory 108 will now be described. The scan streams produced by the entropy encoders 206(1) to 206(64) in effect each comprise a sequence of MCUs (Miminum Compression Units) of encoded data where the MCUs correspond to respective DCT blocks in raster order. These MCUs of a scan are written in raster order and read in tile order from the first buffer 205 in main memory 108.
Figs. 5A and 5B, show the order in which one scan stream, for example scan 6, is written to and read from the first buffer 205 in main memory 108. Figs. 5A and 5B both show, as an example only, the same scan stream of an image comprising ten lines each line comprising 17 MCUs (Minimum Compression Units), and where each square shows the position in the image of one MCU. The MCUs shown in Fig. 5A are numbered in the order in which the MCUs are written by the scan output manger 208 to the first buffer 205 in main memory 108. On the other hand, the MCUs shown in Fig. 5B are numbered in the order in which the MCUs are read by the scan input manager 212 from the first buffer 205 in main memory 108. As can been seen, the orders in which the MCUs are written and read are different. The scan output manager 208 writes the MCUs in raster order, whereas the scan input manager 212 reads the MCUs in tile order 1, 2, and 658521.doc 30 within each tile in raster order. The enables the image decompression module 109 to convert the compressed image to a tiled JPEG compressed image. For example, consider the first MCU in the second line of the scan stream of the image. This MCU is the 18th MCU written by the scan output manager 208 to the first buffer 205 in main memory. On the other hand this MCU is the 5 th MCU read by the scan input manager 212 from the first buffer 205 in main memory, as it is part of first tile to be read and compressed. It should be noted that each tile is completely read before the next tile is started.
Turning now to Fig. 6, there is shown the memory layout for the compressed image in the first buffer 205 and the MCU line pointers buffers stored in main memory 108.
The scan streams 650 (only two are shown for simplicity sake) each comprising a linked list of blocks 672 (again only a few are shown) that contain the encoded data of the stream. These linked lists are constructed in the fashion as described previously (see Fig. 4A, 4B, and Fig. The blocks 672 of each linked list are linked by pointers 678 to maintain the correct order of the list. As is apparent from the foregoing, each scan stream 1 to N comprises encoded data relating to the entire image, that is each scan stream comprises encoded data relating to every line of the image. It is important to note that depending upon how many of the scans have been discarded by the image compression module 106, N may vary.
To assist in the transcoding of the compressed image to a tiled compressed image, MCU line pointers 674 are generated for each scan stream 1 to N. The MCU line pointers 674 each point to encoded data in the blocks 672 that is associated with the start of a new line 676 of the image. These MCU line pointers 674 are collected in a series of MCU line pointer buffers 670, one buffer 670 for each scan stream, and each buffer comprising one MCU line pointer for each line of the image. The image compression module 106 creates these MCU line pointer buffers during the first image compression phase.
Turning now to Fig. 7, there is shown a flow chart of a method 700 of managing the retrieval of the compressed image data in the first buffer 205 in the main memory 108.
This method is performed by the scan input manager 212, which is preferably implemented as a component of the application specific integrated circuit (ASIC) of the 658521.doc -31preferred arrangement 100. The scan input manager 212 may also be practiced as a software program operating as a sub-component of a larger software system implementation of the preferred arrangement 100. The method 700 performed by the scan input manager 212 commences when the image compression module 106 has completed the storage of the compressed image in the first buffer 205 in main memory 108.
The method 700 commences at step 750 and then initialises at step 752 a number of internal line registers 754 containing information to point to the start of the compressed image. There are 4x64 internal line registers 754 one for each scan/ colour combination for each line of the four lines of a tile of the image. These internal line registers 754 serve the purpose of temporarily storing data concerning the location in main memory 108 of the encoded data of the first MCU in a line of the next tile in the image. As there are four lines per tile and 64 scan/colour combinations, there are 4x64 internal line registers.
These internal line registers 754 each comprise: a memory address of the next word of the encoded data to be read; the current value of the end-of-block-run-length-counter (eobrun); and a bit position in the word of the next byte to be processed; optionally for efficiency a copy of the last word read from memory for the stream can be included in the data. This information is repeated for each stream and for each of the four MCU lines that are to be processed for each JPEG tile that is to be output. In the preferred arrangement there are 64 bitstreams in total (16 per colour, four colours), and with four lines per tile, then 256 copies of the data in the internal registers 754 are preferably needed.
The internal registers 754 are initialised during step 752 as follows: the eobrun counter is initialised to zero, the memory address of the next word of encoded data is initialised to the relevant MCU line pointer for that scan and line, the bit position is initialised to zero, and the cache is disabled. The relevant MCU line pointer for that scan and line is obtained from the corresponding MCU line pointer buffer (see Fig. The end-of-block-run-length-counter (eobrun) is used as a progressive count of the number of remaining MCUs in the EOB having only zero coefficients. The latter is used for those scan streams relating to AC coefficients only.
658521.doc -32- After the initialisation step 752, the method 700 proceeds to an outer loop 756-766 which processes one band of tiles after another during each pass of the outer loop 756- 766. The outer loop 756-766 in turn comprises an inner loop 756-755 which processes one tile after another of the band currently being processed during each pass of the inner loop 756-755. In this context each band of tiles comprises four lines of MCU units, and each tile comprises 4x4 MCU units (see Fig. 5B). For ease of explanation, the method will be described with reference to the band, tile, line, and MCU unit currently being processed.
The method 700 enters the outer loop 756-766 at step 756 either after the initialisation step 752, the loading step 762, or the retrieval step 764. This step 756 first determines whether any eobrun counter of the internal registers 754 associated with the scans of the current line is currently non-zero. In the case where any eobrun counter is non-zero, then the step 756 generates and outputs MCUs having zero coefficients for the current line and its associated scan to the decoders 214. The step 756 continues in this fashion progressively decrementing the eobrun counter until four MCUs have been output or until the eobrun counter is zero. In the case where any eobrun counter is zero or becomes zero, this step 756 then retrieves from the first buffer 205 the codeword specified by the next word address in the associated internal register 754. The codeword is then sent to the corresponding decoders 214, which decode the codeword one bit at a time. In the case where the retrieved codeword is recognised as an EOB code sequence, the step 756 sets the associated eobrun counter to the value contained its extension field, and proceeds as before. Once the decoder 214 has completed decoding four MCUs it informs the method 700, which then proceeds to step 758 and saves the current eobrun counters, the current bit positions, and current word addresses to their associated internal registers, and the cached last word read from memory (if used). In this fashion the method updates the location of the next encoded data in main memory to be decoded.
After step 758, the method 700 proceeds to a decision block 760, which checks whether the current line is the last line (eg fourth line) of the current tile. If the decision block 760 reveals that the current line is not the last line, then the method 700 proceeds to step 762. The method 700 at step 762, retrieves the values in the internal registers 658521.doc 33 associated with the next line of the current tile and proceeds to step 756 for further processing in similar fashion to the previous line. On the other hand, if the decision block 760 reveals that the current line is the last line, then the method proceeds to a further decision block 755, where a check is made whether the current tile is the last tile in the current band.
If the decision block 755 reveals that the current tile is not the last tile, then the method 700 proceeds to step 764. The method 700 at step 764, retrieves the values in the internal associated with the first line of the next tile and proceeds to step 756 for further processing in similar fashion to the previous tile. On the other hand, if the decision block 755 reveals that the current tile is the last tile, then the method proceeds to step 766.
This step 766 firstly determines whether or not the current tile is the last tile in the image.
If the current tile is not the last tile in the image, then step 766 performs the same operations as performed in the initialisation step 752. Excepting, that step 766 initialises the next word addresses in the internal registers to the MCU line pointers for the scans and lines of the next band after the current band, and not the first band as in the case of the first initialisation step 752. Also, in step 766, the method 700 releases memory allocated to the first buffer 205 taken up by the MCUs of the current band that were forwarded to the decoders 214. Otherwise, if the step 766 determines the current tile is the last tile, then the method 700 proceeds to step 790 where the method 700 terminates.
As can be seen, the method 700 is able to read the MCU units from each scan bitstream stored in the output buffer 205 in tile order, as for example shown in Fig. 5B. It will be appreciated by those skilled in the art, that the eobrun counter is only needed for the AC bitstream scans, whereas the eobrun counter can be disabled or set to zero for the DC bitstream scans.
Preferably, multiple instances of the method 700 are initiated one after another for each color component of the image, so that the encoded coefficients are retrieved firstly in tile order and secondly in color component order. These further instances of the method 700 may be called recursively during the first instance of the method 700 after each tile of the first color component has been retrieved.
658521.doc -34- Returning now to Figs 2A, 2B, and 2C, once four lines of four MCUs for each scan and color component have been decoded by the decoders 214, these are forwarded to the tiled JPEG encoder 116 for encoding in accordance with the JPEG standard.
Now turning to Fig 8, there is shown a more detailed view of the image compression module 106. The input from the colour space conversion module (CSC) 105 is buffered in the 16 line buffer 106. The address generator 808 driven by the index counter 806, the current MCU X,Y numbers 802 and 803, the page length 805, and the scan line length 804 provides an address used to read each part of the current MCU, which is passed to the Pad MCU module 812. Padding, when necessary, is done and the complete MCU passed to the DCT module (204) which calculates the quantised DCT Coefficients and places them in the coefficient buffer 816. As these values are calculated a number of EOB values are calculated for each scan from the coefficients and stored in the EOB registers 817. The scan controller 818 uses the scan parameters 820 to control which bits of the coefficients are sent to which encoders 206(1) to 206(16).
The output of each encoder is written to a separate buffer 826(1) 26(16). These buffers are flushed to the first buffer in main memory under the control of the scan output manager 208 as described in Figs 3, 4A and 4B. The scan output manager 208 also generates the memory management table, where once the compressed image is finalised the table is stored in main memory. MCU line pointers are written to the MCU line pointer buffer 830 at the end of each 8 input image lines. The scan controller 818 instructs the encoders (206(1) to 206(16)) to flush any run length counts and extra bits to the output, and when that has been done instructs the scan output manager 208 to write the next address for each buffer to the MCU line pointer buffer 830.
Turning now to Fig 9, there is shown a more detailed view of the image decompression module 109. The decompression performed by the module 109 is the inverse of the compression performed by the module 106. Except that decoding is only performed for those partitions (scans) which are indicated as active in the memory management table, these being the scan bitstreams which were active when the image compression completed, earlier. Thus before decoding commences, the memory management table of the currently compressed image needs to be loaded from the main 658521.doc memory into an internal table of the scan input manager 212. The activity of the scan bitstreams is indicated to the decoders 214(1) to 214(16), and to the coefficient accumulators, 918, so that only the active streams contribute data to the final coefficients in the DCT.
The scan input manager 212 in the decompression module 109 includes a buffer 926(1) to 926(16) for each scan bitstream. Each of these is arranged as a double buffer, so that data can be fed to the decoders while other data is being fetched from memory.
The compressed data is read from the first buffer 205 by the scan input manager 212, into buffers 926(1) through 926(16). The decoders 214(1) to 214(16) decode the encoded symbols, and feed the results in to the stream combiner 918.
While the preferred arrangement performs Huffman decoding in a pipelined manner one coefficient at a time, in an alternate arrangement this could be done in parallel with each frequency plane division of the coefficients being decoded simultaneously.
Turning now to Fig 11, there is shown a schematic diagram of the DC section of the stream combiner 918. The DC base components from the DC Base Huffman decoder 214(1) are separated into two parts comprising values, and zero run counts. The accumulator 1106 adds each new value to the previous value, to produce the final DC result, which is stored in the DC coefficient output buffer 1108. A counter 1104 expands the zero runs into the correct number of final values. This is done by decrementing the counter 1104 each time the value is output by the DC coefficient output 1108. The progressive DC decoders simply return a single bit each of which is stored in the DC coefficient output buffer 1108.
Turning now to Fig 12, there is shown a schematic diagram of the AC section of the stream combiner 918. The outputs of the multiple AC Base Decoders and (4) (the latter two not shown) feed into the AC base selector 1210 which selects the correct input using the partition parameters 620 which are passed to all the base and progressive selectors. The AC base selector 1210 outputs a zero if there is no other value available from the AC base decoders. The AC progressive decoders 625 decode the progressive Huffman data in to a block run count, a coefficient run count, correction bits, and sign 658521.doc -36bits. All these are used by the progressive units 1220 to form each stage of the result. A non-zero block run count indicates that there is no new information coming from the AC progressive decoder for this MCU, but the progressive unit will request a correction bit from the AC progressive decoder if the input to the progressive unit from the AC base selector or the preceding progressive unit is non-zero. The block run count is decremented that the end of each MCU. A non-zero coefficient run count will cause a correction bit to be used for any non-zero input to the progressive unit, and the coefficient counter to be decremented for any zero input. When the coefficient counter reaches zero, the sign bit is used to output either a positive or negative value to the next progressive unit or the coefficient buffer 614. At the end of the MCU decoding, the coefficient buffer contains a DCT block comprising the 63 AC coefficients, and the DC coefficient passed from the DC coefficient output 1108 (Fig 11).
It should be noted that all bits that were part of bitstream scans that were discarded during the compression stage are included during the decompression stage by padding those bits with zeros.
Returning now to Fig. 9, the Huffman encoder 930 takes the contents of the coefficient buffer 914, and compresses the coefficients in accordance with the JPEG standard. The compressed data is passed to the tile writer 931, which writes each tile in to the second buffer 210 in main memory.
As mentioned previously, the active buffers 926(1)-926(16) request data from the first buffer 205 in main memory. The read address of this data is calculated by looking up the memory management table to obtain the address of the currently reading block of memory. Note that this will initially be the field originally copied from the linked list root address field of the memory management table generated by the compression module 106, and that the block index is initially zero. The read address is obtained by adding the block index value to the root address field. When the data is returned, the block index is incremented by the size of a data fetch.
Memory that is not needed can be released, thus enabling efficient use of the memory resources. The use of linked lists makes this easier than other possible memory allocation schemes.
658521.doc 37 Memory is released progressively as the compressed image (stored in the first buffer) is decompressed. A check is made whether one or more blocks of memory of the scan streams can be released, at the start of each new line of tiles during the decompression process, ie when all the fragments of the previous lines have been decompressed. This check involves updating the current block address in the memory management table 300 to point to the block containing the start of the next MCU line. If the current block address is the same as the linked list root address then no memory is released. Otherwise, the first block of memory is unlinked from the linked list for the scan and linked to the tail end of the free list. This freeing of blocks continues in this fashion until the current block address is the same as the linked list root address.
To assist in the freeing of memory, the scan output manager 208 preferably utilises the free block register 312 and also the free tail register 314. The free block register 312 stores the address of the head of the free linked list (the root address of the free linked list, see Figs. 3 and and the free list tail register 313 stores the address of the tail of the free linked list (the address of the current free block, see Figs. 3 and 8).
To free the blocks, the scan input manager 212 searches for scans where the read address is outside the address range of the first block. It then writes the address of the first block to the next block address in the block pointed to by the free list tail register 313, and then to free list tail register 313 itself. If the free block register 312 is zero, then this value is transferred to the free list tail register 312 by the scan output manager. The first entry of the newly freed block is set to zero to indicate the end of the free list. This is repeated until there are no more blocks to be freed. An alternative implementation can keep track of the first and last blocks to be freed, and perform the block freeing in one operation. Note that block assignment by the compressor module is disabled during this process.
As can be seen, the image compression module 106 performs a compression operation comprising standard JPEG DCT and quantisation stages followed by multistream encoding stage. The multi-stream encoding stage takes the 64 coefficients from the output of the quantisation stage and splits them into multiple streams, preferably 16 streams. These streams comprise encoded scans of the quantised DCT blocks.
658521.doc -38- The sixteen streams are stored in memory in linked lists of fixed size buffers. This enables the contents of a stream to be easily delayed and the memory freed by that deletion to be used to store other streams. If the memory available for an image is limited then compressed streams are discarded in a pre-selected order. The order is designed to free an incremental quantity of memory for each stream while keeping the final image quality as high as possible. Freeing the progressive streams is roughly equivalent to increasing the quantisation table entry for the matching coefficients by a factor of two in its effect on the size of the compressed image, and the quality of the de-compressed result.
The multiple streams are then read in a tile order from memory and transcoded to a tiled JPEG compressed image.
Industrial Applicability It is apparent from the above that the arrangements described are applicable to the computer graphics and printing industries and other related industries.
The foregoing describes only some embodiments of the present invention, and modifications and/or changes can be made thereto without departing from the scope and spirit of the invention, the embodiment(s) being illustrative and not restrictive.
In the context of this specification, the word "comprising" means "including principally but not necessarily solely" or "having" or "including" and not "consisting only of'. Variations of the word comprising, such as "comprise" and "comprises" have corresponding meanings.
658521.doc

Claims (4)

1. A method of coding a digital image, the method comprising: a dividing step for dividing the digital image into a plurality of blocks of pixels; a transforming step for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding step for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the coded representation comprises at least one contiguous encoded data stream; a first decoding step for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients, and said first decoding step comprises the sub-steps of: a retrieving sub-step for retrieving encoded data in the at least one contiguous encoded data stream associated with a current band of a current tile utilising a corresponding at least one stored current address; a decoding sub-step for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing sub-step for storing at least one address which addresses encoded data in the at least one contiguous encoded data stream associated with an end of the current band of the current tile; a first repeating sub-step for repeating said decoding, storing and retrieving sub-steps for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repeating sub-step for repeating said decoding, storing, retrieving, and first repeating sub-steps for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding step for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation.
658521.doc
2. A method as claimed in claim 1, wherein the method comprises, prior to the retrieving sub-step, the sub-steps of: a retrieval sub-step for retrieving, when the current tile is the first tile in the tile raster order, addresses to encoded data in the least one contiguous encoded data stream that are associated with a start of the bands of the first tile; and a storing sub-step for storing the retrieved addresses as the stored current addresses.
3. A method as claimed in claim 2, wherein the second repeating step further comprises the sub-steps of: a retrieval sub-step for retrieving, when the current tile is the last tile in a row of tiles in the tile raster order, addresses to encoded data in the least one contiguous encoded data stream that are associated with a start of the bands of the next tile in raster order; and a storing sub-step for storing the retrieved addresses as the stored current addresses.
4. A method as claimed in claim 1, wherein the least one contiguous encoded data stream comprises a plurality of contiguous encoded data streams comprising a first encoded data stream which makes a most perceptually significant contribution to the digital image when the data streams are decoded, and a last encoded data stream which makes the least perceptually significant contribution to the digital image when the data streams are decoded, with other streams ordered between the first and last. A method as claimed in claim 1, wherein said first encoding step comprises the sub-steps of: a partitioning sub-step for partitioning the blocks of transform coefficients into a plurality of partitions, wherein each partition comprises data from each block of transform coefficients, and the plurality of partitions comprises a perceptually significant 658521.doc -41- partition and a perceptually insignificant partition and partitions of varying perceptually significance there between; an encoding sub-step for encoding the partitions to form corresponding contiguous encoded data streams; and a managing sub-step for managing the storing of the contiguous data streams in a storage of fixed memory size, wherein during the storing of the contiguous encoded data streams if it is determined the storage is full a contiguous encoded data stream corresponding to the least perceptually significant partition currently stored is overwritten by data from a contiguous encoded data stream corresponding to a more perceptually significant partition. 6. A method as claimed in claim 5, wherein said second encoding step comprises the sub-steps of: padding with zeros any bits in the decoded block of transform coefficients that were discarded as a result of the overwritting. 7. A method as claimed in claim 1, wherein said method further comprises the step of: a second decoding step for decoding the coded second representation of the tiles of transform coefficients, wherein the second decoding step comprises the sub-steps of: retrieving the encoded tiles in an order in accordance with a rotation signal; and decoding the retrieved tiles in the order in accordance with the rotation signal. 8. A method of coding a digital image, the method comprising: a dividing step for dividing the digital image into a plurality of blocks of pixels; a transforming step for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding step for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image; 658521.doc 42 a first decoding step for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients; and a second encoding step for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation. 9. A method of coding a digital image, the method comprising: a dividing step for dividing the digital image into a plurality of blocks of pixels; a transforming step for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding step for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the encoding step comprises the sub-steps of; a partitioning sub-step for partitioning the blocks of transform coefficients into a plurality of partitions, wherein each partition comprises data from each block of transform coefficients, and the plurality of partitions comprises a perceptually significant partition and a perceptually insignificant partition and partitions of varying perceptually significance there between; an encoding sub-step for encoding the partitions to form corresponding contiguous encoded data streams; and a managing sub-step for managing the storing of the contiguous encoded data streams in a storage of fixed memory size, wherein during the storing of the contiguous encoded data streams if it is determined the storage is full a contiguous encoded data stream corresponding to the least perceptually significant partition currently stored is overwritten by data from a contiguous encoded data stream corresponding to a more perceptually significant partition, wherein said stored contiguous data streams form the first coded representation; a first decoding step for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band 658521.doc -43- comprising at least one block of transform coefficients, and said first decoding step comprises the sub-steps of: a retrieving sub-step for retrieving encoded data in the contiguous encoded data streams associated with a current band of a current tile utilising a corresponding at least one stored current address; a decoding sub-step for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing sub-step for storing at least one address which addresses encoded data in the contiguous encoded data streams associated with an end of the current band of the current tile; a first repeating sub-step for repeating said decoding, storing and retrieving sub-steps for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repeating sub-step for repeating said decoding, storing, retrieving, and first repeating sub-steps for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding step for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation, wherein said second encoding step comprises the sub-step of: padding with zeros any bits in the decoded block of transform coefficients that were discarded as a result of the overwriting. Apparatus for coding a digital image, the apparatus comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the coded representation comprises at least one contiguous encoded data stream; 658521.doc 44 a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients, and said first decoding module comprises: a retrieval unit for retrieving encoded data in the at least one contiguous encoded data stream associated with a current band of a current tile utilising a corresponding at least one stored current address; a decoding unit for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing unit for storing at least one address which addresses encoded data in the at least one contiguous encoded data stream associated with an end of the current band of the current tile; a first repetition unit for repeating the operations of said decoding, storing and retrieval units for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repetition unit for repeating the operations of said decoding, storing, retrieval, and first repetition units for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation. 11. Apparatus for coding a digital image, the apparatus comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image; 658521.doc a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients; and a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation. 12. Apparatus for coding a digital image, the apparatus comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the first encoding module comprises; a partitioning unit for partitioning the blocks of transform coefficients into a plurality of partitions, wherein each partition comprises data from each block of transform coefficients, and the plurality of partitions comprises a perceptually significant partition and a perceptually insignificant partition and partitions of varying perceptually significance there between; an encoding unit for encoding the partitions to form corresponding contiguous encoded data streams; and a managing unit for managing the storing of the contiguous encoded data streams in a storage of fixed memory size, wherein during the storing of the contiguous encoded data streams if it is determined the storage is full a contiguous encoded data stream corresponding to the least perceptually significant partition currently stored is overwritten by data from a contiguous encoded data stream corresponding to a more perceptually significant partition, wherein said stored contiguous data streams form the first coded representation; a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each 658521.doc 46 band comprising at least one block of transform coefficients, and said first decoding module comprises: a retrieving unit for retrieving encoded data in the contiguous encoded data streams associated with a current band of a current tile utilising corresponding stored current addresses; a decoding unit for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing unit for storing addresses which address encoded data in the contiguous encoded data streams associated with an end of the current band of the current tile; a first repeating unit for repeating the operations of said decoding, storing and retrieving units for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repeating unit for repeating said decoding, storing, retrieving, and first repeating units for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation, wherein said second encoding unit comprises: a padding unit for padding with zeros any bits in the decoded block of transform coefficients that were discarded as a result of the overwriting. 13. A computer program for coding a digital image, the computer program comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the coded representation comprises at least one contiguous encoded data stream; 658521.doc -47 a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients, and said first decoding module comprises: a retrieval sub-module for retrieving encoded data in the at least one contiguous encoded data stream associated with a current band of a current tile utilising a corresponding at least one stored current address; a decoding sub-module for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing sub-module for storing at least one address which addresses encoded data in the at least one contiguous encoded data stream associated with an end of the current band of the current tile; a first repetition sub-module for repeating the operations of said decoding, storing and retrieval sub-modules for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repetition sub-module for repeating the operations of said decoding, storing, retrieval, and first repetition sub-modules for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation. 14. A computer program for coding a digital image, the computer program comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image; 658521.doc -48- a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each band comprising at least one block of transform coefficients; and a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation. A computer program for coding a digital image, the computer program comprising: a dividing module for dividing the digital image into a plurality of blocks of pixels; a transforming module for transforming the blocks of pixels to produce corresponding blocks of transform coefficients; a first encoding module for encoding the blocks of transform coefficients in a block raster order to form a first coded representation of the digital image, wherein the first encoding module comprises; a partitioning sub-module for partitioning the blocks of transform coefficients into a plurality of partitions, wherein each partition comprises data from each block of transform coefficients, and the plurality of partitions comprises a perceptually significant partition and a perceptually insignificant partition and partitions of varying perceptually significance there between; an encoding sub-module for encoding the partitions to form corresponding contiguous encoded data streams; and a managing sub-module for managing the storing of the contiguous encoded data streams in a storage of fixed memory size, wherein during the storing of the contiguous encoded data streams if it is determined the storage is full a contiguous encoded data stream corresponding to the least perceptually significant partition currently stored is overwritten by data from a contiguous encoded data stream corresponding to a more perceptually significant partition, wherein said stored contiguous data streams form the first coded representation; a first decoding module for decoding the first coded representation in a tile raster order to form a plurality of tiles, wherein each tile comprises a plurality of bands and each 658521.doc -49- band comprising at least one block of transform coefficients, and said first decoding module comprises: a retrieving sub-module for retrieving encoded data in the contiguous encoded data streams associated with a current band of a current tile utilising corresponding stored current addresses; a decoding sub-module for decoding the retrieved encoded data of the current band of the current tile until the last block in the current band of the current tile has been decoded; a storing sub-module for storing addresses which address encoded data in the contiguous encoded data streams associated with an end of the current band of the current tile; a first repeating sub-module for repeating the operations of said decoding, storing and retrieving sub-modules for the next band of the current tile as the next current band until all bands of the current tile has been decoded; and a second repeating sub-module for repeating said decoding, storing, retrieving, and first repeating sub-modules for the next tile in the tile raster order as the next current tile until all tiles have been decoded; a second encoding module for encoding the tiles of transform coefficients in the tile raster order to form a second coded representation, wherein said second encoding module comprises: a padding sub-module for padding with zeros any bits in the decoded block of transform coefficients that were discarded as a result of the overwriting. 16. A method of coding a digital image, the method substantially as described herein with reference to the accompanying drawings. 17. Apparatus for coding a digital image, the apparatus substantially as described herein with reference to the accompanying drawings. 658521.doc 18. A computer program for coding a digital image, the computer program substantially as described herein with reference to the accompanying drawings. Dated 9 December, 2003 Canon Kabushiki Kaisha Patent Attorneys for the Applicant/Nominated Person SPRUSON FERGUSON 658521.doc
AU2003268575A 2002-12-16 2003-12-09 Tiling a Compressed Image Ceased AU2003268575B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU2003268575A AU2003268575B2 (en) 2002-12-16 2003-12-09 Tiling a Compressed Image

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
AU2002953377 2002-12-16
AU2002953377A AU2002953377A0 (en) 2002-12-16 2002-12-16 Tiling a Compressed Image
AU2003268575A AU2003268575B2 (en) 2002-12-16 2003-12-09 Tiling a Compressed Image

Publications (2)

Publication Number Publication Date
AU2003268575A1 true AU2003268575A1 (en) 2004-07-01
AU2003268575B2 AU2003268575B2 (en) 2006-02-02

Family

ID=34314588

Family Applications (1)

Application Number Title Priority Date Filing Date
AU2003268575A Ceased AU2003268575B2 (en) 2002-12-16 2003-12-09 Tiling a Compressed Image

Country Status (1)

Country Link
AU (1) AU2003268575B2 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110555895A (en) * 2014-05-14 2019-12-10 英特尔公司 Utilizing inter-frame coherency in a medium ordering architecture
CN112913242A (en) * 2020-07-24 2021-06-04 深圳市大疆创新科技有限公司 Encoding method and encoding device

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0586074B1 (en) * 1992-07-31 2001-11-14 Canon Kabushiki Kaisha Image processing apparatus and method suitable for multistage compression
AU749350B2 (en) * 1998-07-02 2002-06-27 Motorola Australia Pty Ltd A method and apparatus for encoding and decoding compressed images
US6229926B1 (en) * 1998-07-24 2001-05-08 Picsurf, Inc. Memory saving wavelet-like image transform system and method for digital camera and other memory conservative applications
AUPP918699A0 (en) * 1999-03-12 1999-04-15 Canon Kabushiki Kaisha Encoding method and appartus
JP2003504913A (en) * 1999-07-02 2003-02-04 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ Compressed storage of information
AU749077B2 (en) * 1999-07-12 2002-06-20 Canon Kabushiki Kaisha Digital image coding
AUPR192700A0 (en) * 2000-12-06 2001-01-04 Canon Kabushiki Kaisha Storing coding image data in storage of fixed memory size

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110555895A (en) * 2014-05-14 2019-12-10 英特尔公司 Utilizing inter-frame coherency in a medium ordering architecture
CN110555895B (en) * 2014-05-14 2023-09-29 英特尔公司 Utilizing inter-frame coherence in a mid-ordering architecture
CN112913242A (en) * 2020-07-24 2021-06-04 深圳市大疆创新科技有限公司 Encoding method and encoding device
CN112913242B (en) * 2020-07-24 2023-02-28 深圳市大疆创新科技有限公司 Encoding method and encoding device

Also Published As

Publication number Publication date
AU2003268575B2 (en) 2006-02-02

Similar Documents

Publication Publication Date Title
US6664902B2 (en) Storing coding image data in storage of fixed memory size
US7257264B2 (en) Image processing apparatus and method for compression-encoding image area information
JP5432450B2 (en) Lossless color image data compression using entropy coding
US6941019B1 (en) Reentry into compressed data
US20030138151A1 (en) Encoder rate control
US10313695B2 (en) Parallel decode of a progressive JPEG bitstream
US20010003544A1 (en) Image processing apparatus and method and storage medium
US8094952B2 (en) Image processing apparatus and image processing method
JP4902474B2 (en) Image processing apparatus and image processing method
JP2000138836A (en) Compressor for digital image including background pixels
JPH10304368A (en) Compression system/method, expansion system, forward converter, compressor, coding method, coder, integrated circuit, decoder, context modeling device, compression method, coding system and conversion coefficient processing method
AU2003268575B2 (en) Tiling a Compressed Image
US7751635B2 (en) Compression into a fixed size buffer
US8417041B2 (en) Resolution independent image degradation
AU770770B2 (en) Storing coding image data in storage of fixed memory size
AU2004200196B2 (en) Compression into a Fixed Size Buffer
US20090074059A1 (en) Encoding method and device for image data
AU2004218686B2 (en) A Combined Spatial and Transform Domain Method for Compressing Image Data into a Fixed Size Buffer
JP2003069835A (en) Image processor, method, computer program and storage medium
AU2003204390B2 (en) Embedding a Multi-resolution Compressed Thumbnail Image in a Compressed Image File
AU770148B2 (en) Digital image compression and decompression
AU2006236081A1 (en) An image compression and decompression apparatus
AU2005203385A1 (en) Managing storage of digital image data
JPH0865672A (en) Processor and method for compressing character data
JP2002077626A (en) Apparatus and method for image processing and recording medium

Legal Events

Date Code Title Description
FGA Letters patent sealed or granted (standard patent)
MK14 Patent ceased section 143(a) (annual fees not paid) or expired