← ハシトシステム トップ English ツール ブログ ポスター

すべての処理はブラウザ内で完結します。画像がサーバーへ送信されることはありません。

画像を待っています

QRコードが写った画像を入れてください。入れるとすぐに復元を始めます。

1. 画像と操作

QRコードが写った画像を入れてください
クリックして選択/ドラッグ&ドロップ/Ctrl+V で貼り付け
サンプルで試す

下のQRコードは、このページの中で生成した実物です(内容はすべて https://hashitosystem.com/、括弧内は誤り訂正レベル)。実写で起きる劣化を加えてあります。「この画像で試す」を押すと、そのまま読み込んで復元を試せます。

読み込んだあとの進めかた

次にやること

詳細な操作(範囲指定・4隅指定・下ごしらえ)

1. 読めない範囲を指定する

元画像のプレビューをドラッグして、擦り跡・白飛び・影で潰れている範囲を囲ってください。その範囲のモジュールは値を推測せず消失として誤り訂正に渡されます。消失は位置が分かっているぶん、位置不明の誤りの2倍まで訂正できます。

2. 4隅を手で指定する

自動で格子が当たらないときの逃げ道です。下のチェックを入れてから、プレビュー上でQRコードの外周の角を左上 → 右上 → 右下 → 左下の順に4回クリックしてください。指定した四角形から射影変換で格子を作り、型番を総当たりします。

3. 画像の下ごしらえ

小さい画像は拡大すると1モジュールあたりの画素が増えて安定します。全体に薄い・白い擦り跡がある場合は平坦化(背景の明るさむらを割り算で除く処理)が効きます。変更したら「復元する」を押してください。

4. 処理の内訳

読み取れないときに試すこと:
読めない範囲をプレビュー上でドラッグして指定する(その範囲を消失として誤り訂正に渡します)
・自動で格子が合わない場合は4隅を手で指定する
・小さい画像は拡大率を上げる。全体に薄い・擦り跡がある場合は平坦化を有効にする
・撮り直せる場合は、明るい均一な光の下で、反射を避け、QRが画面の大部分を占めるように正面から撮る
・誤り訂正レベルが L のコードは全体の約21%までしか復元できません。それを超える欠損は原理的に復元できません

2. 復元の結果

まだ結果はありません。左で画像を読み込むと、ここに復元結果が出ます。

URLが含まれています。内容を確認のうえ、必要な場合のみご自身でブラウザに入力して開いてください。
行った処理

実際に走った処理だけを、走った順に並べています。

    復元したモジュール(クリックで黒/白を反転)
    黒モジュール 白モジュール 消失として扱った 手で修正
    読めないQRコードがなぜ復元できるのか(誤り訂正・鮮明化・二値化のしくみ)は、解説記事 「写真のQRコードが読めない…を復元する仕組み」で詳しく説明しています。

    写真のQRコード復元ツールについて

    スクリーンショットやカメラで撮った写真の中のQRコードが読み取れない——その多くは、擦れ・汚れ・白飛び・斜めからの撮影・低コントラストが原因です。本ツールは、市販のQRリーダーが捨ててしまう「どこが読めなかったか」という情報を最後まで持ち回り、リード・ソロモン符号の消失訂正に渡すことで、通常の読み取りでは届かない欠損からの復元を狙います。

    消失訂正で訂正能力が2倍になる

    リード・ソロモン符号は、1ブロックあたり n 個のコードワードのうち k 個がデータ、残り n-k 個が誤り訂正用です。ここで誤りの位置が分からない場合に直せるのは (n-k)/2 個までですが、位置が分かっている(消失)なら n-k 個まで直せます。ちょうど2倍です。

    たとえばバージョン2・誤り訂正レベル M のQRコードは、全44コードワードのうち16個が誤り訂正用です。位置が分からなければ8個までしか直せませんが、位置が分かっていれば16個——全体の約36%——まで直せます。レベル H なら28個、全体の約64%です。本ツールは、擦り跡や白飛びでモジュールの明暗を決めきれなかった場所を確信度で順位づけし、下位から順に消失として扱う個数を掃引します。「誤りを消失に置き換える」交換を最適な点まで自動で探すため、消しすぎて訂正能力を使い切ることも、消し足りずに誤りを残すこともありません。

    復元結果が正しいかを機械的に検算する

    推測で当てた値がたまたまデコードできてしまうと、間違った内容を「復元できた」と表示してしまいます。本ツールは3つの検算を行います。

    1. シンドロームがゼロになるか:リード・ソロモン復号後に符号として成立しているかを確認します。
    2. 訂正能力をどれだけ使い残したか:消失の個数が訂正能力ちょうどのとき、復号は「必ず成功」してしまい検算になりません。余力(使い残し)が2コードワード以上あるときだけ「検算済み」とします。
    3. 終端以降の埋め草が規格どおりか:データの終わりのあとに並ぶ 0xEC / 0x11 の繰り返しが一致するかを確認します。

    検算に通らなかった結果は破棄せず、「推測を含む」と明示したうえで解析案として提示します。内容が URL の場合は、開く前に必ず妥当性をご確認ください。

    斜めからの撮影と、位置検出パターンが欠けた画像

    斜めから撮った写真のQRコードは台形に写ります。平行四辺形しか表せないアフィン変換では格子が合わないため、3つの位置検出パターンの中心に位置合わせパターンの中心を加えた4点から射影変換(homography)を解き、正対に直してからモジュールを読み取ります。

    位置検出パターンが擦り跡に埋もれて2つしか見えない、1つしか見えない、という写真もあります。その場合は、見つかった1つからモジュールの大きさを求めて角の役割(左上/右上/左下)と型番と縮尺を総当たりする経路と、QRの外形四角形の4隅から格子を作る経路を試します。どの候補が正しいかはリード・ソロモン復号のシンドロームで機械的に判定できるため、候補を多めに出しても誤った結果を採用することはありません。それでも当たらない写真は必ずあるので、4隅を手で指定する操作も残しています。

    並列処理

    二値化条件の掃引・格子候補の評価・消失位置の掃引は互いに独立なので、Web Worker に分けて並列に実行します。ワーカーは Blob から組み立てるため、このページは1つのHTMLで完結したままです。ワーカー数は端末の論理コア数から決め(上限4本)、いずれかが検算まで通った結果を出した時点で残りを打ち切ります。Web Worker が使えない環境では、同じ処理を逐次で実行します(結果は同じで、時間だけ長くなります)。

    できること・できないこと

    消失訂正を使っても、訂正できるのは1ブロックあたり n-k 個までです。誤り訂正レベル L のコードは全体の約21%、M は約36%、Q は約51%、H は約64%が上限で、これを超える欠損は原理的に復元できません。また、消失の位置を画像から特定できない種類の損傷(周囲と同じコントラストのままモジュールだけが別の値に変わっているなど)は、消失として扱えないため訂正能力が半分に戻ります。復元できなかった場合は、どこまで進んだか(位置検出パターンの検出数・格子の一致率・消失として扱ったコードワード数)を「処理の内訳」に表示します。

    よくある質問(FAQ)

    画像はサーバーにアップロードされますか?

    いいえ。画像の読み込み・遠近補正・二値化・誤り訂正・復号まで、すべての処理はお使いのブラウザ内(Canvas と JavaScript、Web Worker)で完結します。画像や読み取り結果が外部のサーバーへ送信・保存されることはありません。名刺やチケットなど、他人に見せたくない画像でも安心してお使いいただけます。

    消失訂正とは何ですか?普通の誤り訂正と何が違うのですか?

    誤り訂正には「誤りの位置が分からない場合」と「分かっている場合」があり、後者を消失訂正と呼びます。リード・ソロモン符号では、位置が分からない誤りは (n-k)/2 個までしか直せませんが、位置が分かっている消失なら n-k 個まで直せます。つまり訂正できる個数がちょうど2倍になります。本ツールは、擦り跡や白飛びでモジュールが読めなかった場所を「消失」として記録し、その位置情報ごと復号器に渡します。市販のQRリーダーは読めなかった場所を捨ててしまうため、この差が復元できるかどうかの分かれ目になります。

    復元した結果が正しいかどうかは分かりますか?

    分かります。リード・ソロモン復号のあとにシンドロームがゼロになるか、誤り訂正の能力をどれだけ使い残したか、終端以降の埋め草が規格どおりかの3つを機械的に検算しています。訂正能力に余力を残して復号できた場合は「検算済み」と表示します。能力を使い切って復号した場合は、結果が元のQRコードと一致する保証がないため「推測を含む」と明示します。この区別は隠しません。

    斜めから撮った写真や、位置検出パターンが隠れた写真でも復元できますか?

    斜めからの撮影は、3つの位置検出パターンと位置合わせパターンの4点から射影変換(homography)を解いて正対に直してから読み取ります。位置検出パターンが欠けている場合は、1つだけ見つかったパターンからモジュールの大きさを求めて向きと型番を総当たりする経路と、QRの外形四角形から4隅を求める経路を試します。それでも駄目な場合に備えて、プレビュー上をクリックして4隅を手で指定する機能を用意しています。自動で当てられない写真は必ずあるため、手動の逃げ道は残しています。

    処理は速いですか?

    二値化条件の掃引・格子候補の評価・消失位置の掃引を Web Worker で並列に実行します。ワーカー数は端末の論理コア数から決め(上限4本)、いずれかのワーカーが検算まで通った結果を出した時点で残りを打ち切ります。Web Worker が使えないブラウザでは同じ処理を逐次で実行するため、結果は同じで時間だけ長くなります。

    小中学生向け 学習ポスター(無料配布)はこちら →