KR20120003231A - 2차원 바코드 인식방법 - Google Patents

2차원 바코드 인식방법 Download PDF

Info

Publication number
KR20120003231A
KR20120003231A KR1020100063984A KR20100063984A KR20120003231A KR 20120003231 A KR20120003231 A KR 20120003231A KR 1020100063984 A KR1020100063984 A KR 1020100063984A KR 20100063984 A KR20100063984 A KR 20100063984A KR 20120003231 A KR20120003231 A KR 20120003231A
Authority
KR
South Korea
Prior art keywords
barcode
pattern
code
image
error
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.)
Granted
Application number
KR1020100063984A
Other languages
English (en)
Other versions
KR101109510B1 (ko
Inventor
김동주
홍창영
Original Assignee
(주) 애니모비
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 (주) 애니모비 filed Critical (주) 애니모비
Priority to KR1020100063984A priority Critical patent/KR101109510B1/ko
Publication of KR20120003231A publication Critical patent/KR20120003231A/ko
Application granted granted Critical
Publication of KR101109510B1 publication Critical patent/KR101109510B1/ko
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • G06K7/1404Methods for optical code recognition
    • G06K7/1408Methods for optical code recognition the method being specifically adapted for the type of code
    • G06K7/14172D bar codes
    • 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/146Methods for optical code recognition the method including quality enhancement steps
    • G06K7/1473Methods for optical code recognition the method including quality enhancement steps error correction
    • 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/146Methods for optical code recognition the method including quality enhancement steps
    • G06K7/1478Methods for optical code recognition the method including quality enhancement steps adapting the threshold for pixels in a CMOS or CCD pixel sensor for black and white recognition

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (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)
  • Quality & Reliability (AREA)
  • Character Discrimination (AREA)

Abstract

본 발명은 정사각형의 선 형태로 표현되는 파인더패턴과, 상기 파인더패턴의 내부에 위치하며, 검정색 영역과 흰색 영역이 일정한 간격을 두고 반복되는 형태로 이루어지는 타이밍패턴과, 상기 바코드의 방향을 결정하는 방향패턴과, 상기 패턴들을 제외한 셀에 데이터를 저장하는 코드 영역을 갖는, 사각형태의 격자의 셀들로 이루어지는 매트릭스 바코드를 모바일 기기가 내장된 카메라를 통해 촬영하여 인식하는 방법으로서:
(1) 상기 매트릭스 바코드의 그레이스케일 이미지를 생성하는 단계;
(2) 상기 이미지의 경계를 검출하는 단계;
(3) 상기 (2) 단계의 결과로 후보 목록을 생성하는 단계; 및
(4) 상기 후보 목록에 생성된 각각의 후보에 대하여 오류 교정을 수행하는 단계;를 포함하는 매트릭스 바코드의 인식 방법을 제안한다.

Description

2차원 바코드 인식방법{METHOD FOR RECOGNISING TWO-DIMENSIONAL BARCODE}
본 발명은 휴대폰과 같은 모바일 단말기가 인식하는 대상이 되는 2차원 코드를 인식하는 방법에 관한 것이다.
증강현실(augmented reality)은 가상현실(virtual reality)의 일종이다. 보통의 가상현실이 사용자에게 실제세계를 배제하고 완전한 가상세계에 대한 인지만을 제공하는 것과 달리, 증강현실은 실제세계와 그곳에 첨가되거나 합성된 가상객체를 동시에 제공한다. 즉, 가상현실이 실제세계를 완전히 대체하는 것이라면, 증강현실은 실제세계를 보충, 증강하는 개념이다.
증강현실은 다양하게 활용되며 현실세계의 가치를 향상시켜 준다. 예컨대 <스포츠 중계방송 경기장 내 스폰서 광고>가 있다. 다양한 종목의 경기를 중계방송으로 시청할 때 경기장 곳곳에서 여러 스폰서들의 광고들을 볼 수 있다. 광고를 위해 마련된 특정 장소에 다양한 형식의 포스터를 부착하거나 전광판 등이 활용된다. 여기에 증강현실 응용을 이용하면 그 광고를 위한 특정 장소를 단지 공백으로 두어도 되며 여기에 실시간으로 광고내용을 합성하여 방송에 송출 할 수 있다. 저비용으로 선명하게 다양한 형식의 광고를 보여줄 수 있고, 교체에 비용도 들지 않으며, 지역이나 국가별로 다른 광고를 보이는 것도 가능하다.
다른 예로, <상품 정보 표시>가 있다. 공산품에는 바코드가 있어서 기계가 그 상품의 종류를 쉽게 인식할 수 있다. 어떤 상품을 증강현실 응용시스템이 내장된 휴대폰과 같은 모바일 기기(mobile device)에 내장된 카메라를 통해 그 바코드를 독출하면, 응용시스템이 상품의 영상에 여러 가지 정보들을 합성하여 출력한다. 가격이나 원료, 생산지와 같은 기본 정보부터 동영상 조리법이나 광고, 관련행사등과 같은 멀티미디어 정보까지 다양한 형태의 부가정보 출력이 가능하다.
또한, <입체 삽화>의 경우, 평범한 광고지나 책을 증강현실 시스템을 통해 보면 동영상이나 입체적인 그림이 보이게 할 수 있다. 특정한 표시나 패턴을 삽입하여 이것을 인식하거나 평범한 삽화를 인식하여 그 위치에 실시간으로 가상 객체를 합성한다. 사용자가 자유롭게 광고지나 책을 돌리거나 가까이 또는 멀리서 보면 이에 따라 가상객체가 돌아가거나 확대 또는 축소되어 보이도록 하는 것이 가능하다. 또한, <게임>에 증강현실을 적용할 수 있다. 예컨대 실제 공간에 괴수가 나타나고 사용자가 가상의 무기를 이용해 퇴치하는 게임을 상상할 수 있다. 사용자는 카메라가 부착된 HMD를 머리에 쓰고, 이것과 연결된 컴퓨터를 등에 맨 상태로 실제 공간을 돌아다닌다. 기본적으로 HMD에는 카메라를 통해 찍힌 실제세계의 영상이 보이므로 안경을 쓴 것처럼 자연스럽게 느껴질 것이다. 컴퓨터가 사용자의 위치와 HMD의 방향을 인식하고 카메라 입력 영상에 괴수를 합성하여 HMD로 전송하면 실제세계에 괴수가 존재하는 것처럼 느끼게 될 것이다. 여기에 무기모양의 입력장치로부터 버튼의 입력이 들어오면 그 방향을 계산해서 지적하는 위치의 괴수에 피해를 입힐 수도 있다.
본 발명에서는 특별히 <모바일 환경(mobile environment)>에서의 증강현실 시스템을 고려한다. 모바일 증강현실은 핸드폰이나 스마트폰, PDA와 같은 모바일기기 환경에서 구동되는 증강현실을 뜻한다. 모바일 기기는 간편하게 언제 어디에서나 휴대가 가능하다는 장점이 있다. 이 장점이 증강현실에 더해지면 보다 다양한 형태의 응용이 가능해진다.
위의 예에서, <상품의 정보 표시>와 같은 경우는 모바일 기기가 아니면 실용적인 응용이 불가능하다. 그리고 웹캠과 고정형 컴퓨터를 이용해서 응용이 가능한 입체 삽화와 같은 경우에서도 모바일 기기를 활용하면 카메라와 표시화면이 일체화되어 움직여지므로 더욱 몰입감을 높여줄 수 있다. 그러나 모바일 환경이 장점만을 제공하는 것은 아니다. 모바일 기기는 소형화와 휴대용 배터리에 의존한 전력 등으로 인해 근본적인 한계를 가진다. 보통의 컴퓨터에 비해 계산능력이 현저히 떨어진다. 이러한 단점을 극복하며 장점을 극대화하는 증간현실 응용을 위한 도구의 제안이 본 발명의 목적이 된다.
모든 증강현실 응용에서 기본적으로 필요한 필수요소는 위치지시자이다. 위치지시자는 증가현실에서 합성하려 하는 현실세계와 가상세계 간에 정합을 제공한다. 위치지시자의 종류로는 능동형 센서방법과 수동형 센서방법으로 분류할 수 있다. 전자로는 RFID, LED, GPS와 같이 위치지시자가 능동적으로 신호를 송출하는 것이 포함되며, 후자에는 특별한 패턴을 갖는 기호체계로서 실제세계에 부착되는 형태로 삽입되어 카메라에 의해 인식되는 마커가 포함된다. 본 발명은 특히 후자에 관련된다.
증강현실 응용에 사용되는 마커는 대부분 그 정보용량이 아주 작다. 모바일용은 아니지만 유명한 시스템으로 ARTag가 있는데, 이 또한 마커가 1,024개의 아이디밖에 제공을 하지 않는다. 그래서 증강하고자 하는 가상객체의 종류가 많을 때는 두 개 이상의 마커를 조합해서 사용하기도 한다. 속도를 위한 선택이지만, 증강현실의 다양한 활용을 시도할 때 이러한 용량은 제약사항이 될 수 있다. 대형의 어떤 증강현실 응용시스템에서 다수의 상황이나 장소를 다루고, 각각에 대해 증강하고자 하는 정보의 종류를 유일하게 표현하려 할 때 문제가 될 수 있다. 예를 들어 한 매장에 진열된 상품의 종류는 1,024개나 4,096개를 훨씬 초과하며, 책에서 페이지, 삽화, 문제집의 문제항목이나 여러 게임 등의 응용에서 필요한 수량도 마찬가지이다.
모바일용의 마커로서 2차원 바코드가 널리 사용되고 있다. 기존의 바코드가 1차원적인 선형으로 정보를 표현하는 것과는 달리 2차원 방식으로 정보를 표현한다. 따라서 보다 효율적으로 동일한 면적에 더 많은 정보를 표현하는 것이 가능한 것으로 알려져 있다. 2차원 바코드로는 PDF-417코드, QR코드, Data Matrix, MaxiCode 등이 사용되고 있다.
도 1은 QR코드의 일예를 나타낸다. 점으로 표시되는 QR코드의 정보 표현의 최소 단위를 모듈(module)이라고 했을 때, 도 1의 QR코드는 가로×세로는 21×21이고 버전이 증가함에 따라 단계적으로 가로×세로가 커져서 가장 큰 버전 40은 177×177의 크기를 갖는다. 그리고 버전이 증가함에 따라 포함할 수 있는 정보의 양도 증가한다. 그러나 국제표준(ISO/IEC18004)인 QR코드는 인식 과정에서 처리되어야 할 연산이 매우 많아 전용 리더기로 인식해야만 한다. 또한 일반 카메라를 사용하는 비전기반 인식기의 경우에는 성능이 뛰어난 컴퓨터를 필요로 하여 모바일 환경에서 사용하기에는 부적합하다.
이를 해결하기 위하여 도 2와 같이 QR코드와 유사한 코드 표시 체계와 알고리즘을 사용하면서도 모바일 환경에 적합하도록 소형화한 일본 공업 표준(JIS ×0510)으로 지정된 Micro QR코드가 개발되었다. 도 2는 QR코드와 비교한 Micro QR코드이다. 도 2에서 보는 바와 같이, QR코드와 비교한 Micro QR코드의 주요 특징은 파인더 패턴(position detection pattern, or finder pattern)이 왼쪽 상단에 단 한 개이고, 마진 영역이 2개 모듈 폭으로 구성된다. Micro QR코드는 QR코드에 비해 저장할 수 있는 자료량의 최대 35개의 숫자이며, 아래의 표 1과 같이 M1~M4의 4가지 버전이 존재하고, 가장 큰 M4의 경우 오류 교정 수준에 따라 L, M, Q가 존재한다.
Figure pat00001
<Micro QR코드의 버전에 따른 데이터 용량>
QR코드나 Micro QR코드의 다양한 버전에 따른 정보용량과 오류 교정률은 이 코드의 대단한 장점이기도 하지만, 인식 관점에서는 버전에 따른 별도의 인식기를 요구하므로 인식과정을 복잡하게 하거나 단가 상승의 중요한 원인이 되기도 한다.
QR코드에서 다양한 정보용량과 오류 교정률을 지원하기 위해 코드워드의 길이를 각 버전과 교정률에 따라 다양하게 정의한다. 그러므로 인식기는 다양한 길이의 코드워드에 대한 처리가 가능해야 한다. 이 경우 변환테이블을 이용하는 빠른 방법을 활용할 수 없으며, 리드솔로몬의 복잡한 처리를 그대로 수행해야 하는 문제점이 있다. 또한 저장용량의 증가로 인한 처리해야 할 자료양의 증가는 직접적인 계산량 증가로 이어지는 불이익이 따른다.
본 발명의 목적은 모바일용 새로운 2차원 코드를 제공함과 동시에, 이 신규한 2차원 코드를 인식하는 방법을 제안함에 있다. 본 발명의 신규한 2차원 코드는, 종래의 QR코드나 Micro QR코드가 중점을 두었던 바코드의 가변성 대신에, 모바일 환경에서 실시간으로 인식 될 정도로 빠르게 인식될 수 있으며, 충분한 수량의 아이디를 표현할 수 있는 신규한 2차원 코드를 제공한다. 또한, 본 발명의 신규한 2차원 코드 인식 방법은 2단계의 계층적인 오류처리 방법을 사용함으로써, 교정되지 못하거나 잘못된 인식 경우를 찾아내 걸러냄으로써 인식의 정확률을 향상시키고자 한다.
모바일 바코드의 저장 정보를 아이디정보만으로 그 종류를 한정한다면 일정 크기 이상을 필요하지 않게 된다. 또한, 충분한 용량을 고정적으로 정하여 처리를 단순화 하면 속도를 향상시킬 수 있다. 본 발명의 2차원 바코드는 이러한 이유에서 가변성을 포기하고, 대신 모바일 환경에서 실시간으로 인식 될 정도로 빠르게 인식 가능하며, 충분한 수량의 아이디를 표현할 수 있도록 한다.
한편, 본 발명의 명시되지 않은 또 다른 목적들은 하기의 상세한 설명 및 그 효과로부터 용이하게 추론할 수 있는 범위 내에서 추가적으로 고려될 것이다.
위와 같은 목적을 달성하기 위한 본 발명의 2차원 바코드의 인식 방법은, 사각형태의 격자의 셀들로 이루어지는 매트릭스 바코드를 인식하는 방법으로서:
모바일 기기의 바코드 인식 디바이스가 상기 매트릭스 바코드를 내장된 카메라로 촬영하였을 때 발생한 오류를 교정하는 제1단계; 및
상기 제1단계를 통해 얻은 매트릭스 바코드의 교정된 이미지에 대해 오류를 검출하여, 오류가 검출되지 않은 경우에 한하여 상기 제1단계의 오류 교정을 승인하는 단계;를 포함하는 것을 특징으로 한다.
또한, 본 방법의 상기 매트릭스 바코드는,
정사각형의 선 형태로 표현되는 파인더패턴;
상기 파인더패턴의 내부에 위치하며, 검정색 영역과 흰색 영역이 일정한 간격을 두고 반복되는 형태로 이루어지는 타이밍패턴;
상기 바코드의 방향을 결정하는 방향패턴; 및
상기 패턴들을 제외한 셀에 데이터를 저장하는 코드 영역이 형성되며, 상기 패턴들을 이용하여 상기 코드 영역에 저장된 데이터를 독출하는 것을 특징으로 한다.
또한, 본 발명은 정사각형의 선 형태로 표현되는 파인더패턴과, 상기 파인더패턴의 내부에 위치하며, 검정색 영역과 흰색 영역이 일정한 간격을 두고 반복되는 형태로 이루어지는 타이밍패턴과, 상기 바코드의 방향을 결정하는 방향패턴과, 상기 패턴들을 제외한 셀에 데이터를 저장하는 코드 영역을 갖는, 사각형태의 격자의 셀들로 이루어지는 매트릭스 바코드를 모바일 기기가 내장된 카메라를 통해 촬영하여 인식하는 방법으로서:
(1) 상기 매트릭스 바코드의 그레이스케일 이미지를 생성하는 단계;
(2) 상기 이미지의 경계를 검출하는 단계;
(3) 상기 (2) 단계의 결과로 후보 목록을 생성하는 단계; 및
(4) 상기 후보 목록에 생성된 각각의 후보에 대하여 오류 교정을 수행하는 단계;
를 포함하는 것을 특징으로 하는, 2차원 매트릭스 바코드의 인식 방법을 특징으로 한다.
또한, 바람직하게는, 상기 방법의 상기 (4) 단계는,
상기 후보의 파인더패턴의 4꼭지점들을 찾는 단계; 및
상기 4꼭지점들을 이용해 상기 파인더패턴이 위치하는 부분의 경로를 구하는 단계;를 포함하는 것이 좋다.또한, 상기 방법은, 바람직하게는, 기울어져 있는 바코드 영상에 대해 그레이스 케일 이미지의 배열을 생성하는 단계; 및 상기 타이밍패턴의 정보를 이용해 왜곡된 배열의 영상정보를 보정하는 단계;를 더 포함할 수 있다.
또한, 바람직한 본 방법의 일 실시예에 있어서, 상기 방향패턴을 이용하여 방향패턴이 잘못된 후보는 목록에서 제외하는 단계를 더 포함하는 것이 좋다.
또한, 본 방법은, 상기 코드 영역에 기록된 코드워드를 독출하여 직렬화하는 단계;를 더 포함하고, 상기 (4) 단계는, 상기 직렬화된 비트열에 대해 오류처리를 수행하는 단계를 포함하는 것이 바람직하다.
본 발명의 바코드는 종래의 QR코드의 가변성을 포기하는 대신 모바일 환경에서 실시간으로 인식 될 정도로 빠르게 인식 가능한 장점을 갖는다. 또한 표 2에 요약된 바와 같이 QR code와 마찬가지로 매트릭스 형태의 기호체계를 가지는데, 그 기호의 크기는 13×13이다.
Figure pat00002
<본 발명의 2차원 코드와 QR코드와의 비교>
아래에서 상세히 설명하는 바와 같이, 매트릭스 바코드란 간격이 일정한 사각형태의 격자 내부 셀들을 검정색과 흰색을 이용해 채우는 형태를 뜻하며, 크기가 13×13이라는 것은 그 격자가 가로 13칸과 세로 13칸인 정사각형 형태로 총 169개의 검정색이나 흰색의 셀들로 구성됨을 뜻한다. QR코드의 경우 크기가 버전 별로 다양하며, 정보용량이 그 크기와 오류교정률에 따라 달라진다. 서로 대등한 조건을 유지하기 위해 같은 13×13 크기의 QR코드인 Micro QR코드 M2버전과 비교하였다. M2 버전의 두 가지 오류교정수준인 L단계와 M단계 두 가지를 대상으로 비교하였다. 각각은 오류교정률 7%와 15%를 뜻한다.
기호형태와 기호크기는 위에 설명한 바와 같이 모두 매트릭스 형태의 13×13크기를 갖는다. 기호구성요소는 기호를 표현할 때 항상 삽입되어 특별한 기능을 수행하며, 그 기호 고유의 형태를 형성하는 패턴들을 뜻한다. QR코드의 파인더패턴은 그것의 중심을 지나는 360도 전방향의 어느 선상에서든 1:1:3:1:1의 고유한 비율로 색상이 반전되는 형태를 지닌다. 그리고 바코드의 좌측상단에 위치하는 이 파인더패턴과 다른 기호들을 구분하는 여백을 갖게 된다. 그리고 상단과 좌측에 파인더패턴과 여백을 제외한 외곽부분에 흰색과 검정색이 반복적으로 교차하는 타이밍패턴이 위치하게 된다. 본 발명의 바코드의 경우 외곽을 검정색 셀들로 둘러싸는 형태로 파인더패턴을 가지며, 바코드의 중심점을 지나는 가로선과 세로선이 이루는 십자형태 상에 역시 흰색과 검정색이 반복적으로 교차하는 타이밍패턴을 갖는다. 또한, 완전한 대칭구조를 갖는 파인더패턴과 타이밍패턴만으로는 방향을 결정할 수 없으므로, 중심에 4개 셀과 모서리의 4개 셀을 방향을 정의하는 방향패턴으로 활용한다.
정보표현은 정보용량을 보여준다. QR코드의 경우 Micro 버전에서 bit 저장을 지원하지 않고 숫자와 영문·숫자의 저장을 지원한다. 저장 가능한 숫자의 최대 자릿수와 영문·숫자의 개수가 표에 나타나 있다. 본 발명의 바코드의 경우 6바이트의 용량을 이용해 14자리의 숫자나 개에 해당하는 아이디를 저장할 수 있다. 그리고 정보효율은 표현할 수 있는 정보의 양을 그 바코드의 기호 크기(13×13)로 나눈 비율로서 동일한 크기의 바코드에서 실제 정보 용량의 효율의 정도를 비교한다. 이 효율의 차이는 각각의 고유한 기호구성요소와 오류처리를 위한 공간의 차이로부터 발생한다.
오류처리의 경우 QR코드가 리드솔로몬을 이용해 각각 7%, 15%를 교정한다. 본 발명의 바코드의 경우엔 특별히 2단계의 계층적인 오류처리 방법을 사용하는데, 1단계에서 QR코드와는 다른 방법인 해밍방법을 이용해 오류교정을 시도하고, 2단계에서 오류검출을 시도한다. 해밍방법을 사용하는 이유는 오류교정률의 가변성을 둘 필요가 없으며, 단순하게 변환테이블을 활용해 빠른 오류교정이 가능하기 때문이다 또한 2단계에 오류검출을 시도하는 것은 교정되지 못하거나 잘 못된 인식 경우를 찾아내 걸러냄으로써 정확률을 향상시키기 위함이다. 기본적으로 해밍부호방법이나 리드솔로몬은 오류교정률을 초과하는 오류의 발생에 대해 오작동할 가능성을 갖는다. 이러한 문제점을 보완하기 위해 본 발명의 바코드는 계층적인 오류처리 방법을 갖도록 설계되었다.
위와 같은 비교를 통해서, 본 발명의 2차원 신규한 바코드의 장점은, (1) 단순한 방법으로 빠르게 인식하는 것이 가능하며, (2) 높은 정보 효율성을 갖고, (3) 2단계의 계층적 오류처리를 통하여 정확률을 향상시켰다는 것이다.
또한, 본 발명은 위와 같은 신규한 2차원 바코드에 대한 정확하고 신속하며 효율성 높은 인식 방법을 동시에 제공함으로써, 본 발명의 바코드의 상업화에 기여하고자 한다.
본 발명의 명세서에서 구체적으로 언급되지 않은 효과라 하더라도, 본 발명의 기술적 특징에 의해 기대되는 잠정적인 효과는 본 발명의 명세서에 기재된 것과 같이 취급됨을 첨언한다.
도 1은 종래의 QR코드를 나타내는 도면이다.
도 2는 종래의 Micro QR코드를 나타내는 도면이다.
도 3은 본 발명에 의한 계층적인 오류 처리 방법을 나타내는 도면이다.
도 4는 본 발명의 2차원 바코드의 파인더패턴(10)의 구성예를 도시한 도면이다.
도 5는 본 발명의 2차원 바코드의 타이밍패턴(20)의 구성예를 도시한 도면이다.
도 6의 (a)는 본 발명의 바코드의 원본이미지의 개념적인 일 예를 나타내며, (b)는 (a)의 바코드를 카메라로 기울여 촬영한 영상 이미지이다.
도 7은 도 6(b)의 영상을 동일한 크기의 격자로 독출할 때의 상태를 나타내는 도면이다.
도 8은 본 발명의 2차원 바코드의 방향패턴의 구성예를 도시한 도면이다.
도 9는 본 발명의 2차원 바코드의 기본 템플릿의 예를 나타내는 도면이다.
도 10은 본 발명의 2차원 바코드의 코드영역에 코드워드의 배치구성의 예를 나타내는 도면이다.
도 11은 문자열 “Hello!”를 표현한 본 발명의 2차원 바코드이다.
도 12는 본 발명의 2차원 매트릭스 바코드의 인식 방법의 일 실시예의 전체 과정을 개략적으로 나타내는 순서도이다.
도 13은 도 11의 인쇄된 바코드를 촬영하였을 때 얻은 그레이스 케일 영상 이미지이다.
도 14는 도 13에 대한 경계검출 처리를 하여 얻은 이미지이다.
도 15는 도 14에 대하여 후보조각을 생성한 결과를 예시한 도면이다.
도 16는 도 15에 대한 4꼭지점 찾기를 예시한는 도면이다.
도 17은 그레이스케일 이미지 상의 파인더패턴 검사 경로를 나타낸 도면이다.
도 18은 파인더패턴 검사결과로 남은 하나의 후보를 예시적으로 표현한 도면이다.
도 19는 바코드의 39×39 그레이스케일 배열화를 나타내는 도면이다.
도 20은 도 19와 달리 카메라로 기울여서 도 11의 인쇄된 바코드를 촬영했을 때의 왜곡된 영상의 배열화를 나타내는 도면이다.
도 21은 도 20의 바코드 이미지를 3×3크기 단위로 분할한 왜곡된 배열을 나타내는 도면이다.
도 22는 왜곡된 배열의 이진화 영상과 원본 바코드를 비교하는 도면이다.
도 23은 왜곡보정을 하기 위하여 사용하는 비대칭형 격자의 구조의 일 예를 나타내는 도면이다.
도 24는 왜곡보정 단계에서 사용되는 9가지 격자의 구성 예를 나타내는 도면이다.
도 25는 왜곡된 배열의 왜곡 보정을 나타내는 도면이다.
도 26은 "Hello!" 바코드 배열과 격자를 나타내는 도면이다.
도 27은 방향패턴을 구성하는 8개의 셀의 위치를 나타낸 도면이다.
도 28은 배열의 이진화 결과와 각각의 코드워드 번호를 나타낸 도면이다.
도 29는 배열로부터 코드워드의 직렬화를 나타낸 도면이다.
<도면의 주요부분에 대한 부호의 설명>
1: 2차원 바코드 10: 파인더패턴
20: 타이밍패턴 25: 2차원 바코드의 중심점
31~38: 방향패턴
※ 첨부된 도면은 본 발명의 기술사상에 대한 이해를 위하여 참조로서 예시된 것임을 밝히며, 그것에 의해 본 발명의 권리범위가 제한되지는 아니한다.
이하, 첨부된 도면을 참조하여 본 발명의 실시를 위한 구체적인 내용을 설명한다. 그리고 본 발명을 설명함에 있어서, 관련된 공지기능 등 이 분야의 기술자에게 자명한 사항으로서 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략한다.
<정보용량>
정보용량은 보통 비트나 바이트 단위로 정의되는 저장 가능한 정보의 크기를 뜻한다. 가능한 범위 내에서 용량은 클수록 좋다. 하지만 그것을 불가능하게 만드는 요인이 존재한다. 그것은 모바일 기기의 한계와 밀접한 관련이 있다. 계산능력의 한계 때문에 복잡한 처리가 불가능하다. 저장용량의 증가는 단순히 처리해야 할 자료양의 증가와 추가적인 처리의 요구로 이어질 수 있다. 예를 들어 일반적인 정보용량의 증가는 바코드의 물리적 크기의 증가나 반대로 표현크기의 감소로 이어지기 때문에 카메라 왜곡 등의 오류원인에 더 쉽게 노출되게 되고 이에 대한 추가적인 처리를 요구하게 된다. 위치보정패턴 등의 도구가 필요할 수도 있고, 왜곡보정을 위한 계산이 늘어나게 된다. 그리고 오류처리의 강도도 증가해야 한다.
무조건 작게 하는 것도 물론 최선은 아니다. 새로운 2차원 바코드를 제안하는 이유가 기존의 모바일 바코드가 가진 용량의 한계를 해결하기 위해서이다. 다양한 응용에 충분한 용량을 제공하며 인식 과정의 성능을 고려한 적절한 크기를 갖는 것이 중요하다.
모바일 환경에서 응용되는 바코드가, 범용의 2차원 바코드처럼 아이디 정보 이상의 부가정보를 포함할 필요는 없다 왜냐하면 다양한 응용에서 필요한 모든 정보를 2차원 바코드에 저장하는 것이 애초에 불가능하기 때문에 그러한 정보는 따로 저장하여 접근할 필요가 있기 때문이다. 그러므로 모바일 바코드는 아이디 정보만을 저장할 수 있으면 된다. 나머지 필요한 부가정보들은 바코드 외에 모바일 기기가 접근 가능한 저장 공간으로부터 얻어진다.
이제 어떤 단일의 대형 시스템에 수많은 객체가 존재할 때, 이것들 각각에 대해 유일한 아이디를 제공하기 위해서는 얼마 정도의 용량이 필요한지에 대해 생각해본다. 이러한 대표적인 시스템으로 인터넷을 생각해볼 수 있다. 전 세계를 거쳐 인터넷에 연결되어 있는 모든 컴퓨터들은 원칙적으로 유일한 주소를 부여 받는다. 여기에 사용되는 인터넷주소(IPv4)의 크기는 4바이트이다. 4바이트는 32비트이며, 이 32비트로 표현할 수 있는 아이디의 수는 232개 즉, 4,294,967,296개 이다. 4바이트 이상의 용량을 가지면 적어도 현재의 인터넷 호스트를 유일하게 표현하는 것이 가능하다. 본 발명이 제안하는 바코드는 최소 4바이트의 정보용량을 갖는 것이 바람직하다. 정확한 크기에 대해서는 다음의 오류처리에 관한 사항들을 고려하고 모양을 결정하는 과정을 거치며 결정한다.
<오류처리>
오류처리 방법은 크게 두 가지로 분류하여 생각해볼 수 있다. (1) 오류 교정이 가능한 것과 (2) 검출만이 가능한 것이 그것이다. 오류 교정이 가능한 방법은 오류의 검출이 또한 가능하지만, 두 가지 목적 중 한 가지를 확실히 정하여 구분하여 사용할 필요가 있다. 오류가 검출되면 그것을 단지 폐기하거나 교정을 시도하던지, 둘 중 한 가지만을 해야 한다. 몇 개의 오류가 발생했는지를 알아낼 수 있는 방법은 없다. 그렇기 때문에 하나의 오류가 발생했을 때는 교정하고 두 개 이상일 때 실패로 처리하는 일은 불가능하다. 하지만 바코드 응용은 오류 교정의 시도도 필요하고 그것이 실패했을 경우 그 사실을 정확히 파악하는 일도 중요하다. 잘못된 코드를 그대로 받아들여 응용에 문제를 발생시켜서는 안 된다.
본 발명의 2차원 바코드는 계층적인 오류처리 방법을 사용한다. 2개의 계층으로 오류처리 단계를 구분한다. 도 3에서 보는 바와 같이, 첫 번째 단계(S10)에서 오류의 교정을 시도하고, 이것이 성공했는지 실패했는지에 대해 두 번째 단계(S20)에서 결정한다. 그래서 두 번째 단계에서 실패로 판정된다면 바코드 인식 실패로 간주하고(S22), 성공하면 오류교정을 승인한다(S21).
이렇게 단계적인 오류처리를 가능하게 하기 위해서 데이터에 오류검출부호를 첨부하고 그 오류검출부호와 데이터에 오류교정부호를 첨부하면 된다. 그리고 1단계(S10)에서 오류교정을 시도하고 그 성공여부를 2단계(S20)에서 판단한다. 오류교정방법으로 해밍부호를 사용하고, 오류검출에 검사합이나 순환중복검사를 사용한다. 이것으로 바코드의 정보에 관한 용량과 종류, 그 정보의 부호화 방법이 결정되었다. 본 발명의 2차원 바코드가 갖추어야 할 조건들이 다음의 [표 3]과 같다.
본 발명의 바코드의 정보용량과 부호방법
조건 단위
정보용량 바이트 ≥4
정보종류 유형 아이디
부호방법
1단계: 오류정정 해밍부호
2단계: 오류판단 순환중복검사 또는 검사합
이상의 조건들을 고려하여 본 발명의 실제 바코드의 모양을 설계한다.
<1. 본 발명의 바코드의 모양>
대부분의 기존 2차원 바코드들은 공통적으로 파인더패턴과 타이밍패턴을 갖는다. 그리고 추가적으로 카메라나 다양한 원인에 따른 왜곡을 보정하기 위한 특별한 패턴을 갖기도 한다. 타이밍패턴을 바코드의 중심에 배치하면 왜곡보정을 위한 특별한 패턴의 추가적인 삽입 없이 보정에 사용 가능하다. 파인더패턴과 타이밍패턴의 역할은 다음과 같이 정의된다.
1. 파인더패턴: 인식과정에서 기계가 바코드를 발견하는데 사용하는 패턴으로, 바코드가 아닌 후보들과 비교가 되는 특징
2. 타이밍패턴: 바코드의 표현 단위인 점의 크기를 알려주는 패턴으로, 보통 검정색과 흰색 점이 번갈아 연속되어 있고 바코드의 크기에 대한 단서도 제공
본 발명의 일 실시예에 따른 바코드는 13 × 13 고정된 크기의 정사각형의 매트릭스형태를 갖는다. 매트릭스형 바코드는 정사각형의 셀들이 모여 구성된 형태로 어떠한 출력장치에서나 쉽게 다룰 수 있고, 인쇄도 용이한 장점을 갖는다. 고정된 크기로 정의하는 이유는 추가적인 처리로 인한 복잡성 증가를 없애기 위해서이다. 아이디 정보만을 표현하면 되기 때문에 일정 수준 이상의 정보용량만 갖춘다면, 더 많은 정보를 저장하기 위한 크기의 가변성을 둘 필요가 없게 된다. 정사각형인 이유는 다양한 응용에서 360도 전 방향의 자유로운 인식이 필요할 수 있기 때문에 모든 방향에서 그 형태가 비교적 일정하게 유지되어 보이도록 하기 위해서이다.
본 발명의 상기한 바코드는 기본적인 파인더패턴과 타이밍패턴 그리고 방향패턴을 갖는다. 특별히 방향패턴은 파인더패턴과 타이밍패턴을 대칭구조로 설계할 때 바코드의 방향을 판단할 수 있는 단서를 제공하기 위해 존재한다. 각각의 패턴과 코드영역, 바코드의 모양 차원에서 고려해야 할 오류처리에 대한 구체적인 내용은 이하에서 설명될 것이다.
<2. 파인더패턴(10)>
도 4에 나타난 바와 같이 본 발명의 2차원 코드(1)의 파인더패턴(10)은 닫혀있는 정사각형의 선 형태로 할 수 있다. 매트릭스형 바코드이기 때문에 실제로는 검정색 셀들의 연속으로 볼 수 있다. 그리고 그 파인더패턴의 내부 공간(11)에 여러 가지 패턴들이 배치되게 될 것이다.
파인더패턴(10) 형성에서 중요한 점은 파인더패턴(10) 주변에 하얀색 여백이 반드시 필요하다는 것이다. 이 여백의 하얀색과 파인더패턴(10)의 검정색이 큰 대비를 이루어 인식기에 의해 인식될 수 있도록 된다. 즉, 파인더패턴을 둘러싸는 하얀색 여백의 폭은 2셀의 폭이어야 한다는 QR코드에서의 정의와 같은 엄격한 한정을 불필요하며, 1셀 폭의 하얀색 여백이 파인더패턴(10)의 검정색을 둘러싸고 있으면 된다. 다만, 왜곡이 심각한 영상에서의 바코드 인식률을 높이기 위해서 2셀 폭 이상으로 할 수도 있다.
이러한 파인더패턴(10)은 비교적 패턴의 고유성이 떨어지기 때문에 인식과정에서 많은 후보들을 생성하는 단점이 있다. 하지만 영상에서 모양의 경계선을 대상으로 하는 인식과정에서 간단하고 빠르게 실행되는 알고리즘을 이용해 발견할 수 있다는 장점이 있다. 또한 오히려 이러한 단순한 패턴으로 인해 영상의 왜곡이나 오류와 상관없이 재현율을 높여주는데 도움을 줄 수 있다. 고유성이 떨어지기 때문에 발생한 많은 후보들 - 바코드가 아닌 - 은 이후 타이밍패턴과 방향패턴 검사를 거치며 1차적으로 제외되고, 최종적으로는 오류처리 과정의 2단계인 오류검출을 통해 제외되게 된다. 이러한 단계적인 후보 선택 과정을 통해 재현율과 정확률, 그리고 계산적 단순성을 갖추게 된다.
보다 자세한 파인더패턴(10)의 발견 방법에 관해서는, 인식기의 설계과정에서의 인식방법에 대해 상세히 설명한다. 이제 이 파인더패턴(10) 내부(11)에 타이밍패턴과 방향패턴이 어떻게 배치되는지 그리고 코드는 어떤 식으로 표현되는지에 대해 계속해서 설명한다.
<3. 타이밍패턴(20)>
본 발명의 타이밍패턴(20)은, 마치 점선과 같이, 검정색 영역(22)과 흰색 영역(21)이 일정한 간격을 두고 반복되는 형태로 구성할 수 있다. 그 반복의 주기가 셀의 크기를 나타내게 된다. 본 발명의 바코드는 위치보정패턴을 갖고 있지 않기 때문에, 타이밍패턴(20)이 그 역할까지 수행해야 한다. 따라서 코드의 모든 영역의 셀들과의 거리를 비교적 일정하게 해서 골고루 영향을 받을 수 있는 위치에 두는 것이 바람직하다. 또한, 2차원 매트릭스의 구조상 X축과 Y축을 따라 검정색 영역(22)과 흰색 영역(21)이 반복되는 직선의 형태가 되는 것이 바람직하다. 이러한 조건들을 만족하려면 바코드의 중심점(25)을 지나는 교차선 형태로 형성되어야 한다.
타이밍패턴(20)이 정중앙을 지나도록 구성하기 위해 본 발명의 매트릭스 크기를 13 × 13인 홀수로 결정했다. 도 5에 나타난 바와 같이, 타이밍패턴(20)을 제외한 파인더패턴과 나머지영역은 회색으로 표시했다. 검정색뿐 아니라 흰색도 타이밍패턴(20)의 구성요소이며 그 부분에 데이터나 다른 패턴이 들어갈 수 없다. 타이밍패턴(20)이 2차원 코드(1)의 중심점(25)을 지나므로 어느 한쪽 영역에 치우치지 않는다. 파인더패턴 내부의 데이터가 표현되는 코드영역의 셀들은 타이밍패턴과의 거리가 멀지 않기 때문에 위치보정패턴 없이 데이터를 읽어 들이는데 문제가 없다.
이 타이밍패턴(20)은 인식과정에서 데이터를 정확하게 읽어 들일 수 있도록 영상정보의 왜곡을 보정한다. 타이밍패턴(20)이 보정할 수 있는 대표적인 왜곡 현상으로 원근현상을 생각할 수 있다. 카메라로 바코드(1)를 기울여 촬영할 때 영상 상에 카메라로부터 가까운 부분은 더 크게 보이고 먼 부분이 더 작게 보이게 된다. 결과적으로 바코드(1)의 데이터를 표현한 셀들의 크기가 고르지 않게 된다.
도 6은 카메라 원근에 의한 왜곡현상을 보여주고 있다. (a)가 바코드의 원본 이미지이며, (b)는 그 바코드를 인쇄하여 카메라로 기울여 촬영한 영상이다. 동일한 두께의 파인더패턴을 구성하는 셀이 먼 쪽과 가까운 쪽에서 각각 3배나 차이가 나는 것을 확인할 수 있다. 이 상태의 영상을 그대로 동일한 크기의 셀로 구성된 격자로 읽어 들이면 어떻게 될지에 대해 도 7이 나타내고 있다. .
도 7에 나타난 바와 같이, 어떤 셀도 선의 간격 내 공간에 제대로 들어오지 않는다. 가장 아래쪽을 먼저 보면, 셀들이 간격보다 커서 하나의 간격을 넘어감으로써 그 위의 간격 내에까지 영향을 주고 있다. 이러한 경우 간격대로 읽어 들이면 가장 아래쪽은 정상적으로 데이터가 들어올 수 있지만, 그 위쪽 간격의 경우 아래쪽 셀의 영향으로 잘못 인식될 가능성이 생기게 된다. 가장 위쪽을 보면 간격 내에 두 개 이상의 셀들이 들어와 제대로 인식이 불가능해질 것을 예상할 수 있다. 도 7의 예는 Y축만을 고려한 것이다. X축까지 고려하면 문제는 더욱 복잡해진다. 이러한 왜곡을 그대로 둔 채 내부 패턴이나 데이터를 인식하는 것은 불가능하다.
이러한 선들의 간격을 바코드의 실제 셀 간격에 맞추어 보정하는 것이 타이밍패턴의 역할이다.
<4. 방향패턴(31~38)>
본 발명의 2차원 바코드(1)는 전체적인 모양이 정사각형으로, 지금까지 설명한 파인더패턴(10)과 타이밍패턴(20)만으로는 네 방향 어디에서 보아도 모양이 완전히 동일하여 방향을 알아낼 수가 없다. 그러면 데이터를 제대로 읽어내는 것이 불가능해진다. 따라서 본 발명에서는 추가로 방향을 결정하는 방향패턴(31~38)을 정의한다.
도 8에 도시한 바와 같이, 본 발명의 바람직한 실시예에 있어서 방향패턴(31~38)에는 총 8개의 셀이 사용될 수 있다. 바깥쪽의 네 개의 셀(31, 32, 33, 34)이 하나의 그룹을 이루고, 안쪽의 네 개의 셀(35, 36, 37, 38)이 다른 하나의 그룹을 이루어 함께 사용될 수 있으며, 각각의 세 개 셀의 색상이 서로 같고 나머지 하나의 셀의 색상만 달라서 방향을 지시하게 된다. 본 실시예의 방향패턴의 구성에 있어서, 안쪽에 구성되는 셀 그룹의 경우 세 가지 셀(36, 37, 38)의 색은 흰색이고 좌측상단에 위치한 셀(35)만 검정색으로 되어있다. 바깥쪽에 구성되는 셀 그룹의 경우 세 가지 셀(32, 33, 34)의 색은 검정색이고 역시 좌측상단에 위치한 셀(31)만 다르게 흰색으로 되어있다.
이상으로 본 발명의 기본적인 패턴들을 정의하였다. 파인더패턴과 타이밍패턴 및 방향패턴이 그것이었고, 이것들을 모두 표시한 후의 나머지 영역을 실제 데이터를 표현하는 코드영역으로 사용할 수 있다. 도 9에 나타난 바와 같이, 모든 기본 패턴들을 나타낸 후의 회색으로 표시되어 있는 부분이 데이터를 표현하는 부분으로 총 92개의 셀로 구성된다. 이것으로 기본적인 바코드의 템플릿(template)이 완성된다. 이어서 실제 데이터가 표현되는 코드영역에 대해 설명한다.
<5. 코드영역>
위에서 설명한 바와 같이, 본 발명의 바코드의 템플릿을 구성하는 기본 패턴들을 제외하고 실제 데이터를 표현하는데 사용되는 코드영역은 총 92개의 셀로 구성될 수 있다. 그대로 데이터를 표현하면 92비트를 표현할 수 있다. 이것은 11바이트 정도가 된다. 하지만 오류처리를 위한 해밍부호와 오류검출 방법을 적용하면 실제 정보를 저장할 수 있는 용량은 이것보다 줄어들게 된다.
우선 1차적으로 해밍(7, 4)부호의 코드워드가 7비트 길이이므로, 총 13개의 코드워드의 표현이 가능해진다. 13개의 코드워드를 표현하면 1개의 셀이 남게 되며, 총 52비트의 정보를 표현하는 것이 가능하다. 1개의 남는 셀은 그냥 비워둔다. 해밍(7, 4)부호로 표현된 총 91개 셀 중 최대 13개의 셀이 손상되거나 왜곡되어 오류가 발생해도 성공적으로 인식하는 것이 가능하다.
이제 2차적으로 앞서 주어진 52비트의 정보용량에 오류 검출을 위한 체크값을 위한 공간을 할당한다. 52비트로 표현할 수 있는 바이트의 수가 최대 6바이트이고 4비트가 남게 된다. 6바이트는 정보를 표현하는데 사용하고 4비트는 체크값 저장 공간으로 사용한다. 이렇게 해서 바코드의 모양에 관련한 대부분의 특성들이 결정됐다. 이제 마지막으로 오류처리를 위한 바코드 모양에서 고려해야 할 사항들을 설명한다.
<6. 오류처리>
위에서 91개 셀들 중 최대 13개의 셀의 오류를 교정하는 것이 가능하다고 했다. 하지만 경우에 따라서는 2개의 오류만으로 교정이 불가능한 상태가 될 수도 있다. 한 코드워드의 길이가 7비트이고, 각 코드워드마다 하나의 오류를 교정하는 것이 가능하다. 만약 한 코드워드 내에 2개 이상의 오류가 발생한다면 다른 코드워드들이 모두 정상이더라도 전체 인식은 실패할 수밖에 없다.
바코드의 인식과정에서 오류는 산발적인 것과 국소적인 것으로 나누어 생각해 볼 수 있다. 산발적인 오류가 임의로 나타난다면 더 이상 어떤 방법으로도 해결할 수 없다. 하지만 국소적인 오류의 경우에 대해서는 대책을 생각해 볼 수 있다. 바로 코드워드의 비트를 배치하는 방법을 달리 하여 2차원 평면상에서 국소적인 오류에 한 코드워드가 집중적으로 노출되는 확률을 줄이는 것이다. 그렇게 하기 위해 코드워드의 비트들이 서로 인접하게 배치되는 일을 줄여야 한다. 하지만 또 한편으로 배치 방법이 너무 복잡해서 인식과정에 계산의 복잡도를 증가시켜서도 안 된다.
도 10은 바코드의 코드영역에 코드워드를 어떻게 배치하는지에 대해 예시적으로 보이고 있다. 13개의 코드워드 각각의 1부터 13까지 번호로 구분한다면, 도 10에 도시되어 있는 바와 같이, 각 코드워드의 7개 비트를 각기 다른 곳에 배치할 수 있다. 특별히 1번 코드워드에 해당하는 셀들만 회색으로 표시하였다. 1번 코드워드가 표현될 셀들의 개수는 총 7개다. 해밍(7, 4)부호의 7개 비트를 순차적으로 위의 1번 셀부터 차례대로 밑의 1번 셀까지 채워 넣으면 된다. 여기서 <순차적으로>라는 표현은, <국소적으로 집중되는 오류에 강인하도록 분산 배치>한다는 의미이다. 도 10의 경우에는 13개의 코드워드 7개를 코드영역에 배치할 때 좌에서 우로 진행하는 방향으로 순서대로 배치하였지만, 다른 실시예에서는 13개의 코드워드 7개를 위에서 아래로 배치하는 것도 가능하다.
이 경우 어떤 원인에 의한 국소적인 오류가 발생해도 동시에 하나의 코드워드에 피해를 줄 확률은 줄어들게 된다. 산발적인 오류가 고르게 분포되어 나타난다면, 여기에 대해 특별한 방법은 없다. 하지만 적어도 그냥 일렬로 배치하는 것보다 성능이 더 떨어지는 일은 발생하지 않는다. 이것으로 모양 상에서 고려해야 할 오류처리까지 모두 알아보았다. 이와 같이 구성함으로써 이제 본 발명의 바코드의 설계가 완성되었다.
설계된 바코드에 실제로 정보를 수록하기 위한 절차는 다음과 같다.
우선 표현하고자 하는 48비트의 아이디 정보에 체크값을 계산하여 첨부해서 총 52비트의 데이터를 생성한다. 이 데이터를 해밍(7, 4)부호를 이용해 4비트 단위로 7비트의 코드워드를 생성한다. 이제 바코드의 템플릿의 코드영역에 좌측상단으로부터 순차적으로 채워나갈 수 있다. 이때 13개의 코드워드를 1번 코드워드의 1번째 비트, 2번 코드워드의 2번째 비트, 3번째 코드워드의 3번째 비트의 순서로 각 코드워드를 번갈아 가며 1번째 비트부터 7번째 비트까지 채워나간다. 마지막으로 13번 코드워드의 7번째 비트가 채워진다. 각 비트를 채울 때는 1을 검정색으로 0을 흰색으로 해서 셀을 표현한다.
이하에서는, 위와 같은 구성의 신규한 2차원 바코드 인쇄물을 카메라를 통해 입력받고 인식하는 과정을 상세히 설명한다.
도 12은 본 발명의 바코드 인식방법에 대한 전체 프로세스를 개괄적이며 예시적으로 나타낸다. 모바일 기기에 내장된 카메라를 통해 인쇄된 바코드를 촬영하여 얻은 그레이스케일 이미지를 입력데이터로 생성하고(S101), 이 영상 데이터의 형태의 경계선을 검출하여(S102), 1개 이상의 후보조각들을 생성하여 후보군 목록을 만든다(S103). 다음으로 후보목록에 속한 각 후보들을 추출하여(S104)에 대하여 파인더패턴의 꼭지점을 찾는다(S105).
위와 같은 과정을 통해서, 파인더패턴의 외곽선을 포함한 후보들과, 그 후보들의 꼭지점을 구한 다음에, 이 꼭지점들을 이용해 파인더패턴이 위치하는 부분의 경로를 구한다. 그리고 그 경로를 이용해 입력데이터인 그레이스케일 이미지에 파인더패턴 부분이 모두 검정색으로 되어 있는지를 검사한다(S106).
다음으로 기울어져 있는 바코드 영상에 대해 그레이스 케일 이미지의 배열을 생성하고(S107), 타이밍패턴의 정보를 이용해 왜곡된 배열의 영상정보를 보정하는 작업을 수행한다(S108). 그런 다음에, 방향패턴을 구성하는 8개의 셀을 이용하여 방향패턴이 잘못된 후보는 목록에서 제외한다(S109).
위와 같은 단계를 수행한 다음에 2차원 바코드의 정보를 실제로 읽어들여 비트열을 생성하는 일을 수행하게 된다. 즉 바코드에 표현되어 있는 13개의 해밍(7, 3)부호의 코드워드를 독출하여 그 코드워드들을 이어서 직렬화한다(S110). 그리고 이렇게 직렬화하여 얻은 비트열에 대해 오류처리를 수행하고(S111), 상기에서 설명한 바와 같은 계층적인 방법으로 오류를 검출하게 된다(S112). 다음으로, 임계값을 구하고( S113), 승인된 바코드의 아이디정보를 얻는다(S114).
위와 같은 도 12의 각 단계는 이하에서 보다 상세히 설명될 것이다.
<A. 입력데이터 생성 단계>
대부분의 모바일 기기에 내장된 카메라가 제공하는 영상은 YV12 색상공간으로 표현되어있다. YV12 색상공간으로 표현된 영상 데이터는 그대로 그 앞부분의 Y평면을 그레이스케일 이미지로 사용할 수 있다. 이 그레이스케일 이미지를 인식기에 입력데이터로 사용한다.
본 실시예에서는 도 11의 바코드를 인쇄하여 사용한다. 도 11의 2차원 바코드는 문자열 “Hello!”의 아스키코드(ASCII code)값에 체크값을 모두 0으로 해놓은 데이터에 대한 바코드이다. 이 52비트의 길이를 갖는 데이터의 16진수 표현은 0x48656C6C6F210이다.
다음으로 도 11의 바코드를 카메라로 촬영하여 얻은 640× 480해상도의 그레이스케일 이미지가 도 13이다. 본 실시예에서는 이하 인식과정의 시작인 경계검출 단계부터 모든 인식과정의 설명에서 도 13의 이미지를 사용하게 될 것이다. 이하, 경계검출과 후보조각생성, 4꼭지점찾기, 파인더패턴검사, 배열화, 왜곡보정, 방향결정, 직렬화, 오류처리까지의 모든 단계들을 설명한다.
<B. 경계검출단계>
경계검출은 영상에서 어떤 사물이나 무늬의 형태를 파악할 수 있다. 그 형태의 경계선을 검출하는 단계이며, 바코드의 파인더패턴 외곽선을 발견하는 것이 목적이다. 경계검출을 위해서는 하나의 임계값을 사용한다. 영상의 X축 방향과 Y축 방향으로 스캔(scan)을 하며 그레이스케일의 픽셀 값의 변화량을 검사해 나간다. 그러다가 그 변화량의 크기가 임계값보다 크면 경계로 판단한다. 그 경계로 판단 된 위치를 이용해 또 다른 결과 영상 영역 상에 표시 점을 남기게 된다.
두 방향으로 모든 스캔이 끝나고 나면 남겨진 결과 영상 영역에 표시 점들이 연결되어 경계선을 형성하게 된다. 그 결과가 도 14에 나타나 있다. 이 경계검출을 이용해 파인더패턴과 같이 흰색과 검정색이 대비를 이루어 그 차이 값이 큰 부분을 발견하는 단서를 생성할 수 있다.
이러한 경계검출 방법으로 위에서 설명한 방법보다 단순하게 생각할 수 있는 또 다른 방법이 영상에 대해 이진화 수행 후 그 이진이미지에서 검정색과 흰색 점이 접하는 부분을 경계로 구하는 것이다. 하지만 위에서 설명한 방법이 더 빠르고 여러 문제 속에서 파인더패턴을 더 잘 찾는다. 우선, 영상 데이터에 접근하는 횟수가 훨씬 감소하기 때문에 속도가 빨라지게 된다. 그리고 이진화 특유의 문제도 해결된다. 하나의 경계값을 이용한 이진화 방법은 이미지가 지역적으로 어둡거나 밝을 때 그 지역 내 바코드를 발견할 수 없다는 문제가 있고, 정확하고 좋은 결과를 내는 이진화 방법은 그 계산의 복잡도가 크다. 그리고 이어지는 단계에서 요구하는 데이터의 형태가 이진영상이 아닌 외곽선만을 필요로 하기 때문에 그 결과를 더 빠르고 성능 좋게 찾을 수 있는 방법을 사용하는 것이 더 좋다.
경계검출에서의 핵심은 적절한 임계값을 찾는 것이다. 임계값이 너무 커지면 바코드의 후보가 감소하여 실제 바코드를 발견하지 못할 가능성이 높아지고, 반대로 너무 작아지면 바코드가 아닌 후보들을 포함하게 되어 불필요한 처리의 증가로 인해 효율이 떨어지게 된다. 즉 임계값의 적절성이 재현율과 성능에 영향을 줄 수 있다.
본 발명에서는 적절한 임계값의 계산 방법에 ARToolKitPlus에서 사용한 방법을 응용하였다. ARToolKitPlus는 이진화를 위한 임계값 계산에 사용한 방법이지만, 특성상 유사하게 응용될 수 있다. 그것은 이전 인식과정에서 성공적으로 인식된 바코드의 영상 정보를 활용하는 것이다. 이전 그레이스케일 영상 상에 성공적으로 인식된 바코드의 영역 내 점들을 이용하는 것인데, 실제 환경 내 바코드가 영상을 통해 인식된 경우이기 때문에 그 환경 내 다양한 요인들이 반영되어 있고 연속되는 영상의 특성상 급격한 변화보다 작은 변화의 연속이 대부분이기 때문에 이전 성공이 다음 성공을 지지하는 정도가 높다.
임계값은 성공적으로 인식된 바코드의 검정색부분과 흰색부분의 경계가 이루는 차이값으로부터 계산되면 된다. 그 임계값의 목적이 바로 그 경계를 발견하려는 데 있기 때문이다. 그레이스케일 이미지 상의 바코드 영역의 모든 점들에 대해 각각의 점들과 그 점들의 주변 점들 간의 차이값들의 중간값을 임계값으로 한다. 차이값들 중 최소값은 검정색이나 흰색영역 내 같은 검정색 또는 흰색을 표현하는 점들 간의 차이 중 하나가 될 것이고, 최대값은 검정색영역과 흰색영역의 경계에 위치한 각각 검정색과 흰색을 표현한 점들 간의 차이 중 하나가 될 것이다.
그러나 이러한 임계값을 이용한 경계검출 방법은 이전 인식과정이 실패로 끝난 경우 다음 과정에도 지속적으로 영향을 준다는 점에서 문제가 있다. 이 문제를 해결하기 위해 성공적으로 인식된 바코드가 하나도 없는 경우에는 다음 과정에서 재현율을 높이는 시도가 필요하고, 그 때문에 임계값을 미리 정의해둔 한계까지 점차적으로 줄여 나간다.
이러한 과정을 거친 경계검출의 결과가 도 14에 나타나 있다. 그림에서 경계 정보는 여러 조각들로 구성되어있다. 그 조각들 중에는 바코드의 경계선도 있고 바코드 내의 내용들도 있다. 그리고 인식과정과는 상관없는 글자들의 외곽선도 포함되어있다. 이러한 후보조각들을 분리 인식하여 생성하는 후보조각생성 단계에 대해 다음 절에서 설명한다.
<C. 후보조각생성 단계>
앞선 경계검출 단계에서 얻어진 여러 경계선들을 담고 있는 이진영상은 바코드 외에 많은 무의미한 정보들을 포함하고 있다. 그리고 바코드의 파인더패턴 외곽선조차 그 상태로는 점들의 집합 이상의 의미를 갖고 있지 않다. 그러한 점들의 집합인 조각들의 의미를 파악해 나가는 첫 번째 단계로 후보 조각들의 목록을 생성한다. 여기에서 조각은 경계검출 단계에서 추출된 점 좌표들의 집합을 의미한다. 어떤 조각은 실제 파인더패턴의 외곽선이고, 많은 다른 조각들은 무의미한 조각들이다.
후보조각생성 단계에서는 우선 조각 단위로 점들을 분리해야 할 필요가 있다. 즉, 경계영상 상에 인접한 점들을 모아 집합을 만든다. 이 과정은 영상에서 임의의 한 점을 찾는 것으로부터 시작한다. 찾은 점의 위치를 집합과 스택에 넣고 영상에서 지운다. 그리고 그 위치에서 인접되어있는 점을 다시 찾아 그 점을 또 집합과 스택에 넣고 지운다. 이 과정을 다시 그 위치의 인접 점에 대해 반복한다. 두 개 이상의 점이 인접해 있을 때 그 중 단지 아무 한 점이나 선택하여 그 과정을 반복하면 된다. 그러다가 더 이상 인접점이 없다면, 스택에서 하나의 위치를 꺼내어 그 위치에 대해 반복하면 된다. 또 인접점이 없다면 스택에서 꺼내는 과정을 반복한다. 인접점도 없고 스택도 비게 되면 하나의 집합이 완성된 것이고, 이 집합이 하나의 후보조각이 될 수 있다.
후보조각은 간단히 그것의 크기를 계산해서 그 값이 정해놓은 일정값 이하이면 버린다. 왜냐하면 너무 작은 크기의 조각은 그것이 설령 바코드의 파인더패턴의 외곽선의 영상이라 하더라도 인식 가능한 정보를 모두 포함하고 있기 힘들기 때문이다. 충분히 가까이서 찍지 않았기 때문에 발생한 현상이며, 그러한 영상은 모양이 뭉개져 있어서 가치가 없다.
이 단순한 계산만으로 재현율의 손해 없이 상당히 많은 수의 후보를 효과적으로 줄일 수 있다. 본 실시예에서는 일단 그 크기를 39로 정한다. 그 크기는 바코드의 파인더패턴 크기인 13× 13크기에 3을 곱한 것으로 카메라를 통해 획득된 영상에서 흰색과 검정색이 인접해 있는 경우, 적어도 한 픽셀이 옆의 다른 색으로부터 영향을 받는다는 점을 고려한 것이다.
도 15는 가로와 세로의 길이 모두가 39 이상인 조각들을 후보조각을 생성한 결과이다. 총 2개의 조각이 후보로 생성된다. 또한 연결된 점들이 형성하는 조각은 하나의 집합 단위로 각각 저장되어 이후 단계에서 보다 효율적으로 논리적인 처리들을 수행 할 수 있게 된다. 후행하는 단계들을 거치며 실제 파인더패턴의 외곽선은 남고, 바코드의 안쪽에 남은 잘못된 후보가 후행의 단계를 거치며 목록에서 제외되게 된다. 이제 다음 단계에서 기울어진 바코드 영상을 바르게 읽어 들이기 위한 배열화 단계의 전 과정이며, 자세와 위치를 결정하는 단서가 되는 4꼭지점찾기를 수행한다.
<D. 4꼭지점 찾기 단계>
본 단계에서는 파인더패턴의 꼭지점을 찾는다. 파인더패턴이 사각형이기 때문에 4개의 꼭지점을 찾게 된다. 본 단계는 이전 단계에서 생성된 후보들에 대해 실행되기 때문에 사각형이 아닌 조각들도 대상이 되고, 이때는 그 조각의 원소점들이 이룰 수 있는 가장 큰 사각형의 꼭지점을 찾게 된다. 우선 모든 후보들을 사각형이라 가정하고, 4꼭지점을 찾은 뒤 다음 단계에서 간단한 파인더패턴검사를 통해 다시 후보를 줄이게 된다.
4개의 꼭지점은 분명히 어떤 형태의 외곽선에서 발견된다. 그렇기 때문에 이전 단계에서 경계선을 검출하고 이것을 후보로 과정을 수행한 것이다. 꼭지점을 찾는데 내부에 채워진 부분까지 전부 고려하는 것은 비효율적이다. 꼭지점 찾기는 4개 꼭지점 각 1개씩을 순차적으로 다음과 같은 방법에 의해 진행한다.
제1꼭지점 찾기: 우선 조각 내 점들 중 임의의 점 하나를 선택한다. 그리고 조각 내 모든 점들을 대상으로 그 점과의 거리를 계산하고, 그 거리가 최대가 되는 점을 제1꼭지점으로 한다.
제2꼭지점 찾기: 제1꼭지점 찾기와 유사한 방법으로 찾는데, 이번에는 제1꼭지점과의 거리를 따진다. 조각 내 모든 점들을 대상으로 제1꼭지점과의 거리를 계산하여 그 거리가 최대가 되는 점을 제2꼭지점으로 한다.
제3꼭지점 찾기: 이번에는 제1꼭지점과 제2꼭지점과의 거리를 함께 따진다. 조각 내 모든 점들을 대상으로 제1꼭지점과의 거리와 제2꼭지점과의 거리의 합이 최대가 되는 점을 제3꼭지점으로 한다.
제4꼭지점 찾기: 앞의 3개 꼭지점을 찾는데 거리를 계산한 것과 달리 제4꼭지점은 면적을 계산해야 한다. 조각 내 모든 점들을 대상으로 제1꼭지점과 제2꼭지점 그리고 제3꼭지점과 이루는 사각형의 면적이 최대가 되게 하는 점을 제4꼭지점으로 한다. 여기서 면적을 구하는데 사용되는 수식이 아래의 식 1과 같다. 식 1에서 xn은 제n 꼭지점의 X좌표를, yn은 제n 꼭지점의 Y좌표를 의미한다.
Figure pat00003
(식1)
위와 같은 방법으로 꼭지점을 찾은 결과가 도 16에 나타나 있다. 도 16에서 4개 꼭지점이 이루는 사각형을 진한 선으로 표시했고, 후보들의 모양을 확인할 수 있게 흐린 선으로 이전 단계에서 생성된 후보들을 표시했다. 파인더패턴은 그 외곽선과 거의 일치하는 사각형의 꼭지점을 찾아낸 것을 확인할 수 있다.
이렇게 찾아진 꼭지점은 마지막으로 그 4개 점의 중심점을 구하고 각 점이 그 중심점과 이루는 각을 기준으로 반시계 방향으로 정렬한다. 이 정렬에서 사용되는 각의 계산과 앞의 꼭지점찾기 과정에서 사용되는 거리 계산에서 일체의 실수 연산을 사용하지 않는다. 왜냐하면 대부분의 모바일 기기가 부동소수점처리장치(floating-point unit)를 가지고 있지 않아, 실수 연산을 느리게 수행하기 때문이다.
이렇게 찾아진 꼭지점은 정렬까지 되어있어 항상 그 위치에 규칙성을 띄게 된다. 각각의 후보조각마다 중심점에서 좌측하단에 제1꼭지점, 우측하단에 제2꼭지점, 우측상단에 제3꼭지점 그리고 마지막으로 좌측상단에 제4꼭지점이 위치하게 된다. 이제 이 꼭지점들을 이용해 다음단계에서 파인더패턴검사를 수행한다.
<E. 파인더패턴 검사 단계>
본 발명에 의해 인식되는 바코드의 파인더패턴은 외곽의 폐쇄되어있는 정사각형 틀 모양을 띄고 있다. 상기 단계들을 통해 그 파인더패턴의 외곽선을 포함한 후보들을 생성했고, 그 후보들의 꼭지점을 구했다. 이제 그 꼭지점들을 이용해 파인더패턴이 위치하는 부분의 경로를 구한다. 그리고 그 경로를 이용해 입력데이터인 그레이스케일 이미지 상에 파인더패턴 부분이 모두 검정색으로 되어있는지 검사한다.
만약 본래의 모양이 사각형이 아닌 모양이라면, 앞 단계에서 구해진 4개 꼭지점을 기준으로 안쪽을 검사했을 때 모두가 검정색으로 나타나지는 않게 될 것이다. 여기에서 검정색과 흰색을 구분하는데 임계값이 필요하다. 그 임계값보다 값이 작으면 검정색이고 그렇지 않으면 흰색으로 구분하면 된다. 이 임계값을 구하기 위해 4꼭지점을 중심으로부터 거리를 기준으로 하여
Figure pat00004
Figure pat00005
지점에 각각 안쪽의 점들과 바깥쪽의 점들을 구한다. 이 지점의 거리는 바코드의 한 폭이 13셀의 길이임을 감안하여 중간점과 파인더패턴의 외곽선이 이루는 길이가 6.5셀이 된다는 계산에 의해 얻어진 것이다.
후보가 파인더 패턴이 맞는다면 안쪽의 점들이 이루는 선은 파인더패턴 위를 지나가는 경로가 되고, 바깥쪽의 점들이 이루는 선은 여백의 위를 지나가는 경로가 된다. 여기서 파인더패턴은 검정색, 여백은 흰색이 된다. 그레이스케일 영상 상의 이 경로의 값들의 중간값을 구하여 임계값으로 사용하여 안쪽 경로의 값들이 모두 그 이하인지 여부를 검사하면 된다. 여러 가지 원인에 의한 오류를 고려하여 80%이상이 검정색일 때 그것을 바코드로 판단한다. 만약 후보가 아니라면 바깥이 검정색이고 안쪽이 하얀색일 수도 있고 그렇지 않더라도 안쪽의 파인더패턴 경로가 모두 검정색이 아닐 가능성이 크다.
도 17은 실제 파인더패턴을 검사할 꼭지점의
Figure pat00006
지점의 안쪽 경로를 그레이스케일 상에 점선으로 표시한 것이다. 눈으로 확인해도 안쪽의 후보는 경로의 많은 부분이 검정색이 아님을 쉽게 알 수 있다. 이 파인더패턴 검사에서도 걸러지지 않는 후보들은 이후의 과정을 통해 몇 회 더 걸러지며 제외된다. 최후에까지 검사를 통과하더라도 결국 체크값 검사 과정에서 걸러지게 된다. 그러나 이번 경우에는 실제 파인더패턴의 외곽선만 남게 된다. 그 결과가 도 18에 나타난 바와 같다.
임계값을 계산하거나 파인더패턴을 검사하는 과정에서 두 점이 이루는 직선의 경로를 계산하는 일이 많다. 이 역시 계산 성능을 향상하기 위해 정수 연산만을 사용할 필요가 있다. 그래서 총 3회의 정수의 곱셈연산 외에는 비교 연산과 정수의 덧셈 연산만으로 두 점간의 직선 경로를 구하는 Bresenham 알고리즘을 사용한다.
이것으로 파인더패턴검사까지 끝나며 비로소 파인더패턴의 역할이 종료되었다. 파인더패턴이 바코드를 발견해주는 목적을 제대로 수행해냈다. 이어지는 다음 단계에서 바코드의 정보 해석을 시도하기 위한 그 이후 단계들을 위한 배열화에 대해 설명한다.
<F. 배열화 단계>
본 단계에서는 영상에 기울어져 있는 바코드를 이용해 39 × 39크기의 그레이스케일 배열을 생성하는 일을 수행한다. 여기서 그레이스케일 이미지가 다시 사용되는 이유는 그레이스케일이 필요한 정보를 포함하고 있기 때문이다. 외곽선의 경계와 꼭지점은 바코드의 위치를 파악하는데 사용된 정보이며, 앞으로 코드를 결정하고 임계값을 계산하는 과정 등에서는 그레이스케일 정보가 필요하다.
본 단계에서 생성되는 배열은 이후 왜곡보정 단계에서 보정작업을 수행한 후 방향결정 단계에서 파악한 방향을 고려하여 직렬화 단계에서 직렬화 되고, 직렬화된 데이터에 대해 오류처리 단계를 거쳐 최종적으로 바코드 인식의 성공과 실패 여부를 결정한다. 성공한 바코드는 결과로 위치, 자세, 코드값을 반환한다. 또한 이 성공한 바코드로부터 다음 인식 과정에서 경계검출에 사용할 임계값을 계산한다.
바코드를 고정된 크기의 배열로 읽어 들이는 과정은 많은 정보 손실을 유발한다. 하지만 이것은 계산의 효율성을 높일 수 있는 최선의 방법이기도 하다. 바코드의 크기는 13× 13셀이므로 최소의 크기로 그것을 담을 배열을 정의한다면 13× 13 크기 배열이 될 것이다. 하지만 배열화 단계에서 실제로 사용하는 배열의 크기는 그보다 큰 39× 39크기를 갖는다. 그 이유는 바로 다음 단계에서 수행되는 왜곡보정에 대한 여지를 남겨두기 위한 것이다. 만약 바로 13× 13크기의 배열에 정보를 읽어 들여 해석을 시도한다면 앞서 바코드의 모양을 제안하는 장의 타이밍패턴 절에서 설명한 왜곡의 문제에 그대로 노출되게 될 것이다.
크기 39는 후보조각생성 단계에서 후보의 최소값으로 사용한 크기인 39와 같은 값이다. 그 이유는 그 크기의 후보가 존재할 가능성이 있으며 그때 그 이상의 크기 배열로 읽어 들이는 것이 가치가 없기 때문이다.
도 19에 4개 꼭지점을 이용해 계산한 39× 39개의 점들과, 그 점들로부터 읽어 들인 배열이 나타나있다. 4개의 꼭지점을 이용해 좌표들을 구하는 데 아래의 식 2를 응용해서 계산한다.
Figure pat00007
(식2)
이 수식을 이용하면 점
Figure pat00008
과 점
Figure pat00009
사이의 비율r 지점의 점을 구할 수 있다. 여기서 비율을 ,
Figure pat00011
,
Figure pat00012
, ... 등으로 바꾸면 13개 셀의 각 셀의 중심좌표를 구할 수 있다. 제안하는 바코드의 인식과정은 39× 39크기의 배열을 읽어 들여야 하기 때문에 비율을
Figure pat00013
,
Figure pat00014
,
Figure pat00015
, ... 의 비율을 사용한다. 이 수식을 이용해 우측상단과 좌측상단의 꼭지점 간에 이러한 39개 좌표들을 구하고, 좌측상단과 우측상단의 꼭지점 간에 이러한 39개 좌표들을 구하여 그 각각의 좌표들 쌍 39개에 대해 다시 이 수식을 적용하여 구하면 총 39× 39개의 점들의 좌표를 구할 수 있다. 이어지는 절에서 이 배열에 대한 왜곡보정을 설명한다.
<G. 왜곡보정 단계>
왜곡보정은 타이밍패턴의 정보를 이용해 왜곡된 배열의 영상정보를 보정하는 작업이다. 본 실시예에서 사용하고 있는 상기 "Hello!”바코드는 왜곡보정 없이도 이후 과정을 정상적으로 수행할 수 있을 정도로 상태가 양호하다. 하지만 카메라로 대상을 기울여 촬영해서 얻어진 도 20과 같은 영상의 경우 바로 3× 3의 균일한 크기의 구성으로 13× 13셀을 해석하는데 어려움이 있을 수 있다.
도 18에서의 경우와는 달리, 도 19의 경우 배열화 된 이미지가 약간 왼쪽과 위쪽으로 밀려 있다는 것을 확인할 수 있다. 얼핏 눈으로 보기에는 비슷해 보이지만 생각보다 왜곡은 심각하다. 이대로는 인식이 불가능할 수 있다. 이러한 밀림 현상은 국소적인 오류를 야기하는 것이 아니라, 전체적으로 영향을 주기 때문에 더욱 해결 방법이 필요하다. 더 정확하게 확인하기 위해 배열을 3× 3크기로 선을 그어 분할해 놓은 그림이 도 21에 도시되어 있는 바와 같다.
도 21에 나타난 바와 같이, 배열의 전체가 조금씩 밀려서 옆의 셀 인식 범위에 영향을 주게 된다. 왼쪽과 아래쪽의 파인더패턴은 거의 정상적인 형태로 보인다. 그리고 위쪽과 왼쪽의 파인더패턴도 1칸 정도만 밀린 것처럼 보여 의외로 문제가 심각해 보이지 않을 수 있다. 그러나 실제로 중요한 중간 부분의 왜곡은 심각하다. 중심점의 셀들과 타이밍패턴은 거의 1셀을 밀려서 인식되게 될 것이다. 도 21의 분할된 단위로 값을 단순히 평균화하고 그 평균값들을 이용해 이진화한 결과와 원래의 바코드를 비교하여 보면 쉽게 왜곡의 심각성을 이해할 수 있다.
도 22에 나타난 바와 같이, 값을 평균화한 이미지가 상당히 혼란스러워 보인다. 이것을 이진화 한 영상이 그 오른쪽에 있고, 원본 바코드가 다시 그 오른쪽에 비교를 위해 나타나 있다. 원본 바코드와 이진화한 배열을 비교해보면 그 차이가 69개 셀에서 나타난다. 파인더패턴을 제외한 셀의 개수가 총 121개이므로 57%의 오류가 발생한 것이다. 뿐만 아니라 중간의 방향패턴인식도 불가능하다. 다행히 바깥쪽의 방향패턴은 인식이 가능하지만 중간의 방향패턴과 타이밍패턴은 흔적을 찾을 수가 없다. 사실 평균화된 배열에서만 보면 바깥쪽의 방향패턴 또한 완전히 신뢰할 수 있는 정도의 차이로 판단되는 것이 아님을 알 수 있다. 방향의 인식이 실패할 경우 문제는 더욱 심각해진다. 직렬화 과정에서 데이터를 완전히 다른 순서로 읽어 들이기 때문에 그 경우 인식은 여지없이 실패하게 된다.
이러한 문제를 해결하기 위해 바코드의 설계에서 타이밍패턴을 정의하였고, 전 단계에서는 13× 13셀 보다 큰 39× 39크기의 배열로 영상을 읽어 들여 이번 단계에서의 보정의 여지를 남겨둔다. 이제 실제로 그 패턴과 배열을 이용해 왜곡의 보정을 시도한다.
왜곡보정에 다양한 방법을 고려할 수 있겠지만, 복잡한 방법으로 계산량을 늘리는 것보다 단순하고 효과적인 방법을 제안한다. 본 발명이 제안하는 방법은 몇 가지 사전에 정의된 격자를 사용하는 방법이다. 우선 기본적으로 왜곡이 없는 정상적인 바코드를 읽어 들일 수 있는 3× 3크기의 균일한 단위로 구성된 13× 13크기의 격자를 생각할 수 있다. 그리고 어느 한쪽으로 기울어져 촬영된 영상을 인식하는데 사용할 비대칭형 격자가 필요하다. 제안하는 방법에서는 복잡도롤 감소시키며 효율적인 처리를 위해 단순히 한 가지의 비대칭 비율과 대칭 비율을 서로 조합해서 총 9가지의 격자를 생성한다. 정확하게 일치하지 않는 경우가 다수 존재하겠지만, 어느 정도의 불일치는 정상인식 될 가능성이 높고, 그렇지 않더라도 적은양의 오류는 해밍부호에 의해 정정될 수도 있다.
도 23의 비율은 왼쪽이 좁고 오른쪽이 넓은 것을 확인할 수 있다. 카메라가 기울여져 가까이 찍힌 쪽에 오른쪽의 비율을 적용하면 제대로 읽어 들이는데 도움이 될 것이다. 9가지의 격자는 세로에 왼쪽이 좁은 비율과 오른쪽이 좁은 비율, 대칭 비율의 3가지를 사용하고, 가로에 위가 좁은 비율과 아래가 좁은 비율, 대칭 비율의 3가지를 사용하여 총 3× 3가지로 구성된다. 9가지 격자의 실제 구성이 아래의 도 24와 같다.
중간의 격자를 제외하고는 모든 격자가 한쪽이 좁다. 도 23에 파인더패턴의 위치를 표시해둔다. 이것을 보면 각각의 격자가 어느 쪽으로 좁게 기울어져있는지를 알아볼 수 있다. 도 19에서 도시된 배열은 중간의 격자를 사용하고 도 19의 배열은 좌측상단이 좁은 격자를 사용하면 가장 잘 보정된 결과를 보이게 될 것이다. 잘 보정되는지의 여부는 격자를 적용한 후 타이밍패턴이 제대로 일치하는지 여부를 따져 판단하면 된다. 9가지 격자를 순서대로 적용해가며 가장 잘 일치하는 격자를 찾는다.
각 격자의 배열과 일치하는 정도는 각 격자의 타이밍패턴 기대 부분의 기대값과 실제 배열의 값과의 차이들의 총합으로 따진다. 이 총합이 작을수록 일치하는 정도는 큰 것으로 판단한다.
도 25의 왜곡보정을 하기 위한 격자가 왜곡된 배열에 정확하게 일치하지는 않지만, 셀의 값을 판단하여 읽어 들이는 데는 문제가 없을 정도가 된다. 이제 방향도 제대로 결정할 수 있으며 이후 직렬화 단계를 수행할 수 있게 된다.
<H. 방향결정 단계>
본 단계에서부터는, 다시 처음에 사용했던 왜곡이 심하지 않았던 영상으로부터 얻어진 배열로 진행한다. 도 26이 그것이다. 사실 이 영상이 이전 단계에서 다룬 왜곡이 심했던 영상의 왜곡보정 후 결과보다 격자의 일치도는 더 낮다. 하지만 거기에서 설명한 것과 같이, 어느 정도 수준의 불일치는 문제가 되지 않는다. 방향을 결정하는 방향패턴을 구성하는 셀의 위치는 아래의 도 27에 나타난 바와 같다.
설명의 편의를 위해 방향패턴을 구성하는 8개 셀 각각에 번호를 부여한다. 방향을 결정하는 일은 아주 간단하게 행해질 수 있다. 그것은 1, 2, 3, 4번 셀 중에 가장 값이 작은, 즉 가장 어두운 값을 찾고, 5, 6, 7, 8번 위치의 셀 중 가장 밝은 값을 찾으면 된다. 각각 바깥쪽 4개의 방향패턴을 구성하는 셀들 중 가장 어두운 점과 안쪽의 가장 밝은 점이 바코드의 좌측 상단을 나타낸다. 이 과정에서 만약 두 방향이 다르게 나타난다면 그 후보는 목록에서 제외된다. “Hello!”바코드의 경우는 인식된 방향이 배열의 방향과 일치하게 되어 별도의 방향에 관한 처리 없이 다음 과정을 진행하게 된다. 만약 그렇지 않은 경우 방향의 정보를 다음 단계로 전달하여 다음 단계에서 직렬화를 진행할 때 시작점과 직렬화 방향을 조정한다.
<I. 직렬화 단계>
이제 2차원 바코드의 정보를 실제로 읽어 들여 비트열을 생성하는 일을 수행하는 단계에 왔다. 본 단계에서는 바코드에 표현되어있는 13개의 해밍(7, 3)부호의 코드워드를 읽어 내고 그 코드워드들을 이어 직렬화 한다. 이 직렬화 된 비트열은 이어지는 단계들을 통해 오류처리에 관한 방법들을 적용하여 오류를 정정하고 검사하는 과정을 거쳐 최종적인 코드를 얻어내게 된다. 코드워드는 순차적으로 배치되지 않고 번갈아 가며 순환적으로 배치되어 있다. 그렇기 때문에 하나의 코드워드를 읽기 위해서는 어떤 위치에서 순차적인 접근을 통해 비트열을 생성하는 것이 아니고 일정한 간격을 두고 읽어낼 필요가 있다. 아니면 순차적으로 접근하며 표현된 셀을 읽어내되 그 셀의 정보는 13개의 코드워드를 저장하는 큐에 순환적으로 넣어 생성하는 것도 방법일 수 있다.
본 발명이 제안하는 방법에서는 두 가지 중 후자를 택한다. 일단 이 방법으로 코드워드를 생성하기 이전에 배열에 대한 이진화를 수행한다. 물론 실제 구현에서는 이진화의 결과를 따로 저장할 필요가 없다. 단지 순차적으로 배열의 점들을 앞선 왜곡보정 단계에서 결정한 격자의 단위 별로 접근해가며 그 격자의 단위 별로 이진화하고 그 결과를 순차적으로 13개의 코드워드에 번갈아가며 저장하면 되기 때문이다.
우선 이진화의 결과가 도 28과 같고 각각의 단위별 이진화 결과가 저장되어야 할 코드워드 큐의 번호가 표시되어 있다.
또한, 방향이 올바른 바코드이기 때문에 우측 상단에서부터 좌측으로 읽어나가고 다 읽어지면 아래로 내려가서 과정을 반복한다. 만약 방향이 다르다면 시작 위치와 읽어 나가는 방향이 달라진다. 간단하게 예를 들어 만약 바코드가 90도 시계방향으로 회전되어 있는 상태여서 방향 패턴이 바코드의 우측상단을 가리키고 있다면, 시작점은 우측상단의 도 28 상에서 5번 점이 되며, 그 밑 방향으로 2, 12, 7, ... 이라고 표시되어 있는 단위들을 순차적으로 읽어나가게 된다. 물론 그 줄을 다 읽고 나면 왼쪽으로 한칸 이동하여 계속 진행하게 된다.
실제 직렬화된 결과를 저장한 13개의 코드워드 큐의 상태가 도 29와 같다. 그리고 이 코드워드를 순서대로 이어 붙이면 오류정정 부호를 포함하는 비트열이 생성된다. 그 비트열의 값을 이용해 다음 단계에서 오류처리를 수행한다.
<J. 오류처리 단계>
이전 단계에서 얻어진 코드워드들을 직렬화해서 비트열 1001100 1110000 1100110 0100101 1100110 0111100 1100110 0111100 1100110 1111111 0101010 1101001 0000000를 얻고, 여기에 대한 오류처리를 수행한다. 오류처리의 첫 단계는 해밍부호를 이용한 교정의 시도이다. 다행히 예제의 코드는 오류를 포함하고 있지 않지만, 다양한 원인에 의해 오류가 포함될 수 있고 이러한 오류가 교정되는 것이 첫 단계에서 수행되어야할 일이다. 오류의 처리는 본래 해밍(7, 4)부호의 정의 상에 패리티비트들을 조사하고 그 결과로 오류 위치를 찾아내는 계산을 필요로 하지만 좀 더 효율적인 처리를 위해 변환테이블을 활용한다.
변환테이블 방법은 코드워드 표현과 원본 코드와의 관계를 정의한 테이블을 사용한다. 이 테이블을 사용해 코드워드 표현이 원래 어떤 코드를 표현한 것인지를 즉시 알아내어 복잡한 계산과정 없이 부호를 해석할 수 있다. 또한 교정이 가능한 해밍거리 1의 모든 코드워드들에 대해서도 코드와 다대일 관계로 정의하여 일관성 있고 빠르게 처리되도록 한다. 코드워드의 길이가 7밖에 되지 않기 때문에 테이블의 관계의 수는 총 27인 128가지 밖에 되지 않는다.
결과적으로 테이블을 이용한 변환을 통해 비트열 0100 1000 0110 0101 0110 1100 0110 1100 0110 1111 0010 0001 0000을 얻게 된다. 이것은 16진수 표기로 0x48656C6C6F210이며, 정확하게 처음에 바코드를 생성할 때 표현했던 메시지 “Hello!”의 아스키코드값 들을 연속시켜 놓은 것과 같다. 여기에 추가로 오류의 검사에 검사합이나 순환반복검사를 실시하여 그 오류검출 여부에 따라 최종적으로 후보를 승인하거나 폐기한다.
이제 승인된 바코드를 이용해 인식의 첫 번째 단계인 경계검출에서 사용할 임계값을 계산한다. 이 임계값은 다음 인식 과정에서 사용된다. 이 임계값의 계산 방법을 이어지는 절에서 설명한다.
<K. 임계값 계산 단계>
임계값은 그레이스케일 영상 입력데이터에 대한 인식과정의 첫 번째 단계인 경계검출 시에 인접한 그레이스케일 점 간 그 값 크기의 일정 이상 차이를 검사하는데 사용되는 값이다. 이 값보다 크면 경계를 형성하는 점으로 판정되고, 그렇지 않으면 경계가 아닌 보통의 면을 이루는 점으로 판정된다. 이 경계로부터 후보가 생성되고 모든 인식 과정이 진행되기 때문에 적절한 임계값의 크기는 인식 성능과 재현율, 정확도에 영향을 주는 상당히 중요한 요인이다. 임계값이 너무 크면 실제 바코드의 파인더패턴 외곽선을 놓칠 수 있고, 임계값이 너무 작으면 바코드의 파인더패턴 외에 잘못된 후보들을 과잉생산할 수 있다.
과정이 반복되는 과정에 환경의 변화는 미묘하고 연속적으로 일어나게 될 것이다. 그렇기 때문에 이전 과정에서 구한 임계값을 다음 과정에서 사용하는 것은 복잡한 환경 요건들을 간단하게 염두에 둘 수 있는 좋은 방법이다. 하지만 약간씩의 변화는 분명 존재하는 것이기 때문에 약간의 여유를 두어 계산해야만 한다.
임계값은 그 목적상 파인더패턴의 외곽선의 경계선을 추출할 수 있어야 한다. 그래서 임계값은 바코드의 흰색영역과 흰색영역의 경계부분의 차이 이하가 되어야 한다. 그리고 되도록이면 모든 경계선을 추출할 수 있는 값 중에서는 가장 큰 값을 사용한다. 즉 경계를 이루는 차이값중 최소값을 사용하면 된다. 여기에 다음 과정에서 약간의 변화 가능성을 고려한 여유를 두어 조금 더 작게 설정한다.
임계값을 구하기 위해 우선 바코드의 그레이스케일 배열을 이용해서 검정색과 흰색으로 이진화를 시도하고 그 이진화 된 결과에서 흰색으로 판단된 영역의 그레이스케일 평균값과 검정색으로 판단된 영역의 그레이스케일 평균값을 구한다. 그리고 그 각각의 값의 차이를 구하고 그 차이의 3/4크기에 해당하는 값을 임계값으로 한다.
지금까지 본 발명의 인식기의 설계를 통해 제안한 바코드의 인식 과정을 단계별로 살펴보았다. 그레이스케일 영상을 입력받는 것으로부터 시작하여 후보를 생성하고 각 후보에 대한 여러 검사들을 거치며 마지막에 오류처리까지 수행하여 바코드에 표현되어 있던 값과 바코드의 위치나 방향등을 인식하게 되었다. 4꼭지점의 정보와 방향결정 단계에서 얻어진 방향정보를 이용해 바코드의 정확한 위치와 방향, 자세 등을 지시하게 되며, 오류처리를 거쳐 최종의 오류검사 단계에서까지 승인된 코드로 바코드의 아이디정보를 얻는다. 이 정보들을 응용시스템에 전달하면 응용시스템이 이 정보들을 사용하게 된다.
한편, 본 발명의 보호범위가 이상에서 명시적으로 설명한 실시예에 의해 제한되는 것은 아니다. 또한, 본 발명이 속하는 기술분야에서 자명한 변경이나 치환으로 말미암아 본 발명의 보호범위가 제한될 수도 없음을 첨언한다.

Claims (7)

  1. 사각형태의 격자의 셀들로 이루어지는 매트릭스 바코드를 인식하는 방법으로서:
    모바일 기기의 바코드 인식 디바이스가 상기 매트릭스 바코드를 내장된 카메라로 촬영하였을 때 발생한 오류를 교정하는 제1단계; 및
    상기 제1단계를 통해 얻은 매트릭스 바코드의 교정된 이미지에 대해 오류를 검출하여, 오류가 검출되지 않은 경우에 한하여 상기 제1단계의 오류 교정을 승인하는 단계;를 포함하는,
    2차원 매트릭스 바코드의 인식 방법.
  2. 제1항에 있어서,
    상기 매트릭스 바코드는,
    정사각형의 선 형태로 표현되는 파인더패턴;
    상기 파인더패턴의 내부에 위치하며, 검정색 영역과 흰색 영역이 일정한 간격을 두고 반복되는 형태로 이루어지는 타이밍패턴;
    상기 바코드의 방향을 결정하는 방향패턴; 및
    상기 패턴들을 제외한 셀에 데이터를 저장하는 코드 영역이 형성되며, 상기 패턴들을 이용하여 상기 코드 영역에 저장된 데이터를 독출하는 것인, 2차원 매트릭스 바코드의 인식 방법.
  3. 정사각형의 선 형태로 표현되는 파인더패턴과, 상기 파인더패턴의 내부에 위치하며, 검정색 영역과 흰색 영역이 일정한 간격을 두고 반복되는 형태로 이루어지는 타이밍패턴과, 상기 바코드의 방향을 결정하는 방향패턴과, 상기 패턴들을 제외한 셀에 데이터를 저장하는 코드 영역을 갖는, 사각형태의 격자의 셀들로 이루어지는 매트릭스 바코드를 모바일 기기가 내장된 카메라를 통해 촬영하여 인식하는 방법으로서:
    (1) 상기 매트릭스 바코드의 그레이스케일 이미지를 생성하는 단계;
    (2) 상기 이미지의 경계를 검출하는 단계;
    (3) 상기 (2) 단계의 결과로 후보 목록을 생성하는 단계; 및
    (4) 상기 후보 목록에 생성된 각각의 후보에 대하여 오류 교정을 수행하는 단계;
    를 포함하는 것을 특징으로 하는, 2차원 매트릭스 바코드의 인식 방법.
  4. 제3항에 있어서,
    상기 (4) 단계는,
    상기 후보의 파인더패턴의 4꼭지점들을 찾는 단계; 및
    상기 4꼭지점들을 이용해 상기 파인더패턴이 위치하는 부분의 경로를 구하는 단계;를 포함하는, 2차원 매트릭스 바코드의 인식 방법.
  5. 제4항에 있어서,
    기울어져 있는 바코드 영상에 대해 그레이스 케일 이미지의 배열을 생성하는 단계; 및
    상기 타이밍패턴의 정보를 이용해 왜곡된 배열의 영상정보를 보정하는 단계;를 더 포함하는, 2차원 매트릭스 바코드의 인식 방법.
  6. 제3항에 있어서,
    상기 방향패턴을 이용하여 방향패턴이 잘못된 후보는 목록에서 제외하는 단계를 더 포함하는, 2차원 매트릭스 바코드의 인식 방법.
  7. 제3항에 있어서,
    상기 코드 영역에 기록된 코드워드를 독출하여 직렬화하는 단계;를 더 포함하고,
    상기 (4) 단계는, 상기 직렬화된 비트열에 대해 오류처리를 수행하는 단계를 포함하는, 2차원 매트릭스 바코드의 인식 방법.
KR1020100063984A 2010-07-02 2010-07-02 2차원 바코드 인식방법 Active KR101109510B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020100063984A KR101109510B1 (ko) 2010-07-02 2010-07-02 2차원 바코드 인식방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100063984A KR101109510B1 (ko) 2010-07-02 2010-07-02 2차원 바코드 인식방법

Publications (2)

Publication Number Publication Date
KR20120003231A true KR20120003231A (ko) 2012-01-10
KR101109510B1 KR101109510B1 (ko) 2012-01-31

Family

ID=45610295

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100063984A Active KR101109510B1 (ko) 2010-07-02 2010-07-02 2차원 바코드 인식방법

Country Status (1)

Country Link
KR (1) KR101109510B1 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150040596A (ko) * 2013-10-07 2015-04-15 삼성전자주식회사 다수의 결제 아이템에 대한 결제 화면을 표시하는 전자 장치 및 그 방법
KR20210090438A (ko) * 2020-01-10 2021-07-20 (주)얼라이브엔터테인먼트 코드 추출을 통한 영상 콘텐츠 오버래핑 시스템
CN116362274A (zh) * 2023-05-30 2023-06-30 深圳市华众自动化工程有限公司 一种高速的条码阅读器
CN117273044A (zh) * 2023-10-27 2023-12-22 广州通赢科技有限公司 一种点阵图、点阵图构建方法及识别点阵图的方法
US12131220B2 (en) 2022-10-26 2024-10-29 Virnect Co., Ltd. Method for recognizing 2D code information

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017082607A1 (en) 2015-11-09 2017-05-18 Samsung Electronics Co., Ltd. Electronic device and operating method of the same

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002157549A (ja) 2000-11-22 2002-05-31 Seiko Epson Corp 二次元コード読み取り方法、情報記録媒体及び二次元コード読み取り装置
DE60118051T2 (de) * 2000-04-06 2006-08-31 Seiko Epson Corp. Verfahren und Vorrichtung zum Lesen von einem zwei-dimensionalen Strichkode und Datenspeichermedium
KR101052403B1 (ko) * 2004-03-15 2011-07-28 셴젠 시스칸 테크놀러지 코오퍼레이션 리미티드 2차원 바코드 및 그 코딩/디코딩 방법
JP4970385B2 (ja) 2008-08-12 2012-07-04 日本電信電話株式会社 2次元コード読取装置とそのプログラム

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150040596A (ko) * 2013-10-07 2015-04-15 삼성전자주식회사 다수의 결제 아이템에 대한 결제 화면을 표시하는 전자 장치 및 그 방법
KR20210090438A (ko) * 2020-01-10 2021-07-20 (주)얼라이브엔터테인먼트 코드 추출을 통한 영상 콘텐츠 오버래핑 시스템
US12131220B2 (en) 2022-10-26 2024-10-29 Virnect Co., Ltd. Method for recognizing 2D code information
CN116362274A (zh) * 2023-05-30 2023-06-30 深圳市华众自动化工程有限公司 一种高速的条码阅读器
CN116362274B (zh) * 2023-05-30 2023-08-25 深圳市华众自动化工程有限公司 一种高速的条码阅读器
CN117273044A (zh) * 2023-10-27 2023-12-22 广州通赢科技有限公司 一种点阵图、点阵图构建方法及识别点阵图的方法
CN117273044B (zh) * 2023-10-27 2024-03-29 广州通赢科技有限公司 一种点阵图构建方法及识别点阵图的方法

Also Published As

Publication number Publication date
KR101109510B1 (ko) 2012-01-31

Similar Documents

Publication Publication Date Title
KR101109510B1 (ko) 2차원 바코드 인식방법
EP2677471B1 (en) Two-dimensional code having rectangular region provided with specific patterns to specify cell positions and distinction from background
US7950589B2 (en) Program, information storage medium, two-dimensional code generation system, image generation system and printed material
JP5003225B2 (ja) 符号処理装置
JP6623465B2 (ja) ドットパターン
JP4410231B2 (ja) イメージコードの生成装置及びその方法とイメージコードのデコーディング装置及びその方法
US20110240749A1 (en) HD Barcode
JP2013030184A (ja) 二次元コード、二次元コード生成方法、二次元コードを表示させるコンピュータ読み取り可能なプログラム、二次元コードを利用した認証方法、及び二次元コードを利用した情報提供方法
SG175103A1 (en) Two-dimensional array code
WO2018115542A1 (es) Método de detección y reconocimiento de marcadores visuales de largo alcance y alta densidad
KR101109509B1 (ko) 모바일 기기용 2차원 바코드
US12223377B2 (en) Methods for constructing, generating, and reading dot-matrix code, dot-matrix code generating and reading terminals, and dot-matrix code system
ES2808953T3 (es) Procedimiento y aparato de identificación de código de barras
KR20050119807A (ko) 로고가 삽입된 패턴코드 및 그의 인코딩 및 그의 디코딩방법
Dean et al. Quick layered response (qlr) codes
CN112183695A (zh) 编码方法、编码图形、编码图形读取方法和拍摄装置
KR20030028777A (ko) 씨알에스 코드 및 이를 생성하고 해석하는 방법
CN111476334A (zh) 一种防伪图像标识及其防伪的方法

Legal Events

Date Code Title Description
A201 Request for examination
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 20100702

PA0201 Request for examination
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20110816

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20111118

PG1501 Laying open of application
GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20120118

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20120118

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
FPAY Annual fee payment

Payment date: 20150119

Year of fee payment: 4

PR1001 Payment of annual fee

Payment date: 20150119

Start annual number: 4

End annual number: 4

FPAY Annual fee payment

Payment date: 20160225

Year of fee payment: 5

PR1001 Payment of annual fee

Payment date: 20160225

Start annual number: 5

End annual number: 5

FPAY Annual fee payment

Payment date: 20170107

Year of fee payment: 6

PR1001 Payment of annual fee

Payment date: 20170107

Start annual number: 6

End annual number: 6

FPAY Annual fee payment

Payment date: 20171122

Year of fee payment: 7

PR1001 Payment of annual fee

Payment date: 20171122

Start annual number: 7

End annual number: 7

FPAY Annual fee payment

Payment date: 20190115

Year of fee payment: 8

PR1001 Payment of annual fee

Payment date: 20190115

Start annual number: 8

End annual number: 8

FPAY Annual fee payment

Payment date: 20200102

Year of fee payment: 9

PR1001 Payment of annual fee

Payment date: 20200102

Start annual number: 9

End annual number: 9

PR1001 Payment of annual fee

Payment date: 20210104

Start annual number: 10

End annual number: 10