(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023143280
(43)【公開日】2023-10-06
(54)【発明の名称】カメラ姿勢の演算装置、演算方法および情報処理プログラム
(51)【国際特許分類】
G01B 11/26 20060101AFI20230928BHJP
G01B 11/00 20060101ALI20230928BHJP
G06T 7/70 20170101ALI20230928BHJP
G06T 7/60 20170101ALI20230928BHJP
【FI】
G01B11/26 H
G01B11/00 H
G06T7/70 Z
G06T7/60 150D
G06T7/60 200G
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022050569
(22)【出願日】2022-03-25
(71)【出願人】
【識別番号】000003609
【氏名又は名称】株式会社豊田中央研究所
(71)【出願人】
【識別番号】000003218
【氏名又は名称】株式会社豊田自動織機
(74)【代理人】
【識別番号】110000110
【氏名又は名称】弁理士法人 快友国際特許事務所
(72)【発明者】
【氏名】津坂 祐司
(72)【発明者】
【氏名】田中 稔
(72)【発明者】
【氏名】服部 晋悟
【テーマコード(参考)】
2F065
5L096
【Fターム(参考)】
2F065AA04
2F065AA37
2F065CC11
2F065CC40
2F065DD06
2F065FF04
2F065MM06
2F065QQ18
2F065QQ27
2F065QQ29
2F065QQ31
2F065QQ41
2F065SS14
5L096AA06
5L096BA04
5L096CA02
5L096DA02
5L096FA13
5L096FA16
5L096FA66
5L096FA67
5L096FA69
5L096FA76
5L096GA32
(57)【要約】
【課題】カメラの単一視点の撮影画像からカメラの姿勢を演算可能な技術を提供する。
【解決手段】 カメラの姿勢を演算する演算装置は、カメラを用いて撮像した撮影画像上の平行な1対の第1直線および第2直線と、第1直線および第2直線に対して既知の角度を有する1本の第3直線と、を特定する直線特定部を備える。演算装置は、第1直線の両端の位置、第2直線の両端の位置、第3直線の両端の位置、カメラの姿勢および位置、を表す複数の変数を生成する変数生成部を備える。演算装置は、第1直線の両端、第2直線の両端、第3直線の両端をカメラのスクリーン上に投影した投影位置と、第1直線の両端、第2直線の両端、第3直線の両端の撮影画像上における位置と、の偏差の二乗和が最小となるように、複数の変数の解を演算する演算部を備える。演算装置は、複数の変数の解からカメラの姿勢を取得する取得部を備える。
【選択図】
図3
【特許請求の範囲】
【請求項1】
カメラの姿勢を演算する演算装置であって、
前記カメラを用いて撮像した撮影画像上の平行な1対の第1直線および第2直線と、前記第1直線および前記第2直線に対して既知の角度を有する1本の第3直線と、を特定する直線特定部と、
前記第1直線の両端の位置、前記第2直線の両端の位置、前記第3直線の両端の位置、前記カメラの姿勢および位置、を表す複数の変数を生成する変数生成部と、
前記第1直線の両端、前記第2直線の両端、前記第3直線の両端を前記カメラのスクリーン上に投影した投影位置と、前記第1直線の両端、前記第2直線の両端、前記第3直線の両端の前記撮影画像上における位置と、の偏差の二乗和が最小となるように、前記複数の変数の解を演算する演算部と、
前記複数の変数の解から前記カメラの姿勢を取得する取得部と、
を備える、演算装置。
【請求項2】
前記第1直線、前記第2直線、前記第3直線は、同一の平面内に存在している直線である、請求項1に記載の演算装置。
【請求項3】
前記第1直線および前記第2直線は、第1平面に存在している直線であり
前記第3直線は、前記第1平面と既知の角度で交差する第2平面に存在している直線である、請求項1に記載の演算装置。
【請求項4】
前記第1平面および前記第2平面の一方は地面であり、他方は前記地面上に配置されている物体が有する平面である、請求項3に記載の演算装置。
【請求項5】
前記既知の角度は直角である、請求項1~4の何れか1項に記載の演算装置。
【請求項6】
前記第1直線と前記第2直線との実際の距離、または、前記カメラのレンズ中心の地面からの高さを測定する測定部をさらに備え、
前記取得部は、前記複数の変数の解のうち、前記第1直線の両端、前記第2直線の両端、前記第3直線の両端、前記カメラの位置、のスケールを、前記測定部の測定結果に基づいて取得する、請求項1~5の何れか1項に記載の演算装置。
【請求項7】
前記変数生成部は、前記第1直線および前記第2直線が存在しているXY平面であって、前記第1直線および前記第2直線の方向をX軸またはY軸の何れか方向とする前記XY平面を定義することで、前記第1直線の両端を示す3つの変数、前記第2直線の両端を示す3つの変数、前記第3直線の両端を示す3つの変数、をそれぞれ生成する、請求項1~6の何れか1項に記載の演算装置。
【請求項8】
前記変数生成部は、前記カメラの3次元姿勢角を示す3つの変数を生成し、
前記変数生成部は、前記カメラの位置を前記XY平面の原点に設定することで、前記カメラの位置を示す1つの変数を生成する、請求項7に記載の演算装置。
【請求項9】
カメラの姿勢を演算する演算方法であって、
前記カメラを用いて撮像した撮影画像上の平行な1対の第1直線および第2直線と、前記第1直線および前記第2直線に対して既知の角度を有する1本の第3直線と、を特定するステップと、
前記第1直線の両端の位置、前記第2直線の両端の位置、前記第3直線の両端の位置、前記カメラの姿勢および位置、を表す複数の変数を生成するステップと、
前記第1直線の両端、前記第2直線の両端、前記第3直線の両端を前記カメラのスクリーン上に投影した投影位置と、前記第1直線の両端、前記第2直線の両端、前記第3直線の両端の前記撮影画像上における位置と、の偏差の二乗和が最小となるように、前記複数の変数の解を演算するステップと、
前記複数の変数の解から前記カメラの姿勢を取得するステップと、
を備える、演算方法。
【請求項10】
情報処理装置のコンピュータに読込まれるとともに、カメラの姿勢を演算する情報処理プログラムであって、
前記カメラを用いて撮像した撮影画像上の平行な1対の第1直線および第2直線と、前記第1直線および前記第2直線に対して既知の角度を有する1本の第3直線と、を特定する直線特定手段と、
前記第1直線の両端の位置、前記第2直線の両端の位置、前記第3直線の両端の位置、前記カメラの姿勢および位置、を表す複数の変数を生成する変数生成手段と、
前記第1直線の両端、前記第2直線の両端、前記第3直線の両端を前記カメラのスクリーン上に投影した投影位置と、前記第1直線の両端、前記第2直線の両端、前記第3直線の両端の前記撮影画像上における位置と、の偏差の二乗和が最小となるように、前記複数の変数の解を演算する演算手段と、
前記複数の変数の解から前記カメラの姿勢を取得する取得手段と、
して前記情報処理装置を機能させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書に開示する技術は、カメラの姿勢を演算可能な演算装置および演算方法等に関する。
【背景技術】
【0002】
カメラを使用して各種の制御を行う際には、カメラの3軸の姿勢を求めることが必要となる場合がある。従来、位置が既知の特徴点を3個以上観測することで、カメラの姿勢を得る技術が知られている。また、奥行き方向に十分広がって配置された4個以上の特徴点を観測することで、カメラの焦点距離と位置姿勢を同時に得る技術が知られている。なお、関連する技術が特許文献1および2に開示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2019-174243号公報
【特許文献2】国際公開第2016/189878号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来技術では、カメラを設置した現地で、カメラ姿勢推定用の画像を特別に取得するか、画像内の特徴点の位置を別途測量等する必要がある。事前準備の手間がかかるため問題である。
【課題を解決するための手段】
【0005】
本明細書に開示する演算装置の一実施形態は、カメラの姿勢を演算する演算装置である。演算装置は、カメラを用いて撮像した撮影画像上の平行な1対の第1直線および第2直線と、第1直線および第2直線に対して既知の角度を有する1本の第3直線と、を特定する直線特定部を備える。演算装置は、第1直線の両端の位置、第2直線の両端の位置、第3直線の両端の位置、カメラの姿勢および位置、を表す複数の変数を生成する変数生成部を備える。演算装置は、第1直線の両端、第2直線の両端、第3直線の両端をカメラのスクリーン上に投影した投影位置と、第1直線の両端、第2直線の両端、第3直線の両端の撮影画像上における位置と、の偏差の二乗和が最小となるように、複数の変数の解を演算する演算部を備える。演算装置は、複数の変数の解からカメラの姿勢を取得する取得部を備える。
【0006】
上記の構成では、第1直線の両端の位置、第2直線の両端の位置、第3直線の両端の位置、カメラの姿勢および位置、を表す複数の変数を生成する。そして、複数の変数の解を演算することで、カメラの姿勢を取得することができる。カメラの単一視点の撮影画像のみから、カメラの姿勢を簡易に求めることができる。カメラ姿勢推定用の画像を特別に取得したり、画像内の特徴点の位置を別途測量等する必要がないため、事前準備の手間を省略することが可能となる。
【0007】
第1直線、第2直線、第3直線は、同一の平面内に存在している直線であってもよい。効果の詳細は実施例で説明する。
【0008】
第1直線および第2直線は、第1平面に存在している直線であってもよい。第3直線は、第1平面と既知の角度で交差する第2平面に存在している直線であってもよい。効果の詳細は実施例で説明する。
【0009】
第1平面および第2平面の一方は地面であり、他方は地面上に配置されている物体が有する平面であってもよい。効果の詳細は実施例で説明する。
【0010】
既知の角度は直角であってもよい。
【0011】
演算装置は、第1直線と第2直線との実際の距離、または、カメラのレンズ中心の地面からの高さを測定する測定部をさらに備えていてもよい。取得部は、複数の変数の解のうち、第1直線の両端、第2直線の両端、第3直線の両端、カメラの位置、のスケールを、測定部の測定結果に基づいて取得してもよい。効果の詳細は実施例で説明する。
【0012】
変数生成部は、第1直線および第2直線が存在しているXY平面であって、第1直線および第2直線の方向をX軸またはY軸の何れか方向とするXY平面を定義することで、第1直線の両端を示す3つの変数、第2直線の両端を示す3つの変数、第3直線の両端を示す3つの変数、をそれぞれ生成してもよい。効果の詳細は実施例で説明する。
【0013】
変数生成部は、カメラの3次元姿勢角を示す3つの変数を生成してもよい。変数生成部は、カメラの位置をXY平面の原点に設定することで、カメラの位置を示す1つの変数を生成してもよい。効果の詳細は実施例で説明する。
【0014】
本明細書に開示する演算方法の一実施形態は、カメラの姿勢を演算する演算方法である。演算方法は、カメラを用いて撮像した撮影画像上の平行な1対の第1直線および第2直線と、第1直線および第2直線に対して既知の角度を有する1本の第3直線と、を特定するステップを備える。演算方法は、第1直線の両端の位置、第2直線の両端の位置、第3直線の両端の位置、カメラの姿勢および位置、を表す複数の変数を生成するステップを備える。演算方法は、第1直線の両端、第2直線の両端、第3直線の両端をカメラのスクリーン上に投影した投影位置と、第1直線の両端、第2直線の両端、第3直線の両端の撮影画像上における位置と、の偏差の二乗和が最小となるように、複数の変数の解を演算するステップを備える。演算方法は、複数の変数の解からカメラの姿勢を取得するステップを備える。効果の詳細は実施例で説明する。
【0015】
本明細書に開示する情報処理プログラムの一実施形態は、情報処理装置のコンピュータに読込まれるとともに、カメラの姿勢を演算する情報処理プログラムである。情報処理プログラムは、カメラを用いて撮像した撮影画像上の平行な1対の第1直線および第2直線と、第1直線および第2直線に対して既知の角度を有する1本の第3直線と、を特定する直線特定手段として情報処理装置を機能させる。情報処理プログラムは、第1直線の両端の位置、第2直線の両端の位置、第3直線の両端の位置、カメラの姿勢および位置、を表す複数の変数を生成する変数生成手段として情報処理装置を機能させる。情報処理プログラムは、第1直線の両端、第2直線の両端、第3直線の両端をカメラのスクリーン上に投影した投影位置と、第1直線の両端、第2直線の両端、第3直線の両端の撮影画像上における位置と、の偏差の二乗和が最小となるように、複数の変数の解を演算する演算手段として情報処理装置を機能させる。情報処理プログラムは、複数の変数の解からカメラの姿勢を取得する取得手段として情報処理装置を機能させる。効果の詳細は実施例で説明する。
【図面の簡単な説明】
【0016】
【
図3】演算処理の具体的内容について説明するフロー図である。
【
図4】実施例1におけるカメラ30の撮影画像の一例である。
【
図6】実施例2におけるカメラ30の撮影画像の一例である。
【
図8】トラックの荷台の姿勢・位置を演算する場合の撮影画像例である。
【
図9】カメラキャリブレーションを行う場合の撮影画像例である。
【発明を実施するための形態】
【実施例0017】
(フォークリフト1の構成)
以下、
図1および
図2を参照して、本実施例のフォークリフト1について説明する。
図1はフォークリフト1の概略斜視図であり、
図2はブロック図である。フォークリフト1は、無人フォークリフトである。
図1に示すように、フォークリフト1は、車体2、制御部10(
図2に図示)、マスト20、フォーク22、バックレスト23、カメラ固定部24、カメラ30、を備えている。
【0018】
車体2は、その両側面のそれぞれに前輪28及び後輪29を備えている。前輪28は、駆動機構を介して駆動輪モータ(不図示)が接続されており、移動制御部17(
図2に図示)によって回転駆動されるようになっている。後輪29は、操舵装置(不図示)に接続されており、移動制御部17によって車輪の向きが調整される。
【0019】
マスト20は、車体2の前面に取付けられている支柱であり、その軸線は上下方向に伸びている。フォーク22は、マスト20に上下方向に移動可能に取付けられている。フォーク22は、一対のツメ22a、22bを有している。カメラ固定部24は、カメラ30を固定する部材である。
【0020】
図2のブロック図を説明する。フォークリフト1は、制御部10、フォーク22、前輪28、後輪29、カメラ30、エンコーダ40、を備える。制御部10は、フォークリフト1を制御する装置である。制御部10は、例えば、CPU、ROM、RAM等を備えたコンピュータによって構成することができる。コンピュータがプログラムを実行することで、制御部10は、
図2に示す測定部11、直線特定部12、変数生成部13、演算部14、収束判断部15、取得部16、等として機能する。すなわち制御部10は、カメラ30の位置および姿勢を演算する演算装置として機能する。
【0021】
エンコーダ40は、車輪の回転角を検出するセンサを備えた部位である。車体位置姿勢算出部19は、エンコーダ40によって検出された前輪28の回転角に基づいて、車体2の移動方向及び移動量を求める。フォーク22は、荷役装置制御部18により昇降される。フォーク22の上下方向の位置は、荷役装置制御部18の駆動量によって特定可能となっている。
【0022】
(カメラ30の姿勢・位置の演算処理)
カメラ30を使用して、フォークリフト1の各種の制御(例:車体2の移動、フォーク22の操作)を行う場合には、カメラ30の姿勢および位置を求めることが必要となる。しかし画像に写っている物に関する事前知識無しで、カメラ30で取得した単一画像のみからカメラの位置や姿勢を求めることは、非常に困難である。本明細書の技術は、マンハッタンワールド仮説(人工的な屋外(都市)・屋内(倉庫・工場等)構造は、平行・直角の強い特徴を持つという仮説)に基づき、単一画像から、カメラ30の姿勢および位置を推定することを可能とするものである。以下に説明する。
【0023】
なお本明細書では、カメラ30はピンホールモデルで近似可能であるとし、位置姿勢推定は幾何学的な問題として扱う。また床面等含め、水平面を全て「地面」と記述する場合がある。
【0024】
図3のフローを用いて、カメラ30の姿勢・位置の演算処理の具体的内容について説明する。ステップS5において、測定部11は、後述するスケールを決定するための実測値を取得する。実測値を得るための計測対象は、様々であって良い。例えば、後述する第1直線SLと第2直線SL2との実際の距離を、ポケットレーザー距離計などで測定してもよい。また例えば、カメラ30のレンズ中心の、地面からの高さを測定してもよい。測定は、測定部11によって自動で行われてもよいし、ユーザが測定した結果を制御部10に入力してもよい。
【0025】
なお、実測値を制御部10のメモリに保存しておき、読み出して使用する場合には、ステップS5を省略することが可能である。
【0026】
ステップS10において、カメラ30で撮影画像が取得される。
図4に、カメラ30の撮影画像の一例を示す。
【0027】
ステップS20において直線特定部12は、カメラ30で取得された撮影画像上で、第1直線SL1、第2直線SL2、第3直線SL3を特定する。第1直線SL1~第3直線SL3は、リアルワールドにおいて、同一平面(地面)内に存在している直線である。第1直線SL1および第2直線SL2は、平行な1対の直線である。第3直線SL3は、第1直線SL1および第2直線SL2に対して既知の角度を有する直線である。第1直線SL1~第3直線SL3の選択は、直線特定部12によって自動で行われてもよいし、ユーザによって実行されてもよい。またRANSAC(RANdom SAmple Consensus)など、様々な手法を用いることができる。
【0028】
図4に、第1直線SL1~第3直線SL3の特定例を示す。また
図5に、後述するステップS50で演算された演算結果を示す。
図5は、
図4を垂直方向に投影した図(すなわち、地面を上空から垂直に見下ろした図)に対応する。
図4および
図5の例では、第3直線SL3は、第1直線SL1および第2直線SL2に対して直角な直線である。
【0029】
ステップS30において、変数生成部13は、第1直線SL1の両端の位置、第2直線SL2の両端の位置、第3直線SL3の両端の位置、カメラ30の姿勢および位置、を表す13個の変数を生成する。
図4および
図5を用いて、以下に説明する。
【0030】
変数生成部13は、第1直線SL1~第3直線SL3が存在している地面を、XY平面と定義する。また、地面に対して垂直上方方向をZ軸方向と定義する。すなわち、z=0の面を地面とする。また、第1直線SL1および第2直線SL2の方向をY軸方向とするとともに、第3直線SL3の方向をX軸とするように、座標系を決定する。これにより、原点OCが決定される。原点OCは、システム全体の基準点である。原点OCは、あとで座標変換すれば良いため、任意の位置であってよい。
【0031】
図5に示すように、第1直線SL1の端点P11の座標値は、(p
1x,p
1y,0)となる。第1直線SL1の端点P12の座標値は、(p
1x,p
2y,0)となる。端点P11とP12とは、x座標は共通である。またz座標は0である。よって端点P11およびP12は、3つの変数p
1x,p
1y,p
2yを用いて表すことができる。
【0032】
同様に、第2直線SL2の端点P21の座標値は、(q1x,q1y,0)となる。第2直線SL2の端点P22の座標値は、(q1x,q2y,0)となる。よって端点P21およびP22は、3つの変数q1x,q1y,q2yを用いて表すことができる。
【0033】
第3直線SL3の端点P31の座標値は、(a1x,a1y,0)となる。第3直線SL3の端点P32の座標値は、(a2x,a1y,0)となる。端点P31とP32とは、y座標は共通である。またz座標は0である。よって端点P31およびP32は、3つの変数a1x,a1y,a2xを用いて表すことができる。
【0034】
以上により、第1直線SL1、第2直線SL2、第3直線SL3の両端6点の座標を表す変数を、12個のXY座標値ではなく、9個とすることができる。これは上述したように、平行の条件や直角の条件が存在し、これらの条件が変数の決定方法に組み込まれているためである。換言すると、マンハッタンワールド仮説が、最適化の目的関数に組み込まれているためである。
【0035】
なお第3直線SL3は、第1直線SL1および第2直線SL2と直交せずに、傾きθ(既知の値)を有していてもよい。この場合、端点P32の座標値を、(a2x,(a2x-a1y)tanθ,0)とすればよい。この場合においても、両端6点の座標を表す変数を9個とすることができる。
【0036】
また変数生成部13は、カメラ30の3次元姿勢角を示す3つの変数rx,ry,rzを生成する。(rx,ry,rz)は、長さ1に単位化した回転軸ベクトルに、その軸まわりの回転角Φをかけた変数である。
【0037】
また変数生成部13は、カメラ30の位置を示す変数を生成する。具体的には、カメラ30の位置のXY座標値を0とする。すなわち
図5の原点OCの鉛直上方にカメラ30が位置しているとする。これにより、カメラ30の位置を、Z方向の高さを示す1つの変数hで表すことができる。不要な変数を増やさないようにすることが可能となる。
【0038】
以上のように定式化すると、3本の直線の両端で9変数、カメラ30の姿勢で3変数、カメラ30の高さ(位置のZ座標値)で1変数となる。よって、合計13変数の最適化問題とすることができる。変数を減らす効果を説明する。第1直線SL1~第3直線SL3の位置およびカメラ30の姿勢・位置は、全体の座標軸の方向と原点位置および前述のスケールに関して、任意性が存在する。そこで、上述のように変数を減少させることで、最小化問題としての任意性を極力減らすことができる。そして任意性を、スケールのみにすることができる。
【0039】
ステップS40において、演算部14は、第1直線SL1、第2直線SL2、第3直線SL3を、カメラパラメータで、カメラの画像に変換する。すなわち、第1直線SL1の端点P11およびP12、第2直線SL2の端点P21およびP22、第3直線SL3の端点P31およびP32をカメラのスクリーン上に投影した、投影位置を求める。以下に具体的に説明する。3次元での点の位置を(x,y,z)
Tとする。Tは行列の転置を表す。スクリーン上の2次元のX,Yの位置を(u,v)とする。下式により、3次元の点の位置(x,y,z)
Tを、2次元のX,Yの位置(u,v)に変換することができる。
【数1】
【数2】
【数3】
ここで、Rは回転変換(行列)である。行列で書くと9個要素があるが、自由度は3である。具体的には、前述した(rx,ry,rz)を使用すればよい。(0,0,h)
Tは、カメラ30の位置である。fはカメラ30の焦点距離である。c
x、c
yはスクリーンの中心点の2次元XY値であり、定数である。
【0040】
上記式に基づいて、第1直線SL1の両端、第2直線SL2の両端、第3直線SL3の両端の、2次元のX,Yの位置(u,v)を計算する。これにより、端点P11(p1u,p1v)、端点P12(p2u,p2v)、端点P21(q1u,q1v)、端点P22(q2u,q2v)、端点P31(a1u,a1v)、端点P32(q2u,q2v)、が算出される。
【0041】
ステップS50において、演算部14は、撮影画像上における第1直線SL1の両端、第2直線SL2の両端、第3直線SL3の両端の各々の値と、上記で算出された2次元のX,Yの位置(u,v)と、の偏差の二乗和が最小(正確には極小)となるように、13個の変数の解を演算する。すなわち、p1x,p1y,p2y,q1x,q1y,q2y,a1x,a1y,a2x(第1直線SL、第2直線SL2、第3直線SL3の両端を表す変数)、および、rx,ry,rz(カメラの3次元姿勢角を表す変数)、および、h(カメラの高さを表す変数)、の変数の組の解が(同時に)計算される。そして収束に正孔すると、1組の解が得られる。これは唯一の解ではなく特解であるが、任意性はスケールにしか残っていない。
【0042】
この最適化問題は、目的関数が単なる座標変換とピンホールカメラの中心射影の変換の組み合わせから作られているため、代数式で機械的に微分可能である。レーベンバーグマーカート法(準ニュートン法)、あるいはニュートン法で解くことができ、産業車両などのオンボードに組み込める程度の計算速度も得ることができる。
【0043】
ステップS60において、収束判断部15は、演算が収束したか否かの判定を行う。任意性を残したまま最適化を行うため、条件によっては収束しづらいこともあるためである。収束判定は、一般的なニュートン法の収束判定で行うことができる。
【0044】
また裏表の任意性も存在するため、反対側の解(例:地面の下のカメラ位置)に収束していないかも確認する必要がある。なお、おおよその初期値を与えることで、反対側の解に収束することを抑制することが可能である。初期値は、車体位置姿勢算出部19による自己位置推定(オドメトリ等)によって決定してもよい。収束したと判断された場合(S60:YES)には、ステップS70へ進む。
【0045】
ステップS70において、取得部16は、全体のスケールを決定する。前述したように、ステップS50の演算では、全体のスケールだけが決定不能な量である。そのため、ステップS5で測定部11が測定した測定結果に基づいて、スケールを求める。そして、姿勢パラメータ以外の全体を、求めたスケールに基づいて定数倍することで、一般解(実世界の解)を得ることができる。その結果、カメラ30の姿勢および位置を取得することが可能となる。
【0046】
(効果)
本実施例の技術では、カメラ30の単一視点の撮影画像のみから、カメラ30の姿勢を簡易に求めることができる。カメラ姿勢の推定用の画像を特別に取得したり、画像内の特徴点の位置を別途測量等する必要がないため、事前準備の手間を省略することが可能となる。
【0047】
本実施例の技術では、(同一平面上の)1組の平行線と、平行線との角度が既知の1本の直線が写った画像があれば、カメラ30の姿勢および位置を求めることができる。そしてこれらの直線の組み合わせは、道路と横断歩道や、直方体の建造物の外枠の一部など、リアルワールドの多くの場所に存在している。従って本実施例の技術は、適用範囲が広く、実用に適した技術である。
ステップS20において直線特定部12は、第1平面に存在している、平行な1対の第1直線SL1および第2直線SL2を特定する。また、第1平面と既知の角度で交差する第2平面を特定し、その第2平面に存在している第3直線SL3を特定する。
ステップS30において、変数生成部13は、第1直線SL1および第2直線SL2が存在している地面を、XY平面と定義する。また、第1直線SL1および第2直線SL2の方向をX軸方向とする。そして、右手系でY軸方向を決定する。
ステップS40およびS50における演算部14による演算内容は、実施例1と同様であるため、詳細な説明を省略する。しかし、実施例2のように2つの平面を用いる場合には、実施例1のように1つの平面を用いる場合に比べて、局所最適解が持つ任意性の次元が1次元高いことになる。従って実施例2では、第1平面(地面)と第2平面(壁面WF)との間の位置関係(両面が交わる直線がどこにあるか)は未知のまま解が求められる。そのため、地面のスケールと壁面WFのスケールとは、別々に決まる。換言すると、地面の高さと壁面WFのY座標値とに、独立に任意性が残る。よって計算上は、第3直線SL3のY座標値(k1y)を任意に定めることができる。しかし、地面を用いてカメラの姿勢・位置を求める場合には、壁面WFのY座標値k1y(すなわちスケールと等価)は使用しないため、何れの値となってもよく、特に正確な値に定める必要はない。
地面よりも建造物の壁面の方が、平面の精度が高い。これは、排水性などを考慮して、地面には様々な傾きが形成されているためである。本実施例の技術では、精度の高い壁面を用いてカメラ30の姿勢・位置を演算することができるため、演算結果の精度を高めることが可能となる。
建造物の壁面は、一般的に、地面に対して垂直である。よって、壁面に含まれる直線を用いることで、マンハッタンワールド仮説に従う直線を簡易に特定することが可能となる。
以上、本明細書が開示する技術の実施例について詳細に説明したが、これらは例示に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。
本実施例では、ステップS20において、直線特定部12が3本の直線を特定する場合を説明したが、この形態に限られない。4本以上の直線を特定することが可能である。正確な平面上にあることが分かっている直線の数を増加させるほど、演算結果の精度を高めることが可能となる。なお、マンハッタンワールド仮説に従う場合、直線を1本増加させるごとに、変数が3個増加する。しかし、変数の数が数十個の範囲であれば、演算処理の負担を抑制できるため、産業車両などの制御サイクルに組み込むことが可能である。また変数の数が数百個の範囲であれば、安定して解くことが可能である。
回転変換(行列)Rは、様々な態様であってよい。例えば自動車でよく使用される、Z軸まわりにθz回転させ、その後のY軸まわりにθy回転させ、その後のX軸まわりにθx回転させるという、回転行列を3個掛けたものを使用することも可能である。この場合、回転変換のパラメータは、θx,θy,θzとなる。また回転の順番は、決めごととしておく必要がある。
本実施形態では、カメラ30を備える移動体としてフォークリフト1を説明したが、この形態に限られない。他の様々な移動体(例:移動ロボット、モバイルマニュピレータ、ドローン)に対しても、本明細書の技術を適用可能である。また移動体に限らず、固定物に搭載されているカメラ30に対しても、本明細書の技術を適用可能である。
本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。