私は多くのモノクロ画像データを扱っていますが、今朝、libjpeg と .Net jpeg コーデックがモノクロ データを処理する方法に大きな違いがあるように見えることに気付きました。libjpeg を使用して任意の品質設定で保存され、デフォルトの .Net jpeg コーデックを使用して開かれたモノクロ画像は、実際には 16 の異なるグレー シェードのみをロードし、すべての中間シェードは点描としてレンダリングされるようです。
これは、libjpeg によって保存され、.net によって読み込まれた滑らかなグラデーションのヒストグラムです。
ヒストグラムは完全に水平になっているはずです。
そして、これはそのグラデーションがどのように見えるかの(拡大された)サンプルです(完全に滑らかな遷移でなければなりません)
これは、左側のグレー 85 から右側のグレー 136 へのスムーズな遷移である必要がありますが、その遷移を行うために実際にレンダリングされるのは 4 階調のグレーのみです。
私の質問は、私は狂っていますか? このコーデックの不一致はどこまで続くのでしょうか? 異なるプログラムで両方のライブラリを使用している場合、良い回避策はありますか?
私はどちらのコーデックも非難しているのではなく、矛盾しているように見える点を指摘しているだけです。libjpegを使用して作成されたことがわかっている画像でこれに気付き、品質設定の問題であると想定し、faststone image resizerを使用してテスト画像を作成しようとしたところ、同じ結果が得られ、irfanviewを使用してみて、再び同じ結果が得られました。これらのプログラムはどちらも jpeg ライブラリを使用する必要があるため、libjpeg も使用しており、本物のコーデックの競合があると考える傾向があります。
読み込み側では、独自の .net コードと Paint.net の両方を使用して画像を読み込むと、同じ結果に遭遇しました。
最後に、通常の解像度でのサンプルを以下に示しますので、ダウンロードして自分で試してみてください。いくつかのプログラムでロードすると素敵なグラデーション (ブラウザなど) が得られますが、独自の .Net コードまたは Paint.Net でロードすると、上記のように 16 階調のグレーのみを使用してレンダリングされたディザ グラデーションが得られます。
これについてもっと知っている人はいますか?