リスタートインターバル |
画像はサンプリングファクタで指定された大きさで小さく分割してデータに変換されます。
上の絵の数字の順に左上から右に1行づつデータに変換され、右下の画像(50の位置)が最後になります。
※画像の大きさ、サンプリングファクタで、分解されるMCUの数は異なります。
※ここでは、処理順番を意識して見て下さい。
上の図はJPEGファイルのイメージデータ周辺の構成です。
左が先頭側、右が末尾側で、赤がマーカ・セグメントで、黄が画像データです。
JPEGのデータは先頭のMCUに直接圧縮した数値、以降のMCUは直前のMCUの差分が書き込まれています。
データが途中で抜けたり、化けたりした場合、ドミノ崩しのように末尾のデータまで影響を受けてしまいます。
正常な画像 データ化けした画像
これらの画像は、元画像が約600KB(60万バイト)あるのに対し、僅か数バイトしか違いはありません。
※JpegAnalyzerでは画像データ部分のエラー検出、補正、修復は出来ません。
このように一部のデータ破損によって、全体に波及するのを防ぐため、画像出力時にリスタートインタバル処理をする場合が有ります。
このリスタートインタバル処理は、一定間隔でMCUの間にリスタートマーカと呼ばれる2バイトのデータを挟み込みます。
リスタートマーカ直後のMCUは差分データではなく、先頭のデータと同じように作られます。
このような仕組みで、画像データが途中で破損しても、リスタートマーカがある場所以降に影響を与えません。
リスタートインタバル処理されたファイルの構造
まず、DRIセグメントに、リスタートマーカを挟み込む間隔(MCU数)が記録されます。
上の絵では、5が設定されているので、MCU5つ毎にリスタートマーカが挟み込まれます。
リスタートマーカは8種類(RST0からRST7まで)あり、最初にRST0から記録されます。
次にRST1、RST2と順番にマーカは変り、RST7まで記録されると、次はRST0に戻りこれを最後まで繰り返します。
JPEG複号時、もしRST3検出後にRST5を検出したら、RST4及びその前後の画像データが失われた事を意味します。
※JpegAnalyzerではこのような場合、RST Sequence Errorを表示します。
リスタートインタバルされた画像がデータ化けしたもの
上の画像は1ライン毎にリスタートマーカが挿入されています。
右上のリスタートインタバルなしでデータ化けしたものと、同じ数、ほぼ同じ位置でデータ化けしています。
これを見ればリスタートインタバルの効果が判って戴けると思います。
サンプル画像について リスタートインタバル処理されていない破損画像は、JpegAnalyzer を使ってわざと破損させたものです。
リスタートインタバル処理された画像サンプルは、Gconを使ってリスタートインタバル処理された画像に変換後、JpegAnalyzer で同じ箇所をわざと破損させたものです。
当ヘルプの写真や挿絵はヘルプファイルのサイズが大きくなるのでViXを使ってリサイズと減色をしています。写真は256色、画面コピーや挿絵は16色に減色
グラフィック・コンバータ Gcon フリーソフト 作者:みず氏
入手先:flow of water http://wblue.web.infoseek.co.jp/
統合画像ビュアー ViX フリーソフト 作者:K_OKADA氏
入手先:K_OKADA's WebPage http://homepage1.nifty.com/k_okada/