JP4970385B2 - Two-dimensional code reader and program thereof - Google Patents

Two-dimensional code reader and program thereof Download PDF

Info

Publication number
JP4970385B2
JP4970385B2 JP2008208095A JP2008208095A JP4970385B2 JP 4970385 B2 JP4970385 B2 JP 4970385B2 JP 2008208095 A JP2008208095 A JP 2008208095A JP 2008208095 A JP2008208095 A JP 2008208095A JP 4970385 B2 JP4970385 B2 JP 4970385B2
Authority
JP
Japan
Prior art keywords
dimensional code
boundary
point
image data
distortion
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
JP2008208095A
Other languages
Japanese (ja)
Other versions
JP2010044586A (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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2008208095A priority Critical patent/JP4970385B2/en
Publication of JP2010044586A publication Critical patent/JP2010044586A/en
Application granted granted Critical
Publication of JP4970385B2 publication Critical patent/JP4970385B2/en
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Image Processing (AREA)
  • Editing Of Facsimile Originals (AREA)
  • Facsimile Image Signal Circuits (AREA)

Description

この発明は、例えば印刷された2次元コードをカメラにより撮像し、その画像データをもとに2次元コードを解読する2次元コード読取装置とそのプログラムに関する。   The present invention relates to, for example, a two-dimensional code reading apparatus that captures an image of a printed two-dimensional code with a camera and decodes the two-dimensional code based on the image data, and a program thereof.

近年、雑誌等の印刷物に表示されたQRコードに代表される2次元コードを例えば携帯電話機のカメラにより撮像し、その画像データから上記2次元コードに含まれるURL(Uniform Resource Locator)を認識する。そして、このURLをもとにインターネットに対しアクセスすることにより、対応するWebサーバから情報を取得できるようにするサービスが普及している。この種のサービスを利用すると、ユーザはURLをキー操作により入力する必要がなくなり、大変便利である。   In recent years, a two-dimensional code represented by a QR code displayed on a printed matter such as a magazine is imaged by a camera of a mobile phone, for example, and a URL (Uniform Resource Locator) included in the two-dimensional code is recognized from the image data. Then, a service that allows information to be acquired from a corresponding Web server by accessing the Internet based on this URL has become widespread. When this type of service is used, the user does not need to input the URL by key operation, which is very convenient.

しかしながら、2次元コードを携帯電話機のカメラにより撮像する際に、2次元コードにカメラが正対していないと、2次元コードの撮像画像が台形状に歪んでしまい、2次元コードを正しく認識できなくなることがある。そこで、従来では撮像された2次元コードの形状を矯正する機能を備えた2次元コード読取装置が提案されている。例えば、図19に示すように撮像された2次元コード画像PCの周囲に四角形ABCDを設定し、0≦s≦1,0≦t≦1を満たすs、tに対してAP:PB=CP′:P′D=s:1−s、AQ:QC=BQ′:Q′D=t:1−tとなるPP′及びQQ′を設定する。これにより任意のs及びtに対してPP′とQQ′の交点R(s,t) が求まる。ここで、あるtに対して0から1までsを変化させることにより2次元コードの一部を検査することが可能となる。さらに、0から1までのtに対して上記検査線を設定することにより2次元コード全体を検査することが可能となり、画像に含まれるデータ領域のセル位置が決定される(例えば、特許文献1を参照。)。   However, when the two-dimensional code is captured by the camera of the mobile phone, if the camera does not face the two-dimensional code, the captured image of the two-dimensional code is distorted into a trapezoidal shape and the two-dimensional code cannot be recognized correctly. Sometimes. Therefore, conventionally, a two-dimensional code reading device having a function of correcting the shape of the captured two-dimensional code has been proposed. For example, as shown in FIG. 19, a square ABCD is set around the captured two-dimensional code image PC, and AP: PB = CP ′ for s and t satisfying 0 ≦ s ≦ 1, 0 ≦ t ≦ 1. : PP ′ and QQ ′ are set such that P′D = s: 1−s, AQ: QC = BQ ′: Q′D = t: 1−t. As a result, the intersection R (s, t) between PP ′ and QQ ′ is obtained for any s and t. Here, a part of the two-dimensional code can be inspected by changing s from 0 to 1 with respect to a certain t. Furthermore, it becomes possible to inspect the entire two-dimensional code by setting the inspection line for t from 0 to 1, and the cell position of the data area included in the image is determined (for example, Patent Document 1). See).

特開2006−155218号公報JP 2006-155218 A

ところが、上記従来より提案されている装置は、台形状の歪みに対しては有効であるが、例えばカメラの光学系の歪みや印刷物の表面の歪みの影響により、2次元コードの撮像画像が例えば図18(a),(b)に示すように糸巻き型又は樽型に歪んだ場合には、このような曲線状歪みを補正することができず、その結果高精度の認識を行うことができなかった。   However, although the devices proposed so far are effective for trapezoidal distortion, a captured image of a two-dimensional code is obtained, for example, due to the influence of the distortion of the optical system of the camera or the distortion of the surface of the printed material. As shown in FIGS. 18A and 18B, when the pincushion type or barrel type is distorted, such curvilinear distortion cannot be corrected, and as a result, highly accurate recognition can be performed. There wasn't.

この発明は上記事情に着目してなされたもので、その目的とするところは、2次元コード画像が曲線状歪みを有する場合でも、この曲線状歪みを効果的に矯正して高精度のコード解読を可能にした2次元コード読取装置とそのプログラムを提供することにある。   The present invention has been made paying attention to the above circumstances, and the purpose thereof is to effectively correct the curvilinear distortion even when the two-dimensional code image has curvilinear distortion, and decode the code with high accuracy. Is to provide a two-dimensional code reading apparatus and its program.

上記目的を達成するためにこの発明の第1の観点は、撮像手段から2次元コードの画像データを取り込んでメモリに記憶する。そして、メモリから読み出した画像データから、先ず当該2次元コードに含まれる複数のファインダパターンを検出し、この検出された複数のファインダパターンの各々についてその輪郭を表す辺の境界点を検出する。次に、この検出された複数のファインダパターンの辺の境界点をもとに、上記2次元コードの画像データの輪郭を表す4辺の形状を直線及び曲線の少なくとも一方で近似した近似線を生成し、この生成された近似線をもとに上記2次元コードの画像データの歪みを矯正して、この歪みが矯正された2次元コードの画像データを上記メモリに記憶する。そして、この歪みが矯正された2次元コードの画像データをもとに上記2次元コードを解読して出力するように構成る。
上記2次元コードの画像データの4辺の形状を近似して当該4辺の境界線を検出する手段としては、複数のファインダパターンの辺の境界点をもとに上記2次元コードの画像データの輪郭を表す辺の傾きを算出し、この算出された辺の傾きから推測される方向に画素探索を行って、上記2次元コードの画像データの辺を表す境界点を検出する。そして、上記検出された境界点の各々について、当該境界点が、上記算出された辺の傾きから推測される範囲内に含まれているか否かを判定し、含まれていないと判定された境界点をエラー点として上記境界点から削除する手段を用いる。
In order to achieve the above object, according to a first aspect of the present invention, image data of a two-dimensional code is fetched from an imaging means and stored in a memory. Then, a plurality of finder patterns included in the two-dimensional code are first detected from the image data read from the memory, and a boundary point of a side representing the outline of each of the detected plurality of finder patterns is detected. Next, on the basis of the detected boundary points of the plurality of finder patterns, an approximate line is generated by approximating at least one of a straight line and a curve of the shape of the four sides representing the contour of the image data of the two-dimensional code. Then, the distortion of the image data of the two-dimensional code is corrected based on the generated approximate line, and the image data of the two-dimensional code whose distortion is corrected is stored in the memory. Then, it configured to output image data of the two-dimensional code which the distortion is corrected by decoding the two-dimensional code based.
As means for approximating the shape of the four sides of the image data of the two-dimensional code and detecting the boundary lines of the four sides, the image data of the two-dimensional code is based on the boundary points of the sides of the plurality of finder patterns. The inclination of the side representing the contour is calculated, and pixel search is performed in a direction inferred from the calculated inclination of the side to detect a boundary point representing the side of the image data of the two-dimensional code. Then, for each of the detected boundary points, it is determined whether or not the boundary point is included within the range estimated from the calculated side inclination, and the boundary determined not to be included Means for deleting a point from the boundary point as an error point is used.

したがって、撮像した2次元コードの画像が例えば糸巻き型又は樽型の曲線状歪みを有していても、2次元コードの画像データの輪郭を表す4辺の形状が直線及び曲線の少なくとも一方により近似され、その近似線をもとに上記2次元コードの画像データの歪みが矯正される。このため、上記糸巻き型又は樽型の曲線状歪みを有する2次元コード画像に対しても高精度のコード解読を行うことが可能となる。   Therefore, even if the captured image of the two-dimensional code has, for example, a pincushion-type or barrel-type curved distortion, the shape of the four sides representing the contour of the image data of the two-dimensional code is approximated by at least one of a straight line and a curve. The distortion of the image data of the two-dimensional code is corrected based on the approximate line. For this reason, it is possible to perform code decoding with high accuracy even for a two-dimensional code image having the above-described pincushion-type or barrel-type curved distortion.

また、上記目的を達成するためにこの発明の第2の観点は、上記2次元コードの画像データの4辺の形状を近似して当該4辺の境界線を検出する際に、複数のファインダパターンの辺の境界点をもとに上記2次元コードの画像データの輪郭を表す辺の傾きを算出し、この算出された辺の傾きから推測される方向に画素探索を行って、上記2次元コードの画像データの辺を表す境界点を検出し、この検出された境界点に含まれるエラー点を除去する。このとき、上記エラー点を除去する手段としては、2次元コードの画像データの4辺のうち互いに直交する第1及び第2の辺の交点を算出し、この交点より外側の範囲に位置する境界点をエラー点として削除する手段を用いる。
さらに、上記交点の算出手段としては、先ず第1の辺を表す境界点集合に含まれる1個以上の境界点を算出基準点としてしきい値線を引き、第2の辺を表す境界点集合に含まれる境界点が上記しきい値線より交点側に位置するか否かを判定する。そして、上記第2の辺を表す境界点集合のうち上記しきい値線より交点側に位置しない境界点の中から、当該交点に最も近い境界点をしきい値外近接点として検出する。次に、上記算出基準点から上記第1の辺の傾きを推定して引いた直線と上記第2の辺のしきい値外近接点から第2の辺の傾きを推定して引いた直線との交点をもとに交点候補点を算出し、上記第1の辺を表す境界点集合に含まれる境界点のうち上記しきい値線より交点側に位置する境界点の中から上記しきい値直線に最も近い境界点をしきい値内近接点として検出すると共に、上記第2の辺を表す境界点集合に含まれる境界点のうち上記しきい値線より交点側に位置する境界点の中から上記しきい値直線に最も近い境界点をしきい値内近接点として検出する。そして、上記検出された第1の辺のしきい値内近接点と、上記検出された第2の辺のしきい値内近接点のうち、上記算出された交点候補点より外側にあるものはどれかを判定する手段を用いる
このようにすることで、2次元コードの画像データの4辺において探索された境界点の集合に含まれるエラー点を、より一層確実に削除することが可能となる。
In order to achieve the above object, a second aspect of the present invention provides a plurality of finder patterns when detecting the boundary lines of the four sides by approximating the shape of the four sides of the image data of the two-dimensional code. The inclination of the side representing the contour of the image data of the two-dimensional code is calculated based on the boundary point of the two sides, the pixel search is performed in the direction inferred from the calculated side inclination, and the two-dimensional code is calculated. A boundary point representing a side of the image data is detected, and error points included in the detected boundary point are removed. At this time, as means for removing the error point, the intersection of the first and second sides orthogonal to each other among the four sides of the image data of the two-dimensional code is calculated, and the boundary located in the range outside the intersection A means for deleting a point as an error point is used.
Further, as the intersection calculation means, first, a threshold line is drawn using one or more boundary points included in the boundary point set representing the first side as a calculation reference point, and the boundary point set representing the second side It is determined whether the boundary point included in is located on the intersection side of the threshold line. Then, a boundary point closest to the intersection point is detected as an out-threshold proximity point from among boundary points not located on the intersection side of the threshold line in the boundary point set representing the second side. Next, a straight line obtained by estimating the slope of the first side from the calculation reference point, and a straight line obtained by estimating the slope of the second side from the out-of-threshold proximity point of the second side The intersection point candidate point is calculated based on the intersection point of the boundary point, and the threshold value is selected from the boundary points located on the intersection side of the threshold line among the boundary points included in the boundary point set representing the first side. The boundary point closest to the straight line is detected as an in-threshold proximity point, and among the boundary points included in the boundary point set representing the second side, the boundary point located on the intersection side of the threshold line The boundary point closest to the threshold straight line is detected as a proximity point within the threshold. Of the detected first side in-threshold proximity point and the detected second side in-threshold proximity point, those outside the calculated intersection candidate point are A means for determining which one is used is used .
By doing in this way, it becomes possible to delete the error points included in the set of boundary points searched on the four sides of the image data of the two-dimensional code even more reliably.

