マトリックスの背後にあるエンジニアリング
平均的なユーザーにとって、QR コードは白黒ピクセルの乱雑な正方形にすぎません。しかし、エンジニアリングの観点から見ると、デンソー ウェーブの 1994 年の発明は、幾何学、信号処理、および誤り訂正数学におけるマスタークラスです。
単一の軸に沿った数値の文字列を単に表す標準的な線形バーコードとは異なり、QR コードは動的で自己修正される座標系です。ここでは、それらがどのように機能するか、構造マーカーがカメラの位置をどのように調整するか、そしてひどい状況下でも読み取り可能に保つための高度な数学の背後にある正確な技術ロジックを示します。
1. 方向の幾何学: ファインダーと位置合わせパターン
QR コードの最も認識可能な部分は、隅にある 3 つの大きな入れ子になった正方形です。これらは技術的にはファインダーパターンと呼ばれます。
\テキスト ファインダーパターン比率 (任意の角度全体): 【ブラック】 【ホワイト】 【ブラック】 【ホワイト】 【ブラック】 1 : 1 : 3 : 1 : 1 \
ファインダー パターンがちょうど 3 つあるのはなぜですか?
2 次元の座標幾何学では、空間内の平面のスケール、回転、および傾きを定義するには、正確に 3 つの異なる点が必要です。
- 回転 (どちらが上か): 4 番目の角 (右下) にはパターンがないため、スキャナーは画像が上下逆か横向きかを即座に認識し、データ グリッドをデジタル的に回転します。
- スケール (距離): 3 点間の物理的距離により、コードがどのくらい離れているかがカメラ センサーに正確に通知され、ソフトウェアがそれに合わせてデジタル グリッドをスケールできるようになります。
- 遠近法/傾き (角度): QR コードを鋭い側面角度からスキャンすると、3 つの点は完全な直角三角形ではなく不均一な三角形を形成します。スキャナは、データを読み取る前に、歪んだ角度を使用して数学的に「デスキュー」し、画像を平坦化します。
1:1:3:1:1 のスキャン比
ファインダー パターンは、ネストされた $7\times7$ モジュールの正方形として構築されます。レーザーまたはカメラ センサーがこれらの正方形の中心をどのような角度で通過しても、黒、白、および黒のモジュールの比率は数学的に常に一定です: 黒 1 部、白 1 部、黒 3 部、白 1 部、黒 1 部。
この特定の幾何学的比率がテキストやグラフィックスで自然に発生することはほとんどないため、カメラはミリ秒単位で複雑な視覚的背景から 3 つの角を分離できます。
内側の小さな正方形は何のためにあるのでしょうか?
QR コードのバージョン サイズが大きくなるにつれて (バージョン 2 からバージョン 40 まで)、配置パターン と呼ばれる、より小さな単一のネストされた正方形が組み込まれます。
QR コードが曲面 (ソーダ缶など) に印刷されたり、しわのある紙のチラシ上で物理的に歪んだりすると、グリッド全体が歪みます。位置合わせパターンは、局所的なアンカーとして機能します。スキャナはそれらを使用して、歪んだ表面全体の座標グリッドを動的に再調整し、1 つの角の歪みによってコードの残りの部分の可読性が損なわれないようにします。
2. データのエンコード方法: バイナリとシリコンのマッピング
基本的に、QR コードはバイナリ コードを物理的に変換したものです。カメラのイメージ センサーは、光を吸収するダーク モジュールをバイナリ「1」として登録し、光を反射するライト モジュールをバイナリ「0」として登録します。
レンダリング前に、入力データ (URL など) は次の 4 つのエンコード モードのいずれかで処理されます。
- 数値: 生の数値に最適です (3 桁を 10 ビットにマッピングします)。
- 英数字: 大文字、数字、および基本的な記号 (2 文字を 11 ビットにマッピング) をサポートします。
- バイト: 標準 UTF-8 エンコーディング (各文字は標準の 8 ビット バイナリ表現に変換されます)。
- 漢字: 全角日本語文字用に最適化されています。
https://ez-qr-generator.com のような標準 URL の場合、ジェネレーターはバイト モードを使用します。文字列は 8 ビット バイトのシーケンスに変換され、右下隅から開始して構造パターンをスキップしながら上下にジグザグにグリッド上に物理的にマッピングされます。
3. リードソロモン誤り訂正: 壊れたデータの再構築
QR コードの特徴は、部分的に破れていたり、汚れていたり、隠れていたりしてもスキャンできることです。この信頼性は、リードソロモン誤り訂正 によって支えられています。これは、深宇宙探査機 (ボイジャーなど) からデータを送信したり、傷のあるオーディオ CD で音楽を再生し続けるために使用されるのとまったく同じ多項式ベースの数学です。
QR コードが生成されるとき、システムは URL を書き込むだけではありません。バイナリ データ バイトを複雑な数学的多項式の係数として扱います。これらの係数を使用して、ジェネレーターは余分な冗長な「パリティ バイト」を計算し、データの末尾に追加します。
選択したエラー訂正レベルに応じて、これらのパリティ バイトがグリッドの異なる割合を占めます。
- レベル L (低): 失われたデータの最大 7% を回復します。
- レベル M (中): 失われたデータの最大 15% を回復します。
- レベル Q (四分位): 失われたデータの最大 25% を回復します。
- レベル H (高): 失われたデータの最大 30% を回復します (ロゴが中央に配置されたカスタム スタイルのコードに強く推奨されます)。
携帯電話が破損したコードをスキャンすると、読み取りソフトウェアは残ったピクセルを多項式に入力します。 リードソロモン コード の数学的特性により、スキャナーは、きれいな視覚イメージを必要とせずに、欠落している変数を解決し、破損したピクセルの正確な座標を特定し、元の URL を数学的に再構築できます。
4. 隠されたステップ: 数学的マスキング パターン
QR コードに当然のことながら、すべて黒またはすべて白のモジュールの途切れることのない大きなブロックが含まれている場合、光学スキャナはグリッド上の位置を簡単に見失ってしまう可能性があります。スキャナでは、内部読み取りクロックの同期を保つために、暗モジュールと明モジュールの間で頻繁に移行する必要があります。
単色の大きなブロックを防ぐために、QR コード仕様では 8 つの数学的マスキング パターンを採用しています。
\テキスト
マスキング式の例 (マスク 0):
(行 + 列) % 2 == 0 の場合、ピクセルに XOR を適用します。
ジェネレーターは、XOR 演算 (数学的なグリッド式に基づいて指定されたピクセルを反転します) を使用して、8 つのマスキング式すべてを通じて生の QR コードを実行します。
どのマスクを使用するかを決定するために、ジェネレーターは厳密なペナルティ ポイント スコアリング システムに対して 8 つの結果を評価します。
- ペナルティ 1: 行または列に同じ色のモジュールが 5 つ以上連続している場合は減点します。
- ペナルティ 2: 同じ色の $2\times2$ ブロックがある場合は、減点します。
- ペナルティ 3: 1:1:3:1:1 ファインダー パターンに似たパターンに対して減点します (スキャナーの混乱を避けるため)。
- ペナルティ 4: 黒対白モジュールの全体的な比率が完全な 50/50 の分割から大幅に逸脱している場合は減点します。
ペナルティ スコアが最も低いマスクがグリッドに永続的に適用されます。次に、その特定のマスクの識別子 (0 ~ 7) がファインダー パターンの隣にあるメタデータ モジュールに直接書き込まれ、マスクを反転して基礎となるデータを読み取るためにどの数式を使用するかをスキャン アプリに正確に指示します。