私は JPEG 圧縮を実装しようとしています (またはできる限りそれに近いものを) 実装しようとしていますが、実際の実装について明確にする必要がある点がいくつかあります。私が現在知っていることと問題がどこにあるのかを説明します。誰かがそれらを解決できれば、それは素晴らしいことです.
最初のステップは、画像を 8x8 ブロックに分割することです。しかし、これを行う最善の方法についてはわかりません。たとえば、クロマ ダウン サンプリングを行ってから DCT を適用する必要があることを考慮して、これらのセグメントをすべて格納するためにどの次元配列を使用するのが最適でしょうか。3D 配列 (画像の 2D 要素を格納するための 2 次元、次にカラー チャネル用の 1 次元) であり、8 のグループまたは 4D 配列 (各 8x8 グループを格納するための追加の次元を含む) または別の方法で反復処理します。全体的に。
クロミナンス ダウン サンプリングの問題が発生する可能性があります。これは、クロミナンス値の数が減ると、配列のサイズを変更する必要があり、これらを DCT に入れる必要があり、実際にはすべてを取得できないためです。クロミナンスとルミネッセンスの異なるサイズのアレイを同時に。
また、8x8グループの3つのカラーチャネルすべてを取得してから、3つの値を1つの値に変換してスペースを節約するか、各カラーチャネルを一度に1つずつ取得するというDCTの考え方です(そうであれば、私は本当に理解していませんフーリエ空間への変換が圧縮をより効率的にする方法のポイント)?また、DCT で取得した値が 0 ~ 255 の範囲をはるかに超えており、はるかに高いことに気付きました。私が知る限り、各 8x8 ブロックのこれらの値は、IJG 標準の量子化行列で除算され、その後に異なるエントロピー エンコーディングが続きます。
この質問は多くの領域をカバーしており、非常に厄介であることは承知していますが、必要に応じて追加情報を提供できます。