鏡像次元に現れた猫
(substack.com/lcamtuf)- 見た目は女性の写真だが、画像にDCTを適用すると周波数領域に隠された猫が現れる実験
- 時間・空間領域と周波数領域は可逆変換でつながっており、同じ画像を異なる形で解釈できる
- 猫の写真をDCTに変換した「ノイズ」パターンを低い不透明度で合成すると、元画像を保ったまま変換結果に猫の形が残る
- 合成画像はリサイズ後も猫の情報が残るが、拡大するとタイル状に繰り返され、縮小すると切り落とされる
- JPEG品質を下げると特に高周波成分が強く量子化され、非可逆圧縮がどれほど多くの情報を捨てているかを目で確認できる
DCTで作る「鏡像次元」実験
- 周波数領域は、日常的な信号を構成波形の振幅に変換して解釈する方法
- 最も一般的な基底は、周波数が増加する正弦波
- ほかの波形も代替の周波数領域を作るために使える
- この変換には2つの性質がある
- 元の時間領域または空間領域データに戻せる可逆性
- 同じ数学演算で双方向変換を行う入出力対称性
- 圧縮ではこの区別が重要
- 画像を周波数領域に変換したあと、高周波成分の精度を下げたり除去したりしても、結果画像は知覚的には似て見えることがある
- その分、転送または保存するデータ量を減らせる
猫を周波数領域に隠す過程
- 猫の写真を**離散コサイン変換(DCT)**で周波数領域の形に変えるところから始まる
- 前の例の女性写真の上に、周波数領域の「猫ノイズ」パターンを低い不透明度で合成する
- 合成処理には損失が伴う
- 期待した結果は、女性写真がDCTで比較的均一なノイズへ分解され、挿入した猫ノイズが再び猫画像としてまとまることだった
- 実際に合成画像へDCTを適用すると、猫の形が現れる
- 直接確認できる合成画像とMATLABの例がある
- woman-with-cat.png
dct2(woman)でDCTを計算し、imgaussfilt(cat, 1)で平滑化した結果を表示する
- リサイズ後も猫は残る
- 拡大すると画像がタイル状に繰り返される
- 縮小すると画像が切り取られる
- JPEG品質設定を下げると猫の情報が壊れる
- 高いJPEG品質では画像はかなり良好に見える
- 低品質では高周波成分に当たる右下の象限が激しく量子化される
- この可視化は、JPEGアルゴリズムが私たちが気づきにくい形で多くの情報を破壊していることを示している
- オーディオのスペクトログラムに隠しメッセージを入れる例や、JPEGのDCT係数にテキストのステガノグラフィを重ねる議論といった先行事例がある
- この技法の実用性や完全な新規性よりも、周波数領域と時間領域が興味深く結びつく点に焦点がある
- おまけとして、JPEG品質設定ごとの「独立型」周波数領域猫の劣化映像がある: https://vimeo.com/940487310/8a929a5eb5
1件のコメント
Hacker Newsのコメント
認識可能な被写体がある写真のほとんどでは、ここで見られるようにスペクトルエネルギーが原点、つまり左上隅の周辺に集中する
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_pr...
女性画像のDCTも同様。一方で写真の被写体はたいていフレーム中央寄りに置かれる。だから合成画像では空間領域データと周波数領域データが互いに干渉しにくく、逆変換したときに猫の表情が保たれる
https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_...
女性画像側でも逆に同じ原理が働く
このプロセスをこう理解してよいか確認したい: a) 女性の写真と猫の写真を用意する、b) 猫をDCTで周波数領域へ変換する、c) 周波数領域の猫を女性の視覚画像の上に合成する、d) 合成画像をDCTすると再び猫が現れる
より正確には、視覚的な猫と周波数領域の女性を合成した結果になるが、視覚的な猫のほうがより目立つという意味だと思う
ずっと昔の学生プロジェクトで見た記憶では、この手法は画像でも音声でもあらゆる信号に適用できる堅牢なデジタル透かしの基盤になっている
主な用途は、信号が大きく加工された後でも著作権付き素材を検出すること。たとえばリッピングされた映画や、カムコーダーで撮影された映画、JPEG-2000で提供された素材など
映画業界の人で、もっと技術的な詳細を知っているならぜひ聞きたい
Digimarcだった気がするが、フーリエ変換ベースのアルゴリズムだったのか気になる
フーリエ変換の時間-周波数双対性、ここでは空間-周波数双対性を示すとても良い例だ
フーリエ変換の数学は変換する「方向」を気にしないので、時間/周波数で似て見える関数は、周波数/時間空間でも似たフーリエ変換を持つ
この場合、猫の周波数プロットを女性の空間プロットに埋め込むと、女性画像のフーリエ変換に猫が現れ、その逆も成り立つ
とてもクールで興味深いステガノグラフィの応用だ
違法画像を普通の画像の中に隠したいなら、周波数領域に変換して別の画像に合成すればよい。受け手が戻し方さえ知っていれば、検出されにくい秘密の画像伝送手段になりうる
相手が何を探すべきか知らなければ検出は難しいだろうが、知っていれば簡単だろう
隠し画像をワンタイムパッドと組み合わせれば、ノイズと区別できなくなるのではないか。非可逆圧縮画像ではノイズが自然に想定されることもある。誰かがすでに試しているのか気になるし、教えてもらえない限りたぶん永遠に分からないだろう
Aphex Twin などは似たような面白いトリックを使って、あるトラックのオーディオスペクトログラムに奇妙な顔が現れるようにしていた: https://news.ycombinator.com/item?id=8509105
MetaSynthは90年代後半から存在していて、オーディオの時間領域サンプルと周波数領域画像を相互変換し、Photoshop風の画像フィルタと組み合わせる
https://uisoftware.com/metasynth/
記事は読み進めるほどどんどん良くなる
周波数領域を画像圧縮に使えることに今まで気づかなかったのが信じられない。見てしまえばあまりにも当然だ。画像圧縮アルゴリズムの大半はこういう仕組みで動くのか? 周波数領域で弱い部分をただ削る方式なのか?
その通り。MP3、Ogg-Vorbis、JPEGはすべてこの方式で動く
どの周波数を残すかの重み付けはおそらく心理音響モデルに基づくのだろうが、大ざっぱに言えば文字どおり高次の周波数情報を捨てている
DCTはより複雑な画像圧縮や動画圧縮アルゴリズムの下位ステップとしてもよく使われる
たとえばまずディテールの多い画像の一部領域を見つけ、その領域にDCTを適用してより多くのスペクトルを残し、他の領域にも同じことをしながらスペクトルを多めまたは少なめに残す。動画圧縮アルゴリズムで見たことのある量子化パラメータが、まさにこの動作に影響する
通常は高周波を完全に消すのではなく、より少ないビット数で符号化する
画像は真の意味で帯域制限されているわけではないので、周波数領域だけで完全に表現することはできない
そのため小さなブロック単位に分けて、周波数領域と空間領域の予測子を混ぜて符号化するという折衷が行われる。それでも要点はだいたい合っている
問題の大半は鋭い境界から生じる。こうした境界を表現するには無限に多くの周波数が必要なので、一部を省くとぼやけやリンギングアーティファクトが生じる
もう一つの理由は、帯域制限信号は無限に繰り返されるが、現実の画像はそうではないという点だ。写真の左側にあるものが右側に何があるかを必ずしも予測してくれるわけではない
さらに多くの要素がある。単に周波数を捨てるだけでなく、分散の小さいデータをより効率的に符号化できることも重要だ
高周波情報がノイズだからというだけでなく、一般に振幅そのものもより小さい
JPEG 2000はさらに奇妙だ。これはウェーブレット変換を使う
JPEG 2000ファイルは途中で切っても、より低解像度の画像を復元できる。あるファイル長を下回ると色情報が消え、画像はグレースケールになる
猫が左上にもっと偏っていたら、このデモはここまでうまくいかなかった気がする
DCTでは大きな低周波成分が多く生じるので、猫が左上付近にいると、その成分が猫を覆い隠してしまうだろう
位置と周波数の量子力学的表現、つまり hbar を考慮した位置と運動量の表現では、このように異なる二つの関数を一つに押し込むことはできない
位置に依存する位相だけが異なる関数同士も、それぞれ異なる量子状態だからだ