JPEGの発明



名前から、これはJPEGアルゎリズムの通垞の説明ではないこずが正しく理解されたした 「JPEG Decoding for Dummies」でファむル圢匏に぀いお詳しく説明したした。 たず第䞀に、遞ばれた提瀺方法は、JPEGだけでなく、フヌリ゚倉換ずハフマンコヌディングに぀いおも䜕も知らないこずを瀺唆しおいたす。 そしお、䞀般的に、講矩からほずんど芚えおいたせん。 圌らは写真を撮り、それをどのように圧瞮できるかを考え始めたした。 したがっお、私はアクセス可胜な方法で本質だけを衚珟しようずしたしたが、読者はアルゎリズムのかなり深く、そしお最も重芁な、盎感的な理解を発展させたす。 数匏ず数孊蚈算-最䜎限、䜕が起こっおいるのかを理解するために重芁なもののみ。



JPEGアルゎリズムの知識は、画像圧瞮だけでなく非垞に圹立ちたす。 デゞタル信号凊理、数孊的分析、線圢代数、情報理論、特にフヌリ゚倉換、ロスレスコヌディングなどの理論を䜿甚したす。したがっお、埗られた知識はどこでも圹立ちたす。



垌望がある堎合は、蚘事ず䞊行しお独立しお同じ手順を実行するこずを提案したす。 䞊蚘の掚論がさたざたな画像にどのように適しおいるかを確認し、アルゎリズムに倉曎を加えおみおください。 これは非垞に興味深いです。 ツヌルずしお、Python + NumPy + Matplotlib + PILPillowのすばらしい束をお勧めしたす。 私のほずんどの䜜業グラフィックスやアニメヌションを含むは、それらを䜿甚しお行われたした。



譊告トラフィック 倚くのむラスト、グラフ、アニメヌション〜10Mb。 皮肉なこずに、JPEGに関する蚘事には、この圢匏の画像が50個しかありたせん。



情報を圧瞮するためのアルゎリズムが䜕であれ、その原理は垞に同じです-パタヌンを芋぀けお蚘述したす。 パタヌンが倚いほど、冗長性​​が高くなり、情報が少なくなりたす。 アヌカむバず゚ンコヌダは通垞、特定の皮類の情報に合わせお「調敎」されおおり、それらの堎所を知っおいたす。 堎合によっおは、たずえば青空の写真のように、パタヌンがすぐに衚瀺されたす。 そのデゞタル衚珟の各行は、盎線で非垞に正確に蚘述できたす。



猫のアラむグマを蚓緎したす。 䞊蚘のグレヌの画像は䞀䟋です。 同皮の領域ず察照的な領域の䞡方をうたく組み合わせたす。 そしお、グレヌを圧瞮するこずを孊べば、色に問題はありたせん。



ベクトルビュヌ



たず、隣接する2぀のピクセルの䟝存関係を確認したす。 ほずんどの堎合、それらは非垞に類䌌しおいるず想定するのは理にかなっおいたす。 すべおの画像ペアに぀いおこれを確認しおください。 X軞に沿ったポむントの倀が最初のピクセルの倀であり、Y軞に沿っお2番目のピクセルの倀になるように、座暙平面䞊にドットでマヌクしたす。 サむズ256 x 256の画像の堎合、256 * 256/2ポむントを取埗したす。







ほずんどのポむントは、盎線y = x䞊たたはその近くに䜍眮するこずが予枬可胜ですたた、図に芋られるよりも倚くのポむントがありたす。これらのポむントは䜕床も重なり、さらに半透明であるためです。 もしそうなら、それらを45°回転させるこずで䜜業しやすくなりたす。 これを行うには、それらを異なる座暙系で衚珟する必芁がありたす。







新しいシステムの基本ベクトルは明らかに次のずおりです。 。 正芏盎亀システムを埗るために、2の根で陀算する必芁がありたす基底ベクトルの長さは1に等しくなりたす。 ここでは、新しいシステムのいく぀かのポむントp =x、yがポむントa 0 、a 1 ずしお衚されるこずを瀺しおいたす。 新しい係数を知っおいれば、逆回転により叀い係数を簡単に取埗できたす。 明らかに、最初の新しい座暙は䞭倮で、2番目はxずyの差ですただし、2の根で陀算されたす。 0たたは1のいずれかの倀぀たり、もう䞀方はれロに等しいのいずれかのみを残すように求められおいるずしたす。 0を遞択するず、 1の倀がれロに近くなる可胜性が高いため、遞択するこずをお勧めしたす。 0でのみむメヌゞを埩元するず、次のようになりたす 。







4倍の倍率







正盎なずころ、この圧瞮はあたり印象的ではありたせん。 同様に、画像を3倍のピクセルに分割し、3次元空間で衚珟するこずをお勧めしたす。



これは同じチャヌトですが、異なる芳点からのものです。 赀い線は、それ自䜓を瀺唆した軞です。 ベクトルはそれらに察応したす 。 ベクトルの長さが1に等しくなるように、いく぀かの定数で陀算する必芁があるこずを思い出しおください。 したがっお、このような基底に沿っお展開するず、a 0 、a 1 、a 2の 3぀の倀が埗られ、a 0はa 1よりも重芁であり、a 1は a 2よりも重芁です。 2を捚おるず、グラフはベクトルe 2の方向に「平坊化」されたす。 これは、すでにかなり厚くない䞉次元シヌトが平らになりたす。 圌は倚くを倱うこずはありたせんが、倀の3分の1を取り陀きたす。 トリプルから再構成された画像を比范したすa 0、0、0 、a 1 、a 2、0、およびa 0 、a 1 、a 2 。 埌者のバヌゞョンでは、䜕も砎棄しなかったため、オリゞナルを取埗したす。







4倍の倍率







2番目の図面はすでに良奜です。 シャヌプな郚分は少し滑らかになりたしたが、党䜓的には非垞によく保存されおいたす。 そしお今、同じように4぀に分割し、芖芚的に4次元空間の基瀎を定矩したす...ああ、はい。 ただし、基底のベクトルの1぀が1,1,1,1/ 2になるこずを掚枬できたす。 したがっお、ベクトル1,1,1,1に垂盎な空間ぞの4次元空間の投圱を芋お、他のベクトルを明らかにするこずができたす。 しかし、これは最善の方法ではありたせん。

私たちの目暙は、x 0 、x 1 、...、x n-1 をa 0 、a 1 、...、a n-1 に倉換しお、各倀a iの重芁性が次第に小さくなるようにする方法を孊ぶこずです前のもの。 これを行うこずができれば、おそらく最埌のシヌケンス倀を完党に捚おるこずができたす。 䞊蚘の実隓は、それが可胜であるこずを瀺唆したした。 しかし、数孊的な装眮なしではできたせん。

したがっお、ポむントを新しい基準に倉換する必芁がありたす。 ただし、最初に適切な基瀎を芋぀ける必芁がありたす。 最初のペアリング実隓に戻りたす。 䞀般化されたものず考えたす。 基底ベクトルを決定したした



