3次元構造のコードについて調べてみた

11 分前
読了時間: 8分
キタさんです、こんにちは。
突然ですが、「立体物で、形状そのものが情報を表しているもの」というと想像がつくでしょうか?
現実に存在するものとしては、以下のようなものをイメージしてみてください。
オルゴール:突起の位置や大きさで音階、音の大きさを表現しているといえます。
DNA:1次元の配列だけでなく、遺伝子の紐の折りたたまれ方そのものでも異なる情報を表しているそうです。
SF映画などでも、一見不思議な構造をしている立体物が重要なデータを表しているシーンなどはよく登場します(異星人からのメッセージ、目的地を示す地図とか)。
今回はそのようなロマンある構造物に思いを馳せながら、実用的な3次元の情報構造物について調査した内容をご紹介します。
1. 3次元構造を持つコードとは?
バーコードを積み上げたら2次元コードになる
QRコード等の2次元コードは業務システムでもよく扱います。
今回はその延長でふと浮かんだ疑問を調べてみました。「2次元コードがあるなら、3次元コードもあるのでは」という単純な発想です。
2次元コードには、実は2つの系統があります。QRコードやData Matrixのような「マトリックス型」と、バーコードを縦に積み重ねた「スタック型(積層型)」です。スタック型の代表格が PDF417 です。

PDF417は、名前の由来は Portable Data File の頭文字と、「4本のバーと4つのスペースで17モジュール」という構成にちなんだ「417」だそうです。
運転免許証や航空券の搭乗券などで実際に使われています。
PDF417は、1次元のバーコードを縦に積み上げることで2次元のコードになった、という成り立ちを持っています。ここで素朴な疑問が浮かびます。
1次元を積み上げて2次元になったのなら、2次元を積み上げれば3次元になるはずではないでしょうか。
QRコードを積み上げてみると何が起きるか
実際にQRコードを重ねてみることを想像すると、すぐに2つの問題にぶつかります
問題1: 内部が見えない
一番上の層は、当然ながら下の層を完全に覆い隠します。カメラで撮影する光学的な読み取りは、物体の表面しか見ていません。
「透明な層にすればいいのでは」と考えたくなりますが、QRコードは暗いモジュールと明るいモジュールのコントラストによって成立しています。層を透明にすると下層と重なって見えてしまい、どちらの層のどのモジュールを見ているのか判断が非常に難しくなります。
内部を透かして見るには、X線やCT、テラヘルツ波のように材料を透過する波長を使う専用の装置が必要になります。
問題2: ラベルにならない
2次元コードの最大の強みは、印刷して貼れることにあります。ところが層を重ねて厚みを持たせてしまうと、ラベルとしては邪魔になってしまいます。
実は「情報量を増やしたいだけなら、平面のまま増やせばいい」という抜け道がすでに規格として存在します。
QRコードには分割(連結)QRコード、いわゆる Structured Append という仕組みがあり、最大16個まで分割・連結できます。
物理的に積み上げなくても容量は増やせるので、わざわざ立体にする必然性は薄いことになります。
それでも調べてみると、「本当にQRコードを積み上げた」研究がいくつか見つかりました。次の章で紹介します。
2. 見つけたもの
本当に積み上げた例1: Two-Layer QR Codes
2019年にIEEEで発表された Two-Layer QR Codes は、白黒モジュールの層の上に、透明部分を含む層をもう1枚、空隙を挟んで重ねたQRコードです。視差を利用しており、見る角度によって上下層の重なり方が変わるため、左から見たときと右から見たときで別のメッセージが読めるという仕組みになっています。
ただし、これで増えたのは容量ではなく視点の選択肢が1つ増えただけです。層を重ねても容量が倍になるわけではなく、また、構造上複数層を重ねることは難しそうです。
本当に積み上げた例2: QRコードを「爆発」させる
もう1つ、QRコードを数百個の微小要素に爆発(explode)させ、3Dプリント部品の内部に立体的な雲のように分散配置するという研究があります。
読み取りにはmicro-CTスキャナを使い、正しい向きから見たときだけ本物のQRコードが浮かび上がり、それ以外の向きからは散らばった点しか見えません。
しかし、この形式の目的は容量の増加ではなく真贋判定になります。
この事例からわかるのは、透視装置さえ用意すれば3次元の符号は成立するということです。
積み上げを別の軸で実現する1: JAB Code(色)
物理的に層を重ねる代わりに、「レイヤーを色で表現する」という発想もあります。JAB Codeはその代表例です。

