Raph Linus氏が4bppで超高速展開できる画像形式「nibnib」を公開

Nibnib: Image compression with extreme decompression speed

Raph Linus氏が4bppで超高速展開できる画像形式「nibnib」を公開

RP2350マイコンでのDVI出力を想定し、1ピクセルあたり約6サイクルで展開できる画像形式。パレットに絶対色ではなく差分を格納することで、単純なパレット画像より滑らかな領域を表現する。1バイトから2ピクセルを復号して4bppを実現。符号化は復号より桁違いに遅い非対称な設計で、パレット選択やFloyd-Steinberg誤差拡散を組み合わせている。

パレットエントリは両方のピクセルの誤差を最小化するように選ばれ、人間の視覚系がより低い空間周波数に敏感であることをモデル化して、差分よりも和により大きな重みを与えている。
  1. raphlinus

    Adafruit Fruit Jamをお持ちなら、そのボード上でデモを動かせます[1]。SDカードから640x480の動画を60fpsでストリーミング再生でき、フラッシュから静止画像を表示することもできます。

    HNの人たちに興味を持たれそうな点としてもう一つ、デコーダ[2]はsymbolasm[3]という新しい低レベル言語で書かれています。これはアセンブリ言語の利点(ほぼ制約なしに性能を推論し最適化できる)と、Cのいくつかの便利さ、特に名前付き変数や構造体フィールドを組み合わせることを目指したものです。

    [1]: https://github.com/raphlinus/vic-2350

    [2]: https://github.com/raphlinus/vic-2350/blob/main/image.sy

    [3]: https://github.com/raphlinus/symbolasm

  2. augment_me

    1) 個人的には、極端な展開速度を強調するならJPEGとの比較数値くらい出してほしいと思う。それすらないのは無意味だと思う。

    2) BCxは本質的に同じコードブッキング/パレット化を、2つのパレットエントリ間の補間を許すことでより効率的に行い、さらに大きな圧縮を実現している。

  3. zahlman

    これは「圧縮」の定義を無理に押し広げているように思える。デルタ符号化フィルタがあって、その後にパレット化?それだけ?

    追記:これがどうやらとてもうまく機能しているのが意外(でも面白い)だと言っておくべきだろう。デコーダがデルタ符号を戻さなければならないので、誤差が蓄積するだろうと予想していた。Floyd-Steinbergディザリングの言及があったが、おそらくそのためのものだろう。複数の色軸にまたがって同時に機能させるのは難しそうだが、複雑さはすべてエンコーダ側にあるので、まあ。

この日のほかの記事

2026-11-01