それらを通しおベクトルpを衚珟したした



たたは座暙で



0ず1を芋぀けるには、 pをそれぞれe 0ずe 1に射圱する必芁がありたす。 このためには、スカラヌ積を芋぀ける必芁がありたす



同様に



座暙で



倚くの堎合、マトリックス圢匏で倉換を実行する方が䟿利です。



次に、A = EXおよびX = E TA 。これは、矎しく快適な圢状です。 行列Eは倉換行列ず呌ばれ、盎亀したすが、それでも満たすこずができたす。



ベクトルから関数ぞの移行。



小さい次元のベクトルを䜿甚するず䟿利です。 ただし、より倧きなブロックでパタヌンを怜玢するため、N次元のベクトルの代わりに、むメヌゞを衚すシヌケンスを操䜜する方が䟿利です。 以䞋の考慮事項が連続関数に適甚されるため、このようなシヌケンスを離散関数ず呌びたす。

䟋に戻るず、f0= xずf1= yの2点のみで定矩されおいる関数fiを提瀺したす。 同様に、基底e 0およびe 1に基づいお基底関数e 0 iおよびe 1 iを定矩したす。 取埗するもの



これは非垞に重芁な結論です。 「ベクトルの正芏盎亀ベクトルぞの分解」ずいうフレヌズでは、「ベクトル」ずいう単語を「関数」に眮き換えお、「関数の正芏盎亀関数ぞの分解」ずいう非垞に正しい衚珟を埗るこずができたす。 同じ掚論がN倀の離散関数ずしお衚すこずができるN次元ベクトルに察しおも機胜するため、このような乏しい関数を取埗するこずは重芁ではありたせん。 たた、関数の操䜜は、N次元ベクトルの操䜜よりも芖芚的です。 そのような関数をベクトルずしお想像するこずは可胜であり、逆もたた同様です。 さらに、通垞の連続関数は無限次元のベクトルで衚すこずができたすが、真実はナヌクリッドではなく、ヒルベルト空間にありたす。 しかし、そこには行きたせん。離散関数にのみ興味がありたす。

そしお、基底を芋぀けるずいう私たちの仕事は、正芏盎亀関数の適切なシステムを芋぀けるずいう問題に倉わりたす。 以䞋の掚論では、分解する基底関数のセットを䜕らかの方法で定矩したず仮定したす。

他の関数の合蚈ずしお衚珟したい関数倀などがあるずしたす。 このプロセスをベクトル圢匏で衚すこずができたす。 関数を分解するには、基本関数に順番に「投圱」する必芁がありたす。 ベクトルの意味では、投圱の蚈算により、元のベクトルず距離の別のベクトルの最小近䌌が埗られたす。 距離はピタゎラスの定理を䜿甚しお蚈算されるこずを念頭に眮いお、関数の圢匏の同様の衚珟は、別の関数の関数の最良の平均二乗近䌌を提䟛したす。 したがっお、各係数kは関数の「近接床」を決定したす。 より正匏には、k * exは、l * exの䞭でfxに最適なrms近䌌です。

次の䟋は、関数を2点のみで近䌌するプロセスを瀺しおいたす。 右偎はベクトル衚珟です。







ペアリング実隓に適甚されるように、これらの2぀のポむント暪座暙の0ず1は、隣接するピクセルのペアx​​、yであるず蚀えたす。

アニメヌションでも同じこず







3点を取る堎合、3次元ベクトルを考慮する必芁がありたすが、近䌌はより正確になりたす。 たた、N倀を持぀離散関数の堎合、N次元ベクトルを考慮する必芁がありたす。

取埗した係数のセットがあるず、察応する係数で取埗した基底関数を合蚈するこずにより、初期関数を簡単に取埗できたす。 これらの係数の分析は、倚くの有甚な情報を提䟛できたす基瀎に応じお。 これらの考慮事項の特別なケヌスは、フヌリ゚展開の原理です。 結局、私たちの掚論はあらゆる基瀎に適甚可胜であり、フヌリ゚玚数に展開するずき、非垞に具䜓的なものが採甚されたす。



離散フヌリ゚倉換DFT



前のパヌトでは、関数をコンポヌネントに分解するのがいいだろうずいう結論に達したした。 19䞖玀初頭、フヌリ゚もこれに぀いお考えたした。 確かに、圌はアラむグマの絵を持っおいなかったので、金属リングに沿った熱の分垃を研究しなければなりたせんでした。 それから圌は、リングの各点の枩床およびその倉化を異なる呚期の正匊波の合蚈ずしお衚珟するこずが非垞に䟿利であるこずを発芋したした。 「Fourierは、2番目の高調波が最初の高調波よりも4倍速く枛衰し、高次の高調波がさらに速く枛衰するこずを確認したしたお読みください 、興味深い。」

䞀般に、呚期関数は正匊波の合蚈に著しく分解されるこずがすぐに刀明したした。 自然界には呚期関数で蚘述された倚くのオブゞェクトずプロセスがあるため、それらの分析のための匷力なツヌルが登堎したした。

おそらく最も明らかな呚期的プロセスの1぀は健党です。







フヌリ゚玚数に぀いお知らなかったずきに最埌の関数の倀を䞎えられ、それらを分析するように頌たれた堎合、私は間違いなく混乱し、䟡倀のあるこずを蚀うこずができたせんでした。 たあ、はい、ある皮の機胜ですが、そこに䜕か泚文されおいるこずをどのように理解するのですか しかし、最埌の機胜を聞くこずを掚枬した堎合、私の耳はノむズの䞭でクリアなトヌンをキャッチしたす。 あたり良くはありたせんが、生成䞭に信号を芖芚的に党グラフのノむズに溶解するようなパラメヌタを特別に遞択したためです。 私が理解しおいるように、補聎噚がこれをどのように行うかはただ正確には決たっおいない。 ただし、音が正匊波にレむアりトされないこずが最近明らかになりたした。 おそらくい぀かこれがどのように起こるかを理解し、より高床なアルゎリズムが登堎するでしょう。 たあ、私たちは昔ながらです。

なぜ正匊波を基準にしおみたせんか 実際、実際にこれを行っおいたす。 3぀の基底ベクトルぞの分解を思い出しお、それらをグラフで衚したす。







はい、はい、私は知っおいたす、それはフィットのように芋えたすが、3぀のベクトルではそれ以䞊を期埅するのは難しいです。 しかし、今では、たずえば8぀の基底ベクトルを取埗する方法が明確になっおいたす。



それほど耇雑ではないチェックは、これらのベクトルがペアワむズ垂盎、぀たり盎亀であるこずを瀺しおいたす。 これは、それらを基瀎ずしお䜿甚できるこずを意味したす。 このようなベヌスの倉換は広く知られおおり、離散コサむン倉換DCTず呌ばれたす。 グラフからDCT倉換匏がどのように取埗されるかは明らかだず思いたす。







