[脈波検出装置の概要]
最初に、実施例1に係る脈波検出装置の概要を説明する。本願の開示する脈波検出装置は、例えば、カメラ付きの携帯電話機やPDAなどの携帯端末に配設される。通常は、このような携帯端末に配設されたカメラは、例えば、一般的なカメラの用途であって風景などを撮影する通常撮影モードと、本実施例で開示するように、脈波取得の用途でカメラを用いる脈波取得モードとの少なくとも二種類のモードを有する。もちろん、脈拍取得の用途専用にカメラを用いる場合には、脈波取得モードの1種類のモードのみを有しても構わない。
また、脈波取得モードについては、カメラに予め設定されていなくてもよく、例えば、脈波検出プログラムからカメラの設定(露光時間やフレームレートなど)を変更することにより、脈波取得用に適した設定にした状態を脈波取得モードとみなしても構わない。また、例えば、フレームレートが固定されていても、通常撮影用途にも脈波取得用途にも利用できる場合には、明に通常撮影モードと脈波取得モードとを区別しなくても良い。
そして、脈波検出装置は、カメラのレンズにユーザの指が置かれて撮影された画像に基づいて脈波を計測するものであり、特に、カメラのレンズに置かれるユーザの指の位置を適切に指示することにより高精度に脈波を計測することができる。
上述した構成において、脈波検出装置は、カメラのレンズに指を置いて撮影された画像を脈拍取得に用いるモードである場合に、当該画像の状態を輝度、エッジ量および画像フレームの縦方向と横方向との輝度値総和の重心のいずれか、または、複数が所定の状態であるかを判定する。そして、脈波検出装置は、判定結果が、所定の状態でない場合にエラーの旨を出力し、所定の状態である場合に前記画像から得られる信号に基づいて脈拍を算出し、算出結果を出力する。
具体的には、脈波検出装置は、カメラのレンズにユーザの指が置かれて撮影された入力画像を受け付ける。そして、脈波検出装置は、入力画像の輝度総和から輝度平均を算出する。続いて、脈波検出装置は、カメラのフリッカの方向が縦の場合に横方向、フリッカが横の場合に縦方向のエッジ量を算出する。
また、脈波検出装置は、入力画像の輝度平均から輝度分布の評価値を算出する。また、脈波検出装置は、入力画像の縦方向の輝度値総和と横方向の輝度値総和とから、縦方向および横方向それぞれの重心位置を算出して、算出された重心に基づいて評価値を算出する。なお、上記各特性(輝度平均、エッジ量、輝度分布および重心)の算出は、入力画像それぞれ(1フレームごと)に対して実施される。
その後、脈波検出装置は、算出された輝度平均、エッジ量、輝度分布および重心について、それぞれを所定の閾値と比較して評価点を算出する。そして、脈波検出装置は、算出されたそれぞれの評価点に基づいて、ユーザの指の置き方が良い状態であるか、さらに輝度平均に基づいて、周辺光が適切な状態であるかを判定する。
続いて、脈波検出装置は、ユーザの指の置き方が悪い状態、若しくは、外光が適切でない状態である場合にエラーの旨を出力し、ユーザの指の置き方が良い状態である場合に入力画像から得られる信号に基づいて脈拍を算出して出力する。なお、ユーザの指の置き方の状態の判定は、入力画像1フレームごとに算出された各特性の累積、つまり、複数フレーム分の各特性が利用される。
また、取得する画像のフレームレートが十分に高い場合には、各特性を1フレームごとに算出せずに、1フレームおきにするなど、処理対象とするフレームを間引いても良い。また、各特性の累積は、計測開始からの累積でも良いし、累積を計算するタイミングから規定時間前までの特性でも良い。
上述したように、脈波検出装置は、カメラによって撮影された画像に基づいて脈波を計測する場合に、入力される画像の特性に基づいてカメラのレンズに対するユーザの指の置き方が良いか否かを判定し、ユーザの指の置き方が悪い場合にエラーを出力することができる結果、高精度に脈波を計測することが可能である。
また、携帯端末などに配設される脈波検出装置は、ユーザの指を透過する外光をカメラで受光するパッシブセンサであり、指の軽微な動きなどにより指の位置が悪いと外界が映り込み、光の透過量が大きく変動して脈波情報がノイズに埋もれてしまう。つまり、脈波を正確に計測するためには、指が置かれる位置が重要となる。言い換えると、脈波検出装置は、指が置かれた際に撮影された画像の各特性を評価することにより、指の置き方が良いか否かを判定し、指の置き方が悪い場合にエラーを出力することができる結果、高精度に脈波を計測することが可能である。
[脈波検出装置の構成]
次に、図1を用いて、実施例1に係る脈波検出装置の構成を説明する。図1は、実施例1に係る脈波検出装置の構成例を示す図である。
図1に示すように、脈波検出装置10は、出力部20と、記憶部30と、制御部40とを有し、例えば、カメラ付きの携帯電話機やPDAなどの携帯端末に配設され、当該カメラのレンズにユーザの指が置かれることにより撮影された画像に基づいて脈波を計測する。
出力部20は、モニタ(若しくはディスプレイ、タッチパネルなど)やスピーカを有し、各種の情報を出力するとともに、特に、エラー表示部21と、脈拍数表示部22と、ファイル23と、脈動表示部24とを有する。例えば、出力部20は、制御部40による各種処理結果をユーザに表示・通知したり、制御部40による各種処理から得られるデータをファイルとして出力したりする。
エラー表示部21は、制御部40による各種処理の結果、エラーが発生した場合に、当該エラー内容を表示する。例えば、エラー表示部21は、後述するエラー判定部42aによって携帯端末のカメラに置かれるユーザの指の位置が悪いと判定された場合に、「指が置かれていない」、「指の置き方が悪い」などのエラー内容を表示する。
脈拍数表示部22は、後述する脈拍数計算部42cによって算出された脈拍数を表示する。また、ファイル23は、後述する脈拍数計算部42cによって算出された脈拍数のデータをファイルとして出力する。また、脈動表示部24は、後述するピーク検出部42bによって検出された脈動を表示する。
記憶部30は、制御部40による各種処理に必要なデータや、制御部40による各種処理結果を記憶するとともに、特に、輝度情報記憶部31と、エラー情報記憶部32と、ピーク情報記憶部33とを有する。例えば、記憶部30は、後述する画像処理部41によって処理された画像一枚ごとの画像処理結果を記憶したり、後述する波形処理部42によって処理された波形データやエラー情報などを記憶したりする。
輝度情報記憶部31は、後述する輝度平均計算部41bによって算出された入力画像の輝度平均を記憶する。また、エラー情報記憶部32は、後述する評価点計算部41fによって算出された入力画像ごとの評価点を記憶する。また、ピーク情報記憶部33は、後述するピーク検出部42bによって検出された入力画像に基づいた脈波情報を記憶する。
制御部40は、制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有するとともに、特に、画像処理部41と、波形処理部42とを有し、これらによって種々の処理を実行する。
画像処理部41は、入力される画像一枚ごとに画像処理を実施し、特に、前処理部41aと、輝度平均計算部41bと、エッジ量計算部41cと、輝度分布計算部41dと、重心計算部41eと、評価点計算部41fとを有する。
前処理部41aは、携帯端末のカメラのレンズにユーザの指が置かれることにより撮影された画像を受け付けて、受け付けた画像から輝度成分を抽出したり、受け付けた画像を縮小したりする。
具体的に説明すると、前処理部41aは、携帯端末のカメラのレンズにユーザの指が置かれることにより撮影された画像データ「G0」を受け付けて、受け付けた画像データ「G0」から輝度成分を抽出する。また、前処理部41aは、受け付けた画像データ「G0」を縮小して画像データ「G1」を生成する。なお、利用されるデータは、脈波を捉えられるものであれば、輝度成分に限られるものではなく、例えば、RGB(Red‐Green‐Blue)のR成分やYUV(輝度信号:Y、輝度信号と青色成分との差:U、輝度信号と赤色成分との差:V)のV成分などでもよい。
ここで、携帯端末のカメラのレンズに指を置く置き方に対応する画像の特徴を、図2を用いて説明する。図2は、指の置き方と画像の特徴とを説明するための図である。なお、図2では、(1)暗め、(2)普通、(3)明るい、(4)指の置き方が悪い、(5)指の置き方が非常に悪い、(6)指を置いていない、場合の画像それぞれについての(a)元画像、(b)輝度情報、(c)縦エッジ、(d)横エッジ、(e)8×8領域平均(画像を8×8画素のブロック単位に分割し、分割後の各領域の平均)、を例示している。
(1)暗め
携帯端末のカメラのレンズにユーザの指が置かれることにより撮影された画像(元画像)が、図2の(1)の(a)に示すような輝度が暗めの画像である場合には、(b)〜(e)においても全体的に暗くなり、また、輝度成分は一様で、エッジが殆どないといった特性が見られる。なお、画像が暗めである場合は、携帯端末のカメラのレンズに指を置く位置は適切であるが、照明が暗いなど周辺光が弱いということになる。
(2)普通
携帯端末のカメラのレンズにユーザの指が置かれることにより撮影された画像が、図2の(2)の(a)に示すような輝度が普通の(適切な)画像である場合には、(b)〜(e)において、特に、全体的に暗めになり、また、輝度成分はほぼ一様で、エッジが殆どないといった特性が見られる。なお、画像が普通である場合は、携帯端末のカメラのレンズに指が置かれる位置と周辺光とが適切であるということになる。
(3)明るい
携帯端末のカメラのレンズにユーザの指が置かれることにより撮影された画像が、図2の(3)の(a)に示すような明るい画像である場合には、(b)〜(e)において、特に、横方向のエッジでフリッカ(画像における「ちらつき」)の影響が目立つ場合がある。なお、画像が明るい場合は、携帯端末のカメラのレンズに指が置かれる位置は適切であるが、照明の直下や炎天下など周辺光が強いということになる。
(4)指の置き方が悪い
携帯端末のカメラのレンズにユーザの指が置かれることにより撮影された画像が、図2の(4)の(a)に示すような画像である場合には、(b)〜(e)において、特に、8×8領域の一部が明るくなる。なお、画像が図2の(4)である場合は、携帯端末のカメラのレンズに指が置かれる位置が適切ではないために、外光(外界の光)が映りこむために、上述したように一部分が明るくなる。
(5)指の置き方が非常に悪い
携帯端末のカメラのレンズにユーザの指が置かれることにより撮影された画像が、図2の(5)の(a)に示すような画像である場合には、(b)〜(e)において、特に、8×8領域の一部が明るくなるとともにエッジも多くなる。なお、画像が図2の(5)である場合は、携帯端末のカメラのレンズに指が置かれる位置が適切ではないために、外光が映りこむ(図2の(4)と比較してさらに外光が映りこむ)ために、上述したように一部分が明るくなるとともにエッジも多くなる。
(6)指を置いていない
撮影された画像が、図2の(6)の(a)に示すような画像である場合には、(b)〜(e)において、特に、全体的に明るく、エッジが非常に多くなる。なお、画像が図2の(6)である場合は、カメラのレンズに指を置いていないために、全領域において外光が映りこむために、上述したように全体的に明るい画像となるとともにエッジも非常に多くなる。
そして、図2に示した様々な状況での画像パターンから、図3に示すような指の置き方の状態を判定するポイントを導くことができる。図3は、指の置き方の状態を判定するポイントを説明するための図である。
例えば、カメラのレンズに置かれる指の位置が正常(適切)である場合には、図3に示すように、明るさ「暗め」、分布(輝度分布)「一様」、エッジ「フリッカ以外では殆どない」、重心「中心(にある)」という傾向になる。
また、例えば、カメラのレンズに置かれる指の位置が悪い場合には、図3に示すように、明るさ「明るめ」、分布「一部分が明るい」、エッジ「少ない」、重心「偏る」という傾向になる。
また、例えば、カメラのレンズに指が置かれていない場合(外界が撮影される場合)には、図3に示すように、明るさ「明るい」、分布「全体が明るい」、エッジ「多い」、重心「傾向なし」という傾向になる。
また、指の置き方が悪い場合(図2または図3参照)の波形は、図4に示すように、画像の左側の指が置かれていない領域のように外光が映りこむために明るくなる部分と、指が置かれているために暗めになる部分とが存在するので、時間ごとの輝度平均に差が出る波形になる。なお、図4は、カメラのレンズに置く指の置き方が悪い場合の画像と波形との例を示す図である。
さらに、外光の強さと画像における傾向とを図5−1〜図5−5を用いて詳細に説明する。これらの図においては、縦軸は輝度値を、横軸は時間を表している。まず、カメラ周辺の照度と輝度平均とについて、図5−1および図5−2を用いて説明する。なお、図5−1は、カメラ周辺の照度例を示す図であり、図5−2は、カメラ周辺の照度に対応する画像の輝度平均例を示す図である。
例えば、図5−2の(A)に示した輝度平均が高い(明るい)部分の波形は、図5−3に示すように、綺麗な波形になる。また、例えば、図5−2の(B)に示した輝度平均が非常に低い(暗い)部分と、図5−2の(C)に示した輝度平均が低い(暗めの)部分との波形は、それぞれ図5−4と図5−5とに示すように、図5−3と比較して汚い波形になる。なお、図5−3は、画像が明るい場合の波形例を示す図であり、図5−4は、画像が暗い場合の波形例を示す図であり、図5−5は、画像が暗めである場合の波形例を示す図である。
要するに、携帯端末などに配設される脈波検出装置10は、指を透過する外光をカメラで受光するパッシブセンサであり、光の透過量が少ない場合には、ノイズが多くなるので、脈拍数の計算が困難になる。
図1に戻り、輝度平均計算部41bは、前処理部41aによって生成された画像データの輝度平均を算出する。上述した例で具体的に説明すると、輝度平均計算部41bは、前処理部41aによって生成された画像データ「G1」の輝度総和「ttlY」を算出する。そして、輝度平均計算部41bは、算出された画像データ「G1」の輝度総和「ttlY」から、当該画像データ「G1」の輝度平均「YMean」を算出し、輝度情報記憶部31に格納する。
なお、輝度平均計算部41bによって算出される輝度平均「YMean」は、輝度総和「ttlY」や当該輝度総和「ttlY」の定数倍であってもよく、輝度総和「ttlY」を利用した場合には、処理負荷を軽減することができる。
エッジ量計算部41cは、前処理部41aによって生成された画像データの縦方向または横方向のエッジ量の総和を算出する。上述した例で具体的に説明すると、エッジ量計算部41cは、前処理部41aによって生成された画像データ「G1」において、フリッカが縦に出る場合に横エッジ「Edge_X」、フリッカが横に出る場合に縦エッジ「Edge_Y」を算出する。そして、エッジ量計算部41cは、算出された横エッジ「Edge_X」または縦エッジ「Edge_Y」のエッジ量の総和「SEdge」を算出する。
上記フリッカは、カメラのモジュールによって予め決まっているため、エッジ量計算部41cは、フリッカに基づいて、横エッジ「Edge_X」または縦エッジ「Edge_Y」のうち、必要となるどちらか一方のエッジ量の総和「SEdge」を算出する。なお、フリッカは、蛍光灯などの真下で撮影された場合に現れることがある(例えば、図2(3)参照)。
輝度分布計算部41dは、前処理部41aによって生成された画像データを所定領域に分割して、各領域の輝度平均を算出するとともに、輝度分布の評価値を算出する。上述した例で具体的に説明すると、輝度分布計算部41dは、前処理部41aによって生成された画像データ「G1」をM×N領域に分割して、各領域の輝度平均Y(m,n)を算出する。
そして、輝度分布計算部41dは、算出された輝度平均Y(m,n)全てから最大値「YMax」と、最小値「YMin」と、Y(m,n)全ての平均である輝度平均「YMean」とを算出し、輝度分布の評価値「Dst=(YMax−YMin)×M×N÷YMean」を算出する。なお、輝度分布計算部41dにおいて利用される輝度平均YMeanは、輝度平均計算部41bによって算出された輝度平均の算出結果を利用してもよい。
また、評価値「Dst」は、適当な定数「K」を利用して、
Dst=(YMax−YMin)×K
Dst=(YMax−YMin)×K÷YMean
Dst=YMax×K
Dst=YMax×K÷YMean
などのように算出することとしてもよい。
重心計算部41eは、前処理部41aによって生成された画像データの横方向と縦方向とのそれぞれについて重心位置を算出する。そして、重心計算部41eは、算出された横方向と縦方向とのそれぞれの重心位置から評価値を算出する。
上述した例で具体的に説明すると、重心計算部41eは、図6に示すように、前処理部41aによって生成された画像データ「G1」の横方向と縦方向とのそれぞれについて(式1)および(式2)から重心位置「Cx」(横方向)、「Cy」(縦方向)を算出する。また、(式1)および(式2)において、「GN」は、「画素数=(W1+W2+1)×(H1+H2+1)」、「G(i,j)」は、輝度(0〜1)である。なお、図6は、画像の重心の求め方を説明するための図である。
続いて、重心計算部41eは、算出された横方向の重心位置「Cx」と、縦方向の重心位置「Cy」とから、(式3)を用いて画像データ「G1」の重心の評価値「cPos」を算出する。なお、横方向の重心位置「Cx」と縦方向の重心位置「Cy」との原点は、図6に示した画像の中心(0,0)である。
なお、画像データ「G1」の横方向の重心位置「Cx」と、縦方向の重心位置「Cy」とは、横方向の輝度の和「Sx(i)」(式4)と縦方向の輝度の和「Sy(i)」(式5)とから算出するようにしてもよい((式6)および(式7))。
評価点計算部41fは、輝度平均計算部41b、エッジ量計算部41c、輝度分布計算部41dおよび重心計算部41eそれぞれによって算出された値と、別途定められた閾値とを比較して評価点を算出してエラー情報記憶部32に格納する。
上述した例で具体的に説明すると、評価点計算部41fは、エッジ量計算部41cによって算出されたエッジ量の総和「SEdge」と、閾値「Th_Edge1」(エッジ量の閾値)とを比較して、エッジ量の総和が閾値よりも大きい場合に評価点「P1_1」とする。
そして、評価点計算部41fは、エッジ量の総和「SEdge」が閾値「Th_Edge1」よりも小さい場合に、輝度平均計算部41dによって算出された輝度平均「YMean」と、閾値「Th_yD1」(暗いかどうかの閾値)とを比較する。続いて、評価点計算部41fは、輝度平均が閾値よりも小さい場合に評価点「P1_2」とする。
その後、評価点計算部41fは、輝度平均「YMean」が閾値「Th_yD1」よりも大きい場合に、輝度平均計算部41bによって算出された輝度平均「YMean」と、閾値「Th_yB1」(明るいかどうかの閾値)とを比較する。そして、評価点計算部41fは、輝度平均が閾値よりも小さい場合に評価点「P1_3」とする。
続いて、評価点計算部41fは、輝度平均「YMean」が閾値「Th_yB1」よりも大きい場合に、輝度分布計算部41dによって算出された輝度分布の評価値「Dst」と、閾値「Th_Dst1」(輝度分布の閾値)とを比較する。その後、評価点計算部41fは、輝度分布の評価値が閾値よりも大きい場合に評価点「P1_4」とする。
そして、評価点計算部41fは、輝度分布の評価値「Dst」が閾値「Th_Dst1」よりも小さい場合に、重心計算部41eによって算出された重心の評価値「cPos」と、閾値「Th_cPos1」(重心の閾値)とを比較する。続いて、評価点計算部41fは、重心の評価値が閾値よりも大きい場合に評価点「P1_5」とする。また、評価点計算部41fは、重心の評価値「cPos」が閾値「Th_cPos1」よりも小さい場合に評価点「P_OK」とする。
なお、評価点計算部41fによる評価点は、上述のような一段階での決定ではなく、数段階に分割してさらに評価点を決定することも可能であり、その場合には、より精度良く評価点を決定できる。
また、評価点計算部41fで利用される各閾値は、脈波取得に利用されるカメラの特性に合わせて求めることが望ましい。各閾値の設定方法としては、脈波取得に利用されるカメラ(と同じ特性を持つカメラ)に指を図2の(1)〜(3)のような状態になるように置き、脈波が採りにくくなる明るさを求める。そして、図2の(1)〜(3)のように指が適切に置かれた場合の画像群(画像群「A」とする)と、図2の(4)〜(6)のように指が適切に置かれていない場合の画像群(画像群「B」とする)とに分けて、データを複数取得する。
続いて、エッジ量、輝度分布、重心のデータを画像群「A」と画像群「B」とで比較し、その中間に閾値を設定して分離性の良いものほどポイント(評価点)を高くする。なお、複数の画像評価の組み合わせで指の置き方が適切か否かを判定する場合には、指が置かれているにも関わらず、「指が置かれていない」と判定されないように、それぞれの閾値を画像群「B」寄りにすることが望ましい。
波形処理部42は、エラー情報や波形データなどを処理し、特に、エラー判定部42aと、ピーク検出部42bと、脈拍数計算部42cとを有する。
エラー判定部42aは、エラー情報記憶部32に記憶された輝度、エッジ量および重心のいずれか、または、複数が所定の状態であるかを判定する。また、以下のエラー判定部42aで利用される各閾値は、例えば、「Th_e1」(指を置いていない)、「Th_e2」(指の置き方が悪い)、「Th_yB2」(明るすぎる)、「Th_yD2」(暗すぎる)、「Th_yB3」(明るい)、「Th_yD3」(暗い)との判定基準である。
上述した例で具体的に説明すると、エラー判定部42aは、画像処理部41によって所定(複数)「N1」フレーム以上画像処理された場合に、過去「N2」フレーム分の評価点の累積値「SErrP」を算出する。
なお、エラー判定部42aは、画像処理部41によって画像処理されたフレーム数が所定「N1」フレーム未満である場合に、「YMean」と所定値「Th_yD2」とを比較する。そして、エラー判定部42aは、「YMean」が所定値「Th_yD2」よりも小さい場合に暗すぎると判定してエラー表示部21に異常を通知する。また、エラー判定部42aは、「YMean」が所定値「Th_yD2」よりも大きい場合に正常終了する。
そして、エラー判定部42aは、算出された「SErrP」が規定値「Th_e1」よりも小さい場合に、指が置かれていないと判定してエラー表示部21に異常を通知する。続いて、「SErrP」が規定値「Th_e1」よりも大きい場合に、当該「SErrP」と規定値「Th_e2」とを比較する。その後、エラー判定部42aは、「SErrP」が規定値「Th_e2」よりも小さい場合に、指の置き方が悪いと判定してエラー表示部21に異常を通知する。
そして、エラー判定部42aは、「SErrP」が規定値「Th_e2」よりも大きい場合に、「YMean」と規定値「Th_yB2」とを比較する。続いて、エラー判定部42aは、「YMean」が規定値「Th_yB2」よりも大きい場合に明るすぎると判定してエラー表示部21に異常を通知する。
その後、エラー判定部42aは、「YMean」が規定値「Th_yB2」よりも小さい場合に、「YMean」と規定値「Th_yD2」とを比較する。そして、エラー判定部42aは、「YMean」が規定値「Th_yD2」よりも小さい場合に暗すぎると判定してエラー表示部21に異常を通知する。
続いて、エラー判定部42aは、「YMean」が規定値「Th_yD2」よりも大きい場合に、「YMean」と規定値「Th_yB3」とを比較する。その後、エラー判定部42aは、「YMean」が規定値「Th_yB3」よりも大きい場合に明るいと判定してエラー表示部21に警告を通知する。
そして、エラー判定部42aは、「YMean」が規定値「Th_yB3」よりも小さい場合に、「YMean」と規定値「Th_yD3」とを比較する。続いて、エラー判定部42aは、「YMean」が規定値「Th_yD3」よりも小さい場合に暗いと判定してエラー表示部21に警告を通知する。なお、エラー判定部42aは、「YMean」が規定値「Th_yD3」よりも大きい場合に正常に処理を終了する。
上記エラー判定部42aによる処理については、指の置き方が適切でなく、異常を通知する場合に、脈波を検出しても精度が悪いため処理を中断し、指の置き方が適切ではないが、警告を通知する程度の場合に、処理を中断することなく脈波を検出することとなる。
また、上記エラー判定部42aによる処理順序については、「明るすぎる」と「暗すぎる」との判定、「明るい」と「暗い」との判定を逆順序にしても良いし、「暗すぎる」のかどうかの判定を指の置き方の判定の前に実施しても良い。なお、指の置き方が悪くて明るいのか、外光が強いために画像が明るいのかの区別が不要である場合には、明るすぎるかどうかの判定を指の置き方の判定の前に実施することとしても良い。
そして、エラー判定部42aによって異常が検出された場合には、ユーザに指の置き直しや明るい場所若しくは暗い場所への移動を促す。また、エラー判定部42aによって警告が発せられた場合には、ユーザへの警告を発する。また、エラー判定部42aによって異常が検出されなかった場合には、記憶部30に蓄えられた輝度情報を解析して出力部20に脈拍数を通知する(脈拍数計算部42cなどの処理参照)。
また、エラー判定部42aで利用される各閾値の設定方法としては、例えば、「Th_yD1」よりも暗い状態から「Th_yB1」を超える状態まで、指を置いた場合、指の置き方が悪い場合、および、指を置いていない場合それぞれの評価点累積データを複数取得する。
そして、指を置いた場合、指の置き方が悪い場合、および、指を置いていない場合それぞれを比較し、それぞれの間に閾値「Th_e2」と「Th_e1」とを設定する。また、指を置いているデータのうち、脈波が採れなくなる明るさを「Th_yB2」と「Th_yD2」とに設定する。さらに、指を置いているデータのうち、脈波が採りにくくなる明るさを「Th_yB3」と「Th_yD3」とに設定する。なお、閾値「Th_yB3」と「Th_yD3」とは、閾値「Th_yD1」と「Th_yB1」と同じものでもよい。
ピーク検出部42bは、輝度情報記憶部31に記憶された画像データの輝度情報から、当該画像データの波形におけるピークを検出する。上述した例で具体的に説明すると、ピーク検出部42bは、輝度情報記憶部31に記憶された画像データ「G1」の時系列の輝度情報から、極大値と極小値とを算出して、当該画像データ「G1」の波形におけるピーク(ピーク間隔)を検出してピーク情報記憶部33に格納する。
脈拍数計算部42cは、ピーク情報記憶部33に記憶されたピーク間隔に基づいて、脈拍数を算出する。上述した例で具体的に説明すると、脈拍数計算部42cは、ピーク情報記憶部33に記憶されたピーク間隔から脈拍数を計算して、脈拍数表示部22やファイル23などに出力する。
脈拍数を計算する簡単な例としては、フレームレート15FPS(Frame Per Second)、ピーク情報記憶部33に記憶されたピーク間隔の平均値が18である場合に、「18÷15×60=72拍/分」となる。なお、ピーク情報記憶部33に記憶されたピーク間隔からノイズを除外する処理などを行った後に、脈拍数を算出することとしても良い。
[輝度平均算出処理]
次に、図7を用いて、実施例1に係る輝度平均算出処理を説明する。図7は、実施例1に係る輝度平均算出処理を説明するためのフローチャートである。
図7に示すように、脈波検出装置10は、画像データ「G1」の輝度総和「ttlY」を算出する(ステップS101)。そして、脈波検出装置10は、算出された画像データ「G1」の輝度総和「ttlY」から、当該画像データ「G1」の輝度平均「YMean」を算出して、輝度情報記憶部31に格納する(ステップS102)。
[エッジ量算出処理]
次に、図8を用いて、実施例1に係るエッジ量算出処理を説明する。図8は、実施例1に係るエッジ量算出処理を説明するためのフローチャートである。
図8に示すように、脈波検出装置10は、画像データ「G1」において、フリッカが縦に出る場合に(ステップS201縦方向)、横エッジ「Edge_X」を算出する(ステップS202)。そして、脈波検出装置10は、算出された横エッジ「Edge_X」について閾値以下を「0」とみなして(ステップS203)、当該横エッジ「Edge_X」のエッジ量の総和「SEdge」を算出する(ステップS204)。
また、脈波検出装置10は、画像データ「G1」において、フリッカが横方向に出る場合に(ステップS201横方向)、縦エッジ「Edge_Y」を算出する(ステップS205)。そして、脈波検出装置10は、算出された縦エッジ「Edge_Y」について閾値以下を「0」とみなして(ステップS206)、当該縦エッジ「Edge_Y」のエッジ量の総和「SEdge」を算出する(ステップS207)。
上記ステップS203やステップS206などの処理については、ノイズを拾わないようにするための処理であるので、ノイズが十分に抑えられるカメラである場合には、当該処理を必須とする必要はない。また、フリッカを十分に抑えられる場合には、縦横両方のエッジを利用し、評価点計算部41fにおいて個別に評価することとしてもよいし、横エッジ「Edge_X」と縦エッジ「Edge_Y」との和や二乗和を評価することとしてもよい。
[輝度分布算出処理]
次に、図9を用いて、実施例1に係る輝度分布算出処理を説明する。図9は、実施例1に係る輝度分布算出処理を説明するためのフローチャートである。
図9に示すように、脈波検出装置10は、画像データ「G1」をM×N領域に分割する(ステップS301)。そして、脈波検出装置10は、分割されたM×N領域それぞれの輝度平均Y(m,n)を算出する(ステップS302)。
続いて、脈波検出装置10は、算出された輝度平均Y(m,n)全てから最大値「YMax」と、最小値「YMin」と、Y(m,n)全ての平均である輝度平均「YMean」とを算出する(ステップS303、ステップS304)。その後、脈波検出装置10は、算出された最大値「YMax」と「YMin」と「YMean」とから、輝度分布の評価値となる「Dst」を算出する(ステップS305)。
[重心評価値算出処理]
次に、図10を用いて、実施例1に係る重心評価値算出処理を説明する。図10は、実施例1に係る重心評価値算出処理を説明するためのフローチャートである。
図10に示すように、脈波検出装置10は、画像データ「G1」の横方向の輝度の和を算出して(ステップS401)、当該横方向の重心位置「Cx」を算出する(ステップS402)。そして、脈波検出装置10は、画像データ「G1」の縦方向の輝度の和を算出して(ステップS403)、当該縦方向の重心位置「Cy」を算出する(ステップS404)。
続いて、脈波検出装置10は、算出された横方向と縦方向との重心位置「Cx」と「Cy」とから、画像データ「G1」の重心の評価値「cPos」を算出する(ステップS405)。なお、横方向と縦方向との重心位置の算出の順序については、どちらを先に算出してもよい。さらに、横方向と縦方向とのそれぞれの輝度の和について、最大値と最小値との差が所定閾値を下回る場合には、「Cx」若しくは「Cy」を「0」とみなして処理を行うこととしてもよい。
また、図2の(2)の(a)は、ほぼ一様な画像であるように見えるが、実際には、図11に示す強度分布を強調した画像(図11の右図)のように、周辺光の条件や指の置き方が適切である場合に、中心部分が明るくなり、周囲が暗くなるため、重心計算部41eにおいて画像データ「G1」の重心についての評価値を算出している。なお、図11は、輝度分布を持った画像の例を示す図である。
[評価点算出処理]
次に、図12を用いて、実施例1に係る評価点算出処理を説明する。図12は、実施例1に係る評価点算出処理を説明するためのフローチャートである。
図12に示すように、脈波検出装置10は、エッジ量の総和「SEdge」と、閾値「Th_Edge1」とを比較して(ステップS501)、エッジ量の総和が閾値よりも大きい場合に(ステップS501肯定)、評価点「P1_1」とする(ステップS502)。
そして、脈波検出装置10は、エッジ量の総和「SEdge」が閾値「Th_Edge1」よりも小さい場合に(ステップS501否定)、輝度平均「YMean」と、閾値「Th_yD1」とを比較する(ステップS503)。続いて、脈波検出装置10は、輝度平均が閾値よりも小さい場合に(ステップS503肯定)、評価点「P1_2」とする(ステップS504)。
その後、脈波検出装置10は、輝度平均「YMean」が閾値「Th_yD1」よりも大きい場合に(ステップS503否定)、輝度平均「YMean」と、閾値「Th_yB1」とを比較する(ステップS505)。そして、脈波検出装置10は、輝度平均が閾値よりも小さい場合に(ステップS505肯定)、評価点「P1_3」とする(ステップS506)。
続いて、脈波検出装置10は、輝度平均「YMean」が閾値「Th_yB1」よりも大きい場合に(ステップS505否定)、輝度分布の評価値「Dst」と、閾値「Th_Dst1」とを比較する(ステップS507)。その後、脈波検出装置10は、輝度分布の評価値が閾値よりも大きい場合に(ステップS507肯定)、評価点「P1_4」とする(ステップS508)。
そして、脈波検出装置10は、輝度分布の評価値「Dst」が閾値「Th_Dst1」よりも小さい場合に(ステップS507否定)、重心の評価値「cPos」と、閾値「Th_cPos1」とを比較する(ステップS509)。続いて、脈波検出装置10は、重心の評価値が閾値よりも大きい場合に(ステップS509肯定)、評価点「P1_5」とする(ステップS510)。
その後、脈波検出装置10は、重心の評価値「cPos」が閾値「Th_cPos1」よりも小さい場合に(ステップS509否定)、エッジ量の総和「SEdge」と、閾値「Th_Edge2」とを比較する(ステップS511)。そして、脈波検出装置10は、エッジ量の総和が閾値よりも大きい場合に(ステップS511肯定)、評価点「P2_1」とする(ステップS512)。
続いて、脈波検出装置10は、エッジ量の総和「SEdge」が閾値「Th_Edge2」よりも小さい場合に(ステップS511否定)、輝度平均「YMean」と、閾値「Th_yD2」とを比較する(ステップS513)。その後、脈波検出装置10は、輝度平均が閾値よりも小さい場合に(ステップS513肯定)、評価点「P2_2」とする(ステップS514)。
そして、脈波検出装置10は、輝度平均「YMean」が閾値「Th_yD2」よりも大きい場合に(ステップS513否定)、輝度平均「YMean」と、閾値「Th_yB2」とを比較する(ステップS515)。続いて、脈波検出装置10は、輝度平均が閾値よりも小さい場合に(ステップS515肯定)、評価点「P2_3」とする(ステップS516)。
その後、脈波検出装置10は、輝度平均「YMean」が閾値「Th_yB2」よりも大きい場合に(ステップS515否定)、輝度分布の評価値「Dst」と、閾値「Th_Dst2」とを比較する(ステップS517)。そして、脈波検出装置10は、輝度分布の評価値が閾値よりも大きい場合に(ステップS517肯定)、評価点「P2_4」とする(ステップS518)。
続いて、脈波検出装置10は、輝度分布の評価値「Dst」が閾値「Th_Dst2」よりも小さい場合に(ステップS517否定)、重心の評価値「cPos」と、閾値「Th_cPos2」とを比較する(ステップS519)。その後、脈波検出装置10は、重心の評価値が閾値よりも大きい場合に(ステップS519肯定)、評価点「P2_5」とする(ステップS520)。
そして、脈波検出装置10は、重心の評価値「cPos」が閾値「Th_cPos2」よりも小さい場合に(ステップS519否定)、評価点「P_OK」とする(ステップS521)。
なお、上記評価点の決定については、評価点「P1」から悪い順に決定し、処理負荷削減のために、一つの評価項目ポイントを決定すると、その時点で処理を終了したが、全ての評価項目について評価し、合計ポイントを算出することとしてもよい。但し、一つの評価項目においてマイナス点がある場合には、他の評価項目についても影響してマイナス点が決定される場合が多い。
また、評価項目の順序は、どの順序で評価しても良く、評価項目の数も上記実施例に限られるものではない。そこで、以下では、上述した実施例以外の評価点の決定例を図13〜図16を用いて説明する。
(指の置き方の評価点1)
まず、図13と図14とを用いて、指の置き方による評価点の決定例を説明する。図13は、指の置き方による評価点決定の例を示す図であり、図14は、評価点計算部41fにおける処理を説明するためのフローチャートである。
例えば、図13に示すように、明るさとエッジ量との組み合わせのみを用いる場合には、適正な明るさとエッジ量とである時に「0点」、暗いまたは明るい、および、エッジ量が多い時に「−1点」、暗すぎるまたは明るすぎる、および、エッジ量が多すぎる時に「−2点」として評価点が決定される。
次に、上記図13のような評価点を決定する場合の処理の流れを説明する。図14に示すように、評価点計算部41fは、輝度平均「YMean」と、閾値「Th_yD1」とを比較して(ステップS601)、輝度平均が閾値よりも小さい場合に(ステップS601肯定)、評価点「−2」とする(ステップS602)。
そして、評価点計算部41fは、輝度平均「YMean」が閾値「Th_yD1」よりも大きい場合に(ステップS601否定)、輝度平均「YMean」と、閾値「Th_yB1」とを比較する(ステップS603)。続いて、評価点計算部41fは、輝度平均が閾値よりも大きい場合に(ステップS603肯定)、評価点「−2」とする(ステップS604)。
その後、評価点計算部41fは、輝度平均「YMean」が閾値「Th_yB1」よりも小さい場合に(ステップS603否定)、エッジ量の総和「SEdge」と、輝度平均「YMean」に基づいて決定される閾値「Th_Edge1(YMean)」とを比較する(ステップS605)。そして、評価点計算部41fは、エッジ量の総和が閾値よりも大きい場合に(ステップS605肯定)、評価点「−2」とする(ステップS606)。
続いて、評価点計算部41fは、エッジ量の総和「SEdge」が輝度平均「YMean」に基づいて決定される閾値「Th_Edge1(YMean)」よりも小さい場合に(ステップS605否定)、輝度平均「YMean」と、閾値「Th_yD2」とを比較する(ステップS607)。その後、評価点計算部41fは、輝度平均が閾値よりも小さい場合に(ステップS607肯定)、評価点「−1」とする(ステップS608)。
そして、評価点計算部41fは、輝度平均「YMean」が閾値「Th_yD2」よりも大きい場合に(ステップS607否定)、輝度平均「YMean」と、閾値「Th_yB2」とを比較する(ステップS609)。続いて、評価点計算部41fは、輝度平均が閾値よりも大きい場合に(ステップS609肯定)、評価点「−1」とする(ステップS610)。
その後、評価点計算部41fは、輝度平均「YMean」が閾値「Th_yB2」よりも小さい場合に(ステップS609否定)、エッジ量の総和「SEdge」と、輝度平均「YMean」に基づいて決定される閾値「Th_Edge2(YMean)」とを比較する(ステップS611)。そして、評価点計算部41fは、エッジ量の総和が閾値よりも大きい場合に(ステップS611肯定)、評価点「−1」とする(ステップS612)。なお、評価点計算部41fは、エッジ量の総和が閾値よりも小さい場合に(ステップS611否定)、評価点「0」として処理を終了する(ステップS613)。
なお、本実施例は、上記説明に限られるものではなく、例えば、図14のステップS605の閾値「Th_Edge1(YMean)」を、輝度総和「ttlY」に基づいて決定される閾値「Th_Edge1(ttlY)」に置き換えて判定を行なうこととしても良い。また、例えば、図14のステップS611の閾値「Th_Edge2(YMean)」を、輝度総和「ttlY」に基づいて決定される閾値「Th_Edge2(ttlY)」に置き換えて判定を行なうこととしても良い。また、例えば、ステップS601、ステップS603、ステップS607、ステップS609の左辺の輝度平均「YMean」を、輝度総和「ttlY」に置き換えて判定を行なうこととしても良い。
(指の置き方の評価点2)
次に、図15と図16とを用いて、指の置き方による評価点の決定例を説明する。図15は、指の置き方による評価点の例を示す図であり、図16は、評価点計算部41fにおける処理を説明するためのフローチャートである。
例えば、図15に示すように、明るさを評価点の決定に用いる場合には、明るさによって指の置き方が正常である時に「+1点」、指の置き方が悪い時に「−1点」、指を置いていない時に「−2点」として評価点が決定される。また、重心を評価点の決定に用いる場合には、重心によって指の置き方が正常である時に「+1点」、指の置き方が悪い時に「0点」、指を置いていない時に「−1点」として評価点が決定される。また、エッジ量を評価点の決定に用いる場合には、エッジ量によって指の置き方が正常である時に「+1点」、指の置き方が悪い時に「−1点」、指を置いていない時に「−2点」として評価点が決定される。
次に、上記図15のような評価点を決定する場合の処理の流れを説明する。図16に示すように、評価点計算部41fは、輝度平均「YMean」と、閾値「Th_yB1」とを比較して(ステップS701)、輝度平均が閾値よりも小さい場合に(ステップS701肯定)、評価点「−2」とする(ステップS702)。
そして、評価点計算部41fは、輝度平均「YMean」が閾値「Th_yB1」よりも大きい場合に(ステップS701否定)、エッジ量の総和「SEdge」と、閾値「Th_Edge1」とを比較する(ステップS703)。続いて、評価点計算部41fは、エッジ量の総和が閾値よりも大きい場合に(ステップS703肯定)、評価点「−2」とする(ステップS704)。
その後、評価点計算部41fは、エッジ量の総和「SEdge」が閾値「Th_Edge1」よりも小さい場合に(ステップS703否定)、重心の評価値「cPos」と、閾値「Th_cPos1」とを比較する(ステップS705)。そして、評価点計算部41fは、重心の評価値が閾値よりも大きい場合に(ステップS705肯定)、評価点「−1」とする(ステップS706)。
続いて、評価点計算部41fは、重心の評価値「cPos」が閾値「Th_cPos1」よりも小さい場合に(ステップS705否定)、輝度平均「YMean」と、閾値「Th_yB2」とを比較する(ステップS707)。その後、評価点計算部41fは、輝度平均が閾値よりも小さい場合に(ステップS707肯定)、評価点「−1」とする(ステップS708)。
そして、評価点計算部41fは、輝度平均「YMean」が閾値「Th_yB2」よりも大きい場合に(ステップS707否定)、エッジ量の総和「SEdge」と、閾値「Th_Edge2」とを比較する(ステップS709)。続いて、評価点計算部41fは、エッジ量の総和が閾値よりも大きい場合に(ステップS709肯定)、評価点「−1」とする(ステップS710)。
その後、評価点計算部41fは、エッジ量の総和「SEdge」が閾値「Th_Edge2」よりも小さい場合に(ステップS709否定)、重心の評価値「cPos」と、閾値「Th_cPos2」とを比較する(ステップS711)。そして、評価点計算部41fは、重心の評価値が閾値よりも大きい場合に(ステップS711肯定)、評価点「0」とする(ステップS712)。なお、評価点計算部41fは、重心の評価値が閾値よりも小さい場合に(ステップS711否定)、評価点「+1」として処理を終了する(ステップS713)。
[エラー判定処理]
次に、図17を用いて、実施例1に係るエラー判定処理を説明する。図17は、実施例1に係るエラー判定処理を説明するためのフローチャートである。
図17に示すように、脈波検出装置10は、所定「N1」フレーム以上画像処理された場合に(ステップS801肯定)、過去「N2」フレーム分の評価点の累積値「SErrP」を算出する(ステップS802)。
なお、脈波検出装置10は、画像処理されたフレーム数が所定「N1」フレーム未満である場合に(ステップS801否定)、「YMean」と所定値「Th_yD2」とを比較する(ステップS809)。そして、脈波検出装置10は、「YMean」が所定値「Th_yD2」よりも小さい場合に(ステップS809肯定)、暗すぎると判定して異常を通知する。また、脈波検出装置10は、「YMean」が所定値「Th_yD2」よりも大きい場合に(ステップS809否定)、正常終了する。
そして、脈波検出装置10は、算出された「SErrP」が規定値「Th_e1」よりも小さい場合に(ステップS803肯定)、指が置かれていないと判定して異常を通知する。続いて、「SErrP」が規定値「Th_e1」よりも大きい場合に(ステップS803否定)、当該「SErrP」と規定値「Th_e2」とを比較する(ステップS804)。その後、脈波検出装置10は、「SErrP」が規定値「Th_e2」よりも小さい場合に(ステップS804肯定)、指の置き方が悪いと判定して異常を通知する。
そして、脈波検出装置10は、「SErrP」が規定値「Th_e2」よりも大きい場合に(ステップS804否定)、「YMean」と規定値「Th_yB2」とを比較する(ステップS805)。続いて、脈波検出装置10は、「YMean」が規定値「Th_yB2」よりも大きい場合に(ステップS805肯定)、明るすぎると判定して異常を通知する。
その後、脈波検出装置10は、「YMean」が規定値「Th_yB2」よりも小さい場合に(ステップS805否定)、「YMean」と規定値「Th_yD2」とを比較する(ステップS806)。そして、脈波検出装置10は、「YMean」が規定値「Th_yD2」よりも小さい場合に(ステップS806肯定)、暗すぎると判定して異常を通知する。
続いて、脈波検出装置10は、「YMean」が規定値「Th_yD2」よりも大きい場合に(ステップS806否定)、「YMean」と規定値「Th_yB3」とを比較する(ステップS807)。その後、脈波検出装置10は、「YMean」が規定値「Th_yB3」よりも大きい場合に(ステップS807肯定)、明るいと判定して警告を通知する。
そして、脈波検出装置10は、「YMean」が規定値「Th_yB3」よりも小さい場合に(ステップS807否定)、「YMean」と規定値「Th_yD3」とを比較する(ステップS808)。続いて、脈波検出装置10は、「YMean」が規定値「Th_yD3」よりも小さい場合に(ステップS808肯定)、暗いと判定して警告を通知する。なお、脈波検出装置10は、「YMean」が規定値「Th_yD3」よりも大きい場合に(ステップS808否定)、正常に処理を終了する。
[実施例1による効果]
上述したように、実施例1に係る脈波検出装置10は、カメラが搭載された携帯端末などによって撮影された画像の各特性に基づいて、当該カメラで撮影する指の置き方を適切に判定するので、高精度に脈波を計測することが可能である。
例えば、脈波検出装置10は、カメラのレンズに指を置いて撮影された入力画像を受け付ける。そして、脈波検出装置10は、入力画像の輝度総和から輝度平均を算出し、当該入力画像の横方向または縦方向のエッジ量を算出する。続いて、脈波検出装置10は、入力画像の輝度平均から輝度分布の評価値を算出する。その後、脈波検出装置10は、入力画像の縦方向の輝度値総和と横方向の輝度値総和とから、横方向および縦方向それぞれの重心位置を算出し、算出された重心に基づいて重心の評価値を算出する。そして、脈波検出装置10は、算出された輝度平均、エッジ量、輝度分布および重心について、それぞれを所定の閾値と比較して評価点を算出する。続いて、脈波検出装置10は、算出されたそれぞれの評価点に基づいて、指の置き方が良い状態であるか否か、さらに、輝度平均に基づいて、周辺光が適切な状態であるかを判定する。その後、脈波検出装置10は、指の置き方が悪い状態、若しくは、周辺光が適切でない状態である場合にはエラーの旨を出力し、指の置き方が良い状態である場合には入力画像から得られる信号に基づいて脈拍を算出して出力する。この結果、脈波検出装置10は、高精度に脈波を計測することが可能である。