JAB Codeは、2016年頃に開発されたカラーの2次元コードです。
仕組みはシンプルで、1モジュールが白黒2値なら運べる情報は1ビットですが、これを8色にすると1モジュールで3ビットを表現できるようになり、同じ面積で約3倍の情報量になります。
白黒のQRコードを3層積めば1マスあたり3ビットになりますが、JAB Codeはそれと同じことを平面のまま色というチャンネルで表現しています。
懸念点もあります。印刷に使うインクや用紙によって発色は変わりますし、読み取り時も照明によって色がずれたり、経年で色が変化することも考えられます。
白黒2値のコードはこうした環境変化に強いのですが、8色を正確に判別するには復号側が色空間を正しく解釈できる環境が必要です。
積み上げを別の軸で実現する2: アニメーションQRコード(時間)
もう1つの方向性が、時間軸を使う方法です。
1枚のQRコードにすべてのデータを詰め込むのではなく、複数のQRコードを動画のように連続表示し、カメラで撮り続けて元のデータを復元します。層を空間方向ではなく時間方向に積み上げるイメージです。
実装例として、Go言語で書かれた TXQR があります。単純に複数のQRコードを順番に繰り返し表示するだけだと、1フレームでも撮り逃すと次の周回まで待つことになってしまいます。
TXQRはここにfountain code(噴水符号)、具体的にはLT符号を採用することでこの問題を解決しています。
アニメーションQRコードは、暗号資産のオフライン署名データの受け渡しなど、ネットワークに繋げない端末間でのデータ移送に使われているそうです。
こちらの最大の問題は印刷できないことです。
読み取る側も静止画ではなく動画撮影が必要になり、フレームレートのずれや手ブレの影響を受けやすくなります。
3. 本当の3次元コードを実現するにはどのような環境が必要か
QRコードは紙でもプラスチックでも金属でも、身の回りにあるあらゆる素材に印刷できます。媒体を選びません。
ところが立体的にデータを書き込む方式となると、現代の技術では装置だけでなく、書き込まれる対象=媒体そのものが専用に設計・製造されたものが必要になってきます。実例を見てみます。
多層光ディスク(Blu-ray Disk)は身近な例です。Blu-rayは記録層を積み重ねることで容量を伸ばしてきました。1層で25GB、2層で50GB、3層で100GB、4層で128GBにもなります。
ただしこの容量は、各層を精密に積層した専用構造のBD-R/BD-RE基板があって初めて実現します。一般のプラスチック板や紙には書き込めません。書き込む側もBDXL対応の追記ドライブが必要で、一般的なノートPCのドライブでは対応していないことも多いです。
透明な立体物そのものに情報を書き込む、さらに特殊な例もあります。ホログラフィックデータストレージという感光材料の内部に多数のホログラムを重ねて記録する技術や、Project SilicaというMicrosoftによる石英ガラス内部にレーザーでデータを書き込む研究などがあります(非常にSFチックで、ロマンがあります)。
これらに共通するのは、媒体・書き込み装置・読み取り装置の3つがすべて専用品でなければ成立しないということです。QRコードのように「その辺の紙に印刷してスマートフォンで読める」ものは1つもありません。
4. 参考: 他の方法でデータを表現する方法
平面や立体という軸以外にも、コードに使える物理量を探している研究や製品があります。簡単に紹介します。
Bokode: 直径3mmのLEDとレンズを使い、出射する光線の角度方向に情報を載せる技術です。カメラをわざと無限遠にピントを合わせ、ボケた像として読み取ります。
Acoustic Barcodes: 表面に刻んだノッチの列を爪で擦ると固有の波形が鳴り、接触マイク1個でIDに復号できます。電源も不要です。
カメレオンコード: CMYK4色の四角を並べる日本発のカラーコードです。複数ラベルを高速で一括読み取りできる点が特徴で、棚卸し業務などで実運用されています。
物体指紋: 鋳造や圧造の過程で不可避に生じる表面の微細な凹凸をカメラで撮影し、個体識別に使う技術です。情報を意図的に刻むのではなく、製造時に偶然できた模様をそのままIDとして利用します。
まとめ
「1次元を積み上げて2次元になったのだから、2次元を積み上げれば3次元になるはず」という発想は自然な思いつきでした。
しかし調べていくと、実際に積み上げた時に必要になるのは、書き込む媒体と読み取る装置の両方に求められる専門性だとわかりました。
結局のところ広く選ばれるコードは、書き込みやすく読み取りやすいものだと気づきます。
人間は昔から、紙や本、画面など、2次元の情報デバイスに多く触れてきました。
人間が読みやすいデバイスにコードを追加するとなれば、やはり2次元が最適なのかもしれません。
個人的には、現代で本当の3次元コードを活用できるのは、重さや空間などの制約がないデジタル空間だと思います。
QRコードがこれほど普及しているのは、容量が優れているからではなく、紙でもどこでも印刷でき、復号できるカメラがすでに誰のポケットにも入っていたからだと思います。
3次元コードが当たり前の存在になるとすれば、それはアルゴリズムの進歩以上に、それを書き込み読み取る技術自体が一般に普及したときでしょう。











コメント