JP4419269B2 - Two-dimensional code extraction method - Google Patents

Two-dimensional code extraction method Download PDF

Info

Publication number
JP4419269B2
JP4419269B2 JP2000116429A JP2000116429A JP4419269B2 JP 4419269 B2 JP4419269 B2 JP 4419269B2 JP 2000116429 A JP2000116429 A JP 2000116429A JP 2000116429 A JP2000116429 A JP 2000116429A JP 4419269 B2 JP4419269 B2 JP 4419269B2
Authority
JP
Japan
Prior art keywords
dimensional code
block
detected
blocks
pixels
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2000116429A
Other languages
Japanese (ja)
Other versions
JP2001307014A (en
Inventor
憲一郎 酒井
嗣男 野田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2000116429A priority Critical patent/JP4419269B2/en
Priority to US09/835,625 priority patent/US7350710B2/en
Publication of JP2001307014A publication Critical patent/JP2001307014A/en
Application granted granted Critical
Publication of JP4419269B2 publication Critical patent/JP4419269B2/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • G06K7/1404Methods for optical code recognition
    • G06K7/1439Methods for optical code recognition including a method step for retrieval of the optical code
    • G06K7/1447Methods for optical code recognition including a method step for retrieval of the optical code extracting optical codes from image or text carrying said optical code

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Electromagnetism (AREA)
  • General Health & Medical Sciences (AREA)
  • Toxicology (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Character Input (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、文書や図表とともに二次元コードが印刷された紙面をスキャナ等の画像入力装置により読み取った画像データから、二次元コードの画像を自動的に抽出する二次元コード抽出方法に関する。
【0002】
【従来の技術】
近年、従来のバーコードよりも多くの情報を埋め込むことができる二次元コードの開発が進み、実用化され始めている。二次元コードを利用することにより、文書や画像データ、音声データなどのあらゆる種類のバイナリデータを二次元コードとして紙面に印刷することが可能になった。
【0003】
二次元コードを印刷した紙は、ファクシミリで伝送したり印刷物として配布する。受け取り側では、紙面の二次元コードをイメージスキャナにより画像データとして読み取って、各二次元コードの復元に対応したソフトウェアやハードウェアにより元のデータに復元することができる。
【0004】
二次元コードの中には一般的なイメージスキャナでの読み取りを可能にするものもあり、専用の読み取り装置が無くても手持ちのスキャナにより読み取って元のデータを復元することができるため、読み取り手段の汎用性が高いというメリットがある。
【0005】
【発明が解決しようとする課題】
二次元コードだけを紙面に印刷するのではなく、文書や図表とともに任意の位置に任意の大きさの二次元コードを紙面に印刷した場合、汎用のイメージスキャナを使って二次元コード部分の読み取りを行うと二次元コードに加えて文字や図表の一部も画像データとして取り込まれる可能性が非常に高い。
【0006】
このように二次元コード以外の画像が入っていると、二次コード復元ソフトウェアやハードウェアで正常に復元することができないため、イメージスキャナで読み取った画像データから二次元コード部分だけを抽出しなければならないという課題があった、
【0007】
【課題を解決するための手段】
そして、この目的は、入力した画像データをM×N画素(M、Nは正の整数)の矩形のブロック単位に走査し、走査したブロックから所定の条件を満たすブロックを検出し、検出されたブロックの位置に基づいて二次元コードの位置を検出して入力画像から二次元コードの画像を抽出する二次元コード抽出方法により達成される。
【0008】
また、ブロック検出は、ブロック内の白画素/背景色と黒画素/文字色の比率が所定の範囲内になるブロックを検出するようにしてもよい。
【0009】
また、ブロック内の総画素数に対するブロック内の水平ラインおよび/または垂直ライン内の画素値の変化点の個数の割合が所定の範囲内になるブロックを検出する、ブロック内の黒画素の連結の仕方に基づいてブロックを検出する、あるいはブロック内の各ラインに含まれる黒画素の水平方向の射影または/および垂直方向の射影の変化の度合いが所定の範囲内になるブロックを検出するようにしてもよいし、これらを組み合わせてブロックを検出してもよい。
【0010】
一方、二次元コードの検出の際には、検出された連結領域の中でその領域を構成するブロック数が最大の領域を選択し、,該領域を囲む矩形領域を二次元コード領域として検出するようにしてもよい。
【0011】
更に、連結領域の中で領域を構成するブロック数が所定の範囲内の領域を選択し、選択されたそれぞれを囲む矩形領域を二次元コード領域として検出するようにしてもよい。
【0012】
また、二次元コード抽出に際して,二次元コード領域内における任意の位置から垂直上下方向および水平左右方向に所定の大きさの矩形ブロック単位に走査し、走査した矩形内の黒画素数が所定の値以下になる位置を各方向について検出して検出位置を囲む矩形領域を二次元コードとして抽出するようにしてもよい。
【0013】
また更に、二次元コード領域の周囲に所定幅の空白を付与して抽出するようにしてもよい。
【0014】
一方、二次元コード抽出にあたって二次元コードの傾きを検出し、傾きを補正しながら二次元コード画像を抽出するようにしてもよい。
【0015】
その際に、二次元コードの上下端および/または左右端それぞれの境界上における複数箇所の座標値を直線近似して、二次元コードの傾き角度を検出するようにすればよい。
【0016】
また、入力画像の読取方向を検出して正立像に補正することによって、入力画像の向きを正しく補正することが可能となる。
【0017】
【発明の実施の形態】
以下、図面を用いて本発明の実施形態を説明する。
【0018】
一般的に、二次元コードはバイナリデータを特定のアルゴリズムにより画素パターン変換したものであり、文書や図等と異なり画像としての見た目の意味を持たない。一方、画像レベルで見ると、文書や図表を構成する画素のパターンと二次元コードを構成する画素パターンの特徴は異なっている。この相違は見た目にも明らかであり、文書・図表と二次元コードが混在している画像から二次元コード部分を目視により容易に識別できる。
【0019】
図1はイメージスキャナで読み取った、二次元コードと文書や図表が混在する文書画像を表しており、横M画素、縦N画素(いずれも正の整数、M=Nであってもよい)のブロック毎に読み取られた画像を走査した例が図示されている。図中、走査された画像中のブロックは破線で囲まれた矩形で図示されている。また、実線で囲まれた矩形は、後に詳細を説明する、本実施形態により抽出されたブロック(特に二次元コードを構成すると判別されたブロック)を示している。なお、図1において二次元コードは画像の右下の矩形の領域に相当し、また、検出されたブロック以外の文書や図表などは、特に図中には明示していない。
【0020】
なお、以降の説明では文字や図表および二次元コードを構成する画素を「黒画素」、その背景となる画素を「白画素」とする。
【0021】
本実施形態では、文書・図表と二次元コードの画素パターンが相違する点に着目した。まず、画像をブロック単位に走査してブロックごとに二次元コード(あるいは二次元コードを構成するブロックと推測される部分)か否かを検出し、二次元コードの存在確率が高い部分を探し出す
ブロックが二次元コードの一部か否かを判断するためには、ブロック内の黒画素分布を求める。これは、二次元コード部分と文字領域とで相違することを利用したものである。
(1)ブロック内の黒画素率により識別
この方法では、二次元コードの黒画素率がブロック単位でみるとほぼ一定であることを利用する。この際に、ノイズやスキャナの特性による変動を考慮し、二次元コードと判断するべきブロック内の黒画素率範囲を予め定めておく。この範囲は、あらかじめ二次元コードを走査して、その結果に基づいて設定するようにしてもよい。走査したブロックの黒画素率がこの設定した黒画素率の範囲内にあれば、そのブロックが二次元コードを構成するブロックであると判断する。二次元コードを構成していないブロックについては、黒画素率が二次元コードを構成するブロックの範囲には入らないため、上記の方法を用いることにより、二次元コード以外のブロックの多くを取り除くことができる。
(2)白画素と黒画素との変化点の割合により識別
この方法では、二次元コードの画素の変化パターンがブロック単位で見るとほぼ一様であることを利用する。ブロック内を水平または垂直に1ライン単位に走査し、各ライン内の画素の変化点、すなわち黒画素から白画素、または白画素から黒画素に変化した回数を計数し、ブロック全ラインについて求めた変化点の総数をブロックの総画素数で割った値を「変化点の割合」とする。二次元コードブロックの変化点の割合を予め調べておき、ノイズやスキャナ特性による変動を考慮して二次元コードと判断する変化点の割合の範囲を定める。
【0022】
走査したブロックの変化点の割合が、この範囲内にあれば二次元コードを構成するブロックと判断する。これにより、二次元コード以外のブロックの多くが取り除かれる。
(3)ブロック内の黒画素の連結の仕方で識別
二次元コード内の黒画素はブロック内でほぼ一様に分布するのに対し、文字を含むブロックでは黒画素により文字が構成されるため、黒画素が局所的にかたまって存在している。この方法では、上記した画像の特徴を二次元コード検出に利用する。
(4)ブロック内の黒画素の射影の変動から識別
変化点の場合と同様に、二次元コード内の画素分布がほぼ一様である。ブロックを水平または垂直に1ライン単位に走査し、各ラインに含まれる黒画素数を計数することで該ブロックの射影を得る。二次元コードのブロックの場合には、画素分布がほぼ一様であることからライン間の射影の変化が小さく、文書や図表の場合には、黒画素分布が一様でないことからライン間で射影の変化が大きくなる。
【0023】
従ってあらかじめ二次元コードと判断する射影の変動の範囲を定めておき、走査したブロックの射影の変動がこの範囲内であれば二次元コードのブロックと判断する。これにより、二次元コード以外のブロックの多くを取り除くことができる。
【0024】
二次元コードブロックを検出する際に、上記(1)〜(4)の中から2つ以上の方法を組み合わせることで、二次元コードブロックの検出精度を大幅に向上させることができる。
【0025】
なお、上記の黒画素分布を利用して二次元コードを構成するブロックを検出したとしても、二次元コードとして検出されたブロックの中には、二次元コード以外の画像が含まれる可能性がある。これは、一つのブロック単位でみた場合、そのブロックが二次元コードではないにもかかわらず、上記の黒画素分布の条件を満たしてしまうことがあるためである。しかし、これらの二次元コードを構成していない、言わば誤検出されたブロックは、自分自身の周辺のブロックが二次元コードとして検出される条件を満たしていない可能性が高いと考えられる。そのため、このようなブロックに関しては、二次元コードとして検出されたブロックが他のブロックから孤立して存在したり(図1A)、数個程度のブロックが隣接して検出される(図1B、C)に過ぎない。
【0026】
一方、二次元コード領域内においては、二次元コードとして検出されるブロックの数がは二次元コード領域外に比べて多くなるため、検出されたブロックが図1のDのように多く隣接して繋がりあっている。
【0027】
そこで、二次元コードとして検出されたブロックのうち、隣接して連結するブロックの個数が最大となる領域を検出し、その領域の上下左右に所定の幅を持たせた矩形で囲み、この領域を検出することができる。
【0028】
ここで、上記した所定の幅を最大ブロックの幅とすることで、常に二次元コード全体を含んだ領域が検出される。
【0029】
また、連結するブロックが所定の個数以上の領域を選択することで、同一画像内に複数個の二次元コードが存在する場合でも抽出することが可能となる。
【0030】
さらに、以下の方法により、より正確に二次元コードの領域を検出することができる。
【0031】
図2は、前述した方法により二次元コードとして検出された、隣接ブロックの個数が最大となる領域を拡大して示した図である。図2において、一番外側の実線で示した矩形内(矩形領域1)が検出する二次元コードの領域、その内側の矩形(矩形領域2)が二次元コードとして検出されたブロックに外接する矩形領域である。また、一番外側の破線と矩形領域1の間の領域は、二次元コードと文字や図表を隔てるために設けられた、全ての画素が白画素の空白領域である。
【0032】
まず、矩形領域2内に、基準位置を設定する。図2では基準位置を丸印で示しており、検出された領域の中心に設定された例が図示される。この基準位置を中心として画像に対して左右の方向、上下方向に向かって二次元コードの境界を検出する処理を行う。二次元コードの境界から外側には、所定の幅の空白領域が付与されるのが一般的である。従って、検出基準位置から二次元コードの縁に向かってブロック単位に走査して行き、走査したブロック内の全画素が白画素になった時点で上記した空白領域に達したことが判り、このブロックの基準位置側の辺が二次元コードの境界ということになる。
【0033】
ここで、矩形領域2の内側は二次元コード領域とみなせるため、二次元コードの境界の検出は、図2のA〜Dのように矩形領域2の外側から開始すればよい。各検出開始位置A〜Dから二次元コードの境界方向に向かってブロック単位に上記の検出を行えば、その内側の全画素が白画素になるブロックA’〜B’が検出される。そして、A’〜B’の検出基準位置側(すなわち二次元コード側)の辺を通る矩形が二次元コードの矩形領域として検出される。
【0034】
上記のようにして検出した二次元コードを抽出する際に、二次元コードを復元するソフトウェアやハードウェアが必要とする所定の幅の白画素を二次元コードの周囲に付与することで、正しく復元できる二次元コードの画像にすることができる。
【0035】
ハンドヘルド型のイメージスキャナにより紙面上の二次元コード部分の読み取りを行った場合、手動でスキャナを操作するためスキャナが斜めに動き読み取った画像に傾が生じる場合が考えられる。
【0036】
そこで、二次元コードを抽出する際に同時に二次元コードの傾き角度も検出し、二次元コード抽出時に傾きを補正しながら抽出を行うことで、傾きのない二次元コードを抽出することができる。
【0037】
二次元コードが矩形である場合には、二次元コード上下の辺、すなわち二次元コードの境界線が平行であることから、二次元コードを検出する際に上下の境界線上の点を複数箇所検出し、画像内におけるそれらの座標値からこれらの点を直線近似することで境界線の傾きを求め、それを二次元コードの傾き角度とすることができる。左右の辺についても互いに平行であるため、同様にして傾き角度を検出することができ、上下左右から傾きを検出することで傾き角度の検出精度が高まる。
【0038】
手動操作型のハンドヘルドスキャナにより読み取る場合、ハンドヘルドスキャナは上下左右いずれの方向にもスキャンできることから、読み取った画像が回転したり鏡像反転して入力される場合がある。二次元コードの検出処理を始める前に読み取り方向を検出して正立像に補正しておいたり、二次元コードを検出した後抽出する際に正立像になるように補正しながら抽出することで、常に正しい向きの二次元コードを抽出することができる。
【0039】
以下、図面に基づいて本発明の実施例について詳細に説明する。
【0040】
図3は本発明の全体の処理フローである。まず、入力画像をブロック単位に走査して、上記した(1)〜(4)の方法を用いて、所定の条件を満たすブロックを検出する(S101)。次に、検出されたブロックが連結している領域を検出する(S102)。続いて、S102により検出された領域に基づいて、二次元コードの領域を検出する(S103)。そして、検出した二次元コード領域から二次元コード画像を抽出する(S104)。最後に、二次元コードの傾き角度を検出し、必要ならば傾き補正を行なう(S105)。
【0041】
図4は、入力画像から検出したブロックの情報を格納するためのブロック情報テーブルの構成を示す図である。ブロック番号は二次元コードの一部として検出されたブロックに、検出した順番につける一連番号である。検出されたブロックの最後を示すために、テーブル最後にEOB(End Of Block table)を格納する。
【0042】
検出されたブロックごとに、ブロック左上のX座標とY座標、そのブロックに結合するブロック数、結合するブロックにより構成される領域の一連番号が格納される。検出されたi番目のブロックの、ブロック情報テーブルの各項目の値の表記は、X座標をXi、Y座標をYi、結合ブロック数をCi、領域番号をRiで表すこととする。
【0043】
以下の実施例では、本ブロック情報テーブルを使用して二次元コードの検出を行なう。
【0044】
図5は二次元コードのブロックを検出する処理フローを示す図であり、図3のS101の処理に対応する。図中の記号は、xとyは走査するブロック左上のそれぞれX 座標とY 座標、M とN はそれぞれブロックの横画素数と縦画素数を表す。また、WIDTH とHEIGHTは、それぞれ入力画像の横画素数と縦画素数を表す。iは検出したブロックの番号を示すための変数である。
【0045】
まず初期設定として、x=0、y=0すなわち入力画像の右上の原点をブロックの左上の座標に設定し、同時に最初のブロックを示すようi=1に設定する(S102)。
【0046】
S202では、走査するブロックを左上の座標を(x、y)とする幅M画素、高さN画素の矩形領域に設定し、このブロックが所定の条件、すなわち黒画素率や変化点の個数、黒画素の連結状態が所定の値であるか否かを識別する(S203)。S203において、該ブロックが所定の条件を満たさないと判断した場合には処理をS206に移し、条件を満たすと判断した場合には処理をS204に進める。
【0047】
S204では、ブロック情報テーブルのi番目の項目を選択し、Xiにx、Yiにyをそれぞれ格納し、次に検出されるブロックを示すようにブロック番号iに1を加算する(S205)。
【0048】
S206では、xにMを加えることで、次に走査するブロック左上の座標をX 軸方向にM画素分移動させる。S207では、x+MがWIDTH 以上か否か、すなわちxを左上のX 座標とする幅M 画素のブロックの右端が、入力画像の幅を超えていないか否かをチェックする。x+M がWIDTH 未満の場合にはS 202に処理を戻す。x+M がWIDTH 以上の場合には、S208でx=0すなわち走査するブロックのX 座標を入力画像の左端に設定する。
【0049】
S209では、yにN を加えることで、次に走査するブロック左上の座標をY 軸方向にN 画素分移動させる。S210では、x+Y がHEIGHT以上か否か、すなわちyを左上のY 座標とする高さN 画素のブロックの下端が、入力画像の高さを超えていないか否かをチェックする。y+N がHEIGHT以上の場合にはS211に処理を移す。S211ではブロック情報テーブルのi番目のブロック番号にEOB を格納して処理を終了する。
【0050】
一方、S210においてy+N がHEIGHT未満の場合にはS202に処理を戻す。
【0051】
S202からS210までを繰り返し行なうことにより、入力画像全体をブロック単位に走査して、図7の太線で囲ったブロック1〜26のように、二次元コードと識別したブロックを検出し、それら各ブロックのX 座標およびY 座標が図8のブロック情報テーブル1〜26に示したように検出される。
【0052】
なお、図7はブロックの幅M=32画素、高さ=32画素の場合の例である。
図6は、図3のS101により検出したブロックが連結して構成する領域を検出する処理フローを示す図であり、図3のS102の処理に対応する。
【0053】
図中の記号は、iはブロック情報テーブル内におけるブロック番号を示すための変数、kは検出した領域の番号を示すための変数である。
【0054】
まず初期設定として、ブロック情報テーブル(図4)の先頭からEOB までの結合ブロック数と領域番号を全て0でクリアしておく(S301)。
【0055】
S30 2ではブロック番号i=1すなわちブロック情報テーブルの先頭を指し示すように設定し、領域番号をk=1すなわち最初の領域を示す値を設定する。
【0056】
S303では、i番目のブロックテーブルの領域番号Riが0か否か、すなわちi番目のブロックが既に何らかの領域に属しているか否かをチェックし、0ならば領域に属していないと判断して処理をS304に移し、0でなければ既に領域に属していると判断してS307に処理を移す。
【0057】
S304では、例えば「境界追跡法」などの方法によりブロックiを始点とするブロックにより構成される領域を検出し、該検出した領域を構成するブロックの個数P を求める。なお、境界追跡法は一般的に知られている方法であり、例えば「画像処理」(尾崎他著、共立出版、1993、p187〜188 )や「画像処理工学」(谷口・編、共立出版、1996、p116〜118 )に記載されている。
【0058】
S305では、ブロック情報テーブルを参照し、S301で検出した領域に含まれる全てのブロック数CiにP 、領域番号Riにkを設定する。
【0059】
S306では、領域番号kに1を加える。
【0060】
S307では、次のブロック情報テーブルの項目を参照するためにiに1を加える。
【0061】
S308では、i番目のブロック情報テーブルのブロック番号欄がEOB か否か、すなわちS101で検出した全てのブロックについて処理を終えたか否かチェックする。ブロック番号がEOB でない場合には、処理をS303に戻し、ブロック番号がEOB である場合には全処理を終えたと判断して修了する。
【0062】
S303からS308までの処理を繰り返し行なうことで、図7の領域1〜4のように二次元コードと識別されたブロックが連結して構成する領域が検出され、図8のブロック情報テーブルのように各ブロックについて結合ブロック数と領域番号が求まる。例えば、ブロック6の場合には、結合するブロック数が20個の領域に所属し、領域番号が3となる。
【0063】
図9は二次元コード領域を検出する処理の第一の実施例を示す処理フローであり、図3のS103の処理に対応する。
【0064】
S401では、ブロック情報テーブルを参照し、結合ブロック数の最大値を検出してRmaxとする。図8の例では、Rmax=20 となる。
【0065】
S402では、結合ブロック数がRmaxに一致するブロックの中で、X 座標およびY 座標の最小値(Xmin、Ymin)と最大値(Xmax、Ymax)を求める。図8の例では、座標の最小値(Xmin、Ymin)としてブロック6の座標(X6、Y6)=(192 、352 )、座標の最大値(Xmax、Ymax)としてブロック26の座標(X26 、Y26 )=(352 、448 )が検出される。
【0066】
S403では、左上角の座標を(Xmin-M、Ymin-N)、右下角の座標を(Xmax+2×M 、Ymax+2×N )とする矩形領域を二次元コード領域として決定する。図7の例では、図10A の領域3から一ブロック分離れた矩形領域C が二次元コード領域として検出される。
【0067】
本方法では、実際の二次元コードである図10B に対して、大きめの領域が二次元コードとして検出されることになる。
【0068】
図11は、二次元コード領域を検出する処理の第二の実施例を示す処理フローあり、図3のS103の処理に対応する。
【0069】
S501では、ブロック情報テーブルを参照し、結合ブロック数の最大値を検出してRmaxとする。図8の例では、Rmax=20 となる。
【0070】
S502では、結合ブロック数がRmaxの領域の中心を二次元コード領域検出の基準位置に決定する。図8の例では、図10のように結合ブロック数が最大の領域として領域3(図10A )が選択され、その中心として図12D が決定される。ここでの中心位置は、領域3に外接する矩形領域の中心で良い。
【0071】
S503では、S502で決定した検出基準位置から、上下および左右の方向に矩形のブロック単位に走査し、該ブロック内の黒画素の個数がQ 個以下になる位置を検出する。Q は0にしても良いが、ノイズなどの影響を考慮してある程度の個数を設定しておいても良い。
【0072】
図12は、図10の領域3部分を拡大した図である。この例では、それぞれ左側でA、右側でB、上側でC、下側でDの位置が検出される。Q=0に設定し、ノイズがない場合には、検出したA付近は図12下図のようになり、A’の位置すなわちブロックの基準位置側を検出した位置に決定すればよい。
【0073】
S50 4では、S503で検出した上下左右の四点から、検出基準位置と反対方向に所定の画素数分はなれるように矩形を二次元コードの領域として決定する。図12では、A〜Dの各検出位置からE画素分空けた位置を通るように設定した矩形(一番外側の矩形)が二次元コード領域となる。
【0074】
以上、二次元コード領域を検出する第一および第二の実施例では、二次元コードが傾いている場合でも、二次元コード全体を含む領域を検出することができる。更に、検出した二次元コードの傾きを検出し、傾きを補正することでより正しく二次元コードを復元できる。
【0075】
図13は、二次元コードの傾き補正の処理フローであり、図3のS105の処理に対応する。
【0076】
S601では、二次元コード内の検出基準位置から、上下左右に所定の間隔でブロック単位に走査し、ブロック内の黒画素がQ 個以下になる位置を検出する。ここでの検出方法はS503と同様である。S601の処理により、二次元コード各辺における境界線上の位置が検出される。
【0077】
図12の二次元コード領域の例では、図14のように、二次元コード上側の境界線上にA1〜A7、下側の境界線上にB1〜B7、左側の境界線上にC1〜C5、右側の境界線上にD1〜D5の位置がそれぞれ検出される。
【0078】
S602〜S605では、上側、下側、左側、右側の検出位置を直線近似し、それぞれの傾き角度a1〜a4を求める。図14の例では、上側についてはA1〜A7を通る近似直線A の傾きa1を算出する。下側、左側、右側に関しても同様にして傾き角度を算出する。
【0079】
S606では、上側と下側の傾き角度に対して左側と右側の傾き角度が直行することを利用し、a1〜a4の平均の傾きを計算して二次元コードの傾き角度θを次式により決定する。
【0080】
θ=(a1+a2+(a3−90)+(a4−90))÷4
S607では、θを所定の値θmin と比較し、θがθmin より大きい場合にはS608で傾き補正処理を行って終了し、θがθmin 以下の場合には傾き補正を行なわずに処理を終了する。これにより、傾き角度が小さく、傾き補正の必要のない場合には回転処理を行なわないことで、処理時間を短縮できる。
【0081】
読取方向を検出して正立像に自動補正する方法には、公知例として「画像状態検出装置及びそれを利用した文書画像補正装置」(特許公開平成11年第316798号)がある。
【0082】
図3のS101の処理を行う前に、この補正処理を行って入力画像を正立像に補正しておくことにより、S101以降の処理はこの正立像に補正した画像に対して行われるため、回転や鏡像反転が補正された二次元コードが抽出される。
図15は、二次元コードを構成するブロックを検出するためのその他の方法を説明するための図面であり、8×8画素のブロックにおいて着目画素に対する黒画素間距離の求め方を説明するための図である。ここで、図示左上の画素をX1、1 とし、X1、1 の右側の画素をX2、1 、X1、1 の下側の画素をX2、1 のように添え字を変えて各画素を表す。
【0083】
まず、図5の黒画素X4、4 に着目し、X4、4 に対して上下左右それぞれの方向で最も近い黒画素がX4、3 、X4、8 、X1、4 、X6、4 であった場合、X4、4 についての黒画素間の距離D4、4 は次式で算出する

Figure 0004419269
なお、上下左右のうち、黒画素が存在しない方向があった場合や、着目画素がブロック外縁にあり画素が存在しない方向がある場合には、該方向に相当する項はゼロとする。例えば、X1、4 を含めX4、4 の左側が全て白画素であった場合には、X4、4 についての黒画素間の距離は次式のようになる。
【0084】
Figure 0004419269
一般に、着目した黒画素についての黒画素間隔は次式により算出する。
【0085】
Figure 0004419269
式(3)の第一項から第四項は、それぞれ上下左右にa 画素、b 画素、c 画素、d 画素離れた黒画素との距離を求めることを意味するため、着目画素Xi、j についての黒画素間隔はa + b + c + d と表せる。
【0086】
ブロック内の全ての黒画素についての黒画素間の平均距離D は、ブロック内の黒画素数をN として、次式により算出することができる。
【0087】
D = ( ΣΣDi、j ) / N ・・・(4))
ここで、最初のΣはDi、j をi=1 からN までの加算すること、2個目のΣはDi、j をj=1 からN まで加算することを示す。
図16は、文字ブロック(A )と二次元コードブロック(B )それぞれにおける黒画素分布の例である。一般的に、文字ブロックでは黒画素が局所的に集まって存在し、二次元コードブロックでは黒画素が比較的ばらばらな位置に存在している。
【0088】
図17は、図16に図示される文字ブロックと二次元コードブロックについて、前述した画素間の距離を算出した例である。太線にて描かれた小さい矩形は黒画素を表し、矩形内の数値は黒画素について式(1)により黒画素間を算出した値である。
【0089】
図16の例では、文字ブロック(A )の黒画素間の合計は63、ブロック内の黒画素数は24個なので平均黒画素間はD = 2.6(63÷24)となる。一方、二次元コードブロック(B )の黒画素間の合計は131 、ブロック内の黒画素数は27なので平均黒画素間はD = 4.9(131 ÷27)となる。二次元コードブロックの平均黒画素間のほうが文字ブロックよりも大きい。
【0090】
平均黒画素間D は、式(3)からも明らかなように黒画素同士の間隔が大きいほど値が大きくなる。 図16に示したように、二次元コードブロック(A )内の黒画素は、文字ブロック(B )に比較してばらばらな位置に存在しているため、各黒画素の間隔が文字ブロックよりも大きくなり、従って、二次元コードブロックの平均黒画素間D も文字ブロックよりも大きな値になる。この黒画素間隔の違いを利用してブロックが文字の一部なのか二次元コードの一部なのかを識別する。
【0091】
文字ブロックと二次元コードを識別する黒画素間の閾値Dth は次のように決める。まず、文字のみを含む複数個の文書画像をブロックに分割し、全てのブロックについて求めた平均黒画素間の平均D1を求める。次に、複数個の二次元コード画像をブロック分割し、文字ブロックの場合と同様に全ブロックの平均黒画素間の平均D2を求める。こうして求めたD1、D2はそれぞれ文字および二次元コードブロックの平均的な平均黒画素間を表すと考えられるので、D1とD2の中点を閾値Dth に決定する。
【0092】
ブロックの平均黒画素間がDth 未満ならば文字ブロック、Dth 以上ならば二次元コードブロックと識別することができる。
【0093】
【発明の効果】
以上説明したように、本発明の二次元コード抽出方法によれば、二次元コードと文字や図表が混在する画像データの中から二次元コードだけを自動的に抽出することができる。このため、二次元コードを文書・図表と共に印刷した紙面において、イメージスキャナにより二次元コードを含むように読み取りを行なうと、読み取った画像から二次元コードが自動抽出されるため、元のデータに正確に復元することができ、二次元コードの読み取りやすさの向上に寄与するところが大きい。
【図面の簡単な説明】
【図1】イメージスキャナで読み取られた二次元コードと文書/図表が混在する文書画像を模式的に図示した図面であり、M×Nのブロック単位で走査された状態を示す。
【図2】図1で二次元コードとして検出されたブロックを拡大した図。
【図3】本発明の一実施形態による二次元コード検出手順を説明したフローチャート。
【図4】ブロック情報テーブルを示した図面。
【図5】二次元コードブロックの検出処理手順を示すフローチャート。
【図6】隣接ブロックにより構成される領域の検出処理手順を示すフローチャート。
【図7】二次元コード抽出を説明する図面。
【図8】ブロック情報テーブルの例を示す図。
【図9】二次元コード領域の検出処理を示すフローチャート。
【図10】検出された二次元コード領域の様子を示す図。
【図11】二次元コード良医の検出処理を示すフローチャート。
【図12】図10で検出された二次元コード領域を拡大した図面。
【図13】二次元コードの傾き検出とその補正処理を示すフローチャート。
【図14】傾いた二次元コードの様子を示す図。
【図15】二次元コード領域検出を説明する図。
【図16】文字ブロックと二次元コードブロックの黒画素分布を示す図。
【図17】図16に図示された文字ブロックと二次元コードブロックとの黒画素間距離を算出した結果を示す図。[0001]
BACKGROUND OF THE INVENTION
The present invention relates to a two-dimensional code extraction method for automatically extracting an image of a two-dimensional code from image data obtained by reading a paper surface on which a two-dimensional code is printed together with a document or a diagram with an image input device such as a scanner.
[0002]
[Prior art]
In recent years, two-dimensional codes capable of embedding more information than conventional bar codes have been developed and are beginning to be put into practical use. By using the two-dimensional code, it has become possible to print all kinds of binary data such as documents, image data, and audio data on the paper as a two-dimensional code.
[0003]
The paper on which the two-dimensional code is printed is transmitted by facsimile or distributed as printed matter. On the receiving side, the two-dimensional code on the paper surface can be read as image data by an image scanner and restored to the original data by software or hardware corresponding to the restoration of each two-dimensional code.
[0004]
Some 2D codes can be read by a general image scanner, and even if there is no dedicated reading device, it can be read by a hand-held scanner and the original data can be restored. Has the advantage of high versatility.
[0005]
[Problems to be solved by the invention]
Rather than printing only 2D codes on paper, if you print 2D codes of any size at any position along with documents and diagrams on paper, use a general-purpose image scanner to read the 2D code part. If this is done, in addition to the two-dimensional code, there is a high possibility that a part of characters and diagrams will be captured as image data.
[0006]
If an image other than a two-dimensional code is included in this way, it cannot be restored correctly by secondary code restoration software or hardware, so only the two-dimensional code portion must be extracted from the image data read by the image scanner. There was an issue that had to be done,
[0007]
[Means for Solving the Problems]
The purpose of this is to scan the input image data in units of rectangular blocks of M × N pixels (M and N are positive integers), and detect a block that satisfies a predetermined condition from the scanned blocks. This is achieved by a two-dimensional code extraction method that detects the position of a two-dimensional code based on the position of a block and extracts an image of the two-dimensional code from an input image.
[0008]
In block detection, a block in which the ratio of white pixel / background color to black pixel / character color in the block falls within a predetermined range may be detected.
[0009]
In addition, a block in which the ratio of the number of pixel value change points in the horizontal line and / or vertical line in the block to the total number of pixels in the block is within a predetermined range is detected. A block is detected based on the manner, or a block in which the degree of change in the horizontal projection and / or vertical projection of the black pixels included in each line in the block falls within a predetermined range is detected. Alternatively, these may be combined to detect a block.
[0010]
On the other hand, when detecting a two-dimensional code, an area having the maximum number of blocks constituting the area is selected from the detected connected areas, and a rectangular area surrounding the area is detected as a two-dimensional code area. You may do it.
[0011]
Furthermore, an area in which the number of blocks constituting the area in the connected area is within a predetermined range may be selected, and a rectangular area surrounding each selected area may be detected as a two-dimensional code area.
[0012]
In addition, when extracting a two-dimensional code, scanning is performed in units of a rectangular block of a predetermined size from an arbitrary position in the two-dimensional code area in the vertical vertical direction and horizontal horizontal direction, and the number of black pixels in the scanned rectangle is a predetermined value. The following positions may be detected in each direction, and a rectangular area surrounding the detected position may be extracted as a two-dimensional code.
[0013]
Still further, a blank having a predetermined width may be added around the two-dimensional code area for extraction.
[0014]
On the other hand, when extracting the two-dimensional code, the inclination of the two-dimensional code may be detected, and the two-dimensional code image may be extracted while correcting the inclination.
[0015]
At that time, the coordinate values of a plurality of locations on the upper and lower ends and / or the left and right ends of the two-dimensional code may be linearly approximated to detect the inclination angle of the two-dimensional code.
[0016]
In addition, by detecting the reading direction of the input image and correcting it to an erect image, the direction of the input image can be corrected correctly.
[0017]
DETAILED DESCRIPTION OF THE INVENTION
Hereinafter, embodiments of the present invention will be described with reference to the drawings.
[0018]
Generally, a two-dimensional code is obtained by converting a binary data pixel pattern by a specific algorithm, and has no visual meaning as an image unlike a document or a figure. On the other hand, when viewed at the image level, the characteristics of the pixel pattern constituting the document or diagram and the pixel pattern constituting the two-dimensional code are different. This difference is apparent in appearance, and the two-dimensional code portion can be easily identified visually from an image in which a document / chart and a two-dimensional code are mixed.
[0019]
FIG. 1 shows a document image in which a two-dimensional code, a document, and a table are read by an image scanner, and has M pixels in the horizontal direction and N pixels in the vertical direction (both may be positive integers and M = N). An example of scanning an image read for each block is shown. In the figure, blocks in the scanned image are shown as rectangles surrounded by broken lines. A rectangle surrounded by a solid line indicates a block (particularly a block determined to constitute a two-dimensional code) extracted by the present embodiment, which will be described in detail later. In FIG. 1, the two-dimensional code corresponds to a rectangular area at the lower right of the image, and documents, charts, etc. other than the detected blocks are not clearly shown in the figure.
[0020]
In the following description, a pixel constituting a character, a chart, and a two-dimensional code is referred to as a “black pixel”, and a background pixel is referred to as a “white pixel”.
[0021]
In the present embodiment, attention is paid to the difference between the pixel pattern of the document / chart and the two-dimensional code. First, the image is scanned in units of blocks to detect whether or not each block is a two-dimensional code (or a portion estimated to be a block constituting the two-dimensional code), and a portion having a high two-dimensional code existence probability is found.
In order to determine whether the block is a part of the two-dimensional code, the black pixel distribution in the block is obtained. This utilizes the difference between the two-dimensional code portion and the character area.
(1) Identification by the black pixel ratio in the block
This method utilizes the fact that the black pixel rate of the two-dimensional code is almost constant when viewed in blocks. At this time, in consideration of fluctuations due to noise and scanner characteristics, a black pixel rate range in a block to be determined as a two-dimensional code is determined in advance. This range may be set based on the result of scanning a two-dimensional code in advance. If the black pixel ratio of the scanned block is within the set black pixel ratio, it is determined that the block is a block constituting a two-dimensional code. For blocks that do not constitute a two-dimensional code, the black pixel ratio does not fall within the range of blocks that constitute a two-dimensional code. Therefore, by using the above method, many of the blocks other than the two-dimensional code are removed. Can do.
(2) Identification by the ratio of change points between white and black pixels
This method uses the fact that the pixel change pattern of the two-dimensional code is substantially uniform when viewed in units of blocks. The block was scanned horizontally or vertically in units of one line, and the change points of the pixels in each line, that is, the number of times the black pixel was changed to the white pixel or the white pixel to the black pixel was counted, and the entire block line was obtained. A value obtained by dividing the total number of change points by the total number of pixels in the block is referred to as “change point ratio”. The ratio of change points of the two-dimensional code block is checked in advance, and the range of the ratio of change points to be determined as the two-dimensional code is determined in consideration of fluctuations due to noise and scanner characteristics.
[0022]
If the ratio of change points of the scanned block is within this range, it is determined that the block constitutes a two-dimensional code. As a result, many of the blocks other than the two-dimensional code are removed.
(3) Identification by the way of connecting black pixels in the block
The black pixels in the two-dimensional code are distributed almost uniformly in the block, whereas in the block including characters, the black pixels are locally clustered because the characters are constituted by the black pixels. In this method, the above-described image features are used for two-dimensional code detection.
(4) Discriminated from fluctuations in the projection of black pixels in the block
Similar to the change point, the pixel distribution in the two-dimensional code is almost uniform. A block is scanned horizontally or vertically in units of one line, and the number of black pixels included in each line is counted to obtain a projection of the block. In the case of 2D code blocks, the change in projection between lines is small because the pixel distribution is almost uniform, and in the case of documents and charts, the black pixel distribution is not uniform in the case of documents and charts. The change of becomes large.
[0023]
Accordingly, a range of projection fluctuation to be determined as a two-dimensional code is determined in advance, and if the projection fluctuation of a scanned block is within this range, it is determined as a block of a two-dimensional code. As a result, many of the blocks other than the two-dimensional code can be removed.
[0024]
When detecting a two-dimensional code block, the detection accuracy of the two-dimensional code block can be greatly improved by combining two or more methods from the above (1) to (4).
[0025]
Note that even if a block constituting a two-dimensional code is detected using the above black pixel distribution, the block detected as the two-dimensional code may include an image other than the two-dimensional code. . This is because, when viewed in one block unit, the black pixel distribution condition may be satisfied even though the block is not a two-dimensional code. However, it is considered that there is a high possibility that a block that does not constitute these two-dimensional codes, that is, an erroneously detected block, does not satisfy the condition for detecting a block around itself as a two-dimensional code. Therefore, with respect to such a block, a block detected as a two-dimensional code exists isolated from other blocks (FIG. 1A), or several blocks are detected adjacently (FIG. 1B, C Only.
[0026]
On the other hand, in the two-dimensional code area, the number of blocks detected as a two-dimensional code is larger than that outside the two-dimensional code area. Therefore, a large number of detected blocks are adjacent as shown in FIG. They are connected.
[0027]
Therefore, from among the blocks detected as a two-dimensional code, an area where the number of adjacently connected blocks is maximized is detected, and the area is surrounded by a rectangle having a predetermined width at the top, bottom, left, and right of this area. Can be detected.
[0028]
Here, an area including the entire two-dimensional code is always detected by setting the predetermined width as the maximum block width.
[0029]
In addition, by selecting a region having a predetermined number or more of blocks to be connected, it is possible to extract even when there are a plurality of two-dimensional codes in the same image.
[0030]
Further, the two-dimensional code region can be detected more accurately by the following method.
[0031]
FIG. 2 is an enlarged view of a region where the number of adjacent blocks detected as a two-dimensional code by the above-described method is maximized. In FIG. 2, a two-dimensional code area detected within the rectangle indicated by the outermost solid line (rectangular area 1), and a rectangle circumscribing the inner rectangle (rectangular area 2) that is detected as a two-dimensional code It is an area. In addition, the area between the outermost broken line and the rectangular area 1 is a blank area in which all the pixels are provided to separate the two-dimensional code from the characters and charts and are all white pixels.
[0032]
First, a reference position is set in the rectangular area 2. In FIG. 2, the reference position is indicated by a circle, and an example in which the reference position is set at the center of the detected region is illustrated. A process of detecting the boundary of the two-dimensional code in the horizontal direction and the vertical direction with respect to the image around the reference position is performed. In general, a blank area having a predetermined width is provided outside the boundary of the two-dimensional code. Therefore, the block is scanned from the detection reference position toward the edge of the two-dimensional code in units of blocks, and it can be seen that the blank area described above has been reached when all the pixels in the scanned block become white pixels. The side on the reference position side is the boundary of the two-dimensional code.
[0033]
Here, since the inside of the rectangular area 2 can be regarded as a two-dimensional code area, the detection of the boundary of the two-dimensional code may be started from the outside of the rectangular area 2 as shown in FIGS. If the above detection is performed in block units from the respective detection start positions A to D toward the boundary direction of the two-dimensional code, blocks A ′ to B ′ in which all the inner pixels are white pixels are detected. Then, a rectangle passing through the detection reference position side (that is, the two-dimensional code side) of A ′ to B ′ is detected as a rectangular region of the two-dimensional code.
[0034]
When extracting the two-dimensional code detected as described above, the two-dimensional code is restored correctly by adding white pixels of a predetermined width required by software or hardware that restores the two-dimensional code. It can be an image of a two-dimensional code that can be made.
[0035]
When a two-dimensional code portion on a paper surface is read by a hand-held image scanner, the scanner may be operated manually so that the read image may be inclined.
[0036]
Therefore, by detecting the inclination angle of the two-dimensional code at the same time when extracting the two-dimensional code and extracting the two-dimensional code while correcting the inclination, the two-dimensional code having no inclination can be extracted.
[0037]
If the two-dimensional code is rectangular, the upper and lower sides of the two-dimensional code, that is, the boundary lines of the two-dimensional code are parallel, so multiple points on the upper and lower boundary lines are detected when detecting the two-dimensional code. Then, it is possible to obtain the inclination of the boundary line by linearly approximating these points from those coordinate values in the image, and to obtain the inclination angle of the two-dimensional code. Since the left and right sides are also parallel to each other, the inclination angle can be detected in the same manner, and the inclination angle detection accuracy is improved by detecting the inclination from the upper, lower, left, and right sides.
[0038]
When reading with a manually operated handheld scanner, the handheld scanner can scan in either the top, bottom, left, or right direction, so the read image may be rotated or mirrored and input. By detecting the reading direction before starting the detection process of the two-dimensional code and correcting it to an erect image, or extracting while correcting so that it becomes an erect image when extracting after detecting the two-dimensional code, A two-dimensional code with the correct orientation can always be extracted.
[0039]
Hereinafter, embodiments of the present invention will be described in detail with reference to the drawings.
[0040]
FIG. 3 is an overall processing flow of the present invention. First, the input image is scanned in units of blocks, and blocks satisfying a predetermined condition are detected using the methods (1) to (4) described above (S101). Next, an area where the detected blocks are connected is detected (S102). Subsequently, a two-dimensional code region is detected based on the region detected in S102 (S103). Then, a two-dimensional code image is extracted from the detected two-dimensional code area (S104). Finally, the inclination angle of the two-dimensional code is detected, and if necessary, inclination correction is performed (S105).
[0041]
FIG. 4 is a diagram showing a configuration of a block information table for storing block information detected from an input image. The block number is a serial number assigned to the blocks detected as part of the two-dimensional code in the order of detection. In order to indicate the end of the detected block, an EOB (End Of Block table) is stored at the end of the table.
[0042]
For each detected block, the X coordinate and Y coordinate at the upper left of the block, the number of blocks coupled to the block, and the serial number of the area constituted by the coupled blocks are stored. The notation of the value of each item in the block information table of the detected i-th block is represented by Xi as the X coordinate, Yi as the Y coordinate, Ci as the number of connected blocks, and Ri as the area number.
[0043]
In the following embodiment, a two-dimensional code is detected using this block information table.
[0044]
FIG. 5 is a diagram showing a processing flow for detecting a block of a two-dimensional code, and corresponds to the processing of S101 in FIG. In the figure, x and y are the X and Y coordinates, respectively, in the upper left of the scanned block, and M and N are the horizontal and vertical pixel numbers of the block, respectively. WIDTH and HEIGHT represent the number of horizontal pixels and the number of vertical pixels of the input image, respectively. i is a variable for indicating the number of the detected block.
[0045]
First, as an initial setting, x = 0, y = 0, that is, the origin at the upper right of the input image is set as the upper left coordinate of the block, and at the same time, i = 1 is set to indicate the first block (S102).
[0046]
In S202, the block to be scanned is set to a rectangular area having a width of M pixels and a height of N pixels where the upper left coordinates are (x, y), and this block has predetermined conditions, that is, the black pixel rate and the number of change points, It is identified whether or not the connected state of black pixels is a predetermined value (S203). If it is determined in S203 that the block does not satisfy the predetermined condition, the process proceeds to S206, and if it is determined that the condition is satisfied, the process proceeds to S204.
[0047]
In S204, the i-th item in the block information table is selected, x is stored in Xi, y is stored in Yi, and 1 is added to block number i to indicate the next detected block (S205).
[0048]
In S206, by adding M to x, the upper left coordinate of the block to be scanned next is moved by M pixels in the X-axis direction. In S207, it is checked whether or not x + M is equal to or greater than WIDTH, that is, whether or not the right end of the block having a width of M pixels having x as the upper left X coordinate does not exceed the width of the input image. If x + M is less than WIDTH, the process returns to S202. If x + M is greater than or equal to WIDTH, in S208, x = 0, that is, the X coordinate of the block to be scanned is set at the left end of the input image.
[0049]
In S209, by adding N to y, the upper left coordinate of the block to be scanned next is moved by N pixels in the Y-axis direction. In S210, it is checked whether or not x + Y is greater than or equal to HEIGHT, that is, whether or not the lower end of the block of height N pixels having y as the upper left Y coordinate does not exceed the height of the input image. If y + N is greater than or equal to HEIGHT, the process proceeds to S211. In S211, EOB is stored in the i-th block number of the block information table, and the process ends.
[0050]
On the other hand, if y + N is less than HEIGHT in S210, the process returns to S202.
[0051]
By repeatedly performing steps S202 to S210, the entire input image is scanned in units of blocks, and blocks identified as two-dimensional codes are detected, such as blocks 1 to 26 surrounded by a thick line in FIG. X coordinates and Y coordinates are detected as shown in the block information tables 1 to 26 in FIG.
[0052]
FIG. 7 shows an example in which the block width M = 32 pixels and the height = 32 pixels.
FIG. 6 is a diagram showing a processing flow for detecting an area formed by connecting blocks detected in S101 of FIG. 3, and corresponds to the processing of S102 of FIG.
[0053]
In the figure, i is a variable for indicating the block number in the block information table, and k is a variable for indicating the number of the detected area.
[0054]
First, as an initial setting, the number of combined blocks and the area number from the top of the block information table (FIG. 4) to EOB are all cleared to 0 (S301).
[0055]
In S302, the block number i = 1 is set, that is, the head of the block information table is indicated, and the area number is set to k = 1, that is, the value indicating the first area is set.
[0056]
In S303, it is checked whether or not the area number Ri of the i-th block table is 0, that is, whether or not the i-th block already belongs to some area. The process proceeds to S304, and if it is not 0, it is determined that it already belongs to the area, and the process proceeds to S307.
[0057]
In S304, an area composed of blocks starting from block i is detected by a method such as “boundary tracking method”, and the number P of blocks constituting the detected area is obtained. The boundary tracking method is a generally known method. For example, “image processing” (Ozaki et al., Kyoritsu Shuppan, 1993, p187-188) and “image processing engineering” (Taniguchi, Hen, Kyoritsu Publishing, 1996, p116-118).
[0058]
In S305, referring to the block information table, P is set for the number of all blocks Ci included in the area detected in S301, and k is set for the area number Ri.
[0059]
In S306, 1 is added to the area number k.
[0060]
In S307, 1 is added to i to refer to the next block information table item.
[0061]
In S308, it is checked whether or not the block number column of the i-th block information table is EOB, that is, whether or not the processing has been completed for all the blocks detected in S101. If the block number is not EOB, the process returns to S303. If the block number is EOB, it is determined that all the processes have been completed, and the process is completed.
[0062]
By repeatedly performing the processing from S303 to S308, a region formed by connecting blocks identified as a two-dimensional code, such as regions 1 to 4 in FIG. 7, is detected, as shown in the block information table in FIG. For each block, the number of connected blocks and the area number are obtained. For example, in the case of block 6, the number of blocks to be joined belongs to 20 areas, and the area number is 3.
[0063]
FIG. 9 is a process flow showing a first embodiment of a process for detecting a two-dimensional code area, and corresponds to the process of S103 in FIG.
[0064]
In S401, referring to the block information table, the maximum value of the number of combined blocks is detected and set as Rmax. In the example of FIG. 8, Rmax = 20.
[0065]
In S402, the minimum value (Xmin, Ymin) and the maximum value (Xmax, Ymax) of the X coordinate and the Y coordinate are determined among the blocks whose number of combined blocks matches Rmax. In the example of FIG. 8, the coordinates (X6, Y6) of the block 6 = (192, 352) as the minimum coordinate values (Xmin, Ymin), and the coordinates (X26, Y26) of the block 26 as the maximum coordinate values (Xmax, Ymax). ) = (352, 448) is detected.
[0066]
In S403, a rectangular area having the upper left corner coordinates (Xmin-M, Ymin-N) and the lower right corner coordinates (Xmax + 2 × M, Ymax + 2 × N) is determined as a two-dimensional code area. In the example of FIG. 7, a rectangular area C 1 separated by one block from the area 3 of FIG. 10A is detected as a two-dimensional code area.
[0067]
In this method, a large area is detected as a two-dimensional code with respect to FIG. 10B which is an actual two-dimensional code.
[0068]
FIG. 11 is a process flow showing a second embodiment of the process for detecting the two-dimensional code region, and corresponds to the process of S103 in FIG.
[0069]
In S501, referring to the block information table, the maximum value of the number of combined blocks is detected and set as Rmax. In the example of FIG. 8, Rmax = 20.
[0070]
In S502, the center of the region where the number of combined blocks is Rmax is determined as the reference position for detecting the two-dimensional code region. In the example of FIG. 8, region 3 (FIG. 10A) is selected as the region having the maximum number of combined blocks as shown in FIG. 10, and FIG. 12D is determined as the center thereof. The center position here may be the center of a rectangular area circumscribing the area 3.
[0071]
In S503, scanning is performed in units of rectangular blocks in the vertical and horizontal directions from the detection reference position determined in S502, and a position where the number of black pixels in the block is equal to or less than Q is detected. Q may be 0, but a certain number may be set in consideration of the influence of noise and the like.
[0072]
FIG. 12 is an enlarged view of the region 3 portion of FIG. In this example, the positions of A on the left side, B on the right side, C on the upper side, and D on the lower side are detected. When Q = 0 is set and there is no noise, the detected vicinity of A is as shown in the lower diagram of FIG. 12, and the position of A ′, that is, the reference position side of the block may be determined as the detected position.
[0073]
In S504, a rectangle is determined as a two-dimensional code area so that a predetermined number of pixels can be separated in the direction opposite to the detection reference position from the upper, lower, left and right four points detected in S503. In FIG. 12, a rectangle (outermost rectangle) set so as to pass a position that is E pixels away from each of the detection positions A to D is a two-dimensional code region.
[0074]
As described above, in the first and second embodiments for detecting the two-dimensional code region, even when the two-dimensional code is inclined, the region including the entire two-dimensional code can be detected. Furthermore, the two-dimensional code can be restored more correctly by detecting the inclination of the detected two-dimensional code and correcting the inclination.
[0075]
FIG. 13 is a processing flow for correcting the inclination of the two-dimensional code, and corresponds to the processing of S105 in FIG.
[0076]
In S601, scanning is performed in block units at predetermined intervals from the detection reference position in the two-dimensional code at a predetermined interval, and a position where the number of black pixels in the block is Q or less is detected. The detection method here is the same as in S503. By the processing of S601, the position on the boundary line on each side of the two-dimensional code is detected.
[0077]
In the example of the two-dimensional code area of FIG. 12, as shown in FIG. 14, A1 to A7 on the upper boundary line of the two-dimensional code, B1 to B7 on the lower boundary line, C1 to C5 on the left boundary line, The positions D1 to D5 are detected on the boundary line.
[0078]
In S602 to S605, the upper, lower, left, and right detection positions are linearly approximated to obtain respective inclination angles a1 to a4. In the example of FIG. 14, the slope a1 of the approximate straight line A passing through A1 to A7 is calculated for the upper side. The tilt angle is calculated in the same manner for the lower side, the left side, and the right side.
[0079]
In S606, using the fact that the left and right inclination angles are orthogonal to the upper and lower inclination angles, the average inclination of a1 to a4 is calculated, and the inclination angle θ of the two-dimensional code is determined by the following equation. To do.
[0080]
θ = (a1 + a2 + (a3-90) + (a4-90)) ÷ 4
In S607, θ is compared with a predetermined value θmin, and if θ is larger than θmin, the tilt correction processing is performed in S608 and the processing is terminated. If θ is equal to or smaller than θmin, the processing is terminated without performing tilt correction. . Thus, when the tilt angle is small and tilt correction is not necessary, the processing time can be shortened by not performing the rotation process.
[0081]
As a known example of a method for automatically correcting an erect image by detecting a reading direction, there is “an image state detecting device and a document image correcting device using the same” (Japanese Patent Publication No. 316798).
[0082]
By performing this correction process and correcting the input image to an erect image before performing the process of S101 in FIG. 3, since the processes after S101 are performed on the image corrected to the erect image, the rotation is performed. And a two-dimensional code with mirror image inversion corrected.
FIG. 15 is a diagram for explaining another method for detecting a block constituting a two-dimensional code, and for explaining how to obtain a distance between black pixels for a pixel of interest in an 8 × 8 pixel block. FIG. Here, the upper left pixel in the figure is X1,1, the right pixel of X1,1 is the lower pixel of X2,1, X1,1, and the subscript is changed to X2,1 to represent each pixel.
[0083]
First, paying attention to the black pixels X4, 4 in Fig. 5, the closest black pixels to X4, 4 in the vertical and horizontal directions are X4, 3, X4, 8, X1, 4, X6, 4. , X4,4 distance between black pixels D4,4 is calculated by the following formula
Figure 0004419269
If there is a direction in which no black pixel exists in the top, bottom, left, and right, or if there is a direction in which the pixel of interest is at the outer edge of the block and no pixel exists, the term corresponding to that direction is zero. For example, if the left side of X4, 4 including X1, 4 is all white pixels, the distance between black pixels for X4, 4 is as follows.
[0084]
Figure 0004419269
In general, the black pixel interval for the focused black pixel is calculated by the following equation.
[0085]
Figure 0004419269
The first to fourth terms in Equation (3) mean that the distance from the black pixel that is a pixel, b pixel, c pixel, and d pixels apart from each other up, down, left, and right is calculated. Can be expressed as a + b + c + d.
[0086]
The average distance D between the black pixels for all the black pixels in the block can be calculated by the following equation, where N is the number of black pixels in the block.
[0087]
D = (ΣΣDi, j) / N (4))
Here, the first Σ indicates that Di and j are added from i = 1 to N, and the second Σ indicates that Di and j are added from j = 1 to N.
FIG. 16 is an example of black pixel distribution in each of the character block (A) and the two-dimensional code block (B). Generally, black pixels are locally gathered in a character block, and black pixels are present at relatively distant positions in a two-dimensional code block.
[0088]
FIG. 17 is an example in which the distance between the pixels described above is calculated for the character block and the two-dimensional code block shown in FIG. A small rectangle drawn with a bold line represents a black pixel, and a numerical value in the rectangle is a value obtained by calculating the black pixel interval according to the expression (1) for the black pixel.
[0089]
In the example of FIG. 16, the sum between the black pixels of the character block (A) is 63, and the number of black pixels in the block is 24, so the average black pixel distance is D = 2.6 (63 ÷ 24). On the other hand, the total number of black pixels in the two-dimensional code block (B) is 131, and the number of black pixels in the block is 27. Therefore, the average black pixel distance is D = 4.9 (131 ÷ 27). The space between the average black pixels of the two-dimensional code block is larger than that of the character block.
[0090]
The average black pixel interval D increases as the interval between the black pixels increases, as is apparent from the equation (3). As shown in FIG. 16, since the black pixels in the two-dimensional code block (A) are present at positions that are different from those in the character block (B), the intervals between the black pixels are larger than those in the character block. Therefore, the average black pixel distance D of the two-dimensional code block is also larger than that of the character block. The difference between the black pixel intervals is used to identify whether the block is part of a character or part of a two-dimensional code.
[0091]
The threshold value Dth between the black pixels for identifying the character block and the two-dimensional code is determined as follows. First, a plurality of document images including only characters are divided into blocks, and an average D1 between average black pixels obtained for all blocks is obtained. Next, a plurality of two-dimensional code images are divided into blocks, and an average D2 between average black pixels of all blocks is obtained in the same manner as in the case of character blocks. Since D1 and D2 thus obtained are considered to represent the average average black pixels between the character and the two-dimensional code block, respectively, the midpoint of D1 and D2 is determined as the threshold value Dth.
[0092]
If the average black pixel distance of the block is less than Dth, it can be identified as a character block, and if it is greater than Dth, it can be identified as a two-dimensional code block.
[0093]
【The invention's effect】
As described above, according to the two-dimensional code extraction method of the present invention, only the two-dimensional code can be automatically extracted from the image data in which the two-dimensional code and characters and diagrams are mixed. For this reason, when a 2D code is printed together with a document or diagram on a sheet of paper, the image scanner will automatically extract the 2D code from the scanned image. It can be restored to the above, greatly contributing to the improvement of the readability of the two-dimensional code.
[Brief description of the drawings]
FIG. 1 is a drawing schematically showing a document image in which a two-dimensional code and a document / chart read by an image scanner are mixed, and shows a state scanned in units of M × N blocks.
FIG. 2 is an enlarged view of a block detected as a two-dimensional code in FIG.
FIG. 3 is a flowchart illustrating a two-dimensional code detection procedure according to an embodiment of the present invention.
FIG. 4 shows a block information table.
FIG. 5 is a flowchart showing a detection process procedure of a two-dimensional code block.
FIG. 6 is a flowchart showing a detection processing procedure for an area formed by adjacent blocks.
FIG. 7 is a diagram illustrating two-dimensional code extraction.
FIG. 8 is a diagram showing an example of a block information table.
FIG. 9 is a flowchart showing detection processing of a two-dimensional code area.
FIG. 10 is a diagram showing a state of a detected two-dimensional code area.
FIG. 11 is a flowchart showing detection processing of a two-dimensional code good doctor.
12 is an enlarged view of the two-dimensional code area detected in FIG.
FIG. 13 is a flowchart showing the detection of the inclination of a two-dimensional code and its correction processing.
FIG. 14 is a diagram showing a state of a tilted two-dimensional code.
FIG. 15 is a diagram illustrating two-dimensional code area detection.
FIG. 16 is a diagram showing a black pixel distribution of a character block and a two-dimensional code block.
FIG. 17 is a diagram illustrating a result of calculating a distance between black pixels between the character block illustrated in FIG. 16 and a two-dimensional code block;

Claims (6)

入力した画像データをM×N画素(M、Nは正の整数)の矩形ブロック単位に走査し、
前記走査したブロックから所定の条件を満たすブロックを検出し、
前記検出されたブロックの中で隣接して連結しているブロックにより構成される領域を検出し、
前記検出された連結領域の中で当該領域を構成するブロック数が所定の範囲内の領域を選択し、該選択した領域を囲む領域を二次元コード領域として検出し、前記入力画像から二次元コードの画像を抽出することを特徴とする、二次元コード抽出方法。
Scan the input image data in units of rectangular blocks of M × N pixels (M and N are positive integers)
Detecting blocks satisfying a predetermined condition from the scanned blocks;
Detecting a region constituted by adjacently connected blocks among the detected blocks;
A region in which the number of blocks constituting the region is within a predetermined range is selected from the detected connected regions, a region surrounding the selected region is detected as a two-dimensional code region, and a two-dimensional code is detected from the input image. A method for extracting a two-dimensional code, characterized in that an image is extracted.
請求項1記載の二次元コード抽出方法において、
前記ブロックの検出は、ブロック内の白画素と黒画素の比率が所定の範囲内にあるブロックを、二次元コードを構成するブロックとして検出することを特徴とする二次元コード抽出方法。
The two-dimensional code extraction method according to claim 1, wherein
In the block detection, a block in which a ratio of white pixels to black pixels in the block is within a predetermined range is detected as a block constituting the two-dimensional code.
請求項1記載の二次元コード抽出方法において、
前記ブロックの検出は、ブロック内の総画素数に対するブロック内の水平ラインおよび/または垂直ライン内の画素値の変化点の個数の割合が所定の範囲内になるブロックを、二次元コードを構成するブロックとして検出することを特徴と
する二次元コード抽出方法。
The two-dimensional code extraction method according to claim 1, wherein
In the detection of the block, a block in which the ratio of the number of change points of the pixel value in the horizontal line and / or vertical line in the block to the total number of pixels in the block is within a predetermined range constitutes a two-dimensional code A two-dimensional code extraction method characterized by detecting as a block.
請求項1記載の二次元コード抽出方法において、
前記ブロックの検出は、ブロック内の各ラインに含まれる黒画素の水平方向の射影または/および垂直方向の射影の変化の度合いが所定の範囲内になるブロックを検出することを特徴とする二次元コード抽出方法。
The two-dimensional code extraction method according to claim 1, wherein
The block detection is performed by detecting a block in which the degree of change in projection in the horizontal direction and / or projection in the vertical direction of black pixels included in each line in the block falls within a predetermined range. Code extraction method.
請求項1記載の二次元コード抽出方法において、
前記検出された二次元コードの領域内における任意の位置から、上下方向および左右方向に所定の大きさの矩形ブロック単位に走査し、
走査した矩形内の黒画素数が所定の値以下になる位置を各方向について検出し、
検出位置を囲む矩形領域を二次元コードとして抽出することを特徴とする二次元コード抽出方法。
The two-dimensional code extraction method according to claim 1, wherein
From an arbitrary position in the detected two-dimensional code area, scan in units of a rectangular block of a predetermined size in the vertical direction and the horizontal direction,
Detect the position where the number of black pixels in the scanned rectangle is less than a predetermined value for each direction,
A two-dimensional code extraction method, wherein a rectangular area surrounding a detection position is extracted as a two-dimensional code.
請求項1記載の二次元コード抽出方法において、
前記走査したブロック内に存在する黒画素同士の平均距離を求め、
前記求められた黒画素間平均距離の値が所定値以上の場合に、当該ブロックを二次元コードを構成するブロックとして抽出することを特徴とする、二次元コード抽出方法。
The two-dimensional code extraction method according to claim 1, wherein
Find the average distance between the black pixels present in the scanned block,
A two-dimensional code extraction method, comprising: extracting the block as a block constituting a two-dimensional code when the calculated average distance between black pixels is a predetermined value or more.
JP2000116429A 2000-04-18 2000-04-18 Two-dimensional code extraction method Expired - Fee Related JP4419269B2 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2000116429A JP4419269B2 (en) 2000-04-18 2000-04-18 Two-dimensional code extraction method
US09/835,625 US7350710B2 (en) 2000-04-18 2001-04-17 Two-dimensional code extracting method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000116429A JP4419269B2 (en) 2000-04-18 2000-04-18 Two-dimensional code extraction method

Publications (2)

Publication Number Publication Date
JP2001307014A JP2001307014A (en) 2001-11-02
JP4419269B2 true JP4419269B2 (en) 2010-02-24

Family

ID=18627896

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000116429A Expired - Fee Related JP4419269B2 (en) 2000-04-18 2000-04-18 Two-dimensional code extraction method

Country Status (2)

Country Link
US (1) US7350710B2 (en)
JP (1) JP4419269B2 (en)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4278918B2 (en) * 2002-04-19 2009-06-17 富士通株式会社 Image data processing apparatus and method
JP4558482B2 (en) 2002-06-05 2010-10-06 ス、ロンビン National language character information optimization digital operation coding and input method and information processing system
US7298921B2 (en) * 2003-01-29 2007-11-20 Colortrac Limited Document scanning method and document scanner
EP1612722B1 (en) * 2003-04-08 2016-01-06 Nippon Telegraph And Telephone Corporation Information coding device, information decoding device, and method thereof, and program
AU2003227506A1 (en) * 2003-04-15 2004-11-04 Fujitsu Limited Code recognizing method and device
WO2004097717A1 (en) * 2003-05-02 2004-11-11 Yutaka Kiuchi 2-dimensional code read method, display method, and execution program
JP4180497B2 (en) 2003-12-05 2008-11-12 富士通株式会社 Code type discrimination method and code boundary detection method
EP2953350B1 (en) * 2005-03-11 2017-09-27 Hand Held Products, Inc. Bar code reading device with global electronic shutter control
US7568628B2 (en) 2005-03-11 2009-08-04 Hand Held Products, Inc. Bar code reading device with global electronic shutter control
EP1868137B1 (en) 2005-03-18 2011-06-29 Fujitsu Ltd. Code image processing method
US7770799B2 (en) 2005-06-03 2010-08-10 Hand Held Products, Inc. Optical reader having reduced specular reflection read failures
KR100828539B1 (en) * 2005-09-20 2008-05-13 후지제롯쿠스 가부시끼가이샤 Detection method of two dimensional code, detection device thereof, and storage medium having detection program storaged therein
JP4911340B2 (en) * 2006-02-10 2012-04-04 富士ゼロックス株式会社 Two-dimensional code detection system and two-dimensional code detection program
JP4874706B2 (en) * 2006-04-28 2012-02-15 シヤチハタ株式会社 QR code reader
AU2008226843A1 (en) * 2007-03-08 2008-09-18 Microscan Systems, Inc. Detection and segmentation of a two-dimensional code
JP5111055B2 (en) * 2007-10-26 2012-12-26 キヤノン株式会社 Image processing apparatus, image processing method, and computer program
US20100166268A1 (en) * 2008-12-30 2010-07-01 Ebm Technologies Incorporated Storage system for storing the sampling data of pathological section and method thereof
CN111539238B (en) * 2020-04-27 2023-08-18 广州致远电子股份有限公司 Two-dimensional code image restoration method and device, computer equipment and storage medium
CN113947097B (en) * 2020-07-15 2024-04-09 花瓣云科技有限公司 Two-dimensional code identification method and electronic equipment

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1329263C (en) * 1989-03-01 1994-05-03 Mark Krichever Bar code scanner
US5296690A (en) * 1991-03-28 1994-03-22 Omniplanar, Inc. System for locating and determining the orientation of bar codes in a two-dimensional image
US5557091A (en) * 1994-04-15 1996-09-17 Krummel; Larry Method and system for bar code image processing
TW434520B (en) * 1998-06-30 2001-05-16 Sony Corp Two-dimensional code recognition processing method, device therefor and medium
EP0984385B1 (en) * 1998-08-31 2013-02-20 Sony Corporation Two-dimensional code recognition processing
US7050631B2 (en) * 2002-10-30 2006-05-23 Sick Auto Ident, Inc. Barcode detection system

Also Published As

Publication number Publication date
US7350710B2 (en) 2008-04-01
JP2001307014A (en) 2001-11-02
US20020051573A1 (en) 2002-05-02

Similar Documents

Publication Publication Date Title
JP4419269B2 (en) Two-dimensional code extraction method
EP0483391B1 (en) Automatic signature verification
JP2986383B2 (en) Method and apparatus for correcting skew for line scan images
JP4525787B2 (en) Image extraction apparatus and image extraction program
US5418865A (en) Mark sensing on a form
US5077811A (en) Character and picture image data processing system
JPH03201866A (en) Decision of picture skew angle from data including data of compressed form
US7194144B1 (en) Document image processing device, document image merging method, and storage medium recording a document image merging program
US8682080B2 (en) Image processing apparatus, image processing method, image processing program, and storage medium
JP4594952B2 (en) Character recognition device and character recognition method
US6771842B1 (en) Document image skew detection method
JP3238504B2 (en) Document classification method
US8064636B2 (en) Image processing apparatus and method of controlling the same
CN115619656A (en) Digital file deviation rectifying method and system
JP2004165969A (en) Image processing apparatus and program thereof
EP0899679B1 (en) Line direction deciding device, image inclination detecting device and image inclination correction device
JP2018128825A (en) Image processing apparatus and image processing program
US7151859B2 (en) Method and system for correcting direction or orientation of document image
US5113267A (en) Apparatus for and method of reconstructing a document
Lehal et al. A range free skew detection technique for digitized Gurmukhi script documents
JP4208520B2 (en) Image processing apparatus, image processing method, program, and storage medium
JP3303246B2 (en) Image processing device
JP2006229685A (en) Distortion determination device for business form
EP0476873A2 (en) Method of and apparatus for separating image regions
JPH11288453A (en) Method and system for detecting skew angle and black boundary line of original image in scan environment for reproduction

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070322

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090206

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090303

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090424

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20091110

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20091123

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121211

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121211

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131211

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees