Suite

Le rapport hauteur/largeur des pixels d'un jeu de données raster est-il toujours 1 : 1 ?

Le rapport hauteur/largeur des pixels d'un jeu de données raster est-il toujours 1 : 1 ?


Lorsque nous parlons de rasters, la résolution spatiale du pixel défini dans un jeu de données raster est-elle toujours fixée à un rapport de 1:1, par exemple, 1m x 1m ?


Les rasters sont essentiellement stockés sous forme de matrices, de sorte que les pixels sont situés dans une grille rectangulaire avec des coordonnées de lignes et de colonnes. A ce stade, ils n'ont pas de taille.

Pour les données géographiques, cette grille est localisée selon un référentiel, à l'aide d'une transformation. La plupart du temps, les données sont rééchantillonnées afin d'aligner la grille avec le système de coordonnées. Ensuite, vous n'avez besoin que d'une simple transformation affine (échelle + décalage) pour passer de la ligne/colonne aux coordonnées réelles. Habituellement, les pixels carrés sont préférés par souci de simplicité (affichage et analyse plus rapides). Cependant, le rééchantillonnage entraîne une perte d'information, surtout si la « structure » des grilles d'entrée et de sortie est très différente. Par conséquent, il est parfois déconseillé de rééchantillonner vos données sur des pixels carrés (ex : image satellite avec un faible angle d'élévation, grille régulière en lat long à haute latitude que l'on souhaite convertir en coordonnées XY) ou encore d'éviter les rééchantillonnages multiples (ex : utiliser la projection à la volée pour visualiser une image d'un autre système de coordonnées). Dans ces cas, vous n'aurez pas un rapport 1:1 (et le rapport pourrait changer au cours de la scène).


Détecter les changements dans le rapport hauteur/largeur d'affichage [fermé]

Vous voulez améliorer cette question ? Mettez à jour la question afin qu'elle soit d'actualité pour Video Production Stack Exchange.

J'aimerais savoir s'il est possible de trouver des horodatages ou des numéros d'image lorsqu'un changement du rapport hauteur/largeur d'affichage se produit dans une vidéo ?

Plus en détail, j'ai enregistré une émission télévisée à partir d'une chaîne SD qui a abouti à un fichier .ts avec une résolution de 720x576 pixels. Comme il s'agit d'un ancien spectacle, le spectacle lui-même a un format d'affichage (DAR) de 4:3. Les publicités sont cependant diffusées avec un DAR de 16:9.

Je me demandais s'il était possible d'extraire les positions de la vidéo où le DAR change puisque j'aimerais utiliser cette information pour détecter les coupures publicitaires ?

J'ai essayé d'utiliser comskip mais il semble qu'il suppose toujours des pixels quadratiques et qu'il ne soit donc pas capable de détecter le changement de rapport d'aspect. D'autres logiciels sont cependant capables de respecter les DAR variables. Par exemple, vlc redimensionne toujours la vidéo en conséquence et projectx affiche également le bon DAR pour les positions respectives dans la vidéo.


6 réponses 6

Chaque programmeur de chaque jeu a-t-il implémenté toutes les différentes API possibles prises en charge par les anciennes cartes graphiques ?

Oui - mais c'est allé encore plus loin que ça. Les premières cartes graphiques n'avaient pratiquement aucun code appelable associé, le concept de "pilotes" n'était pas encore tout à fait devenu une réalité. Il y avait le concept d'un BIOS vidéo, qui étaient des extensions des services vidéo INT 10h BIOS, qui étaient effectivement limités à l'initialisation et à la commutation des modes vidéo.

Au lieu de cela, les cartes graphiques, du moins sous DOS, avaient toutes une mémoire RAM d'affichage mappée, et une documentation complète était disponible sur la manière exacte dont la définition de divers bits dans la RAM d'affichage affecterait les pixels qui apparaissaient à l'écran. Il n'y avait pas d'API de dessin à appeler, si vous vouliez que quelque chose apparaisse à l'écran (que ce soit un pixel, un caractère, une ligne, un cercle, un sprite, etc.), vous écririez le code pour déplacer les octets vers la droite place dans la RAM d'affichage. Des livres entiers ont été écrits sur la façon d'écrire du code efficace pour dessiner des graphiques.

Il y avait des systèmes comme l'interface graphique Borland qui résumaient les primitives de dessin graphique dans une API avec différents pilotes que l'on pouvait appeler pour dessiner des choses sur différentes cartes graphiques. Cependant, ceux-ci étaient généralement plus lents que ce qui serait nécessaire pour créer des jeux de type action.

Un jeu d'action serait généralement optimisé pour un mode d'affichage graphique particulier sur une carte particulière. Par exemple, un mode d'affichage populaire était VGA 640x480 avec 16 couleurs. Cela serait répertorié dans la configuration logicielle requise, et vous deviez disposer du bon matériel pour prendre en charge le jeu. Si vous avez acheté un jeu VGA mais que vous n'aviez qu'une carte EGA, le jeu ne fonctionnerait pas du tout. Comme vous l'avez dit, certains jeux vous demandaient ce que vous aviez et vous deviez savoir quelle était la bonne réponse, sinon le jeu ne fonctionnerait pas.

Au début, vous deviez coder explicitement votre jeu pour chaque carte graphique que vous vouliez prendre en charge : Hercules, CGA, Tandy, EGA, VGA. Il fallait savoir mettre la carte en mode graphique et il fallait connaître l'agencement de la mémoire, la palette, etc. Vous deviez trouver comment éviter le scintillement et comment éviter les déchirures. Vous deviez écrire vos propres routines de dessin au trait et de remplissage, et si vous vouliez de la 3D, vous deviez savoir comment la projeter sur un écran 2D, comment supprimer les lignes cachées, etc.

Plus tard, lorsque les cartes graphiques ont commencé à acquérir des fonctionnalités accélérées, SGI a créé l'API IrisGL, qui deviendra plus tard OpenGL, afin de simplifier le développement de logiciels de CAO (dessin/conception assistée par ordinateur) pour ces cartes graphiques en fournissant une API standard que les fabricants de matériel vidéo pourraient prendre en charge et les développeurs pourraient concevoir leur logiciel contre. OpenGL fournissait l'accès aux fonctionnalités matérielles sous-jacentes, et si une fonctionnalité n'existait pas sur le matériel, OpenGL fournissait une implémentation logicielle.

Le même problème existait dans le développement de jeux. À l'origine, les fabricants de cartes graphiques travaillaient avec les studios de jeux pour créer une version (version) de leur jeu qui serait accélérée par la carte graphique spécifique. Les premiers jeux 3D comme MechWarrior 2 avaient différentes versions pour 3dfx Voodoo, S3 Virge, STB Velocity, etc. C'était un peu le bordel. À peu près à la même époque, Microsoft a créé la bibliothèque DirectX pour Windows qui était similaire à OpenGL. Les fabricants prendraient en charge OpenGL et/ou DirectX, et les studios de jeux qui étaient assez courageux pour abandonner DOS pour Windows en tant que plate-forme pourraient alors programmer pour une ou les deux bibliothèques au lieu de créer une autre version pour chaque carte graphique individuelle qu'ils souhaitaient prendre en charge. Toute différence relativement mineure entre les cartes graphiques pourrait être gérée au moment de l'exécution dans la même version.

Sous DOS, vous aviez un accès direct au matériel, vous avez donc récupéré une bonne source d'informations sur la carte que vous vouliez prendre en charge et vous vous êtes mis à coder vos routines.

Un livre souvent cité comme une bonne source était "Programmer's Guide to the Ega, Vga, and Super Vga Cards", par Richard F. Ferraro. ceux qui l'ont fait.

Une autre source d'informations inestimable était la liste d'interruption de Ralph Brown. Vous pouvez trouver une conversion HTML de la liste ici : http://www.delorie.com/djgpp/doc/rbinter/

L'original était juste composé de (longs) fichiers texte et, si ma mémoire est bonne, il y avait quelques programmes pour naviguer plus facilement, du moins dans les versions ultérieures.

Une autre belle collection d'informations était contenue dans "PC Game Programmer's Encyclopedia", ou PC-GPE une conversion HTML peut être trouvée ici : http://qzx.com/pc-gpe/

Vous aviez au moins trois manières différentes d'interagir avec un élément donné de ports io matériels, d'interruptions et de registres mappés en mémoire. Les cartes graphiques utilisaient les trois.

La situation avec les cartes audio était très similaire.

Une autre chose à considérer est qu'un moniteur CRT analogique était attaché à la carte vidéo. Les plus anciens/moins chers n'étaient capables de se synchroniser qu'avec un ensemble donné de débits verticaux et horizontaux, mais les plus récents/les meilleurs étaient essentiellement capables de se synchroniser avec n'importe quel signal dans une plage donnée. Cela signifie qu'avec les bons paramètres écrits dans les registres de la carte vidéo, vous pouvez créer des résolutions personnalisées (ou étranges).

Les jeux visaient une large compatibilité, ils en utilisaient donc rarement des étranges, alors que dans la démo, c'était assez courant (et les résolutions personnalisées étaient également la norme dans les jeux d'arcade.)