さらにこの発明の第3の観点は、2次元コードの歪みを矯正する際に以下のような処理を実行するものである。すなわち、先ず2次元コードの画像データの各頂点を結ぶ頂点フレームを生成する。次に、矯正対象の2次元コードの画像データにおける目標座標のピクセル値を算出するために、上記生成された頂点フレームの、上辺における上記目標座標に対応する点の座標値と、下辺における上記目標座標に対応する点の座標値と、左辺における上記目標座標に対応する点の座標値と、右辺における上記目標座標に対応する点の座標値をそれぞれ算出する。またそれと共に、上記2次元コードの画像データの、上辺における上記目標座標に対応する境界点の座標値と、下辺における上記目標座標に対応する境界点の座標値と、左辺における上記目標座標に対応する境界点の座標値と、右辺における上記目標座標に対応する境界点の座標値をそれぞれ算出する。さらに、上記頂点フレームにおいて上記目標座標に対応する目標座標値を算出する。そして、上記頂点フレームの上下左右の各辺について算出された上記目標座標に対応する点から、上記2次元コードの画像データの上下左右の各辺について算出された上記目標座標に対応する境界点へのベクトルを重み付け加算して、2次元コード歪みベクトルを算出し、上記頂点フレームについて算出された目標座標値に、上記算出された2次元コード歪みベクトルを加算して、上記2次元コードの画像データにおける上記目標座標に対応する目標座標値を算出する。
以上の処理を行うことで、曲線状歪みを有する2次元コードの画像データを長方形に矯正することが可能となる。
Further, according to a third aspect of the present invention, the following processing is executed when correcting the distortion of the two-dimensional code. That is, first, a vertex frame connecting the vertices of the image data of the two-dimensional code is generated. Next, in order to calculate the pixel value of the target coordinate in the image data of the two-dimensional code to be corrected, the coordinate value of the point corresponding to the target coordinate on the upper side of the generated vertex frame and the target value on the lower side The coordinate value of the point corresponding to the coordinate, the coordinate value of the point corresponding to the target coordinate on the left side, and the coordinate value of the point corresponding to the target coordinate on the right side are calculated. At the same time, in the image data of the two-dimensional code, the coordinate value of the boundary point corresponding to the target coordinate on the upper side, the coordinate value of the boundary point corresponding to the target coordinate on the lower side, and the target coordinate on the left side The coordinate value of the boundary point to be calculated and the coordinate value of the boundary point corresponding to the target coordinate on the right side are calculated. Further, a target coordinate value corresponding to the target coordinate is calculated in the vertex frame. Then, from the point corresponding to the target coordinate calculated for each of the upper, lower, left and right sides of the vertex frame, to the boundary point corresponding to the target coordinate calculated for each of the upper, lower, left and right sides of the image data of the two-dimensional code. To calculate the two-dimensional code distortion vector, add the calculated two-dimensional code distortion vector to the target coordinate value calculated for the vertex frame, and obtain the image data of the two-dimensional code. A target coordinate value corresponding to the target coordinate at is calculated.
By performing the above processing, it is possible to correct the image data of the two-dimensional code having a curved distortion into a rectangle.

すなわちこの発明の一観点によれば、2次元コード画像が曲線状歪みを有する場合でも、この曲線状歪みを効果的に矯正して高精度のコード解読を可能にした2次元コード読取装置とそのプログラムを提供することができる。   That is, according to one aspect of the present invention, even when a two-dimensional code image has a curvilinear distortion, a two-dimensional code reading apparatus that effectively corrects the curvilinear distortion and enables high-accuracy code decoding, and its A program can be provided.

以下、図面を参照してこの発明に係わる実施形態を説明する。
図1は、この発明の一実施形態における2次元コード読取装置のハードウエア及びソフトウエアの構成を示すブロック図である。
本実施形態の2次元コード読取装置は、中央処理制御ユニット1と、カメラ2と、入力デバイス3と、表示デバイス4とを具備している。なお、2次元コード読取装置が携帯電話機に設けられる場合には、上記中央処理制御ユニット1、カメラ2、入力デバイス3及び表示デバイス4はいずれも携帯電話機が備える既存の構成を利用する。
Embodiments according to the present invention will be described below with reference to the drawings.
FIG. 1 is a block diagram showing the hardware and software configurations of a two-dimensional code reader according to an embodiment of the present invention.
The two-dimensional code reader according to the present embodiment includes a central processing control unit 1, a camera 2, an input device 3, and a display device 4. When the two-dimensional code reader is provided in the mobile phone, the central processing control unit 1, the camera 2, the input device 3, and the display device 4 all use existing configurations provided in the mobile phone.

中央処理制御ユニット1は、CPU(Central Processing Unit)11を備え、このCPU11に対しバス12を介してプログラムメモリ13と、カメラインタフェース(カメラI/F)14と、入出力インタフェース(入力I/F)15と、データメモリ16を接続したものとなっている。   The central processing control unit 1 includes a CPU (Central Processing Unit) 11. A program memory 13, a camera interface (camera I / F) 14, and an input / output interface (input I / F) are connected to the CPU 11 via a bus 12. 15) and the data memory 16 are connected.

カメラI/F14にはカメラ2が接続される。カメラ2は、例えばCCD又はCMOS等の半導体撮像素子を使用したものである。カメラI/F14は、CPU11の制御の下で上記カメラ2を起動し、カメラ2により撮像された2次元コードの画像データを取り込む。   The camera 2 is connected to the camera I / F 14. The camera 2 uses a semiconductor image sensor such as a CCD or CMOS. The camera I / F 14 activates the camera 2 under the control of the CPU 11 and takes in the image data of the two-dimensional code captured by the camera 2.

入出力I/F15には入力デバイス3及び表示デバイス4が接続される。入力デバイス3は、ダイヤルキーと複数の機能キーとから構成される。なお、キーの構成は機構式のキーであっても、また表示デバイス4に表示されたソフトウエアキーであってもよい。表示デバイス4は、例えばLCD又はELを使用したディスプレイからなる。入出力I/F15は、上記入力デバイス3の操作データを取り込むと共に、CPU11の制御の下で表示データを上記表示デバイスに表示させる。   The input device 3 and the display device 4 are connected to the input / output I / F 15. The input device 3 includes a dial key and a plurality of function keys. The key configuration may be a mechanical key or a software key displayed on the display device 4. The display device 4 is composed of a display using, for example, an LCD or an EL. The input / output I / F 15 takes in the operation data of the input device 3 and displays the display data on the display device under the control of the CPU 11.

データメモリ16には、携帯電話機の送受信に必要な電話帳や送受信履歴、送受信メール等の各種データを記憶する領域に加え、この発明に係わる2次元コード読取処理を実施するために必要なデータを一次記憶する領域を備える。2次元コード読取処理を実施するために必要なデータとしては、カメラ2により撮像された2次元コードの画像データやその二値化画像データ、処理過程で生成される種々データが含まれる。   The data memory 16 stores data necessary for carrying out the two-dimensional code reading process according to the present invention in addition to an area for storing various data such as a telephone directory, transmission / reception history, and transmission / reception mail necessary for transmission / reception of the mobile phone. An area for primary storage is provided. Data necessary for carrying out the two-dimensional code reading process includes two-dimensional code image data captured by the camera 2, its binary image data, and various data generated in the process.

プログラムメモリ13には、この発明に係わる2次元コード読取処理を実施するために必要なアプリケーション・プログラムとして、二値化画像生成プログラム131と、ファインダパターン検出プログラム132と、画像回転処理プログラム133と、ファインダパターン境界検出プログラム134と、2次元コード境界線算出プログラム135と、2次元コード歪み矯正プログラム136が格納されている。   The program memory 13 includes, as application programs necessary for carrying out the two-dimensional code reading process according to the present invention, a binarized image generation program 131, a finder pattern detection program 132, an image rotation processing program 133, A finder pattern boundary detection program 134, a two-dimensional code boundary calculation program 135, and a two-dimensional code distortion correction program 136 are stored.

二値化画像生成プログラム131は、カメラ2により撮像された2次元コードの画像データをカメラI/F14を介して取り込んでデータメモリ16に一旦記憶させ、このデータメモリ16から当該画像データを読み出して二値化画像データに変換し、この変換された二値化画像データをデータメモリ16に記憶させる処理を、上記CPU11に実行させる。   The binarized image generation program 131 takes in the image data of the two-dimensional code captured by the camera 2 via the camera I / F 14 and temporarily stores it in the data memory 16, and reads out the image data from the data memory 16. The CPU 11 is caused to execute a process of converting into binarized image data and storing the converted binarized image data in the data memory 16.

ファインダパターン検出プログラム132は、上記データメモリ16から上記二値化画像データを読み出し、この二値化画像データから2次元コードに含まれる複数のファインダパターン(例えばQRコードの場合には3個)を検出するための処理を、上記CPU11に実行させる。   The finder pattern detection program 132 reads the binarized image data from the data memory 16, and from the binarized image data, a plurality of finder patterns (for example, three in the case of QR code) included in the two-dimensional code. The CPU 11 is caused to execute processing for detection.

画像回転処理プログラム133は、上記ファインダパターン検出処理により検出されたファインダパターンの位置に基づいて、上記2次元コードの画像が正立した状態となるように上記二値化画像データを回転させ、この回転処理後の二値化画像データをデータメモリ16に記憶させる処理を、上記CPU11に実行させる。   The image rotation processing program 133 rotates the binarized image data based on the position of the finder pattern detected by the finder pattern detection process so that the image of the two-dimensional code is in an upright state. The CPU 11 is caused to execute a process for storing the binarized image data after the rotation process in the data memory 16.

ファインダパターン境界検出プログラム134は、上記回転処理後の二値化画像データをデータメモリ16から読み出し、この読み出した二値化画像データから各ファインダパターンの黒枠の辺を表す境界点を検出してその座標値をデータメモリ16に記憶させる処理を、上記CPU11に実行させる。   The finder pattern boundary detection program 134 reads the binary image data after the rotation processing from the data memory 16 and detects boundary points representing the sides of the black frame of each finder pattern from the read binary image data. The CPU 11 is caused to execute processing for storing the coordinate values in the data memory 16.

