QRコードをつくってみる5
データを配置した状態で一方の色のモジュールが極端に多かったり、
位置検出パターンに類似した模様があると、読み込みに支障をきたす
恐れがあります。
これを防ぐためにQRコードでは8種類のマスクパターンを用意し
その中で最適なものを選ぶようにしています。
マスクをかける範囲は位置検出パターンやタイミングパターン、形式情報
等の機能パターンを除く範囲、すなわちデータコード部です。
マスクは下表の通り8種類あり、マスクパターン参照子として3bitの2進数
あらわします。
(i,j)はそれぞれ行・列を意味し各条件を満たすモジュールにおいて
ビットを反転させます。
マスクパターン参照子 | 条件 |
---|---|
000 | (i+j) mod 2 = 0 |
001 | i mod 2 = 0 |
010 | j mod 3 = 0 |
011 | (i+j) mod 3 = 0 |
100 | (( i div 2)+(j div 3)) mod 2 = 0 |
101 | (ij) mod 2 + (ij) mod 3 = 0 |
110 | ((ij) mod 2 +(ij) mod 3) mod 2 = 0 |
111 | ((ij)mod 3 + (i+j) mod 2) mod 2 = 0 |
例えば、マスクパターン0では...
(20,20)の場合、 (20+20) mod 2 = 0 なので ビットを反転させます。
(19,20)の場合、 (20+19) mod 2 = 1 なのでビットを反転させません。
前項で計算した8つのマスクパターンのどれを選択するかを決定するために
結果の評価を行います。
それぞれのマスクパターンの結果に対して以下の表に示す特徴に対して失点を課し、
最も合計失点の少ないパターンを採用します。
なお評価は機能パターンを含むシンボル全体に対して行います。
特徴 | 評価条件 | 失点 |
---|---|---|
同色の行/列の隣接モジュール | モジュール数=(5+i) | 3+i |
同色のモジュールブロック | ブロックサイズ 2×2 | 3 |
行/列における1:1:3:1:1(暗:明:暗:明:暗)のパターン | 40 | |
全体に占める暗モジュールの割合 | 50±(5+k)%~50±(5+(k+1))% | 10×k |
筆者注:マスク評価の問題
筆者はこのマスク評価のルールについて困っておりました。
というのも上記通りに評価してもJISの図やP-touch editorで得られる結果と異なる
(もう一ついえばJISとP-touch editor間でも異なる!)ためでした。
試行錯誤の結果、下記でJISの2つの実例(図1と付属書8図2)と同じになったのでとりあえずこれを採用することとしました。
(間違えている可能性大ですが)
評価するパターンはデータおよび誤り訂正語部のみとし位置検出パターン・タイミングパターンは空白のままとする。
(イメージ)
2004.12.26追記
#JIS X0510(2004)ではマスクの評価方法が少し変わりました。
詳細はJIS X0510(2004)と(1999)の比較参照ください。
逆にJIS X0510(1999)の付属書8の結果とJIS X0510(2004)の付属書Gの結果が
マスクパターン参照子が異なっている結果となっていることから、やはりマスク
パターン参照子は「極端な場合だけ省ければよい」という解釈で問題ないと思う
というのがひとつの結論なのかもしれません。
サンプルではマスクパターン 011 を選択しました。
次ページ:形式情報
前のページ
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
次のページ