以下、図面について、本発明の一実施の形態を詳述する。
(1)本発明の原理
(1−1)IDカメラの概念
本発明におけるID認識システムのシステム構成を説明する前に、まずIDカメラの概念について説明する。
図1に示すように、ID認識システム1においては、所定の点滅パターンで光を発信する光ビーコン2と、当該光ビーコン2から発信される光の点滅パターンを撮像するIDカメラ3とによって構成されており、当該IDカメラ3のイメージセンサ(図示せず)で光ビーコン2から発信される光の点滅パターンを撮像し、その撮像結果に基づいて当該光ビーコン2のID及び当該光ビーコン2の画面上での位置を検出するようになされている。
なおID認識システム1では、図示していないが複数の光ビーコン2が任意の位置に配置されている場合、それらについてもIDカメラ3で撮像することが可能である。
このようなID認識システム1では、IDカメラ3におけるイメージセンサの各画素毎に光ビーコン2からの時系列の光の点滅パターンを受光してデコードし、当該画素毎に受信したIDを求める。
そしてIDカメラ3において、光の点滅パターンを複数画素で受信した場合には、それは同じ光源(光ビーコン2)であるものとみなし、当該複数画素の重心位置を求め、その重心位置を、そのIDを発信する光ビーコン2の画面上での位置(座標)として検出する。
またIDカメラ3では、イメージセンサの少なくとも1画素で光の点滅パターンを観測できればIDの検出が可能であり、それぞれ異なるIDを発信する複数の光ビーコン2についても、当該複数の光ビーコン2のID及び画面上での位置を同時に認識することが可能となる。
なおID認識システム1では、IDカメラ3が光の点滅パターンを受光するものとしてイメージセンサが用いられているので、同時に映像を取得することも可能である。
(1−2)変調方式の選定
このようなID認識システム1で用いられる変調方式としては、マンチェスタ符号化が採用されており、その理由について以下説明する。
現在、LED(Light Emitting Diode)等の高速に点滅可能な光源から発する光の点滅パターンに送信データをのせ、受光部を有する電子機器との間でデータ通信を行うことはリモートコントローラやIrDA(Infrared Data Association)等で行われている。
IDカメラ3では、2次元アレイの光電変換素子をイメージセンサとして用いることにより、光ビーコン2とのデータ通信を実現したり、当該光ビーコン2に対する画面上での位置を特定することが可能となる。
しかしながら、IDカメラ3と光ビーコン2との間の通信速度を上げるために当該IDカメラ3のイメージセンサにおけるサンプリングレートを上げると、IrDAのように単一の光電変換素子だけで通信していた場合に比べて受光部の信号を後段に読み出すときのデータ転送の帯域幅の増加率が大きくなるため、サンプリングレート(2次元アレイなのでフレームレート)を上げることは困難である。
そこでIDカメラ3のデータ通信方式としては、できるだけ低い点滅周波数で多くのデータを転送することが可能な符号化方式が求められる。一般に用いられるディジタル変調方式のASK(Amplitude Shift Keying)、FSK(Frequency Shift Keying)、PSK(Phase Shift Keying)等は、搬送波周波数が十分に高くとれる場合には有効であるが、IDカメラ3においてはさらに高効率なディジタル変調方式が有利である。
一般的に点滅パターンのONを「1」、OFFを「0」とするのが最も効率的ではあるが、1ビットでは安定したデータ転送を行うためのエラー検出が困難であることを考えると、当該1ビットのデータを2ビットで表すマンチェスタ符号化方式が安定かつ高効率であると考えられる。
従ってIDカメラ3では、マンチェスタ符号化方式を用いて例えばデータ「0」を「10」、データ「1」を「01」として表現する。ここで「1」を光源ON、「0」を光源OFFと考えると、データ送信区間は必ず1度は点滅することになり、光源が長くOFFになったり、長くONになったりしないので、環境光との判別も比較的容易となり、安定したデータ通信が可能となる。
(1−3)光の変化の検出方法
次に、IDカメラ3のイメージセンサで受光した光の検出方法について説明する。最も単純なのは、受光量をある決められた閾値と比較することで2値化し、受光量を「1」、「0」のディジタル信号に変換する方法である。
この方法は、最もシンプルで実装も容易であるが周囲の明るさが変化した場合、固定された閾値と比較して2値化する方法では安定したデータ伝送は望めない。本実施の形態では、光の変化を検出するのに、受光量を所定のレートでサンプリングして、時間方向に連続するサンプリング区間の受光量の比較を行うことで光の変化を検出する方法を用いる。
具体的には、時間の経過に従って増加するサンプリング番号をn、各サンプリング区間での受光量をf(n)とすると、光の変化量Yは、次式
で表され、変化量Y>0のときに光が暗→明になったこと、変化量Y<0のときに光が明→暗になったことを検出したことになる。
上述の(1)式を2フレーム間差分と定義し、さらに拡張してMフレーム間差分を定義する。ここでMは2以上の偶数である。例えばM=2の場合の光の変化量Yは、(1)式で表され、M=4の場合の光の変化量Yは、次式
で表され、M=6の場合の光の変化量Yは、次式
で表される。
すなわちnフレーム目のMフレーム間差分Y(M,n)は、次式
で定義される。
この場合Mの値が大きいほど、光の変化量が大きくなり検出感度は高くなる。ここで、光の点滅周波数を一定とした場合に、Mの値が大きくなると受光側で単位時間当たりに記憶する撮像フレーム数すなわちサンプリング周波数も大きくしなければならない。逆に言えば、受光側でサンプリング周波数を固定したとすると、光の点滅周波数を落とさなければMの値に応じて設定された撮像フレーム数だけ記憶することができず、結果としてデータ転送効率が悪くなるといったデメリットもある。
(1−4)光源の点滅周波数とフレームレートとの関係の算出
ところで、IDカメラ3において安定して光の変化を検出するためにはイメージセンサの撮像フレームにおけるフレームレートを光源である光ビーコン2の光の点滅周波数に対してN倍以上の関係にしなければならない。ここでNは、光の変化の検出方法によって決まる値である。
例えば、2フレーム間差分ではN>2であり、4フレーム間差分ではN>3である。すなわちMフレーム間差分(ここではMは2以上の偶数)の場合、次式
となる。ここでNは小さい値の方が同じフレームレートでもデータ転送レートが大きく出来ることから有利であるので、(5)式に従ってシステムを構築するのが最適である。
本実施の形態では、M=2すなわち2フレーム間差分を用いて説明する。しかしながら本発明では光の変化を検出するに当たってフレーム間差分以外の方式を用いても同様の効果が得られるので、特にこの光の変化を検出する方法としてはフレーム間差分に限られるものではない。
(1−5)光の立上り検出と光の立下り検出
IDカメラ3では、Mフレーム間差分を用いることにより光の立上り変化と光の立下り変化を検出することが可能となり、例えば光の立上り変化の検出を行うには、新しい撮像フレームの輝度から古い撮像フレームの輝度を引くといった正のMフレーム間差分YP(M,n)を用いることができる。
ここで、当該正のMフレーム間差分YP(M,n)はこれまでのMフレーム間差分Y(M,n)と同様に、次式
で定義される。ここでnは撮像フレーム番号(サンプリング番号)を表す。
またIDカメラ3において、光の立下り変化の検出を行うには、古い撮像フレームの輝度から新しい撮像フレームの輝度を引くといった負のMフレーム間差分を用いることができ、当該負のMフレーム間差分は、次式
で定義される。
IDカメラ3では、上述した正のMフレーム間差分YP(M,n)、負のMフレーム間差分YM(M,n)を用いて光の立上り変化と立下り変化を求めるために、ある閾値を用いて2値化した値をCP(n)及びCM(n)と定義する。
すなわち閾値REF(+)を用いると、YP(M,n) >REF(+)のときCP(n)=1、YP(M,n)≦REF(+)のときCP(n)=0のようにCP(n)を定義することができる。また閾値REF(-)を用いると、YM(M,n) >REF(-)のときCM(n)=1、YM(M,n)≦REF(-)のときCM(n)=0のようにCM(n)を定義することができる。
ここで閾値REF(+)及び閾値REF(-)は、それぞれ光の立上り変化と立下りの変化の大きさに対する閾値であり、光の変化量が当該閾値REF(+)及び閾値REF(-)を越えたときにCP(n)及びCM(n)は「1」になる。
(1−6)符号化データ
本実施の形態におけるID認識システム1では、8ビットからなるデータを光ビーコン2のIDとして定義し、当該光ビーコン2の点滅パターンに符号化して情報をのせるようになされている。
すなわちID認識システム1では、8ビットのデータを用いて256通りのIDを定義することができるので、256個の光ビーコン2を同時に認識することが可能である。もちろんIDのビット長は、IDカメラ3のイメージセンサのフレームレートや光ビーコン2のLEDの点滅周波数によって決まり、原理上さらに長いビット長にすることも可能である。
図2に示すように光ビーコン2の送信データとしては、例えばH0、H1、H2及びH3からなるスタートコードと、「01000100」でなる8ビットのIDから構成され、当該IDは各ビットがマンチェスタ符号で符号化される。
すなわち8ビットのIDは、データが「1」のとき「01」の2ビットが割り当てられ、データが「0」のとき「10」の2ビットが割り当てられる。従って8ビットのIDは、16ビットのデータ列に変換される。
またスタートコードは、(1)マンチェスタ符号には決して現れないビットパターンであること(例えば「1」が3回続く符号を含めたこと)、(2)デューティ比が50%で光のちらつきがないようにすることの2点を考慮し、「H0−H1−H2−H3」を「01−11−00−10」としている。もちろんスタートコードとしてはこれに限るものではない。
ここで上述の(1)の要件は、スタートコードとIDとを区別するために必要な条件であり、(2)の要件はIDカメラ3が高速で移動する光ビーコン2を追尾すなわちトラッキングする用途には必ずしも必要ではないが、照明光を用いた通信といった用途の場合にはちらつきがないので有効である。
このように光ビーコン2では、8ビットのスタートコードと、16ビットのデータ列に変換されたマンチェスタ符号でなるIDとによって計24ビットの符号化データを送信データとして点滅パターンにのせて発信するようになされている。
(1−7)デコード方法
次に、IDカメラ3におけるデコード方法の原理について図3を用いて説明する。図2で説明した「H0−H1−H2−H3」のスタートコードと、「b0、b1、b2、b3、b4、b5、b6、b7」の8ビットでなるIDを1番上のラインに示し、それぞれスタートコードがヘッダーとして表され、IDが2進数で最下位ビットから最上位ビットへ順番に「01000100」として表されている。
例えば、H0=「01」はLEDの光がOFF→ONに切り換わることが示され、H1=「11」はLEDの光がON→ONのまま変わらないことが示され、H2=「00」はLEDの光がOFF→OFFのまま変わらないことが示され、H3=「10」はLEDの光がON→OFFに切り換わることが示されている。
このことは8ビットのIDについても同様であり、b0=「10」はLEDの光がON→OFFに切り換わることが示され、b1=「01」はLEDの光がOFF→ONに切り換わることが示され、…、b7=「10」はLEDの光がON→OFFに切り換わることが示されている。このように8ビットのIDでは、マンチェスタ符号化されたことにより、その全てにおいて光がOFF→ON又はON→OFFに切り換わるようになされている。
そして、横軸は時間軸を表しており、縦線の1区間がIDカメラ3のイメージセンサによる2撮像フレーム分に相当し、例えばH0=「01」(OFF→ON)をデコードするにはイメージセンサの4撮像フレーム分の時間を必要とすることになる。
このとき、光の立上り変化を示すCP(n)と光の立下り変化を示すCM(n)については、ヘッダーのパターンは固定なので、CP(n)=1になってから6撮像フレーム後にCM(n)=1となり、さらに4撮像フレーム後にCP(n)=1、そしてその2撮像フレーム後にCM(n)=1となることが決まっており、このような光の変化が検出できたとき、これはヘッダーであることが分かる。
撮像フレームのうち、この最初のCP(n)=1となる検出フレームを「ヘッダー基準点」と呼び、ヘッダーの最後のCM(n)=1となる検出フレームを「データ基準点」と呼ぶことにすると、IDのデコード(復元)はデータ基準点から4撮像フレーム毎に8回分のCP(n)及びCM(n)の状態をみることによって行うことができる。
すなわちデータ基準点から4撮像フレーム毎の検出フレームにおいて、CP(n)=1ならばマンチェスタ符号化前のビットは「1」であり、CM(n)=1ならばマンチェスタ符号化前のビットは「0」となる。
仮に、CP(n)=CM(n)=「0」の場合にはマンチェスタ符号を受信することができなかったのでエラーとして処理する。なおIDのデータ順序としては、LSB(Least Significant Bit)から順番にMSB(Most Significant Bit)まで8ビットのデータが送られている。
(1−8)ID出力の等倍速モード及び複数倍速モード
図4に、本発明におけるID出力の方式を示す。すなわち本発明のIDカメラ3では、1回の8ビットのIDを光ビーコン2から受信する度に、そのIDと光ビーコン2の画面上での位置をIDデータとして出力するようになされており、これにより従来よりもID出力周期を何倍(約3倍)も短縮することが可能(図37参照)となる。以下、これを等倍速モードという。
この場合IDカメラ3では、8ビットのIDを垂直同期信号(Vsinc)のタイミングがくるまで待つという必要がなく、かつ垂直同期信号(Vsinc)のタイミングに同期させる必要がないので、従来よりも確実にID出力周期を短縮し得るようになされている。
また図5に示すようにIDカメラ3は、例えば4倍速モードでIDデータを出力する場合、8ビットのIDを一度全て受信してデコードした後、次の8ビットのIDの受信サイクルにおいては、当該IDの受信途中でIDデータの出力を順次行うようになされている。
このときIDカメラ3は、次の受信サイクルで8ビットのIDの受信途中であれば、当然8ビット全てが揃っているわけではないが、1時点前の受信サイクルで既に受信してある8ビットのIDのうち不足分のビットを貰い受ける形で合計8ビットのIDとして揃え、これをIDデータとして出力することにより、等倍速モードに比べてID出力周期を4倍も短縮し得るようになされている。
なおIDカメラ3では、8ビットのIDがマンチェスタ符号化され、ヘッダーを合わせた計24ビットのデータ列に変換されていると共に、スタートコードとして設定された「01110010」のデータ列中に同じ符号(この場合「1」)が最大3個を超えて続くことがないように考慮されている関係上、符号化データの4ビット毎に必ず1回は光の立上り又は立下りの変化が得られる(図3)。
従って図6に示すようにIDカメラ3では、スタートコード及びマンチェスタ符号化前のIDの2ビット毎にIDデータの出力を行うことができることから、本実施の形態では最大6倍速モードまで設定することが可能となる。
この結果、図7に示すようにIDカメラ3ではイメージセンサによる撮像フレームのフレームレートが例えば500[fps]の場合、光の変化を検出する方法として2フレーム間差分を用いると、光ビーコン2のLEDによる光の発信周波数は250[Hz]となる。
これは、サンプリング定理からも明らかなように、光ビーコン2による光の発信周波数の2倍以上の周波数でイメージセンサによるサンプリングをしないと、サンプリング結果からマンチェスタ符号化前の原信号を復元することができないからである。
従って、計24ビットでなるスタートコード及びIDは、光ビーコン2のLEDの周期に換算した場合、ヘッダー8周期+データ16周期の計24周期となり、これを時間に換算すると1/250[sec]×24=96[msec]となる。従って光ビーコン2は、96[msec]毎にID出力が可能となり、等倍速モードであれば当該光ビーコン2のID出力周期は1/96[msec]=10.4[Hz]になる。
一方、光ビーコン2は6倍速モードであれば、96[msec]÷6=16[msec]毎にID出力が可能となり、ID出力周期は6×10.4[Hz]=62.4[Hz]になる。
また、IDカメラ3のイメージセンサによるフレームレートが1000[fps]の場合、光の変化の検出方法として2フレーム間差分を用いると、光ビーコン2のLEDによる光の発信周波数は500[Hz]となり、等倍速モードであればID出力周期は20.8[Hz]になり、6倍速モードであれば、ID出力周期は124.8[Hz]となる。
同様にIDカメラ3のイメージセンサによるフレームレートが10000[fps]の場合、光の変化の検出方法として2フレーム間差分を用いると、光ビーコン2のLEDによる光の発信周波数は5K[Hz]となり、等倍速モードであればID出力周期は208[Hz]になり、6倍速モードであれば、ID出力周期は1248[Hz]となる。
このようにIDカメラ3では、イメージセンサが高速な10000[fps]のフレームレートである場合、これまで実現できていなかった約1K[Hz]以上のID出力周期が6倍速モードで達成可能となり、イメージセンサがより低速な500[fps]のフレームレートである場合にも、6倍速モードを利用すれば約60[Hz]程度のID出力周期が可能となるので、モーションキャプチャやユーザインタフェース等の分野でも使用可能な領域までトラッキング性能を向上させ得るようになされている。
ところで、図37に示したように従来のID出力周期では、ビデオフレームにおける1/30秒間の垂直同期信号(Vsinc)のタイミングに合わせてIDデータを出力しているためID出力周期は30[Hz]であるが、光ビーコン2がビデオフレームの1/30秒間内にIDを少なくとも2回発信しなければならないので、本発明における等倍速モードで考えればIDカメラ3によるID出力周期は60[Hz]となり、従来のID出力周期の場合には2880[fps]ものフレームレートを有する非常に高速なイメージセンサが必要になる。
しかしながら、本発明におけるID出力の方式を用いれば、500[fps]程度のフレームレートしか持たないようなあまり高速ではないイメージセンサであっても、4倍速モード以上を利用すれば、ビデオフレームのフレーム周波数30[Hz]に合わせてIDを出力することが可能となる。
(1−9)近傍画素の情報を利用した受信データのデコード方法
これまでに説明したように、ID認識システム1の原理から考えると、IDカメラ3と光ビーコン2との相対位置が激しく変化したときに、光が時系列に変化する点滅パターンを受信途中の段階でイメージセンサの画面上で捉えている当該光が他の画素に移動することが考えられ、このような場合にこれまでのID認識システム1では当該光ビーコン2のIDを確実に取得することができなかった。
このような問題を解決するため、IDをデコードする際に周辺画素の受光情報を用いてデコードすることが考えられる。本発明では、光ビーコン2の高速トラッキングを目的としたものであり、さらに10000[fps]といった非常に高速なイメージセンサに比べれば比較的低速な1000[fps]程度のイメージセンサによるトラッキングを想定していることから、周辺画素の受光情報を用いてデコード手法を併用することは効果的である。以下、周辺画素の受光情報を利用したデコード方法について説明する。
図8に示すようにデコードを行うべき対象を座標(x,y)の注目画素とし、その周辺の座標(x-1,y+1)、(x,y+1)、(x+1,y+1)、(x+1,y)、(x+1,y-1)、(x,y-1)、(x-1,y-1)、(x-1,y)の画素を周辺画素とした場合、当該周辺画素のウィンドウ領域Wは、次式
で表される。
このウィンドウ領域Wにおいて、デコードしたい注目画素からの受光量をI(x,y)とすると、光の変化を周辺画素まで含めて考えた場合、光の変化dI(x,y)は、光の変化があったときに「1」、光の変化がなかったときに「0」の値をとると仮定すると、次式
で表される。
ここで記号「|」は、OR演算であり、右辺はウィンドウ領域W内の全画素における受光量I(x,y)のOR演算結果を表したものである。デコード方法としては符号化方式によって異なるので一概にはいえないが、この光の変化dI(x,y)をIDのデコードに利用することにより、データ受信中にデコードすべき注目画素から光が外れても、ウィンドウ領域W内の画素で当該光を受光できてさえいれば途切れることなくIDのデコードが可能となる。
因みに、ここではウィンドウ領域Wとして注目画素の周辺である(2n+1)×(2n+1)の正方形エリアを用いて上述のデコード方法を説明したが、正方形エリアに限る限定する必要はなく、例えば長方形エリアや4隣接画素等の他の形状エリアを用いてデコードするようにしても良い。特に光ビーコン2が非常に高速で移動する場合には、nの値を大きくとり、ウィンドウ領域Wをさらに拡大すれば良い。
以下に、光の変化dI(x,y)をCP(n)及びCM(n)を用いて表す。例えば(9)式において注目画素の光の変化dI(x,y)を考えるが、ここでn=1として3×3のウィンドウ領域Wを考えた場合、当該ウィンドウ領域W内の画素の情報を用いて求めたウィンドウ領域Wの中心座標(x,y)における正のMフレーム間差分のコンパレータ出力CPw(n)は、座標(x,y)のCP(n)をCP(n,x,y)と定義し直すと、次式
で表される。
これは、ウィンドウ領域W内の全画素に対するCP(n)のうち、1つでも「1」すなわち光の立上り変化があったら、座標(x,y)に相当する注目画素のCPw(n)を「1」にすることを意味するものである。
同様にして、負のMフレーム間差分のコンパレータ出力CMw(n)も、座標(x,y)のCM(n)をCM(n,x,y)と定義し直すと、次式
で表される。
(2)本発明を適用したID認識システムの構成
(2−1)システム構成
図9に示すようにID認識システム1は、複数の光ビーコン2A、2B、…と、IDカメラ3とから構成されており、当該光ビーコン2A、2B、…はそれぞれ異なる点滅パターンの光を発信し、それをIDカメラ3で撮像することにより、光ビーコン2A、2B、…から送信される画像を出力したり、光ビーコン2A、2B、…のID及び画面上の位置(座標)を検出するようになされている。
ここで光ビーコン2A、2B、…の回路構成を説明するに当たって、当該光ビーコン2A、2B、…の回路構成は全て同一であるため、光ビーコン2Aの回路構成だけを説明し、他の光ビーコン2B、…については便宜上その説明を省略する。
(2−2)光ビーコンの回路構成
図10(A)に示すように光ビーコン2Aは、十分高速に変調可能な光源10と、送信データの情報を含む点滅パターンを光源10が発信するように制御する点滅制御部11と、送信データを格納しておく送信データ保存用メモリ12とによって構成される。
この光ビーコン2Aは、予め送信データ保存用メモリ12に書き込まれている送信データ(スタートコード及びID)を符号化し、点滅制御部11により当該符号化された送信データに基づいて光源10からの光を点滅させることにより当該送信データを発信するようになされている。
なお図10(B)に示すように光ビーコン2Aは、図10(A)で示した送信データ保存用メモリ12の代わりに外部のネットワークに接続するためのデータ送受信部13を有し、当該データ送受信部13を介して外部のネットワークから送信データ(スタートコード及びID)を受け取り、この送信データに基づいて光源10からの光を点滅させることにより当該送信データを発信するようにしてもよい。
(2−3)IDカメラの回路構成
図11に示すようにIDカメラ3は、図示しないROM(Read Only Memory)等に格納されたデータ出力制御プログラムに従って全体が動作し、レンズ20を介して光ビーコン2A、2B、…からの光をイメージセンサ21で受光する。
ここでイメージセンサ21といえば、一般にCCD(Charge Coupled Device)イメージセンサや、CMOS(Complementary Metal-Oxide Semiconductor)イメージセンサがある。CMOSイメージセンサは、比較的消費電力が低いので、本発明のように高速で光を受光し、その光の変化を捉える用途には、より適していると考えられる。ここでは、一般に市販されているフレームレートが1000[fps]の高速撮像素子(イメージセンサ)を利用した構成を用い、以下説明する。
IDカメラ3は、イメージセンサ21の各画素によって撮像した輝度信号をアナログディジタル変換回路22を介してディジタルの輝度データに変換し、これを映像モードで用いる映像用フレームメモリ23及びIDモードで用いる差分取得用フレームメモリ25へそれぞれ送出する。
ここで映像用フレームメモリ23は、イメージセンサ21による撮像フレームのフレームレート1000[fps]の高速撮像の映像から通常のビデオフレームのフレーム周波数30[fps]のビデオ映像を生成するために使用される。
この場合、最も単純なビデオ映像生成方法としては、33枚の画像を足し合わせて1枚の絵として生成することにより、イメージセンサ21によるフレームレート1000[fps]の撮像フレームからビデオフレームのフレーム周波数30[fps]のビデオ映像を生成することである。
従ってIDカメラ3では、映像用フレームメモリ23には少なくともイメージセンサ21による1撮像フレーム分のメモリを用意し、アナログディジタル変換回路22の出力データを前撮像フレームまで積算された映像データと足し合わせて書き戻す処理を33回行うことにより実現可能である。
画像処理部24は、映像用フレームメモリ23を用いてビデオフレームのフレーム周波数30[fps]相当の画像を生成する処理と、その30[fps]相当のカラー復元処理(モザイク処理)、ガンマ補正やオートホワイトバランス処理、オートゲインコントロール等、一般的なイメージセンサの後段処理を行った後、ビデオ映像として出力する。
差分取得用フレームメモリ25は、上述したMフレーム間差分を行うために使用され、少なくとも1撮像フレーム分のメモリ容量を有して前撮像フレームの画像を蓄えておき、比較部26においてアナログディジタル変換回路22から出力される現在の撮像フレームの画像データと前撮像フレームの画像データとにおける輝度の差分を求める。
比較部26は、光の変化を検出するためMフレーム間差分を行い、当該Mフレーム間差分の結果をコンパレータで所定の閾値(REF(+)、REF(-))と比較した結果(CP(n)及びCM(n))をウィンドウ処理部27へ出力する。
本実施の形態では、M=2すなわち2フレーム間差分を用いて以下説明する。図12に示すように比較部26においては、正のMフレーム間差分計算部31により正のMフレーム間差分を計算し、後段のコンパレータ32により所定の閾値REF(+)との比較結果CP(n)を出力する。
また同様に比較部26においては、負のMフレーム間差分計算部33により負のMフレーム間差分を計算し、後段のコンパレータ34により所定の閾値REF(-)との比較結果CM(n)を出力する。
このとき正のMフレーム間差分は、上述の(6)式により表され、負のMフレーム間差分は上述の(7)式により表される。ここで(6)式及び(7)式中のf(i)は、ある画素におけるI番目の撮像フレームにおける受光量であり、nはフレーム間差分を求めたい撮像フレーム番号を示している。
また比較部26の出力CP(n)及びCM(n)は、次式
のように定義することができる。
ウィンドウ処理部27は、上述の(1−9)近傍画素の情報を利用した受信データのデコード方法において説明した通り、デコード対象の注目画素に対する周辺画素の光の変化情報を用いてデコードするための処理であり、本実施の形態では3×3のウィンドウ領域Wを用いて説明するが、当該ウィンドウ領域Wの大きさは5×5などの他の大きさでも構わない。
図13に示すようにウィンドウ処理部27は、比較部26によって計算されたCP(n)及びCM(n)を入力し、内部のディレイライン36〜38及び40〜43により3×3のウィンドウ領域Wに相当する画素情報が蓄積されるまで待ち、それぞれ後段のOR演算処理回路39及び43へ送出する
OR演算処理回路39及び43は、3×3のウィンドウ領域Wの中心画素が注目画素とし、当該注目画素とその周辺画素までを含めた9個の画素のうち、どれか1つでもCP(n)=1(又はCM(n)=1)となる画素が存在すれば、注目画素をCPw(n)=1(又はCMw(n)=1)として出力するようになされている。
デコード処理部28(図11)は、データの復元処理を行い、光ビーコン2A、2Bの各IDを復元すると共に、その光ビーコン2A、2Bの画面上における位置(座標)を求めて最終的に出力する。
なお、IDカメラ3としては、いわゆる機能性イメージセンサを用いた回路構成についても考えられ、その回路構成についは図11との対応部分に同一符号を付した図14に示す。
この機能性イメージセンサ50は、通常のイメージセンサ21のフレームレート1000[fps]に比べて、そのフレームレートが数K[fps]〜数十K[fps]と高く、図15に示すように受光部51、差分取得用フレームメモリ52及びコンパレータ53を有しており、その分だけ外部の回路を比較的小規模にできるのが特徴である。
この機能性イメージセンサ50は、光ビーコン2A、2Bからの光を受光部51で受光し、これを輝度信号として外部のアナログディジタル変換回路22へ送出すると共に、内部の差分取得用フレームメモリ52へ送出する。
この差分取得用フレームメモリ52は、少なくとも2撮像フレーム分の画像をアナログ的に記憶できるフレームメモリであって、現撮像フレームと前撮像フレームとを一旦記憶した後にコンパレータ53に送出する。
コンパレータ53では、現撮像フレームと前撮像フレームとの間で2フレーム間差分を行い、当該2フレーム間差分の結果を所定の閾値REF(+)及びREF(-)と比較することにより得たCP(n)及びCM(n)をウィンドウ処理部27へ出力する。
ところで、一般的に数K[fps]〜数十K[fps]のような高速フレームレートのイメージセンサで問題となるのが、イメージセンサと外部回路との帯域幅が大きくなってしまうことである。この機能性イメージセンサ50では、現撮像フレームと前撮像フレームとをディジタルデータに変換することなくアナログのまま2フレーム間差分を行い、その比較結果(CP(n)及びCM(n))を外部回路へ出力している。
このように機能性イメージセンサ50では、現撮像フレーム及び前撮像フレームをアナログのまま2フレーム間差分を行うことにより、ディジタルデータに変換した後に2フレーム間差分を行う場合と比較してデータ量を大幅に削減し、当該機能性イメージセンサ50と外部回路との帯域幅が大きくなってしまうことを防止し得るので、本実施の形態の一実装例としては最適なデバイスの1つといえる。
次に、IDカメラ3の比較部26及び53で2フレーム間差分を採用し、IDカメラ3のイメージセンサ21又は機能性イメージセンサ50における撮像フレームのフレームレートが光ビーコン2A、2BのLED発信周波数の2倍である場合を例としてデコード処理部28のデコード処理について説明する。
(2−4)デコード処理部の回路構成
図16に示すようにデコード処理部28は、ウィンドウ処理部27から供給されたコンパレータ出力CPw(n)、CMw(n)をIDデコード回路部55のIDデコード回路56に入力する。IDデコード回路56は、イメージセンサ21又は機能性イメージセンサ50で撮像した光ビーコン2A、2B、…のIDを復号する。
タイミング制御部60は、ウィンドウ処理部27からイメージセンサ21又は機能性イメージセンサ50で撮像した撮像信号のうち各画素毎に供給されるCPw(n)及びCMw(n)をIDデコード回路56でデコードする際のデコードタイミングを図り、またIDデコード回路56に入力されるCPw(n)及びCMw(n)がどの画素(座標)に相当するかを把握し、その座標に対応するフラグデータ及びIDの値をIDデコード用フレームメモリ65に書き込む。
なおタイミング制御部60は、IDデコード用フレームメモリ65へのアドレスデータ、リードライト等のリードライト制御信号を生成して供給する一方、ID重心計算回路61のタイミング制御を行うタイミング信号についても生成して供給する。
IDデコード回路56は、フラグレジスタ57及びデータレジスタ58を有し、IDデコード用フレームメモリ65の各座標に対応付けられたフラグデータ及びIDの値を読み出し、当該読み出してフラグデータ及びIDの値をフラグレジスタ57及びデータレジスタ58に対して書き込むようになされている。
実際上、IDデコード回路56は、イメージセンサ21又は機能性イメージセンサ50の受光面と対応するIDデコード用フレームメモリ65の各座標値について、何撮像フレーム目までデコードが行われたかをフラグデータとしてフラグレジスタ57に書き込むと共に、当該各座標値の画素についてデコードしたIDの値をデータレジスタ58に書き込む。
ここで、(1−7)デコード方法(図3)において上述したように、例えばIDを構成するビット「b1」=「01」(OFF→ON)はイメージセンサ21又は機能性イメージセンサ50の4撮像フレーム分に相当するので、IDデコード回路56は4撮像フレーム分をデコードするまではIDを構成する1ビット「b1」の値を復元することはできず、そのためフラグレジスタ57に対して何撮像フレーム目までデコードしたかを書き込んでおくようになされている。
このようにしてIDデコード回路56は、イメージセンサ21又は機能性イメージセンサ50における1撮像フレーム分のコンパレータ出力CPw(n)、CMw(n)が入力された段階でIDデコード用フレームメモリ65の全座標値に対応するフラグデータ及びIDを当該IDデコード用フレームメモリ65、フラグレジスタ57及びデータレジスタ58の双方に対して書き込むことができる。
ウィンドウ処理部27から供給されるコンパレータ出力CPw(n)、CMw(n)は、8ビットのスタートコードと、16ビットのマンチェスタ符号でなるIDとからなる計24ビットの送信データであって、IDデコード回路56は当該24ビットの符号化データを全てデコードしなければIDを復元することはできず、そのためには48フレーム目までデコードする必要がある。
ここでIDデコード回路56は、タイミング制御部60によりフラグレジスタ57に対して何撮像フレーム目までデコードしたかを随時更新しながら書き込み、かつデータレジスタ58に対してもIDの値を撮像フレーム毎に追記しながら書き込むようにしているので、IDデコード用フレームメモリ65として48フレーム分の記憶容量をもつ必要はなく最低1撮像フレーム分の記憶容量で済むようになされている。
図17に示すようにデータレジスタ58には、実際に復元されたマンチェスタ符号化前の8ビットでなるIDの値が順次格納されていき、またフラグレジスタ57には1ビットのIDイネーブルフラグ、4ビットのデコードステータス及び3ビットのデコードカウンタの値がフラグデータとして格納されるようになされており、これらの具体的内容については後述するIDデコード処理と併せて説明する。
ID重心計算回路61は、フラグレジスタ57及びデータレジスタ58に対して書き込む情報を監視しており、フラグレジスタ57の内容に基づいてある画素についてマンチェスタ符号化前の8ビットでなるIDを全て復元できたことを確認できた場合には当該IDをID座標格納メモリ63に格納すると共に、当該IDを発信している光ビーコン2Aの画面上における位置(重心座標)を計算した後、重心出力フラグ62に「1」を書き込む。
マンチェスタ符号化前のIDは「01000100」の8ビット符号であるため、デコード処理部28では全部で256種類のIDを認識することが可能であり、ID座標格納メモリ63には当該256種類のIDを全て格納し得るようになされている。
ID重心計算回路61は、仮に光ビーコン2Aが発信している例えばID番号「0」のIDが複数座標(複数画素)に跨がった状態で検出できたときには、各座標値におけるX座標の和及びY座標の和を求め、かつ跨がった複数画素すなわち認識画素数を検出した後、これらを除算回路64へ送出する。
除算回路64は、ID番号「0」のIDを検出したときの全ての画素の座標値に基づいてX座標の和、Y座標の和を認識し、これらを認識画素数で除算することにより、当該IDを発信している光ビーコン2Aの画面上における位置(重心座標)を計算するようになされている。
(2−5)IDデコード処理
図18では、光ビーコン2A、2Bが発信する光の点滅パターンに対してフラグレジスタ57におけるフラグデータの値がどのように変化していくかを示しており、横軸には時間が示され、縦軸には送信データ、符号化データ、光の点滅パターン、デコードタイミング、フラグレジスタ57に対するデコードカウンタの値及びデコードステータスの値が示されている。
送信データには、ヘッダー(スタートコードH0、H1、H2、H3)及びマンチェスタ符号化前のID(01000100)が示され、符号化データに対応した点滅パターンについても示されている。デコードタイミングとしては、点滅パターンのONとOFFとが切り換わる時点により示され、フラグレジスタ57に書き込まれるデコードカウンタ及びデコードステータスの値がそれぞれ示されている。
デコード処理部28ではヘッダーの検出を行うに当たって、最初にフラグレジスタ57の値を初期化することにより、デコードカウンタ及びデコードステータスの値を共に「0」にする。その後、送信データのうちヘッダーのスタートコード「H0」の点滅パターンでは立上りエッジが含まれるのでそれを検出(CPw(n)=1)し、デコードステータスを「0」→「1」に変化させ、その後1撮像フレーム毎にデコードカウンタの値をカウントアップさせる。
次に、ヘッダーのスタートコード「H1」から「H2」の間に立下りエッジが含まれるのでそれを検出(CMw(n)=1)し、デコードステータスを「1」→「2」に変化させ、デコードカウンタの値を再度「1」に設定した後、その次の撮像フレームから1撮像フレーム毎にカウントアップ動作を行う。
その次には、ヘッダーのスタートコード「H2」から「H3」の間に立上りエッジが含まれるのでそれを検出(CPw(n)=1)し、デコードステータスをさらに「2」→「3」に変化させ、デコードカウンタの値を再度「1」に設定した後、その次の撮像フレームから1撮像フレーム毎にカウントアップ動作を行う。
そしてヘッダーのスタートコード「H3」の真ん中で立下りエッジがあるのでそれを検出(CMw(n)=1)し、デコードステータスをさらに「3」→「4」に変化させ、デコードカウンタの値を再度「1」に設定した後、その次の撮像フレームから1撮像フレーム毎にカウントアップ動作を行う。
以上のようにデコードステータス「1」〜「3」の区間はスタートコードを表すヘッダー区間であり、このヘッダーにおける点滅パターンは固定なので、光の立上り変化、立下り変化のパターンも固定となる。
従ってデコードステータス「1」〜「3」における各デコードステータスの長さ(撮像フレーム数)も固定である。すなわちデコードステータス「1」は6撮像フレーム、デコードステータス「2」は4撮像フレーム、デコードステータス「3」は2撮像フレームとなる。
また、このデコードステータス「3」がデコードステータス「4」に変化する撮像フレームを、説明のために「データ基準点」と呼ぶことにすると、この後に受信されるIDは当該データ基準点から4撮像フレーム毎にデコードすることができる。
データ基準点から4撮像フレーム後は、ちょうどIDにおけるビット「b0」の真ん中に相当し、当該ビット「b0」が値「0」であっても、値「1」であっても、マンチェスタ符号化されているので光の立上り変化或いは立下り変化が必ず発生する。
すなわち、仮にビット「b0」=値「1」のときにはマンチェスタ符号が0→1なので、立上り変化が発生してCPw(n)=1となり、ビット「b0」=値「0」のときにはマンチェスタ符号が1→0なので立下り変化が発生してCMw(n)=1となる。これによりビット「b0」の値を判定することができるのである。
仮に、CPw(n)=CMw(n)=0となる場合には、マンチェスタ符号が受信できなかったことになるのでエラーと判断し、この画素のデコード処理はこの後ヘッダーの検出から再びスタートするためにフラグレジスタ57及びデータレジスタ58を「0」に初期化する。
このようにしてデコード処理部28は、ビット「b1」〜「b7」のデコードについても、ビット「b0」以降4撮像フレーム毎に同様の処理を行うことにより、マンチェスタ符号化前の8ビットのIDを復元し得るようになされている。
この結果、デコード処理部28は、マンチェスタ符号化前の8ビットでなるIDをデコードステータス「0」、デコードカウンタ「1」のタイミングで出力することにより等倍速モードのID出力周期を実現するようになされている。
なおデコード処理部28は、2倍速モードであれば、等倍速モードと同様にデコードステータス「0」、デコードカウンタ「1」のタイミングでIDを出力することに加えて、デコードステータス「6」、デコードカウンタ「1」のタイミングで、それまでに受信してデコードしたヘッダー「H0」、「H1」、「H2」、「H3」、「b0」、「b1」のうちIDの値であるビット「b0」、「b1」と、前サイクルで既に受信してデコード済みの後半のビット「b2」、「b3」、「b4」、「b5」、「b6」、「b7」とを併せて8ビットでなるIDを出力することにより等倍速モードの2倍速の周期でIDを出力するようになされている。
同様にデコード処理部28は、4倍速モード又は6倍速モードであれば等倍速モードの4倍又は6倍の周期でIDを出力することができる。
(2−6)重心位置計算処理
ID重心位置計算回路61では、当該IDを発信している光ビーコン2Aを撮像したときの複数画素の重心座標Gを、次式
で求めることができる。
ここで、重心計算の対象であるIDを受信した認識画素数をN、受信した画素の座標をp(i)として、当該p(i)のX座標をpx(i)、Y座標をpy(i)とする。また、「i」は同じデータを受信した画素の番号である。
そうすると、X座標の和は、次式
で表され、Y座標の和は、次式
で表される。
ID座標格納メモリ63には、8ビットのIDそれぞれについて、小さい番号の付されたIDから順番にX座標の和、Y座標の和及び認識画素数が格納される。なお、最初の段階では当該ID座標格納メモリ63は初期化され、全て「0」が入っている状態である。
実際上、IDデコード回路56は、IDデコード用フレームメモリ65から順番にフラグデータ及びIDを読み出し、その画素のその撮像フレームにおけるIDデコード処理を行った後、フラグレジスタ57及びデータレジスタ58にデコード結果を書き戻す。
その後、これらのフラグレジスタ57及びデータレジスタ58の情報がIDデコード用フレームメモリ65に書き戻される前に、ID重心位置計算回路61がフラグデータ及びIDの情報を受け取ることになる。
ID重心位置計算回路61は、フラグレジスタ57及びデータレジスタ58の双方から受け取った情報に基づいて、デコードすべき注目画素が重心計算を行うのに必要な画素であるか否かを判断し、仮に重心計算する必要のある画素であれば、この注目画素のID番号に対応するIDのアドレスデータをID座標格納メモリ63から読み出し、次式
を求め、当該新たに求めた「X座標の和」、「Y座標の和」及び「認識画素数」をアドレスデータとしてID座標格納メモリ63に書き戻すようになされている。
これらの処理を1撮像フレーム分の画素全てについて終えたときには、その撮像フレームにおける各IDの「X座標の和」、「Y座標の和」及び「認識画素数」が全てID座標格納メモリ63に格納されたことになる。
そして1撮像フレーム分の画素全てについて上述の処理を終えたときに、今回の撮像フレームで1つでも等倍速モード又は複数倍速モードにおいて有効な「X座標の和」、「Y座標の和」及び「認識画素数」のアドレスデータがある場合(1回でも「X座標の和」、「Y座標の和」及び「認識画素数」を計算した画素が存在したとき)、ID重心位置計算回路61は当該アドレスデータ(「X座標の和」、「Y座標の和」及び「認識画素数」)を読み出し、除算回路64に供給する。
除算回路64は、次式
の計算を行うことにより当該IDを発信している光ビーコン2を撮像したときの複数画素の重心座標を求め、最終的なIDと共に当該重心座標を出力するようになされている。
(3)IDモードのメイン処理手順
次に、デコード処理部28において光ビーコン2A、2B、…のIDをデコードすると共に画面上における位置(重心座標)を検出するIDモードのメイン処理手順について図19のフローチャートを用いて説明する。
デコード処理部28は、ルーチンRT1の開始ステップから入って次のステップSP1へ移り、まずIDデコード用フレームメモリ65、フラグレジスタ57及びデータレジスタ58、その他のローカルレジスタを全て初期化(「0」にセット)し、次のステップSP2へ移る。
ステップSP2においてデコード処理部28は、IDデコード回路56にウィンドウ処理部27からのCPw(n)、CMw(n)が入力されるタイミングに合わせて当該CPw(n)、CMw(n)の座標(注目画素の座標)に相当するフラグデータ及びIDをIDデコード用フレームメモリ65から読み出し、これをフラグレジスタ57及びデータレジスタ58に書き込んだ後、次のサブルーチンSRT1へ移る。
サブルーチンSRT1においてデコード処理部28は、後述するIDデコードメイン処理を行うことにより4撮像フレームでマンチェスタ符号化前のIDを1ビット復元し、次のステップSP3へ移る。ここでマンチェスタ符号化前のIDを完全に復元するにはイメージセンサ21又は機能性イメージセンサ50により48フレーム必要となる(図18)。
ステップSP3においてデコード処理部28は、フラグレジスタ57に対してデコード処理を何撮像フレーム目まで行ったかを書き込むと共に、データレジスタ58に対して復元したIDの値を書き込み、そして、その同じ内容をIDデコード用フレームメモリ65における注目画素の座標に対応するアドレスに書き戻し、次のサブルーチンSRT2へ移る。
サブルーチンSRT2においてデコード処理部28は、後述するように、IDを発信している光ビーコン2A、2B、…からの光がイメージセンサ21又は機能性イメージセンサ50における複数画素に跨がって受光されている場合、その光の位置(重心座標)をID重心計算処理によって算出し、次のステップSP4へ移る。
ステップSP4においてデコード処理部28は、IDデコード回路56にウィンドウ処理部27から入力されるCPw(n)、CMw(n)が1撮像フレームの全画素分について終了したか否かを判定する。
ここで否定結果が得られると、このことはウィンドウ処理部27から入力されるCPw(n)、CMw(n)が1撮像フレームの全画素分について終了しておらず、引き続きCPw(n)、CMw(n)を入力する必要があることを表しており、このときデコード処理部28は、次のステップSP5へ移る。
ステップSP5においてデコード処理部28は、タイミング制御部60内に設けられているアドレスカウンタ(図示せず)により、IDデコード用フレームメモリ65のアドレスカウンタにより読出アドレス及び書込アドレスのカウントアップを行うことにより次の画素に対するIDのデコード処理に備え、上述のステップSP2に戻る。
これに対してステップSP4で肯定結果が得られると、このことはウィンドウ処理部27から入力されるCPw(n)、CMw(n)が1撮像フレームの全画素分について終了していることを表しており、このときデコード処理部28は、次のステップSP6へ移る。
ステップSP6においてデコード処理部28は、1撮像フレームの全画素についてデコード処理が終了しているので、この段階で等倍速モード又は複数倍速モードにより出力することができる光ビーコン2A、2B、…のID(8ビット)が存在するか否かを判定するべく、重心出力フラグ62の値が「1」となっているか否かを判定する。
この理由は、光ビーコン2A、2B、…がそれぞれ独立してIDを発信するようになされていることから、光ビーコン2AのIDと、光ビーコン2BのIDとでは互いに同期しておらず、いつの時点でマンチェスタ符号化前の8ビットでなるIDが復元されているかは個々に異なるからである。
ここで否定結果が得られると、このことは重心出力フラグ62の値が「1」ではない、すなわち1撮像フレームの中である1画素についてIDデコード用フレームメモリ65からIDを読み出す必要がなく、かつID重心計算に必要な要素である「X座標の和」、「Y座標の和」及び「認識画素数」のアドレスデータを求める処理についても行う必要がないことを表しており、このときデコード処理部28は、ステップSP11へ移る。
これに対してステップSP6で肯定結果が得られると、このことは重心出力フラグ62の値が「1」であること、すなわち1撮像フレームの中で少なくともある1画素についてIDデコード用フレームメモリ65からIDを読み出す必要があり、かつID重心計算に必要な要素である「X座標の和」、「Y座標の和」及び「認識画素数」のアドレスデータを求める処理を行う必要があることを表しており、このときデコード処理部28は、次のステップSP7へ移る。
ステップSP7においてデコード処理部28は、ID座標格納メモリ63に格納されているID重心計算に必要な要素のアドレスデータ(「X座標の和」、「Y座標の和」及び「認識画素数」)を読み出し、次のステップSP8へ移る。
ステップSP8においてデコード処理部28は、除算回路64により当該アドレスデータ(「X座標の和」、「Y座標の和」及び「認識画素数」)を用いて重心計算を行うことによりIDの重心座標を求め、次のステップSP9において当該除算回路64から重心座標を出力し、次のステップSP10へ移る。
ステップSP10においてデコード処理部28は、ステップSP9でIDの重心座標を出力したので、重心出力フラグ62の値を「0」にクリアし、次のステップSP11へ移る。
ステップSP11においてデコード処理部28は、IDデコード処理を行うIDモードを終了するか否かを判定し、否定結果が得られたときにはIDモードを終了せず、次のステップSP12へ移る。
ステップSP12においてデコード処理部28は、ID座標格納メモリ63に格納されているアドレスデータを初期化し、次のステップSP13へ移る。
ステップSP13においてデコード処理部28は、タイミング制御部60内のアドレスカウンタを初期化した後、ステップSP2へ戻って上述の処理を繰り返す。
これに対してステップSP11で肯定結果が得られると、このことはユーザがIDモードにおけるメイン処理を終了する意思があることを表しているので、次のステップSP14へ移ってIDモードのメイン処理手順を終了する。
(3−1)IDデコードメイン処理手順
続いて、サブルーチンSRT1のIDデコードメイン処理手順について説明する。図20に示すように、デコード処理部28はサブルーチンSRT1のステップSP21へ移り、フラグレジスタ57及びデータレジスタ58の値として、「CPw(n)=0、デコードカウンタ=0、デコードステータス=0(図18参照)」となっているか否かを判定する。
この場合、上述のルーチンRT1のステップSP1においてIDデコード用フレームメモリ65、フラグレジスタ57及びデータレジスタ58、その他のローカルレジスタが初期化されているときは、フラグレジスタ57におけるデコードカウンタ及びデコードステータスの値は共に「0」で、データレジスタ58におけるCPw(n)の値も「0」となる。
そしてCPw(n)=1(光の立上り変化)が来て初めてIDのヘッダーに対するデコードを開始する。すなわち「CPw(n)=0、デコードカウンタ=0、デコードステータス=0」を満たすということは、まだこの注目画素ではIDのデコードを開始していないことを意味している。
このステップSP21で肯定結果が得られると、このことは上述した通り注目画素に対するIDのデコードを開始していないことを表しており、このときデコード処理部28はサブルーチンSRT1のIDデコードメイン処理手順を抜けてルーチンRT1のステップSP3へ戻る。
これに対してステップSP21で否定結果が得られると、このことは注目画素に対してIDのデコードを開始すること若しくはデコード処理中であることを表しており、このときデコード処理部28は次のステップSP22へ移る。
ステップSP22においてデコード処理部28は、エラーフラグの値を「0」にクリアし、次のステップSP23へ移る。因みにデコード処理部28は、光の変化が来るべき検出フレームで立上り変化も立下り変化も検出されなかったとき、すなわちCPw(n)=CMw(n)=0であった場合には、その後エラーフラグを「1」にセットする。
ステップSP23においてデコード処理部28は、フラグレジスタ57におけるデコードステータスの値が「4」未満であるか否かを判定する。ここで肯定結果が得られると、デコードステータスの値が「0」〜「3」であること、すなわちヘッダーのスタートコードについてデコード処理を開始することを表しており、このときデコード処理部28は次のサブルーチンSRT1−1のヘッダーデコード処理手順(後述する)へ移る。
これに対してステップSP23で否定結果が得られると、このことはデコードステータスの値が「4」以上すなわちヘッダーのスタートコードではなくIDのデコード処理を開始することを表しており、このときデコード処理部28は次のサブルーチンSRT1−2のIDデコード処理手順(後述する)へ移る。
これらサブルーチンSRT1−1におけるヘッダーデコード処理手順及びサブルーチンSRT1−2におけるIDデコード処理手順が終了すると、デコード処理部28は、次のステップSP24へ移る。
ステップSP24においてデコード処理部28は、サブルーチンSRT1−1におけるヘッダーデコード処理手順又はサブルーチンSRT1−2におけるIDデコード処理手順において、光の変化が来るべき検出フレームで光の変化が検出されなかった場合(CPw(n)=0、CMw(n)=0)にエラーフラグの値として「1」をセットするか否かを判定し、次のステップSP25へ移る。
ここで否定結果が得られると、このことはサブルーチンSRT1−1におけるヘッダーデコード処理手順又はサブルーチンSRT1−2におけるIDデコード処理手順においてエラーは発生しておらず、デコード処理が成功していることを表しており、このときデコード処理部28は、サブルーチンSRT1を抜けてルーチンRT1のステップSP3へ戻る。
これに対してステップSP24で肯定結果が得られると、このことはサブルーチンSRT1−1におけるヘッダーデコード処理手順又はサブルーチンSRT1−2におけるIDデコード処理手順において注目画素のデコード処理中にエラーが発生しデコード処理が成功していないことを表しており、このときデコード処理部28は、次のステップSP25へ移る。
ステップSP25においてデコード処理部28は、フラグレジスタ57におけるデコードカウンタ「0」、デコードステータス「0」及びイネーブルフラグ「0」に初期化してエラー処理を行った後、サブルーチンSRT1を抜けてルーチンRT1のステップSP3へ戻る。これによりデコード処理部28は、注目画素についてこれ以降デコードの初期状態に戻し、ヘッダーのスタートコードのデコード処理からやり直すことになる。
(3−1−1)ヘッダーデコード処理手順
続いて、サブルーチンSRT1−1のヘッダーデコード処理手順について説明する。図21に示すように、デコード処理部28はサブルーチンSRT1−1のステップSP31へ移り、フラグレジスタ57のデコードステータスの値が「0」であるか否かを判定する。
ここで肯定結果が得られると、デコード処理部28は次のサブルーチンSRT1−10のデコードステータス「0」の処理手順へ移り、否定結果が得られるとデコード処理部28は次のステップSP32へ移る。
ステップSP32においてデコード処理部28は、フラグレジスタ57のデコードステータスの値が「1」であるか否かを判定する。
ここで肯定結果が得られると、デコード処理部28は次のサブルーチンSRT1−11のデコードステータス「1」の処理手順へ移り、否定結果が得られるとデコード処理部28は次のステップSP33へ移る。
ステップSP33においてデコード処理部28は、フラグレジスタ57のデコードステータスの値が「2」であるか否かを判定する。
ここで肯定結果が得られると、デコード処理部28は次のサブルーチンSRT1−12のデコードステータス「2」の処理手順へ移り、否定結果が得られるとデコード処理部28は次のステップSP34へ移る。
ステップSP34においてデコード処理部28は、フラグレジスタ57のデコードステータスの値が「3」であるか否かを判定する。
この場合はヘッダーデコード処理手順であるので、デコードステータス「0」〜「3」以外に遷移することが有り得ず、必ず肯定結果を得てデコード処理部28は次のサブルーチンSRT1−13のデコードステータス「3」の処理手順へ移る。
(3−1−1−1)デコードステータス「0」の処理手順
続けて、サブルーチンSRT1−10のデコードステータス「0」の処理手順について説明する。
図22に示すように、デコード処理部28はサブルーチンSRT1−10のステップSP41へ移り、フラグレジスタ57におけるデコードカウンタの値が「0」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「0」でかつデコードカウンタ「0」であるため、すなわち注目画素に対するデコード処理を未だ開始していないことを表しており(図18)、このときデコード処理部28は次のステップSP42へ移る。
一方、ステップSP41で否定結果が得られると、デコード処理部28は次のステップSP43へ移り、フラグレジスタ57におけるデコードカウンタの値が「4」であるか否かを判定する。
このようにステップSP41及びステップSP43においてデコードカウンタの値が「0」又は「4」であるか否かを判定しているのは、図18に示したデコードカウンタの推移を見れば明らかなように、デコードステータスが「0」→「1」に遷移するのは、デコードステータス「0」でデコードカウンタ「4」のときであるからである。すなわち、このステップSP41及びステップSP43では、デコードステータスが「0」→「1」に遷移するための条件確認を行っているのである。
このステップSP43で肯定結果が得られると、このことはデコードステータス「0」でかつデコードカウンタ「4」であるため、次の撮像フレームではヘッダー基準点が来る可能性が高いことを表しており、このときデコード処理部28はステップSP42へ移る。
ステップSP42においてデコード処理部28は、ヘッダーのスタートコードにおける最初の「H0」では光の立上り変化から始まるので、CPw(n)=1であるか否かを判定する。ここで否定結果が得られると、このことは光の立上り変化が来るべきときに来なかったので、次のステップSP44へ移ってエラーフラグの値を「1」にセットした後、サブルーチンSRT1−10及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
これに対してステップSP42で肯定結果が得られると、このことは次のステータスへ移行するべくデコード処理部28は次のステップSP45へ移り、現在のデコードステータスの値「0」に「1」を加算してデコードステータスの値を「1」とすると共に、現在のデコードカウンタの値「0」又は「4」を「1」にセットした後、サブルーチンSRT1−10及びサブルーチンSRT1−1を抜けてルーチンRT1のステップSP24へ戻る。
一方、ステップSP43で否定結果が得られると、このことはデコードステータスの値が「0」であるにも係わらず、デコードカウンタの値が「0」又は「4」のいずれでもない、すなわちデコードカウンタの値が「1」〜「3」であることを表しており、このときデコード処理部28は次のステップSP46へ移る。
ステップSP46においてデコード処理部28は、現在のデコードカウンタの値に対して「1」を加算した後、サブルーチンSRT1−10及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
(3−1−1−2)デコードステータス「1」の処理手順
引き続き、サブルーチンSRT1−11のデコードステータス「1」の処理手順について説明する。
図23に示すように、デコード処理部28はサブルーチンSRT1−11のステップSP51へ移り、フラグレジスタ57におけるデコードカウンタの値が「6」であるか否かを判定する。
このようにステップSP51においてデコードカウンタの値が「6」であるか否かを判定しているのは、デコードカウンタの推移を見れば明らかなように、デコードステータスが「1」→「2」に遷移するのは、デコードステータス「1」でデコードカウンタ「6」のときの検出フレームで光の立下り変化がある場合だからである。すなわち、このステップSP51では、デコードステータスが「1」→「2」に遷移するための条件確認を行っているのである。
ここで肯定結果が得られると、このことはデコードステータス「1」でかつデコードカウンタ「6」であるため、デコードステータスが「1」→「2」に遷移する可能性が高いことを表しており、このときデコード処理部28は次のステップSP52へ移る。
ステップSP52においてデコード処理部28は、ヘッダーのスタートコードにおける「H1」が「H2」に変化する際には光の立下り変化があるので、CMw(n)=1であるか否かを判定する。
ここで否定結果が得られると、このことは光の立下り変化が来るべきときに来なかったので、次のステップSP54へ移ってエラーフラグの値を「1」にセットした後、サブルーチンSRT1−11及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
これに対してステップSP52で肯定結果が得られると、このことはヘッダーのスタートコードにおける2つ目のエッジ(光の立下り変化)を検出できたことを表しており、次のステータスへ移行するべくデコード処理部28は次のステップSP53へ移る。
ステップSP53においてデコード処理部28は、現在のデコードステータスの値「1」に対して「1」を加算することによりデコードステータスの値を「2」とすると共に、現在のデコードカウンタの値「6」を「1」にセットした後、サブルーチンSRT1−11及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
一方、ステップSP51で否定結果が得られると、このことはデコードカウンタの値が「6」以外の「1」〜「5」のいずれかであることを表しており、デコード処理部28は次のステップSP55へ移る。
ステップSP55においてデコード処理部28は、フラグレジスタ57における現在のデコードカウンタの値に対して「1」を加算した後、サブルーチンSRT1−11及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
(3−1−1−3)デコードステータス「2」の処理手順
さらに続けて、サブルーチンSRT1−12のデコードステータス「2」の処理手順について説明する。
図24に示すように、デコード処理部28はサブルーチンSRT1−12のステップSP61へ移り、フラグレジスタ57におけるデコードカウンタの値が「4」であるか否かを判定する。
このようにステップSP61においてデコードカウンタの値が「4」であるか否かを判定しているのは、デコードカウンタの推移を見れば明らかなように、デコードステータスが「2」→「3」に遷移するのは、デコードステータス「2」でデコードカウンタ「4」のときの検出フレームで光の立上り変化がある場合だからである。すなわち、このステップSP61では、デコードステータスが「2」→「3」に遷移するための条件確認を行っているのである。
ここで肯定結果が得られると、このことはデコードステータス「2」でかつデコードカウンタ「4」であるため、デコードステータスが「2」→「3」に遷移する可能性が高いことを表しており、このときデコード処理部28は次のステップSP62へ移る。
ステップSP62においてデコード処理部28は、ヘッダーのスタートコードにおける「H2」が「H3」に変化する際には光の立上り変化があるので、CPw(n)=1であるか否かを判定する。
ここで否定結果が得られると、このことは光の立上り変化が来るべきときに来なかったので、次のステップSP64へ移ってエラーフラグの値を「1」にセットした後、サブルーチンSRT1−12及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
これに対してステップSP62で肯定結果が得られると、このことはヘッダーのスタートコードにおける3つ目のエッジ(光の立上り変化)を検出できたことを表しており、次のステータスへ移行するべくデコード処理部28は次のステップSP63へ移る。
ステップSP63においてデコード処理部28は、現在のデコードステータスの値「2」に対して「1」を加算することによりデコードステータスの値を「3」とすると共に、現在のデコードカウンタの値「4」を「1」にセットした後、サブルーチンSRT1−12及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
一方、ステップSP61で否定結果が得られると、このことはデコードカウンタの値が「4」以外の「1」〜「3」のいずれかであることを表しており、デコード処理部28は次のステップSP65へ移る。
ステップSP65においてデコード処理部28は、フラグレジスタ57における現在のデコードカウンタの値に対して「1」を加算した後、サブルーチンSRT1−12及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
(3−1−1−4)デコードステータス「3」の処理手順
引き続き、サブルーチンSRT1−13のデコードステータス「3」の処理手順について説明する。
図25に示すように、デコード処理部28はサブルーチンSRT1−13のステップSP71へ移り、フラグレジスタ57のデコードカウンタの値が「2」であるか否かを判定する。
このようにステップSP71においてデコードカウンタの値が「2」であるか否かを判定しているのは、デコードカウンタの推移を見れば明らかなように、デコードステータスが「3」→「4」に遷移するのは、デコードステータス「3」でデコードカウンタ「2」のときの検出フレームで光の立下り変化がある場合だからである。すなわち、このステップSP71では、デコードステータスが「3」→「4」に遷移するための条件確認を行っているのである。
ここで肯定結果が得られると、このことはデコードステータス「3」でかつデコードカウンタ「2」であるため、デコードステータスが「3」→「4」に遷移する可能性が高いことを表しており、このときデコード処理部28は次のステップSP72へ移る。
ステップSP72においてデコード処理部28は、ヘッダーのスタートコードにおける「H3」が「H4」に変化する際には光の立下り変化があるので、CMw(n)=1であるか否かを判定する。
ここで否定結果が得られると、このことは光の立下り変化が来るべきときに来なかったので、次のステップSP74へ移ってエラーフラグの値を「1」にセットした後、サブルーチンSRT1−13及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
これに対してステップSP72で肯定結果が得られると、このことはヘッダーのスタートコードにおける4つ目のエッジ(光の立下り変化)を検出できたことを表しており、次のステータスへ移行するべくデコード処理部28は次のステップSP73へ移る。
ステップSP73においてデコード処理部28は、現在のデコードステータスの値「3」に対して「1」を加算することによりデコードステータスの値を「4」とすると共に、現在のデコードカウンタの値「2」を「1」にセットした後、サブルーチンSRT1−13及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
一方、ステップSP71で否定結果が得られると、このことはデコードカウンタの値が「1」であることを表しており、デコード処理部28は次のステップSP65へ移る。
ステップSP75においてデコード処理部28は、フラグレジスタ57における現在のデコードカウンタの値「1」に対して「1」を加算した後、サブルーチンSRT1−13及びサブルーチンSRT1−1を抜けてサブルーチンSRT1のステップSP24へ戻る。
ここまででサブルーチンSRT1−1におけるヘッダーデコード処理手順(図21〜図25)について全て説明を終了し、ヘッダーのスタートコードを復元することができるようになされている。続いてサブルーチンSRT1−2におけるIDデコード処理手順について説明する。
(3−1−2)IDデコード処理手順
図26に示すように、デコード処理部28はサブルーチンSRT1−2のIDデコード処理手順におけるステップSP81へ移り、フラグレジスタ57のデコードカウンタの値が「4」であるか否かを判定する。
このようにステップSP81においてデコードカウンタの値が「4」であるか否かを判定しているのは、デコードカウンタの推移を見れば明らかなように、データ基準点の撮像フレームから4撮像フレーム毎に立上りエッジ(CPw(n)=1)が検出されるか、立下りエッジ(CMw(n)=1)が検出されるかを調べることでIDのデコードを行うことができるからであり、デコードカウンタ「4」のときがデコードする際の検出フレームに相当する。
ステップSP81で否定結果が得られると、このことはデコードカウンタの値が「4」以外の「1」〜「3」のいずれかであることを表しており、このときデコード処理部28は、次のステップSP82へ移る。
ステップSP82においてデコード処理部28は、フラグレジスタ57における現在のデコードカウンタの値に「1」を加算した後、サブルーチンSRT1−2を抜けてサブルーチンSRT1のステップSP24へ戻る。
これに対してステップSP81で肯定結果が得られると、このことはデコードカウンタの値が「4」であって、IDをデコードするための検出フレームに相当していることを表しており、このときデコード処理部28は、次のステップSP83へ移る。
ステップSP83においてデコード処理部28は、IDのデコード処理に関しては、当該デコードカウンタ「4」のときにおける検出フレームで光の立上り変化又は立下り変化のいずれかがあると考えられるので、まずCPw(n)=1であるか否かを判定する。
ここで肯定結果が得られると、このことは検出フレームで光の立上りエッジが検出できたこと、すなわちマンチェスタ符号化前のIDの値として「1」を検出したことを表しており、このときデコード処理部28は、フラグレジスタ57における現在のデコードステータスの値からヘッダーの個数である「4」を減算した数の位置に相当するデータレジスタ58のビットとして当該マンチェスタ符号化前のIDの値「1」を書き込み、次のステップSP84へ移る。
この場合、データレジスタ58に対して書き込むべきビットの位置としては、デコードステータス「4」であればIDのビット「b0」、デコードステータス「5」であればIDのビット「b1」、デコードステータス「6」であればIDのビット「b2」、デコードステータス「7」であればIDのビット「b3」、デコードステータス「8」であればIDのビット「b4」、デコードステータス「9」であればIDのビット「b5」、デコードステータス「10」であればIDのビット「b6」、デコードステータス「11」であればIDのビット「b7」となり、マンチェスタ符号化前の8ビットのID全てが揃うことになる。このように[「デコードステータスの値」−4]の数に相当するビット「bx」がLSBから見たビット番号に相当する。
これに対してステップSP83で否定結果が得られると、このことはCPw(n)=1ではなく、すなわち検出フレームで光の立上りエッジが検出できなかったことを表しており、このときデコード処理部28は、次のステップSP85へ移る。
ステップSP85においてデコード処理部28は、検出フレームでCMw(n)=1であるか否かを判定する。ここで否定結果が得られると、このことは検出フレームでCPw(n)=1及びCMw(n)=1のいずれも検出できなかったことを表しており、このときデコード処理部28は、次のステップSP86へ移る。
ステップSP86においてデコード処理部28は、検出フレームでIDの値として「1」又は「0」のいずれについても検出できなかったこと、すなわち光の変化が来るべきときに光の立上り変化又は立下り変化のいずれも検出できなかったので、エラーフラグを「1」にセットした後、サブルーチンSRT1−2を抜けてサブルーチンSRT1のステップSP24へ戻る。
これに対してステップSP85で肯定結果が得られると、このことは検出フレームで光の立上りエッジが検出できたこと、すなわちIDの値として「0」を検出したことを表しており、このときデコード処理部28は、現在のデコードステータスの値からヘッダーの個数である「4」を減算した数の位置に相当するデータレジスタ58のビット「bx」としてマンチェスタ符号化前のIDの値「0」を書き込み、次のステップSP88へ移る。
ステップSP88においてデコード処理部28は、フラグレジスタ57におけるデコードステータスの値が「11」であるか否かを判定する。
ここでデコードステータスの値としては「0」〜「11」までのいずれかの値を取り得るが、デコードステータス「11」の次は必ずデコードステータス「0」に遷移するため、この判定を行う必要がある。
ここで肯定結果が得られると、このことはデコードステータス「11」でかつデコードカウンタ「4」の検出フレームで光の立下り変化を検出したこと、すなわちデコードステータスが「11」から「0」へ遷移することを表しており、このときデコード処理部28は、次のステップSP90へ移る。
ステップSP90においてデコード処理部28は、フラグレジスタ57におけるデコードステータスの値「11」を「0」に書き換えて更新した後、次のステップSP91へ移る。
これに対してステップSP88で否定結果が得られると、このことはデコードカウンタ「4」の検出フレームで光の立上り変化又は立下り変化を検出した状態で、かつ現在のデコードステータスの値が「0」〜「10」のいずれかであることを表しており、このときデコード処理部28は、次のステップSP89へ移る。
ステップSP89においてデコード処理部28は、現在のデコードステータスの値に「1」を加算して更新した後、次のステップSP91へ移る。ステップSP91においてデコード処理部28は、デコードステータスの遷移に合わせてデコードカウンタの値を「1」にセットし、次のステップSP92へ移る。
ステップSP92においてデコード処理部28は、現在のデコードステータスの値が「0」に戻っているか否かを判定する。この場合、デコードカウンタ「1」で、かつデコードステータス「0」となる条件は現在の検出フレームがIDのビット「b7」の値をデコードし終えたこと、すなわちマンチェスタ符号化前の8ビットでなるIDを全て復元できたことを意味する。
ここで否定結果が得られると、このことはヘッダー及びIDのデコードがまだ一巡していないことを表しており、このときデコード処理部28は、サブルーチンSRT1−2を抜けてサブルーチンSRT1のステップSP24へ戻る。
これに対してステップSP92で肯定結果が得られると、このことはデコードステータスの値が「0」になったこと、すなわちヘッダー及びIDのデコードが一巡し終わったことを表しており、このときデコード処理部28は次のステップSP93へ移る。
ステップSP93においてデコード処理部28は、マンチェスタ符号化前の8ビットでなるIDを全て欠けることなく復元し得たので、この後いつでも8ビットのIDを出力できることを示すIDイネーブルフラグ「1」をフラグレジスタ57にセットした後、サブルーチンSRT1−2を抜けてサブルーチンSRT1のステップSP24へ戻る。
(3−2)ID重心計算処理手順
次に、サブルーチンSRT2におけるID重心計算処理手順について図27のフローチャートを用いて詳細に説明する。
デコード処理部28は、サブルーチンSRT2のID重心計算処理手順におけるステップSP101へ移り、データレジスタ58の値として「0」となっているか否か(すなわち初期化されているか否か)を判定する。これは、本実施の形態においてIDの値として8ビットを想定し、ID=0は初期化状態であって除外することとしているからである。
従ってデコード処理部28は、データレジスタ58の値が「0」である場合、この注目画素についてはまだIDの受信が始まっていないか、或いはIDの受信途中(これまで受信した下位のビットは0で、0以外の値をもつ上位ビットをまだ受信していない状態)のいずれかである。
ここで肯定結果が得られると、デコード処理部28はID重心計算処理を行うことなく、サブルーチンSRT2を抜けてルーチンRT1のステップSP4へ戻る。
これに対してステップSP101で否定結果が得られると、このことはデータレジスタ58の値が「0」ではないこと、すなわちIDの値がデコードされて書き込まれていることを表しており、このときデコード処理部28は、次のサブルーチンSRT2−1における重心計算判断処理手順へ移る。
サブルーチンSRT2−1においてデコード処理部28は、後述する重心計算判断処理を行うことにより、当該注目画素が重心計算を行うべきステータスにあるか否かを判断し、次のステップSP102へ移る。
ステップSP102においてデコード処理部28は、ID重心計算回路61内のローカルフラグである重心計算フラグ(図示せず)の値が「1」であるか否かを判定する。ここで重心計算フラグは、当該注目画素が重心計算を行うステータスである場合にその値として「1」がセットされ、そうでない場合には、その値として「0」がセットされる。
ここで否定結果が得られると、このことは当該注目画素が重心計算を行うべきステータスにはなっていないことを表しており、このときデコード処理部28は、サブルーチンSRT2を抜けてルーチンRT1のステップSP4へ戻る。
これに対してステップSP102で肯定結果が得られると、このことは当該注目画素が重心計算を行うべきステータスであることを表しており、このときデコード処理部28は次のステップSP103へ移る。
ステップSP103においてデコード処理部28は、ID重心計算回路61によってID座標格納メモリ63から注目画素に対応するID番号(すなわちデータレジスタ58の内容)に相当するアドレスデータ(「X座標の和」、「Y座標の和」及び「認識画素数」)を読み出し、当該アドレスデータ及び注目画素のアドレスを基に新たにアドレスデータを計算し直し、次のステップSP105へ移る。
実際上、ID重心計算回路61は上述の(19)式、(20)式及び(21)式に従って、新たにアドレスデータを計算し直す。
ステップSP105においてデコード処理部28は、ID重心計算回路61によって計算し直した新たなアドレスデータを、ID座標格納メモリ63における注目画素のID番号に相当するアドレスに書き戻し、次のステップSP106へ移る。
ステップSP106においてデコード処理部28は、重心計算を行うための要素が揃ったのでIDを発信している光ビーコン2Aの重心を計算して出力することができると判断し、重心計算回路61により重心出力フラグ62の値として「1」をセットした後、サブルーチンSRT2を抜けてルーチンRT1のステップSP4へ戻る。
このとき重心計算回路61は、注目画素が複数画素に跨がっておらず、1画素だけで認識できている場合であっても、重心計算を行うために重心出力フラグ62の値として「1」をセットするようになされている。なお重心出力フラグ62は、IDカメラ3から重心座標が出力された後に「0」にクリアされる。
(3−2−1)重心計算判断処理手順
続いて、サブルーチンSRT2−1の重心計算判断処理手順について説明する。図28に示すように、デコード処理部28はサブルーチンSRT2−1のステップSP111へ移り、現在ユーザから指定されているIDデータの出力周期が6倍速モードであるか否かを判定する。
ここで肯定結果が得られると、デコード処理部28は、次のサブルーチンSRT2−10の6倍速モード重心計算判断処理手順へ移って、6倍速モードにおいて、いずれのデコードステータスといずれのデコードカウンタとの組み合わせのときに重心計算を行うべきかを判断した後、サブルーチンSRT2−1を抜けてサブルーチンSRT2のステップSP102へ戻る。
これに対してステップSP111で否定結果が得られると、デコード処理部28は、次のステップSP112へ移り、現在ユーザから指定されているIDデータの出力周期が4倍速モードであるか否かを判定する。
ここで肯定結果が得られると、デコード処理部28は、次のサブルーチンSRT2−11の4倍速モード重心計算判断処理手順へ移って、4倍速モードにおいて、いずれのデコードステータスといずれのデコードカウンタとの組み合わせのときに重心計算を行うべきかを判断した後、サブルーチンSRT2−1を抜けてサブルーチンSRT2のステップSP102へ戻る。
これに対してステップSP112で否定結果が得られると、デコード処理部28は、次のステップSP113へ移り、現在ユーザから指定されているIDデータの出力周期が2倍速モードであるか否かを判定する。
ここで肯定結果が得られると、デコード処理部28は、次のサブルーチンSRT2−12の2倍速モード重心計算判断処理手順へ移って、2倍速モードにおいて、いずれのデコードステータスといずれのデコードカウンタとの組み合わせのときに重心計算を行うべきかを判断した後、サブルーチンSRT2−1を抜けてサブルーチンSRT2のステップSP102へ戻る。
これに対してステップSP113で否定結果が得られると、デコード処理部28は、6倍速モード、4倍速モード及び2倍速モードのいずれでもないので、次のサブルーチンSRT2−13の等倍速モード重心計算判断処理手順へ移って、等倍速モードにおいて、いずれのデコードステータスといずれのデコードカウンタとの組み合わせのときに重心計算を行うべきかを判断した後、サブルーチンSRT2−1を抜けてサブルーチンSRT2のステップSP102へ戻る。
(3−2−1−1)6倍速モード重心計算判断処理手順
デコード処理部28は、6倍速モード重心計算判断処理を行う際、図29に示すように6倍速モードで重心座標を出力するためのタイミングとして、デコードステータスとデコードカウンタとの組み合わせが定められている。
具体的には、デコードステータス「1」でかつデコードカウンタ「4」のとき、デコードステータス「4」でかつデコードカウンタ「1」のとき、デコードステータス「6」でかつデコードカウンタ「1」のとき、デコードステータス「8」でかつデコードカウンタ「1」のとき、デコードステータス「10」でかつデコードカウンタ「1」のとき、及びデコードステータス「0」でかつデコードカウンタ「1」のときであり、当然のように6倍速モードにおけるIDの出力タイミングと同期しており(図18)、これ以外の組み合わせのときに重心座標を出力することはない。
なお、ルーチンRT1のIDモードのメイン処理手順(図19)からも分かるように、ID重心計算処理を行うのはIDデコードメイン処理を行った後であるので、ここでのフラグレジスタ57におけるデコードステータスとデコードカウンタの値はIDデコードメイン処理によって更新された後の値である。
従って、6倍速モード重心計算判断処理の場合には、上述の組み合わせに示した条件にあうか否かを判断し、条件に合致すれば重心計算フラグに「1」をセットし、条件に合致しなければ重心計算フラグに「0」をセットするようになされている。
因みにIDイネーブルフラグが「1」となる条件判断は、デコードステータス「0」のときはIDのビット「b7」をデコードしている検出フレームであるため特に必要ないが、デコードステータス「0」以外のときに重心を出力する判断を行うときには(すなわち等倍速モード以外のときには)、IDイネーブルフラグが「1」であることが必要である。
図30に示すように、デコード処理部28はサブルーチンSRT2−10の6倍速モード重心計算判断処理手順におけるステップSP121へ移り、デコードステータスの値が「1」であるか否かを判定し、肯定結果が得られると次のステップSP122へ移る。
ステップSP122においてデコード処理部28は、デコードステータス「1」のときにデコードカウンタ「5」であるか否かについて判定する。ここで、否定結果が得られると、このことはデコードカウンタ「5」ではないので6倍速モードにおいて重心計算を行うタイミングではないことを表しており、このときデコード処理部28は次のステップSP124へ移る。
ステップSP124においてデコード処理部28は、重心計算を行うべきタイミングではないと判断することができるので、重心計算フラグに「0」をセットした後、サブルーチンSRT2−1を抜けてサブルーチンRT2のステップSP102へ移る。
これに対してステップSP122で肯定結果が得られると、このことはデコードステータス「1」のときにデコードカウンタ「5」であって重心計算を行うべきタイミングであることを示しており、このときデコード処理部28は次のステップSP126へ移る。
一方、ステップSP121で否定結果が得られると、デコード処理部28は次のステップSP123へ移り、デコードステータス「1」以外のときであって、デコードカウンタ「1」であるか否かを判定する。
ここで否定結果が得られると、このことはデコードステータス「1」以外のときでデコードカウンタ「1」のときはないこと、すなわち6倍速モードにおいて重心計算を行うべきタイミングではないことを表しており、このときデコード処理部28はステップSP132へ移って、重心計算フラグに「0」をセットした後、サブルーチンSRT2−1を抜けてサブルーチンRT2のステップSP102へ移る。
これに対してステップSP123で肯定結果が得られると、デコード処理部28は次のステップSP125へ移り、デコードカウンタ「1」のときにデコードステータス「4」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「4」でかつデコードカウンタ「1」であるので重心計算を行うべきタイミングであると判断し、このときデコード処理部28は次のステップSP126へ移る。
これに対してステップSP125で否定結果が得られると、このことはデコードカウンタ「1」でありながらデコードステータスの値が「1」及び「4」のいずれでもないことを表しており、このときデコード処理部28は次のステップSP127へ移る。
ステップSP127においてデコード処理部28は、デコードカウンタ「1」のときにデコードステータス「6」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「6」でかつデコードカウンタ「1」であるので重心計算を行うべきタイミングであると判断し、このときデコード処理部28は次のステップSP126へ移る。
これに対してステップSP127で否定結果が得られると、このことはデコードカウンタ「1」でありながらデコードステータスの値が「1」、「4」及び「6」のいずれでもないことを表しており、このときデコード処理部28は次のステップSP128へ移る。
ステップSP128においてデコード処理部28は、デコードカウンタ「1」のときにデコードステータス「8」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「8」でかつデコードカウンタ「1」であるので重心計算を行うべきタイミングであると判断し、このときデコード処理部28は次のステップSP126へ移る。
これに対してステップSP128で否定結果が得られると、このことはデコードカウンタ「1」でありながらデコードステータスの値が「1」、「4」、「6」及び「8」のいずれでもないことを表しており、このときデコード処理部28は次のステップSP129へ移る。
ステップSP129においてデコード処理部28は、デコードカウンタ「1」のときにデコードステータス「10」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「10」でかつデコードカウンタ「1」であるので重心計算を行うべきタイミングであると判断し、このときデコード処理部28は次のステップSP126へ移る。
ステップSP126においてデコード処理部28は、IDイネーブルフラグの値が「1」であるか否かを判定する。ここで否定結果が得られると、このことはIDの8ビットに対するデコード処理が未だ一巡していないことを表しており、このときデコード処理部28は次のステップSP124へ移り、重心計算フラグの値を「0」にセットした後、サブルーチンSRT2−10を抜けてサブルーチンSRT2のステップSP102へ戻る。
これに対してステップSP126で肯定結果が得られると、このことはIDの8ビットに対するデコード処理が既に一巡しており、当該IDの8ビットを全てデコード済みであり、2倍速モード、4倍速モード又は6倍速モードでIDを出力することができ、かつ2倍速モード、4倍速モード又は6倍速モードのタイミングに合わせて重心座標を出力し得ることを表しており、このときデコード処理部28は次のステップSP131へ移る。
これに対してステップSP129で否定結果が得られると、このことはデコードカウンタ「1」でありながらデコードステータスの値が「1」、「4」、「6」、「8」及び「10」のいずれでもないことを表しており、このときデコード処理部28は次のステップSP130へ移る。
ステップSP130においてデコード処理部28は、デコードカウンタ「1」のときにデコードステータス「0」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードカウンタ「1」であり、かつデコードステータス「0」であること、すなわちIDのビット「b7」をデコードすることによりIDの8ビット全てが揃ったことを表しており、このときデコード処理部28は次のステップSP131へ移る。
この場合、デコード処理部28は少なくとも等倍速モードでIDを出力することができるので、IDイネーブルフラグの値が「0」又は「1」であるか否かを特に判断する必要はない。
これに対してステップSP130で否定結果が得られると、このことはデコードカウンタ「1」でありながら、デコードステータスの値が「4」、「6」、「8」、「10」及び「0」のいずれでもなく、重心計算を行うべきタイミングではないことを表しており、このときデコード処理部28は次のステップSP132へ移る。
ステップSP131においてデコード処理部28は、IDの8ビットが全て揃ったので当該IDと共に重心を出力する必要があるときか、デコードステータス「4」、「6」、「8」、「10」のいずれかであってイネーブルフラグ「1」であることによりIDの8ビットが全て揃わなくても、未揃い分のビットについては前サイクルのデータを用いて出力することが可能であるので、重心計算を行うべきタイミングであると判断し、重心計算フラグに「1」をセットし、サブルーチンSRT2−10を抜けてサブルーチンSRT2のステップSP102へ戻る。
一方、ステップSP132においてデコード処理部28は、重心計算を行うべきタイミングではないので、重心計算フラグに「0」を書き込んだ後、サブルーチンSRT2−10を抜けてサブルーチンSRT2のステップSP102へ戻る。
(3−2−1−2)4倍速モード重心計算判断処理手順
デコード処理部28は、4倍速モード重心計算判断処理を行う際、図31に示すように4倍速モードで重心座標を出力するためのタイミングとして、デコードステータスとデコードカウンタとの組み合わせが定められている。
具体的には、デコードステータス「2」でかつデコードカウンタ「3」のとき、デコードステータス「6」でかつデコードカウンタ「1」のとき、デコードステータス「9」でかつデコードカウンタ「1」のとき及びデコードステータス「0」でかつデコードカウンタ「1」のときであり、当然のように4倍速速モードにおけるIDの出力タイミングと同期しており(図18)、これ以外の組み合わせのときに重心座標を出力することはない。
4倍速モード重心計算判断処理の場合にも、6倍速モード重心計算判断処理と同様に、上述の組み合わせに示した条件にあうか否かを判断し、条件に合致すれば重心計算フラグに「1」をセットし、条件に合致しなければ重心計算フラグに「0」をセットするようになされている。
因みにIDイネーブルフラグ「1」となる条件判断は、6倍速モード重心計算判断処理手順と同様に、デコードステータス「0」のときはIDのビット「b7」をデコードしている検出フレームであるため特に必要はないが、デコードステータス「0」以外のときに重心を出力する判断を行うときには(すなわち等倍速モード以外のときには)、IDイネーブルフラグの値が「1」であることが必要である。
図32に示すように、デコード処理部28はサブルーチンSRT2−11の4倍速モード重心計算判断処理手順におけるステップSP141へ移り、デコードステータスの値が「2」であるか否かを判定し、肯定結果が得られると次のステップSP142へ移る。
ステップSP142においてデコード処理部28は、デコードステータス「2」のときにデコードカウンタ「3」であるか否かについて判定する。ここで、否定結果が得られると、このことはデコードカウンタの値が「3」ではないため4倍速モードにおいて重心計算を行うタイミングではないことを表しており、このときデコード処理部28は次のステップSP143へ移る。
ステップSP143においてデコード処理部28は、重心計算を行うべきタイミングではないとを判断したので、重心計算フラグに「0」をセットした後、サブルーチンSRT2−11を抜けてサブルーチンRT2のステップSP102へ移る。
これに対してステップSP142で肯定結果が得られると、このことはデコードステータス「2」のときにデコードカウンタ「3」であって重心計算を行うべきタイミングであることを示しており、このときデコード処理部28は次のステップSP146へ移る。
一方、ステップSP141で否定結果が得られると、デコード処理部28は次のステップSP144へ移り、デコードステータス「2」以外のときであって、デコードカウンタの値が「1」であるか否かを判定する。
ここで否定結果が得られると、このことはデコードステータス「2」以外のときでデコードカウンタ「1」のときはないこと、すなわち4倍速モードにおいて重心計算を行うべきタイミングではないことを表しており、このときデコード処理部28はステップSP150へ移って、重心計算フラグに「0」をセットした後、サブルーチンSRT2−11を抜けてサブルーチンRT2のステップSP102へ移る。
これに対してステップSP144で肯定結果が得られると、デコード処理部28は次のステップSP145へ移り、デコードカウンタ「1」のときにデコードステータス「6」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「6」でかつデコードカウンタ「1」であるので重心計算を行うべきタイミングであると判断し、このときデコード処理部28は次のステップSP146へ移る。
これに対してステップSP145で否定結果が得られると、このことはデコードカウンタ「1」でありながらデコードステータスの値が「2」及び「6」のいずれでもないことを表しており、このときデコード処理部28は次のステップSP147へ移る。
ステップSP147においてデコード処理部28は、デコードカウンタ「1」のときにデコードステータス「9」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「9」でかつデコードカウンタ「1」であるので重心計算を行うべきタイミングであると判断し、このときデコード処理部28は次のステップSP146へ移る。
ステップSP146においてデコード処理部28は、IDイネーブルフラグの値が「1」であるか否かを判定する。ここで否定結果が得られると、このことは未だIDの8ビットに対するデコード処理が一巡していないことを表しており、このときデコード処理部28は次のステップSP143へ移り、重心計算フラグの値を「0」にセットした後、サブルーチンSRT2−11を抜けてサブルーチンSRT2のステップSP102へ戻る。
これに対してステップSP146で肯定結果が得られると、このことはIDの8ビットに対するデコード処理が既に一巡し、当該IDの8ビットを既にデコード済みであり、2倍速モード又は4倍速モードでIDを出力することができ、かつ2倍速モード又は4倍速モードのタイミングに合わせて重心座標を出力し得ることを表しており、このときデコード処理部28は次のステップSP149へ移る。
これに対してステップSP147で否定結果が得られると、このことはデコードカウンタ「1」でありながらデコードステータスの値が「2」、「6」及び「9」のいずれでもないことを表しており、このときデコード処理部28は次のステップSP148へ移る。
ステップSP148においてデコード処理部28は、デコードカウンタ「1」のときにデコードステータス「0」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードカウンタ「1」であり、かつデコードステータス「0」であること、すなわちIDのビット「b7」をデコードすることによりIDの8ビット全てが揃ったことを表しており、このときデコード処理部28は次のステップSP149へ移る。
これに対してステップSP148で否定結果が得られると、このことはデコードカウンタ「1」でありながら、デコードステータスの値が「2」、「6」及び「9」のいずれでもなく、重心計算を行うべきタイミングではないことを表しており、このときデコード処理部28は次のステップSP150へ移る。
ステップSP149においてデコード処理部28は、IDの8ビットが全て揃ったので当該IDと共に重心座標を出力する必要があるときか、デコードステータス「2」、「6」、「9」のいずれかであってイネーブルフラグ「1」であることによりIDの8ビットが全て揃わなくても、未揃い分のビットについては前サイクルのデータを用いて出力することが可能なので、重心計算を行うべきタイミングであると判断し、重心計算フラグに「1」をセットし、サブルーチンSRT2−11を抜けてサブルーチンSRT2のステップSP102へ戻る。
一方、ステップSP150においてデコード処理部28は、重心計算を行うべきタイミングではないので、重心計算フラグに「0」をセットした後、サブルーチンSRT2−11を抜けてサブルーチンSRT2のステップSP102へ戻る。
(3−2−1−3)2倍速モード重心計算判断処理手順
デコード処理部28は、2倍速モード重心計算判断処理を行う際、図33に示すように2倍速モードで重心座標を出力するためのタイミングとして、デコードステータスとデコードカウンタとの組み合わせが定められている。
具体的には、デコードステータス「6」でかつデコードカウンタ「1」のとき及びデコードステータス「0」でかつデコードカウンタ「1」のときであり、当然のように2倍速速モードにおけるIDの出力タイミングと同期しており(図18)、これ以外の組み合わせのときに重心座標を出力することはない。
2倍速モード重心計算判断処理の場合にも、6倍速モード重心計算判断処理や4倍速モード重心計算判断処理と同様に、上述の組み合わせに示した条件にあうか否かを判断し、条件に合致すれば重心計算フラグに「1」をセットし、条件に合致しなければ重心計算フラグに「0」をセットするようになされている。
因みにIDイネーブルフラグ「1」となる条件判断は、6倍速モード重心計算判断処理手順や4倍速モード重心計算判断処理手順のときと同様に、デコードステータス「0」のときはIDのビット「b7」をデコードしている検出フレームであるため特に必要はないが、デコードステータス「0」以外のときに重心座標を出力する判断を行うときには(すなわち等倍速モード以外のときには)、IDイネーブルフラグの値が「1」であることが必要である。
図34に示すように、デコード処理部28はサブルーチンSRT2−12の2倍速モード重心計算判断処理手順におけるステップSP151へ移り、デコードカウンタの値が「1」であるか否かを判定する。
ここで否定結果が得られると、このことは2倍速モードのときにはデコードカウンタ「1」以外のときに重心計算を行うタイミングは存在しないことを表しており、このときデコード処理部28は次のステップSP152へ移る。
ステップSP152においてデコード処理部28は、重心計算を行うべきタイミングではないと判断したので、重心計算フラグに「0」をセットした後、サブルーチンSRT2−12を抜けてサブルーチンSRT2のステップSP102へ移る。
これに対してステップSP151で肯定結果が得られると、このことはデコードカウンタ「1」であって重心計算を行うべきタイミングである可能性があることを示しており、このときデコード処理部28は次のステップSP153へ移る。
ステップSP153においてデコード処理部28は、デコードカウンタ「1」のときにデコードステータス「6」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「6」でかつデコードカウンタ「1」であるので重心計算を行うべきタイミングであると判断し、このときデコード処理部28は次のステップSP154へ移る。
ステップSP154においてデコード処理部28は、IDイネーブルフラグの値が「1」であるか否かを判定する。ここで否定結果が得られると、このことは未だIDの8ビットに対するデコード処理が一巡していないことを表しており、このときデコード処理部28は次のステップSP155へ移る。
これに対してステップSP154で肯定結果が得られると、このことはIDの8ビットに対するデコード処理が既に一巡し、当該IDの8ビットを既にデコード済みであり、2倍速モードでIDを出力するタイミングに合わせて重心座標を出力し得ることを表しており、このときデコード処理部28は次のステップSP156へ移る。
ステップSP155においてデコード処理部28は、デコードステータス「6」のときにデコードカウンタ「1」ではあるものの、IDイネーブルフラグの値が「0」であるために2倍速モードで重心座標を出力することはできないと判断し、このとき重心計算フラグに「0」をセットした後、サブルーチンSRT2−12を抜けてサブルーチンSRT2のステップSP102へ移る。
これに対してステップSP153で否定結果が得られると、このことはデコードカウンタ「1」でありながらデコードステータス「6」ではないことを表しており、このときデコード処理部28は次のステップSP157へ移る。
ステップSP157においてデコード処理部28は、デコードカウンタ「1」のときにデコードステータス「0」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「0」でかつデコードカウンタ「1」であるので重心計算を行うべきタイミングであると判断し、このときデコード処理部28は次のステップSP156へ移る。
ステップSP156においてデコード処理部28は、IDの8ビットが全て揃ったので当該IDと共に重心座標を出力する必要があるときか、デコードステータス「6」でかつデコードカウンタ「1」であってイネーブルフラグの値が「1」であることによりIDの8ビットが全て揃わなくても、未揃い分のビットについては前サイクルのデータを用いて出力することが可能であるときなので、重心計算を行うべきタイミングであると判断し、重心計算フラグに「1」をセットし、サブルーチンSRT2−12を抜けてサブルーチンSRT2のステップSP102へ戻る。
これに対してステップSP157で否定結果が得られると、このことはデコードカウンタ「1」でありながらデコードステータス「6」でも、デコードステータス「0」でもないことを、すなわち重心計算を行うべきタイミングではないことを表しており、このときデコード処理部28は次のステップSP152へ移る。
ステップSP152においてデコード処理部28は、重心計算を行うべきタイミングではないので、重心計算フラグに「0」をセットした後、サブルーチンSRT2−11を抜けてサブルーチンSRT2のステップSP102へ戻る。
(3−2−1−4)等倍速速モード重心計算判断処理手順
デコード処理部28は、等倍速速モード重心計算判断処理を行う際、図35に示すように等倍速モードで重心出力を行うためのタイミングとして、デコードステータスとデコードカウンタとの組み合わせが定められている。
具体的には、デコードステータス「0」でかつデコードカウンタ「1」の組み合わせのときだけであり、当然のように等倍速速モードにおけるIDの出力タイミングと同期しており(図18)、これ以外の組み合わせのときに重心座標を出力することはない。
等倍速速モード重心計算判断処理の場合にも、他の6倍速モード重心計算判断処理等と同様に、上述の組み合わせに示した条件にあうか否かを判断し、条件に合致すれば重心計算フラグに「1」をセットし、条件に合致しなければ重心計算フラグに「0」をセットするようになされている。
因みに、この場合は等倍速速モードだけであるので、フラグレジスタ57におけるIDイネーブルフラグを用いることはなく、その判断処理は省略されている。
図36に示すように、デコード処理部28はサブルーチンSRT2−13の等倍速速モード重心計算判断処理手順におけるステップSP161へ移り、デコードカウンタの値が「1」であるか否かを判定する。
ここで否定結果が得られると、このことは等倍速速モードのときにはデコードカウンタ「1」以外のときに重心計算を行うタイミングは存在しないことを表しており、このときデコード処理部28は次のステップSP164へ移る。
ステップSP164においてデコード処理部28は、重心計算を行うべきタイミングではないと判断したので、重心計算フラグに「0」をセットした後、サブルーチンSRT2−13を抜けてサブルーチンSRT2のステップSP102へ移る。
これに対してステップSP161で肯定結果が得られると、このことはデコードカウンタの値が「1」であって重心計算を行うべきタイミングである可能性があることを示しており、このときデコード処理部28は次のステップSP162へ移る。
ステップSP162においてデコード処理部28は、デコードカウンタ「1」のときにデコードステータス「0」であるか否かを判定する。
ここで肯定結果が得られると、このことはデコードステータス「0」でかつデコードカウンタ「1」ではないので重心計算を行うべきタイミングではないと判断し、このときデコード処理部28は次のステップSP164へ移り、重心計算フラグに「0」をセットした後、サブルーチンSRT2−13を抜けてサブルーチンSRT2のステップSP102へ移る。
これに対してステップSP162で肯定結果が得られると、このことはデコードステータス「0」であり、デコードカウンタ「1」であること、すなわち重心計算を行うタイミングであると判定することができるので、このときデコード処理部28は次のステップSP163へ移る。
ステップSP163においてデコード処理部28は、重心計算を行うべきタイミングなので、重心計算フラグに「1」をセットした後、サブルーチンSRT2−13を抜けてサブルーチンSRT2のステップSP102へ戻る。
(4)動作及び効果
以上の構成において、ID認識システム1におけるIDカメラ3は、光ビーコン2から発信される光の点滅パターンをイメージセンサ21又は機能性イメージセンサ50により撮像し、当該点滅パターンをデコードすることによりマンチェスタ符号化前の8ビットでなるIDを復元すると共に、当該光ビーコン2の画面上での位置(重心座標)を検出し、これらをIDデータとして出力する。
このときIDカメラ3は、当該IDデータをビデオフレームの垂直同期信号(Vsinc)のタイミングまで待つことなく8ビット全てが揃った段階(等倍速モード)で直ちに出力することにより、従来のように垂直同期信号(Vsinc)のタイミングまで待って出力する場合と比較して、等倍速モードでさえID出力周期を約3倍も短縮することができる。
またIDカメラ3は、デコード処理によってマンチェスタ符号化前のIDが8ビット全て揃ってから出力する等倍速モードばかりではなく、1周期前の前サイクルで既に8ビットのIDを全てデコードできていた場合には、現時点でデコード処理によって復元できたIDにおける前半部分の値と、前サイクルで既に復元された当該IDにおける後半部分の値とを併せて合計8ビットのIDを生成して出力することができるので、1周期の2倍周期すなわち2倍速モードや、4倍周期すなわち4倍速モードや、6倍周期すなわち6倍速モードでIDデータを出力することも可能である。
これによりIDカメラ3としては、10000[fps]の機能性イメージセンサ50を用いて6倍速モードを選定すれば、特別に構成を複雑化することなく1248[Hz]の高速なID出力周期を可能とすることができる。一方、IDカメラ3では、500[fps]程度のイメージセンサ21を用いた場合であっても、6倍速モードを選定すればビデオフレームのフレーム周波数30[Hz]の約2倍に相当する60[Hz]のID出力周期についても容易に実現することができる。
このようにIDカメラ3では、ハードウェア的な構成を追加したり、イメージセンサ21又は機能性イメージセンサ50のフレームレートを上げるのではなく、倍速モードを選定してIDの8ビットが揃った時点で垂直同期信号(Vsinc)とは無関係にIDを出力することにより、ID周期を従来に比して大幅に短縮することができ、かくして複雑な回路構成を必要としたり、また消費電力を増加させることなく光ビーコン2に対するトラッキングを実現することができる。
またIDカメラ3のデコード処理部28は、注目画素だけに着目してデコード処理するのではなく、その周辺画素を含めたウィンドウ領域Wについてデコード処理し、その中で1つでも有意な受光情報が得られれば、注目画素のデコード結果をCPw(n)=1(又はCMw(n)=1)として出力するようにしたことにより、光ビーコン2Aが高速に移動して当該IDカメラ3と当該光ビーコン2Aとの相対位置が激しく変化したときであっても、時系列の点滅パターンとして発信される光をウィンドウ領域Wにおける複数の画素で捉えることができるので、当該複数画素の受光情報に基づいて重心座標を算出し正確な位置検出を行うことができる。
さらに、このときIDカメラ3のデコード処理部28は、複数画素で同一番号のIDを復元することになるが、複数画素で捉えられたIDの重心座標を算出することにより、高速移動中の光ビーコン2Aにおける画面上での位置を一段と正確に検出することができるので、モーションキャプチャやユーザインタフェース等にも用いることができる。
以上の構成によれば、IDカメラ3のデコード処理部28は、デコード後におけるマンチェスタ符号化前のIDが8ビット揃った段階で直ちに出力することにより、従来のように垂直同期信号(Vsinc)のタイミングまで待って出力する場合と比較して、ID出力周期を格段に短縮したトラッキングを実現することができる。
またIDカメラ3のデコード処理部28は、1周期前の前サイクルで既に8ビットのIDを全てデコードできていた場合には、現時点でデコード処理によって復元できたIDにおける前半部分の値と、前サイクルで既に復元された当該IDにおける後半部分の値とを併せた合計8ビットのIDとして出力することにより、2倍速モード、4倍速モード又は6倍速モードでIDを出力することができ、かくしてフレームレートの高くないイメージセンサであっても倍速モードを選定することによってイメージセンサ21又は機能性イメージセンサ50の能力以上の速い周期でIDを出力することができる。
(5)他の実施の形態
なお上述の実施の形態においては、デコード処理部28を図16に示したようなハードウェアによって構成するようにした場合について述べたが、本発明はこれに限らず、十分高速なマイクロプロセッサやDSP(Digital Signal Processor)を用いてソフトウェアによって構成するようにしても良い。
また上述の実施の形態においては、8ビットのIDを「10」又は「01」でなる2ビットのマンチェスタ符号に符号化するようにした場合について述べたが、本発明はこれに限らず、データ送信区間に必ず点滅させて光の変化を検出することができるのであれば、3ビットや4ビットのその他種々の符号を用いるようにしてもよい。
さらに上述の実施の形態においては、データ出力制御プログラムに従い「X座標の和」、「Y座標の和」及び「認識画素数」を用いて重心座標を計算するようにした場合について述べたが、本発明はこれに限らず、画素単位で重み付けを行うことにより重心座標を計算するようにしても良い。
さらに上述の実施の形態においては、IDカメラ3がROM等に予め格納されたデータ出力制御プログラムに従ってIDモードにおけるメイン処理手順等を実行するようにした場合について述べたが、本発明はこれに限らず、データ出力制御プログラムが格納されたプログラム格納媒体をIDカメラ3にインストールすることにより上述のIDモードにおけるメイン処理手順を実行するようにしても良い。
さらに上述の実施の形態においては、本発明を情報処理装置としてのIDカメラ3に適用するようにした場合について述べたが、本発明はこれに限らず、イメージセンサ等が搭載されたパーソナルコンピュータ、PDA(Personal Digital Assistant)、携帯電話機等に適用するようにしても良い。
さらに上述の実施の形態においては、本発明の情報処理装置又は受信装置としてのIDカメラ3を、送信装置としての光ビーコン2により所定の点滅パターンで発光する光を2次元受光面を介して受光する受光手段としてのイメージセンサ21又は機能性イメージセンサ50と、当該イメージセンサ21又は機能性イメージセンサ50により受光された受光信号を処理し、当該受光信号の点滅パターンに基づいて光ビーコン2からの送信データをデコードするデコード手段としてのデコード処理部28とによって構成するようにした場合について述べたが、本発明はこれに限らず、その他種々の回路構成で情報処理装置としてのIDカメラ3を構成するようにしても良い。
1……ID認識システム、2……光ビーコン、3……IDカメラ、10……光源、11……点滅制御部、12……送信データ保存用メモリ、13……データ送受信部、14……通信路、20……レンズ、21……イメージセンサ、22……アナログディジタル変換回路、23……映像用フレームメモリ、24……画像処理部、25、52……差分取得用フレームメモリ、26……比較部、27……ウィンドウ処理部、28……デコード処理部、31……正のMフレーム間差分計算部、32、34、53……コンパレータ、33……負のMフレーム間差分計算部、36〜38、40〜42……ディレイライン、39、43……OR演算処理回路、50……機能性イメージセンサ、51……受光部、55……IDデコード回路部、56……IDデコード回路、57……フラグレジスタ、58……データレジスタ、60……タイミング制御部、61……ID重心計算回路、62……重心出力フラグ、63……ID座標格納メモリ、64……除算回路、65……IDデコード用フレームメモリ。