2次元コード境界線算出プログラム135は、上記検出された各ファインダパターンの黒枠の辺を表す境界点の座標値をデータメモリ16から読み出し、この読み出した境界点の座標値に基づいて、2次元コードの輪郭を表す上下左右の各辺の形状を直線及び曲線で近似した近似線を生成する。そして、この生成された近似直線と近似曲線のうちいずれか妥当であるかを判定して、妥当と判定された近似線を上記2次元コードの上下左右の各辺の形状を表す境界線としてその座標値をデータメモリ16に記憶させる処理を、上記CPU11に実行させる。   The two-dimensional code boundary calculation program 135 reads the coordinate value of the boundary point representing the side of the black frame of each detected finder pattern from the data memory 16, and based on the read coordinate value of the boundary point, the two-dimensional code An approximate line is generated by approximating the shape of each of the upper, lower, left and right sides representing the outline of the line by a straight line and a curve. Then, it is determined whether the generated approximate line or approximate curve is appropriate, and the approximate line determined to be valid is used as a boundary line representing the shape of each of the upper, lower, left and right sides of the two-dimensional code. The CPU 11 is caused to execute processing for storing the coordinate values in the data memory 16.

2次元コード歪み矯正プログラム136は、上記2次元コード境界線算出プログラム135により算出された上記2次元コード画像の上下左右の各辺の境界線を表す座標値をデータメモリ16から読み出し、この読み出した上下左右の各辺の境界線をもとに、上記2次元コード画像の二値化画像データの歪みを矯正する処理を、上記CPU11に実行させる。   The two-dimensional code distortion correction program 136 reads from the data memory 16 coordinate values representing the boundary lines of the upper, lower, left and right sides of the two-dimensional code image calculated by the two-dimensional code boundary calculation program 135. The CPU 11 is caused to execute processing for correcting the distortion of the binarized image data of the two-dimensional code image based on the boundary lines of the upper, lower, left and right sides.

次に、以上のように構成された装置による2次元コードの読取処理動作を説明する。図2乃至図5はCPU11によるその処理手順と処理内容を示すフローチャートである。
(1)2次元コードの画像データの取り込み
入力デバイス3においてユーザが撮像操作を行うと、CPU11はステップS11により上記撮像操作を入出力I/F15を介して検出する。そして、ステップS12に移行し、カメラI/F14を介してカメラ2を起動して、当該カメラ2により撮像された2次元コードの画像データをカメラI/F14を介して取り込んでデータメモリ16に記憶させる。
Next, a two-dimensional code reading process operation by the apparatus configured as described above will be described. 2 to 5 are flowcharts showing the processing procedure and processing contents of the CPU 11.
(1) Capture of image data of two-dimensional code When the user performs an imaging operation on the input device 3, the CPU 11 detects the imaging operation via the input / output I / F 15 in step S11. Then, the process proceeds to step S12, the camera 2 is activated via the camera I / F 14, and the image data of the two-dimensional code captured by the camera 2 is captured via the camera I / F 14 and stored in the data memory 16. Let

なお、上記二次元コードの画像データは複数のピクセルにより構成される。ここで、取り込んだ画像データの幅をwidth、高さをheightとすると、取り込んだ画像データはwidth×heightこのピクセルにより構成される。各ピクセルは、RGBカラーモデルにおいて色を表現するデータであり、フレームにおけるx座標値、y座標値及びRGBの各値によって構成され、x座標値は0以上width未満の整数値、y座標値は0以上height未満の整数値であり、x軸は左から右方向へ、y軸は上から下方向へそれぞれ向くものとする。またRGBの各値はいずれも0以上255以下の整数値である。ここで、座標(x,y)におけるRGB各値が(r,g,b)であるとき、
p(x,y)=(r,g,b)
と表される。
The image data of the two-dimensional code is composed of a plurality of pixels. Here, if the width of the captured image data is width and the height is height, the captured image data is constituted by width × height pixels. Each pixel is data representing a color in the RGB color model, and is composed of an x-coordinate value, a y-coordinate value, and RGB values in the frame. The x-coordinate value is an integer value of 0 or more and less than width, and the y-coordinate value is It is an integer value of 0 or more and less than height, and the x-axis is directed from left to right and the y-axis is directed from top to bottom. Each of the RGB values is an integer value of 0 or more and 255 or less. Here, when the RGB values at the coordinates (x, y) are (r, g, b),
p (x, y) = (r, g, b)
It is expressed.

(2)二値化画像データの生成処理
上記二次元コードの画像データが取り込まれると、CPU11はステップS2において二値化画像生成プログラム131を起動し、上記二次元コードの画像データのコントラストを強調するために、当該二次元コードの画像データを二値化画像データに変換する処理を以下のように実行する。
(2) Processing for generating binarized image data When the image data of the two-dimensional code is fetched, the CPU 11 activates the binarized image generating program 131 in step S2 to emphasize the contrast of the image data of the two-dimensional code. In order to do this, the process of converting the image data of the two-dimensional code into binarized image data is executed as follows.

すなわち、先ずステップS21により、上記データメモリ16から二次元コードの画像データを読み出し、当該画像データの各ピクセルの輝度値を算出することによりグレースケール化する。例えば、
Grayscale(x,y)=RGBtoLuminance(r,g,b)
によって輝度値を算出して、グレースケール画像を生成する。なお、輝度値は0以上255以下の値を持つものとする。
That is, first, in step S21, the image data of the two-dimensional code is read from the data memory 16, and the luminance value of each pixel of the image data is calculated to make it gray scale. For example,
Grayscale (x, y) = RGBtoLuminance (r, g, b)
The luminance value is calculated by the above to generate a gray scale image. It is assumed that the luminance value has a value between 0 and 255.

続いて、ステップS22において、上記生成されたグレースケール画像の最大輝度値maxL、再使用輝度値minLをそれぞれ検出し、この検出された最大輝度値maxL、再使用輝度値minLを用いて、以下に示す(1)式によりコントラスト拡大画像を生成する。

Figure 0004970385
Subsequently, in step S22, the maximum luminance value maxL and the reuse luminance value minL of the generated grayscale image are detected, respectively, and the detected maximum luminance value maxL and reuse luminance value minL are used as follows. A contrast-enlarged image is generated by the expression (1) shown below.
Figure 0004970385

さらに、ステップS23において、例えばしきい値を128として下記(2)式に示す処理を実行し、二値化画像データを生成する。そして、この生成した二値化画像データをデータメモリ16に記憶させる。

Figure 0004970385
Furthermore, in step S23, for example, the threshold value is set to 128, and the processing shown in the following equation (2) is executed to generate binarized image data. Then, the generated binarized image data is stored in the data memory 16.
Figure 0004970385

(3)ファインダパターンの検出処理
上記二値化画像データの生成が終了すると、CPU11は次にステップS3によりファインダパターン検出プログラム132を起動し、上記二値化画像データからQRコードに含まれる3個の位置パターン、つまりファインダパターンを検出するための処理を以下のように実行する。
(3) Finder Pattern Detection Processing When the generation of the binarized image data is completed, the CPU 11 next activates the finder pattern detection program 132 in step S3, and the three included in the QR code from the binarized image data. The process for detecting the position pattern, i.e., the finder pattern is executed as follows.

すなわち、先ずステップS31において、データメモリ16から上記二値化画像データを読み出し、この二値化画像データに対しy軸の座標値を固定してx軸方向に走査する。そして、この走査により、例えば図6に示すように“白”、“黒”、“白”、“黒”、“白”のラインパターンを検出すると、各“白”と、各“黒”の長さをそれぞれ確認し、2個目の“黒”から6個目の“黒”までの長さの比、B1:W1:B2:W2:B3が1:1:3:1:1となっている箇所を検出し、この検出値をデータメモリ16に保持させる。   That is, first in step S31, the binarized image data is read from the data memory 16, and the y-axis coordinate value of the binarized image data is fixed and scanned in the x-axis direction. When this scanning detects a line pattern of “white”, “black”, “white”, “black”, “white” as shown in FIG. 6, for example, each “white” and each “black” Confirm each length, and the ratio of the length from the second “black” to the sixth “black”, B1: W1: B2: W2: B3 becomes 1: 1: 3: 1: 1 The detected value is stored in the data memory 16.

具体的には、
L=B1+W1+B2+W2+B3
として0以上のしきい値tに対して

Figure 0004970385
を満たす箇所を検出する。例えば、t=0.3等の値を用いる。 In particular,
L = B1 + W1 + B2 + W2 + B3
For a threshold t greater than or equal to 0
Figure 0004970385
Detect locations that satisfy For example, a value such as t = 0.3 is used.

以下同様に、上記ステップS31によるラインパターンの検出処理をy軸方向の全ての座標値について実行する。そして、全てのラインパターンの検出値が得られたことがステップS32で確認されると、ステップS33に移行して、上記検出された複数のラインパターンのうち互いに接するラインパターンをセグメント化し、このセグメントのサイズが大きい3個をQRコードのファインダパターンとして認識して、その座標値をデータメモリ16に保存させる。   Similarly, the line pattern detection processing in step S31 is executed for all coordinate values in the y-axis direction. When it is confirmed in step S32 that the detection values of all the line patterns have been obtained, the process proceeds to step S33, and the line patterns that are in contact with each other among the detected line patterns are segmented. Are recognized as QR code finder patterns, and their coordinate values are stored in the data memory 16.

(4)画像回転処理
上記3個のファインダパターンの検出が終了すると、CPU11は続いてステップS4に移行して画像回線処理プログラム133を起動し、上記検出されたファインダパターンの位置をもとに上記二値化画像データを以下のように回転させる。
すなわち、先ずステップS41において、上記検出された3個のファインダパターンF1,F2,F3の重心をそれぞれ算出する。そして、この算出された重心をW1=(u1,v1)、W2=(u2,v2)、W3=(u3,v3)として、下記(4)式によりD1,D2,D3を算出する。

Figure 0004970385
(4) Image Rotation Processing When the detection of the three finder patterns is completed, the CPU 11 subsequently proceeds to step S4 to start the image line processing program 133, and based on the position of the detected finder pattern, the CPU 11 The binarized image data is rotated as follows.
That is, first, in step S41, the centers of gravity of the three detected finder patterns F1, F2, and F3 are calculated. Then, D1, D2, and D3 are calculated by the following equation (4), assuming that the calculated center of gravity is W1 = (u1, v1), W2 = (u2, v2), and W3 = (u3, v3).
Figure 0004970385

そして、上記D1,D2,D3の算出結果をもとに、ステップS42において左上、右上、左下の各ファインダパターンを認識する。例えばD1が最大であればF1、D2が最大であればF2、D3が最大であればF3を左上ファインダパターンとして認識する。この処理は、右上と左上のファインダパターン間の距離が最大となることを利用している。図7にD1が最大となる場合の例を示す。   Based on the calculation results of D1, D2, and D3, the upper left, upper right, and lower left finder patterns are recognized in step S42. For example, F1 is recognized as the upper left finder pattern when D1 is the maximum, F2 when D2 is the maximum, and F3 when D3 is the maximum. This process utilizes the fact that the distance between the upper right and upper left viewfinder patterns is maximized. FIG. 7 shows an example in which D1 is maximized.

続いて、右上ファインダパターンと左下ファインダパターンを認識するが、W2とW3を通り直線に対しW1が右側にある場合にはF2を右上ファインダパターン、F3を左下ファインダパターンとし、そうでない場合にはF3を右上ファインダパターン、F2を左下ファインダパターンとする。   Subsequently, the upper right finder pattern and the lower left finder pattern are recognized. When W1 is on the right side with respect to the straight line passing through W2 and W3, F2 is set as the upper right finder pattern, and F3 is set as the lower left finder pattern. Is the upper right finder pattern, and F2 is the lower left finder pattern.

