2017-01-17 13 views
2

私は現在、下記のようにQRコードを読み取ることができるスキャナが必要な状況に陥っています。これが問題を提起する理由Androidで低コントラスト(3D)のQRコードを読む

Printed QR codes

あなたはすぐに見ることができます。 「通常の」QRコードは、コントラストを最大にするために、通常、白い背景(またはそれの変形)上に黒く印刷されています。これらの「印刷された」QRコードはほとんど提供しません。私はQRコードとバックグラウンドのできるだけ多くの違いを表示するためにこれらを最適化しようとしましたが、これは実際に私の歯車の中にはありません。私はアウトラインを抽出するために特定のフィルタを適用するためのいくつかのOpenCVリファレンスを見つけましたが、結果が多く残されていることは恐れられます。

enter image description here 最後の2つの画像は、コンピュータの視覚にとどまらず、人間の目でほとんど認識できません。理想的な状況では、最後の画像は完全に白く、ほぼ完全に黒いQRコードでなければなりません。

スキャナの実際の実装に関して、私は既に下記のSDKを試しましたが、QRコードからの応答が得られませんでした。

  1. Mobile Vision APIは(Googleのサービスを再生する)
  2. ZXing SDK
  3. Anyline SDK
  4. ZBar

私の質問は、要するに、次のとおりです。

私ができるフィルタリングのいくつかの種類がありますそれはQRコードをより読みやすくするか、そうであるようにする私はフィルタを使用する代わりに他の方法を使用します。

+0

コントラストをさらに上げてから、イメージを反転してください。結果画像をダウンロードし、Paint.NETでコントラストを100にして反転させ、QRコードを自分の電話機(Mandochef)でスキャンしました。 – Martheen

答えて

0

私は個人的には、以下のステップしようとするだろう:のみ色空間からLチャンネルを抽出this

  • を使用してラボに色空間

    1. 変更を。

    2. 使用CLAHEなくequaliseHist

    3. 使用します(B & Wに画像または取得)輝度に変換した後QR

  • 0

    を検出れる方法あなたが強力が必要になりますバイナリゼーションフィルタ - 私はjavaCrライブラリで実装されているSauvolaバイナリゼーションをお勧めします: https://sourceforge.net/p/javaocr/source/ci/master/tree/core/src/main/java/net/sourceforge/javaocr/filter/SauvolaBinarisationFilter.java

    (プレビュー画像からの使用方法を示すアンドロイドのデモがあります)

    このフィルタは、騒々しい不均一な照明状態で本当にうまく動作します。また、50x50のウィンドウで作業しているにもかかわらず、かなり高速です(実際には、このフィルタにはウィンドウサイズは関係ありません)。

    関連する問題