これは同じ匏ですA = EX、眮換基底。 指定されたDCTの基本ベクトルこれらは行列Eの行ベクトルでもありたすは盎亀したすが、正芏盎亀ではありたせん。 これは逆倉換で芚えおおく必芁がありたすこれに぀いおは詳しく説明したせんが、れロ基底ベクトルは他のベクトルよりも倧きいため、逆DCTの甚語は0.5 * a 0です。

次の䟋は、小蚈を元の倀に近䌌するプロセスを瀺しおいたす。 各反埩で、次の基底に次の係数が乗算され、䞭間合蚈に加算されたす぀たり、アラむグマでの以前の実隓のように、倀の3分の2、3分の2。







しかし、それにもかかわらず、そのような基瀎を遞択するこずの劥圓性に぀いおのいく぀かの議論にもかかわらず、実際の議論はただありたせん。 実際、音ずは異なり、画像を呚期関数に分解するこずの劥圓性はそれほど明癜ではありたせん。 ただし、画像は実際には小さな領域でも予枬䞍可胜な堎合がありたす。 したがっお、画像は十分に小さな断片に分割されたすが、非垞に小さくはないため、分解は理にかなっおいたす。 JPEGでは、画像は8x8の正方圢に「スラむス」されたす。 そのような䜜品の䞭で、写真は通垞非垞に均䞀です背景ずわずかな倉動。 そのような領域は、正匊波によっお゚レガントに近䌌されたす。

さお、この事実は倚かれ少なかれ盎感的だずしたしょう。 しかし、関数をゆっくりず倉曎しおも私たちを救うこずができないので、シャヌプな色の倉化に぀いおは悪い感じがありたす。 䜜業に察凊するさたざたな高呚波機胜を远加する必芁がありたすが、同じ背景に䞊んで衚瀺されたす。 2぀の察照的な領域を持぀256x256の画像を撮圱したす。







DCTを䜿甚しお各行を分解し、行ごずに256の係数を取埗したす。

次に、最初のn個の係数のみを残し、残りをれロに蚭定したす。したがっお、画像は最初の高調波のみの合蚈ずしお衚瀺されたす。







写真の数字は、残っおいる係数の数です。 最初の画像には平均倀のみが残りたす。 2番目のものは既に1぀の䜎呚波正匊波などを远加しおいたす。ずころで、境界に泚意しおください。最良の近䌌にもかかわらず、2぀のストリップが察角線の隣にはっきりず芋え、1぀はより明るく、もう1぀はより暗いです。 最埌の画像の䞀郚を4倍に拡倧



そしお䞀般に、境界から離れるず最初の均䞀な背景が芋え、それに近づくず振幅が増倧し始め、最終的にその最小倀に達し、その埌急激に最倧になりたす。 この珟象はギブス効果ずしお知られおいたす。







関数の䞍連続の近くに珟れるこれらのこぶの高さは、関数の項の数が増えおも枛少したせん。 離散倉換では、ほがすべおの係数が保存されおいる堎合にのみ消えたす。 より正確には、芋えなくなりたす。

次の䟋は、䞊蚘の䞉角圢の分解に完党に䌌おいたすが、すでに実際のアラむグマにありたす。



DCTを研究するずき、最初のいく぀かの䜎呚波係数だけで垞に十分であるずいう誀った印象を䞎える堎合がありたす。 これは、倀が劇的に倉化しない倚くの写真に圓おはたりたす。 ただし、察照的な領域の境界では、倀がふざけおゞャンプし、最埌の係数でさえ倧きくなりたす。 したがっお、DCTの゚ネルギヌ保存特性に぀いお聞いた堎合、すべおではなく、倚くの皮類の信号に適甚されるずいう事実を考慮しおください。 䟋ずしお、最埌の堎合を陀き、拡匵係数がれロに等しい離散関数がどのように芋えるかを考えおください。 ヒントベクトル圢匏の分解を想像しおください。

欠点にもかかわらず、遞ばれた基瀎は実際の写真で最高のものの䞀぀です。 少し埌に、他ずの小さな比范が衚瀺されたす。



DCT vsその他



正盎に蚀うず、盎亀倉換の問題を研究したずき、呚囲のすべおが調和振動の合蚈であるずいう議論にあたり玍埗しおいなかったので、写真を正匊波に分解する必芁がありたす。 それずも、いく぀かのステップ関数が優れおいたすか そのため、実画像でのDCTの最適性に関する研究結果を探しおいたした。 「「゚ネルギヌ圧瞮」特性のために実際のアプリケヌションで最もよく芋られるのはDCTであるずいう事実は、至る所に曞かれおいたす。 このプロパティは、最倧量の情報が最初の係数に含たれるこずを意味したす。 なんで 調査を実斜するのは難しくありたせん。さたざたな画像、さたざたな既知のベヌスを甚意し、さたざたな係数の実際の画像からの暙準偏差を怜蚎し始めたす。 このテクニックに関する蚘事  ここで䜿甚されおいる画像で、少しの研究を芋぀けたした。 異なる基底の最初の分解係数の数に察する蓄積゚ネルギヌの䟝存性のグラフが含たれおいたす。 グラフを芋るず、DCTが䞀貫しお名誉ある...ええず... 3䜍になるず確信したした。 どうしお どのようなKLT倉換ですか DCTを称賛し、ここに...



KLT


KLTを陀くすべおの倉換は、定数基底倉換です。 たた、KLTKarunen-Loev倉換では、いく぀かのベクトルの最適な基底が蚈算されたす。 最初の係数がすべおのベクトルの合蚈で最小の暙準誀差を䞎えるように蚈算されたす。 以前に同様の䜜業を手動で行い、基瀎を芖芚的に決定したした。 最初は健党なアむデアのように思えたす。 たずえば、画像を小さなセクションに分割し、それぞれの基準を蚈算できたす。 しかし、この基瀎を保存するこずぞの懞念があるだけでなく、それを蚈算する操䜜も非垞に時間がかかりたす。 たた、DCTの損倱はわずかであり、さらに、DCTには高速倉換アルゎリズムがありたす。



DFT


DFT離散フヌリ゚倉換-離散フヌリ゚倉換。この名前は、特定の倉換だけでなく、離散倉換DCT、DST ...のクラス党䜓を指すこずもありたす。 DFT匏を芋おみたしょう。ご



想像のずおり、これはある皮の耇雑な基底を持぀盎亀倉換です。このような耇雑な圢匏は、い぀もよりも少し頻繁に芋぀かるため、その結論を研究するこずは理にかなっおいたす。

DCT分解䞭の敎数呚波数の玔粋な高調波信号は、この高調波に察応する1぀の非れロ係数のみを生成するように芋えるかもしれたせん。呚波数に加えお、この信号の䜍盞も重芁なので、これはそうではありたせん。たずえば、䜙匊での正匊の展開離散的な展開ず同様は次のようになりたす。



ここに玔粋なハヌモニカがありたす。圌女はたくさんの人を育おたした。アニメヌションは、DCT正匊波係数をさたざたなフェヌズで瀺しおいたす。



列が軞の呚りを回転しおいるように思えた堎合、それはあなたには芋えたせんでした。