そうして左上、右上、左下の各ファインダパターンが認識されると、CPU11はステップS43において、例えば図8に示すように左上ファインダパターンFPLTのx軸方向に右上ファインダパターンFPRTが位置するように、二次元コード画像の二値化画像データを回転させる。   When the upper left, upper right, and lower left finder patterns are recognized, the CPU 11 determines in step S43 that the upper right finder pattern FPRT is positioned in the x-axis direction of the upper left finder pattern FPLT, for example, as shown in FIG. The binary image data of the two-dimensional code image is rotated.

(5)ファインダパターン境界の検出処理
次にCPU11は、ステップS5によりファインダパターン境界検出プログラム134を起動し、上記回転処理後の二値化画像データから3個のファインダパターンの黒枠の辺を表す境界点を検出する処理を以下のように実行する。
すなわち、CPU11は先ずステップS51において、例えば図9に示すように黒枠のセグメントSを抽出し、黒枠の4角の座標を算出する。4角の座標は、セグメントSに含まれる座標のうち、−x−yが最大となる座標を左上の角(cx1,cy1)、x−yが最大となる座標を右上の角(cx2,cy2)、y−xが最大となる座標を左下の角(cx3,cy3)、x−yが最大となる座標を右下の角(cx4,cy4)となるようにそれぞれ設定する。
(5) Finder Pattern Boundary Detection Processing Next, the CPU 11 activates the finder pattern boundary detection program 134 in step S5, and the boundary representing the sides of the black frames of the three finder patterns from the binary image data after the rotation processing. The point detection process is executed as follows.
That is, in step S51, the CPU 11 first extracts a black frame segment S as shown in FIG. 9, for example, and calculates the coordinates of the four corners of the black frame. Of the coordinates included in the segment S, the coordinates of the four corners are the upper left corner (cx1, cy1), the coordinate having the maximum −xy, and the upper right corner (cx2, cy2), the coordinate having the maximum xy. ), The coordinates where y-x is maximum are set to the lower left corner (cx3, cy3), and the coordinates where xy is maximum are set to be the lower right corner (cx4, cy4).

CPU11は次にステップS52において、上記黒枠のセグメントの上下左右の各辺を検出する。例えば、上辺FinderTopは、

Figure 0004970385
として検出される。 Next, in step S52, the CPU 11 detects the upper, lower, left and right sides of the black frame segment. For example, FinderTop on the upper side
Figure 0004970385
Detected as

これは、図10に示すように黒枠のセグメントS内において左上の角と右上の角との間のxについて、それぞれyが最小となる点の集合を表す。同様に、下辺FinderBottom、左辺FinderLeft、右辺FinderRightは、

Figure 0004970385
として検出される。 As shown in FIG. 10, this represents a set of points at which y is minimum for x between the upper left corner and the upper right corner in the segment S of the black frame. Similarly, the lower FinderBottom, the left FinderLeft, and the right FinderRight are
Figure 0004970385
Detected as

(6)2次元コード境界線の算出処理
CPU11は、次にステップS6に移行して2次元コード境界線算出プログラム135を起動し、上記検出された3個のファインダパターンの黒枠の上下左右各辺の座標値に基づいて、2次元コード画像の輪郭を表す上下左右各辺に含まれる座標をそれぞれ検出し、その近似線を上下左右各辺の境界線として算出する処理を実行する。
(6) Calculation process of two-dimensional code boundary line Next, the CPU 11 proceeds to step S6 to start the two-dimensional code boundary line calculation program 135, and the upper, lower, left and right sides of the black frames of the three detected finder patterns. Based on these coordinate values, the coordinates included in each of the upper, lower, left and right sides representing the contour of the two-dimensional code image are detected, and the approximate line is calculated as the boundary line of the upper, lower, left and right sides.

例えば、2次元コード画像の上辺の境界点座標を検出する場合、CPU11はステップS61〜S68により以下の処理を行う。すなわち、上辺の左側には左上ファインダパターンFPLT、右側には右上ファインダパターンFPRTが位置する。それぞれのファインダパターンFPLT,FPRTの上辺の境界点座標は、先に述べたファインダパターン境界検出処理により既に検出されているので、その検出結果を利用してファインダパターンFPLT,FPRT間に位置する2次元コード画像の上辺上の境界点の集合をステップS62により検出する。   For example, when detecting the boundary point coordinates of the upper side of the two-dimensional code image, the CPU 11 performs the following processing in steps S61 to S68. That is, the upper left finder pattern FPLT is located on the left side of the upper side, and the upper right finder pattern FPRT is located on the right side. Since the boundary point coordinates of the upper sides of the respective finder patterns FPLT and FPRT have already been detected by the finder pattern boundary detection processing described above, the two-dimensional position between the finder patterns FPLT and FPRT is utilized using the detection result. A set of boundary points on the upper side of the code image is detected in step S62.

ここで、左側のファインダパターンFPLTの上辺の境界点の集合をLeftFinderEdge、右側のファインダパターンFPRTの上辺の境界点の集合をRightFinderEdgeとし、LeftFinderEdgeの右端の境界点を(LeftEndX,LeftEndY)、RightFinderEdgeの左端の境界点を(RightStartX,RightStartY)とする。また、LeftFinderEdgeに含まれる境界点の重心を(LeftCenterX,LeftCenterY)、RightFinderEdgeに含まれる座標点の重心を(RightCenterX,RightCenterY)とする。また、LeftFinderEdgeから最小二乗法によって近似した直線をy=alx+bl、RightFinderEdgeから最小二乗法によって近似した直線をy=arx+brとする。この最小二乗法によって得られた直線から、あるx座標における上辺の傾きedgeSlope(x)は、

Figure 0004970385
と推測できる。 Here, the set of boundary points on the upper side of the left finder pattern FPLT is LeftFinderEdge, the set of boundary points on the upper side of the right finder pattern FPRT is RightFinderEdge, the right end boundary point of LeftFinderEdge is (LeftEndX, LeftEndY), and the left end of RightFinderEdge Let the boundary point of be (RightStartX, RightStartY). Further, the center of gravity of the boundary point included in LeftFinderEdge is (LeftCenterX, LeftCenterY), and the center of gravity of the coordinate point included in RightFinderEdge is (RightCenterX, RightCenterY). Further, a straight line approximated from the LeftFinderEdge by the least square method is y = alx + bl, and a straight line approximated from the RightFinderEdge by the least square method is y = arx + br. From the straight line obtained by this least square method, the slope of the upper side edgeSlope (x) at a certain x coordinate is
Figure 0004970385
Can be guessed.

次にCPU11は、データメモリ16から読み出した二値化画像データにおいて、LeftEndXとRightStartXとの間の2次元コード画像の上辺を検出する。その検出処理は例えば図10に示すように、検出された上辺上の点P=(px,py)に対してx座標がpx+k(初期条件ではk=1)となる上辺上の点を検出するためにqy及びryを設定する。そして、qyからryまで下方向に“白”から“黒”に変わる最初の境界点を探索し、見つかった境界点P′=(px+k,py′)を新たな上辺上の境界点として検出する。ここで、qy及びryは、定数cq、cr,dq、drを用いて

Figure 0004970385
として求める。なお、定数については、例えばcq=5、cr=0、dq=0.1、dr=0.1等の値を用いる。 Next, the CPU 11 detects the upper side of the two-dimensional code image between LeftEndX and RightStartX in the binarized image data read from the data memory 16. For example, as shown in FIG. 10, the detection processing is performed by calculating a point on the upper side where the x coordinate is px + k (k = 1 in the initial condition) with respect to the detected point P = (px, py) on the upper side. Set qy and ry to detect. Then, the first boundary point that changes from “white” to “black” in the downward direction from qy to ry is searched, and the found boundary point P ′ = (px + k, py ′) is detected as a boundary point on the new upper side. . Where qy and ry are constants cq, cr, dq, dr
Figure 0004970385
Asking. For the constant, for example, values such as cq = 5, cr = 0, dq = 0.1, dr = 0.1 are used.

一方、以上の処理により新たな境界点が見つからない場合には、kの値を1ずつ増やして探索し、見つかった場合にはP′に対してk=1から同様の処理を行うことで次の境界点を探索する。P=(LeftEndX,LeftEndY)から探索を開始し、px+k=RightStartXとなれば探索終了である。以上の処理によって、左上ファインダパターンFPLTと右上ファインダパターンFPRTとの間に位置する2次元コードの上辺上の境界点の集合MiddleEdgeが検出される。   On the other hand, if no new boundary point is found by the above processing, the search is performed by increasing the value of k by 1. If found, the same processing is performed on P ′ from k = 1. Search for the boundary point of. The search starts from P = (LeftEndX, LeftEndY), and the search ends when px + k = RightStartX. Through the above processing, a set of boundary points MiddleEdge on the upper side of the two-dimensional code located between the upper left finder pattern FPLT and the upper right finder pattern FPRT is detected.

以上のステップS62の処理により検出された2次元コードの上辺上の境界点集合MiddleEdgeには、本来の上辺より2次元コード画像の内側の点も含まれる。そこでCPU11は、続いて2次元コード画像内の点の除去を行う。このエラー点の除去方法には、上辺の傾きから推測される範囲に含まれない点をエラーとして除去する第1の方法と、互いに直交する2つの辺の交点を求め、この交点より外側の範囲に位置する境界点をエラー点として削除する第2の方法とがある。ここでは、先ず第1の方法について説明し、第2の方法は後に詳しく説明する。   The boundary point set MiddleEdge on the upper side of the two-dimensional code detected by the process in step S62 includes points inside the two-dimensional code image from the original upper side. Therefore, the CPU 11 subsequently removes points in the two-dimensional code image. This error point removal method includes a first method for removing points that are not included in the range estimated from the slope of the upper side as an error, an intersection point of two sides orthogonal to each other, and a range outside the intersection point. There is a second method of deleting a boundary point located at a point as an error point. Here, the first method will be described first, and the second method will be described in detail later.

第1の方法は以下のように行われる。すなわち、CPU11はエラー点の除去処理を右から左に向かって行う。ここで、点P=(px,py)に対し、MiddleEdgeに含まれ、Pより左に位置する最初の点をP′=(px′,py′)とする。このとき線分PP′の傾きは、

Figure 0004970385
と表される。 The first method is performed as follows. That is, the CPU 11 performs error point removal processing from right to left. Here, with respect to the point P = (px, py), the first point included in the MiddleEdge and positioned to the left of P is P ′ = (px ′, py ′). At this time, the slope of the line segment PP ′ is
Figure 0004970385
It is expressed.

ここで、あるxにおける上辺の傾きより定数ct(例えば0.1)だけ小さい傾きを返す関数edgeMinSlope(x)を、

Figure 0004970385
と定義する。 Here, a function edgeMinSlope (x) that returns a slope smaller than the slope of the upper side at a certain point by a constant ct (for example, 0.1)
Figure 0004970385
It is defined as

ここで、P′がエラーであるか否かを、

Figure 0004970385
によって判定する。この式は、
Figure 0004970385
とも表現される。 Here, whether P ′ is an error or not
Figure 0004970385
Judgment by. This formula is
Figure 0004970385
It is also expressed.

この判定処理は、図11に示すように、線分PQの傾きを推定される上辺の傾きとし、線分PRの傾きをPRの傾きよりctだけ小さい傾きであるとすると、P1′やP2′のようにRより上に位置する点はエラーではないが、P3′のようにRより下に位置する点はエラーとして検出される。ただし、図11においてQ、R、P1′、P2′、P3′のx座標値は全てpx′であるとする。上記手順によって、MiddleEdgeからエラー点が除去される。   In this determination process, as shown in FIG. 11, assuming that the slope of the line segment PQ is the slope of the estimated upper side, and the slope of the line segment PR is a slope smaller than the slope of PR by ct, P1 ′ and P2 ′ A point located above R such as is not an error, but a point located below R such as P3 ′ is detected as an error. However, in FIG. 11, the x coordinate values of Q, R, P1 ′, P2 ′, and P3 ′ are all px ′. By the above procedure, error points are removed from MiddleEdge.

