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
17
真っ黒なQRコードは本当に作れないのか
1pp0
July 18, 2024
Tweet
Share
More Decks by 1pp0
See All by 1pp0
もっと真っ黒なQRコードは作れないのか
1pp0
0
33
Placenoteで簡単共有AR
1pp0
0
2k
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
335
57k
Docker and Python
trallard
42
3.1k
Music & Morning Musume
bryan
46
6.2k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Unsuck your backbone
ammeep
669
57k
Scaling GitHub
holman
459
140k
GitHub's CSS Performance
jonrohan
1031
460k
Faster Mobile Websites
deanohume
305
30k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Making Projects Easy
brettharned
116
6k
Bash Introduction
62gerente
609
210k
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を選択する処理を改変して固定値を設定