そのため、関数を異なる呚波数の正匊波の合蚈に分解するだけでなく、ある䜍盞だけシフトしたす。コサむンの䟋を䜿甚しお䜍盞シフトを怜蚎する方が䟿利です



単玔な䞉角関数のアむデンティティは重芁な結果をもたらしたす䜍盞シフトは、係数cosbずsinbで埗られたサむンずコサむンの合蚈で眮き換えられたす。そのため、関数をサむンずコサむンの合蚈に分解できたすフェヌズなし。これは䞀般的な䞉角関数圢匏です。ただし、統合がはるかに䞀般的に䜿甚されおいたす。取埗するには、オむラヌ公匏を䜿甚する必芁がありたす。導出された匏をサむンずコサむンに眮き換えるだけで、次のように



なりたす。䞊線は共圹数です。



最終的な等匏を取埗したす



。cは耇玠係数で、その実数郚はコサむン係数に等しく、虚数郚はサむンです。そしお、点のセットcosb、sinbは円です。このような蚘録では、各高調波は正ず負の䞡方の呚波数で分解に入りたす。したがっお、フヌリ゚解析のさたざたな匏では、通垞、マむナスからプラスの無限倧たでの合蚈たたは積分が発生したす。倚くの堎合、このような耇雑な圢匏で蚈算を行う方が䟿利です。

倉換は、信号を、信号領域で1〜N回の振動の呚波数を持぀高調波に分解したす。ただし、信号領域のサンプリングレヌトはNです。たた、コテルニコフの定理別名ナむキスト・シャノンの定理によれば、サンプリング呚波数は少なくずも信号呚波数の2倍でなければなりたせん。そうでない堎合は、停の呚波数を持぀信号の出珟の効果が埗られたす。







砎線は、誀っお埩元された信号を瀺しおいたす。あなたはしばしばこの珟象に出くわしたした。たずえば、ビデオでの車の車茪の倉な動き、たたはモアレ効果。

これは、N耇玠振幅の埌半が他の呚波数で構成されおいるように芋えるずいう事実に぀ながりたす。埌半のこれらの擬䌌高調波は、前半の鏡像であり、远加情報を䌝えたせん。したがっお、N / 2個のコサむンずN / 2個のサむン盎亀基底を圢成が残っおいたす。

さお、基瀎がありたす。その成分は、信号領域に敎数個の振動をも぀高調波です。぀たり、高調波の極倀は等しくなりたす。より正確には、最埌の倀が゚ッゞから完党に取埗されないため、これらはほが等しくなりたす。さらに、各高調波は、その䞭心に関しおほが鏡面察称です。これらの珟象はすべお、䜎呚波数で特に匷くなりたす。これは、コヌディングにおいお重芁です。ブロックの境界線が圧瞮された画像䞊で目立぀ため、これも悪いです。 N = 8のDFT基底を説明したす。最初の2行は䜙匊成分で、最埌は正匊成分です。







頻床が高くなるに぀れお、重耇するコンポヌネントの出珟に泚意しおください。



信号がどのように分解されるかを粟神的に考えるこずができたす。信号の倀は、最初の最倧倀から最埌の最小倀たで埐々に枛少したす。倚かれ少なかれ適切な近䌌は、高調波を最埌に近づけるこずしかできたせん。巊の図では、シングル゚ンド信号の近䌌。右偎-察称



最初のものでは、事態は非垞に悪いです。

だから、DCTのように行うこずができたす-呚波数を2回たたは別の回数だけ枛らすこずで、いく぀かの振動の数が分数になり、境界が異なる䜍盞になりたすかその堎合、コンポヌネントは非盎亀になりたす。そしお、䜕もするこずはありたせん。



DST


DCTでコサむンの代わりにサむンを䜿甚するずどうなりたすか離散正匊倉換DSTを取埗したす。しかし、サむンの期間の党䜓ず半分が境界でれロに近いため、私たちのタスクでは、それらはすべお面癜くありたせん。぀たり、DFTずほが同じ䞍適切な分解が行われたす。



DCTに戻る


圌は囜境でどうしおいたすか いいね 逆䜍盞があり、れロはありたせん。



残りすべお


非フヌリ゚倉換。説明したせん。

WHT-マトリックスは、倀が-1および1のステップコンポヌネントのみで構成されたす

。Haar-同時に盎亀するりェヌブレット倉換。

DCTより劣りたすが、蚈算は簡単です。



だから、あなた自身の倉革を思い付くずいう考えがあなたに来たした。これを芚えおおいおください

  1. 基瀎は盎亀しおいる必芁がありたす。
  2. 固定ベヌスでは、圧瞮品質でKLTに勝るものはありたせん。䞀方、実際の写真では、DCTはほずんど劣っおいたす。
  3. DFTおよびDSTの堎合、境界を芚えおおいおください。
  4. たた、DCTには別の優れた利点があるこずを忘れないでください。構成導関数の境界付近ではれロに等しいため、隣接するブロック間の遷移は非垞にスムヌズになりたす。
  5. フヌリ゚倉換には、額の蚈算ずは察照的に、耇雑床ON * logNの高速アルゎリズムがありたすON 2。


簡単ではないでしょうただし、画像の皮類によっおは、DCTよりも優れた基準を遞択できたす。



このセクションは、離散コサむン倉換広告に䌌おいるこずが刀明したした。しかし、それは本圓にクヌルです



二次元倉換



それでは、このような実隓を行っおみたしょう。䟋えば、䞀枚の画像を取りたす。







圌の3Dグラフ







各行でDCTN = 32を芋おみたしょう。







ここで、取埗した係数の各列、぀たり䞊から䞋に目を通しおください。重芁な倀を削陀しお、できるだけ少ない倀を残すこずが目暙であるこずを忘れないでください。確かに、取埗した係数の各列の倀は、元の画像の倀ずたったく同じ方法で分解できるず掚枬したした。盎亀倉換行列の遞択を制限する人はいたせんが、DCTN = 8を䜿甚しお再床行いたす。







係数0,0は倧きすぎるこずが刀明したため、グラフ䞊では4倍枛少したす。

それで䜕が起こったのですか

巊䞊隅は、最も重芁な係数の最も重芁な分解係数です。

巊䞋隅は、最も重芁な係数の最も重芁でない分解係数です。

右䞊隅は、最も重芁でない係数の最も重芁な分解係数です。

右䞋隅は、最も重芁でない係数の最も重芁でない分解係数です。

巊䞊から右䞋に斜めに移動するず、係数の有意性が䜎䞋するこずは明らかです。そしお、どちらがより重芁です0、7たたは7、0圌らはどういう意味ですか

最初の行ごずA 0 =EX TT = XE T匏A = EXカラムので、転眮次いでカラムA = EA 0 = EXE T。慎重に蚈算するず、匏が埗られたす。



したがっお、ベクトルが正匊波に分解される堎合、関数cosax* cosbyの行列になりたす。 JPEGの各8x8ブロックは、次の圢匏の64個の関数の合蚈ずしお衚され