Mais, par exemple, le Mode X était très populaire auprès des jeux !

Il a été popularisé par Michael Abrash sur les pages du Dr. Dobb's Journal, vous avez une résolution de 320x240, ce qui, vu sur un moniteur 4:3, signifiait que les pixels étaient carrés. Ainsi, par exemple, vous pouviez dessiner naïvement des cercles et ils ressembleraient à des cercles en 320x200, ils étaient étirés, car le rapport hauteur/largeur des pixels n'était pas de 1:1, et vous deviez calculer et compenser cela pendant le dessin.

C'était un mode planaire, donc en définissant un registre, vous pouviez décider quels plans recevraient une écriture dans la zone mappée en mémoire. Par exemple, pour une opération de remplissage rapide, vous définiriez tous les plans et une écriture d'un seul octet affecterait quatre pixels (un pour chaque plan). Cela a également permis d'adresser tous les 256 Ko de la mémoire VGA en utilisant seulement un segment de 64 Ko.

Je suis certain qu'il y avait un petit utilitaire qui vous permettait d'explorer les registres VGA, où vous pouviez mettre toutes les valeurs que vous vouliez, et, lorsque vous appliquiez vos paramètres, vous pouviez enfin voir si votre moniteur prenait en charge la sortie résultante. Mais ma mémoire est trop faible en ce moment pour me souvenir du nom ou de l'auteur de ce programme.

Une autre astuce courante consistait à modifier une partie de la palette de couleurs lors du retracement horizontal effectué correctement, vous pourriez avoir plus de 256 couleurs à l'écran. Il n'y avait pas assez de temps pour changer toute la palette sur chaque ligne, il fallait donc être créatif.

