以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものではない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
<第1の実施形態>
最初に、図1を参照して、各実施形態で用いられる画像処理装置100の内部構成について説明する。図1において、画像処理装置100は、画像の入力から出力までの処理、及び記録までの処理を実行可能である。
図1において、内部バス101に対して、CPU102、ROM103、RAM104、画像処理部105、レンズユニット106、撮像部107、ネットワーク端子108、画像端子109、及び記録媒体I/F110が接続されている。加えて、内部バス101に対して、フレームメモリ111、操作部113、表示部114、物体検出部115、電源部116、及び発振部117が接続されている。記録媒体I/F110に対しては、記録媒体112が接続されている。内部バス101に接続される各部は、内部バス101を介して互いにデータのやりとりを行うことができるようにされている。
レンズユニット106(結像光学系)は、ズームレンズ及びフォーカスレンズを含むレンズ群、絞り機構、並びに駆動モータを含む。レンズユニット106を通過した光学像は、撮像部107で受像される。撮像部107は、CCDやCMOSセンサなどが用いられ、光学的な信号を電気的な信号に置き換える役割を果たしている。ここで得られる電気信号はアナログ値であるので、撮像部107は、アナログ値をデジタル値に変換する機能も備えている。撮像部107は像面位相差センサであり、その詳細については後述する。
CPU102は、ROM103に格納されるプログラムに従い、RAM104をワークメモリとして用いて、画像処理装置100の各部を制御する。この制御には、表示部114に対応する表示制御、及び記録媒体112に対する記録制御が含まれる。ROM103は、不揮発性の記録素子であり、CPU102を動作させるためのプログラムや各種調整パラメータなどが記録されている。RAM104は、半導体素子を利用した揮発性のメモリであり、一般的に、フレームメモリ111に比べて、低速、低容量のものが使用される。
フレームメモリ111は、画像信号を一時的に溜めておき、必要な時に読み出すことが可能な素子である。画像信号は膨大なデータ量であるため、高帯域かつ大容量のものが求められる。近年では、DDR4-SDRAM(Dual Data Rate 4 - Synchronous Dynamic RAM)などが用いられることが多い。このフレームメモリ111を使用することで、例えば、時間的に異なる画像を合成したり、画像から必要な領域だけを切り出したりするなどの処理を行うことが可能となる。
画像処理部105は、CPU102の制御に基づいて、撮像部107からのデータ、又はフレームメモリ11若しくは記録媒体112に格納された画像データに対して、各種画像処理を施す。画像処理部105が行う画像処理には、画像データの画素補間、符号化処理、圧縮処理、デコード処理、拡大/縮小処理(リサイズ)、ノイズ低減処理、色変換処理などが含まれる。また、画像処理部105は、撮像部107の画素の性能ばらつきの補正、欠陥画素の補正、ホワイトバランスの補正、輝度の補正、レンズの特性により発生する歪みや周辺光量落ちの補正などの処理を行う。なお、画像処理部105は特定の画像処理を施すための専用の回路ブロックで構成してもよい。また、画像処理の種別によっては、画像処理部105を用いずにCPU102がプログラムに従って画像処理を施すことも可能である。
画像処理部105により得られた演算結果に基づいてCPU102がレンズユニット106の制御を行い、光学的な画像の拡大、焦点距離の調整、及び、光量を調整する絞りなどの調整を行うことができる。また、レンズ群の一部を光軸に直交する平面上を移動させることにより、手ブレ補正を行うことも可能である。
操作部113は、機器外部とのインタフェースの1つであり、ユーザの操作を受け付ける。操作部113は、メカニカルなボタンやスイッチなどの素子が使われ、電源スイッチ及びモード切替スイッチなどを含む。
画像を表示する機能として、表示部114がある。表示部114は、ユーザが視認することができる表示デバイスであり、例えば、画像処理部105で処理された画像や設定メニューなどを表示することが可能である。ユーザは、表示部114を見ることにより、画像処理装置100の動作状況を確認することができる。表示部114は、近年では表示デバイスとしてLCD(Liquid Crystal Display)や有機EL(Electroluminescence)といった、小型で低消費電力のデバイスが利用されている。更には、タッチパネルと呼ばれる抵抗膜式や静電容量式の薄膜素子などが表示部114に兼備される場合もあり、操作部113の代替として利用されたりもする。
CPU102は、画像処理装置100の設定状態などをユーザに知らせるための文字列や、画像処理装置100の設定をするためのメニューを生成し、画像処理部105で処理された画像に重畳して、表示部114に表示する。文字情報の他にも、ヒストグラム、ベクトルスコープ、波形モニタ、ゼブラ、ピーキング、フォルスカラーなどのような撮影アシスト表示も重畳することが可能である。
その他のインタフェースとして、画像端子109がある。代表的なインタフェースとしては、SDI(Serial Digital Interface)やHDMI(登録商標)(High Definition Multimedia Interface)、DisplayPort(登録商標)など様々なインタフェースが存在する。画像端子109を用いることにより、外部モニタなどにリアルタイムな画像を表示することが可能となる。
また、画像処理装置100は、画像だけでなくコントロール信号も伝送可能な、ネットワーク端子108も備えている。ネットワーク端子108は、画像信号や音声信号の入出力を行うためのインタフェースである。ネットワーク端子108は、インターネットなどを介して外部機器と通信し、ファイルやコマンドなどの各種データの送受信を行うこともできる。
画像処理装置100は、画像を外部に出力するだけでなく、内部に記録する機能も備えている。記録媒体112は、画像データや種々の設定データを記録することが可能で、大容量記憶素子が使用される。例えば、記録媒体112としては、HDD(Hard Disc Drive)やSSD(Solid State Drive)などが利用される。記録媒体112は、記録媒体I/F110に装着される。
物体検出部115は、例えば、ニューラルネットワークを用いたディープラーニングに代表される人工知能を用いて物体を検出するためのブロックである。ディープラーニングによる物体検出を例とした場合、CPU102は、ROM103に格納された処理のためのプログラム、並びに、SSD(Single Shot Multibox Detector)やYOLO(You Only Look Once)などのネットワーク構造や重みパラメータなどを物体検出部115に送信する。物体検出部115は、CPU102から得られる各種パラメータに基づいて、画像信号から物体を検出するための処理を行い、処理結果をRAM104に展開する。
最後に、これらのシステムを駆動させるために、画像処理装置100には、電源部116や発振部117なども備えられている。電源部116は、上述してきた各ブロックに電源を供給する部分で、外部から供給される商用電源やバッテリなどの電源を任意の電圧に変換し、分配する機能を持つ。発振部117は、クリスタルと呼ばれる発振素子である。CPU102などは、この発振素子から入力される周期的な信号を基準として所望のタイミング信号を生成し、プログラムシーケンスを進めていく。
以上が、画像処理装置100の全体システムの一例である。
図2は、画像センサとしての撮像部107の受光面の一部を示している。撮像部107は、撮像面位相差オートフォーカスを可能にするために、1つのマイクロレンズに対して、光電変換部(受光部であるフォトダイオード)を2つ保持している画素部を、アレイ状に並べている。これにより、各画素部で、レンズユニット106の射出瞳を分割した光束を受光することが可能になっている。
図2(A)は、赤(R)、青(B)、緑(Gb、Gr)のベイヤー配列例の画像センサ表面の一部の模式図である。図2(B)は、図2(A)のカラーフィルタの配列に対応させて、1つのマイクロレンズに対して光電変換部としてのフォトダイオードを2つ保持している画素部例である。
図2(B)の構成を有する画像センサは、各画素部から位相差検出用の2つの信号(以下、A像信号及びB像信号ともいう。)を出力できるようになっている。また、図2(B)の構成を有する画像センサは、2つのフォトダイオードの信号を加算した撮像用の信号(A像信号+B像信号)も出力できるようになっている。この加算した信号は、図2(A)で概略説明したベイヤー配列例の画像センサの出力と同等の信号である。
撮像部107は、画素部毎に位相差検出用信号を出力することも可能であるが、近接する複数画素部の位相差検出用信号を加算平均した値を出力することも可能である。加算平均した値を出力することで、撮像部107から信号を読み出す時間の短縮や、内部バス101の帯域削減ができる。
このような画像センサとしての撮像部107からの出力信号を使って、CPU102が2つの像信号の相関演算を行い、デフォーカス量や視差情報、各種信頼性などの情報を算出する。像面でのデフォーカス量は、A像信号とB像信号との間のズレに基づき算出される。デフォーカス量は正負の値を持っており、デフォーカス量が正の値であるか負の値であるかによって、前ピンか後ピンかがわかる。また、デフォーカス量の絶対値によって、合焦までの度合いが分かり、デフォーカス量が0であれば合焦である。即ち、CPU102は、デフォーカス量の正負を元に前ピンか後ピンかの情報を算出する。また、CPU102は、デフォーカス量の絶対値に基づいて、合焦の度合い(ピントのズレの度合い)である合焦度合い情報を算出する。CPU102は、前ピンか後ピンかの情報は、デフォーカス量が所定値を超える場合に出力し、デフォーカス量の絶対値が所定値以内である場合には、合焦であるという情報を出力する。CPU102は、デフォーカス量に応じてレンズユニット106を制御してフォーカス調整を行う。
また、CPU102は、視差情報とレンズユニット106のレンズ情報とに基づき、三角測量の原理を用いて被写体までの距離を算出する。更に、CPU102は、被写体までの距離とレンズユニット106のレンズ情報及び画像処理装置100の設定状況を加味してTrimapを生成する。Trimapの生成方法の詳細については後述する。
なお、ここでは、1画素毎に撮像用の(A像信号+B像信号)と位相差検出用のA像信号の2つの信号を撮像部107から出力している。この場合、出力後に(A像信号+B像信号)からA像信号を減算することで、位相差検出用のB像信号を算出することができる。このような方法に限定されず、A像信号とB像信号の状態で撮像部107から出力を行ってもよく、この場合、撮像用の(A像信号+B像信号)は、A像信号とB像信号を加算して算出することができる。
また、図2では、1つのマイクロレンズに対して光電変換部としてのフォトダイオードを2つ保持している画素部をアレイ状に並べている例を示した。この点、1つのマイクロレンズに対して光電変換部としてのフォトダイオードを3つ以上保持している画素部をアレイ状に並べているようにしてもよい。また、マイクロレンズに対して受光部の開口位置が異なる画素部を複数有するようにしてもよい。つまり、結果としてA像信号とB像信号といった位相差検出可能な位相差検出用の2つの信号が得られるようになっていれば足りる。
画像処理装置100は上記の構成を備えるので、結像光学系の異なる瞳部分領域を通過する光束をそれぞれ受光する複数の光電変換部が配列された撮像素子を用いる撮影により生成される撮像画像及び複数の視差画像を取得することができる。
以下の各実施形態では、特に断らない限り、上で説明した画像処理装置100が使用される。また、以下の各実施形態の構成は、適宜組み合わせ可能である。
<第10の実施形態>
第10の実施形態では、Trimap(背景分離用画像)の生成処理の例について説明する。
図3は、第10の実施形態におけるTrimap生成処理のフローチャートである。このフローチャートにおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。
ユーザが操作部113を操作して電源部116に電源が投入されると、S1001において、CPU102は撮影待機処理を行う。撮影待機処理では、CPU102は、図4に示すような撮像部107で撮像し画像処理部105で処理を施した画像や、画像処理装置100の設定をするためのメニューを、表示部114に表示する。
S1002では、ユーザが表示部114を見ながら、操作部113を操作する。CPU102は、上記操作に応じた設定や処理を画像処理装置100の各処理部に対して行う。
図5は、Trimapを生成する際に用いる前景閾値の基準値の設定メニューの表示例を示す図である。前景閾値の基準値の具体的な例については後述する。まず、ユーザが操作部113を操作することで、CPU102は、前景閾値設定メニュー画面1200を表示部114に表示し、前景閾値の基準値の設定を受け付けるようになる。ユーザは、操作部113を操作することで前景閾値設定メニュー画面1200に表示されたカーソル1201を動かし、前景閾値の基準値の設定を行う。
図6は、Trimapを生成する際に用いる背景閾値の基準値の設定メニューの表示例を示す図である。背景閾値の基準値の具体的な例については後述する。ユーザが操作部113を操作することで、CPU102は、背景閾値設定メニュー画面1300を表示部114に表示し、背景閾値の基準値の設定を受け付けるようになる。ユーザは、操作部113を操作することで背景閾値設定メニュー画面1300に表示されたカーソル1301を動かし、背景閾値の基準値の設定を行う。
ここで、CPU102は、前景閾値の基準値として設定された値より小さな値をユーザが設定できないように、背景閾値設定メニュー画面1300の表示を行う。例えば、前景閾値の基準値として2が設定されている場合、CPU102は、図6のグレー表示1302のような表示を行い、背景閾値として1が設定できないように制御する。
また、CPU102は、S1002で設定された前景閾値の基準値及び背景閾値の基準値に応じて、前景閾値及び背景閾値をそれぞれ決定する。
S1003では、CPU102は、視差情報とレンズユニット106のレンズ情報とに基づき、被写体までの距離情報を画素毎に算出する(即ち、距離分布情報が得られる)。
図7は、図4に示した画像を撮像部107が撮像している際にCPU102が算出した距離情報を図示した例を示す図である。図7において、デフォーカス量が0である位置の画素を白色で示し、デフォーカス量が0より大きく、又は小さくなるほど濃い黒色となるように示している。
S1004では、CPU102は、被写体までの距離情報が、S1002で決定された前景閾値の範囲内かどうかを画素毎に判断する。前景閾値の範囲内であれば処理ステップはS1006に進み、前景閾値の範囲外の場合は処理ステップはS1005に進む。
S1005では、CPU102は、被写体までの距離情報が、S1002で決定された背景閾値の範囲外かどうかを画素毎に判断する。背景閾値の範囲外であれば処理ステップはS1007に進み、背景閾値の範囲内である場合は処理ステップはS1008に進む。
S1006では、CPU102が、S1004で距離情報が前景閾値の範囲内であると判断した画素の領域を前景領域に分類し、その領域の画素値を白色データに置き換える処理を行う。
S1007では、CPU102が、S1005で距離情報が背景閾値の範囲外であると判断した画素の領域を背景領域に分類し、その領域の画素値を黒色データに置き換える処理を行う。
S1008では、CPU102が、S1005で距離情報が背景閾値の範囲内と判断した画素の領域を未知領域に分類し、その領域の画素値を灰色データに置き換える処理を行う。
具体的には例えば、CPU102がS1003で算出した距離情報が-128から+127の範囲の値をとり、デフォーカス量が0である位置の距離情報の値が0となるものであるとする。そして、S1002でユーザが設定した閾値の基準値と、その基準値に応じた値の範囲とが、図8に示す関係になっているものとする。そして、S1002で設定された前景閾値の基準値が2で、背景閾値の基準値が4の場合、CPU102は、距離情報が-50~+50の領域を前景領域、-128~-101と+101~+127の領域を背景領域、-100~-51と+51~+100の領域を未知領域に分類する。そして、CPU102は、前景領域の画素値を白色データ、背景領域の画素値を黒色データ、未知領域の画素値を灰色データに置き換える処理を行う。
以上の処理により、CPU102は、前景領域、背景領域、及び未知領域の3つの領域に分けられたTrimapを生成する。図9は、図7の距離情報に基づいて生成したTrimapの例を示す図である。
S1009では、CPU102がTrimapを表示部114、画像端子109、又はネットワーク端子108に出力する処理を行う。
以上説明したように、本実施形態では、像面位相差センサのデータから算出される距離情報を用いてTrimapを生成することで、キャリブレーションを行わずに容易にTrimapを生成することができる。
なお、本実施形態では、Trimapを表示又は出力する構成としたが、記録媒体I/F110を介して記録媒体112に記録する構成としてもよい。また、Trimapを1枚の静止画として表示、出力、又は記録してもよいし、複数枚の連続するTrimapを動画として表示、出力、又は記録する構成としてもよい。
また、本実施形態では、撮像部107から画素部ごとに位相差検出用信号を出力する構成としたが、撮像部107の近接する複数画素部の位相差検出用信号を加算平均した値を出力し、その値を用いることで縮小されたTrimapを生成する構成としてもよい。その縮小されたTrimapをそのままの画像サイズで表示、出力、又は記録する構成としてもよいし、画像処理部105でリサイズ処理を行い、異なる画像サイズのTrimapを表示、出力、又は記録する構成としてもよい。
また、本実施形態では、前景領域を白色データ、背景領域を黒色データ、未知領域を灰色データのTrimapを表示する構成としたが、各領域の色データを上述の例とは異なる色データに置き換えて表示する構成としてもよい。
<第20の実施形態>
第10の実施形態では、ユーザが撮影画像とTrimapの各領域の境界との位置関係を把握するのが難しい。そこで第20の実施形態では、Trimapの各領域の境界線を撮像画像に重畳して表示する処理の例について説明する。
図10は、第20の実施形態においてTrimapの各領域の境界線を撮像画像に重畳して表示する処理のフローチャートである。このフローチャートにおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。なお、本実施形態において、第10の実施形態と同一又は同様の構成及びステップについては同一の符号を付し、重複した説明は省略する。
図10のS2001では、ユーザが表示部114を見ながら、操作部113を操作する。CPU102は、上記操作に応じた設定や処理を画像処理装置100の各処理部に対して行う。
図11は、Trimapの前景領域と未知領域との境界線及び未知領域と背景領域との境界線を撮像画像に重畳して表示する際のそれぞれの境界線の設定に関する設定メニューの表示例を示す図である。ユーザが操作部113を操作することで、CPU102は、境界線設定メニュー画面2100を表示部114に表示し、前景領域と未知領域との境界線及び未知領域と背景領域との境界線に関する各種の設定を受け付けるようになる。そして、ユーザは操作部113を操作することで境界線設定メニュー画面2100に表示されたカーソル2101を動かし、各設定項目を選択することで、前景領域と未知領域との境界線及び未知領域と背景領域との境界線に関する各種の設定を行う。各設定項目の説明は後述する。
なお、S2001では、S1002と同様に、ユーザが前景閾値の基準値及び背景閾値の基準値の設定も行う。
S2002では、CPU102は、第10の実施形態で説明したS1003からS1008の処理と同様の処理を行うことにより、Trimapを生成する。
S2003では、CPU102は、Trimapの各領域の境界を抽出する。具体的には例えば、前景領域、背景領域、未知領域がそれぞれ白色データ、黒色データ、灰色データからなるTrimapの輝度値に対して、所定のカットオフ周波数のハイパスフィルタをかけて高周波成分を抽出することで、各領域の境界を抽出することができる。カットオフ周波数は、S2001でユーザが操作部113を介して設定した周波数の値に応じてCPU102が決定する。
更に、CPU102は、上記ハイパスフィルタで抽出される値の正負及び大きさに基づいて、白色データと灰色データとの境界か、灰色データと黒色データとの境界か、白色データと黒色データとの境界かの判別を行うこともできる。例えば、白色データと灰色データとの輝度の差は、白色データと黒色データとの輝度の差より小さいため、ハイパスフィルタで抽出した値の大きさで、白色データの領域の画素が、灰色データと黒色データのどちらとの境界にあるかを判別できる。また、灰色データを基準とすると、灰色データと白色データとの輝度の差と、灰色データと黒色データとの輝度の差は正負が逆であるため、ハイパスフィルタで抽出した値の正負で、灰色データの領域の画素が、白色データと黒色データのどちらとの境界にあるかを判別できる。
以上のようにして、白色データと灰色データとの境界か、灰色データと黒色データとの境界か、白色データと黒色データとの境界かの判別、即ち、前景領域と未知領域との境界か、未知領域と背景領域との境界か、前景領域と背景領域との境界かの判別を行うことができる。
S2004では、CPU102は、S2003で抽出した境界が、前景領域と未知領域との境界かどうかを画素毎に判断する。前景領域と未知領域との境界であれば処理ステップはS2005に進み、そうでない場合、即ち、未知領域と背景領域との境界もしくは前景領域と背景領域との境界である場合は処理ステップはS2006に進む。
S2005では、CPU102は、S2004で前景領域と未知領域との境界であると判断した画素と同じ位置の、画像処理部105の出力画像信号に対して、S2001で設定した前景領域と未知領域との境界線の設定に応じた色データを重畳する。具体的には、境界線設定メニュー画面2100で設定されたゲインの値が大きいほど、カラーとして設定された色が濃く見えるようなデータが、画像処理部105の出力画像信号に対して重畳される。
S2006では、CPU102は、S2004で前景領域と未知領域との境界でない境界、即ち、未知領域と背景領域との境界もしくは前景領域と背景領域との境界であると判断した画素の位置の、画像処理部105の出力画像信号に対して、S2001で設定した未知領域と背景領域との境界線の設定に応じた色データを重畳する。具体的には、境界線設定メニュー画面2100で設定されたゲインの値が大きいほど、カラーとして設定された色が濃く見えるようなデータが、画像処理部105の出力画像信号に対して重畳される。
S2007では、CPU102は、S2005又はS2006で境界線が重畳された画像信号を、表示部114、画像端子109、又はネットワーク端子108に出力する処理を行う。図12は、図4に示した画像に前景領域と未知領域との境界線2201、及び未知領域と背景領域との境界線2202を重畳して表示した画面の例を示す図である。図12に示すように、撮像画像が、前景領域、背景領域、及び未知領域を識別可能な態様で表示される。
以上説明したように、本実施形態では、Trimapの領域間の境界線を撮像画像に重畳して表示することで、ユーザが撮影画像とTrimapの領域間の境界との関係を把握するのが容易になる。
また、前景領域と背景領域との境界線の設定を、未知領域と背景領域との境界線の設定と同じにすることで、未知領域内に被写体が入っていることをユーザが認識しやすくすることができる。
<第30の実施形態>
画像とTrimapを個別に表示する場合、画像の被写体に対してTrimapの前景領域と未知領域が被写体をカバーしているかを確認することが困難という課題がある。本実施形態では、その課題を解決する構成について説明する。
本実施形態では、図1に示す画像処理部105が、画像にTrimapの前景領域、未知領域、及び背景領域それぞれに透過度αを設定し、透過度を設定したTrimapを画像に重畳する処理を施す。そして、CPU102は、Trimapを重畳した画像を表示部114に表示する。ここで、透過度αは、その値が0のときは不透明な状態を表し、1のときは透明な状態を表し、0から1の間のときには半透明な状態を表す。そして、Trimapの前景領域、未知領域、及び背景領域の全てについてα=1に設定することで、画像のみが表示されるようにしてもよいし、全てについてα=0に設定することで、Trimapのみが表示されるようにしてもよい。
図13を参照して、ユーザがTrimapの透過度設定をプリセットから選択する例について説明する。まず、S3001で、CPU102は、画像処理部105が処理を施した画像を取得する。S3002で、CPU102は、第10の実施形態で説明したS1003からS1008の処理と同様の処理を施すことにより、Trimapを生成する。
S3003で、ユーザが操作部113を操作することで、CPU102は、図14に示すTrimap透過度設定メニュー画面3100を表示部114に表示する。ここで、図14は、S3003において、Trimap透過度設定メニュー画面3100とカーソル3101が表示部114に表示された例である。
S3004で、ユーザが操作部113を操作することでTrimap透過度設定メニュー画面3100に表示されたカーソル3101を動かし、Trimapの透過度設定として、プリセット設定を選択する。ユーザの操作に応じて、CPU102は、Trimap透過度設定メニュー画面3100にプリセットの一覧を表示する。この場合、処理ステップはS3004からS3005へ進む。ここで、プリセットの一覧は、S3003でTrimap透過度設定メニュー画面3100を表示するときに表示してもよい。なお、ユーザ設定が選択された場合(処理ステップがS3004からS3007に進む場合)については、第31の実施形態において説明する。
S3005で、ユーザが操作部113を操作することでTrimap透過度設定メニュー画面3100に表示されたカーソル3201を動かし、Trimapの透過度設定の任意のプリセットを選択する。ここで、図15は、S3005において、Trimap透過度設定メニュー画面3100とカーソル3201が表示部114に表示された例である。また、Trimapの透過度設定のプリセットとは、Trimapの前景領域、未知領域、及び背景領域それぞれの透過度の組み合わせを定義しているものを表す。例えば、ROM103が、(a)画像(前景領域:α=0、未知領域:α=0、背景領域:α=0)、(b)Trimap(前景領域:α=1、未知領域:α=1、背景領域:α=1)、(c)画像+Trimap(前景領域:α=0.3、未知領域:α=0.5、背景領域:α=0.7)、(d)簡単切り出し(前景領域:α=0、未知領域:α=0、背景領域:α=1)のような、Trimapの透過度設定をプリセットとして保持する。S3006で、CPU102は、S3005で選択されたプリセットの透過度をROM103から読み出す。
S3008で、CPU102は、S3006で読み出した透過度を基にTrimapに対して透過処理を施す。ここで、透過処理は、Trimapの領域情報を基に、Trimap全てに対して1度の処理で領域毎に異なる透過度の透過処理を施すことで実現してもよい。或いは、透過処理は、Trimapの領域毎に順番で透過処理を施し、中間データはフレームメモリ111に一時的に記録し、次の領域の透過処理を施すときに読み出すことで実現してもよい。
S3009で、CPU102は、S3001で取得した画像に対して、S3008で透過処理が施されたTrimapを重畳する。S3010で、CPU102は、Trimap重畳画像をフレームメモリ111に展開し、表示部114に表示する。また、Trimap重畳画像は、ピクチャインピクチャ形式で表示してもよいし、画像端子109から画像出力してもよいし、記録媒体112で記録してもよい。また、CPU102は、Trimap重畳画像とTrimapの領域情報を記録し、再生時に透過度を変更してもよいし、記録したTrimap重畳画像をRECレビュー時のみ表示部114に表示してもよい。ここで、図16、図17、図18、及び図19は、S3010において、Trimap重畳画像が表示部114に表示された例である。また、S3005の透過度設定の例における「(a)画像」が図16、「(b)Trimap」が図17、「(c)画像+Trimap」が図18、「(d)簡単切り出し」が図19に対応する。なお、本実施形態では、前景領域を白色データ、未知領域を灰色データ、背景領域を黒色データとするTrimapを重畳する構成としたが、各領域をそれぞれ横線、縦線、斜め線で表した画像を重畳して表示する構成としてもよい。このような表示の例を図20に示す。
以上のように、第30の実施形態によれば、画像とTrimapの確認を容易に同時に行うことが可能となる。
<第31の実施形態>
第30の実施形態では、ユーザがTrimapの透過度設定をプリセットから選択する例を説明したが、別の実施形態として、ユーザがTrimapの透過度設定を手動で設定する例も考えられる。
第31の実施形態では、図13のフローチャートを用いて、ユーザがTrimapの透過度設定を手動で設定する例について説明する。以下では、第30の実施形態と異なる点を中心に説明し、第30の実施形態と同様の構成や処理についての説明は省略する。
まず、S3001からS3003は第30の実施形態と同様のため省略する。次に、S3004で、第30の実施形態と同様にユーザがメニューを操作し、Trimapの透過度設定としてユーザ設定を選択する。ユーザの操作に従って、CPU102は、Trimap透過度設定画面3800を表示部114に表示する。この場合、処理ステップはS3004からS3007に進む。ここで、図21は、S3004において、Trimap透過度設定画面3800、スクロールバー3801、スクロールバー3802、及びスクロールバー3803が表示部114に表示された例である。
S3007で、ユーザが操作部113を操作することでTrimap透過度設定画面3700に表示されたスクロールバー3801、スクロールバー3802、及びスクロールバー3803を動かす。ユーザの操作に従って、CPU102は、Trimapの前景領域、未知領域、及び背景領域それぞれの透過度αを設定する。ここで、Trimapの透過度設定は、スクロールバーのようなGUI(Graphical User Interface)を用いる操作に限らず、設定値を任意に変更できるボリュームつまみのような物理インタフェースを用いる操作により実現してもよい。次に、S3008からS3010は第30の実施形態と同様のため省略する。
以上のように、第31の実施形態によれば、画像とTrimapの確認を容易に同時に行うことが可能となる。
<第32の実施形態>
第30の実施形態及び第31の実施形態において、画像やTrimapの領域に影響がある状態が発生した場合や、画像やTrimapの領域に影響がある操作が行われた場合に、画像又はTrimapの確認が難しいという課題がある。本実施形態では、その課題を解決する構成について説明する。
第32の実施形態では、図22のフローチャートを用いて、Trimapの透過度を自動で設定する例について説明する。以下では、第30の実施形態及び第31の実施形態と異なる点を中心に説明し、第30の実施形態及び第31の実施形態と同様の構成や処理についての説明は省略する。
まず、S3901及びS3902は、図13におけるS3001及びS3002と同様のため説明は省略する。S3903では、図13におけるS3003からS3007と同様の処理が行われる。
次に、S3904で、CPU102は、ROM103で保持されているTrimapの透過度変更条件が満たされているか否かの判定を行う。ここで、透過度変更条件とは、例えば、画角外から被写体が入ってきて前景領域が追加で検出されたときや、レンズ操作検出時など、画像やTrimapの領域に影響がある状態や操作の検出の有無のことである。透過度変更条件が満たされている場合、処理ステップはS3905に進み、透過度変更条件が満たされていない場合、処理ステップはS3906に進む。
なお、透過度の連続的な変更を防いで視認性を向上させるために、透過度変更条件が満たされてから所定のフレーム数以内であれば、透過度変更条件が満たされていない場合でも処理ステップをS3905に進め、透過度変更を行う構成を採用してもよい。また、透過度変更条件としては、検出の有無だけでなく、それ以外の条件を使用してもよい。
S3905で、CPU102は、S3903で設定された透過度と透過度変更条件とに応じた透過度をROM103から読み出し、透過度の変更を行う。例えば、レンズ操作時にはユーザは画像の確認を優先して行いたいので、CPU102は、レンズ操作検出時のTrimapの透過度として、前景領域、未知領域、及び背景領域の全てについてα=1の設定値を読み出し、透過度の変更を行う。この場合、レンズ操作時は、画像のみが表示部114に表示され、レンズ操作終了後はS3903で設定された透過度が反映された透過処理が施されて表示部114に表示される。ここで、透過度変更条件に応じた透過度はユーザが任意に設定できるようにしてもよい。また、画像やTrimapの領域に影響がある状態や操作の検出の有無以外の透過度変更条件を使用する場合、条件毎に対応した透過度をROM103に保持しておき、条件に応じた透過度の設定値を読み出し、透過度の変更を行う構成を採用してもよい。
次に、S3904で透過度変更条件が満たされず、処理ステップがS3906に進む場合について説明する。S3906では、CPU102は、S3903で設定された透過度を変更せずにそのまま維持する。
S3905又はS3906の処理に続くS3907、S3908、及びS3909は、図13におけるS3008、S3009、及びS3010と同様のため説明は省略する。
以上のように、第32の実施形態によれば、画像とTrimapの確認を容易に同時に行うことと、画像やTrimapの領域に影響がある状態や操作が発生した場合の画像又はTrimapの確認を容易に行うことが可能となる。
<第40の実施形態>
画像処理装置100が出力するTrimapについて、Trimapを生成する際に使用する閾値と、撮影している被写体の距離情報との関係を、ユーザが認識することを容易にする構成について説明する。本実施形態では、距離情報の分布から距離分布表示ヒストグラムを生成して出力する例を述べる。
図23は、距離情報の分布から距離分布表示ヒストグラムを生成し、表示部114に表示する処理のフローチャートである。このフローチャートの処理は、ユーザが操作部113を操作して、ヒストグラム生成のモードを選択すると実行される。このフローチャートにおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。
S4001では、CPU102は、第10の実施形態のS1002で設定された前景閾値と背景閾値を取得し、RAM104に保存する。S4004は、図3のS1003と同様のため説明を省略する。
S4005では、CPU102は、距離分布表示ヒストグラムの表示設定がONかOFFかを判定する。距離分布表示ヒストグラムの表示設定は、ユーザが操作部113を用いてメニューを操作することで設定される。表示設定がONの場合、処理ステップはS4006へ進み、表示設定がOFFの場合、処理ステップはS4014へ進む。
S4006では、CPU102は、S4004で得られる距離情報に基づいて、距離分布表示ヒストグラムを生成する。本実施形態では、CPU102は、フレームメモリ111から得られる画像において、対応する画素の距離情報をS4004において取得し、距離情報の分布を表現した距離分布表示ヒストグラムを生成する。
距離分布表示ヒストグラムは、横軸を距離として、距離情報が0であるところを中心値とする。距離は±方向のレンジを持ち、画像処理装置から離れる方向を正の方向とする。例えば、実際の距離(メートル)を-128~127の実数値に正規化して、合焦位置を0として表現する。更に、各距離値を持つ画像内の画素数を度数として縦軸に表現する。
図24は、撮影した全体風景と距離分布表示ヒストグラムの関係を示した例である。図24(a)では、画像処理装置100の前方に、切り抜き対象の被写体4102と、切り抜き対象ではない物体4103と、背景4104とが配置された場面が示されている。本場面において、画像処理装置100が被写体4102に焦点を合わせて撮影し、被写体4102のみを切り出そうとしている場合を考える。画像処理装置100が本場面を撮影すると、CPU102は、被写体4102と、物体4103と、背景4104とが配置されている距離に対応した分布から、図24(b)のような距離分布表示ヒストグラム4109を生成する。
S4007では、CPU102は、RAM104に保存されている前景閾値と背景閾値を読み出す。前景閾値は、負の値を持つ第1の前景閾値と、正の値を持つ第2の前景閾値から構成される。また、背景閾値は、負の値を持つ第1の背景閾値と、正の値を持つ第2の背景閾値から構成される。
S4008では、CPU102は、S4006で生成された距離分布表示ヒストグラムに、S4007で読み出した前景閾値と背景閾値を重畳する。具体的には、CPU102は、図24(b)に示すように、距離分布表示ヒストグラム4109の横軸に対して、第1の前景閾値に一致する位置に縦点線4106を、第2の前景閾値に一致する位置に縦点線4107を重畳する。次に、CPU102は、第1の背景閾値に一致する位置に縦点線4105を、第2の背景閾値に一致する位置に縦点線4108を重畳する。これにより、切り出す被写体と閾値との位置関係を示すことができる。なお、距離分布表示ヒストグラムに前景閾値及び背景閾値を重畳させる方法はこれに限らず、前景閾値と背景閾値の位置が認識でき、前景領域と、背景領域と、未知領域との区別がつくような手法ならば、他の重畳方法を用いてもよい。例えば、距離分布表示ヒストグラムの背景を、前景領域、背景領域、未知領域で色分けするなどが挙げられる。
また、図24(b)に示すように、CPU102は、距離分布表示ヒストグラムの横軸において、前景領域4112は白色に、背景領域4110及び背景領域4114は黒色に、未知領域4111及び未知領域4113は灰色に着色してもよい。これにより、距離分布表示ヒストグラムの各分布が前景領域、背景領域、未知領域のいずれに属するのかを認識しやすいように表示できる。なお、距離分布表示ヒストグラムにおいて前景領域、背景領域、及び未知領域を示す方法はこれに限らず、前景領域、背景領域、及び未知領域を容易に認識可能な表示を実現する方法であれば、他の方法を用いてもよい。
S4009では、CPU102は、フレームメモリ111から画像を取得する。S4010では、CPU102は、S4008で生成された距離分布表示ヒストグラムを、S4009で取得した画像に重畳する。
図25は、S4009で取得した画像4206の下部に距離分布表示ヒストグラム4205を重畳した例を示す図である。これにより、ユーザは、画像と距離分布表示ヒストグラムを同時に確認することができる。なお、画像と距離分布表示ヒストグラムを重畳させる際は、上下に配置するに限らず、画像と距離分布表示ヒストグラムを同時に確認することができる手法ならば他の重畳方法を用いてもよい。例えば、画像と距離分布表示ヒストグラムを左右に並べて表示したり、距離分布表示ヒストグラムに透過度を持たせて、画像の一部に重畳したりしてもよい。
S4011では、CPU102は、S4010で合成された図25に示すような画像を表示部114に出力し、表示部114にて表示させる。S4012では、CPU102は、第10の実施形態の図5及び図6で示したように操作部113を用いてメニューを操作することで設定される前景閾値及び背景閾値の少なくとも一方が変更されているかを判定する。CPU102は、RAM104に保存されている前景閾値及び背景閾値と、操作部113を用いてメニューを操作することで設定される前景閾値及び背景閾値とを比較することにより、変更の有無を判定する。閾値が更新されている場合(前景閾値及び背景閾値の少なくとも一方が変更されている場合)、処理ステップはS4013へ進み、閾値が更新されていない場合、処理ステップはS4004へ戻る。S4013の処理は、S4001と同様のため説明を省略する。これにより、ユーザは距離分布表示ヒストグラム及び画像を確認しながら、各閾値を調整することが可能となる。
次に、S4005からS4014へ処理ステップが進んだ場合について説明する。S4014の処理は、S4009と同様のため説明を省略する。S4015では、CPU102は、S4014で取得した画像を表示部114に出力し、表示部114にて表示させる。これにより、距離分布表示ヒストグラムを非表示に設定した場合には、撮影された画像のみを表示部114に表示させることができる。
以上のように、本実施形態によれば、画像の距離情報の分布が距離分布表示ヒストグラムによって表され、Trimapを生成する際に使用する閾値と、撮影している被写体の距離情報との関係を、ユーザが容易に認識することが可能になる。また、ユーザが、閾値の範囲を目視で確認しながら調整することが可能となる。
<第41の実施形態>
第40の実施形態では、距離情報の分布から距離分布表示ヒストグラムを生成して、被写体と前景閾値及び背景閾値との位置関係を容易に認識できるように表示する例について述べた。また、前景閾値と背景閾値の表示を行うことにより、ユーザが閾値の範囲を目視で確認しながら調整することが可能となる例について述べた。しかし、上記実施形態では、被写体が移動したり、動作をしたりする場合、被写体が背景閾値の範囲外となったことにユーザが気づかず、ユーザが意図するTrimapを生成できず、意図した形で被写体を切り出せない可能性がある。
これに対して、第41の実施形態では、撮影する被写体が背景閾値の範囲外に飛び出てしまい切り出しに失敗する可能性を低減するために、距離分布表示ヒストグラムと画像に強調表現を行う構成について述べる。
図26(a)は、第40の実施形態の図24(a)と同様の場面において、被写体4102の一部(部分4301)が縦点線4105(第1の背景閾値)を飛び出してしまっている状態を示している。この状態で撮影を行ってしまうと、画像処理装置100から、部分4301が背景領域となったTrimapが出力されてしまい、再撮影が必要となる。例えば、部分4301が背景領域となったTrimapを用いて、外部のPCが切り出し処理を行うと、被写体4102の部分4301が失われた画像となる(即ち、切り出しに失敗する)。本実施形態では、部分4301のように背景閾値の範囲外に飛び出した部分について、撮影前及び撮影時にユーザに強調して示すことで、ユーザに被写体の位置や背景閾値の調整を促し、Trimapの生成失敗による再撮影を未然に防ぐことができる。
図26(b)は、距離分布表示ヒストグラム4302に対して、前景閾値と、背景閾値と、表示閾値を重畳させたものである。表示閾値は、距離分布表示ヒストグラムのうち、表示部114で表示する範囲を規定するものである。第40の実施形態の図24(b)のように、撮影している風景すべてについて距離分布表示ヒストグラムを表示した場合、背景4104のヒストグラムも同時に表示される。しかし背景4104のヒストグラムは前景閾値や背景閾値の調整を行うためには不要であり、非表示とする方が被写体と閾値の関係が認識しやすくなる。そこで本実施形態では、不要なヒストグラムを非表示にできるように表示閾値を設定する。表示閾値は、背景閾値と表示範囲オフセット値から算出され、負の値を持つ第1の表示閾値と、正の値を持つ第2の表示閾値から構成される。画像処理装置100は、第1の表示閾値から第2の表示閾値までの範囲に属する距離分布表示ヒストグラムのみを表示し、範囲外のヒストグラムは非表示にする。
図27、図28A、図28B、図29A、及び図29Bは、距離情報の分布から距離分布表示ヒストグラムを生成し、被写体が背景領域に飛び出てしまったことを強調した画像を表示部114に出力するフローチャートである。これらのフローチャートは、ユーザが操作部113を操作して、ヒストグラム生成及び画像強調表現を行うモードを選択すると実行される。これらのフローチャートにおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。
図27において、S4401及びS4404の処理は、第40の実施形態のS4001及びS4004と同様のため説明を省略する。S4405では、CPU102は、S4404で得られる距離情報に基づいて、距離分布表示ヒストグラムを生成する。
図28A及び図28Bは、S4405の処理の詳細を示すフローチャートである。S4501では、CPU102は、距離分布表示ヒストグラムの表示設定がONかOFFかを判定する。距離分布表示ヒストグラムの表示設定は、ユーザが操作部113を用いてメニューを操作することで設定される。ONの場合、処理ステップはS4502へ進み、OFFの場合、処理ステップはS4520へ進む。
S4502及びS4503の処理は、第40の実施形態のS4006及びS4007と同様のため説明を省略する。S4504では、CPU102は、ROM103にあらかじめ保存されている表示範囲オフセット値を取得する。なお、表示範囲オフセット値の保存場所はROM103に限らず、記録媒体112などを用いてもよい。また、ユーザが表示範囲オフセット値を任意に変更できるようにしてもよい。例えばユーザが操作部113を用いてメニューを操作して表示範囲オフセット値を選択し、CPU102が操作部113から表示範囲オフセット値を取得する。
S4505では、CPU102は、S4503で読み出した背景閾値とS4504で取得した表示範囲オフセット値とに基づいて表示閾値を算出する。図26(b)を参照して、表示閾値の具体的な算出方法を説明する。最初に、CPU102は、縦点線4105(第1の背景閾値)から表示範囲オフセット値4308を減じたものを第1の表示閾値(縦点線4303)とする。次に、CPU102は、縦点線4108(第2の背景閾値)に表示範囲オフセット値4309を加えたものを第2の表示閾値(縦点線4304)とする。これにより、2つの表示閾値が決定される。なお、表示閾値の算出は表示範囲オフセット値の加減算に限らず、距離情報の範囲内において、第1の表示閾値より第2の表示閾値の方が大きい関係が保たれているのであれば他の計算手法でもよい。また、表示範囲オフセット値について、第1の表示閾値の算出に使用するオフセット値と、第2の表示閾値の算出に使用するオフセット値は、同一の値としてもよいし、異なる値としてもよい。
S4506では、CPU102は、S4502で生成された距離分布表示ヒストグラムに、S4503で読み出した前景閾値及び背景閾値、並びにS4505で算出した表示閾値を重畳する。距離分布表示ヒストグラムに前景閾値及び背景閾値を重畳する手法は、第40の実施形態のS4008と同様のため説明を省略する。図26(b)を参照して、距離分布表示ヒストグラムに表示閾値を重畳する手法を説明する。CPU102は、距離分布表示ヒストグラム4302の横軸において、第1の表示閾値に一致する位置に縦点線4303を、第2の表示閾値に一致する位置に縦点線4304を重畳する。なお、距離分布表示ヒストグラムに表示閾値を重畳させる方法はこれに限らず、表示閾値の位置が認識できる手法ならば他の重畳方法でもよい。例えば、表示閾値の範囲内に属する距離分布表示ヒストグラムの背景を着色したり、しま模様や格子模様のような単一パターンを重畳したりしてもよい。
S4507では、CPU102は、ROM103にあらかじめ保存されている着色設定情報を取得する。着色設定情報は、距離分布表示ヒストグラム及び画像について、属している領域を区別できるように着色するために、各領域に指定する色の情報である。本実施形態では、前景領域と未知領域に属する場合は第1の色で着色する。背景領域については、距離情報が負の場合は第2の色、距離情報が正の場合は第3の色で着色する。なお、着色設定情報の保存場所はROM103に限らず、記録媒体112などを用いてもよい。また、ユーザが着色設定情報を任意に変更できるようにしてもよい。例えば、ユーザが操作部113を用いてメニューを操作して、第1の色、第2の色、及び第3の色を指定し、CPU102が操作部113から着色設定情報を取得する。
S4508では、CPU102は、距離分布表示ヒストグラムの階級数を取得する。取得した階級数は変数NmaxとしてRAM104に保存される。例えば、距離分布表示ヒストグラムの階級数が256ならば、変数Nmaxは256である。
S4509では、CPU102は、距離分布表示ヒストグラムの階級について、距離情報が最短の階級に注目する。具体的には、注目する距離分布表示ヒストグラムの階級を変数nとおいて、nに1を設定し、RAM104に保存する。変数nが大きいほど、画像処理装置から遠い距離の階級のヒストグラムに対応する。
S4510では、CPU102は、変数nが第1の表示閾値から第2の表示閾値の範囲内にあるか否かを判定する。表示閾値の範囲内にある場合、処理ステップはS4511へ進み、範囲内にない場合、処理ステップはS4516へ進む。
S4511では、CPU102は、変数nが第1の背景閾値から第2の背景閾値の範囲内にあるか否かを判定する。第1の背景閾値から第2の背景閾値の範囲内にある場合、処理ステップはS4512へ進み、第1の背景閾値から第2の背景閾値の範囲内にない場合、処理ステップはS4513へ進む。
S4512では、CPU102は、変数nの階級のヒストグラムに対して、第1の色で着色するように設定する。
S4513では、CPU102は、変数nが第1の表示閾値から第1の背景閾値の範囲内にあるか否かを判定する。第1の表示閾値から第1の背景閾値の範囲内にある場合、処理ステップはS4514へ進み、第1の表示閾値から第1の背景閾値の範囲内にない場合、処理ステップはS4515へ進む。
S4514では、CPU102は、変数nの階級のヒストグラムに対して、第2の色で着色するように設定する。
S4515では、CPU102は、変数nの階級のヒストグラムに対して、第3の色で着色するように設定する。
S4516では、CPU102は、変数nの階級のヒストグラムに対して、非表示にするように設定する。
S4517では、CPU102は、変数nがヒストグラムの階級数Nmaxと等しくなったか判定する。等しい場合、処理ステップはS4517へ進み、等しくない場合、処理ステップはS4518へ進む。
S4518では、CPU102は、変数nに対してn+1を代入し、結果をRAM104に保存する。これにより、CPU102が注目するヒストグラムを1階級上にする。
S4519では、CPU102は、着色設定を施した距離分布表示ヒストグラムをRAM104に保存する。
S4520及びS4521の処理は、第40の実施形態のS4012及びS4013と同様のため説明を省略する。S4520において「NO」と判定された場合、処理ステップは図27のS4406へ進む。
以上のように、図28A及び図28Bのフローチャートの処理をCPU102が実行することで、背景閾値の範囲外に存在する分布を強調させた距離分布表示ヒストグラムを生成できる。
再び図27を参照する。S4406では、CPU102は、S4404で得られる距離情報に基づいて、画像処理部105で得られる画像に強調表現を施した画像を生成する。
図29A及び図29Bは、S4406の処理の詳細を示すフローチャートである。S4601では、CPU102は、画像処理部105から画像及び画像サイズの情報を取得する。CPU102は、画像サイズのうち、横のサイズをXmax、縦のサイズをYmaxとして、RAM104に保存する。
S4602では、CPU102は、S4404で算出された距離情報のうち、画素(x,y)に対応する距離情報に注目する。なお、変数xは画像の横軸の座標を、変数yは画像の縦軸の座標を表している。
S4603では、CPU102は、S4602で注目している画素(x,y)の距離情報について、第1の表示閾値から第2の表示閾値の範囲内にあるか否かを判定する。表示閾値の範囲内にある場合、処理ステップはS4604へ進み、範囲内にない場合、処理ステップはS4608へ進む。
S4604では、CPU102は、S4602で注目している画素(x,y)の距離情報について、第1の背景閾値から第2の背景閾値の範囲内にあるか否かを判定する。背景閾値の範囲内にある場合、処理ステップはS4608へ進み、範囲内にない場合、処理ステップはS4605へ進む。
S4605では、CPU102は、S4602で注目している画素(x,y)の距離情報について、第1の表示閾値から第1の背景閾値の範囲内にあるか否かを判定する。第1の表示閾値から第1の背景閾値の範囲内にある場合、処理ステップはS4606へ進み、範囲内にない場合、処理ステップはS4607へ進む。
S4606では、CPU102は、S4601で取得した画像の画素(x,y)について、S4507で取得した第2の色を重畳するように設定する。
S4607では、CPU102は、S4601で取得した画像の画素(x,y)について、S4507で取得した第3の色を重畳するように設定する。
S4608では、CPU102は、変数xについて、画像の横サイズXmaxと等しいか判定する。等しい場合、処理ステップはS4610へ進み、等しくない場合、処理ステップはS4609へ進む。
S4609では、CPU102は、変数xに対してx+1を代入し、結果をRAM104に保存する。これにより、CPU102は同じラインの1つ右隣の画素に注目する。
S4610では、CPU102は、変数yについて、画像の縦サイズYmaxと等しいか判定する。等しい場合、処理ステップはS4612へ進み、等しくない場合、処理ステップはS4611へ進む。
S4611では、変数xに対して0を、変数yに対してy+1を、それぞれ代入し、結果をRAM104に保存する。これにより、CPU102は、1ライン下の先頭の画素に注目する。
S4612では、CPU102は、S4603からS4611で示した処理を行った画像をRAM104に保存する。
以上のように、図29A及び図29Bのフローチャートの処理をCPU102が実行することで、背景閾値の範囲外に存在する被写体を強調させた画像を生成できる。
再び図27を参照する。S4407では、CPU102は、S4406で生成された強調画像に、S4405で生成された距離分布表示ヒストグラムを重畳する。
図30は、画像処理部105で処理した画像4703の下部に距離分布表示ヒストグラム4302を重畳した例である。第1の背景閾値から第2の背景閾値の範囲内にある距離分布表示ヒストグラムの分布4305は、第1の色で着色される。第1の表示閾値から第1の背景閾値の範囲内にある画像の領域4701及び距離分布表示ヒストグラムの分布4306は、第2の色で着色し強調される。第2の背景閾値から第2の表示閾値の範囲内にある画像の領域4702及び距離分布表示ヒストグラムの分布4307は、第3の色で着色し強調される。これにより、ユーザは、撮影している被写体のうち、背景閾値の範囲外にある画像と距離分布表示ヒストグラムを同時に確認することができる。
更に、撮影時に被写体が動いて背景閾値に一部が飛び出てしまった場合には、CPU102は、画像の領域4701及び領域4702と同様の強調と、距離分布表示ヒストグラムの分布4306及び4307と同様の強調を行う。これにより、ユーザに被写体の一部が飛び出たことをリアルタイムに通知することができ、再撮影の必要性が生じることを未然に防ぐことができる。
なお、画像と距離分布表示ヒストグラムを重畳させる際は上下に配置するに限らず、画像と距離分布表示ヒストグラムを同時に確認することができる手法ならば他の重畳方法でもよい。例えば、画像と距離分布表示ヒストグラムを左右に並べて表示したり、距離分布表示ヒストグラムに透過度を持たせて、画像の一部に重畳したりしてもよい。
S4408では、CPU102は、S4407で生成された画像を表示部114に出力し、表示させる。
以上のように、本実施形態によれば、撮影する被写体が背景閾値の範囲外に飛び出した場合に、距離分布表示ヒストグラムと画像に着色してユーザに通知し、切り出し失敗による再撮影を未然に防ぐことが可能となる。
<第42の実施形態>
第40の実施形態では、距離情報の分布から距離分布表示ヒストグラムを生成して、被写体と前景閾値及び背景閾値の位置関係を容易に認識できるように表示する例について述べた。また、前景閾値と背景閾値の表示を行うことにより、ユーザが閾値の範囲を目視で確認しながら調整することが可能となる例について述べた。また、第41の実施形態では、撮影する被写体が背景閾値の範囲外に飛び出てしまい切り出し失敗による再撮影を防ぐために、距離分布表示ヒストグラムと画像に強調表現を行いユーザに提示する例について述べた。
ところで、画像において、距離情報が0である部分はどこなのかがユーザにとって不明であり、ユーザにとって画像の被写体と距離分布表示ヒストグラムの分布の関係を十分に把握できない。
そこで、第42の実施形態では、画像において、距離情報が0である画素に着色して、距離分布表示ヒストグラムと共にユーザに提示する例について述べる。
本実施形態によれば、距離情報が0である画素を明示することができ、距離分布表示ヒストグラムが、撮影されている被写体のどの部分に対応しているかをユーザが識別しやすくなる。
図31A及び図31Bは、距離情報の分布から距離分布表示ヒストグラムを生成し、表示部114に表示するフローチャートである。このフローチャートは、ユーザが操作部113を操作して、ヒストグラム生成を行うモードを選択すると実行される。このフローチャートにおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。
S4801及びS4804の処理は、第40の実施形態のS4001及びS4004と同様のため説明を省略する。
S4805では、CPU102は、ROM103にあらかじめ保存されている着色設定情報を取得する。着色設定情報は、距離情報が0である画素に着色する第4の色の情報を持つ。なお、着色設定情報の保存場所はROM103に限らず、記録媒体112などを用いてもよい。また、ユーザが着色設定情報を任意に変更できるようにしてもよい。例えばユーザが操作部113を用いてメニューを操作して第4の色を指定し、CPU102が操作部113から着色設定情報を取得する。
S4806からS4809の処理は、第40の実施形態のS4005からS4008と同様のため説明を省略する。
S4810では、CPU102は、フレームメモリ111から画像を取得する。S4811では、CPU102は、S4804で取得した距離情報について、距離情報が0である画素にはフラグを1に、そうでない画素にはフラグ0を設定し、設定されたフラグをフレームメモリ111に保存する。
S4812では、CPU102は、S4811にてフレームメモリ111に保存したフラグを参照する。CPU102は、フラグが1の画素については、S4810で取得した画像の対応する画素を、S4805で取得した第4の色で着色する。CPU102は、フラグが0の画素については、S4810で取得した画像の画素をそのまま使用する。これにより、第4の色が部分的に重畳された画像が生成される。
S4813では、CPU102は、S4812で生成した画像に、S4809で生成された距離分布表示ヒストグラムを重畳する。
図32は、S4812で処理した画像4902の下部に距離分布表示ヒストグラム4205を重畳した例を示す図である。画像4902のうち、被写体の部分4901に対応する画素について、その画素に対応する距離情報が0であるため、S4812の処理により第4の色で着色されている。これにより、ユーザは、撮影している被写体のうち、部分4901の距離情報が0であることを確認できる。
なお、画像と距離分布表示ヒストグラムを重畳させる際は上下に配置するに限らず、画像と距離分布表示ヒストグラムを同時に確認することができる手法ならば他の重畳方法でもよい。例えば、画像と距離分布表示ヒストグラムを左右に並べて表示したり、距離分布表示ヒストグラムに透過度を持たせて、画像の一部に重畳してもよい。
S4814では、CPU102は、S4813で生成された画像を表示部114に出力し、表示させる。
S4815及びS4816の処理は、第40の実施形態のS4012及びS4013と同様のため説明を省略する。
S4817及びS4818の処理は、第40の実施形態のS4014及びS4015と同様のため説明を省略する。これにより、距離分布表示ヒストグラムを非表示に設定した場合には、撮影された画像のみを表示部114に表示させることができる。
以上のように、本実施形態によれば、被写体の画像において、距離情報が0である被写体の領域を明示することができ、距離分布表示ヒストグラムが、撮影されている被写体のどの部分に対応しているかを識別しやすくすることが可能になる。
<第50の実施形態>
実施形態の1つとして、像面位相差センサから得られる情報を基にCPU102により算出できる視差情報やデフォーカス量を利用した、Trimapの生成も可能である。実際の撮影においては、撮像画像とTrimapにおける前景領域が一致しているかどうか、リアルタイムに確認できないという課題がある。本実施形態では、距離情報から俯瞰図画像を生成して出力することで、前景領域となる画像をリアルタイムに明示することにより、課題を解決する構成について説明する。
図34及び図35を参照して、俯瞰図画像について説明する。図35(a)は、画像処理装置100が取得した画像である。図35(a)において、画像処理装置100は、被写体5201に焦点を合わせているものとする。画像処理装置100は、前述した方法により距離情報を算出する。
図35(b)は、図35(a)において画像処理装置100が焦点を合わせている被写体5201の距離情報を0として、背景5202を含む画像内の画素ごとの距離情報の分布を俯瞰する図である。図35(b)は、縦軸を画像処理装置100が取得した距離情報、横軸を画像の水平方向の座標(水平座標)としたグラフとし、画像内の距離情報をドット又は領域により分布させることで描画した図である。図35(b)は、表示部114に表示させるものである。
図34は、図35(a)の画像に対して、上方向からの俯瞰図を想定して、画像内の被写体と背景の想定距離の関係性を示した図である。領域5101は、画像処理装置100が前景領域として認識する範囲であり、被写体を含む距離情報の上限と下限(前景閾値の範囲)により決定される。領域5101は、表示部114に表示されるものであり、距離情報の上限と下限を表す横軸方向の直線5102で描画される。また、この領域は、直線5102による描画でなく、例えば領域5101の範囲内にある距離情報の分布となるドット又は領域の色を背景と異なるように表示させるなど、領域5101内であることを明示的に示す描画方法をとってもよい。また、図示は省略するが、図34には、背景閾値の範囲も表示される。
図33は、距離情報の分布から俯瞰図画像を生成して、表示部114に表示する処理のフローチャートである。このフローチャートにおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。
S5001及びS5004の処理は、第40の実施形態のS4001及びS4004と同様のため説明を省略する。
S5005では、CPU102は、俯瞰図画像の表示設定がONかOFFかを判定する。俯瞰図画像の表示設定は、ユーザが操作部113を用いてメニューを操作することで設定される。ONの場合、処理ステップはS5006へ進み、OFFの場合、処理ステップはS5014へ進む。
S5006では、CPU102は、S5004で得られる距離情報に基づいて、図35(b)に示すような俯瞰図画像を生成する。
S5007の処理は、第40の実施形態のS4007と同様のため説明を省略する。
S5008では、CPU102は、俯瞰図画像に前景閾値及び背景閾値を重畳する。
S5009の処理は、第40の実施形態のS4009と同様のため説明を省略する。
S5010では、CPU102は、S5008で生成した俯瞰図画像と、S5009で取得した画像の2つを、並列あるいは重ね合わせの画像にまとめる。S5011では、CPU102は、S5010で生成した画像を表示部114に出力する。
S5012及びS5013の処理は、第40の実施形態のS4012及びS4013と同様のため説明を省略する。
S5014及びS5015の処理は、第40の実施形態のS4014及びS4015と同様のため説明を省略する。
以上のように、本実施形態によれば、距離情報から俯瞰図画像を生成して出力することで、前景領域となる画像をリアルタイムに明示することが可能となる。
<第51の実施形態>
第50の実施形態で説明した通り、距離情報から俯瞰図画像を生成して出力することで、前景領域となる画像をリアルタイムに明示することが可能である。
一方で、第50の実施形態で説明した手法では、被写体自体が深い被写界深度を必要とする場合に、画像分離の領域外に出ているかどうか、リアルタイムに確認しづらいという課題がある。本実施形態は、上記画像分離の領域外に出ている箇所を、わかりやすくする効果を見込む手法について説明する。
本実施形態は、第50の実施形態で説明した、撮像画像及び俯瞰図画像に対して上記わかりやすくする効果を見込む処理を行う構成である。
図36(a)は、画像処理装置100が取得した画像であり、図36(b)は、第50の実施形態で説明した図33の処理で生成した俯瞰図画像である。図36(a)の被写体5301は、背景5302と同じ画像に収まっている。背景5302は、相対距離がゼロとなる被写体5301とは相対距離が異なっていて、Trimap生成時には、背景領域として認識させたい距離にあるものとする。
図36(b)の領域5306は、Trimap生成時に、前景領域として認識させる距離情報の閾値間の範囲であり、前景閾値に基づいて決定される。図36(b)の領域5308は、Trimap生成時に、背景領域として認識させる距離情報の閾値間の範囲であり、背景閾値に基づいて決定される。図36(b)の領域5307は、Trimap生成時に、未知領域として認識させる距離情報の閾値間の範囲であり、前景閾値及び背景閾値に基づいて決定される。
図36(a)における被写体5301は棒状の道具5303を持っている。この状態で、画像処理装置100が画像を取得したものとする。また、道具5303の先端部分の領域5304は、焦点があっている被写体5301とは相対距離が離れているものとし、領域5304の距離情報は、図36(b)において背景領域として認識される範囲にあるものとする。
本実施形態では、CPU102は、撮像画像及び俯瞰図画像のそれぞれに対して、道具5303が領域5308と重なる部分(領域5304)を所定の色で着色する処理を行う。また、本実施形態では、CPU102は、領域5308と背景5302とが重なる部分(領域5305)についても、撮像画像及び俯瞰図画像のそれぞれに対して、所定の色で着色する処理を行う。
以上のように、本実施形態によれば、上記画像分離の領域外に出ている箇所を、わかりやすくする効果を見込むことが可能となる。
<第52の実施形態>
第50の実施形態及び第51の実施形態で説明した通り、距離情報から俯瞰図画像を生成して出力することで、前景領域となる画像をリアルタイムに明示することが可能である。一方で、第50の実施形態及び第51の実施形態で説明した手法では、被写体自体に、焦点があっているかどうかリアルタイムに確認しづらいという課題がある。本実施形態は、上記焦点があっている領域が被写体自体に等しいかどうか、わかりやすく確認するための手法について説明する。
本実施形態は、撮像画像及び俯瞰図画像に対して、焦点が合っている箇所をわかりやすくする効果を見込む処理を行う構成である。
本実施形態では、CPU102は、図37(b)に示すように相対距離が0として認識される領域5402に対応する画素について、図37(a)で示す画像の対応する画素を所定の色で着色する処理を施す。
ユーザは、図37(a)上で領域5401と画像内の被写体の両方を視認することで、画像処理装置100が取得した画像において、被写体自身に焦点があっているかどうかについて確認することができる。
以上のように、本実施形態によれば、上記焦点があっている領域が被写体自体に等しいかどうか、わかりやすく確認することが可能となる。
<第60の実施形態>
画像処理装置100の撮像部107は、内部バス101などの帯域を削減するために、図38に示すように画像信号の複数画素範囲の視差情報をまとめて伝送することができる。図38は、撮像部107の出力の一部と、撮像部107から出力される視差情報とによって生成されるTrimapの一部を記載した図である。本実施形態では、撮像部107は画像信号の12画素分の範囲の視差情報をまとめて伝送するものとして説明する。
図38に記載されている視差情報範囲Aは、範囲内の12画素全てが背景を撮像しているので、12画素全てが背景領域である。視差情報範囲Cは、範囲内の12画素全てが被写体を撮像しているので、12画素全てが前景領域としてTrimapが生成される。視差情報範囲Bは、範囲内の12画素中に背景、被写体、及び、背景と被写体との境界をそれぞれ撮像しているが、視差情報がまとめられているため、12画素全てが未知領域としてTrimapが生成される。そのため、生成されるTrimapの中で未知領域が占める面積が大きくなってしまう。
第60の実施形態では、画像信号のエッジ検出結果を用いて、視差情報範囲よりも詳細な単位で未知領域の画素を前景領域、背景領域、及び未知領域に再分類し、未知領域の面積を小さくした第2のTrimapを生成する例を述べる。
図39A及び図39Bは、第60の実施形態における第2のTrimap生成処理のフローチャートである。このフローチャートにおける各処理は、CPU102がROM103に記録されたプログラムをRAM104に展開して実行することにより実現される。
S6001において、CPU102は、第10の実施形態で説明したS1003からS1008の処理と同様の処理を行うことにより、第1のTrimapを生成する。CPU102は、第1のTrimapをフレームメモリ111へ記録する。
S6002において、CPU102は、画像処理部105にフレームメモリ111から読み出した画像信号を処理させることで、エッジ検出を実施する。画像処理部105が実施するエッジ検出は、例えば画像信号の輝度変化や色変化が不連続な位置を検出する、具体的には、エッジ検出は、勾配法やラプラシアン法によって実現される。CPU102は、画像処理部105が処理したエッジ検出結果をフレームメモリ111に記録する。画像処理部105は、エッジ検出結果を画像信号の画素毎に、エッジに該当するか否かのフラグとして出力する。
S6003において、CPU102は、第1のTrimapのうちの処理対象の視差情報範囲に対応する領域をフレームメモリ111から読み出し、その範囲が未知領域に分類されているか判断する。処理対象の視差情報範囲が未知領域に分類されている場合、処理ステップはS6004へ進む。処理対象の視差情報範囲が未知領域に分類されていない場合、処理ステップはS6016へ進む。
S6004において、CPU102は、エッジ検出結果のうちの処理対象の視差情報範囲に対応する領域をフレームメモリ111から読み出し、その範囲内にエッジに該当する画素があるかを判断する。処理対象の視差情報範囲にエッジに該当する画素が含まれる場合、処理ステップはS6005に進む。処理対象の視差情報範囲にエッジに該当する画素が含まれていない場合、処理ステップはS6016に進む。
S6005において、CPU102は、処理対象の視差情報範囲に対応する第1のTrimapの領域において、エッジに該当する画素を未知領域のままに維持する。
S6006において、CPU102は、第1のTrimapのうちの、処理対象の視差情報範囲の左側に隣接する視差情報範囲に対応する領域をフレームメモリ111から読み出し、その範囲が前景領域に分類されているか判断する。左隣の視差情報範囲が前景領域に分類されている場合、処理ステップはS6007に進む。左隣の視差情報範囲が前景領域に分類されていない場合、処理ステップはS6008に進む。
S6007において、CPU102は、処理対象の視差情報範囲に対応する第1のTrimapの領域において、エッジに該当する画素より左に配置されている画素を前景領域に変更する。CPU102は、変更を加えたTrimapをフレームメモリ111に記録する。
S6008において、CPU102は、第1のTrimapのうちの、処理対象の視差情報範囲の左側に隣接する視差情報範囲に対応する領域をフレームメモリ111から読み出し、その範囲が背景領域に分類されているか判断する。左隣の視差情報範囲が背景領域に分類されている場合、処理ステップはS6009に進む。左隣の視差情報範囲が背景領域に分類されていない場合、処理ステップはS6010に進む。
S6009において、CPU102は、処理対象の視差情報範囲に対応する第1のTrimapの領域において、エッジに該当する画素より左に配置されている画素を背景領域に変更する。CPU102は、変更を加えたTrimapをフレームメモリ111に記録する。
S6010において、CPU102は、処理対象の視差情報範囲に対応する第1のTrimapの領域において、エッジに該当する画素より左に配置されている画素を未知領域のままに維持する。
S6011において、CPU102は、第1のTrimapのうちの、処理対象の視差情報範囲の右側に隣接する視差情報範囲に対応する領域をフレームメモリ111から読み出し、その範囲が前景領域に分類されているか判断する。右隣の視差情報範囲が前景領域に分類されている場合、処理ステップはS6012に進む。右隣の視差情報範囲が前景領域に分類されていない場合、処理ステップはS6013に進む。
S6012において、CPU102は、処理対象の視差情報範囲に対応する第1のTrimapの領域において、エッジに該当する画素より右に配置されている画素を前景領域に変更する。CPU102は、変更を加えたTrimapをフレームメモリ111に記録する。
S6013において、CPU102は、第1のTrimapのうちの、処理対象の視差情報範囲の右側に隣接する視差情報範囲に対応する領域をフレームメモリ111から読み出し、その範囲が背景領域に分類されているか判断する。右隣の視差情報範囲が背景領域に分類されている場合、処理ステップはS6014に進む。右隣の視差情報範囲が背景領域に分類されていない場合、処理ステップはS6015に進む。
S6014において、CPU102は、処理対象の視差情報範囲に対応する第1のTrimapの領域において、エッジに該当する画素より右に配置されている画素を背景領域に変更する。CPU102は、変更を加えたTrimapをフレームメモリ111に記録する。
S6015において、CPU102は、処理対象の視差情報範囲に対応する第1のTrimapの領域において、エッジに該当する画素より右に配置されている画素を未知領域のままに維持する。
S6016において、CPU102は、フレームメモリ111に記録されている画像信号の全ての視差情報範囲を処理したかを判断する。全ての視差情報範囲を処理した場合、処理ステップはS6018へ進む。全ての視差情報範囲を処理していない場合、処理ステップはS6017へ進む。
S6017において、CPU102は、未処理の視差情報範囲を次の処理対象として選択する。例えば、処理対象の視差情報範囲は、左上からラスター方向に順に選択される。その後、処理ステップはS6003へ戻る。
S6018において、CPU102は、フレームメモリ111に記録されているTrimapを第2のTrimapとして、画像端子109又はネットワーク端子108から外部へ出力する。なお、CPU102は、第2のTrimapを記録媒体112へ記録してもよい。
図40は、撮像部107出力の一部と、第1のTrimapの一部と、S6002で説明したエッジ検出結果の一部と、S6003からS6015の処理によって得られる第2のTrimapの一部とを記載した図である。図40において、撮像部107の出力、及び第1のTrimapは、図38の撮像部107の出力、及びTrimapと同様なので、説明を省略する。背景と被写体の境界に当たる画素は、S6002のエッジ検出によって、図40のエッジ検出結果において斜線で示すようにエッジに該当すると判断される。S6003からS6015の処理により、第2のTrimapが生成される。図40においては、視差情報範囲Bのエッジに該当する画素は未知領域として、視差情報範囲Bのエッジに該当する画素と視差情報範囲Aとの間に挟まれた画素は背景領域として、視差情報範囲Bのエッジに該当する画素と視差情報範囲Cとの間に挟まれた画素は前景領域として、それぞれ分類されている。
以上のように、第60の実施形態によれば、画像信号のエッジ検出結果を用いることによって、視差情報範囲よりも詳細な単位で未知領域の画素を前景領域、背景領域、未知領域に再分類し、未知領域の面積を小さくした第2のTrimapを生成ことができる。Trimapの未知領域の面積が小さくなることで、Trimapを利用して前景と背景の切り出しを行うニューラルネットワークの検出精度を高めることができる。
<第70の実施形態>
人体などの被写体を足元まで撮影すると、足と接地している付近の床面は被写体の足とほぼ同じ距離になるので、距離情報からTrimapを生成すると、床面が前景領域だと誤判定されてしまう。
第70の実施形態では、被写体の足を部位検出することによって、被写体の足部分と相対距離が同距離な前景領域として誤判定された床面を未知領域又は背景領域に再分類した第2のTrimapを生成する例を述べる。
図41は、第70の実施形態における第2のTrimap生成処理のフローチャートである。このフローチャートおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。
S7001において、CPU102は、第10の実施形態で説明したS1003からS1008の処理と同様の処理を行うことにより、第1のTrimapを生成する。CPU102は、第1のTrimapをフレームメモリ111へ記録する。
S7002において、CPU102は、ROM103に記録された人体の足を検出するためのパラメータを物体検出部115に展開し、フレームメモリ111から読み出した画像を物体検出部115に処理させることで、人体の足を検出する。物体検出部115は、画像の水平方向をx軸、垂直方向をy軸とし、画像の左下隅を座標(0,0)とした、画像内で検出した足の領域を内包する長方形の対角の頂点を示す2つの座標を部位検出情報としてRAM104に記録する。
なお、本実施形態では、物体検出部115が、検出した領域の座標を出力するニューラルネットワークである場合を例に説明するが、他の人体の骨格を検出するニューラルネットワークでもよい。
S7003において、CPU102は、RAM104に部位検出情報が記録されているか判断する。RAM104に部位検出情報が記録されている場合、CPU102は、画像内で人体の足が検出されたと判断して、処理ステップをS7004へ進める。RAM104に部位検出情報が記録されていない場合、CPU102は、画像内で人体の足が検出されていないと判断して、本フローチャートの処理を終了する。
S7004において、CPU102は、フレームメモリ111に記録されている第1のTrimapと、RAM104に記録されている部位検出情報とを読み出し、部位検出情報によって示されるTrimap上の長方形の領域内部を未知領域へ変更する。S7004における処理の詳細については、図42を用いて後述する。
S7005において、CPU102は、部位検出情報によって示されるTrimap上の長方形のy座標と同じ範囲内のy座標の領域であって、且つ、長方形のx座標と同じ範囲内のx座標を含まない領域のうちの、Trimapで前景領域又は未知領域と分類された領域を、背景領域へ変更する。CPU102は、S7004及びS7005において変更を加えたTrimapをフレームメモリ111へ記録する。S7005における処理の詳細については、図43を用いて後述する。
S7006において、CPU102は、RAM104に他の部位検出情報が記録されているか判断する。RAM104に他の部位検出情報が記録されている場合、CPU102は、画像内で他の人体の足が検出されたと判断して、再び処理ステップをS7004へ進める。RAM104に部位検出情報が記録されていない場合、CPU102は、画像内で他の人体の足が検出されていないと判断して、処理ステップをS7007へ進める。
S7007において、CPU102は、フレームメモリ111に記録されているTrimapを、第2のTrimapとして画像端子109又はネットワーク端子108から外部へ出力する。終了ステップへ進む。なお、CPU102は、第2のTrimapを記録媒体112へ記録してもよい。
図42を用いて、S7004の処理の詳細について説明する。図42は、フレームメモリ111に記録されている画像上に、物体検出部115が出力する部位検出情報から得られる2つの座標と、部位検出情報が示す検出した足の領域を内包する長方形とを表示した図である。部位検出情報から得られる2つの座標は(X1,Y1)と(X2,Y2)である。この2つの座標を対角の頂点とする(X1,Y1)、(X2,Y1)、(X1,Y2)、(X2,Y2)の4点で示される長方形の領域内が、S7004において未知領域に設定される。
図43を用いて、S7005の処理の詳細について説明する。図43は、フレームメモリ111に記録されている画像上に、S7005において背景領域に設定される長方形領域を表示した図である。足の周辺領域に対応する長方形領域(図42)のy座標と同じ範囲内のY1からY2の領域であって、且つ、足の周辺領域に対応する長方形領域(図42)のx座標と同じ範囲内のX1からX2の領域を含まない2つの長方形領域が、背景領域に設定される。即ち、(X0,Y1)、(X1,Y1)、(X0,Y2)、(X1,Y2)の4点で示される長方形と、(X2,Y1)、(X3,Y1)、(X2,Y2)、(X3,Y2)の4点で示される長方形の2つの領域内が、S7005において背景領域に設定される。なお、x座標X0は画像の最左端でありx座標X3は画像の最右端である。
以上のように、第70の実施形態によれば、被写体の足部分と相対距離が同じで前景領域として誤判定された床面を未知領域又は背景領域に再分類した第2のTrimapを生成することができる。
本実施形態では、人体の足を検出するニューラルネットワークを用いることで、人体の足と接地している床面を未知領域又は背景領域に再分類する例について説明した。例えば、車やバイクを被写体とする場合には、床面と接地するタイヤを検出するニューラルネットワークを用いれば、本実施形態を適応可能である。同様に、他の被写体の床面と接地している部位を検出するニューラルネットワークを用いることで、本実施形態は他の被写体にも適応可能である。
<第71の実施形態>
第70の実施形態では、前景領域として誤判定された床面を未知領域又は背景領域に再分類した第2のTrimapを生成する例について説明した。しかしながら、被写体と同距離で前景領域として誤判定される床面の範囲は、画像処理装置100が前傾していれば広く、後傾していれば狭くなる。
第71の実施形態では、前景領域として誤判定された床面を未知領域又は背景領域に再分類した第2のTrimapを生成する際に、レンズユニット106に内蔵されている手振れ補正用の加速度センサの情報を利用して画像処理装置100の傾きを参照することにより、再分類する範囲を変更する例を述べる。
図44は、第71の実施形態における第2のTrimap生成処理のフローチャートである。このフローチャートおける各処理は、CPU102がROM103に記録されたプログラムをRAM104に展開して実行することにより実現される。
S7101からS7104までの処理は、第70の実施形態で説明したS7001からS7004までと同様の処理なので説明を省略する。
S7105において、CPU102は、レンズユニット106の加速度センサから傾き情報を読み出す。傾き情報は、画像処理装置100が前傾しているか後傾しているかを示す数値である。CPU102は、傾き情報に基づいて背景領域調整値tを決定する。背景領域調整値tは、画像処理装置100が床面と水平であれば0とし、画像処理装置100が前傾していれば増加し、画像処理装置100が後傾していれば減少する。
S7106において、CPU102は、部位検出情報によって示されるTrimap上の長方形の上部と下部からそれぞれy座標方向に背景領域調整値tだけ伸長したy座標と同じ範囲内のy座標の領域であって、且つ、長方形のx座標と同じ範囲内のx座標を含まない領域のうちの、Trimapで前景領域又は未知領域と分類された領域を背景領域へ変更する。CPU102はS7104とS7106において変更を加えられたTrimapをフレームメモリ111へ記録する。S7106の処理の詳細については、図45を用いて後述する。
S7107及びS7108の処理は、第70の実施形態で説明したS7006及びS7007と同様の処理なので説明を省略する。
図45を用いて、S7106の処理の詳細について説明する。図45は、フレームメモリ111に記録されている画像上に、S7106において背景領域に設定される長方形領域を表示した図である。足の周辺領域に対応する長方形領域(図42)の上部と下部からy座標方向に背景領域調整値tだけ伸長したy座標と同じ範囲内の(Y1+t)から(Y2-t)の領域であって、且つ、足の周辺領域に対応する長方形領域(図42)のx座標と同じ範囲内のX1からX2の領域を含まない2つの長方形領域が、背景領域に設定される。即ち、(X0,Y1+t)、(X1,Y1+t)、(X0,Y2-t)、(X1,Y2-t)の4点で示される長方形と、(X2,Y1+t)、(X3,Y1+t)、(X2,Y2-t)、(X3,Y2-t)の4点で示される長方形の2つの領域内が、S7106において背景領域に設定される。なお、x座標X0は画像の最左端であり、x座標X3は画像の最右端である。
以上のように、第71の実施形態によれば、前景領域として誤判定された床面を背景領域に再分類した第2のTrimapを生成する際に、レンズユニット106に内蔵されている手振れ補正用の加速度センサの情報を利用して画像処理装置100の傾きを参照することにより、背景領域に再分類する範囲を変更することができる。
<第80の実施形態>
実施形態の1つとして、像面位相差センサから得られる情報を基にCPU102により算出できる視差情報やデフォーカス量を利用した、Trimapの生成も可能である。撮影中にレンズの絞りが変更となった状況では、前景領域と背景領域の境界でのフレームごとの視差情報も併せて変わってしまうため、未知領域の境界が変わってしまうという課題がある。本実施形態では、その課題を解決する構成について説明する。
図46を参照して、画像処理装置100が視差情報をもとにTrimapを生成する機能について説明する。図46は、画像処理装置100が、フレームごとのTrimapを生成する際に、前景領域と背景領域と未知領域との各境界を分離するためのデフォーカス量についての閾値を決定するための処理である。図46の処理は、画像処理装置100の中で、フレーム単位でTrimap生成が行われるたびに、繰り返し実行される。
S8001及びS8002の処理は、第40の実施形態のS4001及びS4004と同様のため説明を省略する。
S8003では、画像処理装置100(CPU102)は、第10の実施形態で説明したS1003からS1008の処理と同様の処理を行うことにより、Trimapを生成する。
S8004では、画像処理装置100は、被写界深度の変更が行われたかどうかを、F値の変化量に基づいて判断する。なお、S8004の判断で用いるF値については、焦点距離、及びレンズユニット106へ入射する光量を計算できる変数で置き換えてもよい。例えば、画像処理装置100は、光学系の透過率から計算される指標であるT値又はH値による変化量について、フレームごとの比較を行ってもよい。F値の変更があった場合は、処理ステップはS8006に進み、F値の変更がなかった場合は、処理ステップはS8008に進む。
S8006では、画像処理装置100は、F値と閾値との関係を規定するテーブルを参照する。このテーブルは、画像処理装置100内(例えばROM103内)に格納されているものとする。
S8007では、画像処理装置100は、S8006で参照したテーブルと、現在の(変更後の)F値とに基づいて、RAM104に新しい閾値(前景閾値及び背景閾値)を設定する。
S8008では、画像処理装置100は、閾値(前景閾値及び背景閾値)を次のフレームに関連付けて記憶する。
画像処理装置は、S8001からS8008までの処理を、フレームを取得するたびに繰り返すことで、フレームごとに最適な画像の分離を実現する。
なお、動画となる連続するフレーム画像全てでなく、例えば被写界深度の変更がなされた場合のみ、S8008の処理を行う構成を採用してもよい。また、動画となる連続するフレーム画像全てではなく、一定のフレーム数ごとに、S8004~S8008の処理を行う手法をとってもよい。
第80の実施形態では、F値の変更があった場合に、フレームごとに最適な画像の分離を実現する。この例を、図47と図48を用いて説明する。
図47は、本実施形態の構成を用いた上で、被写体811にフォーカスをあてるように取得した、フレーム画像である。図47(a)は、任意の状態で取得したフレーム画像である。
図47(b)は、図47(a)と比較して、被写界深度を浅く、即ちF値を小さくした状態で取得したフレーム画像である。図47(b)のフレーム画像内の被写体811以外の背景812は、デフォーカス量が大きくなることで、見た目上でぼやけた画像となる。図47(b)において、被写体811と背景812の境界部分は、デフォーカス量の差分が大きくなりやすいという理由で、画像の分離をおこなったときに、被写体811を前景領域に、背景812の境界部分を背景領域の部分に区分しやすくなる。
図47(c)は、図47(a)と比較して、被写界深度を深く、即ちF値を大きくした状態で取得したフレーム画像である。図47(c)のフレーム画像内の被写体811以外の背景812は、デフォーカス量が小さくなることで、見た目上でくっきりした画像となる。図47(c)において、被写体811と背景812の境界部分は、デフォーカス量の差分が小さくなりやすいという理由で、画像の分離をおこなったときに、被写体811の外側で、背景812の部分も前景領域として区分してしまうというデメリットが生じる。
図48は、フレーム内の全画素に対して、デフォーカス量に応じて前景領域、背景領域、未知領域の3つに分離する方法を示した図である。図48(a)は、任意の状態で取得した図47(a)のフレーム画像に対応して、画像の分離を実施した際の区分を示す。領域821は、デフォーカス量が小さく、前景領域として区分する範囲である。領域822は、デフォーカス量が大きく、背景領域として区分する範囲である。領域823は、デフォーカス量に応じて、前景領域とも背景領域とも判断できず、未知領域として区分する範囲である。
図48(b)は、図48(a)と比較して、被写界深度を浅く、即ちF値を小さくする操作がなされた場合の、画像分離を行う際の区分の範囲である。被写体811と背景812の境界部分は、図47(b)の状態では、デフォーカス量の差分が大きくなりやすい。このため、図48(b)に示す通り、領域823は、図48(a)と比較して狭めるようなデフォーカス量の範囲になるように、S8006のテーブルは設定されている。
図48(c)は、図48(a)と比較して、被写界深度を深く、即ちF値を大きくする操作がなされた場合の、画像分離を行う際の区分の範囲である。被写体811と背景812の境界部分は、図47(c)の状態では、デフォーカス量の差分が小さくなりやすい。このため、図48(c)に示す通り、領域823は、図48(a)と比較して広げるようなデフォーカス量の範囲になるように、S8006のテーブルは設定されている。
また、本実施形態の構成において、図47の被写体811全体が見た目上ぼやける条件においては、S8006のテーブルは、F値を小さくした場合は、被写体811と背景812の境界部分が広がるように設定されていてもよい。同じく、図47の被写体811全体が見た目上ぼやける条件において、S8006のテーブルは、F値を大きくした場合は、被写体811と背景812の境界部分が狭まるように設定されていてもよい。
以上のように、第80の実施形態によれば、レンズの絞りによりF値が変更となった場合においても、前景領域、背景領域、未知領域の各境界を適切に識別できるという効果を見込む。
<第90の実施形態>
実施形態の1つとして、像面位相差センサから得られる情報を基にCPU102により算出できる視差情報やデフォーカス量を利用した、Trimapの生成も可能である。
まず、図49を参照して、視差情報の取得について説明する。図49は、ある被写体の注目点を撮影したときの被写体から撮像素子までの光路を示したものである。図49(a)は、焦点が合っている状態(被写体が焦点位置にある状態)の図である。画像はフォーカスレンズによって集光され、撮像面で結像する。この時、同一画素内のA像信号とB像信号は同じ情報を出力することとなる。図49(b)は、前フォーカスの状態の図である。画像はフォーカスレンズによって集光されるが、結像が撮像面よりも前にあるため、光路が交差したあと、撮像面に入ることになる。このとき焦点が合っている状態に比べて、A像信号とB像信号の位置関係が図のように離れることになる。この離れ具合を検出することで前フォーカスであることがわかる。図49(c)は、後フォーカスの状態の図である。画像はフォーカスレンズによって集光されるが、結像が撮像面よりも後にあるため、光路が交わることなく撮像面に入ることになる。このとき焦点が合っている状態に比べて、A像信号とB像信号の位置関係が図のように離れており、これは前フォーカス時に比べると、A像信号とB像信号の位置が逆転する関係となる。これらを検出することで後フォーカスであることがわかる。
そして、図50のように、検出した画素の離れ具合がデフォーカス量となり、検出画素の離れ具合が大きくなるほどデフォーカス量が大きくなり、ピンボケ状態が強くなることを意味する。この画素的なずれ具合を小さくするように制御できれば焦点のあった画像を撮影することができる。
本実施形態では、このA像信号とB像信号の検出画素の位置のずれを検出することを利用してTrimapを生成する。図49及び図50の考え方を元に、図51(a)のように、焦点が合っている領域(合焦領域)と前フォーカス領域又は後フォーカス領域の境界(閾値)を設定する。この境界を設けることで、単純には、この合焦領域を前景領域と判定し、前フォーカス領域又は後フォーカス領域を背景領域と判定することで画像を2値化することが可能となる。又は、合焦領域と前フォーカス領域を前景領域と判定させ、後フォーカス領域を背景領域と判定させることも可能である。更には、図51(b)のように、合焦領域と前フォーカス領域又は後フォーカス領域の境界に中間領域を設定することも可能である。この中間領域を未知領域として判定することで、前景領域、背景領域、未知領域の3値とすることが可能となり、Trimap画像を生成することができる。
以上の処理を、図52のフローチャートを参照して説明する。これは主に画像処理装置100のCPU102で実行されるもので、この例では、合焦領域と前フォーカス領域を前景領域として、後フォーカス領域を背景領域、境界部分を未知領域に設定する場合のものである。
まず、S9001において、ユーザは、画像処理装置100を使って、所望の被写体を撮影する。被写体の画像は、撮像部107で受像される。S9002において、CPU102は、撮像部107から像面位相差の情報を取得し、A像信号又はB像信号に入ってくる情報の位置的なずれ具合を検出する。CPU102は、その情報からフォーカス情報を生成する。S9003において、CPU102が、ある注目する画素のA像信号とB像信号の位置的なずれが小さく、合焦領域であると判断すると、処理ステップをS9004に進め、その画素は前景領域として判定する。一方、S9005において、CPU102が、位置的なずれが大きく、前フォーカスの状態と判断した場合は、処理ステップをS9006に進め、その画素を前景領域として判定する。これは、合焦領域よりも前にあるものは、ユーザが所望している被写体であることが多いため、前景領域としておくのである。また、S9007において、CPU102が、ある注目する画素のA像信号とB像信号の位置的なずれが大きく、それが後フォーカスの状態であると判断した場合は、処理ステップをS9008に進め、その画素を背景領域と判定する。更に、合焦領域でもなく、前フォーカス領域でもなく、後フォーカス領域でもない場合は、CPU102は、処理ステップをS9009に進め、その画素を未知領域と判定する。この例では、合焦領域と前フォーカス領域は前景領域としているため、その間には未知領域を作る必要はない。
S9010において、CPU102は、この処理の結果をフレームメモリ111に一時的に保存する。S9011において、CPU102は、撮像部107のすべての画素において処理が完了しているかを判定し、完了していれば、処理ステップをS9012に進め、フレームメモリ111から画像を読み出し、Trimap画像を生成し、表示部114などに出力する。
以上述べたように、フォーカス情報と、A像信号とB像信号のずれ具合から検出できるデフォーカス量を用いて、Trimap画像を生成することができる。
<第91の実施形態>
第90の実施形態では、フォーカス情報であるデフォーカス量を用いてTrimap画像を生成した。第91の実施形態では、更に精度を上げてTrimap画像を生成する方法を説明する。図53は、図51と同じようにフォーカス領域を分離した図である。この時、前フォーカス領域と後フォーカス領域で境界部分を異なるものにしてもよい。例えば、図53(a)の場合、前フォーカス領域においては、合焦領域が広くなるように境界(閾値)を設定している。一方、図53(b)の場合、後フォーカス領域において、合焦領域が狭くなるように境界(閾値)を設定している。このように前フォーカス領域と後フォーカス領域で境界の閾値を個別に設定できれば、被写体の動きに合わせて微調整することが可能となる。例えば、被写体が人間の場合、人間の顔や手の動きは前フォーカス領域に入ることが多いなどという実情に合わせたTrimap画像の生成が可能となる。
更には、調整機能として、境界の閾値設定を自由に変えることも可能で、且つ、前フォーカス領域と後フォーカス領域でそれぞれの異なる調整分解能を持たせることができる。図54にそれを示した。図54(a)は、前フォーカス領域での調整分解能であり、図54(b)は、後フォーカス領域での調整分解能である。ここでは前フォーカス領域の分解能は粗く設定されており、後フォーカス領域の分解能は密に設定されている。図55に、分解能と距離の関係がわかるような図を示した。このように設定しておくことで、被写体の動きに合わせて微調整することが可能となり、撮影の実情に合わせながらも精度を高めたTrimap画像の生成が可能となる。
以上の処理を、図56のフローチャートを参照して説明する。これは主に画像処理装置100のCPU102で処理されるものであり、この例では、調整分解能の設定と、それを使った領域閾値設定に関するところである。まず、S9101において、画像処理装置100は、レンズ情報の取得処理を行う。これはCPU102が、画像処理装置100に装着されているレンズユニット106の情報を取得する作業である。レンズユニット106は、解像感が高いものや低いもの、透過度が高いもの低いもの、絞り羽根の枚数、イメージスタビライザー機能付きなどの点において、機能及び性能が様々である。CPU102は、これらの情報をもとに初期値を設定する作業を行う。
S9102において、CPU102は、合焦領域において中心となるゼロ点を設定する。これは、前フォーカス領域と後フォーカス領域の中間点であり、境界分離はこのゼロ点を起点に処理される。
S9103において、CPU102は、前フォーカス領域の調整分解能の設定を行う。S9104において、CPU102は、後フォーカス領域の調整分解能の設定を行う。これら調整分解能は、先述した装着されているレンズユニット106のレンズ情報に基づいて設定され、領域ごとに独立で設定される。
S9105において、ユーザが、境界閾値を変えたいと考え、操作部113を使って操作を開始すると、CPU102は、表示部114にどの領域を設定するかに関する画面を表示する。
S9106において、ユーザが、前フォーカス領域を選択すると、処理ステップはS9107に進み、ユーザは前フォーカス領域の境界閾値を変えることができる。一方、ユーザが後フォーカス領域を選択すると、処理ステップはS9108に進み、ユーザは後フォーカス領域の境界閾値を変えることができる。
S9109において、CPU102は、設定された境界閾値を反映する。S9110において、CPU102は、設定された境界閾値を表示部114などに表示し、設定が完了したことを報知する。S9111において、ユーザが、設定操作を完了すると、本フローチャートの処理は終了する。
以上説明したように、ユーザが、前フォーカス領域と後フォーカス領域において、任意の境界閾値を設定すること、且つ、その調整分解能を選択的にすることによって、撮影状態に合わせた最適なTrimap画像の生成を行うことが可能となる。
なお、先述した調整分解能は、レンズの品種情報だけではなく、あらかじめテーブルなどでROM103に複数保持して、CPU102がそれをRAM104などに呼び出して使用してもよい。又は、ユーザに任意の調整分解能を設定させてもよい。他にもレンズの状態、例えば絞りの開閉状態やフォーカスレンズの操作スピードなどに応じて調整分解能をフレキシブルに変更させることも可能である。また、上記説明は、前フォーカス領域と後フォーカス領域に特化して説明したが、中間領域(未知領域)を加えても実施可能である。
<第A0の実施形態>
複数の被写体を撮影する場合にその複数の被写体をTrimapの前景領域として認識させたい場合がある。しかしながら、上記実施形態では奥行き方向に被写体同士の距離が離れてしまっている場合に一部の被写体が背景領域と認識されてしまう可能性がある。本実施形態では上記問題に鑑み、複数の被写体がある場合でもすべての被写体を前景領域としてTrimapを生成する処理について説明する。
本実施形態では、図1における画像処理装置100で顔検出を行う。顔検出機能について説明する。CPU102は、顔検出対象の画像データを物体検出部115に送る。CPU102の制御下で物体検出部115は、画像データに水平方向バンドパスフィルタを作用させる。また、CPU102の制御下で物体検出部115は、処理された画像データに垂直方向バンドパスフィルタを作用させる。これら水平方向及び垂直方向のバンドパスフィルタにより、画像データよりエッジ成分が検出される。
その後、CPU102は、検出されたエッジ成分に関してパターンマッチングを行い、目、鼻、口、及び耳の候補群を抽出する。そして、CPU102は、抽出された目の候補群の中から、予め設定された条件(例えば2つの目の距離、傾き等)を満たすものを、目の対と判断し、目の対があるもののみ目の候補群として絞り込む。そして、CPU102は、絞り込まれた目の候補群とそれに対応する顔を形成する他のパーツ(鼻、口、耳)を対応付け、また、予め設定した非顔条件フィルタを通すことで、顔を検出する。CPU102は、顔の検出結果に応じて顔情報を出力し、処理を終了する。このとき、CPU102は、顔の数などの特徴量をRAM104に記憶する。
次に、図57A及び図57Bのフローチャートを用いて、第A0の実施形態におけるTrimap生成処理について説明する。まず、SA001で、CPU102は、画像処理部105により検出された顔領域の数を、画像処理部105より取得する。SA002で、CPU102は、SA001で取得した顔領域の数に基づいて、顔領域があるかどうかを判断する。つまり、顔領域の数が0であれば顔領域はなく、それ以外であれば顔領域があると判断される。顔領域があると判断されれば、処理ステップはSA003に進み、そうでなければ、処理ステップはSA016に進む。
SA003で、CPU102は、内部変数Nを1に設定し、内部変数Mを1に設定する。SA004で、CPU102は、N番目の顔領域の座標を画像処理部105より取得する。SA005で、CPU102は、SA004で取得した座標により特定される顔領域内のデフォーカス量の平均を算出する。SA006で、CPU102はSA005で算出したデフォーカス量の平均が閾値以下かどうかを判断する。つまり、顔領域内のデフォーカス量の平均が閾値以下でボケていない画像であるかどうかを判断する。デフォーカス量の平均が閾値以下と判断した場合、処理ステップはSA007に進み、そうでない場合、処理ステップはSA013に進む。
SA007で、CPU102は、デフォーカス量の平均に応じてTrimapを生成するための閾値のパラメータを設定する。ここでの閾値は、前景領域、背景領域、未知領域を決定するための閾値である。SA008で、CPU102は、SA004で取得した座標により特定される顔領域内の相対距離の平均を算出する。
SA009で、CPU102は、DepthMap(例えば、図3のS1003の処理により取得される距離情報)の各画素の相対距離から、SA008で算出した相対距離の平均を減算することにより、新しいDepthMapを生成する。SA010で、CPU102は、SA009で生成した新しいDepthMapに基づき、M番目のTrimapを生成する。
一方、SA006でデフォーカス量の平均が閾値より大きいと判断された場合、SA013で、CPU102は、内部変数Mの値を1デクリメントする。
SA010又はSA013の処理に続いて、SA011で、CPU102は、未処理の顔領域が存在するかどうかの判断をする。つまり、CPU102は、SA001で取得された顔領域の数が内部変数Nと一致している場合に、未処理の顔領域が存在しないと判断する。未処理の顔領域が存在する場合、処理ステップはSA012に進む。SA012で、CPU102は、内部変数Nの値を1インクリメントし、内部変数Mの値を1インクリメントし、処理ステップをSA004に戻す。
一方、SA011で未処理の顔領域が存在しないと判断された場合、SA014で、CPU102は、内部変数Mが0かどうかを判断する。M=0であるということは、SA006でデフォーカス量の平均が閾値より大きいと判断された顔領域が存在しない場合である。これは、新たなDepthMapを生成する必要がない場合である。SA014で内部変数Mが0でないと判断された場合、処理ステップはSA015に進む。
SA015で、CPU102は、SA010において生成されたM枚のTrimapを合成する。ここでの合成は、前景領域及び未知領域と判断された領域の論理和を取り1枚のTrimapを生成する処理である。
一方、SA014で内部変数Mが0だと判断された場合、又はSA002で顔領域が存在しないと判断された場合、SA016で、CPU102は、DepthMapに基づいてTrimapを生成する。
以上のように、第A0の実施形態によれば、画像内に複数の被写体がある場合に、それぞれの被写体を前景領域としたTrimapを生成することが可能となる。
<第A1の実施形態>
第A0の実施形態では、検出された被写体の数だけTrimapを生成するために処理に時間がかかるという問題がある。本実施形態では、上記問題に鑑み、複数の被写体がある場合でもTrimapを複数作ることなく全ての被写体を前景領域としてTrimapを生成する処理について説明する。
図58A及び図58Bのフローチャートを用いて、第A1の実施形態におけるTrimap生成処理について説明する。図58A及び図58Bのフローチャートにおいて、図57A及び図57Bと同様の処理をするステップは図57A及び図57Bと同じ符号を付加し説明は割愛する。
まず、SA001からSA008の処理は、図58A及び図58Bと同様のためその説明は割愛する。但し、SA007は存在せず、SA006において「YES」と判定された場合、処理ステップはSA008に進む。その後、処理ステップはSA101に進む。
SA101で、CPU102は、SA008において算出された平均を、M番目の相対距離の平均としてRAM104に記憶する。続くSA011からSA014までの処理は図58A及び図58Bと同様のため説明を割愛する。
次に、SA102で、CPU102は、RAM104に記憶したM個の相対距離の平均の平均Dを算出する。SA103で、CPU102は、各画素の相対距離からSA102で算出した平均Dを減算することにより、新しいDepthMapを生成する。SA104で、CPU102は、RAM104に記憶したM個の相対距離の平均、及びSA102で算出した平均Dに応じて、未知領域判定処理の閾値のパラメータを設定する。SA105で、CPU102は、新しいDepthMapに基づいてTrimapを生成する。
以上のように、第A1の実施形態によれば、画像内に複数の被写体がある場合に、それぞれの被写体を前景領域としたTrimapを生成することが可能となる。
<第A2の実施形態>
第A1の実施形態では、被写体の間に何か物体があった場合に本来は背景領域とすべきところが前景領域として認識されてしまうという問題がある。本実施形態では、上記問題に鑑み、複数の被写体がある場合でも被写体間に物体がある場合に背景領域としてよい部分は背景領域となるようにしてTrimapを生成する処理について説明する。
図59A及び図59Bのフローチャートを用いて、第A2の実施形態におけるTrimap生成処理について説明する。図59A及び図59Bのフローチャートにおいて、図57A及び図57Bと同様の処理をするステップは図57A及び図57Bと同じ符号を付加し説明は割愛する。
まず、SA001からSA008のフローの順序は図57と同様のためその説明は割愛する。SA008の処理に続いて、SA201で、CPU102は、SA007で設定した未知領域判定処理の閾値のパラメータと、SA008で算出した相対距離の平均とを、M番目の閾値、及び相対距離の平均としてRAM104に記憶する。続くSA011からSA014までの処理は、図57A及び図57Bと同様のため説明を割愛する。
次に、SA202で、CPU102は、RAM104に記憶したM個の閾値、及び相対距離の平均を、閾値のパラメータとして設定する。SA203で、CPU102はDepthMapとSA202で設定されたパラメータとを用いて、Trimapを生成する。SA203における処理の詳細は、図60を用いて後述する。
次に、図60のフローチャートを用いて、SA203の処理の詳細を説明する。まず、SA301で、CPU102は、どの閾値のパラメータを設定するかを決める内部変数Iの値を1に設定する。SA302で、CPU102は、未使用のパラメータが存在するかどうかを判断する。つまり、CPU102は、内部変数Iの値が内部変数Mを超えているかどうかを判断する。未使用のパラメータが存在すると判断された場合、処理ステップはSA303に進む。
次に、SA303でCPU102は、I番目の閾値のパラメータを設定する。SA304で、CPU102は、生成途中のTrimapのデータが前景領域に分類されたデータとなっているかを判断する。前景領域に分類されていないと判断された場合、処理ステップはSA305に進む。
SA305で、CPU102は、被写体までの距離情報が、SA303で決定された前景閾値の範囲内かどうかを判断する。前景閾値の範囲内であると判断された場合、処理ステップはSA306に進む。SA306で、CPU102は、SA304で距離情報が前景閾値の範囲内であると判断した領域を前景領域に分類し、その領域のTrimapのデータを前景閾値のデータに置き換える処理を行う。
一方、SA305で前景閾値の範囲外であると判断された場合、処理ステップはSA307に進む。SA307で、CPU102は、生成途中のTrimapのデータが未知領域に分類されたデータとなっているかを判断する。未知領域に分類されていないと判断された場合、処理ステップはSA308に進む。
SA308で、CPU102は、被写体までの距離情報が、SA303で決定された背景閾値の範囲外かどうかを判断する。背景閾値の範囲外であると判断された場合、処理ステップはSA309に進む。SA309で、CPU102は、SA308で距離情報が背景閾値の範囲外であると判断した領域を背景領域に分類し、その領域のTrimapのデータを背景閾値のデータに置き換える処理を行う。
一方、SA308で背景閾値の範囲内であると判断された場合、処理ステップはSA310に進む。SA310で、CPU102は、SA308で距離情報が背景閾値の範囲内であると判断された領域を未知領域に分類し、その領域のTrimapのデータを未知領域のデータに置き換える処理を行う。
一方、SA307で未知領域に分類されていると判断された場合、処理ステップはSA311に進む。また、SA304でTrimapのデータが前景領域に分類されていると判断された場合も、処理ステップはSA311に進む。
SA311で、CPU102は、内部変数Iの値を1インクリメントし、処理ステップをSA302に戻す。
一方、SA302で未処理のパラメータが存在しないと判断された場合、本フローチャートの処理は終了する。
以上のように、第A2の実施形態によれば、画像内に複数の被写体がある場合に、それぞれの被写体間に物体がある場合にそれらを背景領域とし、被写体のみを前景領域としたTrimapを生成することが可能となる。
<第B0の実施形態>
本実施形態では、同じ距離に位置する複数の被写体を撮影する場合において、選択された領域外の距離情報を変更することで、所定の被写体のみが表示されたTrimapを生成する例を述べる。所定の被写体は、ユーザがTrimapとして表示したい被写体を表し、これを注目被写体と呼ぶ。
図62は、被写体の検出を行い、注目被写体の領域外の距離情報にオフセット値を加えることで注目被写体のみをTrimapとして表示する処理のフローチャートである。このフローチャートにおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。
SB101では、CPU102は、画像処理部105で処理された画像に対し、物体検出部115を用いて被写体の検出を行うように制御する。本実施形態では、物体検出部115が行う被写体を検出する処理は、処理結果として座標データを出力するものであり、例えば、SSD(Single Shot Multibox Detector)やYOLO(You Only Look Once)と呼ばれるニューラルネットワークを用いたディープラーニングなどである。CPU102は、物体検出部115から得られる座標データに基づいて、検出された被写体の領域を示す検出領域を、画像処理部105で処理された画像に重畳して表示部114に表示する。
図61(a)は、SB101において検出された第1の被写体B001及び第2の被写体B002に対して、第1の検出領域B003及び第2の検出領域B004が表示部114に表示された例を示す図である。
SB102では、ユーザが、検出領域の選択を行う。選択方法は種々の方法を採ることができる。例えば、ユーザは、操作部113の十字キーなどを用いて検出領域を選択してもよい。また、表示部114がタッチパネルであれば、ユーザが、表示された検出領域に直接触れて選択する方法を用いてもよい。なお、選択できる数は1つに限られない。ユーザが選択した結果に基づいて、CPU102は、注目被写体の検出領域を示す選択領域を、SB101で処理された画像に重畳して表示部114に表示する。表示された選択領域は、例えば、検出領域に比べて太枠で表示される。
図61(b)は、SB102において、第1の被写体B001を注目被写体とした場合に対応する選択領域B005が表示部114に表示された例を示す図である。
SB104では、CPU102は、画像の各画素に対し、選択領域か否かを判定する。具体的には、CPU102は、物体検出部115から得られる座標データに基づいて、選択領域の座標位置を判断し、各画素の座標位置が選択領域の座標位置の範囲内であればその画素を選択領域だと判断する。選択領域の場合、処理ステップはSB103へ進み、そうでない場合、処理ステップはSB105へ進む。
SB105では、CPU102は、画像の各画素に対し、背景領域か否かを判断する。前景領域、背景領域、未知領域の分類については、第10の実施形態で説明したものと同様の処理なので説明を省略する。背景領域の場合、処理ステップはSB103へ進み、そうでない場合、処理ステップはSB106へ進む。
SB106では、CPU102は、選択領域外の画素に対応する距離情報(相対距離)に対し、所定のオフセット値を加算する。オフセット値は、加算後にその画素が背景領域と判断される値である。具体的には、例えば、距離情報の範囲が0~255であり、127~255の範囲が背景領域と判断されるとした場合、255をオフセット値として与えれば、選択領域外の画素は全て背景領域として判断されることとなる。なお、距離情報にオフセット値を加算する場合には、オーバーフローを防ぐために255の値でリミットが設けられているものとする。
SB103で、CPU102は、第10の実施形態で説明したS1003からS1008の処理と同様の処理を行うことにより、Trimapを生成する。CPU102は、生成されたTrimapをフレームメモリ111に展開し、表示部114、画像端子109、又はネットワーク端子108に出力する。なお、CPU102は、Trimapを記録媒体112へ記録してもよい。
図61(c)は、本実施形態において最終的に生成されるTrimapの例を示す図である。
以上のように、本実施形態によれば、同じ距離に位置する複数の被写体を撮影する場合に、注目被写体以外は前景領域に含まれず、注目被写体のみを表示したTrimapを生成することが可能となる。
<第B1の実施形態>
図62を用いて、選択された領域外の距離情報を変更することで、注目被写体のみが表示されたTrimapを生成する例を説明したが、別の実施形態として、選択された領域外のTrimapの色データを変更する例も考えられる。
本実施形態では、同じ距離に位置する複数の被写体を撮影する場合において、選択された領域外のTrimapの色データを変更することで、注目被写体のみが表示されたTrimapを生成する例を述べる。
図63は、被写体の検出を行い、注目被写体の領域外のTrimapの色データを背景領域に対応した色で塗りつぶすことで注目被写体のみをTrimapとして表示する処理のフローチャートである。このフローチャートにおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。なお、図63のSB201~SB203の処理は、第B0の実施形態で説明した図62のSB101~SB103と同様なので説明を省略する。
SB204では、CPU102は、Trimapの各画素に対し、選択領域か否かを判定する。判定処理は、第B0の実施形態で説明した図62のSB104と同様の処理なので説明を省略する。選択領域の場合、CPU102は本フローチャートの処理を終了し、そうでない場合、CPU102は処理ステップをSB205へ進める。
SB205では、CPU102は、Trimapの各画素に対し、背景領域か否かを判断する。前景領域、背景領域、未知領域の分類については、第10の実施形態で説明したものと同様の処理なので説明を省略する。背景領域の場合、CPU102は本フローチャートの処理を終了し、そうでない場合、CPU102は処理ステップをSB206へ進める。
SB206では、CPU102は、選択領域外の各画素の色データを背景領域に対応した所定の色に塗りつぶす。具体的には、例えば、背景領域に対応した色が黒色であった場合、CPU102は、選択領域外の画素の色データを黒色で塗りつぶす。
CPU102は、処理されたTrimapをフレームメモリ111に展開し、表示部114、画像端子109、又はネットワーク端子108に出力する。なお、CPU102は、Trimapを記録媒体112へ記録してもよい。図61(c)は、本実施形態において最終的に生成されるTrimapの例である。
以上のように、本実施形態によれば、距離情報を変更することなく、注目被写体のみを表示したTrimapを生成することが可能となる。
<第B2の実施形態>
図63を用いて、選択された領域外のTrimapの色データを変更することで、注目被写体のみが表示されたTrimapを生成する例を説明したが、別の実施の形態として、選択された領域内のTrimapの色データを変更する例も考えられる。
本実施形態では、同じ距離に位置する複数の被写体を撮影する場合において、選択された領域内のTrimapの色データを変更することで、注目被写体のみが表示されたTrimapを生成する例を述べる。
図64は、被写体の検出を行い、注目被写体以外の被写体の領域内のTrimapの色データを背景領域に対応した色で塗りつぶすことで注目被写体のみをTrimapとして表示する処理のフローチャートである。このフローチャートにおける各処理は、CPU102がROM103に格納されたプログラムをRAM104に展開して実行することにより実現される。なお、図64のSB301~SB303の処理は、第B0の実施形態で説明した図62のSB101~SB103と同様なので説明を省略する。但し、本実施形態においては、選択領域は、注目被写体以外の検出領域を表す。従って、SB302では、SB102と異なり、ユーザは注目被写体以外の被写体を選択する。
図61(d)は、SB302において、第1の被写体B001を注目被写体とした場合において選択領域B006が表示部114に表示された例である。
SB304では、CPU102は、Trimapの各画素に対し、選択領域か否かを判定する。判定方法は、第B0の実施形態で説明した図62のSB104と同様の処理なので説明を省略する。選択領域の場合、処理ステップはSB305へ進み、そうでない場合、本フローチャートの処理は終了する。
SB305では、CPU102は、Trimapの各画素に対し、背景領域か否かを判断する。前景領域、背景領域、未知領域の分類については、第10の実施形態で説明したものと同様の処理なので説明を省略する。背景領域の場合、CPU102は本フローチャートの処理を終了させ、そうでない場合、CPU102は処理ステップをSB306へ進める。
SB306では、CPU102は、選択領域内の各画素の色データを背景領域に対応した所定の色で塗りつぶす。なお、ここでの処理の内容は、第B1の実施形態で説明した図63のSB206と同様なので説明を省略する。
CPU102は、処理されたTrimapをフレームメモリ111に展開し、表示部114、画像端子109、又はネットワーク端子108に出力する。なお、CPU102は、Trimapを記録媒体112へ記録してもよい。図61(c)は、本実施形態において、最終的に生成されるTrimapの例である。
以上のように、本実施形態によれば、選択領域外を表示することなく、注目被写体のみを表示したTrimapを生成することが可能となる。
<第C0の実施形態>
生成したTrimapを外部に出力する方法として、SDI(Serial Digital Interface)で出力する方法がある。SDIにTrimapのデータを重畳する方法として、データをアンシラリパケット化して補助データ領域に重畳することが考えられる。Trimapのデータを効率よくパッキングしてデータを生成しようとすると、禁止コードになってしまう可能性がある。本実施形態では上記問題に鑑み、禁止コードにならないようにデータをマッピングする処理について説明する。
図65を用いて、フレームレートが29.97fpsの場合のHD-SDIのデータストリームの構造を説明する。本実施形態では、画像処理装置100は、動画データをSDI規格に従って伝送する。詳しくは、画像処理装置100は、SMPTE ST 292-1に準拠して各画素データを配分する。図65は、1ライン分のYデータを重畳するデータストリームと、Cデータを重畳するデータストリームとを表している。1フレームでは、このデータストリームが1125ラインある。Yデータ及びCデータは、1ワードが10ビットで2200ワードで構成される。なお、1ワードのビット数は、Nビット(N≧10)でもよい。データは1920ワード目から画像信号の区切り位置を認識するための識別子EAVが重畳され、続いて、LN(Line Number)及び伝送エラーチェック用のデータCRCC(Cycle Redundancy Check Code)が重畳される。そして、アンシラリデータを重畳してよいデータ領域が268ワード続き、EAVと同様に画像信号の区切り位置を認識するための識別子SAVが重畳される。そして、画像データが1920ワード重畳されて伝送される。フレームレートが変わると1ラインのワード数が変わるため、アンシラリデータを重畳してよいデータ領域のワード数が変わる。
次に、図66、図67A、図67B、図68A、図68B、及び図69のフローチャートを用いて、第C0の実施形態におけるストリーム生成処理を説明する。図66のフローチャートにおいて、SC001では、CPU102は、有効画像データが開始されるラインになったかどうかを判断する。例えば、プログレッシブの画像であれば42ライン目が有効画像の開始ラインであり、有効画像は1121ライン目まで続く。インタレースの画像であれば第1フィールドの有効画像データは21ライン目から560ライン目までであり、第2フィールドの有効画像データは584ライン目から1123ライン目までである。有効画像データが開始されるラインだと判断された場合、処理ステップはSC002に進む。一方、有効画像データが開始していない場合は、CPU102は、有効画像データが開始するまで待つ。
SC002で、CPU102は、Trimapのデータを1ワード10ビットのデータにパッキングする。パッキング処理の詳細は後述する。SC003で、CPU102は、Yデータストリームに重畳するYアンシラリパケットを生成する。SC004で、CPU102は、Cデータストリームに重畳するCアンシラリパケットを生成する。YアンシラリパケットとCアンシラリパケットの生成処理の詳細は後述する。SC005で、CPU102は、YアンシラリパケットとCアンシラリパケットをデータストリームに重畳する。アンシラリパケットの重畳処理の詳細は後述する。図66のフローチャートの処理は、1フレーム又は1フィールドの処理に対応し、この処理がフレーム毎又はフィールド毎に繰り返される。
次に、図67A及び図67Bのフローチャートを用いて、Trimapのデータを1ワード10ビットのデータにパッキングする処理の説明をする。SC101で、CPU102は、内部変数Lを1に設定する。SC102で、CPU102は、内部変数Pを0に設定する。SC103で、CPU102は、内部変数Iを0に設定する。SC104で、CPU102は、内部変数Wを0に設定する。
SC105で、CPU102は、Pピクセル目のTrimapのデータが白色データかどうかを判断する。つまり、CPU102は、Trimapのデータが0x00かどうかを判断する。SC105でTrimapのデータが白色データと判断された場合、処理ステップはSC106に進み、そうでない場合、処理ステップはSC109に進む。
SC106で、CPU102は、内部変数Pの値が偶数かどうかを判断する。偶数と判断された場合、処理ステップはSC107に進む。SC107で、CPU102は、白色データを0x00とする。
一方、SC106で内部変数Pが偶数でないと判断された場合、処理ステップはSC108に進む。SC108で、CPU102は、白色データを0x11とする。
SC109で、CPU102は、Wワード目のIビット及びI+1ビットにTrimapのデータを割り付ける。
SC110で、CPU102は、内部変数Iが8かどうかを判断する。内部変数Iが8だと判断された場合、処理ステップはSC111に進む。SC111で、CPU102は、内部変数Iを0に設定する。SC112で、CPU102は、内部変数Wを1インクリメントする。
一方、SC110で内部変数Iが8ではないと判断された場合、処理ステップはSC113に進む。SC113で、CPU102は、内部変数Iを2インクリメントする。
次に、SC114で、CPU102は、現在のピクセル(P番目のピクセル)が最終ピクセルかどうかを判断する。つまり、有効画像のピクセル数は1920であるので、CPU102は、内部変数Pが1919かどうかを判断する。SC114で最終ピクセルではないと判断された場合、処理ステップはSC115に進む。SC115で、CPU102は、内部変数Pを1インクリメントして、処理ステップをSC105に戻す。
一方、SC114で最終ピクセルであると判断された場合、処理ステップはSC116に進む。SC116で、CPU102は、Trimapのデータをパッキングした1ライン分のワードデータをRAM104に記憶する。SC117で、CPU102は、現在のライン(L番目のライン)が最終ラインかどうかを判断する。例えば、プログレッシブの画像であれば有効画像ライン数は1080であるので、CPU102は、内部変数Lが1080かどうかを判断する。最終ラインではないと判断された場合、処理ステップはSC118に進む。SC118では、CPU102は、内部変数Lを1インクリメントし、処理ステップをSC102に戻す。
一方、SC117で最終ラインであると判断された場合、本フローチャートの処理は終了する。
図70は、図67A及び図67Bのフローチャートの処理で生成されるデータ構造を示す。図70のデータ構造は、1ワード10ビットにTrimapのデータをパッキングしたときのデータ構造である。図70(a)に示すように、1ワードの中に5ピクセル分のTrimapのデータがパッキングされている。具体的には、0ビット目及び1ビット目に1画素目、2ビット目及び3ビット目に2画素目、4ビット目及び5ビット目に3画素目、6ビット目及び7ビット目に4画素目、8ビット目及び9ビット目に5画素目、のTrimapデータが割り付けられている。図67A及び図67Bのフローチャートでは、1ワードに5画素をパッキングする処理を説明したが、図70(b)に示すように、1ワードに4画素をパッキングする処理としてもよい。その場合は、8ビット目及び9ビット目には、EvenParityとNot Even Parityを割り付けるようにする。また、ここでのビット割り付けは一例であり、その割り付け方は他のビット構造でもよい。更に、EvenParityも一例であり、他の情報を割り当ててもよい。
次に、図68A及び図68Bのフローチャートを用いて、アンシラリパケットの生成処理の説明をする。ここで生成するアンシラリパケットの例を図71(a)に示す。
図71(a)において、ADF(Ancillary Data Flag)は、アンシラリデータパケットの開始を示している。DID(Data ID)は、アンシラリの種別を表すIDである。SDID(Secondary Data ID)も、DIDと同様でアンシラリの種別を表すIDである。DC(Data Count)は、データ数を表す。LN(Line Number)は、ライン数を表す。
LNのビット割り付けの詳細を図71(b)に示す。LN0の0ビット目と1ビット目はリザーブデータであり、2ビット目から8ビット目にライン数の0ビット目から6ビット目が割り付けられる。9ビット目には、8ビット目の反転データが割り付けられる。LN1の0ビット目と1ビット目、及び6ビット目から8ビット目は、リザーブデータである。2ビット目から5ビット目にライン数の7ビット目から11ビット目が割り付けられる。9ビット目には、8ビット目の反転データが割り付けられる。次に、StatusはTrimapデータのステータスを示す情報である。
Statusの詳細を図71(c)に示す。Status0の0ビット目と1ビット目は、白色データを表すデータが何であるかを示す。2ビット目と3ビット目は、黒色データを表すデータが何であるかを示す。4ビット目と5ビット目は、灰色データを表すデータが何であるかを示す。6ビット目は、0x00のデータを反転するかどうかを表すフラグである。7ビット目は、偶数ピクセルのデータに0x00を割り当てたか0x11のデータを割り当てたかの極性(Polarity)を表す。8ビット目は、Even Parityであり、9ビット目は、Not Even Parityである。Status1の0ビット目から2ビット目は、1ワードに何ピクセルのデータをパッキングしたかを示す。3ビット目から7ビット目は、リザーブデータである。8ビット目は、Even Parityであり、9ビット目は、Not Even Parityである。
図71(a)において、TrimapData0からは、Trimapのデータがパッキングしたワード数だけ重畳される。CS(Check Sum)はチェックサムである。これはアンシラリパケットの一例でありビットの割り付けはこの例以外でもよい。
まず、SC201で、CPU102は、内部変数Lを1に設定する。SC202で、CPU102は、内部変数Wを0に設定する。SC203で、CPU102は、ADF(Ancillary Data Flag)を重畳する。SC204で、CPU102は、DID(Data ID)を重畳する。SC205で、CPU102は、SDID(Secondary Data ID)を重畳する。SC206で、CPU102は、DC(Data Count)を重畳する。SC207で、CPU102は、LN(Line Number)を重畳する。SC208で、CPU102は、Statusを重畳する。
SC209で、CPU102は、Trimapのデータをパッキングしたワードが最終ワードかどうかを判断する。例えば、1ワードに5ピクセルをパッキングする場合、ワード数は384ワードとなる。つまり、CPU102は、内部変数Wが384かどうかを判断する。SC209で最終ワードではないと判断された場合、処理ステップはSC210に進む。SC210で、CPU102は、Yアンシラリを生成するかどうかを判断する。Yアンシラリを生成すると判断された場合、処理ステップはSC211に進む。SC211で、CPU102は、Lライン目のWワード目のデータをRAM104より読み出して重畳する。
一方、SC210でYアンシラリを生成しない(即ち、Cアンシラリを生成する)と判断された場合、処理ステップはSC212に進む。SC212で、CPU102は、Lライン目のW+1ワード目のデータを重畳する。
SB213で、CPU102は、内部変数Wを2インクリメントして、処理ステップをSC209に戻す。
一方、SC209で最終ワードであると判断された場合、処理ステップはSC214に進む。SC214で、CPU102は、CSを重畳する。SC215で、CPU102は、生成したアンシラリパケットをRAM104に記憶する。
SC216で、CPU102は、現在のライン(即ち、L番目のライン)が最終ラインかどうかを判断する。例えば、プログレッシブの画像であれば有効画像ライン数は1080であるので、CPU102は、内部変数Lが1080かどうかを判断する。最終ラインではないと判断された場合、処理ステップはSC217に進む。SC217で、CPU102は、内部変数Lを1インクリメントし、処理ステップをSC202に戻す。
一方、SC216で最終ラインであると判断された場合、本フローチャートの処理は終了する。
次に、図69のフローチャートを用いて、アンシラリパケット重畳の処理を説明する。SC301で、CPU102は、内部変数Lを1に設定する。SC302で、CPU102は、内部変数Pを0に設定する。
SC303で、CPU102は、Pピクセル目はアンシラリパケットを重畳する位置かどうかを判断する。例えば、アンシラリは図65における1928ピクセル目から重畳することができる。Trimapのデータを1ワード5ピクセルでパッキングした場合のアンシラリパケットは203ワードとなるので、1928ピクセルから2130ピクセルまでが重畳位置となる。つまり、CPU102は、内部変数Pが1928から2130の範囲内であるかどうかを判断する。アンシラリパケットを重畳する位置と判断された場合、処理ステップはSC304に進み、そうでない場合、処理ステップはSC306に進む。
SC304で、CPU102は、Lライン目のYアンシラリパケットでPピクセル目に重畳すべきデータをRAM104より読み出して重畳する。SC305で、CPU102は、Lライン目のCアンシラリパケットでPピクセル目に重畳すべきデータをRAM104より読み出して重畳する。
次に、SC306で、CPU102は、現在のピクセル(Pピクセル)が最終ピクセルかどうかを判断する。つまり、1ラインのピクセル数は2200であるので、CPU102は、内部変数Pが2099かどうかを判断する。SC306で最終ピクセルでないと判断された場合、処理ステップはSC307に進む。SC307で、CPU102は、内部変数Pを1インクリメントして、処理ステップをSC303に戻す。
一方、SC306で最終ピクセルであると判断された場合、処理ステップはSC308に進む。SC308で、CPU102は、現在のライン(L番目のライン)が最終ラインかどうかを判断する。例えばプログレッシブの画像であれば有効画像ライン数は1080であるので、CPU102は、内部変数Lが1080かどうか判断する。最終ラインではないと判断された場合、処理ステップはSC309に進む。SC309で、CPU102は、内部変数Lを1インクリメントし、処理ステップをSC302に戻す。
一方、SC308で最終ラインであると判断された場合、本フローチャートの処理は終了する。
以上のように、第C0の実施形態によれば、TrimapのデータをパッキングしてSDIのアンシラリパケットを生成して重畳することで、SDIからTrimapのデータを出力することが可能となる。
<第C1の実施形態>
第C0の実施形態では、複数のTrimapのデータを出力しようとした場合に補助領域が不足しデータが伝送できないという問題がある。本実施形態では上記問題に鑑み、禁止コードが発生しないように複数のTrimapのデータをマッピングする処理について説明する。
フレームレートが29.97fpsの場合の3G-SDIのデータストリームの構造を説明する。本実施形態では、画像処理装置100は、動画データをSDI規格に従って伝送する。詳しくは、画像処理装置100は、SMPTE ST 425-1に準拠し、SMPTE ST 372のR’G’B’+A 10ビットの多重化構造を適用して各画素データを配分する。Aチャネルには任意のデータを重畳してよいため、本実施形態では、画像処理装置100は、複数のTrimapのデータを重畳して伝送する。
次に、図72A及び図72Bのフローチャートを用いて、第C1の実施形態の処理を説明する。図72A及び図72Bのフローチャートは、Aチャネルに複数のTrimapのデータをパッキングする処理を示す。
SC701で、CPU102は、ラインをカウントするための内部変数Lを1に設定する。SC702で、CPU102は、ピクセルをカウントするための内部変数Pを0に設定する。SC703で、CPU102は、Trimapをカウントするための内部変数Nを1に設定する。SC704で、CPU102は、Trimapの最大数Nmaxを取得する。
SC705で、CPU102は、Nフレーム目のPピクセル目のTrimapのデータが白色データかどうかを判断する。Trimapのデータが白色データだと判断された場合、処理ステップはSC706に進み、そうでない場合、処理ステップはSC709に進む。SC706で、CPU102は内部変数Nが奇数かどうかを判断する。奇数と判断された場合、処理ステップはSC707に進む。SC707で、CPU102は、白色データを0x00とする。
一方、SC706で内部変数Nが偶数だと判断された場合、処理ステップはSC708に進む。SC708で、CPU102は、白色データを0x11とする。
次に、SC709で、CPU102は、Pピクセル目のAチャネルの(N*2)ビット及び(N*2)+1ビットにデータを割り付ける。SC710で、CPU102は、内部変数NがNmaxと等しいかどうかを判断する。NがNmaxと等しくないと判断された場合、処理ステップはSC711に進む。SC711で、CPU102は内部変数Nの値を1インクリメントして、処理ステップをSC705に戻す。
一方、SC710でNがNmaxと等しいと判断された場合、処理ステップはSC712に進む。SC712で、CPU102は、現在のピクセル(Pピクセル)が最終ピクセルかどうかを判断する。つまり、有効画像のピクセル数は1920であるので、CPU102は、内部変数Pが1919かどうかを判断する。SC712で最終ピクセルではないと判断された場合、処理ステップはSC713に進む。SC713で、CPU102は、内部変数Pを1インクリメントして、処理ステップをSC703に戻す。
一方、SC712で最終ピクセルであると判断された場合、処理ステップはSC714に進む。SC714で、CPU102は、Aチャネルを記憶する。SC715で、CPU102は、現在のライン(L番目のライン)が最終ラインかどうかを判断する。例えばプログレッシブの画像であれば有効画像ライン数は1080であるので、CPU102は、内部変数Lが1080かどうかを判断する。最終ラインではないと判断された場合、処理ステップはSC716に進む。SC716では、CPU102は、内部変数Lを1インクリメントし、処理ステップをSC702に戻す。
一方、SC715で最終ラインだと判断された場合、本フローチャートの処理は終了する。
本実施形態においても、CPU102は、第C0の実施形態に示したアンシラリパケットを生成してもよい。本実施形態においては、CPU102は、TrimapのデータをパッキングしたデータをAチャネルに重畳するので、TrimapDataをアンシラリのパケットに含める必要はない。また、アンシラリパケットについても、CPU102は、アンシラリが重畳可能な領域の任意の場所に1つ重畳するだけよい。
なお、本実施形態においては、伝送路が1本である場合を説明したが、これに限らず、伝送路を複数用意し、画像とは別の伝送路を用いてTrimapのデータを出力する構成を採用してもよい。また、伝送技術はSDIに限らず、HDMI(登録商標)、DisplayPort(登録商標)、USB、又はLANなどの画像伝送を行える伝送技術でもよく、これらを組み合わせて伝送路を複数用意してもよい。
なお、縮小されたTrimapを生成した場合には、CPU102は、縮小されたデータを出力してもよいし、同じデータを複数回重複してSDIのフォーマットサイズにして出力してもよい。
以上のように、第C1の実施形態によれば、複数のTrimapのデータをパッキングしてSDIのAチャネルに重畳することで、SDIから複数のTrimapのデータを出力することが可能となる。
上述した各実施形態は様々な具体例を示すものにすぎず、各実施形態を適宜組み合わせることも可能である。例えば、第1の実施形態から第C1の実施形態までを部分的に組み合わせた運用も可能である。また、画像処理装置100でのメニュー表示から、ユーザにより機能を選択させて制御を実行させる構成としてもよい。
[その他の実施形態]
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。