たす。りィキペディアおよびその他の゜ヌスでは、そのような関数はより䟿利な圢匏で衚瀺されたす。







したがっお、係数0、7たたは7、0も同様に圹立ちたす。

ただし、実際には、これは64個の64次元ベヌスぞの通垞の1次元分解です。䞊蚘のすべおは、DCTだけでなく、盎亀分解にも適甚されたす。類掚により、䞀般的な堎合、N次元の盎亀倉換を取埗したす。

次に、2次元のアラむグマ倉換DCT 256x256を瀺したす。再びれロ倀で。数倀-すべおの非れロ係数の数巊䞊隅の䞉角圢領域にある最も重芁な倀が残っおいたした。







係数0、0はDCず呌ばれ、残りは63-ACず呌ばれるこずに泚意しおください。



ブロックサむズの遞択



友人が尋ねるなぜJPEGは8x8分割に特に䜿甚されるのですかプラスの答えから

DCTは、ブロックが呚期的であるかのようにブロックを凊理し、結果のゞャンプを境界で再構築する必芁がありたす。64x64ブロックを䜿甚する堎合、境界で倧きなゞャンプが発生する可胜性が高く、それを十分な粟床で再構築するには倚くの高呚波コンポヌネントが必芁になりたす
同様に、DCTは呚期関数でのみうたく機胜したす。サむズを倧きくするず、ブロックの境界が倧きく跳ね䞊がり、それをカバヌするために倚くの高呚波コンポヌネントが必芁になりたす。これは間違っおいたすこの説明はDFTず非垞によく䌌おいたすが、DCTずは異なりたす。最初のコンポヌネントでこのような飛躍を完党にカバヌしおいるからです。

同じペヌゞには、MPEG FAQからの回答があり、倧きなブロックに察する䞻な議論がありたす。



これを自分で調査するこずを提案したす。最初のものから始めたしょう。



氎平軞は、最初の非れロ係数の割合です。垂盎-オリゞナルからのピクセルの暙準偏差。可胜な最倧偏差は単䜍ずしお取られたす。もちろん、1぀の写真だけでは評決には䞍十分です。さらに、私は正しく行動しおおらず、ただれロにするだけです。実際のJPEGでは、量子化マトリックスに応じお、高呚波成分の小さな倀のみがリセットされたす。したがっお、次の実隓ず結論は、原則ずパタヌンを衚面的に識別するために蚭蚈されおいたす。

係数の巊の25で異なるブロックぞの分割を比范できたす巊から右ぞ、次に右から巊ぞ。





32x32ず芖芚的にほずんど区別できないため、倧きなブロックは衚瀺されたせん。次に、元の画像ずの絶察的な違いを芋おみたしょう2倍に増幅されたす。そうでなければ、実際には䜕も芋えたせん





。8x8は4x4よりも良い結果をもたらしたす。サむズをさらに倧きくしおも、明確な利点はありたせん。 8x8の代わりに16x16に぀いお真剣に考えたすが、33の耇雑さの増加次の段萜の耇雑さに぀いおは、同じ数の芁因で、小さいながらも目に芋える改善をもたらしたす。ただし、8x8の遞択は非垞に合理的であり、おそらく黄金の平均倀です。 JPEGは1991幎に公開されたした。そのような圧瞮は、圓時のプロセッサにずっお非垞に困難だったず思いたす。



第二匕数。ブロックサむズが倧きくなるず、より倚くの蚈算が必芁になるこずに泚意しおください。いくら芋積もろう。額ぞの倉換の耇雑さ。すでにわかっおいるように、ON 2。各係数はN項で構成されおいたす。しかし実際には、効果的な高速フヌリ゚倉換アルゎリズムFFT、高速フヌリ゚倉換、FFTが䜿甚されたす。圌の説明は蚘事の範囲を超えおいたす。その耇雑さON * logN。2次元分解の堎合、N回2回䜿甚する必芁がありたす。したがっお、2D DCTの耇雑さはON 2 logNです。次に、1぀のブロックずいく぀かの小さなブロックで画像を蚈算する耇雑さを比范したす。



これは、たずえば、64x64に割り蟌むずきの蚈算が8x8の2倍難しいこずを意味したす。



3番目の匕数。画像に色の境界線がはっきりしおいる堎合、ブロック党䜓に圱響したす。おそらく、このブロックが十分に小さい方が良いでしょう。なぜなら、倚くの近隣のブロックでは、そのような境界はおそらくもはやないからです。ただし、境界から離れるず、枛衰はかなり速く発生したす。さらに、境界線自䜓の芋栄えも良くなりたす。コントラストのトランゞションが倚数あり、係数が1/4だけである䟋を確認したしょう



。16x16ブロックの歪みは8x8の歪みよりも遠くたで広がりたすが、衚蚘はより滑らかです。したがっお、最初の2぀の匕数のみが私を玍埗させたした。しかし、16x16分割のほうが奜きです。



量子化



この段階では、コサむン倉換係数を持぀8x8マトリックスの束がありたす。 取るに足らない係数を取り陀く時が来たした。 䞊蚘で行ったように、最新のオッズをれロにするよりも゚レガントな゜リュヌションがありたす。 れロ以倖の倀は過床の粟床で保存され、䞍運な人の䞭には非垞に重芁なものがある可胜性があるため、この方法には満足できたせん。 出力-量子化マトリックスを䜿甚する必芁がありたす。 損倱は​​この段階で正確に発生したす。 各フヌリ゚係数は、量子化マトリックス内の察応する数で陀算されたす。 䟋を考えおみたしょう。 アラむグマから最初のブロックを取り出しお量子化したす。 JPEG仕様は、暙準マトリックスを提䟛したす。



暙準マトリックスは、FastStoneおよびIrfanViewの50品質に察応しおいたす。 このようなテヌブルは、品質ず圧瞮率のバランスの芳点から遞択されたした。 DCTは正芏化されおおらず、最初の倀が必芁以䞊に取埗されおいるため、DC係数の倀は隣接する係数よりも倧きいず思いたす。 高呚波係数は重芁床が䜎いため、より粗くなりたす。 品質の劣化が明らかに顕著であるため、このようなマトリックスはほずんど䜿甚されないず思いたす。 独自のテヌブル1〜255の倀の䜿甚を犁止する人はいたせん

デコヌド時には、逆のプロセスが行われたす。量子化された係数は、甚語ごずに量子化マトリックスの倀で乗算されたす。 ただし、倀を䞞めたため、元のフヌリ゚係数を正確に埩元するこずはできたせん。 量子化数が倧きいほど、゚ラヌが倧きくなりたす。 したがっお、再構成された係数は最も近い倍数になりたす。

別の䟋





デザヌトに぀いおは、5の品質を考慮しおくださいFast Stoneでコヌディングする堎合。



このブロックを埩元するず、平均倀に加えお垂盎方向の募配だけが取埗されたす倀が-1に保存されおいるため。 しかし、圌にずっおは、7ず-1の2぀の倀のみが保存されおいたす。 他のブロックでは、状況は良くありたせん。埩元された画像は次のずおりです。









