4

画像に変更を加えたときに品質を維持するために、JPG 画像を非圧縮ビットマップ (BMP/PNG) として保存することがあります。

理論的には、品質を損なうことなくビットマップを元の JPG 形式に再エンコードすることは可能でしょうか (編集した領域を除く)。

編集: BMPデータのそのブロックの元のJPG情報設定を見つけるためにブルートフォースを何とか考えていたので、元のJPGと何の違いもなくBMP(以前はJPGでした)からJPGを生成しました。JPG 形式については、それが可能かどうかを判断するのに十分な知識はありませんが、少なくとも有限の時間内に 8x8 ブロックをブルート フォースできる理由はわかりません。

4

4 に答える 4

3

JPEG 圧縮は不可逆であるため、JPEG として再エンコードすると、.bmp の一部の情報が失われます。画像が些細な場合 (たとえば、1 つの黒いピクセル 1 つの黒いすべての黒いピクセル、たとえば 1 ピクセル) は、損失なしで再エンコードできる場合があります。

ここでは、JPEG が複数回再エンコードされる例を確認できます

ウィキペディアから、ロスレスの JPEG に対していくつかの操作を実行できます。

画像サイズが 1 MCU ブロック (Minimum Coded Unit) の倍数 (通常は両方向に 16 ピクセル、 4:2:0 クロマ サブサンプリングの場合)。これを実装するユーティリティには、ユーザー インターフェイス Jpegcrop を備えた jpegtran、および IrfanView への JPG_TRANSFORM プラグインが含まれます。

ブロックは、90 度単位で回転したり、水平軸、垂直軸、対角軸で反転したり、画像内を移動したりできます。元の画像のすべてのブロックを変更した画像で使用する必要はありません。

JPEG イメージの上端と左端は 8 × 8 ピクセル ブロックの境界上にある必要がありますが、下端と右端はそうである必要はありません。これにより、可逆クロップ操作が制限され、下端または右端がすべてのチャネルのブロック境界上にない画像の反転と回転も防止されます (端が上または左になるため、前述のように、ブロック境界は必須です)。

無損失トリミングを使用する場合、トリミング領域の下部または右側がブロック境界上にない場合、部分的に使用されたブロックの残りのデータはトリミングされたファイルにまだ存在し、復元できます。

唯一の違いは係数がファイルに配置される順序であるため、品質を損なうことなくベースライン形式とプログレッシブ形式の間で変換することもできます。

さらに、エッジがブロック境界と一致する限り、複数の JPEG 画像を無損失で結合できます。

于 2013-06-22T21:15:07.330 に答える
2

理論的には、JPEG 形式から取得されたことが知られている BMP 画像を JPEG 形式にロスレスでエンコードすることは可能です。つまり、次の変換を行うことができます。

JPEG A => BMP X -> JPEG B => BMP X

ここ=>で、 は解凍操作、->は圧縮操作です。

これはあなたが求めているものはないことに注意してください。あなたは上記に加えてそれを求めていJPEG A == JPEG Bます。すべての JPEG 表現が一意の画像にデコードされるとは思えませんが (確かなことはわかりません)、この保証はできないと思います。

可逆符号化が可能な理由は、特定のサイズと深さの画像の JPEG 表現の数が有限であるためです。この数は手に負えないほど大きいですが、それでも有限です。エンコード アルゴリズムは、BMP 画像と正確に一致する表現が見つかるまで、これらの表現のそれぞれをデコードし、その表現を出力するだけです。このアルゴリズムは完全に実用的ではありませんが、問題が制限されていることを示しています。

実用的なアルゴリズムが存在する可能性があります。たとえば、次のような反復アプローチを想像できます。

  1. 初期圧縮パラメーター (カラー サンプリングと量子化) を選択します。
  2. BMP 画像を候補 JPEG に圧縮します。
  3. 候補 JPEG を解凍します。
  4. 解凍された画像を元の BMP と比較します。
    • 同じであれば、候補の JPEG を出力して終了します。
    • 異なる場合は、圧縮パラメーターを更新し、ステップ 2 に戻ります。

トリックはその更新ステップにあります-画像の差分がどのようにパラメーターを改善するかを理解する.

ほとんどのケースで機能するコードを記述できる可能性があります。基本的にカラー サンプリングの選択肢は 3 つしかなく量子化行列を生成するアルゴリズムはそれほど多くないと思います。それらをすべて実装するか、代わりにインターネットをスキャンして JPEG ファイルを探し、固有の圧縮パラメーターを記録することができます。次に、主に新しく作成された圧縮プログラムからのイメージで失敗することが予想されます。

これらのアプローチは、操作に同じ圧縮解除プログラムを使用することに依存することに注意することが重要です=>。異なる圧縮解除プログラムでは、1 つの JPEG ファイルからビットごとに同じ画像が生成されない可能性があるためです。

于 2013-06-27T16:56:42.077 に答える
1

基本的に、ここでは画像フォーマットと圧縮を扱います。まず、JPEG 画像を BMP に変換するプロセスに注目しましょう。BMP は、RGB 値を持つピクセルのマップで形成されます。したがって、視覚的な側面とエッジの観点から、元の JPEG 画像とこの写真を BMP に変換したものとの違いを観察する必要はありません (解像度の問題は別として)。

それどころか、他の寄稿者やここ ( http://en.wikipedia.org/wiki/JPEG ) で述べられているように、JPEG 形式は圧縮マトリックス (DCT) を使用して画像のグラデーションを変更します。

ほとんどの場合、単純化された写真 (均一な背景色に均一な形状) を除いて、うまくいかないと言う傾向があります。カムやビデオの写真では機能しません。

于 2013-06-28T20:12:08.440 に答える