自分で再現できる実験から始める。細い罫線・文字・鋭いエッジといった細かい構造を持つ画像を用意し、一辺を 1/4 に縮小してから、バイキュービック補間で元のサイズに戻す。そして元画像と 1 ピクセルずつ比べる。
測ったのは 2 つ。PSNR と、高周波エネルギー(隣接ピクセルの輝度差の絶対値の平均=エッジと質感がどれだけ残っているか)。4× では PSNR 17.4 dB、高周波は原画の 20.5% まで落ちた。2× でも約 52% だ。デスクトップ Chromium・画像 1 枚なので、この写真についてしか言えないが、傾向は一貫している。縮めて拡大すると、エッジの大半は戻らない。
理由は単純だ。画像が 1/4 の大きさだったとき、細い線や文字の鋭いエッジが担っていた高周波の情報は、低解像度のピクセルの中にもう存在しない。補間がやるのは、既存のピクセルの間を数式で埋めることだ。エッジを滑らかに見せられても、そこにあった線を無から作り出すことはできない。情報が画像の中に無いのだから、補間はそれを生み出せない。
超解像は別の道を通る
ではモデルはなぜ復元できるのか。補間しないからだ。大量の実写を見てきた上での「推測」をする。Real-ESRGAN・SwinIR・公式 Real-HAT-GAN といったモデルは、鮮明な画像と劣化した画像のペアで学習し、「このぼけ・ノイズ・圧縮痕の裏には、どんな鮮明な構造がありそうか」を覚える。推論時は滑らかにするのではなく、あり得る構造を埋める。同じ拡大でも、補間は既存ピクセルを広げ、超解像は新しいピクセルを描く——描くその部分こそ、補間が失った約 80% だ。
具体的に、ImgIng(imging.ai)で実際に 1 回動かした結果を挙げる。350×466 の色あせた古写真、「老写真の完全修復」段で 4×、WebGPU 上でローカルに 9.9 秒、出力 1400×1864、Real-ESRGAN x4plus 使用。画像は端末から出ていない——パネルには「ローカル Worker」と表示される。私が担当しているのはコーデックとモデルのロード層で、切り抜きや超解像モデルそのものではない。だからモデルが構造をどう描くかは「学習の結果」までしか言えない。
メモリの制約と、越えてはいけない一線
ロード側から語れるのは、大きな画像でもメモリを使い切らない理由だ。数千ピクセルの画像を一度にモデルへ流すとタブが落ちる。だから推論は Worker 内でタイル分割される。各タイルは自身の窓で読み、予測が信頼できる中央だけを出力に書き、文脈の足りない縁は混ぜ戻さない。タイルごとに Tensor を解放する。ディスクにキャッシュされたモデルは、開いたままの推論メモリとは別物だ。
五段は品質の順位ではなく、何を復元するかの違いだ。速いのはプレビュー用、忠実は文字・建築・線、老写真は全体の階調、デュアルモデルは人物と背景の質感を連続的に、上位段は Real-HAT-GAN Sharper を大文脈タイルで回す。「どれが一番強いか」ではなく「この画像は何を失ったか」で選ぶ。
そして最も大事な一線。超解像が足すのはモデルの推測であって、元画像が持っていた細部ではない。 視覚的な強調には向く——画像はより鮮明に見える。だが証明書、司法・歴史考証、OCR の原文照合には使えない。それらが求めるのは「元は実際どうだったか」で、モデルが返すのは「たぶんこうだった」だからだ。ImgIng のパネルもはっきり書いている——五官を勝手に描き変えない、そして低解像すぎる顔は、元々存在しない真実の情報を取り戻せない。この 2 つは他所では混同されがちだが、ここでは混同できない。