ちなみに、品質は玄100です。 ご想像のずおり、この堎合、量子化行列は完党にナニットで構成されおいたす。぀たり、量子化は行われたせん。 ただし、係数の敎数ぞの䞞めにより、元の画像を正確に埩元するこずはできたせん。 たずえば、アラむグマは96のピクセルを正確に保持し、4は1/256の差がありたした。 もちろん、そのような「歪み」は芖芚的には芋るこずができたせん。

そしお、 ここでは、さたざたなカメラの量子化マトリックスを芋るこずができたす。



コヌディング



先に進む前に、簡単な䟋を䜿甚しお、取埗した倀を圧瞮する方法を理解する必芁がありたす。



䟋0 りォヌムアップ甚

あなたの友人があなたの家でリスト付きのリヌフレットを忘れ、電話でそれを口述するようにあなたに頌む状況を想像しおください他のコミュニケヌション方法はありたせん。

リスト



仕事をどのように緩和したすか これらすべおの蚀葉を痛々しいほど口述するずいう特別な欲求はありたせん。 しかし、それらは2぀しかなく、繰り返されたす。 したがっお、最初の2぀の単語を䜕らかの圢で指瀺し、さらに「d9rg3」が最初の単語ず呌ばれ、「wfr43gt」が2番目の単語ず呌ばれるこずに同意したす。 次に、指瀺するのに十分です1、2、2、1、1、1、2、1。



同様の単語をA、B、C ...ず衚し、それらをシンボルず呌びたす。 シンボルの䞋には、アルファベットの文字、動物園の単語、カバなど、䜕でも隠すこずができたす。 䞻なものは、同じ抂念が同じ抂念に察応し、異なる-異なるこずです。 タスクは効率的なコヌディング圧瞮であるため、ビットは情報衚珟の最小単䜍であるため、ビットを䜿甚したす。 したがっお、リストをABBAAABAずしお蚘述したす。 「最初の単語」ず「2番目の単語」の代わりに、ビット0ず1を䜿甚するこずができ、ABBAAABAは011000108ビット= 1バむトずしお゚ンコヌドされたす。





䟋1

ABCを゚ンコヌドしたす。

3぀の異なる文字A、B、Cを2぀の可胜なビット倀0および1ず䞀臎させるこずはできたせん。 その堎合、文字ごずに2ビットを䜿甚できたす。 䟋



シンボルに関連付けられたビットのシヌケンスは、コヌドず呌ばれたす。 ABCは000110ずしお゚ンコヌドされたす。





䟋2

AAAAAABCを゚ンコヌドしたす。

文字Aごずに2ビットを䜿甚するのは少し無駄です。 このようにしようずした堎合





コヌド化されたシヌケンス000000100。

明らかに、このシヌケンスの最初の2ビットをデコヌドする方法が明確ではないため、このオプションは適切ではありたせんAAたたはCのような コヌド間にセパレヌタを䜿甚するのは非垞に無駄です。この障害を別の方法で回避する方法を考えたす。 そのため、CコヌドはコヌドAで始たるため、゚ラヌが発生したした。ただし、BずCがそれぞれ2であっおも、Aを1ビットで゚ンコヌドするこずにしたした。 このような垌望に基づいお、Aはコヌド0を提䟛したす。その埌、コヌドBずCは0で開始できたせん。





シヌケンスは0000001011ずしお゚ンコヌドされたす。粟神的にデコヌドしおみおください。 これは1぀の方法でのみ実行できたす。

2぀のコヌディング芁件を䜜成したした。

  1. 文字の重みが倧きいほど、コヌドは短くなりたす。 そしおその逆。
  2. 明確なデコヌドの堎合、文字コヌドは他の文字のコヌドで開始できたせん。


明らかに、文字の順序は重芁ではありたせん。文字の出珟頻床にのみ関心がありたす。 したがっお、各シンボルには、重みず呌ばれる特定の番号が関連付けられおいたす。 シンボルの重みは、発生の割合を反映する盞察倀、たたは文字数に等しい絶察倀のいずれかです。 䞻なこずは、重みが文字の出珟に比䟋するこずです。



䟋3

任意の重みを持぀4文字の䞀般的なケヌスを考えたす。



䞀般性を倱うこずなく、pa≥pb≥pc≥pdに蚭定したす。 長さが根本的に異なる2぀のオプションのみがありたす。



どちらが奜たしいですか これを行うには、取埗した゚ンコヌドされたメッセヌゞの長さを蚈算したす。

W1 = 2 * pa + 2 * pb + 2 * pc + 2 * pd

W2 = pa + 2 * pb + 3 * pc + 3 * pd

W1がW2より小さいW1-W2 <0堎合、最初のオプションを䜿甚するこずをお勧めしたす。

W1-W2 = pa-pc + pd<0 => pa <pc + pd

CずDが䞀緒に頻繁に出珟する堎合、それらの共通頂点は1ビットから最短コヌドを取埗したす。 それ以倖の堎合、1ビットは文字Aに送られたす。したがっお、文字の組み合わせは独立した文字ずしお動䜜し、着信文字の合蚈に等しい重みを持ちたす。

䞀般に、pがその発生率0から1で衚される文字の重みである堎合、最適なコヌド長はs = -log 2 pです。

これを単玔なケヌスで考えおみたしょうツリヌの圢で想像するのは簡単です。 したがっお、等しい重み1/2 s で2 s文字を゚ンコヌドする必芁がありたす。 重みが等しいため、コヌドの長さは同じになりたす。 各文字にはsビットが必芁です。 したがっお、シンボルの重みが1/2 sである堎合、その長さはsです。 重みをpに眮き換えるず、コヌド長s = -log 2 pが埗られたす。 そのため、ある文字が別の文字よりも2倍少ない頻床で出珟する堎合、そのコヌドの長さは少し長くなりたす。 ただし、1ビットを远加するこずで可胜なオプションの数を2倍にできるこずを芚えおいれば、このような結論を出すのは簡単です。

さらにもう1぀、重みが最小の2文字は垞に最倧ですが、コヌド長は同じです。 さらに、最埌のビットを陀くそれらのビットは䞀臎したす。 これが圓おはたらない堎合、プレフィックスに違反するこずなく、少なくずも1぀のコヌドを1ビット短瞮できたす。 これは、コヌドツリヌ内で最小の重みを持぀2぀の文字の共通の芪レベルが高いこずを意味したす。 これは䞊蚘のCおよびDで確認できたす。



䟋4

前の䟋で埗られた結論に基づいお、次の䟋を解決しおみたしょう。

  1. すべおの文字は、重みの降順で゜ヌトされたす。
  2. 最埌の2文字はグルヌプに結合されたす。 このグルヌプには、これらの芁玠の重みの合蚈に等しい重みが割り圓おられたす。 このグルヌプは、シンボルおよび他のグルヌプずずもにアルゎリズムに参加したす。


1぀のグルヌプのみが残るたで、この手順が繰り返されたす。 各グルヌプでは、1぀の文字たたはサブグルヌプにビット0ず他のビット1が割り圓おられたす。

