以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る輪郭検出装置の構成例および処理例を示す図である。図1の輪郭検出装置1は、入力画像から物体の輪郭線を検出する処理を実行する装置であり、入力受付手段2および探索手段3を有する。
なお、入力受付手段2および探索手段3の各処理は、例えば、輪郭検出装置1が備えるプロセッサが所定のプログラムを実行することで実現される。あるいは、入力受付手段2および探索手段3の処理の少なくとも一部は、専用回路によって実現されてもよい。
入力受付手段2は、ユーザの入力操作に応じて、エッジを探索するための探索領域を入力画像上に設定する。探索領域は、開始領域から終了領域に向かって延伸された、一定以上の幅を有する領域である。図1では、開始領域11から終了領域12に向かって緩やかに湾曲した探索領域10の例を示している。
探索領域は、できるだけ簡易な操作によって設定できることが望ましい。探索領域の設定方法の例としては、ユーザが画面上の指示位置を連続的に移動させる操作を行うと、その移動軌跡に沿って一定の幅の探索領域が設定されるという方法が考えられる。この場合の指示位置とは、例えば、マウスカーソルの位置や、タッチパネルに対する接触位置とすることができる。また、類似する例として、ユーザが一定の大きさのアイコン画像を移動させる操作を行うと、アイコン画像が移動した領域が探索領域に設定されるという方法も考えられる。
探索手段3は、設定された探索領域において開始領域側から終了領域側に向かってエッジを探索する。
例えば、探索手段3は、探索領域において、その開始領域のいずれかの画素を起点として着目画素を設定し、着目画素の周囲画素のうち、着目画素の位置での探索領域の延伸方向を含む所定のエッジ探索範囲に含まれる画素をエッジ候補画素とする。探索手段3は、エッジ候補画素からエッジである可能性が高い画素を判定して次の着目画素に設定し、同様の処理を行う。探索手段3は、このようなエッジ探索処理を、着目画素が終了領域に達するまで繰り返す。これにより、設定された着目画素群が輪郭線として検出される。
図1には、画素21を着目画素に設定した場合が例示されており、このとき、画素21の位置での探索領域10の延伸方向A1を含むエッジ探索範囲B1が設定される。探索手段3は、例えば、画素21の周囲画素のうちエッジ探索範囲B1に含まれる画素をエッジ候補画素とする。エッジ探索範囲B1は、例えば、延伸方向A1の角度を略中心とした所定角度の範囲として設定される。探索手段3は、エッジ候補画素の中でエッジである可能性が最も高い画素を画素22と判定した場合には、画素22を次の着目画素に設定する。
このように、探索領域において開始領域側から終了領域側に向かってエッジが探索されることにより、探索領域の延伸方向から大きく外れた方向に伸びる輪郭線が検出されにくくなる。このため、所望の輪郭線に沿って探索領域が設定されるようにユーザが操作することで、探索領域に沿って伸びている輪郭線、すなわちユーザが意図する輪郭線を精度よく検出できるようになる。
ところで、人の輪郭線、特に人の頭部の輪郭線が、肌色領域と肌色領域とに挟まれた領域に位置することは、通常は考えられない。そこで、探索手段3は、探索領域内の画素のうち、肌色領域と肌色領域とに挟まれた領域に位置すると判定された画素を、エッジと判定する画素から除外する。これにより、人の輪郭線が誤検出される可能性が低減され、検出精度が向上する。
例えば、探索手段3が、図1の画素23を着目画素に設定したものとする。また、画素23に対応するエッジ探索範囲B2が、画素23での探索領域10の延伸方向A2を含むように設定され、このエッジ探索範囲B2に位置する画素の1つである画素24が、肌色領域31と肌色領域32とに挟まれた領域33に位置するものとする。この場合、探索手段3は、たとえ画素24がエッジ探索画素のうちエッジである可能性が最も高いとしても、この画素24をエッジ探索候補から除外する。すなわち、画素24は、次の着目画素として設定されなくなる。
前述のように、人の輪郭線が肌色領域と肌色領域とに挟まれた領域に位置することは、通常は考えられない。このため、仮に、探索手段3が肌色領域と肌色領域とに挟まれた領域を次の着目画素に設定した場合、設定した着目画素は人の輪郭線に沿っているとは考えにくく、誤検出が発生した可能性が高い。従って、探索手段3は、このような領域に位置する画素をエッジ候補画素から除外することで、人の輪郭線の誤検出が発生する可能性を低減でき、人の輪郭線の検出精度を向上させることができる。
肌色領域と肌色領域との間の領域が次の着目画素として誤って設定されるケースとしては、例えば、顔が正面を向いた状態において、耳が露出しており、耳と顔との間の領域に頭髪がかかっているケースがある。あるいは、頭髪の一部が顔の外縁部より内側にかかっているケースも考えられる。上記の輪郭検出装置1によれば、このようなケースにおける人の輪郭線の誤検出の発生可能性を低減できる。
また、上記のように画素をエッジと判定する画素から除外する代わりに、人の輪郭線の形状に正確に沿って探索領域が設定されるようにユーザが操作することで、エッジの検出精度は向上する。しかしながら、例えば耳の外縁部の形状に沿って探索領域が設定されるようにユーザが操作することは、大きな手間を必要とし、ユーザの作業効率を低下させる。
本実施の形態の輪郭検出装置1によれば、耳の近傍領域においても、耳の外縁部の形状に正確に沿わせずに、頭部全体についての大まかな輪郭線に沿うように探索領域が設定されることで、耳の外縁部が輪郭線として検出されるようになる。すなわち、人の輪郭検出を高精度かつ高効率で実行可能になる。
なお、探索手段3は、画素が肌色領域と肌色領域とに挟まれた領域に位置するかの判定処理を、例えば、その画素を挟む両側の領域の色情報を基に行ってもよいが、他の方法として例えば、入力画像からの顔の検出結果を基に次のように行ってもよい。探索手段3は、検出された顔の位置と、判定対象とする画素との位置関係に基づいて、判定対象の画素よりも検出された顔の外側方向に肌色領域が存在するかを判定する。探索手段3は、外側方向に肌色領域が存在すると判定した場合に、判定対象画素は肌色領域と肌色領域とに挟まれた領域に位置するとみなし、その画素をエッジ候補画素から除外する。
〔第2の実施の形態〕
次に、入力画像から人の顔を検出する機能を備えた輪郭検出装置の例について説明する。図2は、第2の実施の形態に係る輪郭検出装置のハードウェア構成例を示す図である。輪郭検出装置100は、例えば、図2に示すようなコンピュータとして実現される。
輪郭検出装置100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してRAM(Random Access Memory)102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、またはPLD(Programmable Logic Device)である。またプロセッサ101は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
RAM102は、輪郭検出装置100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ101による処理に必要な各種データが格納される。
バス109に接続されている周辺機器としては、例えば、HDD(Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
HDD103は、内蔵したディスクに対して磁気的にデータの書き込みおよび読み出しを行う。HDD103は、輪郭検出装置100の補助記憶装置として使用される。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置を使用することもできる。
グラフィック処理装置104には、モニタ104aが接続されている。グラフィック処理装置104は、プロセッサ101からの命令に従って、画像をモニタ104aの画面に表示させる。モニタ104aとしては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード105aとマウス105bとが接続されている。入力インタフェース105は、キーボード105aやマウス105bから送られてくる信号をプロセッサ101に送信する。なお、マウス105bは、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク106aに記録されたデータの読み取りを行う。光ディスク106aは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク106aには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
機器接続インタフェース107は、輪郭検出装置100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置107aやメモリリーダライタ107bを接続することができる。メモリ装置107aは、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ107bは、メモリカード107cへのデータの書き込み、またはメモリカード107cからのデータの読み出しを行う装置である。メモリカード107cは、カード型の記録媒体である。
ネットワークインタフェース108は、ネットワーク108aに接続されている。ネットワークインタフェース108は、ネットワーク108aを介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、第1の実施の形態に示した輪郭検出装置1も、図2に示した輪郭検出装置100と同様のハードウェアにより実現することができる。
図3は、輪郭検出装置が備える処理機能の構成例を示すブロック図である。輪郭検出装置100は、ユーザの入力操作に応じて入力画像上に設定された、一定以上の幅を有する探索領域において、その探索領域の延伸方向に対してエッジ強度が大きい画素を順次探索していくことで、入力画像上の人の輪郭線を検出する。特に、輪郭検出装置100は、顔が正面を向いた人の頭部近傍の輪郭線を高精度に検出可能とするものである。また、探索領域は、所定の大きさのアイコン画像をユーザがドラッグ操作により移動させる操作を行ったときに、アイコン画像が移動した領域として設定されるものとする。
輪郭検出装置100は、画像読み込み部111、顔検出部112、トレース入力部113および輪郭検出部114を有する。画像読み込み部111、顔検出部112、トレース入力部113および輪郭検出部114の各処理は、プロセッサ101が所定のプログラムを実行することで実現される。ただし、これらの処理の少なくとも一部が、例えばグラフィック処理装置104内の回路などの専用回路によって実現されてもよい。
また、輪郭検出装置100の記憶装置には、顔位置情報121、トレース領域情報122、探索範囲情報123および座標リスト124が記憶される。これらの情報のうち、探索範囲情報123は、HDD103などの不揮発性記憶装置にあらかじめ記憶される。一方、顔位置情報121、トレース領域情報122および座標リスト124は、少なくとも、RAM102などの揮発性記憶装置に一時的に記憶される。
画像読み込み部111は、人が映った入力画像を、HDD103などの輪郭検出装置100に接続された不揮発性記憶装置や、ネットワーク108a上の情報処理装置などからRAM102へ読み込む。本実施の形態では、入力画像には、少なくとも、顔が略正面を向いた人の頭部が映っているものとする。
顔検出部112は、入力画像から人の顔を検出し、検出された顔の位置を示す顔位置情報121を設定する。顔位置情報121は、着目画素が顔の右側または左側のどちらに位置するかを判定するための情報であり、例えば、水平方向(y方向)に対する顔の中心を示す座標が設定される。
トレース入力部113は、所定の大きさのアイコン画像をユーザがドラッグ操作により移動させる「トレース操作」を行ったとき、アイコン画像が移動した領域を探索領域に設定する。以下、アイコン画像が移動した領域を「トレース領域」と呼ぶ。トレース領域を示す情報は、トレース領域情報122としてRAM102に記憶される。
トレース入力部113は、設定したトレース領域内の画素のそれぞれについて、「トレース方向角度」を算出し、算出したトレース方向角度を各画素に対応付けてトレース領域情報122に登録する。トレース方向角度は、画素ごとにエッジ探索のための進行可能方向を判定するための基準角度である。トレース方向角度の詳細については後述する。
探索範囲情報123には、トレース方向角度ごとに、エッジ探索を行う範囲を示すエッジ探索範囲が対応付けて記憶されている。
輪郭検出部114は、トレース領域における開始領域から終了領域に向かって、エッジ強度が大きい画素を順次辿っていくことで、輪郭線を検出する。このようなエッジ探索処理において、輪郭検出部114は、顔位置情報121、トレース領域情報122および探索範囲情報123を参照する。輪郭検出部114は、着目画素を設定するたびに、その着目画素の座標を座標リスト124に登録する。そして、エッジ探索処理が終了すると、座標リスト124は検出された輪郭線を示す情報として出力される。
また、輪郭検出部114は、着目画素の周囲画素からエッジ強度が最も大きい画素を選択したとき、選択した画素の位置でのトレース方向と、選択した画素と顔との位置関係とに基づいて、選択した画素について、本来あるべきでない方向に肌色領域があるかを判定する。輪郭検出部114は、あるべきでない方向に肌色領域がある場合には、選択した画素を次の着目画素に設定せずに、エッジと判定する画素から除外する。これにより、耳の近傍領域や頭髪を含む領域でも、人の輪郭線を正確に検出できるようにする。
次に、輪郭検出装置100の基本的な輪郭検出処理手順について説明する。基本的な輪郭検出処理は、次のような処理ステップを含む。
(1)トレース操作に応じてトレース領域を設定する。
(2)トレース領域の各画素について、トレース方向角度を算出する。
(3)トレース領域の開始領域内のいずれかの画素を着目画素に設定し、着目画素がトレース領域の終了領域に達するまで、次の(3−1)〜(3−3)を繰り返す。
(3−1)着目画素についてのトレース方向角度に対応するエッジ探索範囲を、探索範囲情報123を基に判別する。
(3−2)着目画素の周囲画素のうちエッジ探索範囲に含まれる画素をエッジ候補画素とし、各エッジ候補画素のエッジ強度を算出する。
(3−3)エッジ強度が最も大きいエッジ候補画素を次の着目画素に設定する。
なお、トレース方向角度の算出は、(2)の時点でトレース領域内の全画素について行われるのではなく、(3−1)の時点で、設定された着目画素について行われてもよい。
以下、図4〜図9を用いて、上記の(1)〜(3)の処理について説明する。
まず、図4は、トレース操作実行時における状態遷移の例を示す図である。この図4を用いて、トレース操作およびトレース領域について説明する。
本実施の形態では例として、ユーザは、トレース領域を指定するためのトレース操作を、マウスを用いて行うものとする。そして、ユーザが、矩形のアイコン画像201をドラッグ操作により移動させることで、トレース領域210が設定されるものとする。
図4において、トレース領域210は、破線によって囲まれた領域である。また、図4中の点線矢印は、アイコン画像201の中心点が移動した軌跡を示し、以下、この軌跡を「トレース領域の中心線」と呼ぶ。
図4の状態1のように、ユーザが、マウスカーソルを入力画像200上の所望の位置に配した状態でマウスボタンを押下すると、マウスカーソルの位置にアイコン画像201が表示される。なお、アイコン画像201は、マウスボタン押下の前からマウスカーソルの位置に表示されていてもよい。
ユーザが、マウスボタンを押下したままでマウスを動かして画面上の指示位置を移動させると、その移動に伴ってアイコン画像201も移動する。このとき、図4の状態2のように、アイコン画像201が移動した領域がトレース領域210に設定されるとともに、設定されたトレース領域210が画面上に識別可能な状態で表示される。その後、ユーザが所望の位置でマウスボタンの押下を終了すると、図4の状態3に示すように、トレース領域210の設定が完了する。
人の頭部の輪郭線を検出させる場合、ユーザは、アイコン画像201の内部に常に入力画像200上の人の頭部の輪郭が含まれるように、アイコン画像201を移動させればよい。
なお、タッチパネルが用いられる場合、ユーザは例えば、入力画像200上の所望の位置に指を接触させ、指が接触された状態を保ったまま接触位置を移動させ、その後、所望の位置で指を離す、という操作により、トレース領域210を指定することができる。
また、図4の例では、アイコン画像201が移動した領域がトレース領域210に設定されているが、その他に例えば、マウスカーソルの軌跡または指の接触位置の軌跡を中心とした一定幅の領域が、トレース領域210に設定されてもよい。
また、アイコン画像201の形状は、図4のような矩形に限らない。
ところで、後述するように、エッジ探索の始点および終点を判別するために、トレース領域210の開始領域および終了領域が設定される。開始領域としては、トレース領域210の始点側の端部に隣接する複数画素が設定され、終了領域としては、トレース領域210の終点側の端部に隣接する複数画素が設定される。
図4のように矩形のアイコン画像201が用いられる場合、例えば、開始領域としては、トレース領域210においてアイコン画像201が最初に配置された領域のうち、端部に面する1辺または2辺の画素が設定される。アイコン画像201が初期位置から左右方向(x軸方向)または上下方向(y軸方向)に移動した場合、開始領域としては、端部に面する1辺の画素が設定される。一方、アイコン画像201が初期位置から斜めに移動した場合、開始領域としては、端部に面する2辺の画素が設定される。図4は後者の例を示しており、辺211,212に隣接する画素が開始領域に設定される。
また、終了領域についても同様であり、トレース領域210においてアイコン画像201が最後に配置された領域のうち、端部に面する1辺または2辺の画素が設定される。アイコン画像201が最終位置に対して左右方向(x軸方向)または上下方向(y軸方向)に移動した場合、終了領域としては、端部に面する1辺の画素が設定される。一方、アイコン画像201が最終位置に対して斜めに移動した場合、終了領域としては、端部に面する2辺の画素が設定される。図4は後者の例を示しており、辺213,214に隣接する画素が終了領域に設定される。
図5は、トレース方向角度の算出方法について説明するための図である。なお、図5では、図4と同様に、破線によって囲まれた領域がトレース領域210を示し、点線矢印はトレース領域210の中心線を示している。
図4に示したようにトレース領域210が設定されると、トレース入力部113は、トレース領域210内の各画素に対してトレース方向角度を算出し、トレース領域情報122に登録する。トレース方向角度は、各画素の位置におけるトレース領域210の延伸方向の角度を示す。トレース方向角度は、対応する画素に着目したとき、その周囲画素のうちどの画素を探索対象とするかを決定するための基準角度となる。
具体的な算出方法の例を、図5における画素221を例に挙げて説明する。トレース方向角度θ1は、画面上の所定の基準方向(本実施の形態では垂直方向)に対する角度として設定される。画素221についてのトレース方向角度θ1は、画素221から中心線に対して下ろした垂線と中心線との交点222における、中心線の接線223の傾きθ2として算出することができる。
なお、上記の接線223の傾きθ2は、演算負荷の軽減や処理速度の向上を目的として、より簡易な計算方法によって近似的に算出されてもよい。例えば、交点222の座標と、交点222を起点として終点側に所定距離だけ離れた中心線上の座標とを結ぶ直線の角度が、接線223の傾きθ2の近似値として算出されてもよい。
図6は、トレース領域情報に登録される情報の例を示す図である。トレース入力部113は、ユーザの操作入力によってトレース領域210が設定されると、トレース領域情報122に、トレース領域210に含まれる画素ごとにレコードを作成する。各レコードには、例えば、座標、トレース方向角度、開始領域フラグおよび終了領域フラグの欄が設けられる。
座標の欄には、各画素の座標が登録される。トレース方向角度の欄には、図5で説明した画素ごとのトレース方向角度が登録される。開始領域フラグは、該当の画素が図4で説明した開始領域に属するか否かを示すフラグであり、開始領域に属する場合は「1」が登録され、属さない場合は「0」が登録される。終了領域フラグは、該当の画素が図4で説明した終了領域に属するか否かを示すフラグであり、終了領域に属する場合は「1」が登録され、属さない場合は「0」が登録される。なお、終了領域に属する画素は、その画素が着目画素に設定されたときにそれ以上のエッジ探索が行われないので、その画素についてはトレース方向角度が登録されていなくてよい。
図7は、トレース方向角度の分類の例を示す図である。前述のように、探索範囲情報123には、トレース方向角度ごとに、エッジ探索を行う範囲を示すエッジ探索範囲が対応付けて記憶されている。本実施の形態では、トレース方向角度が図7に示す8つの角度範囲D0〜D7に分類され、分類された角度範囲ごとにエッジ探索範囲が対応付けられる。
ここで、トレース方向角度が8つの角度範囲D0〜D7に分類される理由は、トレース領域内の着目画素の周囲に8つの画素が存在することと関係する。角度範囲D0〜D7は、それぞれ着目画素の上側、右上側、右側、右下側、下側、左下側、左側、左上側に対して、それぞれ略均等の角度を有するように設定されればよい。
図7の例では、表示画面の上側を角度の基準方向として、338°以上360°未満および0°以上24°未満の範囲を角度範囲D0に、24°以上68°未満の範囲を角度範囲D1に、68°以上114°未満の範囲を角度範囲D2に、114°以上158°未満の範囲を角度範囲D3に、158°以上204°未満の範囲を角度範囲D4に、204°以上248°未満の範囲を角度範囲D5に、248°以上294°未満の範囲を角度範囲D6に、294°以上338°未満の範囲を角度範囲D7に、それぞれ設定している。
図8は、角度範囲とエッジ探索範囲との関係の例について示す図である。なお、図8では、着目画素の周囲画素について、上側、右上側、右側、右下側、下側、左下側、左側、左上側の順にN0,N1,N2,N3,N4,N5,N6,N7という符号を付して示している。
図8に示す「エッジ候補画素」とは、エッジ探索の対象とする画素、より具体的には、エッジ強度の計算を行う対象の画素を示す。エッジ探索範囲とは、着目画素の周囲画素のうちエッジ候補画素が含まれる範囲を示す。輪郭検出部114によるエッジ探索範囲は、着目画素について算出されたトレース方向角度が示す方向の近傍範囲に限定される。換言すると、次の着目画素として設定可能な画素は、現在の着目画素の周囲画素のうちエッジ探索範囲に含まれる画素に限定される。これにより、トレース領域の延伸方向から大きく外れた方向に位置するエッジが検出されなくなり、ユーザが意図する輪郭線が検出されやすくなる。
本実施の形態では例として、図8に示すように、エッジ探索範囲は図7に示した角度範囲ごとに設定される。トレース方向角度が角度範囲D0に含まれる場合、エッジ探索範囲は着目画素の上方向の近傍に設定され、画素N7,N0,N1がエッジ候補画素となる。トレース方向角度が角度範囲D1に含まれる場合、エッジ探索範囲は着目画素の右上方向の近傍に設定され、画素N0,N1,N2がエッジ候補画素となる。トレース方向角度が角度範囲D2に含まれる場合、エッジ探索範囲は着目画素の右方向の近傍に設定され、画素N1,N2,N3がエッジ候補画素となる。トレース方向角度が角度範囲D3に含まれる場合、エッジ探索範囲は着目画素の右下方向の近傍に設定され、画素N2,N3,N4がエッジ候補画素となる。
トレース方向角度が角度範囲D4に含まれる場合、エッジ探索範囲は着目画素の下方向の近傍に設定され、画素N3,N4,N5がエッジ候補画素となる。トレース方向角度が角度範囲D5に含まれる場合、エッジ探索範囲は着目画素の左下方向の近傍に設定され、画素N4,N5,N6がエッジ候補画素となる。トレース方向角度が角度範囲D6に含まれる場合、エッジ探索範囲は着目画素の左方向の近傍に設定され、画素N5,N6,N7がエッジ候補画素となる。トレース方向角度が角度範囲D7に含まれる場合、エッジ探索範囲は着目画素の左上方向の近傍に設定され、画素N6,N7,N0がエッジ候補画素となる。
なお、図8の例ではエッジ候補画素を着目画素の周囲1画素の範囲に設定したが、エッジ候補画素を着目画素の周囲複数画素の範囲に設定してもよい。
探索範囲情報123には、角度範囲ごとに、エッジ候補画素の位置を示す情報(例えば、図8に示すN0〜N7)があらかじめ登録される。輪郭検出部114は、着目画素を設定すると、着目画素についてのトレース角度範囲に対応するエッジ候補画素を、探索範囲情報123に基づいて判別する。輪郭検出部114は、判別したエッジ候補画素のそれぞれについてエッジ強度を算出し、エッジ強度が最も大きい画素を次の着目画素に設定する。
図9は、エッジ強度の算出例を示す図である。エッジ強度は、対象の画素がエッジである可能性の高さを示す指標である。この図9では、Sobelフィルタを用いてエッジ候補画素のエッジ強度を算出する例について示す。
Sobelフィルタを用いた方法では、x方向およびy方向のそれぞれについてのフィルタ係数が用意される。それぞれのフィルタ係数を用いて、エッジ強度のx成分、y成分が算出される。そして、x成分およびy成分を合成することでエッジ強度が算出される。
x,yの各方向のフィルタ演算では、エッジ候補画素およびその周囲画素の合計9個の画素にそれぞれフィルタ係数が設定される。図9の例では、エッジ候補画素についてのx方向のフィルタ演算は、「左上画素の輝度値×(−1)+上側画素の輝度値×0+右上側画素の輝度値×1+左側画素の輝度値×(−2)+エッジ候補画素の輝度値×0+右側画素の輝度値×2+左下側画素の輝度値×(−1)+下側画素の輝度値×0+右下側画素の輝度値×1」なる式によって行われ、これによりエッジ強度のx成分が算出される。
また、図9の例では、エッジ候補画素についてのy方向のフィルタ演算は、「左上画素の輝度値×(−1)+上側画素の輝度値×(−2)+右上側画素の輝度値×(−1)+左側画素の輝度値×0+エッジ候補画素の輝度値×0+右側画素の輝度値×0+左下側画素の輝度値×1+下側画素の輝度値×2+右下側画素の輝度値×1」なる式によって行われ、これによりエッジ強度のy成分が算出される。
そして、x成分の二乗値とy成分の二乗値とを加算した値の平方根をとることで、エッジ強度Eが算出される。
図10は、トレース領域の設定例を示す図である。ユーザは、図10に示すように、アイコン画像の内部に常に人の輪郭線が包含されるように、アイコン画像を移動させる。これにより、人の輪郭線を含む領域にトレース領域210が設定される。上記の図4〜図9において説明した輪郭検出手順によれば、トレース領域210の延伸方向(すなわち、アイコン画像の移動方向)から大きく外れた方向に位置する輪郭線が検出されなくなり、ユーザが意図する輪郭線が検出されやすくなる。
また、アイコン画像をある程度の大きさ以上に設定することで、ユーザは、頭部の輪郭線に大まかに沿うようにアイコン画像を移動させるだけで、頭部の輪郭線を正確に検出させることができるようになる。例えば、アイコン画像の左右の幅を、耳の水平方向の範囲より大きく設定する。この場合、ユーザは、図10に示すように、頭部の輪郭線に大まかに沿ってアイコン画像を移動させる。このとき、耳の形状に沿ってアイコン画像の移動方向を変化させる必要はなく、耳の水平方向の範囲がアイコン画像の内部に包含されるようにアイコン画像が移動されればよい。このような簡単な操作により、耳の近傍領域についても輪郭線を正確に検出できる。
しかしながら、例えば、耳の近傍領域において頭髪が存在する場合には、次のように誤った輪郭線が検出される場合がある。図11は、輪郭線が誤検出されるケースについて示す図である。
図11の領域301においては、耳の領域と顔の領域との間に頭髪の領域が存在する。頭髪の領域と耳や顔の肌色領域との境界部では、エッジ強度が比較的大きくなる。このため、輪郭検出部114は、耳の外縁部ではなく、耳より顔の内側方向に存在する頭髪の領域の外縁部を、人の輪郭として誤検出する場合がある。また、図10のようにトレース領域が頭部の輪郭線に大まかに沿うように設定された場合、耳の近傍領域の画素についてのトレース方向角度は概ね上下方向と一致する。このことから、輪郭検出部114は、頭髪の領域の外縁部を一旦人の輪郭線として誤検出すると、誤検出の状態のまま上下方向へのエッジ探索を続行して、耳の領域の他端まで進行してしまう可能性もある。
また、上記のような誤検出は、耳の近傍領域に限らず、例えば、顔の外縁部より内側に頭髪が流れているような領域でも発生し得る。
そこで、輪郭検出部114は、エッジ候補画素の中からエッジ強度が最も大きい画素を選択したとき、選択した画素が肌色領域と肌色領域との間の領域に位置する場合には、選択した画素を次の着目画素に設定せずに、エッジ候補画素から除外する。この方法の具体例として、輪郭検出部114は、選択した画素の位置でのトレース方向と、選択した画素と顔との位置関係とに基づいて、選択した画素について、本来あるべきでない方向に肌色領域があるかを判定する。輪郭検出部114は、あるべきでない方向に肌色領域がある場合には、選択した画素を次の着目画素に設定せずに、エッジと判定する画素から除外する。これにより、耳の近傍領域や頭髪を含む領域でも、人の輪郭線を正確に検出できるようになる。
次に、輪郭検出装置100の処理手順について、フローチャートを用いて説明する。まず、図12は、第2の実施の形態に係る輪郭検出装置の全体処理手順の例を示すフローチャートである。
[ステップS11]画像読み込み部111は、入力画像の画像データをRAM102に読み込む。
[ステップS12]顔検出部112は、入力画像から顔検出を行い、検出された顔の位置を示す情報を顔位置情報121としてRAM102に保存する。
[ステップS13]トレース入力部113は、ユーザによるトレース操作を受け付ける。
[ステップS14]トレース入力部113は、トレース操作に基づいて、トレース領域を設定する。トレース入力部113は、トレース領域内の各画素に対応するレコードをトレース領域情報122に作成し、各画素の座標を登録する。また、トレース入力部113は、各画素についてのトレース方向角度を算出して、トレース領域情報122に登録する。さらに、トレース入力部113は、トレース領域における開始領域および終了領域を判別して、その判別結果を基にトレース領域情報122の開始領域フラグおよび終了領域フラグを設定する。
[ステップS15]輪郭検出部114は、トレース領域における開始領域の各画素のエッジ強度を算出し、エッジ強度が最も大きい画素を最初の着目画素に設定する。また、輪郭検出部114は、設定した着目画素の座標を座標リスト124に登録する。
[ステップS16]輪郭検出部114は、トレース領域情報122から、現在の着目画素に対応付けられたトレース方向角度を読み出す。輪郭検出部114は、探索範囲情報123を参照し、読み出したトレース方向角度が属する角度範囲に対応するエッジ候補画素の位置を判別する。
[ステップS17]輪郭検出部114は、エッジ候補画素のそれぞれについて、エッジ強度を算出する。
[ステップS18]輪郭検出部114は、未選択のエッジ候補画素の中から、エッジ強度が最大の画素を選択する。
[ステップS19]輪郭検出部114は、ステップS18で選択した画素についてのトレース方向、および、選択した画素と顔位置情報121に登録された顔の位置との関係に基づいて、選択した画素について、本来あるべきでない方向に肌色領域があるかを判定する。あるべきでない方向に肌色領域がある場合には、誤検出と判定されて、ステップS20の処理が実行される。一方、あるべきでない方向に肌色領域がない場合には、誤検出でないと判定されて、ステップS21の処理が実行される。
[ステップS20]輪郭検出部114は、ステップS18で選択した画素をエッジ候補画素から除外する。輪郭検出部114は、例えば、ステップS18で選択した画素の位置をRAM102に一時的に記憶する。
この後、ステップS18の処理が再実行されるが、ステップS20の処理によってエッジ候補画素から除外された画素は、次のステップS18において選択済みの画素となって、エッジ強度が最大の画素として選択されない。
[ステップS21]輪郭検出部114は、トレース領域情報122に登録された、ステップS18で選択画素についての終了領域フラグに基づき、選択した画素が終了領域に含まれるかを判定する。選択した画素が終了領域に含まれない場合には、ステップS22の処理が実行され、含まれる場合には、ステップS23の処理が実行される。
[ステップS22]輪郭検出部114は、着目画素を、ステップS18で選択した画素に更新し、この画素の座標を座標リスト124に登録する。この後、ステップS16が実行されて、更新された着目画素についての処理が行われる。
[ステップS23]輪郭検出部114は、ステップS18で選択した画素の座標を座標リスト124に登録した後、座標リスト124を、検出された輪郭線を示す情報として出力する。
以上の図12の処理によれば、耳の近傍領域や頭髪を含む領域でも、人の頭部の輪郭線を正確に検出できるようになる。また、ユーザが、耳の外縁部や頭髪の領域の外縁部の形状に沿って忠実にアイコン画像を移動させなくても、これらの領域において頭部の輪郭線が精度よく検出される。従って、簡単な操作によって輪郭線を効率よく検出することができる。例えば、輪郭線の検出対象とする入力画像が多数ある場合でも、輪郭線の検出精度を維持しつつ、作業時間を短縮することができる。
なお、上記の図12の処理では、エッジ探索処理を開始する前のステップS14において、事前にトレース領域内の全画素のトレース方向角度を算出した。しかし、他の例として、ステップS14の時点ではトレース方向角度を算出せずに、ステップS16の時点で着目画素のトレース方向角度を算出してもよい。
また、図12の処理では、ステップS15およびステップS17の時点でエッジ強度の計算を行った。しかし、他の例として、ステップS14でトレース領域を設定した後、ステップS15の処理を実行する前の段階で、トレース方向角度と同様に、トレース領域内の全画素のエッジ強度をあらかじめ計算し、トレース領域情報122に登録しておいてもよい。この場合、ステップS15およびステップS17では、該当する画素のエッジ強度がトレース領域情報122から読み出される。
また、入力画像上の全画素についてのトレース方向角度とエッジ強度のいずれか、または両方が、ステップS13でトレース操作を受け付けるより前の時点で計算されて、記憶装置に一時的に記憶されてもよい。
次に、ステップS19の判定処理手順について、2つの処理例を挙げる。まず、図13は、ステップS19の第1の処理例を示すフローチャートである。
[ステップS31]輪郭検出部114は、顔位置情報121に基づき、図12のステップS18で選択した画素が、顔の右側または左側のどちらに位置するかを判定する。顔の右側に位置する場合、ステップS32の処理が実行され、左側に位置する場合、ステップS33の処理が実行される。
[ステップS32]輪郭検出部114は、選択した画素の位置でのトレース方向が下向きまたは上向きのどちらであるかを判定する。具体的には、輪郭検出部114は、トレース領域情報122から、選択した画素についてのトレース方向角度を読み出す。輪郭検出部114は、読み出したトレース方向角度の垂直成分(y成分)が下方向を示す場合には、トレース方向が下向きと判定し、上方向を示す場合には、トレース方向が上向きと判定する。
トレース方向が下向きの場合、ステップS34の処理が実行され、上向きの場合、ステップS35の処理が実行される。
[ステップS33]輪郭検出部114は、選択した画素の位置でのトレース方向が下向きまたは上向きのどちらであるかを判定する。具体的な処理手順はステップS32と同様である。トレース方向が下向きの場合、ステップS35の処理が実行され、上向きの場合、ステップS34の処理が実行される。
[ステップS34]輪郭検出部114は、肌色領域を調査する調査方向を、選択した画素の周囲画素のうち、選択した画素についてのトレース方向角度に対して左側に位置する画素の方向に設定する。
例えば、輪郭検出部114は、選択した画素についてのトレース方向角度が、図7に示した角度範囲D0〜D7のどれに属するかを判定し、どの角度範囲に属するかによって、周囲画素のうち左側に位置する画素を決定する。ここで、選択した画素の周囲画素を、図8に示した符号(N0〜N7)を用いて示す。
輪郭検出部114は、トレース方向角度が角度範囲D0に属する場合、周囲画素のうち画素N6を、左側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D1に属する場合、周囲画素のうち画素N7を、左側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D2に属する場合、周囲画素のうち画素N0を、左側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D3に属する場合、周囲画素のうち画素N1を、左側に位置する画素に決定する。
また、輪郭検出部114は、トレース方向角度が角度範囲D4に属する場合、周囲画素のうち画素N2を、左側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D5に属する場合、周囲画素のうち画素N3を、左側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D6に属する場合、周囲画素のうち画素N4を、左側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D7に属する場合、周囲画素のうち画素N5を、左側に位置する画素に決定する。
輪郭検出部114は、選択した画素から左側に位置する画素への方向を、肌色領域の調査方向とする。これにより、選択した画素についてのトレース方向角度に対して左向きに概ね90°回転された方向に、肌色領域の調査方向が設定される。この調査方向は、顔の外側に向かう方向となり、これはすなわち、選択した画素が頭部の輪郭線に正しく沿っているのであれば、通常は肌色領域が存在しない方向となる。
[ステップS35]輪郭検出部114は、肌色領域を調査する調査方向を、選択した画素の周囲画素のうち、選択した画素についてのトレース方向角度に対して右側に位置する画素の方向に設定する。
例えば、輪郭検出部114は、ステップS34と同様に、選択した画素についてのトレース方向角度が図7の角度範囲D0〜D7のどれに属するかを判定し、どの角度範囲に属するかによって、周囲画素のうち右側に位置する画素を決定する。
輪郭検出部114は、トレース方向角度が角度範囲D0に属する場合、周囲画素のうち画素N2を、右側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D1に属する場合、周囲画素のうち画素N3を、右側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D2に属する場合、周囲画素のうち画素N4を、右側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D3に属する場合、周囲画素のうち画素N5を、右側に位置する画素に決定する。
また、輪郭検出部114は、トレース方向角度が角度範囲D4に属する場合、周囲画素のうち画素N6を、右側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D5に属する場合、周囲画素のうち画素N7を、右側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D6に属する場合、周囲画素のうち画素N0を、右側に位置する画素に決定する。また、輪郭検出部114は、トレース方向角度が角度範囲D7に属する場合、周囲画素のうち画素N1を、右側に位置する画素に決定する。
輪郭検出部114は、選択した画素から右側に位置する画素への方向を、肌色領域の調査方向とする。これにより、選択した画素についてのトレース方向角度に対して右向きに概ね90°回転された方向に、肌色領域の調査方向が設定される。この調査方向は、顔の外側に向かう方向となり、これはすなわち、選択した画素が頭部の輪郭線に正しく沿っているのであれば、通常は肌色領域が存在しない方向となる。
[ステップS36]輪郭検出部114は、設定された調査方向に位置する最初の画素を、肌色領域かの判定対象とする調査画素に設定する。
[ステップS37]輪郭検出部114は、トレース領域情報122に基づき、現在の調査画素がトレース領域外であるかを判定する。調査画素がトレース領域外である場合、ステップS41の処理が実行され、調査画素がトレース領域内である場合、ステップS38の処理が実行される。
[ステップS38]輪郭検出部114は、現在の調査画素が肌色かを判定する。この判定は、例えば、調査画素の色情報の値が所定の範囲に含まれるかによって行われる。調査画像が肌色である場合、ステップS39の処理が実行され、肌色でない場合、ステップS40の処理が実行される。
[ステップS39]輪郭検出部114は、あるべきでない方向に肌色領域があり、誤検出が発生したと判定する。すなわち、ステップS19において「Yes」と判定される。
[ステップS40]輪郭検出部114は、調査画素を、設定された調査方向に対して1画素分移動させる。この後、移動後の調査画素についてステップS37の処理が再度実行される。
[ステップS41]ステップS37で「Yes」と判定される場合とは、調査方向に対して肌色の画素が検出されずに、調査画素がトレース領域外に設定されてしまった場合である。この場合、輪郭検出部114は、あるべきでない方向に肌色領域がないので、ステップS18で選択した画素は頭部の輪郭線に沿って正しく検出されたものであると判定する。すなわち、ステップS19において「No」と判定される。
図14は、第1の処理例における調査方向の設定例を示す図である。なお、以下の説明では、座標(n,m)の画素を「画素(n,m)」と表記する。
図14では例として、画素(12,12)が着目画素に設定されており、この場合のエッジ候補画素の中で、画素(13,13)のエッジ強度が最も大きいと判定されたとする。また、画素(13,13)についてのトレース方向角度が、図7の角度範囲D4に属するものとする。また、顔の中心位置は画素(13,13)の左側方向(−x方向)であるものとする。
この場合、輪郭検出部114は、画素(13,13)の左側に位置する画素を画素(14,13)と決定し、画素(13,13)から画素(14,13)に向かう方向(すなわち右方向)を肌色領域の調査方向とする。ここで、トレース領域の右端がx座標「17」の位置にあるものとする。このとき、輪郭検出部114は、調査方向に存在する画素(14,13)、画素(15,13)、画素(16,13)、画素(17,13)を調査画素とし、これらのうち少なくとも1つが肌色であると判定すると、あるべきでない方向に肌色領域があると判定する。
この場合、輪郭検出部114は、画素(13,13)は頭部の輪郭線に沿っていないと判定して、画素(13,13)をエッジ候補画素から除外する。そして、画素(12,12)についてのエッジ候補画素のうち、画素(13,13)の次にエッジ強度が大きい画素を選択して、上記と同様の肌色領域の判定を行う。
以上の第1の処理例によれば、エッジ強度が大きいと判定された画素についてのトレース方向角度に対し、顔の外側方向に対して概ね90°回転した方向に対して、肌色領域が調査される。これにより、本来あるべきでない方向に肌色領域があるかを判定することができる。
次に、図15は、ステップS19の第2の処理例を示すフローチャートである。第2の処理例は、第1の処理例と比較して、肌色領域の調査方向を、トレース方向角度に応じたより正確な角度に設定可能とするものである。
なお、図15の処理では、図12のステップS18で選択した画素の座標を(X2,Y2)、所定個数だけ前に設定された着目画素の座標を(X1,Y1)とする。画素(X1,Y1)は、例えば、アイコン画像の幅の1/2(ただし、小数点以下は切り捨て)に相当する個数だけ前に設定された着目画素とすることができる。
[ステップS51]輪郭検出部114は、XD=X2−X1、YD=Y2−Y1を計算する。
[ステップS52]輪郭検出部114は、顔位置情報121に基づき、画素(X2,Y2)が顔の右側または左側のどちらに位置するかを判定する。顔の右側に位置する場合、ステップS53の処理が実行され、左側に位置する場合、ステップS54処理が実行される。
[ステップS53]輪郭検出部114は、画素(X2,Y2)の位置でのトレース方向が下向きまたは上向きのどちらであるかを判定する。トレース方向が下向きの場合、ステップS55の処理が実行され、上向きの場合、ステップS56の処理が実行される。
[ステップS54]輪郭検出部114は、画素(X2,Y2)の位置でのトレース方向が下向きまたは上向きのどちらであるかを判定する。トレース方向が下向きの場合、ステップS56の処理が実行され、上向きの場合、ステップS55の処理が実行される。
なお、ステップS53,S54は、図13のステップS32と同様の処理手順により実行できる。
[ステップS55]輪郭検出部114は、肌色領域の調査方向を決定するための座標(XS,YS)を、座標(X1,Y1)から座標(X2,Y2)へ向かう直線の傾きを左方向に90°回転させた方向の位置に設定する。この座標は、XS=X2+YD、YS=Y2−XDと計算される。なお、XS,YSは整数でなくてもよい。
[ステップS56]輪郭検出部114は、肌色領域の調査方向を決定するための座標(XS,YS)を、座標(X1,Y1)から座標(X2,Y2)へ向かう直線の傾きを右方向に90°回転させた方向の位置に設定する。この座標は、XS=X2−YD、YS=Y2+XDと計算される。なお、XS,YSは整数でなくてもよい。
なお、上記のステップS55,S56では、座標(X1,Y1)から座標(X2,Y2)へ向かう直線の傾きを基準として座標(XS,YS)を決定した。しかし、他の方法として、トレース領域情報122から読み出した、座標(X2,Y2)についてのトレース方向角度を基準として、座標(XS,YS)を決定してもよい。
[ステップS57]輪郭検出部114は、画素(X2,Y2)から座標(XS,YS)の方向への座標の変化量のx成分およびy成分をそれぞれ示すx増分およびy増分を算出する。この処理では、x増分またはy増分の少なくとも一方の値が1となるように計算が行われる。このステップS57の算出処理については後の図16において詳述する。
[ステップS58]輪郭検出部114は、画素(X2,Y2)から、算出されたx増分、y増分の距離だけ離れた位置の画素を、肌色領域の調査画素に設定する。x増分またはy増分の少なくとも一方の値が1であることから、この処理では画素(X2,Y2)に隣接する周囲画素のうちの1つが、調査画素に設定される。
[ステップS59]輪郭検出部114は、トレース領域情報122に基づき、現在の調査画素がトレース領域外であるかを判定する。調査画素がトレース領域外である場合、ステップS63の処理が実行され、調査画素がトレース領域内である場合、ステップS60の処理が実行される。
[ステップS60]輪郭検出部114は、現在の調査画素が肌色かを判定する。この判定は、例えば、調査画素の色情報の値が所定の範囲に含まれるかによって行われる。調査画像が肌色である場合、ステップS61の処理が実行され、肌色でない場合、ステップS62の処理が実行される。
[ステップS61]輪郭検出部114は、あるべきでない方向に肌色領域があり、誤検出が発生したと判定する。すなわち、ステップS19において「Yes」と判定される。
[ステップS62]輪郭検出部114は、調査画素を、現在の調査画素からx増分およびy増分の距離だけ離れた位置に移動させる。ここで、x増分またはy増分の少なくとも一方の値が1であることから、この処理では現在の調査画素の周囲画素のうちの1つが、新たな調査画素に設定される。この後、移動後の調査画素についてステップS59の処理が再度実行される。
[ステップS63]ステップS59で「Yes」と判定される場合とは、調査方向に対して肌色の画素が検出されずに、調査画素がトレース領域外に設定されてしまった場合である。この場合、輪郭検出部114は、あるべきでない方向に肌色領域がないので、ステップS18で選択した画素(X2,Y2)は頭部の輪郭線に沿って正しく検出されたものであると判定する。すなわち、ステップS19において「No」と判定される。
図16は、図15のステップS57の処理手順の例を示すフローチャートである。
[ステップS71]輪郭検出部114は、x差分=XS−X2、y差分=YS−Y2を計算する。
[ステップS72]輪郭検出部114は、x差分の絶対値がy差分の絶対値より小さいかを判定する。x差分の絶対値がy差分の絶対値より小さい場合、ステップS73の処理が実行され、x差分の絶対値がy差分の絶対値以上である場合、ステップS77の処理が実行される。
[ステップS73]輪郭検出部114は、x差分をy差分の絶対値で除算した値を、x増分として算出する。
[ステップS74]輪郭検出部114は、y差分が0以上であるかを判定する。y差分が0以上である場合、ステップS75の処理が実行され、y差分が0未満である場合、ステップS76の処理が実行される。
[ステップS75]輪郭検出部114は、y増分を1とする。
[ステップS76]輪郭検出部114は、y増分を−1とする。
上記のステップS73〜S76の処理によって算出されるx増分およびy増分は、座標(X2,Y2)から座標(XS,YS)に向かう方向(すなわち、肌色領域の調査方向)に対する、y方向の1画素単位での変化量のx成分およびy成分を示す。ステップS73〜S76の処理によってx増分およびy増分が算出された場合、図15のステップS58、およびその後のステップS62において調査画素が設定される際には、y座標が1画素ずつ順次シフトされていくことになる。
[ステップS77]輪郭検出部114は、y差分をx差分の絶対値で除算した値を、y増分として算出する。
[ステップS78]輪郭検出部114は、x差分が0以上であるかを判定する。x差分が0以上である場合、ステップS79の処理が実行され、x差分が0未満である場合、ステップS80の処理が実行される。
[ステップS79]輪郭検出部114は、x増分を1とする。
[ステップS80]輪郭検出部114は、x増分を−1とする。
上記のステップS77〜S80の処理によって算出されるx増分およびy増分は、座標(X2,Y2)から座標(XS,YS)に向かう方向(すなわち、肌色領域の調査方向)に対する、x方向の1画素単位での変化量のx成分およびy成分を示す。ステップS77〜S80の処理によってx増分およびy増分が算出された場合、図15のステップS58、およびその後のステップS62において調査画素が設定される際には、x座標が1画素ずつ順次シフトされていくことになる。
図17は、第2の処理例における調査方向の設定例を示す図である。図17では例として、着目画素についてのエッジ候補画素のうち、画素(10,10)(=画素(X2,Y2))が、エッジ強度が大きい画素として選択されたものとする。また、所定個数だけ前に設定された着目画素を、画素(9,7)(=画素(X1,Y1))とする。また、画素(10,10)は顔の右側にあるものとする。
この場合、図15のステップS53ではトレース方向が下向きと判定される。また、ステップS55では、肌色領域の調査方向Cを決定するための座標(XS,YS)が、座標(9,7)から座標(10,10)へ向かう直線の傾きを左方向に90°回転させた方向に沿った座標(13,9)に設定される。そして、x増分=1、y増分=−(1/3)と算出される。
このとき、輪郭検出部114は、画素(10,10)を起点として、調査方向Cに対してx座標をx増分に相当する1画素分ずつ加算しながら調査画素を選択していく。y座標についても同様にy増分の値ずつ加算していくが、y増分の絶対値が1未満であるので、調査画素のy座標が小数点以下の値を有する場合があり得る。y座標が小数点以下の値を有する場合、例えば、y座標の小数点以下の値を切り捨てたときの画素と切り上げたときの画素の両方が、調査画素に設定される。
例えば図17において、第1回目の調査画素の設定では、画素(11,9)と画素(11,10)とが調査画素に設定され、第2回目の調査画素の設定では、画素(12,9)と画素(12,10)とが調査画素に設定される。第3回目の調査画素の設定では、調査画素のy座標が整数となるので、1つの画素(13,9)が調査画素に設定される。
なお、調査画素のy座標が小数点以下の値を有する場合、y座標の切り捨てまたは切り上げを行うことで、1つの画素のみが調査画素に設定されるようにしてもよい。
前述した第1の処理例では、起点となる画素から、その画素の周囲に位置する8つの画素のいずれかの方向に、肌色領域の調査方向が設定される。このため、肌色領域の調査方向は45°単位で設定される。これに対して、第2の処理例では、肌色領域の調査方向の角度をより細かく設定することが可能である。これにより、調査が必要な領域を正確に設定できるようになり、本来あるべきでない方向に肌色領域があるかの判定精度を向上させることができる。
なお、上記の各実施の形態に示した装置(輪郭検出装置1,100)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD、DVD−RAM、CD−ROM、CD−R/RWなどがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。