チラシを撮った写真、スクリーンショット、送ってもらった画像——その中のQRコードが読み取れないことは意外とよくあります。実はQRコードには最初から「壊れても直せる」仕組み(誤り訂正)が組み込まれており、画像側を少し整えてあげるだけで読めるようになるケースが多くあります。この記事では、読めないQRコードが復元できる理由を誤り訂正・鮮明化・二値化・ブレ補正の順に一般向けに解説し、パラメータ調整のコツと「できないこと」も正直にまとめます。
1. なぜ「欠けたQR」が読めるのか — 誤り訂正のしくみ
QRコード(ISO/IEC 18004)は、データをそのまま白黒のマス(モジュール)に並べているわけではありません。データにリード・ソロモン符号という誤り訂正用の冗長データを足してから並べています。これは「元のデータを復元するためのヒントを、あらかじめ余分に埋め込んでおく」仕組みで、CDの傷や衛星通信のノイズ対策にも使われてきた技術です。
どの程度の欠けまで直せるかは、QRコードを作るときに選ぶ誤り訂正レベルで決まります。
| レベル | 復元できる目安 | 主な用途 |
|---|---|---|
| L | 約7% | 汚れの少ない画面表示など |
| M | 約15% | 標準。一般的な印刷物 |
| Q | 約25% | 屋外や汚れやすい環境 |
| H | 約30% | ロゴ入りデザインQRなど |
つまり、写真の中のQRが多少汚れていても・欠けていても・一部隠れていても、誤り訂正の範囲内なら理論上は完全に復元できます。問題は、カメラの写りが悪いと「どのマスが白でどのマスが黒か」の判定を大量に間違えてしまい、誤り訂正の許容量をあっという間に使い切ってしまうことです。画像処理の役目は、この「判定ミス」を減らして誤り訂正が働ける状態に持ち込むことです。誤り訂正そのものの数学的なしくみは「QRコードの誤り訂正のしくみ」で詳しく解説しています。
2. 鮮明化 — コントラストと二値化
QRリーダーは最終的に、画像の各マスを「白か黒か」の2択に振り分けます。写真が暗かったり、照明ムラで灰色がかっていたりすると、この振り分けを間違えやすくなります。そこで効くのが次の2つの処理です。
コントラスト調整
明るい部分をより明るく、暗い部分をより暗くして、白マスと黒マスの差を広げます。薄く印刷されたQRや、逆光気味で全体が灰色っぽい写真に有効です。上げすぎると照明ムラまで強調されるので、プレビューを見ながら少しずつ動かすのがコツです。
二値化(しきい値処理)
各画素を「この明るさ(しきい値)より暗ければ黒、明るければ白」と機械的に2色へ割り切る処理です。しきい値の位置がすべてで、暗い写真ではしきい値を下げ、明るい写真では上げます。手動で探すのが面倒な場合のために、明るさの分布(ヒストグラム)から自動で最適なしきい値を推定する大津の方法という定番アルゴリズムがあり、当サイトのツールにも「自動判定」ボタンとして搭載しています。
3. ブレ・ピンボケ — アンシャープマスク
手ブレやピンボケの写真では、マスの輪郭がにじんで隣のマスと混ざってしまいます。これを軽減する代表的な処理がアンシャープマスクです。名前に反して「シャープにする」処理で、手順はシンプルです。
- 元画像を少しぼかしたコピーを作る
- 「元画像 − ぼかしコピー」の差分を取る(この差分がエッジ=輪郭成分)
- その差分を強度倍して元画像に足し込む
パラメータは2つです。半径はぼかしの大きさで、ブレの幅(にじみの太さ)に合わせます。小さなにじみに大きな半径を使うと不自然になります。強度は差分を足し込む量で、上げるほど輪郭が立ちますが、ノイズも一緒に強調されるため上げすぎは逆効果です。「半径をブレ幅に合わせてから、強度を少しずつ上げる」が基本手順です。
正直に書くと、アンシャープマスクは本当のブレ復元(デコンボリューション)ではありません。大きくブレた写真を完全に元へ戻すことはできず、「境界を立たせて白黒判定のミスを減らす」対症療法です。それでも、判定ミスが誤り訂正の許容量以下まで減れば読み取りは成功します。
4. それでもダメなら — パラメータスイープ(自動リトライ)
「しきい値をいくつにすれば読めるか」は、写真ごとに違ううえ、人間が1つずつ試すのは手間です。そこで有効なのがパラメータの総当たり(スイープ)です。当サイトのツールでは、次の組み合わせを自動で順番に試します。
- 二値化しきい値:自動判定(大津の方法)+ 80〜200 の複数段階
- 白黒反転:暗い背景に明るいコード(反転QR)への対応
- 回転:0/90/180/270度(鏡像や特殊な向きの保険)
1回の試行はわずかですが、数十通りを全部試すと合計では時間がかかるため、処理を小さな単位に分割して1フレームに1試行ずつ実行し、画面を固めずに進めます。読めた瞬間に停止して、成功したパラメータと誤り訂正レベルを表示します。
Free Tool 写真のQRコード復元ツールを使ってみる 鮮明化・自動リトライ・ブレ対応の3モード。画像はサーバーへ送信されず、ブラウザ内だけで処理されます。5. できないこと — 復元の限界
誤り訂正は万能ではありません。次のケースは画像処理でも復元できないため、撮り直しや作り直しが必要です。
- 三隅の位置検出パターン(大きな四角)が欠けている:リーダーがコードの位置と向きを特定できず、誤り訂正以前の問題になります。
- 誤り訂正の許容量(最大約30%)を超える欠損・遮蔽:レベルHでも約30%が上限です。半分隠れたQRは読めません。
- 解像度の絶対的な不足:1マスが1画素未満に潰れた画像は、情報自体が失われており拡大しても戻りません。
- 大きなブレ:マス数個分にわたるブレは、エッジ強調では回復できません。
読み取れない原因の切り分けや「そもそも読ませやすいQRの作り方」は「QRコードが読み取れない原因と直し方」にまとめています。
まとめ — パラメータ早見表
| 症状 | 試す処理 | 調整のコツ |
|---|---|---|
| 印刷が薄い・全体が灰色 | コントラスト+二値化 | しきい値は自動判定から始めて微調整 |
| 小さくて潰れ気味 | 拡大率+アンシャープ | 拡大してから輪郭を立てる |
| 手ブレ・ピンボケ | アンシャープ(半径・強度) | 半径をブレ幅に合わせ、強度は少しずつ |
| 白黒が反転している | 反転+二値化 | 自動リトライに含まれる |
| 汚れ・小さな欠け | 二値化+自動リトライ | 誤り訂正が働けばそのまま復元される |