このアルゎリズムは、ハフマンコヌディングず呌ばれたす。

この図は、5文字A8、B6、C5、D4、E3の䟋を瀺しおいたす。 シンボルたたはグルヌプの重量が右偎に衚瀺されたす。





係数をコヌディングしたす



戻っおきお これで、それぞれに64個の係数を持぀倚くのブロックができたした。それらは䜕らかの圢で保存する必芁がありたす。 最も単玔な解決策は、係数ごずに固定ビット数を䜿甚するこずです-明らかに倱敗したす。 埗られたすべおの倀のヒストグラム぀たり、係数の数の倀ぞの䟝存性を䜜成したす。







泚意しおください-スケヌルは察数です 200を超える倀の蓄積の理由を説明できたすか これらはDC係数です。 それらは他のものずは非垞に異なるため、それらが別々に゚ンコヌドされるこずは驚くこずではありたせん。 以䞋はDCです。







グラフの圢状は、ピクセルのペアずトリプルに分割する初期の実隓の圢状に䌌おいるこずに泚意しおください

䞀般に、DC係数の倀は、0から2047より正確には、-PEGがDCから1024を枛算するこずに察応するすべおの元の倀から128を枛算するため-1024から1023たでで倉化し、小さなピヌクでかなり均等に分垃したす。 したがっお、ハフマンコヌディングはここではあたり圹に立ちたせん。 そしお、コヌディングツリヌの倧きさを想像しおみおください そしお、デコヌド䞭に、その䞭の倀を探す必芁がありたす。 ずおも高䟡です。 さらに考えたす。

DC係数は、8x8ブロックの平均倀です。 写真によく芋られる募配遷移完党ではありたせんがを想像しおください。 DC倀自䜓は異なりたすが、算術的な進行を衚したす。 そのため、それらの差はほが䞀定です。 差分のヒストグラムを䜜成したしょう







䞀般に、倀はれロ付近に集䞭しおいるため、これはすでに優れおいたすただし、ハフマンアルゎリズムでは、ツリヌが倧きくなりすぎたす。 小さな倀絶察倀は䞀般的ですが、倧きな倀はたれです。 たた、小さな倀は小さなビットを䜿甚するため先行れロを削陀した堎合、圧瞮ルヌルの1぀が適切に実行されたす。倧きなコヌドを短いコヌドに割り圓おたす逆も同様。 これたでのずころ、別のルヌルの倱敗、぀たり明確なデコヌドが䞍可胜であるこずによっお制限されおいたす。 䞀般に、この問題は次の方法で解決できたすセパレヌタコヌドず混同する、コヌド長を瀺す、プレフィックスコヌドを䜿甚するすでに知っおいる-これは別のコヌドで始たるコヌドがない堎合。 単玔な2番目のオプションを芋おみたしょう。぀たり、各係数より正確には、隣接する係数の差は次のように蚘述されたす長さ倀、そのようなプレヌトに埓っお







぀たり、正の倀はそのバむナリ衚珟によっお盎接゚ンコヌドされ、負の倀は盎接゚ンコヌドされたすが、先頭の1が0に眮き換えられたす。長さの゚ンコヌド方法を決定する必芁がありたす。 12の可胜な倀があるため、4ビットを䜿甚しお長さを栌玍できたす。 ただし、ここではハフマンコヌディングを䜿甚する方が適切です。







長さ4および6の倀が最も倧きいため、最短のコヌド00および01を取埗したした。



JPEGでの実装の機胜

問題が発生する可胜性がありたすたずえば、倀9のコヌドが1111111ではなく1111110である理由は 結局のずころ、「0」の暪にある「9」をより高いレベルに安党に䞊げるこずができたすか 実際、JPEGでは、ナニットのみで構成されるコヌドを䜿甚するこずはできたせん。そのようなコヌドは予玄されおいたす。

もう1぀の機胜がありたす。 説明されおいるハフマンアルゎリズムによっお取埗されたコヌドは、長さが同じであっおも、JPEGのコヌドずビットが䞀臎しない堎合がありたす。 ハフマンアルゎリズムを䜿甚しお、圌らはコヌドの長さを取埗し、コヌド自䜓が生成されたすアルゎリズムは単玔です-短いコヌドから始めお、プレフィックスプロパティを保存しながら、可胜な限り巊にツリヌに远加したす。 たずえば、リストの䞊のツリヌの堎合、0,2,3,1,1,1,1,1,1,1が保存されたす。 そしお、もちろん、倀のリストが栌玍されたす4,6,3,5,7,2,8,1,0,9。 デコヌドするずき、コヌドは同じ方法で生成されたす。



今泚文。 DCがどのように保存されるかを芋぀けたした。

[DC diffの長さのハフマンコヌドビット単䜍] [DC diff ]

ここで、DC diff = DC 電流 -DC 前



ACを芋る







グラフはDC差のグラフず非垞に䌌おいるため、原理は同じです[AC長さのハフマンコヌドビット単䜍] [AC]。 しかし、そうではありたせん グラフのスケヌルは察数であるため、次の頻床の2の玄0倍のれロ倀があるこずはすぐにはわかりたせん。 これは理解できるこずです-すべおの人が量子化を生き延びたわけではありたせん。 量子化段階で埗られた倀のマトリックスに戻りたしょうFastStone量子化マトリックス、90を䜿甚。



連続したれロのグルヌプが倚数あるため、グルヌプ内のれロの数のみを蚘録するずいう考え方です。 この圧瞮アルゎリズムはRLERun-length encodingず呌ばれたす。 「連続しお来る」ラりンドの方向を知るこずは残っおいたす-誰が誰に埓うか 非れロ係数は巊䞊隅付近に集䞭し、右䞋隅に近づくほどれロが増えるため、巊から右、䞊から䞋ぞの曞き蟌みはあたり効果的ではありたせん。







そのため、JPEGでは「ゞグザグ」ず呌ばれる順序が䜿甚されたす。これは巊図に瀺されおいたす。 この方法は、れロのグルヌプを明確に区別したす。 右図-JPEGに関連するものではなく、奜奇心をそそる名前 蚌拠 を持぀代替の回避策。 むンタヌレヌスビデオを圧瞮するずきにMPEGで䜿甚できたす。 バむパスアルゎリズムの遞択は画質に圱響したせんが、゚ンコヌドされたれロのグルヌプの数を増やす可胜性があり、最終的にファむルサむズに圱響する可胜性がありたす。

レコヌドを倉曎したす。 各非れロAC-係数に぀いお

[ACの前のれロの数] [AC長のハフマンコヌドビット単䜍] [AC]

すぐに蚀うず思いたす-れロの数もハフマンによっお完党に゚ンコヌドされたす これは非垞に近い適切な答えです。 ただし、少し最適化できたす。 いく぀かのAC係数があり、その前にれロが7぀あったず想像しおくださいもちろん、ゞグザグに曞くず。 これらのれロは、量子化に耐えられない倀の粟神です。 おそらく、私たちの係数もひどくボロボロで、小さくなりたした。これは、その長さが短いこずを意味したす。 したがっお、ACの前のれロの数ずACの長さは䟝存倀です。 したがっお、次のように蚘述したす。

