|
|
Line 1: |
Line 1: |
| {{Other uses}}
| | Bonjour ! J'aіme les vidéos passionnantes . Alors si ça te tente : n'hésite pas à tchater. Je suis d'accord pour fairе une rencօntre X dans l'Haute Saone<br><br>Also viѕit my weblog - [http://www.obese.nu/ obese.nu] |
| | |
| {{Infobox file format
| |
| | name
| |
| Joint Photographic Experts Group
| |
| | screenshot = [[File:Felis silvestris silvestris small gradual decrease of quality.png|border|240px]]
| |
| | caption = A photo of a cat with the compression rate decreasing, and hence quality increasing, from left to right.
| |
| | extension = <tt>.jpg</tt>, <tt>.jpeg</tt>, <tt>.jpe</tt><br /><tt>.jif</tt>, <tt>.jfif</tt>, <tt>.jfi</tt>
| |
| | mime = <tt>image/jpeg</tt>
| |
| | typecode = <tt>JPEG</tt>
| |
| | uniform type = public.jpeg
| |
| | owner = [[Joint Photographic Experts Group]]
| |
| | genre = [[lossy compression|lossy]] [[image format]]
| |
| | container for =
| |
| | contained by =
| |
| | extended from =
| |
| | extended to =
| |
| | magic = <tt>ff d8</tt>
| |
| | standard = ISO/IEC 10918, ITU-T T.81, ITU-T T.83, ITU-T T.84, ITU-T T.86
| |
| }}
| |
| [[File:Continuously varied JPEG compression for an abdominal CT scan - 1471-2342-12-24-S1.ogv|thumb|300px|Continuously varied JPEG compression (between Q=100 and Q=1) for an [[abdominal]] [[CT scan]].]]
| |
| | |
| In [[computing]], '''JPEG''' ({{IPAc-en|ˈ|dʒ|eɪ|p|ɛ|ɡ}} {{respell|JAY|peg}})<ref>{{cite web|url=http://www.collinsdictionary.com/dictionary/english/jpeg|title=Definition of "JPEG"|work=[[Collins English Dictionary]]|accessdate=23 May 2013}}</ref> (seen most often with the '''.jpg''' extension) is a commonly used method of [[lossy compression]] for [[digital photography]]<nowiki> (i.e. images).</nowiki> The degree of compression can be adjusted, allowing a selectable tradeoff between storage size and image quality. JPEG typically achieves 10:1 compression with little perceptible loss in image quality, and is the file type most often produced in digital photography.
| |
| | |
| JPEG compression is used in a number of [[image file formats]]. JPEG/[[Exif]] is the most common image format used by digital cameras and other photographic image capture devices; along with JPEG/[[JFIF]], it is the most common format for storing and transmitting photographic images on the [[World Wide Web]].{{Citation needed|date=February 2010}} These format variations are often not distinguished, and are simply called JPEG.
| |
| | |
| The term "JPEG" is an acronym for the [[Joint Photographic Experts Group]], which created the standard. The [[Internet media type|MIME media type]] for JPEG is ''image/jpeg'' (defined in RFC 1341), except in [[Internet Explorer]], which provides a MIME type of ''image/pjpeg'' when uploading JPEG images.<ref>[http://msdn.microsoft.com/en-us/library/ms775147%28v=vs.85%29.aspx#_replace MIME Type Detection in Internet Explorer: Uploaded MIME Types] (msdn.microsoft.com)</ref>
| |
| | |
| JPEG/JFIF supports a maximum image size of 65535×65535.<ref>[http://www.jpeg.org/public/jfif.pdf JPEG File Layout and Format]</ref>
| |
| | |
| ==The JPEG standard==
| |
| The name "JPEG" stands for [[Joint Photographic Experts Group]], the name of the committee that created the JPEG standard and also other still picture coding standards. The "Joint" stood for ISO TC97 WG8 and CCITT SGVIII. In 1987 ISO TC 97 became ISO/IEC JTC1 and in 1992 CCITT became ITU-T. Currently on the JTC1 side JPEG is one of two sub-groups of [[International Organization for Standardization|ISO]]/[[International Electrotechnical Commission|IEC]] [[ISO/IEC JTC1|Joint Technical Committee 1]], Subcommittee 29, Working Group 1 ([[ISO/IEC JTC 1/SC 29]]/WG 1) – titled as ''Coding of still pictures''.<ref name="sc29-wg1">{{cite web |url=http://www.itscj.ipsj.or.jp/sc29/29w12901.htm |title=ISO/IEC JTC 1/SC 29/WG 1 – Coding of Still Pictures (SC 29/WG 1 Structure) |author=ISO/IEC JTC 1/SC 29 |date=2009-05-07 |accessdate=2009-11-11}}</ref><ref name="jpeg-sc29">{{cite web |url=http://www.itscj.ipsj.or.jp/sc29/29w42901.htm |title=Programme of Work, (Allocated to SC 29/WG 1) |author=ISO/IEC JTC 1/SC 29 |accessdate=2009-11-07}}</ref><ref>{{cite web |url=http://www.iso.org/iso/standards_development/technical_committees/list_of_iso_technical_committees/iso_technical_committee.htm?commid=45316 |title=JTC 1/SC 29 – Coding of audio, picture, multimedia and hypermedia information |author=ISO |accessdate=2009-11-11}}</ref> On the ITU-T side ITU-T SG16 is the respective body. The original JPEG group was organized in 1986,<ref name="jpeg-jpeg">{{cite web | url=http://www.jpeg.org/jpeg/index.html | title=Joint Photographic Experts Group, JPEG Homepage | author=JPEG | accessdate=2009-11-08}}</ref> issuing the first JPEG standard in 1992, which was approved in September 1992 as '''[[ITU-T]] Recommendation T.81'''<ref>{{cite web |url=http://www.itu.int/rec/T-REC-T.81 |title=T.81 : Information technology – Digital compression and coding of continuous-tone still images – Requirements and guidelines| accessdate=2009-11-07}}</ref> and in 1994 as '''[[International Organization for Standardization|ISO]]/[[International Electrotechnical Commission|IEC]] 10918-1'''.
| |
| | |
| The JPEG standard specifies the [[codec]], which defines how an image is compressed into a stream of [[byte]]s and decompressed back into an image, but not the file format used to contain that stream.<ref>
| |
| {{cite book
| |
| | title = JPEG still image data compression standard
| |
| | edition = 3rd
| |
| | author = William B. Pennebaker and Joan L. Mitchell
| |
| | publisher = Springer
| |
| | year = 1993
| |
| | isbn = 978-0-442-01272-4
| |
| | page = 291
| |
| | url = http://books.google.com/books?id=AepB_PZ_WMkC&pg=PA291&dq=JPEG+%22did+not+specify+a+file+format%22&lr=&num=20&as_brr=0&ei=VHXySui8JYqukASSssWzAw#v=onepage&q=JPEG%20%22did%20not%20specify%20a%20file%20format%22&f=false
| |
| }}</ref>
| |
| The [[Exif]] and [[JFIF]] standards define the commonly used file formats for interchange of JPEG-compressed images.
| |
| | |
| JPEG standards are formally named as ''Information technology – Digital compression and coding of continuous-tone still images''. ISO/IEC 10918 consists of the following parts:
| |
| | |
| {| class="wikitable sortable" style="width:100%;"
| |
| |+Digital compression and coding of continuous-tone still images – Parts<ref name="jpeg-sc29" /><ref name="jpeg-jpeg" /><ref>{{cite web |url=http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_tc_browse.htm?commid=45316 |title=JTC 1/SC 29 – Coding of audio, picture, multimedia and hypermedia information |author=ISO | accessdate=2009-11-07}}</ref>
| |
| |-
| |
| ! style="width:6%;"| Part | |
| ! style="width:15%;"| ISO/IEC standard
| |
| ! style="width:10%;"| ITU-T Rec.
| |
| ! style="width:8%;"| First public release date
| |
| ! style="width:8%;"| Latest amendment
| |
| ! style="width:30%;"| Title
| |
| ! Description
| |
| |-
| |
| | Part 1
| |
| | [http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=18902 ISO/IEC 10918-1:1994]
| |
| | [http://www.itu.int/rec/T-REC-T.81 T.81 (09/92)]
| |
| | {{date sortable|v=0|1992-09-18}}
| |
| |
| |
| | Requirements and guidelines
| |
| |
| |
| |-
| |
| | Part 2
| |
| | [http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=20689 ISO/IEC 10918-2:1995]
| |
| | [http://www.itu.int/rec/T-REC-T.83 T.83 (11/94)]
| |
| | {{date sortable|v=0|1994-11-11}}
| |
| |
| |
| | Compliance testing
| |
| | rules and checks for software conformance (to Part 1)
| |
| |-
| |
| | Part 3
| |
| | [http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=25037 ISO/IEC 10918-3:1997]
| |
| | [http://www.itu.int/rec/T-REC-T.84 T.84 (07/96)]
| |
| | {{date sortable|v=0|1996-07-03}}
| |
| | {{date sortable|v=0|1999-04-01}}
| |
| | Extensions
| |
| | set of extensions to improve the Part 1, including the SPIFF file format
| |
| |-
| |
| | Part 4
| |
| | [http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=25431 ISO/IEC 10918-4:1999]
| |
| | [http://www.itu.int/rec/T-REC-T.86 T.86 (06/98)]
| |
| | {{date sortable|v=0|1998-06-18}}
| |
| | {{date sortable|v=0|2012-06-29}}
| |
| | Registration of JPEG profiles, SPIFF profiles, SPIFF tags, SPIFF colour spaces, APPn markers, SPIFF compression types and Registration Authorities (REGAUT)
| |
| | methods for registering some of the parameters used to extend JPEG
| |
| |-
| |
| | Part 5
| |
| | [http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=54989 ISO/IEC 10918-5:2013]
| |
| | [http://www.itu.int/rec/T-REC-T.871 T.871 (05/11)]
| |
| | {{date sortable|v=0|2011-05-14}}
| |
| |
| |
| | JPEG File Interchange Format (JFIF)
| |
| | A popular format which has been the de facto file format for images encoded by the JPEG standard. In 2009, the JPEG Committee formally established an Ad Hoc Group to standardize JFIF as JPEG Part 5.<ref name="jfif-development">{{cite web |url=http://www.jpeg.org/newsrel25.html |title=Press Release – 48th WG1 meeting, Maui, USA – JPEG XR enters FDIS status, JPEG File Interchange Format (JFIF) to be standardized as JPEG Part 5 |author=JPEG |date=2009-04-24 |accessdate=2009-11-09}}</ref>
| |
| |-
| |
| | Part 6
| |
| | [http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=59634 ISO/IEC 10918-6:2013]
| |
| | [http://www.itu.int/rec/T-REC-T.872 T.872 (06/12)]
| |
| | {{date sortable|v=0|2012-06}}
| |
| |
| |
| | Application to printing systems
| |
| | Specifies a subset of features and application tools for the interchange of images encoded according to the ISO/IEC 10918-1 for printing.
| |
| |}
| |
| | |
| [[Ecma International]] <abbr title="Technical Report">TR</abbr>/98 specifies the JPEG File Interchange Format (JFIF); the first edition was published in June 2009.<ref>{{cite web
| |
| |url=http://www.ecma-international.org/publications/techreports/E-TR-098.htm
| |
| |year=2009
| |
| |title=JPEG File Interchange Format (JFIF)
| |
| |accessdate=2011-08-01
| |
| |work=ECMA TR/98 1st ed.
| |
| |publisher=[[Ecma International]]}}</ref>
| |
| | |
| ==Typical usage==
| |
| The JPEG compression algorithm is at its best on photographs and paintings of realistic scenes with smooth variations of tone and color. For web usage, where the amount of data used for an image is important, JPEG is very popular. JPEG/[[Exif]] is also the most common format saved by digital cameras.
| |
| | |
| On the other hand, JPEG may not be as well suited for line drawings and other textual or iconic graphics, where the sharp contrasts between adjacent pixels can cause noticeable artifacts. Such images may be better saved in a [[Lossless data compression#Graphics|lossless graphics format]] such as [[TIFF]], [[Graphics Interchange Format|GIF]], [[Portable Network Graphics|PNG]], or a [[raw image format]]. The JPEG standard actually includes a lossless coding mode, but that mode is not supported in most products.
| |
| | |
| As the typical use of JPEG is a [[lossy compression]] method, which somewhat reduces the image fidelity, it should not be used in scenarios where the exact reproduction of the data is required (such as some scientific and medical imaging applications and certain technical [[image processing]] work).
| |
| | |
| JPEG is also not well suited to files that will undergo multiple edits, as some image quality will usually be lost each time the image is decompressed and recompressed, particularly if the image is cropped or shifted, or if encoding parameters are changed – see [[digital generation loss]] for details. To avoid this, an image that is being modified or may be modified in the future can be saved in a lossless format, with a copy exported as JPEG for distribution.
| |
| | |
| ==JPEG compression==
| |
| JPEG uses a lossy form of compression based on the [[discrete cosine transform]] (DCT). This mathematical operation converts each frame/field of the video source from the spatial (2D) domain into the frequency domain (aka transform domain.) A perceptual model based loosely on the human psychovisual system discards high-frequency information, i.e. sharp transitions in intensity, and color hue. In the transform domain, the process of reducing information is called quantization. In simpler terms, quantization is a method for optimally reducing a large number scale (with different occurrences of each number) into a smaller one, and the transform-domain is a convenient representation of the image because the high-frequency coefficients, which contribute less to the over picture than other coefficients, are characteristically small-values with high compressibility. The quantized coefficients are then sequenced and losslessly packed into the output bitstream. Nearly all software implementations of JPEG permit user control over the compression-ratio (as well as other optional parameters), allowing the user to trade off picture-quality for smaller file size. In embedded applications (such as miniDV, which uses a similar DCT-compression scheme), the parameters are pre-selected and fixed for the application.
| |
| | |
| The compression method is usually [[Lossy compression|lossy]], meaning that some original image information is lost and cannot be restored, possibly affecting image quality. There is an optional [[Lossless JPEG|lossless]] mode defined in the JPEG standard. However, this mode is not widely supported in products.
| |
| | |
| There is also an [[interlace (bitmaps)|interlaced]] "Progressive JPEG" format, in which data is compressed in multiple passes of progressively higher detail. This is ideal for large images that will be displayed while downloading over a slow connection, allowing a reasonable preview after receiving only a portion of the data. However, support for progressive JPEGs is not universal. When progressive JPEGs are received by programs that do not support them (such as versions of [[Internet Explorer]] before [[Windows 7]])<ref>{{cite web
| |
| | url = http://msdn.microsoft.com/en-us/library/ee720036(v=vs.85).aspx
| |
| | title = Progressive Decoding Overview | accessdate = 2012-03-23
| |
| | work = Microsoft Developer Network | publisher = Microsoft
| |
| }}</ref> the software only displays the image after it has been completely downloaded.
| |
| | |
| There are also many medical imaging and traffic systems that create and process 12-bit JPEG images, normally grayscale images. The 12-bit JPEG format has been part of the JPEG specification for some time, but this format is not as widely supported.
| |
| | |
| ===Lossless editing===
| |
| {{See also|jpegtran|Commons:User:Cropbot}}
| |
| A number of alterations to a JPEG image can be performed losslessly (that is, without recompression and the associated quality loss) as long as the image size is a multiple of 1 MCU block (Minimum Coded Unit) (usually 16 pixels in both directions, for 4:2:0 [[chroma subsampling]]). Utilities that implement this include <tt>[[jpegtran]],</tt> with user interface Jpegcrop, and the <tt>JPG_TRANSFORM</tt> plugin to [[IrfanView]].
| |
| | |
| Blocks can be rotated in 90 degree increments, flipped in the horizontal, vertical and diagonal axes and moved about in the image. Not all blocks from the original image need to be used in the modified one.
| |
| | |
| The top and left edge of a JPEG image must lie on a 8 × 8 pixel block boundary, but the bottom and right edge need not do so. This limits the possible '''lossless crop''' operations, and also prevents flips and rotations of an image whose bottom or right edge does not lie on a block boundary for all channels (because the edge would end up on top or left, where – as aforementioned – a block boundary is obligatory).
| |
| | |
| When using lossless cropping, if the bottom or right side of the crop region is not on a block boundary then the rest of the data from the partially used blocks will still be present in the cropped file and can be recovered. It is also possible to transform between baseline and progressive formats without any loss of quality, since the only difference is the order in which the coefficients are placed in the file.
| |
| | |
| Furthermore, several JPEG images can be losslessly joined together, as long as the edges coincide with block boundaries.
| |
| | |
| ==JPEG files==
| |
| <!-- This section is targeted by the redirect [[JPEG Interchange Format]] -->
| |
| | |
| The [[file format]] known as "JPEG Interchange Format" (JIF) is specified in Annex B of the standard. However, this "pure" file format is rarely used, primarily because of the difficulty of programming encoders and decoders that fully implement all aspects of the standard and because of certain shortcomings of the standard:
| |
| * Color space definition
| |
| * Component sub-sampling registration
| |
| * Pixel aspect ratio definition.
| |
| | |
| Several additional standards have evolved to address these issues. The first of these, released in 1992, was [[JPEG File Interchange Format]] (or JFIF), followed in recent years by [[Exchangeable image file format]] (Exif) and [[International Color Consortium|ICC]] [[ICC Profile|color profiles]]. Both of these formats use the actual JIF byte layout, consisting of different ''markers'', but in addition employ one of the JIF standard's extension points, namely the ''application markers'': JFIF use APP0, while Exif use APP1. Within these segments of the file, that were left for future use in the JIF standard and aren't read by it, these standards add specific metadata.
| |
| | |
| Thus, in some ways JFIF is a cutdown version of the JIF standard in that it specifies certain constraints (such as not allowing all the different encoding modes), while in other ways it is an extension of JIF due to the added metadata. The documentation for the original JFIF standard states:<ref>{{cite web
| |
| | url = http://www.w3.org/Graphics/JPEG/jfif3.pdf
| |
| | title = JFIF File Format as PDF
| |
| | format = PDF
| |
| }}
| |
| </ref>
| |
| | |
| :''JPEG File Interchange Format is a minimal file format which enables JPEG bitstreams to be exchanged between a wide variety of platforms and applications. This minimal format does not include any of the advanced features found in the TIFF JPEG specification or any application specific file format. Nor should it, for the only purpose of this simplified format is to allow the exchange of JPEG compressed images.''
| |
| | |
| Image files that employ JPEG compression are commonly called "JPEG files", and are stored in variants of the JIF image format. Most image capture devices (such as digital cameras) that output JPEG are actually creating files in the [[Exif]] format, the format that the camera industry has standardized on for metadata interchange. On the other hand, since the Exif standard does not allow color profiles, most image editing software stores JPEG in [[JFIF]] format, and also include the APP1 segment from the Exif file to include the metadata in an almost-compliant way; the JFIF standard is interpreted somewhat flexibly.<ref>{{cite web|url=http://www.faqs.org/faqs/jpeg-faq/part1/|title=JPEG image compression FAQ|author=Tom Lane|date=1999-03-29|accessdate=2007-09-11}} (q. 14: "Why all the argument about file formats?")</ref>
| |
| | |
| Strictly speaking, the JFIF and Exif standards are incompatible because they each specify that their marker segment (APP0 or APP1, respectively) appears first. In practice, most JPEG files contain a JFIF marker segment that precedes the Exif header. This allows older readers to correctly handle the older format JFIF segment, while newer readers also decode the following Exif segment, being less strict about requiring it to appear first.
| |
| | |
| ===JPEG filename extensions===
| |
| The most common [[filename extension]]s for files employing JPEG compression are '''.jpg''' and '''.jpeg''', though .jpe, .jfif and .jif are also used. It is also possible for JPEG data to be embedded in other file types – [[Tagged Image File Format|TIFF]] encoded files often embed a JPEG image as a [[thumbnail]] of the main image; and [[MP3]] files can contain a JPEG of [[cover art]], in the [[ID3v2]] tag.
| |
| | |
| ===Color profile===
| |
| Many JPEG files embed an [[ICC profile|ICC color profile]] ([[color space]]). Commonly used color profiles include [[sRGB color space|sRGB]] and [[Adobe RGB color space|Adobe RGB]]. Because these color spaces use a non-linear transformation, the [[dynamic range]] of an 8-bit JPEG file is about 11 [[f-number|stops]]; see [[gamma curve]].
| |
| | |
| ==Syntax and structure==
| |
| A JPEG image consists of a sequence of ''segments,'' each beginning with a ''marker'', each of which begins with a 0xFF byte followed by a byte indicating what kind of marker it is. Some markers consist of just those two bytes; others are followed by two bytes indicating the length of marker-specific payload data that follows. (The length includes the two bytes for the length, but not the two bytes for the marker.) Some markers are followed by [[Entropy encoding|entropy-coded]] data; the length of such a marker does not include the entropy-coded data. Note that consecutive 0xFF bytes are used as fill bytes for [[Data padding|padding]] purposes, although this fill byte padding should only ever take place for markers immediately following entropy-coded scan data (see JPEG specification section B.1.1.2 and E.1.2 for details; specifically "In all cases where markers are appended after the compressed data, optional 0xFF fill bytes may precede the marker").
| |
| | |
| Within the entropy-coded data, after any 0xFF byte, a 0x00 byte is inserted by the encoder before the next byte, so that there does not appear to be a marker where none is intended, preventing framing errors. Decoders must skip this 0x00 byte. This technique, called ''byte stuffing'' (see JPEG specification section F.1.2.3), is only applied to the entropy-coded data, not to marker payload data. Note however that entropy-coded data has a few markers of its own; specifically the Reset markers (0xD0 through 0xD7), which are used to isolate independent chunks of entropy-coded data to allow parallel decoding, and encoders are free to insert these Reset markers at regular intervals (although not all encoders do this).
| |
| | |
| {| class="wikitable"
| |
| |+ Common JPEG markers<ref>{{cite web | url = http://www.digicamsoft.com/itu/itu-t81-36.html | title = ISO/IEC 10918-1 : 1993(E) p.36 }}</ref>
| |
| ! Short name
| |
| ! Bytes
| |
| ! Payload
| |
| ! Name
| |
| ! Comments
| |
| |-
| |
| ! SOI
| |
| | 0xFF, 0xD8 || ''none'' || Start Of Image
| |
| |
| |
| |-
| |
| ! SOF0
| |
| | 0xFF, 0xC0 || ''variable size'' || Start Of Frame (Baseline [[Discrete cosine transform|DCT]])
| |
| | Indicates that this is a baseline DCT-based JPEG, and specifies the width, height, number of components, and component subsampling (e.g., 4:2:0).
| |
| |-
| |
| ! SOF2
| |
| | 0xFF, 0xC2 || ''variable size'' || Start Of Frame (Progressive DCT)
| |
| | Indicates that this is a progressive DCT-based JPEG, and specifies the width, height, number of components, and component subsampling (e.g., 4:2:0).
| |
| |-
| |
| ! DHT
| |
| | 0xFF, 0xC4 || ''variable size'' || Define Huffman Table(s)
| |
| | Specifies one or more Huffman tables.
| |
| |-
| |
| ! DQT
| |
| | 0xFF, 0xDB || ''variable size'' || Define Quantization Table(s)
| |
| | Specifies one or more quantization tables.
| |
| |-
| |
| ! DRI
| |
| | 0xFF, 0xDD || 4 bytes || Define Restart Interval
| |
| | Specifies the interval between RST''n'' markers, in macroblocks. This marker is followed by two bytes indicating the fixed size so it can be treated like any other variable size segment.
| |
| |-
| |
| ! SOS
| |
| | 0xFF, 0xDA || ''variable size'' || Start Of Scan
| |
| | Begins a top-to-bottom scan of the image. In baseline DCT JPEG images, there is generally a single scan. Progressive DCT JPEG images usually contain multiple scans. This marker specifies which slice of data it will contain, and is immediately followed by entropy-coded data.
| |
| |-
| |
| ! RST''n''
| |
| | 0xFF, 0xD''n'' (''n''=0..7) || ''none'' || Restart
| |
| | Inserted every ''r'' macroblocks, where ''r'' is the restart interval set by a DRI marker. Not used if there was no DRI marker. The low 3 bits of the marker code cycle in value from 0 to 7.
| |
| |-
| |
| ! APP''n''
| |
| | 0xFF, 0xE''n'' || ''variable size'' || Application-specific
| |
| | For example, an [[Exif]] JPEG file uses an APP1 marker to store metadata, laid out in a structure based closely on [[TIFF]].
| |
| |-
| |
| ! COM
| |
| | 0xFF, 0xFE || ''variable size'' || Comment
| |
| | Contains a text comment.
| |
| |-
| |
| ! EOI
| |
| | 0xFF, 0xD9 || ''none'' || End Of Image
| |
| |
| |
| |}
| |
| | |
| There are other ''Start Of Frame'' markers that introduce other kinds of JPEG encodings.
| |
| | |
| Since several vendors might use the same APP''n'' marker type, application-specific markers often begin with a standard or vendor name (e.g., "Exif" or "Adobe") or some other identifying string.
| |
| | |
| At a restart marker, block-to-block predictor variables are reset, and the bitstream is synchronized to a byte boundary. Restart markers provide means for recovery after bitstream error, such as transmission over an unreliable network or file corruption. Since the runs of macroblocks between restart markers may be independently decoded, these runs may be decoded in parallel.
| |
| | |
| ==JPEG codec example==
| |
| Although a JPEG file can be encoded in various ways, most commonly it is done with JFIF encoding. The encoding process consists of several steps:
| |
| # The representation of the colors in the image is converted from [[RGB color model|RGB]] to [[YCbCr|{{YCbCr}}]], consisting of one [[Luma (video)|luma]] component (Y'), representing brightness, and two [[chrominance|chroma]] components, (C<sub>B</sub> and C<sub>R</sub>), representing color. This step is sometimes skipped.
| |
| # The resolution of the chroma data is reduced, usually by a factor of 2. This reflects the fact that the eye is less sensitive to fine color details than to fine brightness details.
| |
| # The image is split into blocks of 8×8 pixels, and for each block, each of the Y, C<sub>B</sub>, and C<sub>R</sub> data undergoes the Discrete Cosine Transform (DCT), which was developed in 1974 by [[N. Ahmed]], T. Natarajan and K. R. Rao; see Citation 1 in [[Discrete cosine transform]]. A DCT is similar to a [[Fourier transform]] in the sense that it produces a kind of spatial frequency spectrum.
| |
| # The amplitudes of the frequency components are [[Quantization (image processing)|quantized]]. Human vision is much more sensitive to small variations in color or brightness over large areas than to the strength of high-frequency brightness variations. Therefore, the magnitudes of the high-frequency components are stored with a lower accuracy than the low-frequency components. The quality setting of the encoder (for example 50 or 95 on a scale of 0–100 in the Independent JPEG Group's library<ref>{{cite web | url = http://apodeline.free.fr/DOC/libjpeg/libjpeg-3.html | title = Advanced Features: Compression parameter selection | work = Using the IJG JPEG Library | author = Thomas G. Lane. }}</ref>) affects to what extent the resolution of each frequency component is reduced. If an excessively low quality setting is used, the high-frequency components are discarded altogether.
| |
| # The resulting data for all 8×8 blocks is further compressed with a lossless algorithm, a variant of [[Huffman encoding]].
| |
| The decoding process reverses these steps, except the ''quantization'' because it is irreversible. In the remainder of this section, the encoding and decoding processes are described in more detail.
| |
| | |
| ===Encoding===
| |
| Many of the options in the JPEG standard are not commonly used, and as mentioned above, most image software uses the simpler JFIF format when creating a JPEG file, which among other things specifies the encoding method. Here is a brief description of one of the more common methods of encoding when applied to an input that has 24 [[bits per pixel]] (eight each of [[RGB color model|red, green, and blue]]). This particular option is a [[lossy data compression]] method.
| |
| | |
| ====Color space transformation====
| |
| First, the image should be converted from [[RGB color model|RGB]] into a different [[color space]] called [[YCbCr|{{YCbCr}}]] (or, informally, YCbCr). It has three components Y', C<sub>B</sub> and C<sub>R</sub>: the Y' component represents the brightness of a pixel, and the C<sub>B</sub> and C<sub>R</sub> components represent the [[chrominance]] (split into blue and red components). This is basically the same color space as used by [[digital television|digital color television]] as well as digital video including [[DVD Video|video DVDs]], and is similar to the way color is represented in analog [[PAL]] video and [[Multiplexed Analogue Components|MAC]] (but not by analog [[NTSC]], which uses the [[YIQ]] color space). The {{YCbCr}} color space conversion allows greater compression without a significant effect on perceptual image quality (or greater perceptual image quality for the same compression). The compression is more efficient because the brightness information, which is more important to the eventual perceptual quality of the image, is confined to a single channel. This more closely corresponds to the perception of color in the human visual system. The color transformation also improves compression by statistical [[decorrelation]].
| |
| | |
| A particular conversion to {{YCbCr}} is specified in the JFIF standard, and should be performed for the resulting JPEG file to have maximum compatibility. However, some JPEG implementations in "highest quality" mode do not apply this step and instead keep the color information in the [[RGB color model]],{{Citation needed|date=February 2008}} where the image is stored in separate channels for red, green and blue brightness components. This results in less efficient compression, and would not likely be used when file size is especially important.
| |
| | |
| ====Downsampling====
| |
| Due to the densities of color- and brightness-sensitive receptors in the human eye, humans can see considerably more fine detail in the brightness of an image (the Y' component) than in the hue and color saturation of an image (the Cb and Cr components). Using this knowledge, encoders can be designed to compress images more efficiently.
| |
| | |
| The transformation into the [[YCbCr|{{YCbCr}} color model]] enables the next usual step, which is to reduce the spatial resolution of the Cb and Cr components (called "[[downsampling]]" or "[[chroma subsampling]]"). The ratios at which the downsampling is ordinarily done for JPEG images are [[YUV 4:4:4|4:4:4]] (no downsampling), [[YUV 4:2:2|4:2:2]] (reduction by a factor of 2 in the horizontal direction), or (most commonly) [[YUV 4:2:0|4:2:0]] (reduction by a factor of 2 in both the horizontal and vertical directions). For the rest of the compression process, Y', Cb and Cr are processed separately and in a very similar manner.
| |
| | |
| ====Block splitting====
| |
| After [[Chroma Subsampling|subsampling]], each [[Channel (digital image)|channel]] must be split into 8×8 blocks. Depending on chroma subsampling, this yields (Minimum Coded Unit) MCU blocks of size 8×8 (4:4:4 – no subsampling), 16×8 (4:2:2), or most commonly 16×16 (4:2:0). In [[video compression]] MCUs are called [[macroblock]]s.
| |
| | |
| If the data for a channel does not represent an integer number of blocks then the encoder must fill the remaining area of the incomplete blocks with some form of dummy data. Filling the edges with a fixed color (for example, black) can create [[ringing artifact]]s along the visible part of the border{{citation needed|date=August 2013}};
| |
| repeating the edge pixels is a common technique that reduces (but does not necessarily completely eliminate) such artifacts{{citation needed|date=August 2013}}, and more sophisticated border filling techniques can also be applied{{specify|date=August 2013}}.
| |
| | |
| ====Discrete cosine transform====
| |
| [[File:JPEG example subimage.svg|thumb|256px|The 8×8 sub-image shown in 8-bit grayscale]]
| |
| | |
| Next, each 8×8 block of each component (Y, Cb, Cr) is converted to a [[frequency-domain]] representation, using a normalized, two-dimensional type-II [[discrete cosine transform]] (DCT), which was introduced by [[N. Ahmed]], T. Natarajan and [[K. R. Rao]] in 1974; see Citation 1 in [[Discrete cosine transform]]. The DCT is sometimes referred to as "type-II DCT" in the context of a family of transforms as in [[discrete cosine transform]], and the corresponding inverse (IDCT) is denoted as "type-III DCT".
| |
| | |
| As an example, one such 8×8 8-bit subimage might be:
| |
| | |
| :<math>
| |
| \left[
| |
| \begin{array}{rrrrrrrr}
| |
| 52 & 55 & 61 & 66 & 70 & 61 & 64 & 73 \\
| |
| 63 & 59 & 55 & 90 & 109 & 85 & 69 & 72 \\
| |
| 62 & 59 & 68 & 113 & 144 & 104 & 66 & 73 \\
| |
| 63 & 58 & 71 & 122 & 154 & 106 & 70 & 69 \\
| |
| 67 & 61 & 68 & 104 & 126 & 88 & 68 & 70 \\
| |
| 79 & 65 & 60 & 70 & 77 & 68 & 58 & 75 \\
| |
| 85 & 71 & 64 & 59 & 55 & 61 & 65 & 83 \\
| |
| 87 & 79 & 69 & 68 & 65 & 76 & 78 & 94
| |
| \end{array}
| |
| \right].
| |
| </math>
| |
| | |
| Before computing the DCT of the 8×8 block, its values are shifted from a positive range to one centered around zero. For an 8-bit image, each entry in the original block falls in the range <math>[0, 255]</math>. The midpoint of the range (in this case, the value 128) is subtracted from each entry to produce a data range that is centered around zero, so that the modified range is <math>[-128, 127]</math>. This step reduces the dynamic range requirements in the DCT processing stage that follows. (Aside from the difference in dynamic range within the DCT stage, this step is mathematically equivalent to subtracting 1024 from the [[DC coefficient]] after performing the transform – which may be a better way to perform the operation on some architectures since it involves performing only one subtraction rather than 64 of them.)
| |
| | |
| This step results in the following values:
| |
| | |
| :<math>g=
| |
| \begin{array}{c}
| |
| x \\
| |
| \longrightarrow \\
| |
| \left[
| |
| \begin{array}{rrrrrrrr}
| |
| -76 & -73 & -67 & -62 & -58 & -67 & -64 & -55 \\
| |
| -65 & -69 & -73 & -38 & -19 & -43 & -59 & -56 \\
| |
| -66 & -69 & -60 & -15 & 16 & -24 & -62 & -55 \\
| |
| -65 & -70 & -57 & -6 & 26 & -22 & -58 & -59 \\
| |
| -61 & -67 & -60 & -24 & -2 & -40 & -60 & -58 \\
| |
| -49 & -63 & -68 & -58 & -51 & -60 & -70 & -53 \\
| |
| -43 & -57 & -64 & -69 & -73 & -67 & -63 & -45 \\
| |
| -41 & -49 & -59 & -60 & -63 & -52 & -50 & -34
| |
| \end{array}
| |
| \right]
| |
| \end{array}
| |
| \Bigg\downarrow y.
| |
| </math>
| |
| | |
| The next step is to take the two-dimensional DCT, which is given by:
| |
| | |
| [[File:Dctjpeg.png|thumb|219px|The DCT transforms an 8×8 block of input values to a [[linear combination]] of these 64 patterns. The patterns are referred to as the two-dimensional DCT ''basis functions'', and the output values are referred to as ''transform coefficients''. The horizontal index is <math>u</math> and the vertical index is <math>v</math>.]]
| |
| :<math>\ G_{u,v} =
| |
| \frac{1}{4}
| |
| \alpha(u)
| |
| \alpha(v)
| |
| \sum_{x=0}^7
| |
| \sum_{y=0}^7
| |
| g_{x,y}
| |
| \cos \left[\frac{(2x+1)u\pi}{16} \right]
| |
| \cos \left[\frac{(2y+1)v\pi}{16} \right]
| |
| </math>
| |
| | |
| where
| |
| * <math>\ u</math> is the horizontal [[spatial frequency]], for the integers <math>\ 0 \leq u < 8</math>.
| |
| * <math>\ v</math> is the vertical spatial frequency, for the integers <math>\ 0 \leq v < 8</math>.
| |
| * <math>
| |
| \alpha(u) =
| |
| \begin{cases}
| |
| \frac{1}{\sqrt{2}}, & \mbox{if }u=0 \\
| |
| 1, & \mbox{otherwise}
| |
| \end{cases}
| |
| </math> is a normalizing scale factor to make the transformation [[orthonormal]]
| |
| * <math>\ g_{x,y}</math> is the pixel value at coordinates <math>\ (x,y)</math>
| |
| * <math>\ G_{u,v}</math> is the DCT coefficient at coordinates <math>\ (u,v).</math>
| |
| | |
| If we perform this transformation on our matrix above, we get the following (rounded to the nearest two digits beyond the decimal point):
| |
| | |
| :<math>G=
| |
| \begin{array}{c}
| |
| u \\
| |
| \longrightarrow \\
| |
| \left[
| |
| \begin{array}{rrrrrrrr}
| |
| -415.38 & -30.19 & -61.20 & 27.24 & 56.12 & -20.10 & -2.39 & 0.46 \\
| |
| 4.47 & -21.86 & -60.76 & 10.25 & 13.15 & -7.09 & -8.54 & 4.88 \\
| |
| -46.83 & 7.37 & 77.13 & -24.56 & -28.91 & 9.93 & 5.42 & -5.65 \\
| |
| -48.53 & 12.07 & 34.10 & -14.76 & -10.24 & 6.30 & 1.83 & 1.95 \\
| |
| 12.12 & -6.55 & -13.20 & -3.95 & -1.87 & 1.75 & -2.79 & 3.14 \\
| |
| -7.73 & 2.91 & 2.38 & -5.94 & -2.38 & 0.94 & 4.30 & 1.85 \\
| |
| -1.03 & 0.18 & 0.42 & -2.42 & -0.88 & -3.02 & 4.12 & -0.66 \\
| |
| -0.17 & 0.14 & -1.07 & -4.19 & -1.17 & -0.10 & 0.50 & 1.68
| |
| \end{array}
| |
| \right]
| |
| \end{array}
| |
| \Bigg\downarrow v.
| |
| </math>
| |
| | |
| Note the top-left corner entry with the rather large magnitude. This is the DC coefficient. The remaining 63 coefficients are called the AC coefficients. The advantage of the DCT is its tendency to aggregate most of the signal in one corner of the result, as may be seen above. The quantization step to follow accentuates this effect while simultaneously reducing the overall size of the DCT coefficients, resulting in a signal that is easy to compress efficiently in the entropy stage.
| |
| | |
| The DCT temporarily increases the bit-depth of the data, since the DCT coefficients of an 8-bit/component image take up to 11 or more bits (depending on fidelity of the DCT calculation) to store. This may force the codec to temporarily use 16-bit bins to hold these coefficients, doubling the size of the image representation at this point; they are typically reduced back to 8-bit values by the quantization step. The temporary increase in size at this stage is not a performance concern for most JPEG implementations, because typically only a very small part of the image is stored in full DCT form at any given time during the image encoding or decoding process.
| |
| | |
| ====Quantization====
| |
| The human eye is good at seeing small differences in [[brightness]] over a relatively large area, but not so good at distinguishing the exact strength of a high frequency brightness variation. This allows one to greatly reduce the amount of information in the high frequency components. This is done by simply dividing each component in the frequency domain by a constant for that component, and then rounding to the nearest integer. This rounding operation is the only lossy operation in the whole process (other than chroma subsampling) if the DCT computation is performed with sufficiently high precision. As a result of this, it is typically the case that many of the higher frequency components are rounded to zero, and many of the rest become small positive or negative numbers, which take many fewer bits to represent.
| |
| | |
| The elements in the [[quantization matrix]] control the compression ratio, with larger values producing greater compression. A typical quantization matrix, as specified in the original JPEG Standard, is as follows:
| |
| | |
| :<math>Q=
| |
| \begin{bmatrix}
| |
| 16 & 11 & 10 & 16 & 24 & 40 & 51 & 61 \\
| |
| 12 & 12 & 14 & 19 & 26 & 58 & 60 & 55 \\
| |
| 14 & 13 & 16 & 24 & 40 & 57 & 69 & 56 \\
| |
| 14 & 17 & 22 & 29 & 51 & 87 & 80 & 62 \\
| |
| 18 & 22 & 37 & 56 & 68 & 109 & 103 & 77 \\
| |
| 24 & 35 & 55 & 64 & 81 & 104 & 113 & 92 \\
| |
| 49 & 64 & 78 & 87 & 103 & 121 & 120 & 101 \\
| |
| 72 & 92 & 95 & 98 & 112 & 100 & 103 & 99
| |
| \end{bmatrix}.
| |
| </math>
| |
| | |
| The quantized DCT coefficients are computed with
| |
| | |
| :<math>B_{j,k} = \mathrm{round} \left( \frac{G_{j,k}}{Q_{j,k}} \right) \mbox{ for } j=0,1,2,\ldots,7; k=0,1,2,\ldots,7</math>
| |
| | |
| where <math>G</math> is the unquantized DCT coefficients; <math>Q</math> is the quantization matrix above; and <math>B</math> is the quantized DCT coefficients.
| |
| | |
| Using this quantization matrix with the DCT coefficient matrix from above results in:
| |
| | |
| :<math>B=
| |
| \left[
| |
| \begin{array}{rrrrrrrr}
| |
| -26 & -3 & -6 & 2 & 2 & -1 & 0 & 0 \\
| |
| 0 & -2 & -4 & 1 & 1 & 0 & 0 & 0 \\
| |
| -3 & 1 & 5 & -1 & -1 & 0 & 0 & 0 \\
| |
| -3 & 1 & 2 & -1 & 0 & 0 & 0 & 0 \\
| |
| 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
| |
| 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
| |
| 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
| |
| 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
| |
| \end{array}
| |
| \right].
| |
| </math>
| |
| | |
| For example, using −415 (the DC coefficient) and rounding to the nearest integer
| |
| | |
| :<math>
| |
| \mathrm{round}
| |
| \left(
| |
| \frac{-415.37}{16}
| |
| \right)
| |
| =
| |
| \mathrm{round}
| |
| \left(
| |
| -25.96
| |
| \right)
| |
| =
| |
| -26.
| |
| </math>
| |
| | |
| ====Entropy coding====
| |
| {{Main|Entropy encoding}}
| |
| [[File:JPEG ZigZag.svg|thumb|right|Zigzag ordering of JPEG image components]]
| |
| Entropy coding is a special form of [[lossless data compression]]. It involves arranging the image components in a "[[zigzag]]" order employing [[run-length encoding]] (RLE) algorithm that groups similar frequencies together, inserting length coding zeros, and then using [[Huffman coding]] on what is left.
| |
| | |
| The JPEG standard also allows, but does not require, decoders to support the use of [[arithmetic coding]], which is mathematically superior to Huffman coding. However, this feature has rarely been used as it was historically covered by [[patent]]s requiring royalty-bearing licenses, and because it is slower to encode and decode compared to Huffman coding. Arithmetic coding typically makes files about 5–7% smaller.
| |
| | |
| The previous quantized DC coefficient is used to predict the current quantized DC coefficient. The difference between the two is
| |
| encoded rather than the actual value. The encoding of the 63 quantized AC coefficients does not use such prediction differencing.
| |
| | |
| The zigzag sequence for the above quantized coefficients are shown below.
| |
| (The format shown is just for ease of understanding/viewing.)
| |
| | |
| {| style="text-align: right"
| |
| |-
| |
| |style="width: 2em"| −26 || style="width: 2em"| || style="width: 2em"| || style="width: 2em"| || style="width: 2em"| || style="width: 2em"| || style="width: 2em"| || style="width: 2em"|
| |
| |-
| |
| | −3 || 0
| |
| |-
| |
| | −3 || −2 || −6
| |
| |-
| |
| | 2 || −4 || 1 || −3
| |
| |-
| |
| | 1 || 1 || 5 || 1 || 2
| |
| |-
| |
| | −1 || 1 || −1 || 2 || 0 || 0
| |
| |-
| |
| | 0 || 0 || 0 || -1 || -1 || 0 || 0
| |
| |-
| |
| | 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0
| |
| |-
| |
| | 0 || 0 || 0 || 0 || 0 || 0 || 0
| |
| |-
| |
| | 0 || 0 || 0 || 0 || 0 || 0
| |
| |-
| |
| | 0 || 0 || 0 || 0 || 0
| |
| |-
| |
| | 0 || 0 || 0 || 0
| |
| |-
| |
| | 0 || 0 || 0
| |
| |-e
| |
| | 0 || 0
| |
| |-
| |
| | 0
| |
| |}
| |
| | |
| If the i-th block is represented by <math>B_i</math> and positions within each block are represented by <math>(p,q)</math> where <math>p = 0, 1, ..., 7</math> and <math>q = 0, 1, ..., 7</math>, then any coefficient in the DCT image can be represented as <math>B_i (p,q)</math>. Thus, in the above scheme, the order of encoding pixels (for the <math>i</math>-th block) is <math>B_i (0,0)</math>, <math>B_i (0,1)</math>, <math>B_i (1,0)</math>, <math>B_i (2,0)</math>, <math>B_i (1,1)</math>, <math>B_i (0,2)</math>, <math>B_i (0,3)</math>, <math>B_i (1,2)</math> and so on.
| |
| | |
| [[File:JPEG process.svg|thumb|350px|''Baseline sequential'' JPEG encoding and decoding processes]]
| |
| This encoding mode is called baseline ''sequential'' encoding. Baseline JPEG also supports ''progressive'' encoding. While sequential encoding encodes coefficients of a single block at a time (in a zigzag manner), progressive encoding encodes similar-positioned coefficients of all blocks in one go, followed by the next positioned coefficients of all blocks, and so on. So, if the image is divided into N 8×8 blocks <math>B_0,B_1,B_2, ..., B_{n-1}</math>, then progressive encoding encodes <math>B_i (0,0)</math> for all blocks, i.e., for all <math>i = 0, 1, 2, ..., N-1</math>. This is followed by encoding <math>B_i (0,1)</math> coefficient of all blocks, followed by <math>B_i (1,0)</math>-th coefficient of all blocks, then <math>B_i (2,0)</math>-th coefficient of all blocks, and so on.
| |
| | |
| It should be noted here that once all similar-positioned coefficients have been encoded, the next position to be encoded is the one occurring next in the zigzag traversal as indicated in the figure above. It has been found that Baseline Progressive JPEG encoding usually gives better compression as compared to Baseline Sequential JPEG due to the ability to use different Huffman tables (see below) tailored for different frequencies on each "scan" or "pass" (which includes similar-positioned coefficients), though the difference is not too large.
| |
| | |
| In the rest of the article, it is assumed that the coefficient pattern generated is due to sequential mode.
| |
| | |
| In order to encode the above generated coefficient pattern, JPEG uses Huffman encoding. The JPEG standard provides general-purpose Huffman tables; encoders may also choose to generate Huffman tables optimized for the actual frequency distributions in images being encoded.
| |
| | |
| The process of encoding the zig-zag quantized data begins with a run-length encoding explained below, where
| |
| * <math>x</math> is the non-zero, quantized AC coefficient.
| |
| * ''RUNLENGTH'' is the number of zeroes that came before this non-zero AC coefficient.
| |
| * ''SIZE'' is the number of bits required to represent <math>x</math>.
| |
| * ''AMPLITUDE'' is the bit-representation of <math>x</math>.
| |
| | |
| The run-length encoding works by examining each non-zero AC coefficient <math>x</math> and determining how many zeroes came before the previous AC coefficient. With this information, two symbols are created:
| |
| | |
| {| style="text-align: center"
| |
| |-
| |
| | Symbol 1 || Symbol 2
| |
| |-
| |
| | (RUNLENGTH, SIZE) || (AMPLITUDE)
| |
| |}
| |
| | |
|
| |
| Both ''RUNLENGTH'' and ''SIZE'' rest on the same byte, meaning that each only contains 4-bits of information. The higher bits deal with the number of zeroes, while the lower bits denote the number of bits necessary to encode the value of <math>x</math>.
| |
| | |
| This has the immediate implication of ''Symbol 1'' being only able store information regarding the first 15 zeroes preceding the non-zero AC coefficient. However, JPEG defines two special Huffman code words. One is for ending the sequence prematurely when the remaining coefficients are zero (called "End-of-Block" or "EOB"), and another when the run of zeroes goes beyond 15 before reaching a non-zero AC coefficient. In such a case where 16 zeroes are encountered before a given non-zero AC coefficient, ''Symbol 1'' is encoded "specially" as: (15, 0)(0).
| |
| | |
| The overall process continues until "EOB" - denoted by (0, 0) - is reached.
| |
| | |
| | |
| With this in mind, the sequence from earlier becomes:
| |
| | |
| (0, 2)(-3); (1, 2)(-3); (0, 2)(-2); (0, 3)(-6); (0, 2)(2); (0, 2)(-4); (0, 1)(1); (0, 2)(-3); (0, 1)(1);
| |
| | |
| (0, 1)(1); (0, 3)(5); (0, 1)(1); (0, 2)(2); (0, 1)(-1); (0, 1)(1); (0, 2)(2); (5, 1)(-1); (0, 1)(-1); (0, 0).
| |
| | |
| (The first value in the matrix, -26, is the DC coefficient; it is not encoded the same way. See above.)
| |
| | |
| | |
| From here, frequency calculations are made based on occurrences of the coefficients. In our example block, most of the quantized coefficients are small numbers that are not preceded immediately by a zero coefficient. These more-frequent cases will be represented by shorter code words.
| |
| | |
| ===Compression ratio and artifacts===
| |
| [[File:Lichtenstein jpeg difference.png|256px|thumb|This image shows the pixels that are different between a non-compressed image and the same image JPEG compressed with a quality setting of 50. Darker means a larger difference. Note especially the changes occurring near sharp edges and having a block-like shape.]]
| |
| | |
| [[File:Jpegvergroessert.jpg|thumb|192px|The compressed 8×8-squares are visible in the scaled up picture, together with other visual artifacts of the [[lossy compression]].]]
| |
| | |
| The resulting compression ratio can be varied according to need by being more or less aggressive in the divisors used in the quantization phase. Ten to one compression usually results in an image that cannot be distinguished by eye from the original. 100 to one compression is usually possible, but will look distinctly [[Compression artifact|artifacted]] compared to the original. The appropriate level of compression depends on the use to which the image will be put.
| |
| | |
| {{external media
| |
| |image1=[http://i.cmpnet.com/videsignline/2006/02/algolith-fig2.jpg Illustration of edge busyness].{{dead link|date=September 2012}}<ref name="dinhpatry" />
| |
| }}
| |
| Those who use the [[World Wide Web]] may be familiar with the irregularities known as [[compression artifact]]s that appear in JPEG images, which may take the form of noise around contrasting edges (especially curves and corners), or 'blocky' images. These are due to the quantization step of the JPEG algorithm. They are especially noticeable around sharp corners between contrasting colors (text is a good example as it contains many such corners). The analogous artifacts in [[MPEG]] video are referred to as ''[[mosquito noise]],'' as the resulting "edge busyness" and spurious dots, which change over time, resemble mosquitoes swarming around the object.<ref name="dinhpatry">Phuc-Tue Le Dinh and Jacques Patry. [http://www.videsignline.com/howto/180207350 Video compression artifacts and MPEG noise reduction]. Video Imaging DesignLine. February 24, 2006. Retrieved May 28, 2009.</ref><ref>"'''3.9 mosquito noise:''' Form of edge busyness distortion sometimes associated with movement, characterized by moving artifacts and/or blotchy noise patterns superimposed over the objects (resembling a mosquito flying around a person's head and shoulders)."
| |
| [http://eu.sabotage.org/www/ITU/P/P0930e.pdf ITU-T Rec. P.930 (08/96) Principles of a reference impairment system for video]</ref>
| |
| | |
| These artifacts can be reduced by choosing a lower level of [[image compression|compression]]; they may be eliminated by saving an image using a [[Lossless data compression|lossless]] file format, though for photographic images this will usually result in a larger file size. The images created with [[Ray tracing (graphics)|ray-tracing]] programs have noticeable blocky shapes on the terrain. Certain low-intensity compression artifacts might be acceptable when simply viewing the images, but can be emphasized if the image is subsequently processed, usually resulting in unacceptable quality. Consider the example below, demonstrating the effect of lossy compression on an [[edge detection]] processing step.
| |
| | |
| {| class="wikitable" style="text-align:center"
| |
| |-
| |
| !Image !! Lossless compression !! Lossy compression
| |
| |-
| |
| ! Original
| |
| | [[File:Lossless-circle.png|100px]] || [[File:Lossy-circle.jpg|100px]]
| |
| |-
| |
| ! Processed by<br />[[Canny edge detector]]
| |
| | [[File:Lossless-circle-canny.png|100px]] || [[File:Lossy-circle-canny.png|100px]]
| |
| |}
| |
| | |
| Some programs allow the user to vary the amount by which individual blocks are compressed. Stronger compression is applied to areas of the image that show fewer artifacts. This way it is possible to manually reduce JPEG file size with less loss of quality.
| |
| | |
| JPEG artifacts, like [[pixelation]], are occasionally intentionally exploited for artistic purposes, as in ''Jpegs,'' by German photographer [[Thomas Ruff]].<ref>''jpegs,'' [[Thomas Ruff]], ''Aperture,'' May 31, 2009, 132 pp., ISBN 978-1-59711-093-8</ref><ref>[http://jmcolberg.com/weblog/2009/04/review_jpegs_by_thomas_ruff/ Review: jpegs by Thomas Ruff], by Joerg Colberg, Apr 17, 2009</ref>
| |
| | |
| Since the quantization stage ''always'' results in a loss of information, JPEG standard is always a lossy compression codec. (Information is lost both in quantizing and rounding of the floating-point numbers.) Even if the quantization matrix is a [[matrix of ones]], information will still be lost in the rounding step.
| |
| | |
| ===Decoding===
| |
| Decoding to display the image consists of doing all the above in reverse.
| |
| | |
| Taking the DCT coefficient matrix (after adding the difference of the DC coefficient back in)
| |
| | |
| :<math>
| |
| \left[
| |
| \begin{array}{rrrrrrrr}
| |
| -26 & -3 & -6 & 2 & 2 & -1 & 0 & 0 \\
| |
| 0 & -2 & -4 & 1 & 1 & 0 & 0 & 0 \\
| |
| -3 & 1 & 5 & -1 & -1 & 0 & 0 & 0 \\
| |
| -3 & 1 & 2 & -1 & 0 & 0 & 0 & 0 \\
| |
| 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
| |
| 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
| |
| 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
| |
| 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
| |
| \end{array}
| |
| \right]
| |
| </math>
| |
| | |
| and taking the [[Matrix multiplication#Hadamard product|entry-for-entry product]] with the quantization matrix from above results in
| |
| | |
| :<math>
| |
| \left[
| |
| \begin{array}{rrrrrrrr}
| |
| -416 & -33 & -60 & 32 & 48 & -40 & 0 & 0 \\
| |
| 0 & -24 & -56 & 19 & 26 & 0 & 0 & 0 \\
| |
| -42 & 13 & 80 & -24 & -40 & 0 & 0 & 0 \\
| |
| -42 & 17 & 44 & -29 & 0 & 0 & 0 & 0 \\
| |
| 18 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
| |
| 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
| |
| 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
| |
| 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
| |
| \end{array}
| |
| \right]
| |
| </math>
| |
| | |
| which closely resembles the original DCT coefficient matrix for the top-left portion.
| |
| | |
| The next step is to take the two-dimensional inverse DCT (a 2D type-III DCT), which is given by:
| |
| | |
| <math>f_{x,y} =
| |
| \frac{1}{4}
| |
| \sum_{u=0}^7
| |
| \sum_{v=0}^7
| |
| \alpha(u) \alpha(v) F_{u,v}
| |
| \cos \left[\frac{(2x+1)u\pi}{16} \right]
| |
| \cos \left[\frac{(2y+1)v\pi}{16} \right]
| |
| </math>
| |
| | |
| where
| |
| * <math>\ x</math> is the pixel row, for the integers <math>\ 0 \leq x < 8</math>.
| |
| * <math>\ y</math> is the pixel column, for the integers <math>\ 0 \leq y < 8</math>.
| |
| * <math>\ \alpha(u)</math> is defined as above, for the integers <math>\ 0 \leq u < 8</math>.
| |
| * <math>\ F_{u,v}</math> is the reconstructed approximate coefficient at coordinates <math>\ (u,v).</math>
| |
| * <math>\ f_{x,y}</math> is the reconstructed pixel value at coordinates <math>\ (x,y)</math>
| |
| | |
| Rounding the output to integer values (since the original had integer values) results in an image with values (still shifted down by 128)
| |
| | |
| {{Multiple image|align=right|direction=vertical|image1=JPEG example image.jpg|alt1=|image2=JPEG example image decompressed.jpg|alt2=|width=180|footer=Notice the slight differences between the original (top) and decompressed image (bottom), which is most readily seen in the bottom-left corner.}}
| |
| | |
| :<math>
| |
| \left[
| |
| \begin{array}{rrrrrrrr}
| |
| -66 & -63 & -71 & -68 & -56 & -65 & -68 & -46 \\
| |
| -71 & -73 & -72 & -46 & -20 & -41 & -66 & -57 \\
| |
| -70 & -78 & -68 & -17 & 20 & -14 & -61 & -63 \\
| |
| -63 & -73 & -62 & -8 & 27 & -14 & -60 & -58 \\
| |
| -58 & -65 & -61 & -27 & -6 & -40 & -68 & -50 \\
| |
| -57 & -57 & -64 & -58 & -48 & -66 & -72 & -47 \\
| |
| -53 & -46 & -61 & -74 & -65 & -63 & -62 & -45 \\
| |
| -47 & -34 & -53 & -74 & -60 & -47 & -47 & -41
| |
| \end{array}
| |
| \right]
| |
| </math>
| |
| | |
| and adding 128 to each entry
| |
| | |
| :<math>
| |
| \left[
| |
| \begin{array}{rrrrrrrr}
| |
| 62 & 65 & 57 & 60 & 72 & 63 & 60 & 82 \\
| |
| 57 & 55 & 56 & 82 & 108 & 87 & 62 & 71 \\
| |
| 58 & 50 & 60 & 111 & 148 & 114 & 67 & 65 \\
| |
| 65 & 55 & 66 & 120 & 155 & 114 & 68 & 70 \\
| |
| 70 & 63 & 67 & 101 & 122 & 88 & 60 & 78 \\
| |
| 71 & 71 & 64 & 70 & 80 & 62 & 56 & 81 \\
| |
| 75 & 82 & 67 & 54 & 63 & 65 & 66 & 83 \\
| |
| 81 & 94 & 75 & 54 & 68 & 81 & 81 & 87
| |
| \end{array}
| |
| \right].
| |
| </math>
| |
| | |
| This is the decompressed subimage. In general, the decompression process may produce values outside of the original input range of <math>[0, 255]</math>. If this occurs, the decoder needs to clip the output values keep them within that range to prevent overflow when storing the decompressed image with the original bit depth.
| |
| | |
| The decompressed subimage can be compared to the original subimage (also see images to the right) by taking the difference (original − uncompressed) results in the following error values:
| |
| | |
| :<math>
| |
| \left[
| |
| \begin{array}{rrrrrrrr}
| |
| -10 & -10 & 4 & 6 & -2 & -2 & 4 & -9 \\
| |
| 6 & 4 & -1 & 8 & 1 & -2 & 7 & 1 \\
| |
| 4 & 9 & 8 & 2 & -4 & -10 & -1 & 8 \\
| |
| -2 & 3 & 5 & 2 & -1 & -8 & 2 & -1 \\
| |
| -3 & -2 & 1 & 3 & 4 & 0 & 8 & -8 \\
| |
| 8 & -6 & -4 & -0 & -3 & 6 & 2 & -6 \\
| |
| 10 & -11 & -3 & 5 & -8 & -4 & -1 & -0 \\
| |
| 6 & -15 & -6 & 14 & -3 & -5 & -3 & 7
| |
| \end{array}
| |
| \right]
| |
| </math>
| |
| | |
| with an average absolute error of about 5 values per pixels (i.e., <math>\frac{1}{64} \sum_{x=0}^7 \sum_{y=0}^7 |e(x,y)| = 4.9197</math>).
| |
| | |
| The error is most noticeable in the bottom-left corner where the bottom-left pixel becomes darker than the pixel to its immediate right.
| |
| | |
| ===Required precision===
| |
| The encoding description in the JPEG standard does not fix the precision needed for the output compressed image. However, the JPEG standard (and the similar MPEG standards) includes some precision requirements for the ''de''coding, including all parts of the decoding process (variable length decoding, inverse DCT, dequantization, renormalization of outputs); the output from the reference algorithm must not exceed:
| |
| * a maximum 1 bit of difference for each pixel component
| |
| * low mean square error over each 8×8-pixel block
| |
| * very low mean error over each 8×8-pixel block
| |
| * very low mean square error over the whole image
| |
| * extremely low mean error over the whole image
| |
| These assertions are tested on a large set of randomized input images, to handle the worst cases. The former IEEE 1180–1990 standard contained some similar precision requirements. The precision has a consequence on the implementation of decoders, and it is critical because some encoding processes (notably used for encoding sequences of images like MPEG) need to be able to construct, on the encoder side, a reference decoded image. In order to support 8-bit precision per pixel component output, dequantization and inverse DCT transforms are typically implemented with at least 14-bit precision in optimized decoders.
| |
| | |
| ==Effects of JPEG compression==
| |
| JPEG compression artifacts blend well into photographs with detailed non-uniform textures, allowing higher compression ratios. Notice how a higher compression ratio first affects the high-frequency textures in the upper-left corner of the image, and how the contrasting lines become more fuzzy. The very high compression ratio severely affects the quality of the image, although the overall colors and image form are still recognizable. However, the precision of colors suffer less (for a human eye) than the precision of contours (based on luminance). This justifies the fact that images should be first transformed in a color model separating the luminance from the chromatic information, before subsampling the chromatic planes (which may also use lower quality quantization) in order to preserve the precision of the luminance plane with more information bits.
| |
| | |
| ===Sample photographs===
| |
| For information, the uncompressed 24-bit RGB bitmap image below (73,242 pixels) would require 219,726 bytes (excluding all other information headers). The filesizes indicated below include the internal JPEG information headers and some meta-data.
| |
| For highest quality images (Q=100), about 8.25 bits per color pixel is required. On grayscale images, a minimum of 6.5 bits per pixel is enough (a comparable Q=100 quality color information requires about 25% more encoded bits). The highest quality image below (Q=100) is encoded at 9 bits per color pixel, the medium quality image (Q=25) uses 1 bit per color pixel. For most applications, the quality factor should not go below 0.75 bit per pixel (Q=12.5), as demonstrated by the low quality image. The image at lowest quality uses only 0.13 bit per pixel, and displays very poor color. This is useful when the image will be displayed in a significantly scaled down size.
| |
| | |
| ::{| class="wikitable"
| |
| |+ align="bottom"| Note: The above images are not [[Institute of Electrical and Electronics Engineers|IEEE]] / [[ITU-R|CCIR]] / [[European Broadcasting Union|EBU]] [[standard test image|test images]], and the encoder settings are not specified or available.
| |
| |-
| |
| ! Image !! Quality !! Size (bytes) !! Compression ratio !! Comment
| |
| |-
| |
| | [[File:JPEG example JPG RIP 100.jpg]]
| |
| | Highest quality (Q = 100)
| |
| | 83,261
| |
| | 2.6:1
| |
| | Extremely minor artifacts
| |
| |-
| |
| | [[File:JPEG example JPG RIP 050.jpg]]
| |
| | High quality (Q = 50)
| |
| | 15,138
| |
| | 15:1
| |
| | Initial signs of subimage artifacts
| |
| |-
| |
| | [[File:JPEG example JPG RIP 025.jpg]]
| |
| | Medium quality (Q = 25)
| |
| | 9,553
| |
| | 23:1
| |
| | Stronger artifacts; loss of high frequency information
| |
| |-
| |
| | [[File:JPEG example JPG RIP 010.jpg]]
| |
| | Low quality (Q = 10)
| |
| | 4,787
| |
| | 46:1
| |
| | Severe high frequency loss; artifacts on subimage boundaries ("macroblocking") are obvious
| |
| |-
| |
| | [[File:JPEG example JPG RIP 001.jpg]]
| |
| | Lowest quality (Q = 1)
| |
| | 1,523
| |
| | 144:1
| |
| | Extreme loss of color and detail; the leaves are nearly unrecognizable
| |
| |}
| |
| | |
| The medium quality photo uses only 4.3% of the storage space required for the uncompressed image, but has little noticeable loss of detail or visible artifacts. However, once a certain threshold of compression is passed, compressed images show increasingly visible defects. See the article on [[rate–distortion theory]] for a mathematical explanation of this threshold effect. A particular limitation of JPEG in this regard is its non-overlapped 8×8 block transform structure. More modern designs such as [[JPEG 2000]] and [[JPEG XR]] exhibit a more graceful degradation of quality as the bit usage decreases – by using transforms with a larger spatial extent for the lower frequency coefficients and by using overlapping transform basis functions.
| |
| | |
| ==Lossless further compression==
| |
| From 2004 to 2008, new research has emerged on ways to further compress the data contained in JPEG images without modifying the represented image.<ref name="Bauermann">I. Bauermann and E. Steinbacj. Further Lossless Compression of JPEG Images. Proc. of Picture Coding Symposium (PCS 2004), San Francisco, USA, December 15–17, 2004.</ref><ref name="Ponomarenko">N. Ponomarenko, K. Egiazarian, V. Lukin and J. Astola. Additional Lossless Compression of JPEG Images, Proc. of the 4th Intl. Symposium on Image and Signal Processing and Analysis (ISPA 2005), Zagreb, Croatia, pp.117–120, September 15–17, 2005.</ref><ref name="stirner">M. Stirner and G. Seelmann. Improved Redundancy Reduction for JPEG Files. Proc. of Picture Coding Symposium (PCS 2007), Lisbon, Portugal, November 7–9, 2007</ref><ref name="matsuda">Ichiro Matsuda, Yukio Nomoto, Kei Wakabayashi and Susumu Itoh. Lossless Re-encoding of JPEG images using block-adaptive intra prediction. Proceedings of the 16th European Signal Processing Conference (EUSIPCO 2008).</ref> This has applications in scenarios where the original image is only available in JPEG format, and its size needs to be reduced for archival or transmission. Standard general-purpose compression tools cannot significantly compress JPEG files.
| |
| | |
| Typically, such schemes take advantage of improvements to the naive scheme for coding DCT coefficients, which fails to take into account:
| |
| * Correlations between magnitudes of adjacent coefficients in the same block;
| |
| * Correlations between magnitudes of the same coefficient in adjacent blocks;
| |
| * Correlations between magnitudes of the same coefficient/block in different channels;
| |
| * The DC coefficients when taken together resemble a downscale version of the original image multiplied by a scaling factor. Well-known schemes for [[Lossless compression#Graphics|lossless coding of continuous-tone images]] can be applied, achieving somewhat better compression than the [[Huffman code]]d [[DPCM]] used in JPEG.
| |
| | |
| Some standard but rarely used options already exist in JPEG to improve the efficiency of coding DCT coefficients: the [[arithmetic coding]] option, and the progressive coding option (which produces lower bitrates because values for each coefficient are coded independently, and each coefficient has a significantly different distribution). Modern methods have improved on these techniques by reordering coefficients to group coefficients of larger magnitude together;<ref name="Bauermann" /> using adjacent coefficients and blocks to predict new coefficient values;<ref name="stirner" /> dividing blocks or coefficients up among a small number of independently coded models based on their statistics and adjacent values;<ref name="Ponomarenko" /><ref name="stirner" /> and most recently, by decoding blocks, predicting subsequent blocks in the spatial domain, and then encoding these to generate predictions for DCT coefficients.<ref name="matsuda" />
| |
| | |
| Typically, such methods can compress existing JPEG files between 15 and 25 percent, and for JPEGs compressed at low-quality settings, can produce improvements of up to 65%.<ref name="stirner" /><ref name="matsuda" />
| |
| | |
| A freely available tool called packJPG<ref>{{cite web | url = http://www.elektronik.htw-aalen.de/packjpg/ | title = Latest Binary Releases of packJPG: V2.3a | date = January 3, 2008 }}</ref> is based on the 2007 paper "Improved Redundancy Reduction for JPEG Files."
| |
| | |
| ==Derived formats for stereoscopic 3D==
| |
| | |
| ===JPEG Stereoscopic===
| |
| [[File:JPS-sample.jpg|thumb|An example of a stereoscopic .JPS file]]
| |
| JPEG Stereoscopic (JPS, extension .jps) is a JPEG-based format for [[stereoscopy|stereoscopic]] images.<ref>J. Siragusa, D. C. Swift, [http://vrex.com/developer/sterdesc.pdf “General Purpose Stereoscopic Data Descriptor”], VRex, Inc., Elmsford, New York, USA, 1997.</ref><ref>Tim Kemp, [http://ephehm.com/jps/ JPS files]</ref> It has a range of configurations stored in the JPEG APP3 marker field, but usually contains one image of double width, representing two images of identical size in cross-eyed (i.e. left frame on the right half of the image and vice versa) side-by-side arrangement. This file format can be viewed as a JPEG without any special software, or can be processed for rendering in other modes.
| |
| | |
| ===JPEG Multi-Picture Format===
| |
| <!-- This section is linked from [[MPO]] -->
| |
| JPEG Multi-Picture Format (MPO, extension .mpo) is a JPEG-based format for multi-view images. It contains two or more JPEG files concatenated together.<ref>{{cite web|url=http://www.cipa.jp/english/hyoujunka/kikaku/pdf/DC-007_E.pdf |title=Multi-Picture Format |format=PDF |date= |accessdate=2011-05-29}}</ref><ref>{{citation |url=http://www.mtbs3d.com/phpbb/viewtopic.php?f=3&t=4124&start=15 |title=MPO2Stereo: Convert Fujifilm MPO files to JPEG stereo pairs|author=cybereality|publisher=mtbs3d|accessdate=12 January 2010}}</ref> There are also special EXIF fields describing its purpose. This is used by the [[Fujifilm FinePix Real 3D W1]] camera, [[Panasonic]] [[Lumix]] [[Panasonic Lumix DMC-TZ20|DMC-TZ20]], [[Panasonic Lumix DMC-TZ30|DMC-TZ30]] & DMC-TS4 (FT4), [[Sony]] DSC-HX7V, [[HTC Evo 3D]], the JVC GY-HMZ1U AVCHD/MVC extension camcorder and by the [[Nintendo 3DS]] for its 3D Camera.
| |
| | |
| ==Patent issues==
| |
| In 2002, [[Forgent Networks]] asserted that it owned and would enforce [[patent]] rights on the JPEG technology, arising from a patent that had been filed on October 27, 1986, and granted on October 6, 1987 ({{US patent|4698672}}). The announcement created a furor reminiscent of [[Unisys]]' attempts to assert its rights over the GIF image compression standard.
| |
| | |
| The JPEG committee investigated the patent claims in 2002 and were of the opinion that they were invalidated by [[prior art]].<ref>{{cite web|url=http://www.jpeg.org/newsrel1.html |title=Concerning recent patent claims |publisher=Jpeg.org |date=2002-07-19 |accessdate=2011-05-29}}</ref> Others also concluded that Forgent did not have a patent that covered JPEG.<ref>[http://web.archive.org/web/20040817154508/www.algovision-luratech.com/company/news/patentquarrel.jsp?OnlineShopId=164241031081525276 JPEG and JPEG2000 – Between Patent Quarrel and Change of Technology] (Archive)</ref> Nevertheless, between 2002 and 2004 Forgent was able to obtain about US$105 million by licensing their patent to some 30 companies. In April 2004, Forgent sued 31 other companies to enforce further license payments. In July of the same year, a consortium of 21 large computer companies filed a countersuit, with the goal of invalidating the patent. In addition, Microsoft launched a separate lawsuit against Forgent in April 2005.<ref>{{cite web|title=Graphics patent suit fires back at Microsoft|publisher=CNET News|first=Dawn|last=Kawamoto|date=April 22, 2005|url=http://news.cnet.com/2100-1025_3-5681112.html|accessdate=2009-01-28}}</ref> In February 2006, the [[United States Patent and Trademark Office]] agreed to re-examine Forgent's JPEG patent at the request of the [[Public Patent Foundation]].<ref name="reexam">{{cite web |title=Trademark Office Re-examines Forgent JPEG Patent |publisher=Publish.com |date=February 3, 2006 |url=http://www.publish.com/c/a/Graphics-Tools/Trademark-Office-Reexamines-Forgent-JPEG-Patent/ |accessdate=2009-01-28 }}</ref> On May 26, 2006 the USPTO found the patent invalid based on [[prior art]]. The USPTO also found that Forgent knew about the [[prior art]], and did not tell the Patent Office, making any appeal to reinstate the patent highly unlikely to succeed.<ref>{{cite web |title=USPTO: Broadest Claims Forgent Asserts Against JPEG Standard Invalid |publisher=Groklaw.net |date=May 26, 2006 |url=http://www.groklaw.net/article.php?story=20060526105754880 |accessdate=2007-07-21 }}</ref>
| |
| | |
| Forgent also possesses a similar patent granted by the European Patent Office in 1994, though it is unclear how enforceable it is.<ref name="ep266049">{{cite web|url=http://gauss.ffii.org/PatentView/EP266049 |title=Coding System for Reducing Redundancy |publisher=Gauss.ffii.org |date= |accessdate=2011-05-29}}</ref>
| |
| | |
| As of October 27, 2006, the U.S. patent's 20-year term appears to have expired, and in November 2006, Forgent agreed to abandon enforcement of patent claims against use of the JPEG standard.<ref name="surrendered">{{cite web |title=JPEG Patent Claim Surrendered |publisher=Public Patent Foundation |date=November 2, 2006 |url=http://www.pubpat.org/jpegsurrendered.htm |accessdate=2006-11-03 }}</ref>
| |
| | |
| The JPEG committee has as one of its explicit goals that their standards (in particular their baseline methods) be implementable without payment of license fees, and they have secured appropriate license rights for their upcoming [[JPEG 2000]] standard from over 20 large organizations.
| |
| | |
| Beginning in August 2007, another company, Global Patent Holdings, LLC claimed that its patent ({{US patent|5,253,341}}) issued in 1993, is infringed by the downloading of JPEG images on either a website or through e-mail. If not invalidated, this patent could apply to any website that displays JPEG images. The patent emerged{{Clarify|date=February 2010|reason=how can it emerge in 2007 when a cite below has "In autumn 2000 ..."}} in July 2007 following a seven-year reexamination by the U.S. Patent and Trademark Office in which all of the original claims of the patent were revoked, but an additional claim (claim 17) was confirmed.<ref name="GPHLaw1">[http://www.uspto.gov/web/patents/patog/week30/OG/html/1320-4/US05253341-20070724.html Ex Parte Reexamination Certificate for U.S. Patent No. 5,253,341]{{dead link|date=May 2011}}</ref>
| |
| | |
| In its first two lawsuits following the reexamination, both filed in Chicago, Illinois, Global Patent Holdings sued the Green Bay Packers, CDW, Motorola, Apple, Orbitz, Officemax, Caterpillar, Kraft and Peapod as defendants. A third lawsuit was filed on December 5, 2007 in South Florida against ADT Security Services, AutoNation, Florida Crystals Corp., HearUSA, MovieTickets.com, Ocwen Financial Corp. and Tire Kingdom, and a fourth lawsuit on January 8, 2008 in South Florida against the Boca Raton Resort & Club. A fifth lawsuit was filed against Global Patent Holdings in Nevada. That lawsuit was filed by Zappos.com, Inc., which was allegedly threatened by Global Patent Holdings, and seeks a judicial declaration that the '341 patent is invalid and not infringed.
| |
| | |
| Global Patent Holdings had also used the '341 patent to sue or threaten outspoken critics of broad software patents, including Gregory Aharonian<ref name="GPHLaw2">{{cite web|author=Workgroup |url=http://eupat.ffii.org/pikta/xrani/rozmanith/index.en.html |title=Rozmanith: Using Software Patents to Silence Critics |publisher=Eupat.ffii.org |date= |accessdate=2011-05-29}}</ref> and the anonymous operator of a website blog known as the "Patent Troll Tracker."<ref name="GPHLaw3">{{cite web|url=http://www.law.com/jsp/article.jsp?id=1196762670106 |title=A Bounty of $5,000 to Name Troll Tracker: Ray Niro Wants To Know Who Is saying All Those Nasty Things About Him |publisher=Law.com |date= |accessdate=2011-05-29}}</ref> On December 21, 2007, patent lawyer Vernon Francissen of Chicago asked the U.S. Patent and Trademark Office to reexamine the sole remaining claim of the '341 patent on the basis of new prior art.<ref name="GPHLaw4">{{cite web|last=Reimer |first=Jeremy |url=http://arstechnica.com/news.ars/post/20080205-hunting-trolls-uspto-asked-to-reexamine-broad-image-patent.html |title=Hunting trolls: USPTO asked to reexamine broad image patent |publisher=Arstechnica.com |date=2008-02-05 |accessdate=2011-05-29}}</ref>
| |
| | |
| On March 5, 2008, the U.S. Patent and Trademark Office agreed to reexamine the '341 patent, finding that the new prior art raised substantial new questions regarding the patent's validity.<ref name="GPHLaw11">[[commons:Image:2008-03-05 USPTO Determination Granting Reexam of 5,253,341 C1.pdf|U.S. Patent Office – Granting Reexamination on 5,253,341 C1]]</ref> In light of the reexamination, the accused infringers in four of the five pending lawsuits have filed motions to suspend (stay) their cases until completion of the U.S. Patent and Trademark Office's review of the '341 patent. On April 23, 2008, a judge presiding over the two lawsuits in Chicago, Illinois granted the motions in those cases.<ref name="GPHLaw55">{{cite web|url=http://www.techdirt.com/articles/20080427/143205960.shtml |title=Judge Puts JPEG Patent On Ice |publisher=Techdirt.com |date=2008-04-30 |accessdate=2011-05-29}}</ref> On July 22, 2008, the Patent Office issued the first "Office Action" of the second reexamination, finding the claim invalid based on nineteen separate grounds.<ref name="GPHLaw66">{{cite web|url=http://techdirt.com/articles/20080731/0337491852.shtml |title=JPEG Patent's Single Claim Rejected (And Smacked Down For Good Measure) |publisher=Techdirt.com |date=2008-08-01 |accessdate=2011-05-29}}</ref> On Nov. 24, 2009, a Reexamination Certificate was issued cancelling all claims.
| |
| | |
| Beginning in 2011 and continuing as of early 2013, an entity known as Princeton Digital Image Corporation,<ref name="PDICTroll">{{cite web|author=Workgroup |url=http://www.princetondigitalimage.com/ |title=Princeton Digital Image Corporation Home Page |date= |accessdate=2013-05-01}}</ref> based in Eastern Texas, began suing large numbers of companies for alleged infringement of U.S. Patent No. 4,813,056 ({{US patent|4813056}}). Princeton claims that the JPEG image compression standard infringes the '056 patent and has sued large numbers of websites, retailers, camera and device manufacturers and resellers. The patent was originally owned and assigned to General Electric. The patent expired in December 2007, but Princeton has sued large numbers of companies for "past infringement" of this patent. (Under U.S. patent laws, a patent owner can sue for "past infringement" up to six years before the filing of a lawsuit, so Princeton can theoretically continue suing companies until December 2013.) As of March 2013, Princeton had suits pending in New York and Delaware against more than 55 companies. General Electric's involvement in the suit is unknown, although court records indicate that it assigned the patent to Princeton in 2009 and retains certain rights in the patent.<ref name="PDICTroll2">{{cite web|author=Workgroup |url=http://patentlaw.jmbm.com/2013/04/hps-motion-to-dismiss-for-lack.html/ |title=Article on Princeton Court Ruling Regarding GE License Agreement |date= |accessdate=2013-05-01}}</ref>
| |
| | |
| ==Standards==
| |
| {{Main|Joint Photographic Experts Group#Published Standards}}
| |
| {{Main|Joint Bi-level Image experts Group#Published Standards}}
| |
| Here are some examples of standards created by [[ISO/IEC JTC 1/SC 29|ISO/IEC JTC1 SC29]] Working Group 1 (WG 1), which includes the Joint Photographic Experts Group and Joint Bi-level Image experts Group:
| |
| * JPEG (lossy and lossless): ITU-T T.81, ISO/IEC 10918-1
| |
| * JPEG extensions: ITU-T T.84
| |
| * [[JPEG-LS]] (lossless, improved): ITU-T T.87, ISO/IEC 14495-1
| |
| * [[JBIG]] (lossless, bi-level pictures, fax): ITU-T T.82, ISO/IEC 11544
| |
| * [[JBIG2]] (bi-level pictures): ITU-T T.88, ISO/IEC 14492
| |
| * [[JPEG 2000]]: ITU-T T.800, ISO/IEC 15444-1
| |
| * JPEG 2000 extensions: ITU-T T.801
| |
| * [[JPEG XR]] (formerly called HD Photo prior to standardization) : ITU-T T.832, ISO/IEC 29199-2
| |
| | |
| ==See also==
| |
| * [[C-Cube]] an early implementer of JPEG in chip form
| |
| * [[Comparison of graphics file formats]]
| |
| * [[Comparison of layout engines (graphics)]]
| |
| * [[Deblocking filter (video)]], the similar deblocking methods could be applied to JPEG
| |
| * [[Design rule for Camera File system]] (DCF)
| |
| * [[Exchangeable image file format]] (Exif)
| |
| * [[File extensions]]
| |
| * [[Generation loss]]
| |
| * [[Graphics editing program]]
| |
| * [[Image compression]]
| |
| * [[Image file formats]]
| |
| * [[JPEG 2000]]
| |
| * [[JPEG File Interchange Format]] (JFIF)
| |
| * [[JPEG XR]]
| |
| * [[Lenna]], the traditional standard image used to test image processing algorithms
| |
| * [[Libjpeg]] of Independent JPEG Group
| |
| * [[FELICS|Lossless Image Codec FELICS]]
| |
| * [[Motion JPEG]]
| |
| * [[Progressive Graphics File|PGF]]
| |
| * [[Portable Network Graphics|PNG]]
| |
| * [[WebP]]
| |
| | |
| ==References==
| |
| {{Reflist|colwidth=30em}}
| |
| | |
| ==External links==
| |
| {{Commons category|JPEG}}
| |
| * [http://www.w3.org/Graphics/JPEG/itu-t81.pdf JPEG Standard (JPEG ISO/IEC 10918-1 ITU-T Recommendation T.81)] at W3.org
| |
| * [http://www.jpeg.org/ Official Joint Photographic Experts Group site]
| |
| * [http://www.w3.org/Graphics/JPEG/jfif3.pdf JFIF File Format] at W3.org
| |
| * [http://code.google.com/p/micro-jpeg-visualizer/ JPEG viewer in 250 lines of easy to understand python code]
| |
| * [http://www.wotsit.org/list.asp?page=3&fc=1&search=&al= Wotsit.org's entry] on the JPEG format
| |
| * [http://www.visengi.com/products/jpeg_hardware_encoder Example images over the full range of quantization levels from 1 to 100] at visengi.com
| |
| * [http://code.google.com/p/jpeg-compressor/ Public domain JPEG compressor in a single C++ source file, along with a matching decompressor] at code.google.com
| |
| * [http://l1032265.myweb.hinet.net/huffman.htm Example of .JPG file decoding]
| |
| * [http://opensource.apple.com/source/WebCore/WebCore-1C25/platform/image-decoders/jpeg/ Jpeg Decoder Open Source Code , Copyright (C) 1995–1997, Thomas G. Lane.]
| |
| * [http://developer.download.nvidia.com/GTC/PDF/GTC2012/PresentationPDF/S0273-GTC2012-JPEG-Coding-GPU.pdf JPEG compression and decompression on GPU.]
| |
| | |
| {{Compression formats}}
| |
| {{Graphics file formats}}
| |
| | |
| {{DEFAULTSORT:Jpeg}}
| |
| [[Category:Graphics file formats]]
| |
| [[Category:IEC standards]]
| |
| [[Category:ISO standards]]
| |
| [[Category:ITU-T recommendations]]
| |
| [[Category:Lossy compression algorithms]]
| |
| [[Category:Computer file formats]]
| |
| [[Category:Image compression]]
| |
| [[Category:1992 introductions]]
| |