
2026/02/06 13:50
全てがぼやけているように感じます。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
主旨
単純な平均化ぼかしフィルタは常に不可逆的ではありません。ぼかしウィンドウが決定論的に整列または重み付けされている場合―例えば右揃えの移動平均など―、隣接するぼかしたピクセルと既知のパディングを用いた線形方程式を解くことで、元のピクセル値を一回で復元できます。仕組み
平均は平均値を保持するため、隣接するぼかし値(およびパディング)を差し引くと、個々のソースピクセルを分離した線形関係が得られます。サイズ5の右揃えウィンドウの場合、最初のピクセルは (img(0)=5·blur(0)-4c) で復元できます。この値が分かれば、その後のすべてのピクセルは再度走査することなく反復で求められます。図示
この手法は、151画素右揃えぼかしを適用したボッティチェリの『ビーナスの誕生』で実証されました。画像を再構成すると、個々の髪の毛など細部まで明らかになりました。JPEG圧縮(95 %、85 %、75 %品質)でも、ロスファイルに含まれる情報はまだ復元可能であり、約50 %以下の品質では抽象的な再構成しか得られませんでした。限界
2 次元への拡張や大きいウィンドウを使用すると、量子化ノイズが激しくなるため、この方法は小さなウィンドウで最も効果的です。また、正確なぼかしカーネル(サイズ・整列・重み付け)を知っていることが前提となります。今後の研究と影響
さらなる研究では、多段階復元の改善、2 次元ウィンドウ設計の最適化、またはロス圧縮後でも復元可能なぼかしフィルタの開発が考えられます。潜在的な応用例としては、監視映像から隠された詳細を法医学的に回復すること、低解像度スキャンからデジタルアートを修復すること、およびJPEG圧縮標準への情報保持の指針提供が挙げられます。
この改訂版概要はすべての重要点を取り込み、不適切な一般化を避け、技術的聴衆にとって明確に情報を提示しています。
本文
もしインターネット上の情報セキュリティに関する議論を追っていると、画像をぼかすことはその内容を隠すには適切でないという話を聞いたことがあるでしょう。 それはぼかしアルゴリズムが可逆的だからだと言われています。しかし、その説明だけでは頭が痛くなる人も多いはずです。
ぼかしとは、実際に隠れたピクセル値の平均を取る作業にすぎません。 2つの数を平均すると、元が「1 + 5」だったのか「3 + 3」だったのかわからなくなります。算術平均は同じになるため、もとの情報は失われたように見えるだけです。
それならば、そのアドバイスは間違っているのでしょうか? という疑問が湧きます。
答えは「はい」と「いいえ」です! 確かに決定論的なアルゴリズムを使えば非可逆的なぼかしも実現できます。しかし、他の場合ではぼかしフィルタが目に見えるよりもずっと多くの情報を保持していることがあります―そしてそれは意外な方法でです。
本記事では、まず簡単なぼかしアルゴリズムを構築し、その後に詳細に解析します。
1. 単純な移動平均によるぼかし
ぼかし=平均化だとすると、最もシンプルな手法は「移動平均」です。
固定サイズの窓(ウィンドウ)を取り、各ピクセル値をその近傍にある n 個のピクセルの算術平均で置き換えます。
n = 5 の場合、処理は次のようになります。
blur(0) = (img(-2)+img(-1)+img(0)+img(1)+img(2))/5 blur(1) = (img(-1)+img(0)+img(1)+img(2)+img(3))/5 ...
境界近くでは、固定パディングを使うか、選択領域の外からピクセルを借りるか、あるいは単に少数の値で平均化するなどして対処します。
解析自体には大きな差はありません。
2. 元画像の復元
ぼかし処理を終えた後、もとのピクセル値が手元になくても、その画像を再構築できるでしょうか? 答えは「はい」です。
「逆畳み込み」「点拡散関数」などの難しい数学を使う必要はありません。
左端(x = 0)から始めます。最初のぼかしピクセルは
blur(0) = (img(-2)+img(-1)+img(0)+img(1)+img(2))/5
次に
blur(1) = (img(-1)+img(0)+img(1)+img(2)+img(3))/5
両辺を 5 倍して平均を和に変換します。
5·blur(0) = img(-2)+[img(-1)+img(0)+img(1)+img(2)] 5·blur(1) = [img(-1)+img(0)+img(1)+img(2)] + img(3)
この 2 つの式を引き算すると
5·blur(1) – 5·blur(0) = img(3) – img(-2)
img(-2) は固定パディングで既知です。 それを c と表すと、
img(3) = 5·(blur(1) – blur(0)) + c
同様に
img(4) = 5·(blur(2) – blur(1)) + c
が得られます。
img(3) が分かれば、さらに進めて img(8) を復元できます。
5·blur(5) = img(3)+[img(4)+img(5)+img(6)+img(7)] 5·blur(6) = [img(4)+img(5)+img(6)+img(7)] + img(8) img(8) = 5·(blur(6) – blur(5)) + img(3)
このプロセスを続ければ、ただし img(0) と img(1) は未知のまま残ります。
右から左へもう一度走査すれば、それらも埋めることができます。
3. 計算を整える:右寄せウィンドウ
中心対称の窓ではなく、計算対象と同じ位置に窓の片側を合わせます。
blur(0) = (c+c+c+c+img(0))/5
この式から直接 img(0) を求められます。
img(0) = 5·blur(0) – 4·c
次に img(1) は
img(1) = 5·blur(1) – 3·c – img(0)
このように順次進めるだけで、途中のギャップや二度目の走査を必要とせずに画像全体を再構築できます。
4. 実験
左側パネルはサンドロ・ボッティチェリの「ヴィーナスの誕生」の一部です。
右側パネルは、x 軸方向だけに移動平均ウィンドウ(151 ピクセル)を適用したものです。
Venus, x‑axis moving average
上記で説明した復元手法を使うと、8 ビット量子化の影響でノイズが入りますが、それでも細部―髪の一本一本までが明らかに見えてきます。
5. 二次元への拡張
現在は x 軸方向だけ平均しています。
以下のように拡張できます。
- 本格的な 2D フィルタ:正方形または十字形ウィンドウで平均化
- 二重パス:x 方向に一次平均を行い、次に y 方向へ(逆順で復元)
結合した平均化はピクセル値の量子化が激しくなるため、ウィンドウが大きいほどノイズが目立ちます。
6. 攻撃者向けぼかしフィルタ
ノイズを抑えつつ細部を隠したい場合は、現在のピクセルに重みを多く与える方法があります。
blur(n) = [img(n‑W)+…+img(n‑1)+B·img(n)] / (W + B)
W = 200、B = 30 のときの出力は次のようになります。
Venus, heavy X‑Y blur
このフィルタからも復元可能ですが、ノイズが増します。
同時に 2D フィルタ(十字形ウィンドウで W = 600×600、B = 10)を使うと、
Reconstruction from a simultaneous 2D filter
という結果になります。
7. JPEG アーチファクト
中間のぼかし画像を lossy JPEG で保存しても、隠された情報は残ります。
上段には 95 %、85 %、75 % の品質で保存した後に復元した画像が示されています。
Recovery from a JPEG file (1D+1D filter)
50 % 未満の品質になると、復元結果は抽象芸術へ変わります。
8. さらに読む
- テーマ別投稿集: [リンク]
- 他の奇妙なアルゴリズム: [リンク] と [リンク]