ユーザーにフィードバックを提供したいのは素晴らしいことです。ユーザーが QR コードを見つけるのに「熱くなっている」ことを示すグラフィックを提供すると、コードを見つけて読み取るプロセスがより迅速かつスムーズになります。
すでに回答をお持ちのようですが、より堅牢なソリューションを提供したり、オプションを用意したりするために、次の 1 つまたは複数を試すことができます。
- N 回の反復を使用して、暗いピクセルを閉じてモーフィングします。結果として得られる四角いチェックボード パターンは、塗りつぶされた四角形により近くなるはずです。これは、DataMatrix (同様の 2D コード) が存在するかどうか、読み取り可能かどうかを判断するために使用した検出方法の一部でした。これが機能するかどうかは、あなたのバックグラウンドに大きく依存します。
- FFT を適用する前に、遠近歪みを減らすためにアフィン変換を見つけることを検討してください。FFT データの分析は、短縮のために周波数が少し広がっている場合は面倒です。
- ローカル バイナリ パターン (LBP) などのテクスチャ測定や、Law のテクスチャ メソッドなどの古い手法を使用して、適切な結果を得ることができます。運が良ければ、2D コードとチェッカーボード パターンの間のテクスチャ測定値のヒストグラムでわずかな違いを検出できる場合もあります。
- チェッカーボードのようなパターンの領域で、QR コードの隅にある 3 つのガイド機能を探します。SIFT/SURF のような方法を試すか、スケール スペースでテストされた限られた数の相関テンプレートを使用して、より単純な一致方法を実装することができます。
- スケール スペースといえば、画像ピラミッドを生成して、フル解像度の画像で正方形を探す手間を省きましょう。エッジを保持する方法またはエッジを保持しない方法を試して、ピラミッド内のより小さい画像を生成するか、または両方を組み合わせて生成することができます。
- カーネル処理を高速化するコードがある場合は、コーナー検出方法を試して、処理するデータ量を減らしてチェッカーボードのようなパターンを検出することをお勧めします。
- 四角い領域でグレースケール値の明確なバイモーダル分布を探します。紙の 2D コードはコントラストが低くても十分に読み取れますが、紙のラベルの 2D コードはコントラストがはっきりしている傾向があります。
- グレースケール値のバイモーダル分布を探すのではなく、勾配の大きさが非常に一貫しており、ほぼユニモーダルである領域を探すことができます。
- 読み取り可能な QR コードの最小/最大面積制限がわかっている場合は、上記の基準の 1 つ以上に一致するパッチの画像を確率論的にサンプリングできます: 勾配の大きさの 1 つのモード、コーナー ポイントのほぼ均等な間隔など。有望に見える場合は、別のランダムな位置にジャンプしますが、新しいパッチは以前に有望ではないと判明したわけではありません。
画像ピラミッドのメモリがある場合は、解像度を下げた画像で作業すると、多くのテストをかなり迅速に試すことができるため、有利になる可能性があります。
ユーザー インタラクションに関する限り、前処理中に「これは QR コードである可能性がある」グラフィックを複数回更新し、徐々に強く/緑色のグラフィック (またはその地域の文化に適した色) で信頼度を示すこともできます。 )。たとえば、テクスチャのパッチが QR コードである可能性が約 60% の場合、破線の境界線を持つ薄い黄緑色の長方形を表示できます。80% から 90% の確率で、より彩度の高い緑色の塗りつぶされた長方形を表示できます。約 100 ~ 200 ミリ秒ごとにグラフィックを更新できる場合、ユーザーは、スマートフォンを動かすなどの何らかのアクションが助けになっているのか、それとも害を及ぼしているのかを知ることができます。