Qraft (クラフト)

二値化

読み: にちか

二値化は、グレースケール画像の各ピクセルを、閾値 (しきいち) を基準に白 (明) か黒 (暗) の 2 値に変換する画像処理です。閾値より明るいピクセルは白、暗いピクセルは黒に分類されます。QR コードのデコードにおいて、モジュールが「暗い」か「明るい」かを判定する核心的なステップです。

二値化の精度は、閾値の設定方法に大きく依存します。固定閾値 (画像全体に同じ値を適用) は、均一な照明条件では有効ですが、影や照明ムラがある環境では一部のモジュールが誤判定されます。適応的閾値 (画像の局所領域ごとに閾値を動的に計算) は、照明条件が不均一な環境でも安定した二値化を実現します。現代のスマートフォンの QR コードリーダーは、適応的閾値を採用しています。

現代のスマートフォンの QR コードリーダーが適応的閾値を採用している理由は、次の違いにあります。

観点固定閾値適応的閾値
閾値の決め方画像全体に同じ値を適用する画像の局所領域ごとに動的に計算する
照明が均一なとき有効に働く安定して二値化できる
影や照明ムラがあるとき一部のモジュールが誤判定される局所ごとの閾値で安定した二値化ができる
影のある QR コード画像を固定閾値と適応的閾値で二値化した結果の違い影のある画像固定閾値適応的閾値
右側に影がかかった画像では、固定閾値だと影の部分が黒に潰れ、適応的閾値なら模様が保たれます。

二値化が困難になるケースとして、低コントラストの QR コード (薄い色のモジュール)、逆光環境 (QR コードの背後に強い光源)、反射 (光沢のある表面に印刷された QR コード)、モーションブラー (移動中のスキャン) があります。エラー訂正機能が一部の誤判定を補償しますが、根本的にはコントラストの高い QR コードを適切な環境で印刷・掲示することが最善の対策です。