以上の手順によって、LeftFinderEdge、MiddleEdge、RightFinderEdgeによって2次元コード画像の上辺の境界点集合が検出される。ここで上辺の点集合TopEdgeは

Figure 0004970385
と表される。 By the above procedure, the boundary point set on the upper side of the two-dimensional code image is detected by LeftFinderEdge, MiddleEdge, and RightFinderEdge. Where the top edge point set TopEdge is
Figure 0004970385
It is expressed.

次にCPU11は、ステップS64,S65において、上記上辺の点集合TopEdge をもとにその近似線を算出する。TopEdgeの近似線は、近似直線或いは近似曲線によって表現する。TopEdgeに含まれる点列を
(x1,y1),(x2,y2),…,(xn,yn)
とすると、最小二乗法による近似直線y=ax+bは

Figure 0004970385
によって求まる。 Next, in steps S64 and S65, the CPU 11 calculates an approximate line based on the upper edge point set TopEdge. The approximate line of TopEdge is expressed by an approximate line or an approximate curve. Point sequence included in TopEdge
(x1, y1), (x2, y2), ..., (xn, yn)
Then, the approximate line y = ax + b by the least square method is
Figure 0004970385
It is obtained by.

一方、近似曲線は最小二乗法による円への近似により求める。最小二乗法による円への近似では、(a,b)を中心とする半径Rの円(x−a)2 +(y−b)2 =Rを求めるために

Figure 0004970385
の最小化を行う。 On the other hand, the approximate curve is obtained by approximation to a circle by the least square method. In the approximation to the circle by the method of least squares, in order to find the circle (x−a) 2 + (y−b) 2 = R with radius R centered at (a, b)
Figure 0004970385
Minimize.

ただし、zi,B,C,Dはそれぞれ

Figure 0004970385
とする。 Where z i , B, C, and D are
Figure 0004970385
And

F(a,b,R)をB、C、Dについてそれぞれ偏微分すると、

Figure 0004970385
となる。この連立方程式をCholesky分解により解き、B、C、Dを得て、
Figure 0004970385
によりa、b、Rを得る。 When F (a, b, R) is partially differentiated with respect to B, C and D, respectively,
Figure 0004970385
It becomes. Solve this simultaneous equation by Cholesky decomposition, get B, C, D,
Figure 0004970385
To get a, b, R.

次にCPU11は、ステップS66において近似直線と近似曲線とを比較してどちらが妥当であるかを判定する。この判定は、近似直線から各 (xi,yi)への距離の和と、近似曲線から各(xi,yi)への距離の和を比較し、距離の和が小さい方の近似線が妥当であると判定することにより正確に行うことができる。なお、計算量を低減したい場合には、(x1,y1)、(xM,yM)、(xn,yn)への距離の和によって判定しても良い。ただし、mは

Figure 0004970385
によって求まる整数であり、(xM,yM)は検出された上辺の点集合の中央の点である。以上の上辺の近似線算出の手順を図12のステップS121〜S126に示す。 Next, in step S66, the CPU 11 compares the approximate line and the approximate curve to determine which is appropriate. This determination is made by comparing the sum of the distances from the approximate line to each (x i , y i ) and the sum of the distances from the approximate curve to each (x i , y i ). It can be done accurately by determining that the line is valid. If it is desired to reduce the amount of calculation, it may be determined by the sum of the distances to (x 1 , y 1 ), (x M , y M ), and (x n , y n ). Where m is
Figure 0004970385
(X M , y M ) is the center point of the detected upper-side point set. The procedure for calculating the approximate line of the upper side is shown in steps S121 to S126 in FIG.

以上の手順によって上辺の境界線が算出される。同様に、図13に示すように左辺についても、xy座標系を左へ90度回転させて考える(上方向をx軸方向、右方向をy軸方向とする)ことで、同じ手順によって境界線が算出される。また、下辺については、xy座標系のy方向を逆転させることで、2次元コード画像の下辺の点集合を算出できる。ただし、QRコードには右下にファインダパターンはないため、RightFinderEdgeは存在しない。そこで、edgeSlope(x)は、(LeftCenterX,LeftCenterY)から(px′,py′)へ引いた線分の傾き

Figure 0004970385
によって算出する。 The upper side boundary line is calculated by the above procedure. Similarly, as shown in FIG. 13, the left side is also considered by rotating the xy coordinate system 90 degrees to the left (the upper direction is the x-axis direction and the right direction is the y-axis direction). Is calculated. For the lower side, the point set on the lower side of the two-dimensional code image can be calculated by reversing the y direction of the xy coordinate system. However, since there is no finder pattern in the lower right of the QR code, there is no RightFinderEdge. Therefore, edgeSlope (x) is the slope of the line segment drawn from (LeftCenterX, LeftCenterY) to (px ′, py ′)
Figure 0004970385
Calculated by

また、RightFinderEdgeが存在しないため、探索は2次元コード画像の端まで行うものとし、そうして検出した点の集合をMiddleBottomEdgeとする。また右辺についても、xy座標系を右へ90度回転させて考える(下方向をx軸方向、左方向をy軸方向とする)ことで2次元コード画像の下辺の点集合を検出できる。しかし、この場合も上辺におけるRightFinderEdgeが存在しないので、edgeSlope(x)は下辺と同様に

Figure 0004970385
によって算出し、こちらも2次元コード画像の端まで探索を行うものとし、そうして検出した点の集合をMiddleRightEdgeとする。 Also, since there is no RightFinderEdge, the search is performed up to the end of the two-dimensional code image, and the set of points detected in this way is MiddleBottomEdge. Also for the right side, the point set on the lower side of the two-dimensional code image can be detected by considering the xy coordinate system rotated 90 degrees to the right (the lower direction is the x-axis direction and the left direction is the y-axis direction). However, in this case as well, there is no RightFinderEdge on the upper side, so edgeSlope (x) is the same as the lower side.
Figure 0004970385
This is also used to search to the end of the two-dimensional code image, and the set of points detected in this way is referred to as MiddleRightEdge.

次に、2次元コード画像の右下の角の座標RightBottomを検出する。初期のxy座標系(右方向がx軸方向、下方向がy軸方向)におけるMiddleBottomEdgeを

Figure 0004970385
とし、同様に初期のxy座標系におけるMiddleRightEdgeを
Figure 0004970385
とする。このときbx1<bx2<...<bxM及びry1<ry2<...<ryNとなる。また、左下ファインダパターンFPLBは右上ファインダパターンFPRTより左下に位置すると考えられるので、bx1<rx1かつry1<by1となる。 Next, the coordinate RightBottom of the lower right corner of the two-dimensional code image is detected. MiddleBottomEdge in the initial xy coordinate system (the right direction is the x-axis direction and the down direction is the y-axis direction)
Figure 0004970385
Similarly, MiddleRightEdge in the initial xy coordinate system is
Figure 0004970385
And At this time, bx 1 <bx 2 <... <bx M and ry 1 <ry 2 <... <ry N. Further, since the lower left finder pattern FPLB is considered to be located at the lower left than the upper right finder pattern FPRT, bx 1 <rx 1 and ry 1 <by 1 .

またCPU11は、RightBottomは2次元コードにおいてf(x,y)=x+yが最大となる点だと仮定し、MiddleBottomEdgeとMiddleRightEdgeからRightBottomの近くに位置する点を探索する。ただし、MiddleBottomEdgeはRightBottomより右側の点を、MiddleRightEdgeはRightBottomより下側の点を含んでいう可能性があるので、これらのエラー点を除去する必要がある。   The CPU 11 also assumes that RightBottom is a point where f (x, y) = x + y is maximum in the two-dimensional code, and searches for a point located near RightBottom from MiddleBottomEdge and MiddleRightEdge. However, MiddleBottomEdge may contain points on the right side of RightBottom, and MiddleRightEdge may contain points below RightBottom, so these error points need to be removed.

このエラー点の除去は、先に述べた第2の方法により以下のように行われる。図4はその処理の一部である交点算出処理の手順を示すフローチャートである。
すなわち、CPU11は、ステップS631〜S635において、例えば図14に示すようにMiddleBottomEdgeに含まれる各点(bxi,byi)から傾き−1の閾値直線、つまり
y=−(x-bxi)+bxi
を引き、各直線の上方向に位置し、bxi≦rxjでかつy座標の最も大きいMiddleRightEdge内の点を示すjの値を算出する関数f(i)を

Figure 0004970385
とする。そして、j=f(i)としたとき(bxi, byi)および(rxj, ryj)からRightBottomを推定する関数InferRightBottom(i)を
Figure 0004970385
とする。 The removal of this error point is performed as follows by the second method described above. FIG. 4 is a flowchart showing a procedure of intersection calculation processing which is a part of the processing.
That is, the CPU 11 in steps S631 to S635, for example, as shown in FIG. 14, from the points (bxi, byi) included in the MiddleBottomEdge, a threshold straight line having a slope of −1, that is,
y =-(x-bxi) + bxi
A function f (i) that calculates a value of j indicating a point in MiddleRightEdge that is located above each straight line and that has bxi ≦ rxj and the largest y coordinate.
Figure 0004970385
And And when j = f (i), the function InferRightBottom (i) that estimates RightBottom from (bxi, byi) and (rxj, ryj)
Figure 0004970385
And

ここでInferRightBottom(i)と比較してbi+1が右側にあるか、rj+1が下側にあるような最小のiをBottomEndとすると、BottomEndは

Figure 0004970385
となる。上記BottomEndを用いてRightBottomは、
Figure 0004970385
によって検出される。 If the minimum i such that b i + 1 is on the right side or r j + 1 is down compared to InferRightBottom (i) is BottomEnd, BottomEnd is
Figure 0004970385
It becomes. Using the above BottomEnd, RightBottom
Figure 0004970385
Detected by.

次にCPU11は、MiddleBottomEdgeからRightBottomより右側に位置する点(x座標値の大きい点)を除去する。また、MiddleRightEdgeからRightBottomより下側に位置する点(y座標値の大きい点)を除去する。さらに、MiddleBottomEdgeについて再びxy座標系のy方向を逆転させ、上辺における処理と同様に図11に示したような2次元コード画像内のエラー点の除去を行う。MiddleRightEdgeについては、xy座標系を右へ90度回転させて、同様に2次元コード画像内のエラー点の除去を行う。   Next, the CPU 11 removes a point (a point having a large x coordinate value) located on the right side of the RightBottom from the MiddleBottomEdge. Also, a point (a point having a large y coordinate value) located below the RightBottom is removed from the MiddleRightEdge. Further, the y direction of the xy coordinate system is reversed again for MiddleBottomEdge, and error points in the two-dimensional code image as shown in FIG. 11 are removed in the same manner as the processing on the upper side. For MiddleRightEdge, the xy coordinate system is rotated 90 degrees to the right, and error points in the two-dimensional code image are similarly removed.

さらにCPU11は、左下ファインダパターンFPLBの下辺をLeftFinderBottomEdge、右上ファインダパターンFPRTの右辺をTopFinderRightEdgeとして、2次元コード画像の下辺の点集合BottomEdge及び右辺の点集合RightEdgeを、

