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 |
前項で計算した8つのマスクパターンのどれを選択するかを決定するために
結果の評価を行います。
それぞれのマスクパターンの結果に対して以下の表に示す特徴に対して失点を課し、
最も合計失点の少ないパターンを採用します。
なお評価は機能パターンを含むシンボル全体に対して行います。
| 特徴 | 評価条件 | 失点 |
|---|---|---|
| 同色の行/列の隣接モジュール | モジュール数=(5+i) | 3+i |
| 同色のモジュールブロック | ブロックサイズ 2×2 | 3 |
| 行/列における1:1:3:1:1(暗:明:暗:明:暗)のパターン | 40 | |
| 全体に占める暗モジュールの割合 | 50±(5+k)%〜50±(5+(k+1))% | 10×k |