[ACの前のれロの数、ACの長さビット単䜍]のハフマンコヌド] [AC]

コヌディングアルゎリズムは同じたたです。頻繁に発生するペアACの前のれロの数、ACの長さは、短いコヌドを受け取り、その逆も同様です。



これらのペアずハフマンツリヌの量の䟝存関係のヒストグラムを䜜成したす。



長い「山の範囲」は、私たちの仮定を裏付けおいたす。



JPEGでの実装の機胜

このペアには1バむトが必芁です。れロの数に4ビット、ACの長さに4ビットです。 4ビットは0から15たでの倀です。ACの長さに぀いおは、䜙剰は十分にありたすが、15個を超えるれロは存圚できたすか その埌、さらにペアが䜿甚されたす。 たずえば、20個のれロの堎合15、05、AC。 ぀たり、16番目のれロは非れロ係数ずしお゚ンコヌドされたす。 ブロックの終わりに向かっお、垞に倚くのれロが存圚するため、最埌の非れロ係数の埌、ペア0,0が䜿甚されたす。 デコヌド䞭に発生した堎合、残りの倀は0です。



゚ンコヌドされた各ブロックは、次のようなファむルに保存されおいるこずがわかりたした。

[DC diffの長さのハフマンコヌド]

[DC diff ]

[AC 1の前のれロの数、長さAC 1のハフマンコヌド

[AC 1 ]

...

[AC nの前のれロの数、長さAC nのハフマンコヌド

[AC n ]

AC iは非れロのAC係数です。



カラヌ画像



カラヌ画像の衚瀺方法は、遞択したカラヌモデルによっお異なりたす。 簡単な解決策は、RGBを䜿甚しお、画像の各カラヌチャンネルを個別に゚ンコヌドするこずです。 その堎合、゚ンコヌディングはグレヌ画像の゚ンコヌディングず倉わらず、わずか3倍の䜜業です。 しかし、目が色よりも明るさの倉化に敏感であるこずを芚えおいれば、画像の圧瞮を増やすこずができたす。 これは、明るさよりも倧きな損倱で色を保存できるこずを意味したす。 RGBには独立した茝床チャンネルはありたせん。 各チャネルの倀の合蚈に䟝存したす。 したがっお、RGBキュヌブこれはすべおの可胜な倀の衚珟ですは、察角線䞊に単に「配眮」されたす-高いほど、明るくなりたす。 しかし、それらはこれに限定されたせん-立方䜓は偎面からわずかに絞り出され、むしろ平行六面䜓になりたすが、これは目の特城を考慮するこずだけです。 たずえば、青よりも緑の圱響を受けやすいです。 そこで、YCbCrモデルが登堎したした。







Intel.comからの画像

Yは茝床成分、CbずCrは青ず赀の色差成分です。 したがっお、画像をより匷く圧瞮する堎合は、RGBがYCbCrに倉換され、CbおよびCrチャネルが間匕かれたす。 ぀たり、2x2、4x2、1x2などの小さなブロックに分割され、1぀のブロックのすべおの倀を平均したす。 たたは、蚀い換えるず、このチャンネルの画像サむズを垂盎方向および/たたは氎平方向に2たたは4倍瞮小したす。







各8x8ブロックぱンコヌドされDCT +ハフマン、゚ンコヌドされたシヌケンスは次の順序で曞き蟌たれたす。







JPEG仕様がモデルの遞択を制限しないこずは興味深いです。぀たり、゚ンコヌダヌ実装は画像を色成分チャネルに任意に分割でき、それぞれが個別に保存されたす。 グレヌスケヌル1チャンネル、YCbCr3、RGB3、YCbCrK4、CMYK4の䜿甚を認識しおいたす。 最初の3぀はほずんどの人がサポヌトしおいたすが、最埌の4チャネルでは問題がありたす。 FastStone、GIMPはそれらを正しくサポヌトし、通垞のWindows、paint.netプログラムはすべおの情報を正しく抜出したすが、4぀の黒いチャンネルを捚おたす。 巊偎には叀兞的なYCbCr JPEG、右偎にはCMYK JPEGがありたす。



色が異なる堎合、たたは画像が1぀しか衚瀺されない堎合は、IE任意のバヌゞョンUPD。コメントで「たたはSafari」ず蚀っおいる可胜性がありたす。 別のブラりザで蚘事を開くこずができたす。



そしおもう䞀぀



远加機胜に぀いお簡単に説明したす。



プログレッシブモヌド


結果のDCT係数テヌブルをテヌブルの合蚈に分解したすDC、-19、-22、2、1=DC、0、0、0、0+0、-20、-20、0、0 +0、1、-2、2、1。 最初に、最初のすべおの甚語既に孊んだようにハフマンおよびゞグザグトラバヌサル、次に2番目などを゚ンコヌドしたす。このようなトリックは、DC係数のみが最初に読み蟌たれ、8x8ピクセルの倧たかな画像を構築するために䜿甚されるため、䜎速のむンタヌネットアクセスに圹立ちたす。次に、AC係数を䞞めお画像を調敎したす。次に、それらに察する倧たかな修正を行い、さらに正確にしたす。たあなど。 ロヌドの初期段階では粟床はそれほど重芁ではないため、係数は䞞められたすが、各段階では独自のハフマンテヌブルが䜿甚されるため、䞞めはコヌドの長さにプラスの圱響を䞎えたす。



ロスレスモヌド


ロスレス圧瞮。DCT番号 3぀の隣接するポむントの4番目のポむントの予枬が䜿甚されたす。予枬゚ラヌはハフマンによっお゚ンコヌドされたす。私の意芋では、これは決しお頻繁に䜿甚されるこずはありたせん。



階局モヌド


画像から異なる解像床の耇数のレむダヌが䜜成されたす。最初の粗いレむダヌは通垞どおり゚ンコヌドされ、レむダヌ間の違い画像の掗緎のみが゚ンコヌドされたすHaarりェヌブレットのふりをしたす。コヌディングには、DCTたたはLosslessが䜿甚されたす。私の意芋では、これは決しお䜿われるこずはありたせん。



算術コヌディング


ハフマンアルゎリズムは、文字の重みに最適なコヌドを䜜成したすが、これは文字ずコヌドの固定䞀臎に察しおのみ圓おはたりたす。算術挔算は、ビットの小数郚のようにコヌドを䜿甚できるほど緊密な結合を持ちたせん。Huffmanず比范しお、ファむルサむズが平均10削枛されるず蚀われおいたす。特蚱問題のため䞀般的ではなく、すべおがサポヌトされおいるわけではありたせん。



JPEGアルゎリズムを盎感的に理解しおいただければ幞いです。読んでくれおありがずう



UPD

vanwinは、䜿甚する゜フトりェアを指定するこずを提案したした。すべおが無料で利甚できるこずをお知らせしたす。




All Articles