Figure 0004970385
とする。 Further, the CPU 11 sets the bottom edge of the lower left finder pattern FPLB as LeftFinderBottomEdge and the right edge of the upper right finder pattern FPRT as TopFinderRightEdge, and sets the lower edge point set BottomEdge and the right edge point set RightEdge of the two-dimensional code image.
Figure 0004970385
And

CPU11は、以上の手順によって求めた下辺の点集合BottomEdgeから、上辺において近似線を算出した手順と同様の手順によって近似線を算出し、再び元のxy座標系に戻すことで下辺の近似線を算出する。また、右辺の点集合からも同様に近似線が算出され、元のxy座標系に戻すことで右辺の近似線が算出される。   The CPU 11 calculates an approximate line from the lower side point set BottomEdge obtained by the above procedure by the same procedure as the procedure for calculating the approximate line on the upper side, and returns the original approximate line of the lower side by returning to the original xy coordinate system. calculate. Similarly, an approximate line is calculated from the point set on the right side, and the approximate line on the right side is calculated by returning to the original xy coordinate system.

(7)2次元コード画像の歪みの矯正
以上の処理により2次元コード画像の上下左右各辺についての境界線が算出されると、続いてCPU11は図5に示すステップS7において2次元コード歪み矯正プログラム136を起動し、上記算出された2次元コード画像の上下左右各辺の境界線を利用して2次元コード画像の歪みの矯正を次のように行う。
(7) Correcting the distortion of the two-dimensional code image When the boundary lines for the upper, lower, left and right sides of the two-dimensional code image are calculated by the above processing, the CPU 11 subsequently corrects the two-dimensional code distortion in step S7 shown in FIG. The program 136 is activated, and the distortion of the two-dimensional code image is corrected as follows using the calculated boundary lines of the upper, lower, left and right sides of the two-dimensional code image.

すなわち、2次元コード画像の歪みの矯正においては、2次元コード画像をその幅codeWidth、高さcodeHeightについてそれぞれ矯正するものとし、矯正後の2次元コードにおける目標座標(x,y)のピクセル値を求めることによって矯正後の2次元コードを生成する。   That is, in correcting the distortion of the two-dimensional code image, the two-dimensional code image is corrected with respect to the width codeWidth and the height codeHeight, and the pixel value of the target coordinate (x, y) in the corrected two-dimensional code is determined. By calculating, a two-dimensional code after correction is generated.

CPU11は、先ずステップS71において、2次元コードの4角の座標を算出する。2次元コードの4角の座標は、上辺と左辺の境界線から左上角の点LeftTopを、上辺と右辺の境界線から右上角の点RightTopを、下辺と左辺の境界線から左下角の点LeftBottomを、左辺と右辺の境界線から右下角の点RightBottomを算出する。   First, in step S71, the CPU 11 calculates the four-dimensional coordinates of the two-dimensional code. The four-dimensional coordinates of the two-dimensional code are: the top left corner point LeftTop from the top and left border, the top right corner point RightTop from the top and right border, and the bottom left corner point LeftBottom from the bottom and left border. From the boundary between the left and right sides, calculate the right bottom point RightBottom.

次に、LeftTop、RightTop、RightBottom、LeftBottomの4点を結ぶ四角形BaseFrameを作成する。そして、

Figure 0004970385
とした上で、上記作成されたBaseFrameにおいて、図15に示すように、LeftTopからの距離とRightTopからの距離の比が(1-LeftWeight)LeftWeightとなる上辺上の点をBaseTop(LeftWeight)とし、LeftBottomからの距離とRightBottomからの距離の比が(1-LeftWeight)LeftWeightとなる点をBaseBottom(LeftWeight)とし、LeftrTopからの距離とLeftBottomからの距離の比が(1-TopWeight)TopWeightとなる点をBaseLeft(TopWeight)とし、RightTopからの距離とRightBottomからの距離の比が(1-TopWeight)TopWeightとなる点をBaseRight(TopWeight)とする。 Next, a quadrangle BaseFrame that connects four points of LeftTop, RightTop, RightBottom, and LeftBottom is created. And
Figure 0004970385
Then, in the created BaseFrame, as shown in FIG. 15, the point on the upper side where the ratio of the distance from LeftTop to the distance from RightTop is (1-LeftWeight) LeftWeight is BaseTop (LeftWeight) The point where the ratio of the distance from the LeftBottom and the distance from the RightBottom is (1-LeftWeight) LeftWeight is BaseBottom (LeftWeight), and the ratio of the distance from the LeftrTop and the distance from the LeftBottom is (1-TopWeight) TopWeight BaseLeft (TopWeight) is set, and the point at which the ratio of the distance from RightTop to the distance from RightBottom is (1-TopWeight) TopWeight is set to BaseRight (TopWeight).

続いてCPU11は、ステップS72,S73により、BaseFrameにおいて目標座標に対応する座標BaseCross(TopWeight,LeftWeight)を求める。ただし、図15に示すようにBaseTop(LeftWeight)とBaseBottom(LeftWeight)とを結ぶ線分と、BaseLeft(TopWeight)とBaseRight(TopWeight)とを結ぶ線分の交点をBaseCross(TopWeight,LeftWeight)とする。
BaseCross(TopWeight,LeftWeight)は、

Figure 0004970385
を満たす。 Subsequently, in steps S72 and S73, the CPU 11 obtains coordinates BaseCross (TopWeight, LeftWeight) corresponding to the target coordinates in BaseFrame. However, as shown in FIG. 15, an intersection of a line segment connecting BaseTop (LeftWeight) and BaseBottom (LeftWeight) and a line segment connecting BaseLeft (TopWeight) and BaseRight (TopWeight) is defined as BaseCross (TopWeight, LeftWeight).
BaseCross (TopWeight, LeftWeight)
Figure 0004970385
Meet.

またCPU11は、ステップS74において、図16に示すようにBaseTopとx座標値が同一となる上辺上の点をTopPoint(LeftWeight)とし、BaseBottomとx座標値が同一となる下辺上の点をBottomPoint(LeftWeight)とし、LeftBaseとy座標値が同一となる左辺上の点をLeftPoint(TopWeight)とし、RightBaseとy座標値が同一となる右辺上の点をRightPoint(TbpWeight)とする。   In step S74, the CPU 11 sets a point on the upper side where the x coordinate value is the same as BaseTop as TopPoint (LeftWeight) and sets a point on the lower side where the x coordinate value is the same as BaseBottom as shown in FIG. LeftWeight), a point on the left side where the y-coordinate value is the same as LeftBase is called LeftPoint (TopWeight), and a point on the right side where the y-coordinate value is the same as RightBase is called RightPoint (TbpWeight).

そして、ステップS75において、図16に示すように2次元コード画像における上辺の歪みDistortionTop(LeftWeight)、下辺の歪みDistortionBottom(LeftWeight)、左辺の歪みDistortionLeft(TopWeight)、右辺の歪みDistortionRightRight(TopWieight)をそれぞれ

Figure 0004970385
とし、歪みベクトルDistortionVector(TopWeight,LeftWeight)を
Figure 0004970385
とする。 In step S75, as shown in FIG. 16, the upper side distortion DistortionTop (LeftWeight), the lower side distortion DistortionBottom (LeftWeight), the left side distortion DistortionLeft (TopWeight), and the right side distortion DistortionRightRight (TopWieight) in the two-dimensional code image, respectively.
Figure 0004970385
And distortion vector DistortionVector (TopWeight, LeftWeight)
Figure 0004970385
And

次にCPU11は、ステップS76において、図17に示すようにBaseCross(TopWeight, LeftWeight)にDistortionVbctor(TopWeight,LeftWeight)を加えた点を算出する関数CrossPoint(TopWeight,LeftWeight)を

Figure 0004970385
とする。なお、CrossPoint(TopWeight,LeftWeight)は、
Figure 0004970385
を満たし、DistortionVector(TopWeight, LeftWeight)を算出せずに求めることもできる。 Next, in step S76, the CPU 11 calculates a function CrossPoint (TopWeight, LeftWeight) for calculating a point obtained by adding DistortionVbctor (TopWeight, LeftWeight) to BaseCross (TopWeight, LeftWeight) as shown in FIG.
Figure 0004970385
And CrossPoint (TopWeight, LeftWeight) is
Figure 0004970385
Can be obtained without calculating DistortionVector (TopWeight, LeftWeight).

CPU11は、以上のように定義したCrossPoint(TopWeight,LeftWeight)を用いて、2次元コード画像の歪みの矯正を行う。TopWeight及びLeftWeightは上記にて示した定義の通りである。したがって、矯正後の2次元コード画像における座標(x,y)のピクセル値には、矯正前の2次元コード画像における

Figure 0004970385
のピクセル値と同一の値を持たせる。 The CPU 11 corrects the distortion of the two-dimensional code image using the CrossPoint (TopWeight, LeftWeight) defined as described above. TopWeight and LeftWeight are as defined above. Therefore, the pixel value of the coordinates (x, y) in the two-dimensional code image after correction includes the pixel value in the two-dimensional code image before correction.
Figure 0004970385
Have the same value as the pixel value of.

以上の処理により、図18(a),(b)に示すような糸巻き型又は樽型の曲線歪みを有する2次元コード画像を長方形に矯正することが可能となる。また、codeWidthとcodeHeightを同一の値に設定することにより、正方形への矯正も可能となる。   Through the above processing, it becomes possible to correct a two-dimensional code image having a pincushion-type or barrel-type curve distortion as shown in FIGS. 18A and 18B into a rectangle. In addition, by setting codeWidth and codeHeight to the same value, correction to a square is possible.

そしてCPU11は、以上の処理によって矯正された2次元コード画像を、ステップS8によりコード解析し、このコード解析されたコードをデータメモリ16に記憶させる。このデータメモリ16に記憶されたコードは、例えば入力デバイス3においてユーザが2次元コードの送信操作を行った場合に、データメモリ16から読み出されてWebサーバ等に送信される。   Then, the CPU 11 analyzes the code of the two-dimensional code image corrected by the above processing in step S <b> 8 and stores the code analyzed in the data memory 16. The code stored in the data memory 16 is read from the data memory 16 and transmitted to a Web server or the like when the user performs a two-dimensional code transmission operation on the input device 3, for example.

以上説明したようにこの実施形態では、カメラ2により撮像された2次元コードの画像データを二値化画像に変換した後、当該二値化画像から2次元コードのファインダパターンを検出し、この検出されたファインダパターンの上下左右各辺の座標値を検出する。そして、この検出されたファインダパターンの上下左右各辺の座標値をもとに、上記2次元コードの画像データの上下左右各辺の形状を直線及び曲線で近似した近似線を生成し、この生成された近似線をもとに上記2次元コードの画像データの歪みを矯正して、この歪みが矯正された2次元コードの画像データをもとに上記2次元コードを解読するようにしている。   As described above, in this embodiment, after the image data of the two-dimensional code captured by the camera 2 is converted into a binarized image, a finder pattern of the two-dimensional code is detected from the binarized image, and this detection is performed. The coordinate values of the upper, lower, left and right sides of the finder pattern are detected. Then, based on the detected coordinate values of the upper, lower, left and right sides of the finder pattern, an approximate line is generated by approximating the shape of the upper, lower, left and right sides of the image data of the two-dimensional code with a straight line and a curve. The distortion of the image data of the two-dimensional code is corrected based on the approximated line, and the two-dimensional code is decoded based on the image data of the two-dimensional code whose distortion has been corrected.

