以下、本発明の実施形態を図面に基づいて説明する。
<1.第1実施形態>
<1-1.システム概要>
図1は、計数システム10(詳細にはその一部)を示す概略外観図であり、図2は計数システム10の機能ブロックを示す図である。計数システム10は、同一種類(同一サイズ)の複数の梱包箱72が複数段(複数層)に亘って積層されている状態(図1参照)において、当該複数の梱包箱72の個数を計数するシステムである。図1では、床面90上に物流用のパレット80が配置され、当該パレット80上に当該複数の梱包箱72(梱包箱群70)が4段(4層)に亘って積層されている。
計数システム10は、たとえば、入荷検品、出荷検品、在庫確認などの作業に利用される。
図1および図2に示すように、計数システム10は、カメラユニット20と計数装置(計数処理ユニット)30とを備える。なお、ここでは、カメラユニット20と計数装置30とが別々に設けられているが、これに限定されず、カメラユニット20と計数装置30とが一体化されて設けられてもよい。換言すれば、計数装置30がカメラユニット20を内蔵してもよい。
カメラユニット20は、TOF(Time of Flight)方式等の3次元カメラである。当該カメラユニット20は、深度情報(距離情報)付き撮影画像を取得する。具体的には、カメラユニット20は、被写体物体(積層された複数の梱包箱および床面等)の撮影画像(例えばカラー画像)110(図6参照)を撮像するとともに、撮影画像110内の各画素の深度情報(奥行き距離情報)120を取得する。撮影画像内の各画素の深度情報(距離情報)120は、撮影画像110内の各画素に対応する被写体物体までの距離(カメラユニット20からの距離)の情報であって当該撮影画像110に垂直な方向における距離の情報である。換言すれば、当該深度情報は、撮影画像平面の法線方向における距離情報(奥行き距離情報)である。なお、カメラユニット20は、撮影画像として、グレースケール画像を撮像してもよい。
カメラユニット20は、複数の梱包箱72(梱包箱群70)が複数段に亘って積層されている状態において当該複数の梱包箱72の上面を上方から見た撮影画像を撮影することが可能である。具体的には、カメラユニット20は、複数の梱包箱72のうち最上段の梱包箱の上面よりも更に上方に離間した位置において鉛直下向きに固定されている。カメラユニット20は、カメラ固定部材27,28によって固定されている。カメラ固定部材27は、床面に固定され鉛直方向に伸延する支柱部材であり、カメラ固定部材28は、支柱部材27の最上部付近から梱包箱群70の上方位置に向けて水平方向に伸延する梁(はり)部材である。カメラユニット20は、カメラ固定部材28の先端部付近(且つ梱包箱群70の上方且つ上面視中央付近)において鉛直下向きに固定されている。
カメラユニット20は、コントローラ21、センサ部23および撮影レンズ25(図1)等を備えている。
センサ部23は、可視光画像(カラー画像等)を撮像するRGB画像センサ等を備えており、カラー画像(あるいはグレースケール画像)を撮影することが可能である。また、各種の方式(TOF方式等)の原理によって、奥行き距離情報が算出される。当該奥行距離情報の算出処理は、カメラユニット20内に組み込まれたコントローラ21等によって実行される。コントローラ21は、コントローラ31(後述)等と同様のハードウエア構成(CPU等)を備える。
このような構成によって、カメラユニット20は、被写体物体(梱包箱群70および床面90等)に関する撮影画像(撮影画像情報)110(図6参照)と当該撮影画像内の被写体物体までの距離の情報を示す距離画像(深度情報)120とを生成(取得)する。
なお、ここでは、カメラユニット20として、TOF(Time of Flight)方式の3次元カメラを例示するが、これに限定されない。カメラユニット20は、ステレオ視方式の3次元カメラ、あるいは、その他の任意の方式の3次元カメラであってもよい。
カメラユニット20と計数装置30とは有線接続されており、カメラユニット20で取得された情報(撮影画像情報110および深度情報120等)は、所定の接続ケーブルを介してカメラユニット20から計数装置30に送信される。なお、これに限定されず、カメラユニット20と計数装置30とは無線接続されてもよい。
計数装置30は、コントローラ31と記憶部32と操作部35とを備える。
コントローラ31は、計数装置30に内蔵され、計数装置30の動作を制御する制御装置である。
コントローラ31は、CPU(Central processing Unit)(マイクロプロセッサあるいはハードウエアプロセッサなどとも称される)等を備えるコンピュータシステムとして構成される。コントローラ31は、CPUにおいて、記憶部(ROMおよび/またはハードディスクなどの不揮発性記憶部)32内に格納されている所定のソフトウエアプログラム(以下、単にプログラムとも称する)を実行することによって、各種の処理を実現する。なお、当該プログラム(詳細にはプログラムモジュール群)は、USBメモリなどの可搬性の記録媒体に記録され、当該記録媒体から読み出されて計数装置30にインストールされるようにしてもよい。あるいは、当該プログラムは、通信ネットワーク等を経由してダウンロードされて計数装置30にインストールされるようにしてもよい。
コントローラ31は、被写体物体に関する撮影画像情報110および深度情報120をカメラユニット20から取得する。そして、コントローラ31は、被写体物体に関する3Dクラウドデータ130(点群データ)(換言すれば、被写体物体に関する3次元位置情報150)を生成(取得)する。
また、コントローラ31は、被写体物体(特に、積層された複数の梱包箱72)に関する3次元位置情報150に基づいて、当該複数の梱包箱72の個数を計数する。
記憶部32は、ハードディスクドライブ(HDD)あるいはソリッドステートドライブ(SSD)等の記憶装置で構成される。記憶部32は、複数の種類の梱包箱のサイズ情報が登録されているデータベース33等を有している。
操作部35は、計数装置30に対する操作入力を受け付ける操作入力部35aと、各種情報の表示出力を行う表示部35bとを備えている。たとえば、操作入力部35a(受付部とも称される)は、複数の梱包箱の種類情報の入力を受け付ける。また、表示部35bは、積層された複数の梱包箱72の個数に関する計数結果を表示する。操作入力部35aとしてはマウス、キーボード等が用いられ、表示部35bとしてはディスプレイ(液晶ディスプレイ等)が用いられる。また、操作入力部35aの一部としても機能し且つ表示部35bの一部としても機能するタッチパネルが設けられてもよい。
なお、計数装置30は、撮影画像等に関する画像処理を実行する装置であることから、画像処理装置であるとも表現される。また、計数システム10は、画像処理システムなどとも表現される。
<1-2.計数対象の複数の梱包箱について>
計数装置30は、同一種類の複数の梱包箱72が複数段に亘って積層されている状態(図1参照)において、当該複数の梱包箱72(梱包箱群70)の個数を計数する。
ここにおいて、各梱包箱72は、略直方体形状を有している。また、同一種類の複数の梱包箱72は、互いに同じサイズ(幅W、奥行きD、および高さH)(W>D)を有している。同一種類(同一サイズ)の当該複数の梱包箱72は、各段(各層)において様々な配置規則(配置パターン)に従って配置される。
図3は、梱包箱群70の一の積載例を示す図である。図3は、各段(各層)に積載された梱包箱72を上方から見た図である。図3の最も下側には、第1段(最下段)の配置パターン(配列パターンあるいは積載パターンとも称する)が示されており、その上側に第2段の配置パターンが示されている。また、更にその上側に第3段の配置パターンが示されており、最も上側には第4段(最上段)の配置パターンが示されている。図3の積載例では、奇数段の配置パターンと偶数段の配置パターンとが互いに異なっている。本実施形態の計数手法によれば、段ごとの配置パターンが異なっている場合(図3のように全ての段の配置パターンが必ずしも同じでない場合等)においても、梱包箱群70の個数を計数することが可能である。
図3(図1等も参照)では、パレット80の直上の第1段(第1層)において、10個の梱包箱72が配置されている。詳細には、左端側に4個の梱包箱72が手前(図3の下側)から奥(図3の上側)に向かって同じ向き(幅W方向が左右方向になる向き(以下、「横向き」とも称する))に配列されている。また、右端側にも4個の梱包箱72が手前(図3の下側)から奥(図3の上側)に向かって同じ向き(「横向き」)で配列されている。また、左端側に配列された4個の梱包箱72と右端側に配列された4個の梱包箱72との間に2個の梱包箱72が「縦向き」(幅W方向が奥行き方向になる向き)に配列されている。ただし、当該2個の梱包箱72は、図3の各段の中央部分における空洞部分(図3の黒色部分)を挟んで配置される。詳細には、当該2個の梱包箱72のうち手前側の梱包箱72は、その前端面を左右の梱包箱72の前端面に合わせるように配置される。また、当該2個の梱包箱72のうち奥側の梱包箱72は、その奥側の端面(後端面)をその左右の梱包箱72の奥側の端面(後端面)に合わせるように配置される。
第2段(第2層)においても、10個の梱包箱72が配置されている。ただし、当該10個の梱包箱72は、第1段の配置パターンに対して90°回転した配置パターンで配置される。具体的には、前列に4個の「縦向き」の梱包箱72が左右方向に配列されるとともに、後列にも4個の「縦向き」の梱包箱72が左右方向に配列される。また、前列と後列との間には2個の「横向き」の梱包箱72が配置される。当該2個の「横向き」の梱包箱72は、中央の空洞部分を挟んで配置される。
第3段(第3層)においては、第1段と同じ配置パターン(第2段とは異なる配置パターン)で複数の梱包箱72が配置される。ただし、第3段においては、9個の梱包箱72が配置される。換言すれば、1段あたりの最大積載数10個よりも1個少ない個数(9個)が配置される。具体的には、10個の配置可能箇所のうちの1箇所(詳細には、左列における4個の「横向き」の配置箇所のうち最も手前の配置箇所)には梱包箱72が配置されていない。一方、残りの9個の配置箇所に9個の梱包箱72が配置されている。
第4段(第4層)においては、第2段と同じ配置パターン(第1段および第3段とは異なる配置パターン)で複数の梱包箱72が配置される。ただし、第4段においては、5個の梱包箱72が配置される。具体的には、前列における「縦向き」の4個の配置箇所のうち右端の配置箇所にのみ1個の梱包箱72が配置されており、後列における「縦向き」の4個の配置箇所のうち左端の配置箇所を除く3つの配置箇所に3個の梱包箱72が配置されており、後列と前列との間隙における「横向き」の2個の配置箇所のうち左側の配置箇所にのみ1個の梱包箱72が配置される。
図3では、このように合計34個(=10+10+9+5)の梱包箱72(梱包箱群70)が積層されている。
<1-3.計数原理>
この実施形態に係る計数システム10(計数装置30)は、このような梱包箱群70に含まれる梱包箱72の個数を次のような原理によって計数する。
具体的には、計数装置30は、各段に存在する少なくとも1つの梱包箱の上面領域のうち、(上面視において)当該各段よりも上段(各段よりも上の段)の梱包箱で隠されずに表出している領域(以下、「表出領域」とも称する)の面積を求める。カメラユニット20は、上述のように梱包箱群70を上方から撮影することによって、各段の上面領域(特に表出領域)の情報を生成(取得)することが可能である。なお、図4の右列に示される段ごとの配置例において、斜線ハッチングが付された領域が各段の「表出領域」である。
また、計数装置30は、各段に存在する少なくとも1つの梱包箱のうち、当該各段(第i段)よりも上段の梱包箱で隠されずにその上面が表出している梱包箱の個数(以下、「みなし表出個数」あるいは単に「表出個数」とも称する)Niを段ごとに推定する。各段(第i段)の表出個数Niは、各段(第i段)の表出領域Eiの面積Fiと個々の梱包箱の平面サイズ(W,D)とに基づいて推定される。たとえば、面積Fiを個々の梱包箱の平面占有面積G(=W*D)で除算した際の商Q(整数値)あるいは値(Q+1)が、(余りMの大きさに応じて)表出個数Niの推定値として算出される。詳細には、面積Fiを個々の梱包箱の平面占有面積(=W*D)で除算した際の余りMが所定値M1(たとえば、M1=0.2*W*D)より小さい場合(たとえば、M=0.05*W*Dの場合)、その除算の際の商Qが表出個数Niの推定値として算出される。また、その除算の際の当該余りMが所定値M2(ただし、M2≧M1であり、たとえば、M2=W*D-M1)より大きい場合(たとえば、M=0.95*W*Dの場合)、商Qに1を加えた値(Q+1)が表出個数Niの推定値として算出される。なお、これに限定されず、面積Fiを個々の梱包箱の平面占有面積(=W*D)で除算した際の演算結果の小数点以下を四捨五入した整数値(Qあるいは(Q+1))が表出個数Niの推定値として算出されてもよい。
さらに、計数装置30は、各段の上面領域の高さと個々の梱包箱の高さとに基づいて、当該各段までの梱包箱の積層段数Liを段ごとに算出する。
そして、計数装置30は、各段の表出個数Niに当該各段までの積層段数Liを乗じた数Pi(=Ni*Li)を、複数段に亘って積算(合算)することによって、積層されている複数の梱包箱72の個数Nsumを算出する。
図4は、図3の積載例に関して、各段の表出領域Eiおよび表出個数Niを示す図である。図4の左列においては各段の積載個数等が示されており、図4の右列においては各段の表出領域Ei(斜線ハッチングが付された領域)および表出個数Niが示されている。なお、各段において砂地ハッチングが付された部分は、当該各段よりも上段の梱包箱72によって覆われている部分を示す。たとえば、第3段の砂地ハッチング部分は、第4段の梱包箱72によって覆われている部分を示しており、第2段の砂地ハッチング部分は、第3段および第4段の梱包箱72によって覆われている部分を示している。
図4の右列に示されるように、第4段の表出個数N4は「5個」である。また、第3段の表出個数N3は、第3段の積載個数(9個)から第4段の表出個数(5個)を差し引いた個数、すなわち「4個」である。さらに、第2段の表出個数N2は、第2段の積載個数(10個)から、第3段の表出個数(4個)と第4段の表出個数(5個)とを差し引いた個数、すなわち「1個」である。また、第1段の表出個数N1は、第1段の積載個数(10個)から、第2段の積載個数(1個)と第3段の表出個数(4個)と第4段の表出個数(5個)とを差し引いた個数、すなわち「0個」である。
上述の手法においては、各段の表出個数Niに各段までの積層段数Liを乗じた数Pi(=Ni*Li)を合算することによって、梱包箱群70の個数Nsumが計数される(Nsum=ΣPi=Σ(Ni*Li))(図11も参照)。第4段の積層段数は「4」であり、第3段の積層段数は「3」であり、第2段の積層段数は「2」であり、第1段の積層段数は「1」である。したがって、梱包箱群70の個数Nsumは、34個(=5*4+4*3+1*2+0*1=20+12+2+0)、と算出される。
この手法においては、各段での配置パターンが異なっている場合であっても、第i段の表出領域Eiの下側には、当該表出領域Eiの面積Fi(上面面積)に対応する個数Niの梱包箱72が最下段から当該第i段までの段ごとに存在すると仮定される。そして、そのような仮定に基づき、積Pi(=Ni*Li)および合計個数Nsum(=ΣPi)が算出される。
<1-4.コントローラ31等における処理>
図5は、計数装置30(詳細にはコントローラ31)における処理を示すフローチャートである。以下、図5を参照しつつ当該処理について説明する。
ステップS11において、計数装置30(コントローラ31)は、複数の梱包箱72に関する個々の梱包箱のサイズ情報(W,D,H)を取得する。たとえば、計数対象の梱包箱72の種類を特定するための情報(梱包箱72の種類情報)を、本システムのオペレータ(操作ユーザ)が操作入力部35aを介して入力する。種類情報としては、たとえば、梱包箱72に梱包される商品コードあるいは商品名などの情報が入力されればよい。そして、コントローラ31は、入力された梱包箱72の種類情報と、複数の種類の梱包箱のサイズ情報が登録されているデータベース33とに基づいて、個々の梱包箱72のサイズ情報を取得する。より具体的には、当該種類情報に基づいて梱包箱72の種類が特定され、当該特定された種類の梱包箱72のサイズ情報(W,D,H)がデータベース33の中から抽出されて取得される。
次に、ステップS12において、カメラユニット20は、撮影画像110および深度情報120を生成し、コントローラ31に受け渡す。コントローラ31は、複数段に亘って積層されている複数の梱包箱72に関する3次元位置情報を、カメラユニット20からの撮影情報等(撮影画像110および深度情報120)に基づいて取得する。
図6は、撮影画像110および深度情報120を示す概念図である。なお、図6では、撮影画像110および深度情報120等はそれぞれ模式的に示されている。たとえば、実際の深度情報120は、各画素に対応する物体までの距離の情報を有しているのに対して、図6の深度情報120では、各画素に対応する物体までの距離が各画素の濃度に換算されて表現されている。詳細には、カメラからの距離が大きくなるにつれて濃度が小さく(薄く)なるように表現されている。
ステップS12において、コントローラ31は、このような撮影画像110および深度情報120に基づいて、被写体物体(梱包箱群70等)の表面(ひょうめん)に関する3次元データ130(ポイントクラウドデータ(点群データ))を生成する(図8参照)。換言すれば、コントローラ31は、被写体物体の各部分(各表面部分)の撮影画像内での平面位置に関する情報と当該各部分までの距離情報(奥行き情報)とに基づいて、各部分の3次元位置情報150(実空間内での3次元位置情報)を取得する。なお、図8は、撮影画像110および深度情報120に基づいて生成される3次元データ130を示す図である。
詳細には、コントローラ31は、各部分の3次元位置情報150(実空間内での3次元位置情報)を、座標系Σ2で表現された情報として取得する。具体的には、コントローラ31は、カメラ座標系Σ1での位置情報(撮影画像内での平面位置および撮影画像の法線方向における奥行き位置)を、作業空間(詳細にはその床面等)に対して固定された座標系Σ2での3次元位置情報150へと変換する。カメラ座標系Σ1は、たとえば、撮影画像平面に平行な直交2軸と当該撮影画像平面に垂直な方向に伸びる1軸との直交3軸を基準とする3次元直交座標系である。また、変換後の座標系Σ2は、たとえば、水平平面に平行な直交2軸と鉛直方向(高さ方向)に伸びる1軸との直交3軸を基準とする3次元直交座標系である。
このようにして、コントローラ31は、被写体物体の各部分の3次元位置情報150を取得(算出)する。具体的には、ポイントクラウドデータ130(点群データ)における各微小領域(撮影画像の各画素に対応する微小部分(微小領域))の3次元位置の情報が取得される。
次のステップS13において、コントローラ31は、ポイントクラウドデータ(点群データ)を、上面表出領域データ160と床面レベル領域データ190とに分類する(図9参照)。床面レベル領域データ190は、床面レベル領域(床面の高さを有する領域)に関するデータであり、上面表出領域データ160は、梱包箱群70の上面領域(詳細には上面領域のうちの表出領域)に関するデータである。なお、図9は、ポイントクラウドデータ(点群データ)が、上面表出領域データ160と床面レベル領域データ190とに分類される様子等を概念的に示す図である。
コントローラ31は、撮影画像110内において梱包箱群70(図6参照)の外側部分の領域(カメラユニット20から最も遠く離れた領域)を床面レベル領域として判定する。図9の床面レベル領域データ190においては、床面レベル領域は、白抜き部分の外側のグレー領域として示されている。そして、コントローラ31は、床面レベル領域の3次元位置情報に基づき、床面の高さを算出する。たとえば、当該床面レベル領域の高さの平均値が床面の高さとして求められればよい。なお、事前にキャリブレーションを行っておくことによって、床面の高さはゼロに設定され得る。
図7の上段には、図6のI-I断面における、カメラから被写体物体の表面までの距離情報が示されている。なお、横軸方向における左端側の範囲B0は、最も大きな距離を有する部分であり、床面に対応する部分である。また、その右側の範囲B2(次順位の距離を有する部分)は、第2段の表出領域E2に対応する部分である。さらに、その右側の範囲B3(更に次順位の距離を有する部分)は、第3段の表出領域E3に対応する部分である。そして、さらにその右側の範囲B4は、最も小さな距離を有する部分であり、第4段の表出領域E4に対応する部分である。また、最も右側の範囲B5(再び最も大きな距離を有する部分)は、床面に対応する部分である。
一方、図7の下段には、変換後の座標系Σ2における各部分の高さが示されている。図7の下段においては、床面レベル領域(部分B0,B5に対応)の高さがゼロに設定されている。
また、コントローラ31は、上面視において梱包箱群70の下に隠されている床面の面積(換言すれば、梱包箱群70による床面占有領域192(図9)の面積)をも算出する。床面占有領域192の面積(床面占有面積)は、簡易的に算出されてもよい。たとえば、梱包箱群70の上方から撮影した撮影画像における梱包箱群70を包囲するような外接矩形領域194の面積が、当該床面占有面積(概算値)として算出されてもよい。なお、当該床面占有面積(矩形領域194の面積等)は、第1実施形態では特には利用されず、第2実施形態等において利用される。
ステップS13において、コントローラ31は、さらに上面表出領域データ160(詳細には複数段の上面表出領域データ)を段ごとに分類する(図9および図10参照)。なお、図10は、複数段の上面表出領域データ160が段ごとに分類される様子等を概念的に示す図である。図10においては、第4段、第3段、第2段、第1段の各段の上面表出領域データ(162a,162b,162c,162d)に分類されている。図10においては、各段の上面領域が段ごとの固有の濃さで表現されており、互いに異なる段の上面表出領域データ(162a,162b,162c)は、互いに異なる濃さで表現されている。詳細には、第4段(最上段)の上面領域(表出領域)が最も濃く示されており、下段にいくにつれて徐々に薄く示されている。
たとえば、コントローラ31は、まず、各段(第i段)の上面領域(表出領域)の暫定高さZi(上面領域の高さZiの暫定値)を座標系Σ2において次のようにして定める。
具体的には、第i段(i=1,...,Lmax;ただし、Lmaxは、梱包箱群70全体の積層段数)の上面領域の暫定高さZiは、第(i-1)段の上面領域の暫定高さZ(i-1)に1段分の梱包箱72の高さHを更に加えた高さとして算出される(Zi=Z(i-1)+H)。ただし、i=1のときには、第0段の上面領域の暫定高さとして基準面81の高さが用いられればよい。換言すれば、第1段の上面領域の暫定高さは、基準面81の高さに1段分の梱包箱72の高さHを更に加えた高さとして算出されればよい。
ここで、基準面(基準水平面)81(図1参照)は、最下段(第1段)の梱包箱が積載される水平面である。当該基準面81の高さZ0は、床面の高さ(たとえばゼロ)にパレット80の高さhを加えた高さである(図7の下段も参照)。パレット80の高さhとしては、データベース33に予め登録されていた値が用いられればよい。
このようにして、各段(第i段)の上面領域の暫定高さZiが求められる(図7の下段も参照)。たとえば、第1段(最下段)の上面領域の暫定高さZ1は、基準面(基準水平面)81(図1参照)の高さZ0に対して1段分の梱包箱72の高さHを加えた高さとして算出される(Z1=Z0+H)。また、第2段の上面領域の暫定高さZ2は、第1段の上面領域の暫定高さZ1に1段分の梱包箱72の高さHを更に加えた高さとして算出される(Z2=Z1+H)。第3段の上面領域の暫定高さZ3は、第2段の上面領域の暫定高さZ2に1段分の梱包箱72の高さHを更に加えた高さとして算出される(Z3=Z2+H)。他の段に関しても同様である。なお、梱包箱群70全体の積層段数Lmax(すなわち最上段の段数)は、最も上方側の被写体(梱包箱72)の3次元位置(高さ)と基準面81の高さZ0との差分値を梱包箱72の高さHで除した値に基づいて推定されればよい。
そして、コントローラ31は、ポイントクラウドデータのうち各段(第i段)の上面領域の暫定高さZiに対して所定範囲(±ΔZ)内の高さを有するデータに対応する部分平面領域Ui(2次元領域)を、当該各段(第i段)の上面領域として分類する(図7参照)。換言すれば、各段に関する部分平面領域Uiが各段の上面領域(詳細には、上面領域のうちの表出領域)を構成する。なお、梱包箱群70全体の積層段数Lmaxは、空集合でない部分平面領域Ui(あるいは所定数以上の要素で構成される部分平面領域Ui)に関する値iの最大値として求められてもよい。
なお、ここでは、各段(第i段)の上面領域の暫定高さが床面の高さ(ひいては基準面81の高さZ0)を基準に算出されているが、これに限定されない。たとえば、逆に、ポイントクラウドデータ130に含まれる最も上方側の被写体(梱包箱72)の3次元位置(高さ)を基準に各段の上面領域の暫定高さが算出されてもよい。具体的には、第(i-1)段の上面領域の暫定高さZ(i-1)は、第i段の上面領域の暫定高さZiから1段分の梱包箱72の高さHを差し引いた高さとして算出されてもよい(Z(i-1)=Zi-H)。なお、最上段の上面領域の暫定高さは、ポイントクラウドデータ130に含まれる最も上方側の被写体(梱包箱72)の3次元位置(高さ)として算出されればよい。
次のステップS14において、コントローラ31は、値iを値Lmaxに設定する。図4の例では、値iを「4」(=Lmax)に設定する。また、コントローラ31は、合計値Nsumをリセットしておく(ゼロに設定する)。
ステップS15において、コントローラ31は、第i段の表出領域Eiの面積Fiを3次元位置情報に基づき算出する。ここで、上述のように、第i段の表出領域Eiは、第i段に存在する少なくとも1つの梱包箱の上面領域のうち、当該第i段よりも上段の梱包箱で隠されずに表出している領域である。カメラユニット20によって梱包箱群70の上方から撮像された各段の上面領域は、各段の表出領域とほぼ等価である。
この実施形態では、ポイントクラウドデータにて当該各段(第i段)の上面領域として分類された部分平面領域Uiの面積の合計値が、第i段の表出領域Eiの面積Fiとして算出される。図4の右列においては、各段の斜線ハッチング部分が当該各段の表出領域Eiを表している。なお、各段の表出領域Eiの面積Fiは、図10に示されるように、各段の表出領域に関するポイントクラウドデータを床面に射影した領域(164d,164c,164b,164a)の面積にそれぞれ相当する。
次のステップS16では、コントローラ31は、第i段の上面領域(表出領域)Eiの高さZiを3次元位置情報に基づき算出する。具体的には、ポイントクラウドデータにて当該各段(第i段)の上面領域として分類された部分平面領域Uiの高さの平均値が、第i段の表出領域Eiの高さZiとして算出される。このようにして、第i段の表出領域Eiの高さZiが暫定値Ziから更新される。
また、ステップS17において、コントローラ31は、第i段の表出個数Niを推定する。第i段の表出個数Niは、第i段に存在する少なくとも1つの梱包箱のうち、当該第i段よりも上段の梱包箱で隠されずにその上面が表出している梱包箱の個数である。
ここにおいて、図4の右列に示されるように、各段ごとに配置規則(配置パターン)が異なる場合等においては、第i段(特に最上段以外の段、たとえば、第3段等)に存在する個々の梱包箱72を(上面視で)実際に認識することは容易ではない。
そこで、この実施形態では、第i段の表出領域Eiの面積Fiと各梱包箱72の平面サイズとに基づいて、第i段の表出個数Niが推定される。詳細には、コントローラ31は、上述のように、第i段の表出領域Eiの面積Fiを個々の梱包箱72の平面占有面積(平面上にて占有する面積)Gで除算した際の商Q(整数値)あるいは値(Q+1)を、第i段の表出個数Niの個数と見做して算出する。それ故、この表出個数Niは、「見做し表出個数」とも称される。また、表出個数Niは、推定値であることから、推定表出個数とも称される。なお、梱包箱72の平面占有面積Gは、梱包箱72の幅Wと奥行きDとの積(W*D)として算出される。
たとえば、図4の積載例では、図11にも示されるように、第1段の表出個数N1は0個、第2段の表出個数N2は1個、第3段の表出個数N3は4個、第4段の表出個数N4は5個、としてそれぞれ算出される。
また、ステップS18において、コントローラ31は、第i段までの梱包箱の積層段数Liを算出する。換言すれば、各段が何段目であるか(値i)を決定する。具体的には、第i段の上面領域の高さと梱包箱の1個あたりの高さHと最下段の梱包箱が積載される基準面81の高さZ0とに基づいて、第i段までの梱包箱の積層段数Liが算出される。詳細には、第i段の表出領域Eiの高さZiから基準面81の高さZ0を差し引いた値(Zi-Z0)を梱包箱の1個あたりの高さHで除算した際の商(整数値)qあるいは値(q+1)が(余りrの大きさに応じて)第i段までの積層段数Liとして算出される(Li=i=(Zi-Z0)/H)。より詳細には、値(Zi-Z0)を梱包箱の1個あたりの高さHで除算した際の余りrが所定値r1(たとえば、r1=0.2*H)より小さい場合(たとえば、r=0.05*Hの場合)、その除算の際の商qが積層段数Liとして算出される。また、その除算の際の当該余りrが所定値r2(ただし、r2≧r1であり、たとえば、r2=H-r1)より大きい場合(たとえば、r=0.95*Hの場合)、商Qに1を加えた値(Q+1)が積層段数Liとして算出される。なお、これに限定されず、値(Zi-Z0)を梱包箱の1個あたりの高さHで除算した際の演算結果の小数点以下を四捨五入した整数値(qあるいは(q+1))が積層段数Liの推定値として算出されてもよい。
たとえば、図4の積載例では、図11にも示されるように、第1段の積層段数L1は1段、第2段の積層段数L2は2段、第3段の積層段数L3は3段、第4段の積層段数L4は4段、としてそれぞれ算出される。
なお、このステップS18においては、第i段の上面領域の高さと梱包箱の1個あたりの高さHと最下段の梱包箱が積載される基準面81の高さZ0とに基づいて、第i段までの梱包箱の積層段数Liが算出されている。しかしながら、これに限定されず、たとえば、基準面81の高さZ0を用いずに、第i段の上面領域の高さZiと梱包箱の1個あたりの高さHとに基づいて、第i段までの梱包箱の積層段数Liが算出されてもよい。詳細には、値Liは、Li=Zi/H、に基づいて算出されてもよい。ただし、基準面81の高さZ0をも用いることによれば、より正確に積層段数Liを算出することが可能である。
そして、ステップS19において、コントローラ31は、第i段の表出個数Niに当該第i段までの積層段数Liを乗じた値Piを算出する(Pi=Ni*Li)。
たとえば、図4の積載例では、図11にも示されるように、第1段の値P1は0個(=0*1)、第2段の値P2は2個(=1*2)、第3段の値P3は12個(=4*3)、第4段の値P4は20個(=5*4)、としてそれぞれ算出される。
ステップS20においては、コントローラ31は、これまでの合算値Nsumに値Piをさらに加算した値を新たな合算値Nsumとして算出する。すなわち、合算値Nsumが更新される。
ステップS21においては、最下段までの処理が終了したか否かが判断される。未終了の場合には、ステップS22にて値iをデクリメントして(1減らして)ステップS15に進む。
その後、ステップS15~ステップS20の処理が同様に実行され、ステップS21にて最下段までの処理が終了した旨(値iが1である旨)が判定されると、ステップS21からステップS23に進む。
ステップS23では、第1段から最上段(第Lmax段)までの複数段に関する値Piを合算した値Nsum(=ΣPi)が、合計個数として表示部35bに出力される。
たとえば、図4の積載例では、図11にも示されるように、合計個数(値Nsum)は、34個(=0+2+12+20)として正確に算出される。なお、図11は、積Piの合算による合計個数の算出を概念的に示す図である。
<1-5.実施形態に係る効果>
以上のような態様によれば、カメラユニット20(3次元カメラ)は、複数の梱包箱72が複数段に亘って積層されている状態を上方から撮影し、撮影画像等を取得する。また、計数装置30(コントローラ31等)は、当該撮影画像等に基づく3次元位置情報と個々の梱包箱72の平面サイズ(W,D)とに基づいて、複数の梱包箱の個数を計数する。より具体的には、計数装置30は、各段の表出領域Eiの面積Fiと個々の梱包箱72の平面サイズ(W,D)とに基づいて、表出個数Niを段ごとに推定する。そして、第i段の表出領域Eiの下側には、当該表出領域Eiの面積Fi(上面面積)に対応する個数Niの梱包箱72が最下段から当該第i段までの段ごとに存在するとの仮定の下に、積Piに関する合算処理が行われる。具体的には、コントローラ31は、各段の表出個数Niに各段の積層段数Liを乗じた数Piを、複数段に亘って合算することによって、積層されている複数の梱包箱72の個数を算出する。
したがって、同一種類の複数の梱包箱72が複数段に亘って積層されている状況において、当該複数の梱包箱72が段ごとに異なる向きに配置されている場合であっても、当該積層された複数の梱包箱の個数を計数することが可能である。
<2.第2実施形態>
上記第1実施形態においては、各段の梱包箱72(72A)の下側には空洞部分が存在しないように積載された梱包箱群70(70Aとも称する)(図4等参照)が例示されている。
しかしながら、実際の現場においては、図13~図15に示されるように、各段の梱包箱72の下側に空洞部分(空洞空間)が存在するように積載された梱包箱群70(70Bとも称する)も有る。図13は、梱包箱群70Bを構成する複数の段を個別に示す図(上面図)である。図13の斜めハッチングが付された部分にのみ梱包箱72Bが配置されている。また、図14は、図13の梱包箱群70(70B)を手前側(図13における下側)から見た正面図である。図15は、図13の梱包箱群70(70B)を右側方(図13における右側)から見た側面図である。
梱包箱群70B(図13~図15参照)においては、第1実施形態に係る梱包箱群70Aの配置パターンとは異なる配置パターンに従って、各段に梱包箱72(72B)が配置されている。
梱包箱群70Bにおいても、奇数段の配置パターンと偶数段の配置パターンとが互いに異なっている。ただし、梱包箱群70Bにおける各段の配置パターンは、梱包箱群70Aにおける各段の配置パターンと異なっている。
梱包箱群70Bの奇数段の配置パターンは、左側の2列にてそれぞれ4個の「横向き」の梱包箱72Bを奥行き方向(図13の上下方向)に配列し、他の一列(右端列)にて2個の「縦向き」の梱包箱72Bを奥行き方向に配列する規則である。右端列においては、その奥行き方向における中央に空洞部分(略直方体形状)が設けられる。
梱包箱群70Bの偶数段の配置パターンは、奇数段の配置パターンを左右反転させた規則である。具体的には、右側の2列にてそれぞれ4個の「横向き」の梱包箱72Bを奥行き方向にで配列し、他の一列(左端列)にて2個の「縦向き」の梱包箱72Bを奥行き方向に配列する規則である。左端列においては、その奥行き方向における中央に空洞部分が設けられる。
このように、空洞部分が奇数段の右端中央部と偶数段の左端中央部とに配置され得る。その結果、各段の梱包箱72の下側(詳細には、偶数段の右端中央部付近の直下、あるいは奇数段の左端中央部付近の直下)に空洞部分(空洞空間)が存在するように積載され得る。
図13の積載例では、各段に最大10個配置することが可能である。ただし、図13では、第1段に10個、第2段に9個、第3段に6個、第4段に2個、の合計27個の梱包箱72Bが配置されている。すなわち、第2段から第4段までには最大配置数よりも少ない数の梱包箱72Bがそれぞれ配置されている。
このような態様においては、図15に示されるように、第4段の2個の梱包箱72Bの下側に、第3段における右端側空洞部分(第3段の右端中央部の空洞部分)が存在する。また、第2段の梱包箱72Bの下側に、第1段における右端側空洞部分(第1段の右端中央部の空洞部分)が存在する。この場合、たとえば、第3段の右端側空洞部分は、上面視において、直上の梱包箱72B(第4段の2個の梱包箱72B)に隠されている。それ故、第3段に実際に積載されている梱包箱の個数を上方からの撮影画像に基づいて正確に算出することは容易ではない。
第2実施形態においては、このような態様に対しても適用可能な手法について説明する。
第2実施形態は、第1実施形態の変形例である。以下では第1実施形態との相違点を中心に説明する。
第2実施形態においても図5等と同様の処理が実行される。
ただし、ステップS13,S17における処理が第1実施形態と相違する。
ステップS13においては、第1実施形態に係るステップS13の処理に加えて、積層されている複数の梱包箱のいずれかの段において空洞部分が存在するか否かを判定する処理、および当該空洞部分の平面占有面積を算出(推定)する処理もが実行される。
具体的には、コントローラ31は、外接矩形領域194(図9および図1参照)の面積を個々の梱包箱72の平面占有面積G(=W*D)で除算した際の剰余R0(第1剰余面積とも称する)を求める。外接矩形領域194は、積層された複数の梱包箱72を上方から見て包囲する矩形領域である。
そして、コントローラ31は、第1剰余面積R0が所定値(微小値)ΔQ(ゼロに近い値)よりも大きい場合、積層された複数の梱包箱のいずれかの段において空洞部分が存在する旨を推定する。換言すれば、有意な量の第1剰余面積R0が存在する場合、空洞部分が存在すると判定する。また、コントローラ31は、第1剰余面積R0を当該空洞部分の平面占有面積V(「空洞部分面積」あるいは単に「空洞面積」とも称する)として算出する。
たとえば、梱包箱72Bの幅Wが41cmであり且つその奥行きDが25cmの場合には、梱包箱72Bの平面占有面積Gは、1025cm2(=41*25)である。さらに、外接矩形領域194の面積が10700cm2(=(41+41+25)*(25+25+25+25))である場合、当該面積を平面占有面積Gで除算した際の余りR0は450cm2であり、商Qは10である。この場合、空洞面積Vは450cm2(理論値)として算出される。
図12は、第2実施形態に係るステップS17の処理(サブルーチン処理)を示すフローチャートである。第2実施形態においては、図12に示すような処理がステップS17の処理として行われる。
まず、ステップS31において、コントローラ31は、第i段の表出領域Eiの面積Fi(表出面積とも称する)を個々の梱包箱72の平面占有面積Gで除算し、商Qと余りRとを求める。
コントローラ31は、3つの条件C1,C2,C3をステップS32,S34,S36でそれぞれ判定し、その判定結果に基づく分岐処理を実行する。
(1)条件C1は、表出面積Fiが個々の梱包箱72の平面占有面積Gでほぼ割り切れる旨の条件である。換言すれば、条件C1は、当該剰余Rがほぼゼロである(余りRが所定の閾値以下である)である旨と、当該剰余Rが個々の梱包箱の平面占有面積Gにほぼ等しい旨とのいずれかが生じていることである。条件C1が成立する場合には、ステップS32からステップS33に進む。ステップS33では、商Qあるいは値(Q+1)が第i段の表出個数Niとみなされて算出される。詳細には、当該剰余Rがほぼゼロである(余りRが所定の閾値以下である)である場合には、商Qが第i段の表出個数Niとみなされて算出される。一方、当該剰余Rが個々の梱包箱の平面占有面積Gにほぼ等しい場合には、値(Q+1)が第i段の表出個数Niとみなされて算出される。たとえば、第i段に関して、Fi/G=1.95の場合(余りRが「G*0.95」であり、値Gにほぼ等しい場合)、表出個数Niは2個(=Q+1=1+1)として算出される。
たとえば、第4段に関して、表出面積F4が2050cm2(平面占有面積Gの2倍)である場合、面積F4を平面占有面積Gで除算した際の余りRは、ゼロである。この場合、商Qの「2」が表出個数N4として算出される(図16も参照)。なお、図16は、図13の梱包箱群70に関して、各段の表出領域Ei(右列の斜線ハッチング領域)および表出個数Ni等を示す図である。
(2)条件C2は、余りRが空洞面積Vにほぼ等しい旨の条件である。条件C2が成立する場合には、ステップS34からステップS35に進む。ステップS35では、(端数(余りR)は切り捨てられ、)商Qが第i段の表出個数Niとみなされて算出される。第i段に関する余りRが空洞面積Vにほぼ等しい場合、第i段よりも上段の梱包箱72によって隠されている空洞部分の平面占有面積(空洞面積V)もが表出面積Fiに含まれていると見做される。そして、表出面積Fiから当該余りR(空洞面積Vに相当)を差し引いた面積(上面面積)に対応する個数(すなわちQ個)の梱包箱72が第i段に存在すると判定される。
たとえば、第3段に関して、表出面積F3が4550cm2(平面占有面積Gの4.44倍)である場合、面積F3を平面占有面積Gで除算した際の余りRは、450cm2であり、空洞面積Vに等しい。この場合、商Qの「4」が表出個数N4として算出される(図16も参照)。
第3段に関する余りRが空洞面積Vにほぼ等しい場合、第3段よりも上段(第4段)の梱包箱72によって隠されている空洞部分(第3段の右端側中央の空洞部分)の平面占有面積(空洞面積V)もが表出面積F3に含まれていると見做される。なお、第3段の当該空洞部分は、図16の右列においては、破線で囲まれた部分として示されている。そして、表出面積F3から当該余りRを差し引いた面積(上面面積)(4100cm2)に対応する個数「4個」の梱包箱72が存在すると判定される。
また、第1段に関して、表出面積F1が1475cm2(平面占有面積Gの1.44倍)である場合、面積F1を平面占有面積Gで除算した際の余りRは、450cm2であり、空洞面積Vに等しい。この場合、商Qの「1」が表出個数N1として算出される。
第1段に関する余りRが空洞面積Vにほぼ等しい場合、第1段よりも上段(第2段~第4段)の梱包箱72によって隠されている空洞部分(第1段の右端側中央の空洞部分)の平面占有面積(空洞面積V)もが表出面積F1に含まれていると見做される。そして、面積F1から当該余りRを差し引いた面積(上面面積)(1025cm2)に対応する個数「1個」の梱包箱72が存在すると判定される。
(3)条件C3は、余りRと空洞面積Vとの和(合計)が個々の梱包箱の平面占有面積Gにほぼ等しい旨の条件である。条件C3が成立する場合には、ステップS36からステップS37に進み、商Qに1を加えた個数(Q+1)が第i段の表出個数Niとみなされて算出される。
第i段の表出面積Fiは、第i段の全体の上面面積Tiから、第i段よりも上段の梱包箱で隠された面積Fupが差し引かれた値である。空洞面積Vと第i段に関する余りRとの和が1箱分の平面占有面積Gにほぼ等しい場合、第i段よりも上段の梱包箱で隠された面積Fupには空洞面積Vが含まれている可能性が高い。換言すれば、空洞面積Vを含む面積Fupが上面面積Tiから差し引かれた結果に端数(所定程度以上の余りR)(空洞面積Vとの合計で1箱分の端数)が生じている場合、第i段では実在しない空洞部分の平面占有面積Vが余分に差し引かれている可能性が高い。より詳細には、第(i+1)段以上の梱包箱で隠された空洞部分として第i段には実在していない空洞部分の平面占有面積Vが余分に差し引かれている可能性が高い。すなわち、表出面積Fiは、空洞面積Vに相当する面積が余分に差し引かれた値になっている、と考えられる。そこで、この場合、余分に差し引かれた空洞面積Vを面積Fiに加算した面積(Fi+V)をGで除して得られる商((Fi+V)/G=Fi/G+V/G=Q+(R+V)/G=(Q+1)に相当)が、第i段の表出個数Niとみなされて算出される。
たとえば、第2段に関して、面積F2が2625cm2(平面占有面積Gの2.56倍)である場合、面積F2を平面占有面積Gで除算した際の余りRは575cm2であり、当該余りRと空洞面積V(450cm2)との和(1025cm2)は平面占有面積Gに等しい。この場合、商Qの「2」に1を加えた「3」が表出個数N2として算出される。
第2段の表出面積F2(2.56個分)は、第2段の全体の上面面積T2(9個分)から、第2段よりも上段の梱包箱で隠された面積(F3+F4)(6.44個分)が差し引かれた値である。空洞面積Vと第2段に関する余りRとの和が1箱分の平面占有面積Gにほぼ等しくなる場合、第2段よりも上段の梱包箱で隠された面積(F3+F4)に空洞面積Vが含まれている可能性が高い。換言すれば、空洞面積Vを含む面積(F3+F4)が上面面積T2から差し引かれた結果に端数(所定程度以上の余りR)(空洞面積Vとの合計で1箱分の端数)が生じている場合、第2段では実在しない空洞部分の平面占有面積Vが余分に差し引かれている可能性が高い。より詳細には、第3段以上の梱包箱で隠された空洞部分として第2段には実在していない空洞部分の平面占有面積Vが余分に差し引かれている可能性が高い。すなわち、表出面積F2は、空洞面積Vに相当する面積が余分に差し引かれた値になっている、と考えられる。そこで、この場合、余分に差し引かれた空洞面積V(0.44個分)を面積F2に加算した面積(F2+V)をGで除して得られる商「3」((F2+V)/G(=2.56+0.44)=2+1)が、第2段の表出個数N2とみなされて算出される。
以上のように、コントローラ31は、3つの条件C1,C2,C3をステップS32,S34,S36でそれぞれ判定し、その判定結果に基づく分岐処理を実行する。
なお、第i段(複数段のいずれかの段)に関して条件C1,C2,C3のいずれもが成立しない場合には、エラー処理(ステップS38)が実行され、処理が中断(終了)する。具体的には、コントローラ31は、この梱包箱群70(70B)に関しては正確な計数値を出力することができない旨を表示部35bに表示する。
このようなステップS17の処理が複数段のそれぞれ(第i段)について実行される。
ステップS17以外の処理(ステップS15~S22(図5参照))も同様に複数段のそれぞれについて実行される。
複数段(ここでは4段)の全ての段に関して条件C1,C2,C3のいずれかが成立する場合、ステップS23(図5参照)にて複数の梱包箱の個数が有効な値として算出される。より具体的には、複数段に関する積Piが算出されるとともに複数段に関する積Piの合算処理等が行われる(ステップS19,S20等参照)。これによって、梱包箱72Bの合計個数Nsumが「27個」(=2*4+4*3+3*2+1*1=8+12+6+1)として正確に算出される。そして、ステップS23にて、当該合計個数Nsum(=ΣPi)が、無効である旨を伴わずに(換言すれば、有効な値として)、表示部35bに出力される。
一方、複数段のうちのいずれかの段に関して(ステップS17にて)条件C1,C2,C3のいずれもが成立しない場合には、エラー処理(ステップS38)が実行され、図5の処理が中断(終了)する。
以上のような態様によれば、第1実施形態と同様の効果を得ることが可能である。
また特に、積層された複数の梱包箱のいずれかの段において存在する空洞部分の平面占有面積(空洞面積V)が算出され、空洞面積Vにも基づいて表出個数が算出される。したがって、空洞部分(特に見えない空洞部分)を有する状態で積層された複数の梱包箱に関しても、当該空洞部分の平面占有面積を考慮することによって当該複数の梱包箱の個数をより正確に算出することが可能である。
詳細には、条件C2(余りRが空洞面積Vにほぼ等しい旨の条件)が成立する場合には、商Qが第i段の表出個数Niとみなされて算出される。また、条件C3(余りRと空洞面積Vとの和(合計)が個々の梱包箱の平面占有面積Gにほぼ等しい旨の条件)が成立する場合には、商Qに1を加えた個数(Q+1)が第i段の表出個数Niとみなされて算出される。このように、隠された空洞部分にも配慮して、複数の梱包箱の個数をより正確に算出することが可能である。
なお、第2実施形態において、複数段(ここでは4段)のうちのいずれかの段に関して条件C1,C2,C3のいずれもが成立しない場合には、正確に計数できない可能性が存在する。この場合には、上述のように、複数の梱包箱の個数が正確な計数値を出力することができない旨が操作者に通知されることが好ましい。
また、ここでは、複数段(ここでは4段)の全ての段に関して条件C1,C2,C3のいずれかが成立する場合、ステップS23にて複数の梱包箱の個数が有効な値として算出されているが、これに限定されない。
たとえば、複数段のうち特定の段に関して条件C2が成立し、且つ、複数段のうち当該特定の段以外の段に関して条件C3が成立する場合、複数の梱包箱の個数が有効な値として算出されてもよい。
換言すれば、複数段のうち特定の段(たとえば、第3段)に関する剰余Rと空洞面積Vとがほぼ等しく、且つ、複数段のうち当該特定の段以外の段(たとえば、第2段)に関する剰余Rと空洞面積Vとの合計が個々の梱包箱の平面占有面積Gにほぼ等しいことを条件として、複数の梱包箱の個数が有効な値として算出されてもよい。
また、ここでは、外接矩形領域194(図9および図1参照)の面積を個々の梱包箱72の平面占有面積G(=W*D)で除算した際の剰余R0(第1剰余面積)が空洞部分の平面占有面積(空洞面積V)として求められているが、これに限定されない。
たとえば、最上段等に空洞部分が(視認可能な状態で)存在する場合には、当該最上段等の空洞部分を撮像した撮影画像に基づいて、当該空洞部分の平面占有面積(空洞面積V)が求められてもよい。
あるいは、各段に配置される梱包箱72を包囲する外接矩形領域(段ごとの外接矩形領域)を複数の段のそれぞれについて求め、そのうち最大の外接矩形領域の面積を平面占有面積Gで除算した際の剰余R0が空洞面積Vとして求められてもよい。
たとえば、図16において、第1段に配置される梱包箱72の外接矩形領域の面積(表出領域F1,F2,F3,F4の合計値)は、(4*D)*(2*W+D)、に相当する。第2段に配置される梱包箱72の外接矩形領域の面積(表出領域F2,F3,F4の合計値)は、(4*D)*(2*W+D)、に相当する。また、第3段(最上段)に配置される梱包箱72の外接矩形領域の面積(表出領域F3,F4)は、(4*D)*(W+D)、に相当し、第4段(最上段)に配置される梱包箱72の外接矩形領域の面積(第4段の表出領域F4)は、(2*D)*W、に相当する。このうち、最大の外接矩形領域の面積は、第1段(あるいは第2段)の外接矩形領域の面積であり、当該面積を平面占有面積Gで除算した際の剰余R0が空洞面積Vとして求められてもよい。
特に、外接矩形領域の縦方向および横方向の長さがそれぞれ段ごとに異なる場合(たとえば、90°回転した配置パターンで奇数段と偶数段とが配置される場合)には、このような態様で空洞面積Vが求められることが好ましい。すなわち、段ごとの外接矩形領域(詳細には、複数段の外接矩形領域のうち最大の外接矩形領域)に基づいて、空洞面積Vが求められることが好ましい。
<3.他の改変例等>
以上、この発明の実施の形態について説明したが、この発明は上記説明した内容のものに限定されるものではない。
<梱包箱72のサイズ情報の取得>
たとえば、上記各実施形態におけるステップS11においては、複数の種類の梱包箱のサイズ情報が登録されているデータベース33と、操作ユーザによって入力された複数の梱包箱の種類情報とに基づいて、個々の梱包箱のサイズ情報が取得されている。ただし、これに限定されず、コントローラ31は、梱包箱群70に関する撮影画像110に基づいて梱包箱72の種類を自動判別し、その判別結果(種類の判別結果)とデータベース33とに基づいて、個々の梱包箱のサイズ情報を取得してもよい。これによれば、操作ユーザは、複数の梱包箱の種類情報を入力せずに済む。すなわち、操作ユーザの手を煩わせずに済み、簡便である。
具体的には、コントローラ31は、カメラユニット20の撮影画像110内にて取り込まれている図柄に基づいて、梱包箱72の種類を判別する。当該図柄は、梱包内容物を示すものとして梱包箱72の外表面に付与(印刷等)されている、図(絵)および/または文字等を含むものである。
より詳細には、コントローラ31は、撮影画像110内に含まれている図柄と、データベース33内に予め記憶されている複数の種類の梱包箱のそれぞれに付与されている図柄とのパターンマッチング処理(画像認識処理)を実行する。そして、コントローラ31は、当該パターンマッチング処理の処理結果に基づいて、撮影画像110における梱包箱72の種類を判別する。さらに、コントローラ31は、梱包箱72の種類の判別結果と、複数の種類の梱包箱のサイズ情報が登録されているデータベース33とに基づいて、個々の梱包箱72のサイズ情報(W,D,H)を取得する。
なお、ここでは、撮影画像110に含まれる図柄に基づいて、梱包箱72の種類が判別されているが、これに限定されない。たとえば、コントローラ31は、撮影画像110に含まれるバーコード(梱包内容物等を示すコード情報)を画像認識処理によって抽出し、抽出したバーコードに基づいて、梱包箱72の種類を判別してもよい。また、バーコードと図柄との双方に基づいて梱包箱72の種類が判別されてもよい。バーコードは、1次元バーコードであってもよく、2次元バーコードであってもよい。より詳細には、当該バーコードは、JANコード(EANコード)、NW-7、QRコード(登録商標)、PDF417などの各種の形式のコード情報であってもよい。また、コード情報(JANコード等)を示す数字等が梱包箱72の表面に印刷され、その撮影画像110から抽出された当該数字等(コード情報)に基づいて、梱包箱72の種類が判別されてもよい。
このように、梱包内容物を示す図柄とJANコード等(数字および/またはバーコード)とのうちの少なくとも一の情報を含む撮影画像が取得され、当該撮影画像に関する画像認識処理によって当該少なくとも一の情報が抽出され、当該少なくとも一の情報に基づいて複数の梱包箱の種類が判別されてもよい。
また、ここでは、梱包箱群70の上方からの撮影画像110に基づいて、当該少なくとも一の情報が抽出されているが、これに限定されない。たとえば、梱包箱群70の側方からの撮影画像に基づいて、当該少なくとも一の情報が抽出されてもよい。また、梱包箱群70の側方からの撮影画像は、カメラユニット20とは別個に設けられた別のカメラユニットによって撮像されてもよい。これによれば、当該少なくとも一の情報が梱包箱の側面にのみ付与されることが多い場合であっても、より確実に当該少なくとも一の情報を抽出することが可能である。
<各段の表出領域等>
また、上記各実施形態におけるステップS13,S15においては、各段の暫定上面高さZiに対して所定範囲(±ΔZ)内の高さを有する部分平面領域Uiのみが各段の表出領域Eiとして求められ、その面積Fiが求められている。
ここにおいて、図17に示すように、本来は表出領域に属する部分のデータであるにもかかわらず、所定範囲(±ΔZ)を超える高さを有するデータ(所謂ノイズデータ)が部分的に発生することがある。図17は、3次元位置情報(詳細には高さ)におけるノイズ部分を示す図である。なお、図17では簡略化のため1次元で説明しているが、2次元でも同様である。
このような部分的に発生するデータ(部分領域uのデータ等)は、ノイズとして除外されてもよい。ただし、このような部分領域uを除外して表出領域Eiおよびその面積Fiを求めると、面積Fiが本来の値よりも小さな値になるおそれが存在する。
そこで、可視光画像(カラー画像あるいはグレースケール画像等)において色と明るさとの少なくとも一方の変化が所定程度以下に収まる連続平面領域(たとえば段ボール箱の地色部分(絵柄部分を除く部分)等)もが各段の表出領域として求められてもよい。すなわち、部分平面領域Uiのみならず当該連続平面領域もが各段の表出領域として求められてもよい。また、当該連続平面領域は、部分平面領域Ui(各段の暫定上面高さに対して所定範囲内の高さを有する領域)の少なくとも一部を包含する領域である。端的に言えば、当該連続平面領域は、部分平面領域Uiから連続する領域である。具体的には、ダンボール箱等の梱包箱の上面領域において、当該梱包箱の表面色(薄茶色(クラフト色)等)とほぼ同じ色(および/または同程度の明るさ)を有する連続平面領域は、その3次元位置情報の高さが所定範囲(±ΔZ)に収まっていなくても、表出領域Eiに含められる。そして、このようにして求められた表出領域Eiの面積Fiが算出されてもよい。
このような手法によれば、可視光画像において色と明るさとの少なくとも一方の変化が所定程度以下に収まる連続平面領域内の部分領域であれば、その高さが所定範囲(±ΔZ)を超えてばらついている部分領域であっても表出領域に含まれる。したがって、ばらついている部分領域が表出面積Fiから除外され表出面積Fiが本来の値よりも低減してしまうことを防止し、各段の表出面積Fiをより正確に算出することが可能である。
<その他>
また、上記各実施形態等においては、各段に関する各種情報(表出個数および積層段数等)が最上段から最下段に向けて順次に取得される態様(図5のステップS14~S22参照)を例示しているが、これに限定されない。たとえば、逆に、各段に関する各種情報(表出個数および積層段数等)が最下段から最上段に向けて順次に(逐次的に)取得されてもよい。あるいは、各段に関する各種情報(表出個数および積層段数等)の全部あるいは一部が同時に(並列的に)取得されてもよい。
また、上記各実施形態等において、第i段の表出個数Niは、ステップS17(図5)にて整数値として算出されているが、これに限定されず、必ずしも整数値でなくてもよい。たとえば、特に第1実施形態等において、表出個数は、小数点以下の端数をも有する個数として算出されてもよい。そして、ステップS20にて表出個数Niと積層段数Liとの積が複数の段に関して合算された値(合算値)が合計個数としてそのまま出力されてもよい。あるいは当該合算値が四捨五入等によって整数値に変換された後に合計個数として出力されてもよい。
ただし、より正確な個数を計数するとの観点からは、誤差を蓄積させないように、表出個数はステップS17にて段ごとに整数値として算出されることが好ましい。換言すれば、ステップS17にて各段の表出個数Niが整数値としてそれぞれ算出されることによれば、段ごとの誤差(小数点以下の誤差)が(積算処理において)累積されずに済むので、小数点以下の誤差の累積による誤カウントを防止することが可能である。すなわち、より正確に合計個数Nsumを算出することが可能である。
第i段までの積層段数Liについても同様である。たとえば、第i段までの積層段数Liは、ステップS18にて整数値として算出されることが好ましい。
また、上記各実施形態等においては、各段までの梱包箱の積層段数Liが、各段の上面領域(表出領域)の高さZiと個々の梱包箱の高さHとに基づいて段ごとに算出されているが、これに限定されない。たとえば、第i段に関する値i自体が各段(当該第i段)までの梱包箱の積層段数Liとして算出されてもよい。
また、上記各実施形態等においては、各段の表出領域Eiの高さZiが暫定値Ziから更新されて算出されているが、これに限定されない。たとえば、各段の暫定高さZi(暫定値Zi)自体が第i段の表出領域Eiの高さZiとしてそのまま算出されてもよい。また、当該暫定高さZiは、床面の高さ(特にゼロ)を基準にして、Zi=i*H+h、の式に基づいて算出されてもよい。すなわち、パレットの高さhと梱包箱72の高さHと各段までの段数iとに基づいて算出されてもよい。