[カメラシステムのハードウェア構成]
図1は、本実施の形態のカメラシステムのハードウェア構成例である。なお、本実施の形態のカメラシステムは、移動体の一種である自動車に設置され、当該自動車の周囲を監視するものとして説明する。図1において、100は自動車である。
図1において、1は自動車100の走行速度を示す車速パルス情報を出力する車速パルス出力部である。車速パルス出力部1は、自動車100に搭載されたメーターワイヤーが回転する毎に車速パルスを出力する。メーターワイヤーの回転数は、自動車100の走行速度が速いほど増加するものとする。メーターワイヤーの回転数が毎分637回転の時に、自動車100のスピードは60km/hであるとする。車速パルスの出力には種々の種類があるが、本実施例では、メーターワイヤー1回転あたり「4パルス」であるとする。メーターワイヤー1回転につき車速パルス数が4パルスの場合、自動車100の時速が60kmの車速パルス数は、637(ワイヤ回転)×4(パルス)=2548パルスとなる。よって、本実施例の車速パルス出力部1は、例えば自動車100が時速60km/hで走行中のとき毎分2548パルス(毎秒では42.47パルス(Hz))を出力する。また、自動車100のタイヤ外形が62.5cmとするとタイヤ一周長は1.9625[m]である。時速60[km/h]の時、1秒あたりタイヤは8.49回転する。したがって、時速60[km/h]では、タイヤ一回転あたり42.47パルス/8.49回転=5パルス(Hz)となる。よって、車速パルス出力部1が出力する車速パルス数から自動車100が進む距離および速度を算出することが可能になる。本実施例の自動車100は1パルスあたり0.3925[m]である。なお、この車速パルス出力部1は、これに限らず車速に関係する情報で同様の出力を行うものであれば良い。例えば、車速パルス出力部1は、加速度センサにより、擬似的に速度を求め、その速度に応じたパルスの出力を行うものであっても良い。
図1において、2は自動車100の図示しないシフトレバーの位置を示すドライブシフト情報を出力するドライブシフト情報出力部である。なお、本実施の形態において、自動車100は、オートマチック型の変速機を有する事とする。また、自動車100のシフトレバーの位置が、前進方向への駆動を示すドライブ位置にある場合にはD情報、バックにある場合にはR情報、ニュートラル位置にある場合にはN情報、パーキング位置にある場合にはP情報が出力されることとする。また、これらの信号及び信号名は、代表的なオートマチック型変速機をベースにしたもので、他の名称、駆動機構でも、同様の作用をするものであれば、これらに限られるものではない。
図1において、3は、車速パルス出力部1およびドライブシフト情報出力部2から取得する情報に基づき、自動車100の車速や、走行中・停車中などの走行状態を特定したり、後述する撮像装置4からの画像情報を画像処理してディスプレイ5へ出力したりする画像処理装置である。
画像処理装置3は、インターフェイス301、CPU(中央処理装置)302、ROM(Read Only Memory)303、通信画像制御部304、RAM(Ramdom Accsess Memory)305、画像記憶部として機能するフレームメモリ307、GDC(Graphics Display Controller)306、及び、カウンタ308を有している。また、これらは、バス309を介してデータ通信を行っている。なお、本実施例の画像処理装置3に含まれるインターフェイス301、CPU302、ROM303、通信画像制御部304、RAM305、フレームメモリ307、GDC306、及び、カウンタ308の構成は、本実施例に限るものではなく、適宜変更が可能であるものとする。
インターフェイス301は、車速パルス出力部1及びドライブシフト情報出力部との通信を行うものである。また、ROM303には、CPU302が実行するプログラムが記憶されている。すなわち、CPU302は、ROM303に記憶されたプログラムを読み込みながら処理を行うことで、画像処理装置3としての各種処理を行う。
CPU302は、例えば、カメラから画像および画像の露光時間を取得して、画像と画像の露光時間とを関連付けて時系列に画像記憶部に記憶させる画像取得部、画像から照度を推定し、照度に対応する第一露光時間を算出する第一露光時間算出部、画像取得部により取得された最新のフレームの画像の露光時間が第一露光時間よりも短い場合に、最新のフレームの画像の露光時間と過去のフレームの画像の露光時間とを積算して第一露光時間に合致させ、合致させたときに使用した複数の画像を特定する画像特定部、特定した複数の画像をフレーム加算して出力画像を生成する出力画像生成部、生成した出力画像をディスプレイに出力する出力部、として機能する。
また、CPU302は、画像からSN比を算出し、カメラから取得する画像のSN比が所定値以上になる第二露光時間を算出する第二露光時間算出部、第二露光時間算出部で算出された第二露光時間をカメラに出力する通信制御部として機能する。また、第二露光時間算出部は、取得した画像からSN比を算出し、算出したSN比が第二の所定値以下になるまで、現在の露光時間よりも少ない露光時間を前記カメラに出力する。また、CPU302は、例えば、自動車の速度に応じて第三露光時間を特定する第三露光時間算出部、として機能し、第二露光時間算出部は、第一露光時間と第三露光時間との内の短いほうの露光時間を第二露光時間とする。また、第一露光時間算出部は、画像記憶部に記憶された画像のSN比を算出し、SN比に対応する第一露光時間を算出しても良い。また、出力画像生成部は、第一露光時間に合致するように最新のフレームの画像の露光時間から過去のフレームの画像の露光時間を積算したときに、端数が生じる場合、最古のフレームの画像の露光時間と当該端数とから、当該最古のフレームの画像をフレーム加算する際の重みを決定する。第二露光時間算出部は、カメラが撮像した画像内にノイズ検出のためのノイズ領域が撮像されるように設けられた場合に、SN比を画像内のノイズ領域から算出した雑音電力の分散値と、画像内のノイズ領域以外の領域から算出した信号電力の分散値とから算出する。
RAM305は、CPU302のプログラム実行の際の一時データを格納する。また、このRAM305は、後述する撮像装置4の露光時間情報、車速パルス出力部1からの車速パルス信号、及び、ドライブシフト情報出力部2からのドライブシフト情報が格納される。
以下の記載において、CPU302が、データを取得・記憶する記載がある場合、実際には、RAM305に一時的に該データを記憶させているものとする。
フレームメモリ307は、撮像装置4から送られてくる各フレームの画像が一時的に記憶される。本実施例でフレームは、撮像装置4が撮像した動画像の最小単位である1コマの画像を示す。例えば、撮像装置4が1秒で30枚の画像を撮像する場合、各1枚それぞれの画像をフレームという。また、フレームメモリ307は、画像と画像の露光時間と関連付けて記憶する画像記憶部として機能する。なお、本実施例では、フレームメモリ307が画像と画像の露光時間と関連付けて記憶するが、この構成に限らずRAM305とフレームメモリ307が共通した構成であっても良い。
GDC306は、CPU302が生成してフレームメモリ307に記憶された各フレームの出力画像をディスプレイ5に表示させる。
カウンタ308は、例えば、1/1024秒間に1カウントずつカウントアップするカウンタである。このカウンタは、本実施例では、説明の便宜上、ハードウエアによるカウンタとしたが、1/1024秒間隔でパルスを発生させるパルス出力器を設け、CPU302がカウントするようにしても良い。また、その際には、ROM303は、CPU302にこのカウント処理を行わせるプログラムが格納されており、CPU302は、このプログラムに従い、カウント処理を行うことになる。
なお、本実施例では、ROM303にCPU302が処理するプログラムが格納されている。しかしながら、これに限らず、画像処理装置3は、ハードディスクを有し、このハードディスクに該プログラムを蓄積させておき、CPU302は、そのハードディスクからプログラムを読み出して処理を行っても良い。同様に、DVD、CD、Blue−rayなどの記憶媒体に記憶させたプログラムを、対応する読み出し装置で読み出すようにしても良い。なお、CPU302は、ROM303に記憶されているオペレーティングシステムプログラムを実行しているものとする。また、このオペレーティングシステム上では、マルチタスクが可能であり、CPU302は、後述する各処理を、見かけ上、並列に処理できるものとする。また、各々の処理は、ROM303に記憶されているプログラムをCPU302が実行することにより、行われるものとする。
図1において、4は自動車100に設置され、自動車100の外部を撮像するための撮像装置である。本実施例では、撮像装置4は、自動車100の前方に設置されていることとする。なお、この実施例では、自動車の前方としたが、対象となる自動車の形状や、カメラ設置の目的に合わせて、設置場所の変更や複数のカメラを使用しても良い。
撮像装置4は、カメラ401、カメラ制御部402、及び、RAM403を有する。
カメラ401は、CCD(Charge Coupled Device)やCMOS(Complementary Metal Oxide Semiconductor)などの撮像素子(図示せず)及びレンズ(図示せず)を有している。また、このカメラ401は、カメラ制御部402による制御に基づき、撮像を行い、ディジタルの撮像データを出力する。
カメラ制御部402は、画像処理装置3との通信を行うことが可能である。このカメラ制御部402は、画像処理装置3との通信により、画像処理装置3から取得した露光時間情報をRAM403に記憶する。また、カメラ制御部402は、RAM403に記憶した露光時間情報に基づき、カメラ401の露光時間制御を行うと共に、カメラ401が出力した撮像データを、画像処理装置3へ送信する。
なお、画像処理装置3と撮像装置4との間の通信は、IEEE1394Automotiveの規格に基づく伝送路による通信を行ってもよい。本実施例では、カメラ401にて撮像された画像は、各画素毎に0〜255の256階調のディジタル画像データとする。また、階調の値が小さいほど暗い事を示しているものとする。なお、カラーのディジタル画像データの場合、一般には光の三原色である、赤・青・緑の各々で階調を有しているが、実施の形態1では、説明を容易にするために単に各画素が256階調を有するとして説明することとする。ただし、カラー画像データのうち、1つの色の階調情報、例えば、赤の階調情報を使用して実施の形態1の階調情報として利用しても良い。当然、画素毎に各色の平均を算出し、それを実施の形態1の階調情報としても良い。
[撮像処理]
図2は、撮像処理のフローチャートである。本実施例の撮像装置4のRAM403はカメラ401によるフレーム撮像時間(露光時間)を記憶していることとする。撮像装置4のカメラ制御部402は、RAM403に記憶されている露光時間情報に基づく露光時間で、カメラ401による撮像を行う。カメラ制御部402はカメラ401にて撮像された画像情報と露光時間情報とをRAM403に蓄積する(S801)。カメラ制御部402は、RAM403に蓄積した画像情報および露光時間情報を画像処理装置3へ送信する(S802)。画像処理装置3のCPU302は、通信画像制御部304を介して、この画像情報と露光時間情報とを受信する(S803)。なお、S803における受信処理は、CPU302が、通信画像制御部304からの画像情報と露光時間情報が到来するのを待っており、画像情報と露光時間情報が到来したときに、S804の処理に移行するものとする。
CPU302は、受信した画像情報と露光時間情報とをフレーム情報に関連付けてフレームメモリ307に記憶する(S804)。
図3はフレームメモリに格納されたフレーム情報である。フレーム情報8は、画像情報のフレーム番号と当該フレーム番号に対応する画像情報を撮像したときの露光時間情報とを含む。
CPU302は、露光時間の算出を行う(S805)。この処理については、後述する[露光時間算出処理]にて詳細を説明する。S805の露光時間の算出処理が完了すると、CPU302は、通信画像制御部304を制御し、算出した露光時間情報を撮像装置4に送信する(S806)。
撮像装置4のカメラ制御部402は、画像処理装置3からの露光時間情報を受信する(S807)と、RAM403の露光時間情報を、画像処理装置3から受信した露光時間情報に更新する(S808)。カメラ制御部402は、このS808の処理が完了すると、S801に戻り、次の撮像処理を行う。
なお、本実施例において、撮像装置4の処理は、撮像した画像情報に対する露光時間を受信し、その後、次の撮像を行っている。しかしながら、カメラ制御部402は、S801〜S802、S807〜S808の処理を並行して実行できるようにしてもよい。この場合、カメラ制御部402は、S802の処理が完了するとS801に処理を移行し、また、S808の処理が完了するとS807の処理へ各々移行すればよい。これにより、カメラ制御部402は、画像情報の送信が完了すると、すぐ次の撮像処理を行うことが可能となる。この場合、撮像装置4は、撮像した画像情報と共に当該画像情報を撮像したときの露光時間情報を画像処理装置3に送信する。
なお、カメラ制御部402は、S802の処理が完了するとS801の処理を実行するようにしておき、画像処理装置3からの通信があると、割り込みにてS807〜S808の処理を行うようにしても良い。具体的には、撮像装置4に画像処理装置3からの情報を受信する受信部を設け、この受信部は、画像処理装置3から情報を受信すると、カメラ制御部402へ割り込み信号を出力するようにしておく。カメラ制御部402は、この割り込み信号に応じてS807〜S808の処理を実行するようにしておけばよい。
また、カメラ401は、カメラ制御部402が、カメラ401へ露光時間情報を入力すれば、カメラ401がそれに応じた露光時間で撮像を行うようにし、S801の処理の後、次の露光時間をカメラ401に指示するようにすれば、次の撮像を開始することができる。これにより、カメラ制御部402は、RAM403の画像情報を転送と並行して、次の画像の取得処理(S801の処理)を開始することが可能となる。
なお、CPU302は、S804の処理においてフレームメモリ307に記憶された画像情報について、[撮像処理]とは独立して、出力画像を生成する画像処理を実行する。CPU302は、フレームメモリ307に記憶された画像情報に基づき出力画像を生成し、生成した出力画像をGDC306によって、ディスプレイ5に表示させる。
以下、S805の[露光時間算出処理]の説明をする。画像処理装置3は、露光時間を算出する[露光時間算出処理]において、[車速算出方法決定処理]、[車速算出処理]および[照度・SN比算出処理]を実行する。
[車速算出処理]
図4は、車速算出処理のフローチャートである。
RAM305には、図5(A)に示すように、過去の速度を算出した時のカウンタ308のカウント値と過去の速度情報が記憶されるものとする。
CPU302は、インターフェイス301に車速パルス出力部1からのパルスが入力されていないか、チェックする(S201)。ここで、パルスが入力されていなければ(S201:No)、CPU302は、S201の処理に戻る。また、S201において、パルスの入力があったと判定した場合(S201:Yes)、カウンタ308よりカウント値を取得する(S202)。ここでは、カウンタ308のカウント値が「125228」であり、CPU302はこの値を取得したものとする。
次に、CPU302は、RAM305に記憶されているカウント値を読み出す(S203)。ここでは、図5(A)に示されるように、RAM305にはカウント値として「125200」が記憶されていたものとし、CPU302は、このカウント値「125200」を読み出したものとする。
次に、CPU302は、カウント値の差分を元に速度計算を行う(S204)。具体的には、CPU302は、カウンタ308から取得したカウント値から、RAM305から読み出した値の差分を求める処理を実行する。上記したように、カウンタ308から取得したカウント値は、「125228」であり、RAM305から読み出したカウント値は「125200」であるので、CPU302が、上記した差分を求める処理を行い出力する値(以下、差分値D)は、「28」である。
次に、CPU302は、以下の式に基づく演算を行い、自動車100の速度として時速を算出する。カウンタ値は1秒で「1024」であるため、前回のパルスの受信から今回のパルスの受信までの経過時間は、経過時間=D/1024となる。よって、「自動車100の速度S[km/h]=m[m]÷(D÷1024)[S]*C」となる。
ここで、「m」は、車速パルス出力部1からのパルスが出力されてから次のパルスが出力されるまでに自動車100が進む距離[m]である。本実施例では、「m」=0.3925[m]である。「D」は差分値である。「C」は定数である。本実施例の定数Cは「3.6」である。定数Cは、mが[m]すなわちメートル単位であり、また(D÷1024)が、[S]すなわち秒単位であるため、[km/h]に変換するための定数である。よって、CPU302が算出する速度自動車100の速度Sは、51.68[km/h]となる。
次に、CPU302は、図5(B)に示されるように、RAM305に記憶されている速度情報をS204の処理にて求めた自動車の速度「51.68」に更新する。同様に、CPU302は、図5(B)に示されるように、RAM305に記憶されているカウント値を、S202の処理にて取得したカウンタ308のカウント値「0125228」に更新し、S201の処理へ戻る。(S205)
なお、本実施例の画像処理装置3は、車速パルス出力部1が出力した一つの車速パルスが到来するごとに自動車100の走行速度を求めていたが、複数パルスが到来したときを契機に、速度算出処理を行っても良い。この場合、S204の処理における「m」の値は、自動車100が、車速パルス出力部1から、複数パルスが出力されるまでに進む距離と置き換えることで、算出が可能である。また、本実施例では、画像処理装置3は、算出した自動車100の走行速度をそのまま更新しているが、何回か同様の算出を行い、その平均を算出した結果を走行速度として、更新するようにしても良い。
[車速算出方法決定処理]
図6は車速を算出する方法を決定する処理のフローチャートである。
RAM305には、図7に示すように、ドライブシフト情報が記憶されるものとする。
CPU302は、インターフェイス301にドライブシフト情報出力部2からのドライブシフト情報の入力がされているか否かを確認する(S301)。ドライブシフト情報の入力がされていない場合(S301:No)、CPU302は、S301を再度実行する。ドライブシフト情報の入力がされていた場合(S301:Yes)、CPU302は、ドライブシフトがパーキングを示すドライブシフト情報であるか否かを判別する(S302)。ドライブシフトがパーキングを示すドライブシフト情報である場合(S302:Yes)、CPU302は、車両の速度が「0」であると決定する(S303)。ドライブシフトがパーキングを示すドライブシフト情報ではない場合(S302:No)、CPU302は、図4の処理を実行することで車両の速度を車速パルスのデータから算出する(S304)。
シフトレバーがパーキングであるとき、自動車100は停車している状態であり、自動車100のタイヤは回転していない。そこで、車速パルス出力部1から車速パルスが誤って出力された場合であっても、シフトレバー情報が、事実上停止している事を示すパーキングであれば、パルス出力に関係なく速度を“0”とする。以上の処理により、CPU302は車速を正確に算出することができる。
[照度およびSN比算出処理]
図8は照度および信号雑音比(以下SN比とする)の算出処理のフローチャートである。CPU302は、撮像された画像から照度を推定し、SN比を算出して露光時間の算出に使用する。
撮像装置4で撮像された画像は二つの領域を含むものとする。画像内の第一の領域は対象物を撮像する領域であるとし、画像内の第二の領域は画像のノイズ量を算出する領域であるとする。例えば、撮像装置4のカメラ401は、画像の所定の領域に所定の対象を撮像するように配置されてあるものとする。所定の対象は、例えば、車体のボディの一部などである。この所定の対象は、常に同じ画像が得られるため、同じ照度であれば同じ輝度になる。そこで、車体のボディの一部が撮像された領域を本実施例の第二の領域とすることができる。
CPU302は、第一の領域(以下信号電力領域とする)内の各画素の輝度値の分散を算出することにより、信号電力の分散を算出する。信号電力領域は、画像内のオプティカルブラックの領域または車体が写る領域を含まない領域である。なお、以下信号電力領域は対象物を撮像する領域の一部でよい。
CPU302は、第二の領域(以下雑音信号電力領域とする)内の各画素の輝度値の分散を算出することにより、雑音電力の分散を算出する。雑音電力領域は、画像内のオプティカルブラックの領域または車体が写る領域である。なお、以下雑音電力領域は、画像内のオプティカルブラックの領域または車体が写る領域の一部でよい。
CPU302は、画像内の信号電力領域内の画素の輝度値の平均値と分散値を算出する(S601)。CPU302は、取得した画像情報の信号電力領域内に相当する画素のそれぞれの輝度値を抽出し、抽出したそれぞれの輝度値の平均値および分散値を算出する。
CPU302は、例えば、数1の式により、信号電力領域の輝度値の加重平均を算出する。
数1のNは信号電力領域に含まれる画素数である。数1のXiは信号電力領域のi番目の画素の輝度値である。数1のAVEsは信号電力領域の輝度値の加重平均である。AVEsは、領域内の画素数(N個)のそれぞれの輝度値(Xi)の総和を信号電力領域内の画素数(N個)で割ることで算出される。
次に、CPU302は、例えば、数1の結果を用いて、数2の式により、信号電力の分散を算出する。
数2のPsは信号電力の分散を示す。Psは、信号電力領域の各画素の輝度値とAVEsとの差の総和を信号電力領域内の画素数(N個)で割ることで算出される。
次に、CPU302は、画像内の雑音信号電力領域内の画素の輝度値の平均値と分散値を算出する(S602)。CPU302は、取得した画像情報の第二の領域内に相当する画素のそれぞれの輝度値を抽出し、抽出したそれぞれの輝度値の平均値および分散値を算出する。
CPU302は、例えば、数3の式により、雑音電力領域の加重平均を算出する。
数3のMは雑音電力領域に含まれる画素数である。数3のXiは雑音電力領域のi番目の画素の輝度値である。数3のAVEnは雑音電力領域の輝度値の加重平均である。AVEnは、領域内の画素数(M個)のそれぞれの輝度値(Xi)の総和を雑音電力領域内の画素数(M個)で割ることで算出される。
次に、CPU302は、例えば、数3の結果を用いて、数4の式により、雑音電力の分散を算出する。
数4のPnは雑音電力の分散を示す。Pnは、雑音電力領域の各画素の輝度値とAVEnとの差の総和を雑音電力領域内の画素数(M個)で割ることで算出される。
次に、CPU302はSN比を算出する(S603)。CPU302は、S601,およびS602算出したPsおよびPnから、数5の式により、SN比を算出する。
数5のS/NはSN比を示す。CPU302は、数6により、数5で算出したSN比をdBに単位変換する。
次に、CPU302は、上記した撮像処理4から取得してフレームメモリ307に格納した画像の照度を推定する(S604)。上記撮像処理にて説明したように、フレームメモリ307に記憶された画像は、カメラ401が撮像した画像である。この画像の各画素は0(暗い)〜255(明るい)までの示す輝度情報を有している。CPU302は、フレームメモリ307に記憶されている画像の各画素の輝度情報を読み出して平均値を求めることによって、この画像の輝度の平均値を算出する処理を行う。本説明においては、CPU302は、輝度の平均値を“73”と算出したこととする。なお、本実施の形態は、平均値としたが、実際の人間の視覚に応じた適当な計数をかける処理を行うなどしても良い。
[露光時間算出処理]
図9は露光時間の調整処理のフローチャートである。CPU302は、画像から推定した照度、SN比、および車速から露光時間を決定する。
画像の明るさは、照度と露光時間のそれぞれに比例する。すなわち、照度が一定の場合、露光時間が増すほど画像は明るくなり、露光時間が一定の場合は、照度が増すほど明るくなる。このため、照度が小さい場合で露光時間を長くした場合、画像の明るさは十分になる。しかし、露光時間を長くした場合、画像処理装置3は、画像を出力するまでに時間を要することになるため、滑らかな映像を出力することができなくなる。
本実施例のカメラシステムは、通常時、1秒間に30フレームの画像を撮像し表示するものとする。本実施例の画像処理装置3は、滑らかな画像をディスプレイ5に出力することを目的とする。したがって、露光時間は少なくとも30フレームを表示できる時間(0.033sec)内になることが望ましい。
まず、CPU302は、推定した画像の照度から露光時間(A)を算出する(S701)。具体的には、CPU302は、照度−露光時間対応テーブル6を参照して、露光時間調整率を決定し、決定した露光時間調整率を元に現在の露光時間を調整することで、露光時間(A)を決定する。
図10は照度と露光時間調整率の関係を示す図である。
横軸は画像から推定した照度の状態、すなわち画像の平均輝度値を示す。縦軸は画像の照度から特定する露光時間の調整率を示す。現在撮像されている画像が適正明るさより明るい場合、カメラ401の露光時間を短くし、暗ければ長くする処理を実行すると、撮像装置4で撮像する画像が適正な明るさを有するようになる。上記したように照度の値は、その値が小さいほど暗い画像であることを示す。
照度−露光時間調整率テーブル6は、画像の照度を元に算出する露光時間(A)を特定するために用いるテーブルである。照度−露光時間調整率テーブル6は、照度と露光時間調整率とを含む。露光時間調整率は、現在の露光時間に対して調整する率を示す。例えば、現在の画像の露光時間が0.5秒で、露光調整率が120%の場合、露光時間(A)は、0.5×1.2=0.6秒となる。
本実施例では、照度と露光時間の関係を離散的に格納するものとし、ROM303またはRAM305は、図11に示す照度と露光時間の関係を照度−露光時間調整率テーブル6に記憶する。
図11は、照度−露光時間調整率テーブル6の構成例である。照度−露光時間調整率テーブル6は、照度と当該照度の場合の露光時間(A)との対応関係を記憶する。照度−露光時間調整率テーブル6は、適正明るさである128〜159より小さい値の場合は、露光時間を長くする露光調整率(100%を超える)、逆に大きい場合は、露光時間を短くする露光調整率(100%未満)が対応付されている。S604において、CPU302は、輝度平均値を“73”と算出している。また、取得した画像情報の露光時間は「0.02」秒であったとする。この場合、CPU302は、照度−露光時間調整率テーブル6を参照し、輝度平均値“73”に対応する露光時間調整率「1.2」を選択する。CPU302は、露光時間「0.02」秒と露光時間調整率「1.2」との積から、調整後の露光時間「0.024」秒を算出する。この調整後の露光時間を露光時間(A)とする。なお、露光時間(A)は、撮像された画像の目標の露光時間である。目標の露光時間とは、画像をディスプレイ5に表示する場合、当該画像が適切な明るさになるための露光時間である。目標の露光時間は、後述する[フレーム加算処理]で使用する。
次に、CPU302は、自動車100の速度から露光時間(B)を特定する(S702)。露光時間(B)は、自動車100のある速度において許容できる露光時間の最大時間である。具体的には、CPU302は、[車速情報取得処理]にてRAM305に記憶した速度情報を読み出し、ROM303に記憶している車速−露光時間対応テーブル7を参照して、読み出した速度情報に対応する露光時間(B)を特定する。
例えば、S204までの処理後の速度情報が図5(B)で示されるように“51.68”[km/h]であった場合、CPU302は、RAM305からこの速度情報“51.68”を読み出し、車速−露光時間対応テーブル7に対応する露光時間(B)として“0.0625”を決定する。
図12は速度と露光時間の関係を示す図である。横軸は自動車100の走行状態、すなわち車速を示す。縦軸は露光時間の最大時間を示す。図12の車速と露光時間の関係は、車速が速くなるほど露光時間の最大時間が短くなることを示す。本実施例では、車速と露光時間の最大値を離散的に格納するものとし、ROM303またはRAM305は、車速と露光時間の関係を車速−露光時間対応テーブル7に記憶する。
速度が遅い場合、露光時間(B)を長く設定するため、事実上、画像データの更新が遅くとも、運転者にとって見やすい明るさの画像データの取得が行われることを優先する。すなわち、低速もしくは停止している場合には、暗い場所においても詳細な画像の取得が可能となる。自動車100が低速走行している時もしくは停止しているとき、自動車100の運転者は、車幅の確認、後方の確認、周囲の物(人・障害物)などを行うことが多い。そして、そのような行動を行う際に、運転者は、撮像装置4で取得され、ディスプレイ5に映し出された画像情報を参考にして運転することが多い。本実施例のカメラシステムは、自動車100の速度が遅い場合、暗い場所でも露光不足の状態で撮影することはない。そのため、低速走行時や停止時に、自動車100の運転者に見やすい明るさの画像を提供することが可能となる。
また、運転者が通常の走行状態で自動車100を運転している場合は、カメラシステムに表示される画像を見ることは少なく、ほぼ車外を視認しながら運転を行っている。近年、運転者が車外を視認しながら運転している際の視線を大きく変えることなくディスプレイを見ることができる様に、運転者が運転している時に運転者の視界に入る位置にディスプレイ5が配置されることが多い。この様な状況において、ディスプレイ5に、運転者が車外を直接見ているのと似た画像で、かつ、フレームレートの低い画像が表示されてしまうと、運転者にとって違和感が生じてしまい、運転がしづらくなってしまうことがある。本実施例では、自動車100の速度が速くなると、フレームレートを高くする事により、車外を直接視認しながら運転する運転者にとって違和感の少ない画像を提供することが可能となる。
図13は、車速−露光時間対応テーブル7の例である。車速−露光時間対応テーブル7は自動車100の速度と当該速度での露光時間(B)との対応関係を記憶する。
図14は算出した露光時間の例である。図14(A)は算出した露光時間(A)であり、図14(B)は算出した露光時間(B)である。
次に、CPU302は、S701で算出した露光時間(A)またはS702で算出した露光時間(B)の値が変化したか否かを判定する(S703)。いずれかの露光時間が変化したと判定した場合(S703:Yes)、CPU302は、撮像装置4の露光時間を、露光時間(A)および露光時間(B)の内、短いほうの値に設定する(S704)。上記してきた例では、露光時間(B)は”0.0625”[秒]であり、露光時間(A)は“0.024”[秒]であるため、CPU302は、値の小さい“0.024”[秒]を選択する。この設定にすることで、撮像装置4は、露光時間(A)および露光時間(B)の内、短いほうの露光時間で撮像を行うことになる。
次に、CPU302は、露光調整済みフラグをオフにする(S705)。露光調整済フラグは、露光時間の設定が終了したか否かを示すフラグ情報である。本実施例では、動画像の滑らかな表示を目的とするため、露光時間は短いほうが望ましい。そこで、CPU302は、露光調整済フラグをオフにすることで、後に各フレームの画像を撮像する際の露光時間の設定を行う処理を実行する。
次に、CPU302は、S704で選択した露光時間を撮像装置4に送信するための露光時間に決定する(S706)。CPU302は、S806で撮像装置4にS706で決定した露光時間を送信する。撮像装置4は、S806で画像処理装置3から送信された露光時間情報で撮像を行う。一方、いずれの露光時間も変化していないと判定した場合(S703:No)、CPU302は、露光調整済フラグのオン/オフを確認する(S707)。
一方、露光調整済フラグがオフの場合(S707:No)、CPU302はSN比が所定の閾値以上であるか判定する(S708)。所定の閾値は、画像をフレーム合成することで画像内の対象物の視認性が上昇することが見込めるSN比よりも大きい値とする。SN比が閾値未満の場合、複数の画像をフレーム合成しとしても、画像のノイズが大きく、対象物の視認はできない。
画像のSN比が当該閾値よりも大きい場合、撮像装置4の露光時間を短くしても、フレームを加算することで、画像に写る対象物の視認が可能なSN比となる。そこで、SN比が所定の閾値以上である場合(S708:Yes)、CPU302は露光時間を短くする(S709)。その後、CPU302は、S709で設定した露光時間を撮像装置4に送信するための露光時間に決定する(S706)。
一方、SN比が所定の閾値未満である場合(S708:No)、CPU302は調整済みフラグをオンにする(S710)。CPU302は、現在の露光時間を維持(S711)し、現在の露光時間を撮像装置4に送信するための露光時間に決定する(S706)。
露光調整済フラグがオンの場合(S707:Yes)、CPU302は、現在の露光時間を維持する(S711)。露光調整済フラグがオンの場合、現在の露光時間は露光時間(A)および露光時間(B)に基づいて調整されているので、継続して使用される。CPU302は、S704で選択した露光時間を撮像装置4に送信するための露光時間に決定する(S706)。なお、CPU302は、露光時間に変化があった場合のみ撮像装置4に送信する構成にしてもよい。
CPU302は、画像から推定した照度が所定の値以下のときのみ、露光時間を調整する処理を実行することも可能である。この構成により、周囲が明るく十分な照度がある場合、従来どおりに動作することで、CPU302は滑らかな画像を表示できる。なお、画像のフレーム数が30fpsであり、1秒間に30枚の画像を撮像すればよい場合、複数の画像を重ね合わせることなく対象物を視認可能な画像が得られるのであれば、必要以上に露光時間を短くする必要はない。例えば、フレームを重ね合わせることなく、希望の明るさの画像を撮像できる場合、CPU302はその露光時間を撮像装置4に出力する。
次に画像処理装置3が実行する出力画像生成処理について説明する。
[撮像画像と出力画像の関係](フレーム加算の説明)
図15は、撮像画像と表示画像の関係を説明する図である。図15では、撮像画像の各フレームの(露光時間あるいはSN比)が(目標露光時間あるいは目標SN比)よりも小さいため、撮像装置4は複数のフレームの画像をフレーム合成して出力画像を生成して、出力画像を出力する場合を説明する。
a01,a02,a03,a04,a05,a06...はそれぞれ撮像装置4で撮像された画像(撮像画像)である。各撮像画像の露光時間は、画像処理装置3によって設定されている。a01,a02,a03,a04,a05,a06はそれぞれ時刻t01、t02、t03、t04、t05、t06で撮像されたものとする。
b00,b01,b02,b03,b04,b05,b06...はそれぞれディスプレイ5に出力する画像(出力画像)である。b00,b01,b02,b03,b04,b05,b06はそれぞれ時刻t01,t02、t03、t04、t05、t06、t07で撮像されたに対応する時刻に出力するものとする。b01、b02、b03、b04、b05、b06...は、複数の撮像画像を合成して作成されている。合成する画像の数は、各撮像画像の露光時間と、目標露光時間とから決定される。
例えば、b01は、a01およびa02が合成されたフレームである。b01,b02,b03,b04,b05,b06は、複数の撮像画像を合成しているため、実質的に露光時間が長くなり、この結果、画像の輝度が増加する。この結果、ディスプレイ5に出力するb01,b02,b03,b04,b05,b06の表示画像は、撮像された画像a01,a02,a03,a04,a05,a06に比べて明るくなり、撮像画像よりも対象物の視認性が向上する。
なお、撮像開始直後など、複数の撮像画像がない場合、CPU302は、例えばb00のように撮像画像a01を直接表示してもよい。ただし、撮像開始直後の場合、数秒の経過で合成するための過去の撮像画像を記憶できるまでは、ディスプレイ5に表示しないことも可能である。
なお、各画像の露光時間の積算値と目標露光時間とが一致しない場合、CPU302は以下の方法で出力画像を算出する。図15では、b04は、a05、a04およびa03の一部を合成することで算出されている。
CPU302は、目標露光時間を越える積算値(A)を特定する。b04の場合、CPU302はa05、a04およびa03の露光時間を積算する。この積算値(A)は、目標露光時間を越える最小の値とする。したがって、最も過去のフレームに相当する画像の露光時間があることにより、積算値(A)は目標露光時間を越えている。このとき、最も過去のフレームに相当する画像を調整してフレーム合成することが望ましい。
CPU302は、例えば以下の処理を行うことで、目標露光時間に合致する露光時間でのフレーム合成を行う。
まず、CPU302は、積算値(A)から最も過去のフレームに相当する画像の露光時間を引いた積算値(B)を求める。b04の場合、CPU302は、積算値(A)からa03の露光時間を引いた積算値(B)を求める。
次に、CPU302は、目標露光時間から積算値(B)を引くことで、目標露光時間に合致させるために必要な露光時間を算出する。b04の場合、CPU302は、目標露光時間から積算値(B)引いて必要な露光時間を求める。
次に、CPU302は、最も過去のフレームの画像の露光時間と必要な露光時間との比率に応じて、最も過去のフレームの画像の輝度値を下げる。b04の場合、CPU302は、a03の露光時間に対する必要な露光時間の割合でa03の画像の輝度の値を下げる。
次に、CPU302は、積算値(B)に含まれる露光時間に関連する画像、及び、輝度値を下げた最も過去のフレームの画像をフレーム合成する。b04の場合、CPU302は、積算値(B)に含まれるa05,a04の画像と、最も過去のフレームの画像のa03の輝度値を下げた画像とをフレーム合成する。
目標の露光時間に合わせて複数のフレームの画像を合成して出力画像を生成することにより、出力画像の輝度は一定になる。また、最も過去のフレームの画像の輝度を下げることにより、画像処理装置3は現時点の撮像対象の状態に近い出力画像を生成することができる。
[露光時間と加算フレーム数の関係]
図16は、露光時間調整量と加算フレーム数の関係を示す図である。縦軸は加算フレーム数を示す。横軸は目標露光時間に対する露光時間算出処理で算出した露光時間の割合を示す露光時間調整量である。露光時間調整量が短い場合は、目標露光時間に対して現在の露光時間が短いことが示されており、目標露光時間にするために合成するフレーム数は多くなる。露光時間調整量が長い場合は、目標露光時間に対して現在の露光時間が長いことが示されており、目標露光時間にするために合成するフレーム数は少なくなる。
本実施例では、露光時間と加算フレーム数の関係を例えば関数の情報として、ROM303またはRAM305に格納されているものとする。なお、離散的に記憶することも可能であるが、出力画像の明るさがばらつく恐れがある。
[出力画像生成処理(露光時間)]
図17は露光時間に基づく出力画像生成処理のフローチャートである。画像は、目標の露光時間であれば照度が十分であり、対象物を視認することが可能な明るさとなる。しかし、露光時間算出処理で短時間に調整された露光時間で撮像される画像は、当該画像を重ね合わせた場合、対象物を視認できるだけの明るさが確保できない場合がある。したがって、一枚の画像のみでは暗く利用者は対象物を視認することは難しい場合がある。
そこで、CPU302は、取得した画像の露光時間が目標露光時間に足りない場合に、目標露光時間に相当する出力画像を生成する。出力画像は、複数のフレームの画像を合成(重畳)することで生成させる。本実施例では、合成の一つとしてフレーム加算を説明する。CPU302は、フレーム加算するフレームの数(加算フレーム数)を以下の処理により決定する。
CPU302は、現フレームの露光時間が目標露光時間よりも短いか否かを判定する(S901)。本実施例の目標露光時間は、撮像画像に基づき推定された照度から算出された露光時間(A)とする。撮像画像から推定された照度によって目標の露光時間を決定することで、ディスプレイ5に出力される映像の明暗の変化が自然になる。
現フレームは、撮像装置4から受信した画像である。受信した画像は露光時間情報が関連付けられている。CPU302は画像に関連付けられた露光時間情報が示す露光時間と目標露光時間とを比較する。
現フレームの露光時間が目標露光時間以上である場合(S901:No)、CPU302はフレーム加算を行わない(S902)。現フレームの露光時間が目標露光時間以上である場合、現在のフレームの画像は要求される輝度を有するためである。なお、CPU302は、S902においてフレーム加算を行わず、目標の露光時間に合致するように、目標露光時間と現在のフレームの露光時間の比率に応じて現在のフレームの輝度値を下げることも可能である。
一方、現在のフレームの画像の露光時間が目標露光時間よりも短い場合(S901:Yes)、CPU302はフレーム加算を行う必要がある。CPU302は、フレーム加算を行うフレーム数を決定し(S903)、目標露光時間に加算後の画像の露光時間の積算が合致するように、現フレームと過去の複数のフレームとを加算する。
なお、加算するフレーム数は、演算時間の短縮の観点では、正数でよい。しかし、加算するフレーム数を決定する閾値の近辺であった場合、正数で算出した結果得られるフレームの照度によっては、加算フレーム数が変動することにより、目標の照度に対して不安定になる場合がある。この結果、ディスプレイに表示する画像が明るくなったり暗くなったりする恐れがある。そこで、加算するフレーム数に小数点以下の端数が生じた場合、該当するフレームに小数点以下の重み付けをしたうえで加算することが考えられる。この場合、加算するフレームで最古のフレームについては、重み付けするため、薄くなる。この結果、出力画像の明るさが一定になるだけでなく、最古の画像が薄くなるため、出力画像の残像(像流れ)が減少する効果がある。また、加算するフレーム数に小数点以下の端数が生じた場合、該当するフレームを加算フレームとした後、フレームの輝度が一定になるように演算することも考えられる。
CPU302は、S903で決定したフレーム数に応じてフレーム加算を実行し、実行得られる出力画像を生成する(S904)。CPU302はフレーム数に相当する数のフレームの画像を現在から過去に順に読みだす。CPU302は、現在のフレームの画像の各画素の輝度値に、読み出した過去のフレームの画像の各画像の輝度値を積算することで、出力画像を生成する。なお、本実施例では、単に各フレームの各画素をそれぞれ積算して出力画像を生成したが、その前に各フレームの画像単独でのノイズ除去をしても良い。
CPU302は、生成した出力画像をGDC306からディスプレイ5に出力する(S905)。ディスプレイ5は画像処理装置3から送信された出力画像を受信すると、受信した出力画像を表示する。
[出力画像生成処理(SN比)]
図18はSN比に基づく出力画像生成処理のフローチャートである。画像は、目標のSN比であれば信号電力が雑音電力に対して十分であり、対象物を視認することが可能な画像となる。しかし、露光時間算出処理で短時間に調整された露光時間で撮像される画像は、当該画像を重ね合わせた場合、対象物を視認できるだけの明るさが確保できない場合がある。したがって、一枚の画像のみでは利用者は対象物を視認することは難しい。
そこで、CPU302は、目標のSN比になるように複数のフレームをフレーム加算する。CPU302は、フレーム加算するフレームの数(加算フレーム数)を以下の処理により決定する。なお、目標のSN比は、予め定義しておく。
CPU302は、現フレームのSN比は目標のSN比よりも短いか否かを判定する(S1001)。本実施例の目標のSN比は、撮像画像に基づき推定されたSN比から算出された露光時間(A)とする。撮像画像から推定されたSN比によって決定された露光時間に対応するように目標のSN比を決定することで、ディスプレイ5に出力される映像のSN比が自然になる。 現フレームは、撮像装置4から受信した最新の画像である。受信した画像は露光時間情報が関連付けられている。CPU302は画像から算出したSN比と露光時間調整処理において算出した目標のSN比とを比較する。
現フレームのSN比が目標のSN比以上である場合(S1001:No)、CPU302はフレーム加算を行わない(S1002)。現フレームのSN比が目標のSN比以上である場合、現在のフレームの画像は要求されるSN比を有するためである。
一方、現在のフレームの画像のSN比が目標のSN比未満の場合(S1001:Yes)、CPU302はフレーム加算を行う必要がある。CPU302は、フレーム加算を行うフレーム数を決定し(S1003)、目標のSN比に加算後の画像のSN比の積算が合致するように、現フレームと過去の複数のフレームとを加算する。
なお、加算するフレーム数は、演算時間の短縮の観点では、正数でよい。しかし、加算するフレーム数を決定する閾値の近辺であった場合、正数で算出した結果得られるフレームの照度によっては、加算フレーム数が変動することにより、目標のSN比に対して不安定になる場合がある。この結果、ディスプレイに表示する画像が明るくなったり暗くなったりする恐れがある。そこで、加算するフレーム数に小数点以下の端数が生じた場合、該当するフレームに小数点以下の重み付けをしたうえで加算することが考えられる。この場合、加算するフレームで最古のフレームについては、重み付けするため、薄くなる。この結果、出力画像の明るさが一定になるだけでなく、最古の画像が薄くなるため、出力画像の残像(像流れ)が減少する効果がある。また、加算するフレーム数に小数点以下の端数が生じた場合、該当するフレームを加算フレームとした後、フレームの輝度が一定になるように演算することも考えられる。
CPU302は、S1003で決定したフレーム数に応じてフレーム加算を実行し、実行得られる出力画像を生成する(S1004)。CPU302はフレーム数に相当する数のフレームの画像を現在から過去に順に読みだす。CPU302は、現在のフレームの画像の各画素の輝度値に、読み出した過去のフレームの画像の各画素の輝度値を積算することで、出力画像を生成する。なお、本実施例では、単に各フレームの各画素をそれぞれ積算して出力画像を生成したが、その前に各フレームの画像単独でのノイズ除去をしても良い。
CPU302は、生成した出力画像をGDC306からディスプレイ5に出力する(S1005)。ディスプレイ5は画像処理装置3から送信された出力画像を受信すると、受信した出力画像を表示する。
以上の処理により、画像処理装置3は、撮像装置4が画像を撮像する際の露光時間をSN比が確保できる最短の時間に設定する。画像処理装置3は、目標露光時間よりも現在撮像しているフレームの露光時間が短い場合、露光時間の積算が目標の露光時間になるように、過去のフレームをフレーム合成する。画像処理装置3は、フレーム合成した画像をディスプレイ5に出力する。出力画像の露光時間は、事実上、目標露光時間に等しくなる。この結果、出力画像は、一定の明るさとなり、かつSN比が確保できる最短時間のフレームレートで出力できるようになる。
例えば、暗所でかつ自動車100の速度が遅い場合、露光時間(B)は目標の露光時間(A)よりも短くなる。また、ディスプレイに表示する画像を滑らかにするためには、ディスプレイの出力可能なフレームレートで画像を切り替えることが望ましい。撮像装置4は、このフレームレートに合う露光時間で撮像することが望ましい。しかし、暗い場所で露光時間を下げすぎる場合、ノイズが大きくなるため、対象物を視認できなくなる場合がある。そこで、撮像装置4は、所定値以上のSN比となる画像を撮像できる露光時間以上で対象を撮像する。所定値以上のSN比となる条件で撮像された画像は目標の明るさに足りず、暗い画像となる。ここで、単なる画像補正で明るくした場合、ノイズも増幅されるため、対象物を視認しにくい状態は変わらない。しかし、複数のフレームの画像に対応付けた露光時間の積算値が露光時間(A)に合致するように、複数のフレームの画像を重ね合わせることで、ノイズが減少するとともに、滑らかな画像を出力することが可能になる。
車内のディスプレイ5は滑らかで外部の照度に応じた明るさの動画像を表示することにより、車窓から見る車外の景色とディスプレイ5が表示する動画像の明るさおよび動きの差が小さくなるため、自動車100を運転する運転者は違和感なく運転に集中することができる。
この結果、画像処理装置3は、滑らかで、ノイズが少なく、外部の照度に合致した映像を出力することができる。
なお、本実施例では、常時、露光時間(A)と露光時間(B)とを対比させ、一枚のフレームの露光時間を所定値以上のSN比が確保できる画像を撮像可能な長さにし、複数のフレームを合成することでディスプレイに出力する画像を生成している。しかし、例えば昼間など、露光時間が短くとも明瞭な画像が取得できる場合は、露光時間の最大時間の制限をする必要はない。例えば、車外の照度を検出する照度センサをインターフェイス301に接続可能に設け、所定以下の照度であった場合に、露光時間の制限を掛けるようにしても良い。
また、実施例では、カメラ401が撮像した画像の輝度を元に露光時間(A)を選択しているが、これに限るものではない。例えば、カメラ401の撮像方向の照度を検出する照度センサを設け、その照度センサの照度情報を元に、露光時間(A)の選択を行うようにしても良い。但し、本実施例の様にカメラ401が撮像した画像の輝度を元に露光時間の選択をすれば、照度センサが無くとも適切な露光時間を選択できることが可能である。