(Pendant les retracements verticaux, il y avait assez de temps pour changer chaque couleur, et cela a été fait par exemple pour les effets de fondu d'entrée/de sortie).

(L'astuce de palette la plus populaire était probablement de changer la couleur d'arrière-plan pendant le chargement de la bande sur des machines 8 bits (C64 par exemple).)

Une chose qui est souvent négligée, c'est que la carte VGA était en fait un petit DAC à trois canaux que les créatifs ont trouvé des moyens d'utiliser et d'abuser de cela également.

Dans le même esprit, Tempest for Eliza a utilisé les ondes radio émises par le moniteur pour transmettre un signal radio pouvant être écouté avec une radio AM commune.


Contenu

Modifier l'arrière-plan

La spécification JPEG originale publiée en 1992 implémente les processus de divers documents de recherche et brevets antérieurs cités par le CCITT (maintenant ITU-T, via ITU-T Study Group 16) et le Joint Photographic Experts Group. [1] La base principale de l'algorithme de compression avec perte de JPEG est la transformée en cosinus discrète (DCT), [1] [14] qui a été proposée pour la première fois par Nasir Ahmed comme technique de compression d'image en 1972. [8] [14] Ahmed a développé un algorithme DCT pratique avec T. Natarajan de l'Université d'État du Kansas et KR Rao de l'Université du Texas à Arlington en 1973. [8] Leur article fondateur de 1974 [15] est cité dans la spécification JPEG, ainsi que plusieurs articles de recherche ultérieurs qui travail sur DCT, y compris un article de 1977 de Wen-Hsiung Chen, CH Smith et S.C. Fralick qui ont décrit un algorithme DCT rapide, [1] [16] ainsi qu'un article de 1978 de N.J. Narasinha et S.C. Fralick, et un article de 1984 de B.G. Lee. [1] La spécification cite également un article de 1984 de Wen-Hsiung Chen et W.K. Pratt comme une influence sur son algorithme de quantification, [1] [17] et l'article de David A. Huffman de 1952 pour son algorithme de codage de Huffman. [1]

La spécification JPEG cite des brevets de plusieurs sociétés. Les brevets suivants ont fourni la base de son algorithme de codage arithmétique. [1]

    • Brevet américain 4 652 856 – 4 février 1986 – Kottappuram M. A. Mohiuddin et Jorma J. Rissanen – Code arithmétique multi-alphabet sans multiplication
    • Brevet américain 4 905 297 – 27 février 1990 – G. Langdon, J.L. Mitchell, W.B. Pennebaker et Jorma J. Rissanen – Système de codeur et de décodeur de codage arithmétique
    • Brevet américain 4 935 882 – 19 juin 1990 – W.B. Pennebaker et J.L. Mitchell – Adaptation des probabilités pour les codeurs arithmétiques
    • JP H02202267 (1021672) – 21 janvier 1989 – Toshihiro Kimura, Shigenori Kino, Fumitaka Ono, Masayuki Yoshida – Système de codage
    • JP H03247123 (2-46275) - 26 février 1990 - Fumitaka Ono, Tomohiro Kimura, Masayuki Yoshida et Shigenori Kino - Appareil de codage et méthode de codage

    La spécification JPEG cite également trois autres brevets d'IBM. D'autres sociétés citées comme titulaires de brevets incluent AT&T (deux brevets) et Canon Inc. [1] Absent de la liste est le brevet américain 4 698 672 , déposé par Wen-Hsiung Chen et Daniel J. Klenke de Compression Labs en octobre 1986. Le brevet décrit un algorithme de compression d'image basé sur DCT, et serait plus tard une cause de controverse en 2002 (voir Controverse sur les brevets au dessous de). [18] Cependant, la spécification JPEG citait deux documents de recherche antérieurs de Wen-Hsiung Chen, publiés en 1977 et 1984. [1]

    Norme JPEG Modifier

    "JPEG" signifie Joint Photographic Experts Group, le nom du comité qui a créé la norme JPEG ainsi que d'autres normes de codage d'images fixes. Le "Joint" signifiait ISO TC97 WG8 et CCITT SGVIII. Fondé en 1986, le groupe a développé le standard JPEG à la fin des années 1980. Parmi plusieurs techniques de codage par transformée qu'ils ont examinées, ils ont sélectionné la transformée en cosinus discrète (DCT), car c'était de loin la technique de compression pratique la plus efficace. Le groupe a publié la norme JPEG en 1992. [5]

    En 1987, l'ISO TC 97 est devenu l'ISO/CEI JTC1 et, en 1992, le CCITT est devenu l'UIT-T. Actuellement du côté du JTC1, JPEG est l'un des deux sous-groupes du comité technique mixte ISO/IEC 1, sous-comité 29, groupe de travail 1 (ISO/IEC JTC 1/SC 29/WG 1) – intitulé comme Codage des images fixes. [19] [20] [21] Du côté de l'UIT-T, l'UIT-T SG16 est l'organisme respectif. Le groupe JPEG original a été organisé en 1986, [22] publiant la première norme JPEG en 1992, qui a été approuvée en septembre 1992 comme Recommandation UIT-T T.81 [23] et, en 1994, comme ISO/CEI 10918-1.

    La norme JPEG spécifie le codec, qui définit comment une image est compressée en un flux d'octets et décompressée en une image, mais pas le format de fichier utilisé pour contenir ce flux. [24] Les normes Exif et JFIF définissent les formats de fichiers couramment utilisés pour l'échange d'images compressées JPEG.

    Les normes JPEG sont officiellement nommées comme Technologies de l'information – Compression et codage numériques d'images fixes à tons continus. L'ISO/CEI 10918 comprend les parties suivantes :

    Compression numérique et codage d'images fixes à tons continus – Parties [20] [22] [25]
    Partie Norme ISO/CEI UIT-T Rec. Première date de sortie publique Dernière modification Titre La description
    Partie 1 ISO/CEI 10918-1:1994 T.81 (09/92) 18 sept. 1992 Exigences et directives
    Partie 2 ISO/CEI 10918-2:1995 T.83 (11/94) 11 novembre 1994 Tests de conformité Règles et contrôles de conformité du logiciel (à la partie 1).
    Partie 3 ISO/CEI 10918-3:1997 T.84 (07/96) 3 juillet 1996 1 avr. 1999 Rallonges Ensemble d'extensions pour améliorer la partie 1, y compris le Format de fichier d'échange d'images fixes (SPIFF). [26]
    Partie 4 ISO/CEI 10918-4:1999 T.86 (06/98) 18 juin 1998 29 juin 2012 Enregistrement des profils JPEG, des profils SPIFF, des balises SPIFF, des espaces colorimétriques SPIFF, des marqueurs APPn, des types de compression SPIFF et des autorités d'enregistrement (REGAUT) méthodes pour enregistrer certains des paramètres utilisés pour étendre JPEG
    Partie 5 ISO/CEI 10918-5:2013 T.871 (05/11) 14 mai 2011 Format d'échange de fichiers JPEG (JFIF) Un format populaire qui a été le format de fichier de facto pour les images codées par la norme JPEG. En 2009, le comité JPEG a officiellement créé un groupe ad hoc pour normaliser JFIF en tant que JPEG Part 5. [27]
    Partie 6 ISO/CEI 10918-6:2013 T.872 (06/12) juin 2012 Application aux systèmes d'impression Spécifie un sous-ensemble de fonctionnalités et d'outils d'application pour l'échange d'images codées conformément à la norme ISO/IEC 10918-1 pour l'impression.
    Partie 7 ISO/CEI 10918-7:2019 T.873 (05/19) Mai 2019 Compression numérique et codage d'images fixes à tons continus Fournit un logiciel de référence pour la technologie de codage spécifiée dans la Recommandation UIT-T T.81 – ISO/CEI 10918-1. Bien que les implémentations de référence fournissent également un codeur, les tests de conformité de leur processus de codage dépassent le cadre de la présente Spécification.

    Controverse sur les brevets Modifier

    En 2002, Forgent Networks a affirmé qu'il possédait et ferait respecter les droits de brevet sur la technologie JPEG, résultant d'un brevet déposé le 27 octobre 1986 et accordé le 6 octobre 1987 : le brevet américain 4 698 672 de Compression Labs' Wen- Hsiung Chen et Daniel J. Klenke. [18] [29] Alors que Forgent ne possédait pas de Laboratoires de compression à l'époque, Chen a vendu plus tard les Laboratoires de compression à Forgent, avant que Chen ne travaille pour Cisco. Cela a conduit Forgent à acquérir la propriété du brevet. [18] L'annonce de Forgent en 2002 a créé une fureur rappelant les tentatives d'Unisys de faire valoir ses droits sur la norme de compression d'image GIF.

    Le comité JPEG a enquêté sur les revendications du brevet en 2002 et a estimé qu'elles étaient invalidées par l'art antérieur [30], un point de vue partagé par divers experts. [18] [31] Le brevet décrit un algorithme de compression d'image basé sur la transformée en cosinus discrète (DCT), [18] une technique de compression d'image avec perte issue d'un article de 1974 de Nasir Ahmed, T. Natarajan et K. R. Rao. [1] [14] [15] Wen-Hsiung Chen a développé sa technique DCT, décrivant un algorithme DCT rapide dans un article de 1977 avec C.H. Smith et S.C. Fralick. [16] [18] La spécification JPEG de 1992 cite à la fois l'article d'Ahmed de 1974 et l'article de Chen de 1977 pour son algorithme DCT, ainsi qu'un article de 1984 de Chen et W.K. Pratt pour son algorithme de quantification. [1] [17] Compression Labs a été fondé par Chen et a été la première entreprise à commercialiser la technologie DCT. [32] Au moment où Chen avait déposé son brevet pour un algorithme de compression d'image basé sur DCT avec Klenke en 1986, la plupart de ce qui deviendrait plus tard la norme JPEG avait déjà été formulée dans la littérature antérieure. [18] Le représentant de JPEG, Richard Clark, a également affirmé que Chen lui-même siégeait dans l'un des comités JPEG, mais Forgent a nié cette affirmation. [18]

    Entre 2002 et 2004, Forgent a pu obtenir environ 105 millions de dollars US en licenciant leur brevet à une trentaine d'entreprises. En avril 2004, Forgent a poursuivi 31 autres sociétés pour imposer d'autres paiements de licence. En juillet de la même année, un consortium de 21 grandes sociétés informatiques a déposé une contre-poursuite, dans le but d'invalider le brevet. De plus, Microsoft a lancé un procès séparé contre Forgent en avril 2005. [33] En février 2006, l'Office des brevets et des marques des États-Unis a accepté de réexaminer le brevet JPEG de Forgent à la demande de la Public Patent Foundation. [34] Le 26 mai 2006, l'USPTO a déclaré le brevet invalide sur la base de l'art antérieur. L'USPTO a également constaté que Forgent connaissait l'état de la technique, mais il a intentionnellement évité d'en informer l'Office des brevets. Cela rend tout appel en faveur du rétablissement du brevet hautement improbable. [35]

    Forgent possède également un brevet similaire délivré par l'Office européen des brevets en 1994, bien qu'il ne soit pas clair dans quelle mesure il est exécutoire. [36]

    Le 27 octobre 2006, la durée de 20 ans du brevet américain semble avoir expiré, et en novembre 2006, Forgent a accepté d'abandonner l'application des revendications de brevet contre l'utilisation de la norme JPEG. [37]

    Le comité JPEG a comme l'un de ses objectifs explicites que leurs normes (en particulier leurs méthodes de base) soient implémentables sans paiement de frais de licence, et ils ont obtenu les droits de licence appropriés pour leur norme JPEG 2000 auprès de plus de 20 grandes organisations.

    À partir d'août 2007, une autre société, Global Patent Holdings, LLC a affirmé que son brevet (brevet américain 5 253 341) délivré en 1993 était violé par le téléchargement d'images JPEG sur un site Web ou par courrier électronique. S'il n'est pas invalidé, ce brevet pourrait s'appliquer à tout site Web affichant des images JPEG. Le brevet était en cours de réexamen par l'Office américain des brevets et des marques de 2000 à 2007 en juillet 2007, l'Office des brevets a révoqué toutes les revendications originales du brevet, mais a constaté qu'une revendication supplémentaire proposée par Global Patent Holdings (revendication 17) était valide. [38] Global Patent Holdings a alors déposé un certain nombre de poursuites fondées sur la revendication 17 de son brevet.

    Dans ses deux premières poursuites après le réexamen, toutes deux déposées à Chicago, dans l'Illinois, Global Patent Holdings a poursuivi les Packers de Green Bay, CDW, Motorola, Apple, Orbitz, Officemax, Caterpillar, Kraft et Peapod en tant que défendeurs. Un troisième procès a été déposé le 5 décembre 2007 dans le sud de la Floride contre ADT Security Services, AutoNation, Florida Crystals Corp., HearUSA, MovieTickets.com, Ocwen Financial Corp. et Tire Kingdom, et un quatrième procès le 8 janvier 2008 dans le sud Floride contre le Boca Raton Resort & Club. Une cinquième action en justice a été déposée contre Global Patent Holdings au Nevada. Cette action en justice a été déposée par Zappos.com, Inc., qui aurait été menacée par Global Patent Holdings, et a demandé une déclaration judiciaire selon laquelle le brevet '341 est invalide et non contrefait.

    Global Patent Holdings avait également utilisé le brevet '341 pour poursuivre ou menacer les critiques virulents de larges brevets logiciels, y compris Gregory Aharonian [39] et l'opérateur anonyme d'un blog de site Web connu sous le nom de « Patent Troll Tracker ». [40] Le 21 décembre 2007, l'avocat en brevets Vernon Francissen de Chicago a demandé à l'Office américain des brevets et des marques de réexaminer la seule revendication restante du brevet '341 sur la base d'un nouvel art antérieur. [41]

    Le 5 mars 2008, l'Office américain des brevets et des marques a accepté de réexaminer le brevet '341, estimant que le nouvel art antérieur soulevait de nouvelles questions substantielles concernant la validité du brevet. [42] À la lumière du réexamen, les contrefacteurs accusés dans quatre des cinq poursuites en instance ont déposé des requêtes en suspension (sursis) de leurs affaires jusqu'à l'achèvement de l'examen du brevet '341 par l'Office américain des brevets et des marques. Le 23 avril 2008, un juge présidant les deux procès à Chicago, dans l'Illinois, a accordé les requêtes dans ces affaires. [43] Le 22 juillet 2008, le Bureau des brevets a émis la première « Action du Bureau » du deuxième réexamen, concluant que la revendication était invalide sur la base de dix-neuf motifs distincts. [44] Le 24 novembre 2009, un certificat de réexamen a été délivré annulant toutes les réclamations.

    À partir de 2011 et jusqu'au début de 2013, une entité connue sous le nom de Princeton Digital Image Corporation, [45] basée dans l'est du Texas, a commencé à poursuivre un grand nombre d'entreprises pour violation présumée du brevet américain 4 813 056 . Princeton affirme que la norme de compression d'image JPEG enfreint le brevet '056 et a poursuivi un grand nombre de sites Web, de détaillants, de fabricants et de revendeurs d'appareils photo et d'appareils. Le brevet était à l'origine détenu et cédé à General Electric. Le brevet a expiré en décembre 2007, mais Princeton a poursuivi un grand nombre d'entreprises pour « contrefaçon passée » de ce brevet. (En vertu des lois américaines sur les brevets, un propriétaire de brevet peut poursuivre pour « contrefaçon passée » jusqu'à six ans avant le dépôt d'une action en justice, de sorte que Princeton aurait théoriquement pu continuer à poursuivre les entreprises jusqu'en décembre 2013.) En mars 2013, Princeton avait des poursuites en instance dans New York et Delaware contre plus de 55 entreprises. L'implication de General Electric dans le procès est inconnue, bien que les archives judiciaires indiquent qu'elle a cédé le brevet à Princeton en 2009 et conserve certains droits sur le brevet. [46]

    L'algorithme de compression JPEG fonctionne au mieux sur les photographies et les peintures de scènes réalistes avec des variations douces de tons et de couleurs. Pour l'utilisation du Web, où la réduction de la quantité de données utilisées pour une image est importante pour une présentation réactive, les avantages de la compression JPEG rendent JPEG populaire. JPEG/Exif est également le format le plus courant enregistré par les appareils photo numériques.

    Cependant, JPEG n'est pas bien adapté aux dessins au trait et autres graphiques textuels ou iconiques, où les contrastes nets entre les pixels adjacents peuvent provoquer des artefacts notables. De telles images sont mieux enregistrées dans un format graphique sans perte tel que TIFF, GIF ou PNG. [47] La ​​norme JPEG inclut un mode de codage sans perte, mais ce mode n'est pas pris en charge dans la plupart des produits.

    Comme l'utilisation typique de JPEG est une méthode de compression avec perte, qui réduit la fidélité de l'image, elle est inappropriée pour la reproduction exacte des données d'imagerie (telles que certaines applications d'imagerie scientifique et médicale et certains travaux techniques de traitement d'images).

    JPEG n'est pas non plus bien adapté aux fichiers qui subiront plusieurs modifications, car une certaine qualité d'image est perdue à chaque fois que l'image est recompressée, en particulier si l'image est recadrée ou décalée, ou si les paramètres d'encodage sont modifiés - voir Perte de génération numérique pour plus de détails. Pour éviter la perte d'informations sur l'image lors de l'édition séquentielle et répétitive, la première édition peut être enregistrée dans un format sans perte, puis éditée dans ce format, puis finalement publiée au format JPEG pour la distribution.

    JPEG utilise une forme de compression avec perte basée sur la transformée en cosinus discrète (DCT). Cette opération mathématique convertit chaque image/champ de la source vidéo du domaine spatial (2D) dans le domaine fréquentiel (a.k.a. domaine de transformation). Un modèle perceptif basé vaguement sur le système psychovisuel humain rejette les informations à haute fréquence, c'est-à-dire les transitions nettes d'intensité et de teinte de couleur. Dans le domaine de la transformation, le processus de réduction de l'information est appelé quantification. En termes plus simples, la quantification est une méthode pour réduire de manière optimale une grande échelle de nombres (avec différentes occurrences de chaque nombre) en une plus petite, et le domaine de transformation est une représentation pratique de l'image car les coefficients haute fréquence, qui contribuent moins à l'image globale que d'autres coefficients, sont typiquement de petites valeurs avec une compressibilité élevée. Les coefficients quantifiés sont ensuite séquencés et compressés sans perte dans le flux binaire de sortie. Presque toutes les implémentations logicielles de JPEG permettent à l'utilisateur de contrôler le taux de compression (ainsi que d'autres paramètres facultatifs), permettant à l'utilisateur de troquer la qualité de l'image contre une taille de fichier plus petite. Dans les applications embarquées (telles que miniDV, qui utilise un schéma de compression DCT similaire), les paramètres sont présélectionnés et fixés pour l'application.

    La méthode de compression est généralement avec perte, ce qui signifie que certaines informations de l'image d'origine sont perdues et ne peuvent pas être restaurées, ce qui peut affecter la qualité de l'image. Il existe un mode sans perte facultatif défini dans la norme JPEG. Cependant, ce mode n'est pas largement pris en charge dans les produits.

    Il y a aussi un entrelacé progressive Format JPEG, dans lequel les données sont compressées en plusieurs passes de plus en plus détaillées. Ceci est idéal pour les grandes images qui seront affichées lors du téléchargement via une connexion lente, permettant un aperçu raisonnable après avoir reçu seulement une partie des données. Cependant, la prise en charge des JPEG progressifs n'est pas universelle. Lorsque des JPEG progressifs sont reçus par des programmes qui ne les prennent pas en charge (comme les versions d'Internet Explorer antérieures à Windows 7) [48], le logiciel n'affiche l'image qu'une fois qu'elle a été complètement téléchargée.

    Édition sans perte Modifier

    Un certain nombre de modifications d'une image JPEG peuvent être effectuées sans perte (c'est-à-dire sans recompression ni perte de qualité associée) tant que la taille de l'image est un multiple de 1 bloc MCU (Unité de codage minimum) (généralement 16 pixels dans les deux sens, pour le sous-échantillonnage de chrominance 4:2:0). Les utilitaires qui implémentent cela incluent:

      et son interface graphique, Jpegcrop. en utilisant "JPG Lossless Crop (PlugIn)" et "JPG Lossless Rotation (PlugIn)", qui nécessitent l'installation du plugin JPG_TRANSFORM. en utilisant « Recadrage sans perte dans un fichier » et « Rotation sans perte JPEG ». en utilisant des "transformations sans perte JPEG". prend en charge la rotation sans perte (mais pas le recadrage sans perte) avec son option "Forcer les opérations JPEG sans perte".

    Les blocs peuvent être tournés par incréments de 90 degrés, retournés dans les axes horizontaux, verticaux et diagonaux et déplacés dans l'image. Tous les blocs de l'image d'origine n'ont pas besoin d'être utilisés dans l'image modifiée.

    Les bords supérieur et gauche d'une image JPEG doivent se trouver sur une limite de bloc de 8 × 8 pixels, mais les bords inférieur et droit n'ont pas besoin de le faire. Cela limite la possibilité récolte sans perte opérations, et empêche également les retournements et les rotations d'une image dont le bord inférieur ou droit ne se trouve pas sur une limite de bloc pour tous les canaux (car le bord se retrouverait en haut ou à gauche, où - comme mentionné ci-dessus - une limite de bloc est obligatoire).

    Les rotations où la largeur et la hauteur de l'image ne sont pas un multiple de 8 ou 16 (selon le sous-échantillonnage de la chrominance) ne sont pas sans perte. La rotation d'une telle image provoque un recalcul des blocs ce qui entraîne une perte de qualité. [49]

    Lors de l'utilisation du recadrage sans perte, si le bas ou le côté droit de la zone de recadrage ne se trouve pas sur une limite de bloc, le reste des données des blocs partiellement utilisés sera toujours présent dans le fichier recadré et pourra être récupéré. Il est également possible de transformer entre les formats de base et progressifs sans aucune perte de qualité, puisque la seule différence est l'ordre dans lequel les coefficients sont placés dans le fichier.

    De plus, plusieurs images JPEG peuvent être jointes sans perte, à condition qu'elles aient été enregistrées avec la même qualité et que les bords coïncident avec les limites des blocs.

    Le format de fichier dit « JPEG Interchange Format » (JIF) est spécifié dans l'annexe B de la norme. Cependant, ce format de fichier "pur" est rarement utilisé, principalement en raison de la difficulté de programmer des encodeurs et des décodeurs qui implémentent pleinement tous les aspects de la norme et en raison de certaines lacunes de la norme :

    • Définition de l'espace colorimétrique
    • Enregistrement du sous-échantillonnage des composants
    • Définition du rapport hauteur/largeur des pixels.

    Plusieurs normes supplémentaires ont évolué pour résoudre ces problèmes. Le premier d'entre eux, sorti en 1992, était le JPEG File Interchange Format (ou JFIF), suivi ces dernières années par le format de fichier image échangeable (Exif) et les profils de couleurs ICC. Ces deux formats utilisent la disposition réelle des octets JIF, composée de différents Marqueurs, mais en plus, utiliser l'un des points d'extension de la norme JIF, à savoir le marqueurs d'application: JFIF utilise APP0, tandis qu'Exif utilise APP1. Dans ces segments du fichier qui ont été laissés pour une utilisation future dans la norme JIF et ne sont pas lus par celle-ci, ces normes ajoutent des métadonnées spécifiques.

    Ainsi, à certains égards, JFIF est une version simplifiée de la norme JIF en ce qu'elle spécifie certaines contraintes (comme ne pas autoriser tous les différents modes d'encodage), tandis qu'à d'autres égards, il s'agit d'une extension de JIF en raison de l'ajout métadonnées. La documentation de la norme JFIF originale indique : [50]

    Le format d'échange de fichiers JPEG est un format de fichier minimal qui permet d'échanger des flux de bits JPEG entre une grande variété de plates-formes et d'applications. Ce format minimal n'inclut aucune des fonctionnalités avancées trouvées dans la spécification TIFF JPEG ni dans aucun format de fichier spécifique à une application. Il ne devrait pas non plus, car le seul but de ce format simplifié est de permettre l'échange d'images compressées JPEG.

    Les fichiers image qui utilisent la compression JPEG sont communément appelés "fichiers JPEG" et sont stockés dans des variantes du format d'image JIF. La plupart des appareils de capture d'images (tels que les appareils photo numériques) qui génèrent des fichiers JPEG créent en fait des fichiers au format Exif, le format sur lequel l'industrie de l'appareil photo a normalisé l'échange de métadonnées. D'autre part, comme la norme Exif n'autorise pas les profils de couleurs, la plupart des logiciels de retouche d'images stockent le JPEG au format JFIF et incluent également le segment APP1 du fichier Exif pour inclure les métadonnées de manière presque conforme, la norme JFIF est interprétée quelque peu avec souplesse. [51]

    À proprement parler, les normes JFIF et Exif sont incompatibles, car chacune spécifie que son segment marqueur (APP0 ou APP1, respectivement) apparaît en premier. En pratique, la plupart des fichiers JPEG contiennent un segment marqueur JFIF qui précède l'en-tête Exif. 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 Edit

    The most common filename extensions for files employing JPEG compression are .jpg et .jpeg , though .jpe , .jfif and .jif are also used. It is also possible for JPEG data to be embedded in other file types – 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 Edit

    Many JPEG files embed an ICC color profile (color space). Commonly used color profiles include sRGB and Adobe RGB. Because these color spaces use a non-linear transformation, the dynamic range of an 8-bit JPEG file is about 11 stops see gamma curve.

    A JPEG image consists of a sequence of segments, each beginning with a marqueur, 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 (high then low), 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-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 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).

    Common JPEG markers [52]
    Short name Bytes Payload Nom commentaires
    DONC JE 0xFF, 0xD8 rien Start Of Image
    SOF0 0xFF, 0xC0 variable size Start Of Frame (baseline 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 octets Define Restart Interval Specifies the interval between RSTm markers, in Minimum Coded Units (MCUs). 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.
    TVDm 0xFF, 0xDm (m=0..7) rien Redémarrage 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 three bits of the marker code cycle in value from 0 to 7.
    APPm 0xFF, 0xEm 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 rien End Of Image

    There are other Start Of Frame markers that introduce other kinds of JPEG encodings.

    Since several vendors might use the same APPm 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.

    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:

    1. The representation of the colors in the image is converted to Y′CBCR, consisting of one luma component (Y'), representing brightness, and two chroma components, (CB et CR), representing color. This step is sometimes skipped.
    2. The resolution of the chroma data is reduced, usually by a factor of 2 or 3. This reflects the fact that the eye is less sensitive to fine color details than to fine brightness details.
    3. The image is split into blocks of 8×8 pixels, and for each block, each of the Y, CB, and CR data undergoes the discrete cosine transform (DCT). A DCT is similar to a Fourier transform in the sense that it produces a kind of spatial frequency spectrum.
    4. The amplitudes of the frequency components are 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 [53] ) 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.
    5. 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 Edit

    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 red, green, and blue). This particular option is a lossy data compression method.

    Color space transformation Edit

    First, the image should be converted from RGB into a different color space called Y′CBCR (or, informally, YCbCr). It has three components Y', CB et CR: the Y' component represents the brightness of a pixel, and the CB et CR components represent the chrominance (split into blue and red components). This is basically the same color space as used by digital color television as well as digital video including video DVDs, and is similar to the way color is represented in analog PAL video and MAC (but not by analog NTSC, which uses the YIQ color space). The Y′CBCR 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 Y′CBCR 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, [54] 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 Edit

    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 Y′CBCR 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 4:4:4 (no downsampling), 4:2:2 (reduction by a factor of 2 in the horizontal direction), or (most commonly) 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 Edit

    After subsampling, each 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 macroblocks.

    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 artifacts along the visible part of the border repeating the edge pixels is a common technique that reduces (but does not necessarily completely eliminate) such artifacts, and more sophisticated border filling techniques can also be applied.

    Discrete cosine transform Edit

    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), 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:

    This step results in the following values:

    The next step is to take the two-dimensional DCT, which is given by:

    If we perform this transformation on our matrix above, we get the following (rounded to the nearest two digits beyond the decimal point):

    Note the top-left corner entry with the rather large magnitude. This is the DC coefficient (also called the constant component), which defines the basic hue for the entire block. The remaining 63 coefficients are the AC coefficients (also called the alternating components). [55] 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 numbers to hold these coefficients, doubling the size of the image representation at this point these values 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, since 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 Edit

    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 (for a quality of 50% as specified in the original JPEG Standard), is as follows:

    The quantized DCT coefficients are computed with

    Using this quantization matrix with the DCT coefficient matrix from above results in:

    For example, using −415 (the DC coefficient) and rounding to the nearest integer

    Notice that most of the higher-frequency elements of the sub-block (i.e., those with an X ou alors oui spatial frequency greater than 4) are quantized into zero values.

    Entropy coding Edit

    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 patents 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 is shown below. (The format shown is just for ease of understanding/viewing.)

    −26
    −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
    0 0
    0

    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. Il a été constaté que 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, though encoders may also choose to dynamically generate Huffman tables optimized for the actual frequency distributions in images being encoded.

    The process of encoding the zigzag quantized data begins with a run-length encoding, where:

    • x is the non-zero, quantized AC coefficient.
    • RUNLENGTH is the number of zeroes that came before this non-zero AC coefficient.
    • TAILLE is the number of bits required to represent x .
    • AMPLITUDE is the bit-representation of x .

    The run-length encoding works by examining each non-zero AC coefficient x and determining how many zeroes came before the previous AC coefficient. With this information, two symbols are created:

    Symbol 1 Symbol 2
    (RUNLENGTH, SIZE) (AMPLITUDE)

    Tous les deux RUNLENGTH et TAILLE rest on the same byte, meaning that each only contains four 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 x .

    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 for 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 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:

    (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 Edit

    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. A compression ratio of 100:1 is usually possible, but will look distinctly artifacted compared to the original. The appropriate level of compression depends on the use to which the image will be put.

    Those who use the World Wide Web may be familiar with the irregularities known as compression artifacts 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. [56] [57]

    These artifacts can be reduced by choosing a lower level of compression they may be completely avoided by saving an image using a lossless file format, though this will result in a larger file size. The images created with 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.

    Image Lossless compression Lossy compression
    Original
    Processed by
    Canny edge detector

    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.

    Since the quantization stage toujours 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 Edit

    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)

    and taking the entry-for-entry product with the quantization matrix from above results in

    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:

    Rounding the output to integer values (since the original had integer values) results in an image with values (still shifted down by 128)


    This paper is about the estimation of calibration parameters of images to be used in Structure from Motion (SfM) pipelines and 3D reconstruction from image feature correspondences. It addresses the estimation of calibration parameters when they are not available, so that additional images may be included in the 3D reconstruction and so that the initial model may be closer to the true geometry of the scene. The approach is to take advantage of known calibration information of some of the images, to estimate calibration information of uncalibrated views, calibration information is therefore extended to images where visual features of the same objects are detected. The approach is based on the standard fundamental matrix, and extended versions of the fundamental matrix that embed the radial distortion model, named radial fundamental matrices. It is shown that the distortion model may be extracted from radial fundamental matrices, along with the standard fundamental matrix, and that the focal length may be subsequently estimated from it. By integrating a few of methods, the number of images that can be used in a large scale 3D reconstruction may be augmented and a better geometric model may be reconstructed. With this approach, the initial values of the parameters and the reconstructed geometry are close to the true solution, so that an optimization step may converge without getting stuck in local minima.

    José Henrique Brito is Assistant Professor at the Technology School of the Polytechnic Institute of Cávado and Ave. He graduated in Electrical Engineering and Computers at Instituto Superior Técnico in Lisbon, Portugal in 1999, earned a Masters degree in Computer Graphics and Virtual Environments from the University of Minho, Portugal in 2009 and a Ph.D. also from the University do Minho in 2014. The research focus of his Ph.D. thesis was in computer vision, namely in multiple view geometry and camera calibration. His more recent work and research is in machine learning and object recognition.


    Camera orientation, calibration and inverse perspective with uncertainties: A Bayesian method applied to area estimation from diverse photographs

    Large collections of images have become readily available through modern digital catalogs, from sources as diverse as historical photographs, aerial surveys, or user-contributed pictures. Exploiting the quantitative information present in such wide-ranging collections can greatly benefit studies that follow the evolution of landscape features over decades, such as measuring areas of glaciers to study their shrinking under climate change. However, many available images were taken with low-quality lenses and unknown camera parameters. Useful quantitative data may still be extracted, but it becomes important to both account for imperfect optics, and estimate the uncertainty of the derived quantities. In this paper, we present a method to address both these goals, and apply it to the estimation of the area of a landscape feature traced as a polygon on the image of interest. The technique is based on a Bayesian formulation of the camera calibration problem. First, the probability density function (PDF) of the unknown camera parameters is determined for the image, based on matches between 2D (image) and 3D (world) points together with any available prior information. In a second step, the posterior distribution of the feature area of interest is derived from the PDF of camera parameters. In this step, we also model systematic errors arising in the polygon tracing process, as well as uncertainties in the digital elevation model. The resulting area PDF therefore accounts for most sources of uncertainty. We present validation experiments, and show that the model produces accurate and consistent results. We also demonstrate that in some cases, accounting for optical lens distortions is crucial for accurate area determination with consumer-grade lenses. The technique can be applied to many other types of quantitative features to be extracted from photographs when careful error estimation is important.


    Structure of a Photoshop-style APP13 segment

    The Adobe's Photoshop program, a de-facto standard for image manipulation, uses the APP13 segment for storing non-graphic information, such as layers, paths, IPTC data and more. The unit for this kind of information is called a "resource data block" (because they hold data that was stored in the Macintosh's resource fork in early versions of Photoshop). The content of an APP13 segment is formed by an identifier string (usually "Photoshop 3.000", but also 'Adobe_Photoshop2.5:', used by earlier versions, is accepted in this case some additional undocumented bytes are read (resolution info?) and saved in a root 'Resolution' record) followed by a sequence of resource data blocks a resource block has the following structure:

    (a Pascal string is made up of a single byte, giving the string length, followed by the string itself, padded to make size even including the length byte since the string length is explicit, there is no need of a terminating null character). The signature (type) is usually ƎBIM', but Photoshop used ƎBPS' up to version 3.0, and some rogue program (Adobe PhotoDeluxe?) is using 'PHUT' ("PHotoshop User Tags" ?) for path information (ID=7d0-bb7). Valid Image Resource IDs are listed in the Photoshop-style tags' list section. In general a resource block contains only a few bytes, but there is an important block, the IPTC block, which can be quite large the structure of this block is analysed in more detail in the IPTC data block section.

    The reference document for the Photoshop file format is:

    Another interesting source of information is:

    Structure of an IPTC data block

    An IPTC/NAA resource data block of a Photoshop-style APP13 segment embeds an IPTC stream conforming to the standard defined by the International Press and Telecommunications Council (IPTC) and the Newspaper Association of America (NAA) for exchanging interoperability information related to various news objects. The data part of a resource block, an IPTC stream, is simply a sequence of units called datasets no preamble nor count is present. Each dataset consists of a unique tag header and a data field (the list of valid tags [dataset numbers] can be found in section about IPTC data). A standard tag header is used when the data field size is less than 32768 bytes otherwise, an extended tag header is used. The datasets do not need to show up in numerical order according to their tag. The structure of a dataset is:

    So, standard datasets have a 5 bytes tag header the last two bytes in the header contain the data field length, the most significant bit being always 0. For extended datasets instead, these two bytes contain the length of the (following) data field length, the most significant bit being always 1. The value of the most significant bit thus distinguishes "standard" from "extended" in digital photographies, I assume that the datasets which are actually used (a subset of the standard) are always standard therefore, we likely do not have the IPTC block spanning more than one APP13 segment. The record types defined by the IPTC-NAA standard are the following (but the "pseudo"-standard by Adobe for APP13 IPTC data is restricted to the first application record, 2:xx, and sometimes to the envelope record, 1:xx, I believe, because everything else can be accomodated more simply by other JPEG Segments):

    The reference document for the IPTC standard is:


    JFIF spec

    The JFIF spec describes 3 fields in the JPEG header:

    1. At byte offset 0x0d the "Units" field. This field has a 1 byte length. It can hold 3 values. The values describe "Units of the X and Y densities".
      • 0 , means: "no units, X and Y describe the pixel aspect ratios".
      • 1 , means: "X and Y are dots per inch"
      • 2 , means: "X and Y are dots per cm".
    2. At byte offset 0x0e the "XDensity" field. This field has 2 bytes length. It describes the "Horizontal pixel density".

    At byte offset 0x10 the "YDensity" field. Its length is 2 bytes. It describes the "Vertical pixel density".


    1 réponse 1

    This was slightly too long for a comment, sorry. -)

    Here's some sample code, should be properly commented to help you understand what it does. Had fun writing it.

    What it does, is creating and displaying 6 images (of random noise). There will be 3 different images, each created in two different ways. 4 will use a banded model and 2 interleaved model. For the banded models, it shows how to create them, both using single and multidimensional arrays.

    Here's what the test output looks like:

    PS: Bonus points to anyone who can explain why banded rasters 1 & 2 and 3 & 4 respectively are not equal or of the same type. I think they should be, as interleaved rasters 1 & 2 are equal.


    3 réponses 3

    You are probably doing it wrong. :-)

    . should create an image with an IntegerInterleavedRaster and DataBufferInt (it does for me on OS X, using all my installed Java 6 and 7 JREs). Try printing the raster and the data buffer right after creation. I'm sure it will print what you originally expected.

    Speculative answer below:

    You haven't posted the relevant parts of your code, but I would guess based on the comments that you are a) creating an empty image and assigning it to image , then b) reading another image using ImageIO and assigning the result to image , replacing the previous value of image . The image now has a raster and data buffer of type byte. You then try to cast to int type, and boom.

    Now, it is possible to make ImageIO read into a pre-created BufferedImage , or just specify the type. But this is plugin- and source-specific (ie: there's no guarantee it will support TYPE_INT_RGB ). To query the reader what image layouts it supports, do something like:

    Casting does what it has always done, but I don't think that is your problem here. -)


    1 réponse 1

    Ok, so you're really close. I can't test this right now, but basically what needs to be changed is

    1) You need to apply the same scale to both X and Y, so you need to pick the smaller one (try the bigger one if that doesn't work).

    2) The result will be a bitmap where at least one side is 512px large, the other one will be smaller. So you need to add the padding to fit that side to 512px (equally left and right/top and bottom for centering). In order to do so, you need to create an new bitmap of the desired size:

    3) and lastly depending on what side of the resizedBitmap is 512px you need to draw resizedBitmap to the correct position in outputImage