したがって、撮像した2次元コードの画像が例えば糸巻き型又は樽型の曲線状歪みを有していても、2次元コードの画像データの上下左右各辺の形状が直線及び曲線により近似され、その近似線をもとに上記2次元コードの画像データの歪みが矯正される。このため、上記糸巻き型又は樽型の曲線状歪みを有する2次元コード画像に対しても高精度のコード解読を行うことが可能となる。   Therefore, even if the captured image of the two-dimensional code has, for example, a pincushion-type or barrel-type curved distortion, the shapes of the upper, lower, left and right sides of the image data of the two-dimensional code are approximated by straight lines and curves. The distortion of the image data of the two-dimensional code is corrected based on the line. For this reason, it is possible to perform code decoding with high accuracy even for a two-dimensional code image having the above-described pincushion-type or barrel-type curved distortion.

なお、この発明は上記実施形態に限定されるものではない。例えば、前記実施形態では二次元コード読取装置を携帯電話機に内蔵した場合を例にとって説明したが、二次元コード読取装置をテレビジョン受信機やビデオ記録再生装置のリモートコントローラに内蔵するようにしてもよく、またパーソナル・コンピュータに内蔵するようにしてもよい。また、前記実施形態では二次元コード読取装置がカメラを内蔵する場合を例にとって説明したが、二次元コード読取装置とは別に設けられたディジタルカメラにより2次元コードを撮像し、その画像データを信号ケーブル又は記録媒体を介して二次元コード読取装置に取り込むようにしてもよい。   The present invention is not limited to the above embodiment. For example, in the above-described embodiment, the case where the two-dimensional code reading device is built in the mobile phone has been described as an example. However, the two-dimensional code reading device may be built in the remote controller of the television receiver or the video recording / reproducing device. Alternatively, it may be built in a personal computer. In the above embodiment, the case where the two-dimensional code reader includes a camera has been described as an example. However, a two-dimensional code is captured by a digital camera provided separately from the two-dimensional code reader, and the image data is signaled. You may make it take in to a two-dimensional code reader via a cable or a recording medium.

その他、二値化画像生成処理、ファインダパターン検出処理、画像回転処理、ファインダパターン境界検出処理、2次元コード境界線算出処理及び2次元コード歪み矯正処理の各処理手順と処理内容についても、この発明の要旨を逸脱しない範囲で種々変形して実施できる。   In addition, the present invention also includes processing procedures and processing contents of binarized image generation processing, finder pattern detection processing, image rotation processing, finder pattern boundary detection processing, two-dimensional code boundary calculation processing, and two-dimensional code distortion correction processing. Various modifications can be made without departing from the scope of the present invention.

要するにこの発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態に亘る構成要素を適宜組み合せてもよい。   In short, the present invention is not limited to the above-described embodiment as it is, and can be embodied by modifying the constituent elements without departing from the scope of the invention in the implementation stage. Further, various inventions can be formed by appropriately combining a plurality of constituent elements disclosed in the embodiment. For example, some components may be deleted from all the components shown in the embodiment. Furthermore, you may combine suitably the component covering different embodiment.

この発明の一実施形態に係わる二次元コード読取装置のハードウエア及びソフトウエアの構成を示すブロック図である。It is a block diagram which shows the structure of the hardware and software of the two-dimensional code reader concerning one Embodiment of this invention. 図1に示した二次元コード読取装置による二次元コード読取制御のうち、撮像制御から画像回転処理までの処理手順と処理内容を示すフローチャートである。It is a flowchart which shows the process sequence and process content from imaging control to image rotation process among the two-dimensional code reading controls by the two-dimensional code reader shown in FIG. 図1に示した二次元コード読取装置による二次元コード読取制御のうち、ファインダパターン境界検出処理から2次元コード境界線算出処理までの処理手順と処理内容を示すフローチャートである。It is a flowchart which shows the process sequence and process content from a finder pattern boundary detection process to a two-dimensional code boundary line calculation process among the two-dimensional code reading controls by the two-dimensional code reader shown in FIG. 図3に示した2次元コード境界線算出処理過程におけるエラー点除去のための交点算出処理手順とその内容を示すフローチャートである。FIG. 4 is a flowchart showing an intersection calculation process procedure for removing error points in the two-dimensional code boundary calculation process shown in FIG. 3 and its contents. 図1に示した二次元コード読取装置による二次元コード読取制御のうち、2次元コード歪み矯正処理の手順と内容を示すフローチャートである。It is a flowchart which shows the procedure and content of a two-dimensional code distortion correction process among the two-dimensional code reading controls by the two-dimensional code reader shown in FIG. ファインダパターン検出処理の説明に用いる図である。It is a figure used for description of a finder pattern detection process. ファインダパターン検出処理の説明に用いる図である。It is a figure used for description of a finder pattern detection process. 2次元コード画像の回転処理の説明に用いる図である。It is a figure used for description of the rotation process of a two-dimensional code image. ファインダパターンの上下左右各辺の座標値を検出する処理に用いる図である。It is a figure used for the process which detects the coordinate value of each upper / lower / left / right side of a finder pattern. ファインダパターンの上下左右各辺の座標値を検出する処理に用いる図である。It is a figure used for the process which detects the coordinate value of each upper / lower / left / right side of a finder pattern. 2次元コード境界線を算出する処理において、エラー点を除去する第1の処理を説明するための図である。It is a figure for demonstrating the 1st process which removes an error point in the process which calculates a two-dimensional code boundary line. 2次元コード境界線を算出する処理において、2次元コード画像の上辺を直線及び曲線で近似するときの手順を説明するための図である。It is a figure for demonstrating the procedure when approximating the upper side of a two-dimensional code image with a straight line and a curve in the process which calculates a two-dimensional code boundary line. 2次元コード境界線を算出する処理を説明するための図である。It is a figure for demonstrating the process which calculates a two-dimensional code boundary line. 2次元コード境界線を算出する処理において、エラー点を除去する第2の処理を説明するための図である。It is a figure for demonstrating the 2nd process which removes an error point in the process which calculates a two-dimensional code boundary line. 2次元コード画像の歪み矯正処理の説明に用いる図である。It is a figure used for description of the distortion correction process of a two-dimensional code image. 2次元コード画像の歪み矯正処理の説明に用いる図である。It is a figure used for description of the distortion correction process of a two-dimensional code image. 2次元コード画像の歪み矯正処理の説明に用いる図である。It is a figure used for description of the distortion correction process of a two-dimensional code image. 撮像された2次元コード画像に発生する糸巻き型及び樽型歪みの一例を示す図である。It is a figure which shows an example of the pincushion type | mold and barrel distortion which generate | occur | produce in the imaged two-dimensional code image. 従来の2次元コード読取装置を説明するための図である。It is a figure for demonstrating the conventional two-dimensional code reader.

符号の説明Explanation of symbols

1…中央処理制御ユニット、2…カメラ、3…入力デバイス、4…表示デバイス、11…CPU、12…バス、13…プログラムメモリ、14…カメラI/F、15…入出力I/F、16…データメモリ、131…二値化画像生成プログラム、132…ファインダパターン検出プログラム、133…画像回転処理プログラム、134…ファインダパターン境界検出プログラム、135…2次元コード境界線算出プログラム、136…2次元コード歪み矯正プログラム。   DESCRIPTION OF SYMBOLS 1 ... Central processing control unit, 2 ... Camera, 3 ... Input device, 4 ... Display device, 11 ... CPU, 12 ... Bus, 13 ... Program memory, 14 ... Camera I / F, 15 ... Input / output I / F, 16 ... Data memory 131 ... Binary image generation program 132 ... Finder pattern detection program 133 ... Image rotation processing program 134 ... Finder pattern boundary detection program 135 ... 2D code boundary line calculation program 136 ... 2D code A distortion correction program.

Claims (4)

