9

私は、bmp画像をQRコード形式にエンコード/デコードするアルゴリズムを作成しようとしています(または、私の研究でそれを見逃した場合は、見つけてください)。私はガイド(Thonky)を使用してQRコードの基本を理解しようとしていますが、この問題を解決する方法がまだわかりません。具体的には、次のようになります。

  • データをバイナリとしてエンコードする必要がありますか、それとも数値の方が合理的ですか(各ピクセルの最大値が255であると想定)?

  • QRコードの構造化された追加機能に関する情報を検索しましたが、QRコードでサポートされているという事実以外の詳細は見つかりませんでした。この機能を実装/利用するにはどうすればよいですか?

そしてもちろん、画像をバイナリデータとしてより適切に保存するためのヒント/提案があれば、私は提案を非常に受け入れています!

御時間ありがとうございます、

ショーン

4

3 に答える 3

14

QRコードが保持できる情報量は非常に限られているため、それを達成できるかどうかはわかりません.

まず第一に、他の形式 (数値および英数字) はテキスト/数値を保持するように設計されており、画像を保存するためのスペースが少ないため、画像を生のバイトとして保存することをお勧めします。最大 2953 バイトのバイナリ情報を保持できる最小レベルのエラー修正を備えた、可能な限り最大の QR コード (バージョン 40) を選択したとします(こちらを参照)

最初のオプションは、あなたが示唆するように、画像をビットマップとして保存します。この形式では圧縮がまったく許可されず、(アルファ チャネルのない RGB 画像の場合) 1 ピクセルあたり 3 バイトが必要です。ファイル ヘッダー サイズ (14 ~ 54 バイト) を考慮し、パディングを無視すると (画像データの各行は 4 の倍数の長さにパディングする必要があります)、およそ 2900/3 = 966 を保存できます。ピクセル。正方形の画像を考えると、これは 31x31 のビットマップを表し、サムネイル画像でも小さいです (たとえば、この投稿の最後にある私のアバターは 32x32 ピクセルです)。

2 番目のオプションでは、JPEG を使用して画像をエンコードします。この形式には、ファイル サイズを縮小できる圧縮アルゴリズムを使用するという利点があります。今回は、画像のサイズを 2.9kB に収める正確な公式はありませんが、いくつかの正方形の画像を使用して、このサイズに収まるまでサイズを縮小し、良好な (93) 品質係数を維持してみました: これにより、平均が得られます。約 60x60 ピクセルの画像。(このような小さな画像では、jpeg ファイルのファイル ヘッダーは bmp ファイルよりもはるかに大きく、約 500 バイトであるため、jpeg と bmp の間で信じられないほどの圧縮率が見られないのが普通です)。これはビットマップよりも優れていますが、かなり小さいままです。

最後に、この QR コードで画像のエンコードに成功したとしても、別の問題が発生します。このサイズの QR コードをスキャンするのは非常に困難です。実際のところ、この QR コードは 177x177 モジュールのサイズになります (「モジュール」は小さな白または黒の正方形です)。いわゆる「HD」フレーム (1280x720 ピクセル) を提供するスマートフォンを使用してスキャンすると仮定すると、各モジュールのフレームの最大サイズは約 4 ピクセルになります。カメラのノイズ、エイリアシング、およびユーザーがスキャン中に完全にアイドル状態になることはないという事実によるぼやけを考慮すると、入力フレームの品質により、QR コードのデコード アルゴリズムが QR を正常に取得することが非常に困難になります。コード (最初にエラー訂正レベルを低く設定したことを忘れないでください!)。

あまり良いニュースではありませんが、これがお役に立てば幸いです。

于 2012-10-17T08:38:57.993 に答える
3

実際、「構造化追加」と呼ばれる QR コードの特別なヘッダーを使用して、複数 (最大 16 個) の QR コードに関する情報をエンコードする方法があります。使用できる最良の情報源は、QR コードに関する標準 (ISO 18004:2006) です。ウェブ上で無料で見つけることができます (必ずしも簡単ではありません)。

この規範の関連部分 (セクション 9) は次のように述べています。

「最大 16 個の QR コード シンボルを構造化フォーマットに追加できます。シンボルが構造化追加メッセージの一部である場合、最初の 3 つのシンボル文字位置のヘッダー ブロックによって示されます。構造化追加モード インジケーター 0011 は次の場所に配置されます。最初の記号文字の 4 つの最上位ビット位置. この直後に 2 つの構造化追加コードワードが続き、最初の記号文字の 4 つの最下位ビット、2 番目の記号文字、および 3 番目の記号文字の 4 つの最上位ビットに広がります。 . 最初のコードワードはシンボル シーケンス インジケータです. 2 番目のコードワードはパリティ データであり、メッセージ内のすべてのシンボルで同一であるため、すべてのシンボルが同じ構造化追加メッセージの一部から読み取られることを確認できます.このヘッダーの直後に、最初のモード インジケーターで始まるシンボルのデータ コードワードが続きます。」

それにもかかわらず、これは非常に高度な機能であるため、ほとんどの QR コード スキャナーがこれを処理できるかどうかはわかりません。

于 2012-10-19T08:20:31.417 に答える