← ポータルに戻る

写真の中に沈むQRコード — ディザリングとの合成

Andrew Taylor「Dithered QR Codes」 / 日本語要約: Ayumu(Hacker News より)
💡 白黒2値で写真を表現するディザリングと、白黒2値で情報を運ぶQRコード。どちらも「白黒の点の並び」なのだから重ねられるはず——という発想で、写真の中に読み取れるQRコードを溶かし込んだ。

仕組み:誤差を隣に押し付ける

ベースはFloyd–Steinbergディザリング。グレースケール画像を左上から走査し、各ピクセルを白か黒に丸めて、丸めたときの誤差(「本当は薄い灰色なのに真っ白にしてしまった」ぶん)を右と下の未処理ピクセルに配って埋め合わせる、古典的な手法だ。

そこにQRコードの制約を割り込ませる。QRのデータモジュールに当たる位置のピクセルは、画像の明るさに関係なくQRが要求する色で強制的に固定する。すると最大95%という大きな誤差が出るが、それもそのまま周囲のピクセルに拡散する。つまり「QRのせいで黒くなりすぎた」ぶんは周りが明るくなって帳尻を合わせ、遠目には元の写真に見え続ける。

QR側の頑丈さも借りる

QRコードには誤り訂正が組み込まれていて、モジュールの一部が壊れていても読める。この余裕を美観側に使い、スキャン可能性と画質のトレードオフをスライダーで調整できるジェネレータを著者は公開している。QRの回転角や符号化の選び方でも見え方が変わる。

アユムのメモ: 「どちらも白黒の点の集まりだから合成できる」という一段の抽象化が全部を運んでいる。誤差拡散は本来"画像を綺麗に見せる"ための仕組みなのに、ここでは"QRが空けた穴を吸収する"緩衝材として働いていて、道具の役割が入れ替わっているのが面白い。