撮像手段から2次元コードの画像データを取り込んでメモリに記憶する手段と、
前記メモリに記憶された2次元コードの画像データを読み出し、この読み出した画像データから当該2次元コードに含まれる複数のファインダパターンを検出するファインダパターン検出手段と、
前記検出された複数のファインダパターンの各々についてその輪郭を表す辺の境界点を検出するファインダパターン境界検出手段と、
前記検出された複数のファインダパターンの辺の境界点をもとに、前記2次元コードの画像データの輪郭を表す4辺の形状を直線及び曲線の少なくとも一方で近似した近似線を生成する2次元コード境界線検出手段と、
前記生成された近似線をもとに前記2次元コードの画像データの歪みを矯正し、歪みが矯正された2次元コードの画像データを前記メモリに記憶する2次元コード歪み矯正手段と、
前記歪みが矯正された2次元コードの画像データをもとに前記2次元コードを解読し、その解読データを出力する解読手段と
を具備し、
前記2次元コード境界線検出手段は、
前記ファインダパターン境界検出手段により検出された複数のファインダパターンの辺の境界点をもとに、前記2次元コードの画像データの輪郭を表す辺の傾きを算出する手段と、
前記算出された辺の傾きから推測される方向に画素探索を行って、前記2次元コードの辺を表す境界点を検出する手段と、
前記検出された境界点の各々について、当該境界点が、前記算出された辺の傾きから推測される範囲内に含まれているか否かを判定し、含まれていないと判定された境界点をエラー点として前記境界点から削除する手段と
を備えることを特徴とする2次元コード読取装置。
Means for capturing image data of a two-dimensional code from an imaging means and storing it in a memory;
Finder pattern detection means for reading image data of a two-dimensional code stored in the memory and detecting a plurality of finder patterns included in the two-dimensional code from the read image data;
Finder pattern boundary detection means for detecting a boundary point of a side representing the outline of each of the detected plurality of finder patterns;
Two-dimensional that generates an approximate line that approximates at least one of a straight line and a curve of the shape of the four sides representing the contour of the image data of the two-dimensional code based on boundary points of the sides of the detected plurality of finder patterns. Code boundary detection means;
Two-dimensional code distortion correcting means for correcting distortion of the image data of the two-dimensional code based on the generated approximate line, and storing the image data of the two-dimensional code with corrected distortion in the memory;
Decoding means for decoding the two-dimensional code based on the image data of the two-dimensional code whose distortion has been corrected, and outputting the decoded data;
Comprising
The two-dimensional code boundary detection means includes
Means for calculating an inclination of a side representing an outline of the image data of the two-dimensional code based on boundary points of a plurality of finder patterns detected by the finder pattern boundary detection unit;
Means for detecting a boundary point representing a side of the two-dimensional code by performing a pixel search in a direction inferred from the calculated slope of the side;
For each of the detected boundary points, it is determined whether the boundary point is included in a range estimated from the calculated side inclination, and the boundary point determined not to be included is Means for deleting from the boundary points as error points ;
2-dimensional code reading apparatus you comprising: a.
撮像手段から2次元コードの画像データを取り込んでメモリに記憶する手段と、
前記メモリに記憶された2次元コードの画像データを読み出し、この読み出した画像データから当該2次元コードに含まれる複数のファインダパターンを検出するファインダパターン検出手段と、
前記検出された複数のファインダパターンの各々についてその輪郭を表す辺の境界点を検出するファインダパターン境界検出手段と、
前記検出された複数のファインダパターンの辺の境界点をもとに、前記2次元コードの画像データの輪郭を表す4辺の形状を直線及び曲線の少なくとも一方で近似した近似線を生成する2次元コード境界線検出手段と、
前記生成された近似線をもとに前記2次元コードの画像データの歪みを矯正し、歪みが矯正された2次元コードの画像データを前記メモリに記憶する2次元コード歪み矯正手段と、
前記歪みが矯正された2次元コードの画像データをもとに前記2次元コードを解読し、その解読データを出力する解読手段と
を具備し、
前記2次元コード境界線検出手段は、
前記ファインダパターン境界検出手段により検出された複数のファインダパターンの辺の境界点をもとに、前記2次元コードの画像データの輪郭を表す辺の傾きを算出する手段と、
前記算出された辺の傾きから推測される方向に画素探索を行って、前記2次元コードの辺を表す境界点を検出する手段と、
記2次元コードの画像データの4辺のうち直交する第1及び第2の辺の交点を算出する手段と、この算出された交点より外側の範囲に位置する境界点をエラー点として削除する手段とを有するエラー点除去手段と
を備え、
前記2次元コードの画像データの第1及び第2の辺の交点を算出する手段は、
第1の辺を表す境界点の集合に含まれる1個以上の境界点を算出基準点としてしきい値線を引き、第2の辺を表す境界点集合に含まれる境界点が前記しきい値線より交点側に位置するか否かを判定する手段と、
前記第2の辺を表す境界点の集合のうち前記しきい値線より交点側に位置しない境界点の中から、当該交点に最も近い境界点をしきい値外近接点として検出する手段と、
前記算出基準点から前記第1の辺の傾きを推定して引いた直線と、前記第2の辺のしきい値外近接点から第2の辺の傾きを推定して引いた直線との交点をもとに、交点候補点を算出する手段と、
前記第1の辺を表す境界点の集合に含まれる境界点のうち前記しきい値線より交点側に位置する境界点の中から前記しきい値直線に最も近い境界点をしきい値内近接点として検出すると共に、前記第2の辺を表す境界点集合に含まれる境界点のうち前記しきい値線より交点側に位置する境界点の中から前記しきい値直線に最も近い境界点をしきい値内近接点として検出する手段と、
前記検出された第1の辺のしきい値内近接点と、前記検出された第2の辺のしきい値内近接点のうち、前記算出された交点候補点より外側にあるものはどれかを判定する手段と
を有することを特徴とする2次元コード読取装置。
Means for capturing image data of a two-dimensional code from an imaging means and storing it in a memory;
Finder pattern detection means for reading image data of a two-dimensional code stored in the memory and detecting a plurality of finder patterns included in the two-dimensional code from the read image data;
Finder pattern boundary detection means for detecting a boundary point of a side representing the outline of each of the detected plurality of finder patterns;
Two-dimensional that generates an approximate line that approximates at least one of a straight line and a curve of the shape of the four sides representing the contour of the image data of the two-dimensional code based on boundary points of the sides of the detected plurality of finder patterns. Code boundary detection means;
Two-dimensional code distortion correcting means for correcting distortion of the image data of the two-dimensional code based on the generated approximate line, and storing the image data of the two-dimensional code with corrected distortion in the memory;
Decoding means for decoding the two-dimensional code based on the image data of the two-dimensional code whose distortion has been corrected, and outputting the decoded data;
Comprising
The two-dimensional code boundary detection means includes
Means for calculating an inclination of a side representing an outline of the image data of the two-dimensional code based on boundary points of a plurality of finder patterns detected by the finder pattern boundary detection unit;
Means for detecting a boundary point representing a side of the two-dimensional code by performing a pixel search in a direction inferred from the calculated slope of the side;
To remove a means for calculating the first and the intersection of the second side orthogonal among the four sides of the image data before Symbol 2-dimensional code, a boundary point located outside of the range from the calculated intersection as an error point An error point removing means having a means, and
Means for calculating the intersection of the first and second sides of the image data of the two-dimensional code,
A threshold line is drawn using one or more boundary points included in the set of boundary points representing the first side as a calculation reference point, and the boundary point included in the boundary point set representing the second side is the threshold value. Means for determining whether or not it is located on the intersection side of the line;
Means for detecting, as a non-threshold proximity point, a boundary point closest to the intersection point among boundary points not located on the intersection side of the threshold line in the set of boundary points representing the second side;
An intersection of a straight line obtained by estimating the slope of the first side from the calculation reference point and a straight line obtained by estimating the slope of the second side from the out-of-threshold proximity point of the second side Based on the above, a means for calculating intersection candidate points,
Among the boundary points included in the set of boundary points representing the first side, the boundary point closest to the threshold line among the boundary points located on the intersection side of the threshold line is close to the threshold value. And detecting a boundary point closest to the threshold straight line among the boundary points included in the boundary point set representing the second side and located on the intersection side of the threshold line. Means for detecting as a proximity point within the threshold;
Which of the detected first side in-threshold proximity point and the detected second side in-threshold proximity point is outside the calculated intersection candidate point 2-dimensional code that further comprising a means for determining a reading device.
前記2次元コード歪み矯正手段は、
2次元コードの画像データの各頂点を結ぶ頂点フレームを生成する頂点フレーム生成手段と、
前記矯正対象の2次元コードの画像データにおける目標座標のピクセル値を算出する際に、前記生成された頂点フレームの、上辺における前記目標座標に対応する点の座標値と、下辺における前記目標座標に対応する点の座標値と、左辺における前記目標座標に対応する点の座標値と、右辺における前記目標座標に対応する点の座標値をそれぞれ算出する頂点フレーム対応点算出手段と、
前記2次元コードの画像データの、上辺における前記目標座標に対応する境界点の座標値と、下辺における前記目標座標に対応する境界点の座標値と、左辺における前記目標座標に対応する境界点の座標値と、右辺における前記目標座標に対応する境界点の座標値をそれぞれ算出する境界対応点算出手段と、
前記頂点フレームにおいて前記目標座標に対応する目標座標値を算出する頂点フレーム内目標座標値算出手段と、
前記頂点フレームの上下左右の各辺について算出された前記目標座標に対応する点から、前記2次元コードの画像データの上下左右の各辺について算出された前記目標座標に対応する境界点へのベクトルを重み付け加算して、2次元コード歪みベクトルを算出する2次元コード歪み算出手段と、
前記頂点フレームについて算出された目標座標値に、前記算出された2次元コード歪みベクトルを加算して、前記2次元コードの画像データにおける前記目標座標に対応する目標座標値を算出する2次元コード内目標座標値算出手段と

備えることを特徴とする請求項1又は2記載の2次元コード読取装置。
The two-dimensional code distortion correcting means includes
Vertex frame generating means for generating a vertex frame connecting the vertices of the image data of the two-dimensional code;
When calculating the pixel value of the target coordinate in the image data of the two-dimensional code to be corrected, the coordinate value of the point corresponding to the target coordinate on the upper side of the generated vertex frame and the target coordinate on the lower side A vertex frame corresponding point calculation means for calculating a coordinate value of a corresponding point, a coordinate value of a point corresponding to the target coordinate on the left side, and a coordinate value of a point corresponding to the target coordinate on the right side;
The coordinate value of the boundary point corresponding to the target coordinate on the upper side, the coordinate value of the boundary point corresponding to the target coordinate on the lower side, and the boundary point corresponding to the target coordinate on the left side of the image data of the two-dimensional code A boundary corresponding point calculating means for calculating a coordinate value and a coordinate value of a boundary point corresponding to the target coordinate on the right side;
In-vertex frame target coordinate value calculating means for calculating a target coordinate value corresponding to the target coordinate in the vertex frame;
A vector from a point corresponding to the target coordinate calculated for each of the upper, lower, left and right sides of the vertex frame to a boundary point corresponding to the target coordinate calculated for each of the upper, lower, left and right sides of the image data of the two-dimensional code 2D code distortion calculating means for calculating a two-dimensional code distortion vector by weighted addition,
In the two-dimensional code for calculating the target coordinate value corresponding to the target coordinate in the image data of the two-dimensional code by adding the calculated two-dimensional code distortion vector to the target coordinate value calculated for the vertex frame 2-dimensional code reading apparatus according to claim 1, wherein further comprising a target coordinate value calculating means.
前記請求項1乃至のいずれか記載の2次元コード読取装置において、各手段の処理を実行するために使用されるプログラム。 The program used for performing the process of each means in the two-dimensional code reader according to any one of claims 1 to 3 .
JP2008208095A 2008-08-12 2008-08-12 Two-dimensional code reader and program thereof Expired - Fee Related JP4970385B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008208095A JP4970385B2 (en) 2008-08-12 2008-08-12 Two-dimensional code reader and program thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008208095A JP4970385B2 (en) 2008-08-12 2008-08-12 Two-dimensional code reader and program thereof

Publications (2)

Publication Number Publication Date
JP2010044586A JP2010044586A (en) 2010-02-25
JP4970385B2 true JP4970385B2 (en) 2012-07-04

Family

ID=42015921

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008208095A Expired - Fee Related JP4970385B2 (en) 2008-08-12 2008-08-12 Two-dimensional code reader and program thereof

Country Status (1)

Country Link
JP (1) JP4970385B2 (en)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101109510B1 (en) 2010-07-02 2012-01-31 (주) 애니모비 Method for recognising two-dimensional barcode
CN105488552B (en) * 2016-01-01 2018-05-15 江苏图码信息科技有限公司 Nonlinear Two-Dimensional code product and application component
CN113076768B (en) * 2021-04-08 2023-04-11 中山大学 Distortion correction method for fuzzy recognizable two-dimensional code
KR102597459B1 (en) * 2022-01-04 2023-11-02 주식회사 큐에스택 System and method of correcting of image for diagnoisis
EP4332832B1 (en) 2022-09-02 2024-06-26 Sick Ag Locating an optical code

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07152906A (en) * 1993-11-26 1995-06-16 Tec Corp Recognition processor for two-dimensional symbol image
JP2004086305A (en) * 2002-08-23 2004-03-18 Seiko Epson Corp Method for detecting bar code tilt angle and bar code reader
JP2005316755A (en) * 2004-04-28 2005-11-10 Nec Electronics Corp Two-dimensional rectangular code symbol reader and two-dimensional rectangular code symbol reading method
JP4314148B2 (en) * 2004-05-10 2009-08-12 株式会社リコー Two-dimensional code reader
JP4951735B2 (en) * 2007-11-26 2012-06-13 株式会社デンソーウェーブ Optical information reader

Also Published As

Publication number Publication date
JP2010044586A (en) 2010-02-25

Similar Documents

Publication Publication Date Title
JP4551018B2 (en) Image combiner
CN110298282B (en) Document image processing method, storage medium and computing device
JP4657367B2 (en) Image processing apparatus, imaging apparatus, and image distortion correction method
CN109871841B (en) Image processing method, device, terminal and storage medium
RU2631765C1 (en) Method and system of correcting perspective distortions in images occupying double-page spread
JP2005122320A (en) Photographing apparatus, and its image processing method and program
JPH07192086A (en) Picture inclination detection method
JP4970385B2 (en) Two-dimensional code reader and program thereof
CN111767752B (en) Two-dimensional code identification method and device
TWI567654B (en) Picture-based barcode encoding method, picture-based barcode decoding method, picture-based barcode encoding device and picture-based barcode decoding device
JP3866600B2 (en) Image processing apparatus and image processing method
CN113888431A (en) Training method and device of image restoration model, computer equipment and storage medium
JP6075294B2 (en) Image processing system and image processing method
CN112927163A (en) Image data enhancement method and device, electronic equipment and storage medium
WO2024169397A9 (en) Seal recognition method and apparatus, electronic device, and storage medium
WO2024169397A1 (en) Seal recognition method and apparatus, electronic device, and storage medium
JP4565396B2 (en) Image processing apparatus and image processing program
US20120038785A1 (en) Method for producing high resolution image
JP4898655B2 (en) Imaging apparatus and image composition program
CN112532884A (en) Identification method and device and electronic equipment
CN115983304A (en) Two-dimensional code dynamic adjustment method and device, electronic equipment and storage medium
CN114998347B (en) Semiconductor panel corner positioning method and device
CN114332890A (en) Table structure extraction method and device, electronic equipment and storage medium
CN113452920A (en) Focus point determining method, device, equipment and medium
JP6056354B2 (en) Image processing apparatus, image processing method, and image processing program

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100805

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110929

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111011

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111207

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: 20120306

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: 20120404

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

Free format text: PAYMENT UNTIL: 20150413

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees