Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
真っ黒なQRコードは本当に作れないのか
Search
1pp0
July 18, 2024
0
20
真っ黒なQRコードは本当に作れないのか
1pp0
July 18, 2024
Tweet
Share
More Decks by 1pp0
See All by 1pp0
もっと真っ黒なQRコードは作れないのか
1pp0
0
43
Placenoteで簡単共有AR
1pp0
0
2k
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
510
110k
A Philosophy of Restraint
colly
203
16k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Raft: Consensus for Rubyists
vanstee
137
6.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Facilitating Awesome Meetings
lara
51
6.2k
Practical Orchestrator
shlominoach
186
10k
It's Worth the Effort
3n
184
28k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
Gamification - CAS2011
davidbonilla
80
5.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Transcript
真っ黒なQRコードは 本当に作れないのか
1. 「真っ黒」なQRコードの目標 2. QRコードの仕様を確認 3. 「真っ黒」なQRコードを作る方法
最初に理論値を確認
真っ黒なQRコード? QRコードとして読み取れない事は自明
QRコードとして認識するために 白黒が割り当てられているセルがある 灰色の領域にデータ情報が格納される
理論値? QRコードの仕様に則って データが格納されていないため 読み取る事ができない
目標 QRコードの仕様に則って 可能な限り黒セルが多くなるような データ情報の作り方を求める
QRコード生成の仕様を確認
1. 格納データを二進数化して配置 2. マスク処理
格納データの要素 1. バージョン(QRコードのサイズ、1:21x21 ~ 40:177x177) 2. 誤り訂正レベル(L、M、Q、H) 3. マスクパターン参照子(0 ~
7) 4. モード(数字、英数字、バイナリ、漢字) 5. データコード(QRコード化する文字列) 6. 誤り訂正コード 1.格納データを二進数化して配置
各要素が配置される領域 ※ バージョン1(21x21)、数字モード、誤り訂正レベルLの場合) • 範囲内で設定可能 ◦ 誤り訂正レベル ◦ マスクパターン参照子 ◦
モード ◦ 格納文字数 • 自由に設定可能 ◦ データコード • 計算で導出されるため設定不可 ◦ 誤り訂正コード 1.格納データを二進数化して配置
誤り訂正レベル L:01 M:00 Q:11 H:10 1.格納データを二進数化して配置 マスクパターン 参照子(0~7) 0:000 1:001
〜 7:111 01001 → 計算省略 → 000110100001100
モード 数字:0001 英数字:0010 8bitバイト:0100 漢字:1000 1.格納データを二進数化して配置 格納文字数 41(最大) :0000101001 00010000101001
データコード 数字:101202…(41文字) 101 202 … 0001100101 0011001010 … 誤り訂正コード 格納文字列と誤り訂正レベルから算出
1.格納データを二進数化して配置
データコード及び誤り訂正コードを配置しただけでは、QRコードとして の読み取りに支障がでる場合があるため、8種類のマスクパターンを検証 し、その中で最も優れたパターンでマスク処理を行う。 2.マスク処理
2.マスク処理 特徴 評価条件 失点 同色の行/列の隣接 5連続+i 3+i 同色のブロック 2*2 3
ファインダパターン 40 全体に占める黒の割合 50±(5*k)%~50±((5*(k+1))% 10*k -40 -7 -3 マスク処理後の黒セルが99%の場合 k=9 → -90 以上の評価条件により、黒セルの割合が 極端に多くなるような「真っ黒」なQRコードは生成されない
QRコードが真っ黒になるマスクパターンは選択されない QRコードの生成アルゴリズムを改変し マスクパターンを固定して格納データを求めれば良い
格納データの導出 マスクパターン(001) 1100110011 → 819、1100110011 → 819、0011001100 → 204 …
バージョン:1 誤り訂正レベル:L マスクパターン参照子:1 モード:数字 データコード :81981920478081920720481 905120481981905130 真っ黒なQRコード理論値?
バージョン:1:バージョン2以降は「アライメントパターン」が挿入 誤り訂正レベル:L:誤り訂正レベルが低いほど格納可能な文字数が多い マスクパターン参照子:1 モード:数字 パラメータ選定理由 範囲内で設定可能な領域で 最も黒セルが多くなる組み合わせ
多分これが一番黒いと思います。
おまけ
誤り訂正領域等をある程度塗りつぶしても読み取れる
最も良いmaskを選択する処理を改変して固定値を設定