![見出し画像](https://assets.st-note.com/production/uploads/images/170374039/rectangle_large_type_2_d5240828aaa6072d84f1e0e35d46dbad.png?width=1200)
Maxiコードの読み取りの仕組み
Maxiコードを読み取る仕組みについて
マイナー過ぎてネットで調べても出てこないんじゃないかな…
Maxiコードには以下のようなパターンが印字されています。
![](https://assets.st-note.com/img/1737041406-Jf9kn4dTSy1EwHsFKtZjbhie.png?width=1200)
特徴的なのは中心にある丸いファインダーパターンです。
![](https://assets.st-note.com/img/1737041434-Ucq9e3zHBGsXuKywFECxO8SL.png)
このファインダーパターンは同心円なので、中心を通るようにスキャンすれば、
必ず1:1:1:1:1:1:1:1:1:1:1の比率で白と黒を検出できます。
![](https://assets.st-note.com/img/1737041493-wIbZ85o1rlmYe0QiF4jtNUTP.png)
いくつかの方向からスキャンすれば、ファインダーパターンは見つけられると思います。
![](https://assets.st-note.com/img/1737041510-0nYADNwtES6ILoXM5CKpRi8m.png)
回転しても同じように見えるところがこのファインダーパターンの強みですね。
しかし、この後はどうしましょう。
一体何を見つければいいのでしょうか…
概念図を見てみると…
Orientation patterns
これを見つけると向きがわかりそうですね。
![](https://assets.st-note.com/img/1737041528-EIys1QdKN3BkOj2Lxv5apiYJ.png?width=1200)
しかし、これは難しい…
◎ じー(´◉ω◉` )
同心円を増やしてみる
![](https://assets.st-note.com/img/1737041562-1pM6PhRNdSKvbOcQkGHxsVue.png?width=1200)
ちょっとずらしてみる
![](https://assets.st-note.com/img/1737041582-u94jSZydGHnbFQrMDJ1z8kWo.png?width=1200)
あ、円周上に全てのオリエンテーションパターンが乗っかった
これは行けちゃうな~( ̄ー ̄)ニヤリ
オリエンテーションパターンは6箇所あるので円周上を60°ずつサンプリングすれば、白か黒かわかります
一番内側の円で言うと、左上から時計回りに、黒、白、黒、黒、白、黒
他の2つも同じように算出して、黒が3つあるのが左上に来るように回せば正面向きになります。
ここまでくると、1モジュールあたりのピクセル数(PPM)と回転が既知なので、規格にのっとってサンプリングしていけば、黒、白、黒…のような全ての印字パターンを把握することが出来ます。
最後に黒、白、黒…のパターンを0,1,0のようにビット変換して復号化すると文字列が取得できます。
同心円って面白いですね~
いいなと思ったら応援しよう!
![わた](https://assets.st-note.com/production/uploads/images/169423765/profile_a6f3ba365e20597e4b58c09e370e8465.png?width=600&crop=1:1,smart)