画像処理装置及び方法及びプログラムを記憶した記憶媒体
【課題】 画像の背景領域の高周波成分を低減する画像処理装置、方法において、入力画像を縮小した画像に対して空間フィルタを適用し、適用後の画像を拡大することで高周波低減画像を生成することで、高速に処理を行う。
【解決手段】 その際、縮小時・空間フィルタ適用時に、処理対象画素中の背景画素の画素値を重視して処理することで、高周波低減画像における背景領域に前景領域の色味が残存することを防止する。
【解決手段】 その際、縮小時・空間フィルタ適用時に、処理対象画素中の背景画素の画素値を重視して処理することで、高周波低減画像における背景領域に前景領域の色味が残存することを防止する。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、デジタルカメラなどによって撮影された画像に対する画像処理に関するものであり、特に画像の背景領域に対して高周波低減処理を行う画像処理に関する。
【背景技術】
【0002】
近年のデジタルカメラを用いた撮影では、デジタルカメラによって写真をありのままに撮影するだけでなく、撮影時や撮影後に画像データに対してデジタル処理を施すことで、写真に任意の補正を施すことができる。
【0003】
このような補正の一つとして、画像データ中に任意の被写体を指定して、被写体以外の領域にぼかし処理を行う、「背景ぼかし処理」が知られている。「背景ぼかし処理」は本来、一眼レフカメラなどで被写界深度を浅くした状態で被写体にピントを合わせて撮影することで得られる撮影テクニックを、デジタル的に模擬したものである。「背景ぼかし処理」では、カメラの種類や撮影時の状態によらず、任意に背景ぼかし効果を与えられるため、非常に有用な機能である。また、被写体以外の領域の特定方向の高周波成分を意図的に低減することで、移動中の被写体を追随しながら流し撮りした際の画像のような効果を得る、「流し撮り処理」も知られている。これらの処理は、画像中の任意の領域のみの高周波成分を任意の量で低減することで画像効果を生み出している。背景ぼかし処理機能を用いることで、たとえば図1のような撮影画像から図2のような背景のみが大きくぼけた画像を得ることができ、印象的なポートレート作品を作り出すことができる。
【0004】
ところで、背景ぼかし処理や流し撮り処理では、通常の画像全域にわたるぼかし処理などと異なり、二点に留意する必要がある。
【0005】
一点目としては、背景のみにぼかし処理を適用するために、画像の前景領域と背景領域を区別する手段を提供する必要がある。これは例えば、写真プレビュー上で被写体領域をマウスやタッチセンサーなどによってユーザ指定させる方法や、写真撮影時の測距情報やストロボ照射時の各領域の光量などから自動で算出する方法がある。特許文献1には、撮影時にストロボ照射条件と露光条件を変化させた二枚のプレビュー画像の輝度差を求めることで、前景領域と背景領域を区別する方法が開示されている。
【0006】
二点目としては、背景領域のぼかしフィルタ処理時には、前景領域の画素値を参照しないように制御する必要がある。実際の一眼レフカメラでの撮影時でも、背景部分のぼけ画像は背景領域に存在している物体がぼけることで発生しているため、たとえば前景と背景の隣接する領域でも、ぼけ画像の色味は前景の色味の影響を受けずに背景の色味の影響によってのみ決定される。これを無視してしまうと、良好な背景ぼかし処理結果が得られず、たとえば図3のような処理結果となってしまう。この図では、前景が明るく背景が暗い画像に対して、前述の制御を行わずに背景ぼかし処理を行っている。正しくは図2のような効果を得るべきところだが、前景の色味の影響を受けたぼかし処理を行っているために、前景と背景の境界領域で前景の色味が染み出してしまい、まるで被写体の背後に後光が差したような不自然な画像となってしまっている。流し撮り処理においても、同様の課題が発生する。
【0007】
これを制御する方法として、前景と背景の隣接する領域では背景領域の色味を重視したぼかし画像を得ることが有効である。特許文献2には、前景と背景の隣接領域に背景領域の画像を与えることで、背景領域の色味を重視したぼかし画像を得る方法が開示されている。
【0008】
ところで、背景ぼかし処理時には、その画像処理効果を十分に得るために背景画像を広範囲にぼかすことが求められる。ぼかし処理を行う方法として一般にN×Nの空間フィルタを使用することが知られているが、背景画像を大きくぼかすには空間フィルタのサイズをその分大きくとる必要がある。また、画像に対するぼかし処理に必要なフィルタサイズは、画像の解像度に比例する。つまり、同じようなぼかし効果を得る場合であっても、現画像の画素数が大きいときにはより大きなフィルタサイズを必要とする。近年のデジタルカメラの高画素化は著しく、この点でもより大きい空間フィルタサイズを要することとなる。
【0009】
背景ぼかし処理とは別に、画像に対して広範囲にぼかし処理を行う際の工夫として、入力画像を縮小処理し、平滑化フィルタを適用し、拡大処理する技術が知られている。特許文献3には、ある画像に対してN×N画素の平滑化フィルタを適用したい場合に、平滑化処理前に画像を1/Mに縮小し、(N/M)×(N/M)画素の平滑化フィルタを適用し、平滑化処理後に画像をM倍拡大する方法が開示されている。このような手順によって、処理時間を抑えつつ、通常のNxNフィルタ適用時と同様のぼかし効果が得られる。当該技術は通常のぼかし処理であれば有効な手段であるが、背景ぼかしに適用するにあたっては課題が発生する。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2000−307935号公報
【特許文献2】特開2002−300373号公報
【特許文献3】特開平10−232929号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
すなわち、背景ぼかし処理時には前述の通り、ぼかし結果の画素値を求める際に前景領域の画素値を参照しないように制御する必要がある。
【0012】
しかし、当該技術では画像の縮小処理時に前景画素/背景画素にかかわらずに画素値参照を行うため、縮小過程で前景領域の画素値が参照されてしまう。
【0013】
その結果、たとえ縮小処理後の平滑化フィルタ処理において前景画素/背景画素の区別を伴った背景ぼかし処理を行ったとしても、縮小処理後の背景画素の画素値には、縮小処理前の前景画素の画素値の影響が含まれる事態が発生する。
【0014】
以上のとおり、従来の手法では「背景ぼかし処理」を画像弊害なく高速に行うことができなかった。本発明の画像処理方法は、このような事情に鑑みてなされたものである。
【課題を解決するための手段】
【0015】
本発明の画像処理装置は、
画像を入力する画像入力手段と、
前記画像入力手段によって入力された入力画像の各画素に対し、背景画素の存在領域と前景画素の存在領域を指定する背景領域指定手段と、
前記入力画像に対し、高周波成分の低減処理を行い、低減画像を得る高周波低減手段と、
前記入力画像において前記背景領域指定手段で指定された背景領域に対し、前記低減画像における前記背景領域の画素値の合成を行う合成手段と、を持ち、
前記高周波低減手段は、
画像縮小を行う第一処理部と、空間フィルタ処理を行う第二処理部と、画像拡大を行う第三処理部と、を持ち、
前記第一処理部、前記第二処理部において、前記背景領域の境界部を処理する際に、前記背景画素の画素値を前記前景画素の画素値よりも重視して処理を行うことを特徴とする。
【発明の効果】
【0016】
本発明における画像処理装置を用いることで、画像の背景に対して前景の色味の影響を受けずに高周波成分低減処理を高速に実施できる。
【図面の簡単な説明】
【0017】
【図1】背景ぼかし処理前の画像
【図2】背景ぼかし処理後の画像
【図3】不適切な背景ぼかし処理後の画像
【図4】本発明の画像処理方法を実行するためのハードウェア構成
【図5】実施例におけるアプリケーションの画面構成
【図6】背景ぼかし処理対象画像選択時のアプリケーションの画面構成
【図7】前景領域指定時のアプリケーションの画面構成
【図8】本発明の画像処理方法を搭載したアプリケーションのマウスカーソル例
【図9】背景ぼかし処理結果のプレビュー時のアプリケーションの画面構成
【図10】実施例1における画像処理の全体フロー
【図11】実施例1におけるS1400の詳細フロー
【図12】実施例1におけるS1600の詳細フロー
【図13】実施例1におけるS1600で適用する二次元フィルタの係数
【図14】実施例1の応用におけるS1600で適用する一次元フィルタの係数
【図15】実施例1におけるS1700の詳細フロー
【図16】実施例2における画像処理の全体フロー
【図17】実施例3における画像処理の全体フロー
【発明を実施するための形態】
【0018】
以下、本発明の実施の形態について詳細に説明する。
【0019】
図4に本発明で使用する画像処理方法のブロック図を示す。画像処理方法として、パーソナルコンピュータ(PC)を使用すると想定して説明するが、これはあくまで実施の1つの形態を例として示したものであり、本発明は以下の実施に限定されるものではない。
【0020】
(ハードウェア構成の説明)
CPU201は、中央演算ユニット(Central Processing Unit)で、他の機能ブロックや装置の制御を行う。ブリッジ部202は、CPU201と他の機能ブロックの間でデータのやり取りを制御する機能を提供している。
【0021】
ROM(Read Only Memory)203は読み込み専用の不揮発メモリであり、BIOS(Basic Input/Output System)と呼ばれるプログラムが格納されている。BIOSはPCが起動したときに最初に実行されるプログラムであり、2次記憶装置205、表示制御装置207、入力装置209、出力装置210などの周辺機器の基本入出力機能を制御するものである。
【0022】
RAM(Random Access Memory)204は、高速の読み/書き可能な記憶領域を提供する。
【0023】
2次記憶装置205は、大容量の記憶領域を提供するHDD(Hard Disk Drive)である。BIOSが実行されると、HDDに格納されているOS(Operating System)が実行される。OSはすべてのアプリケーションで利用可能な基本的な機能や、アプリケーションの管理、基本GUI(Graphical User Interface)を提供する。アプリケーションは、OSが提供するGUIを組み合わせることで、アプリケーション独自の機能を実現するUIを提供できる。
【0024】
OSや、他のアプリケーションの実行プログラムや作業用に使用しているデータは、必要に応じてRAM204または2次記憶装置205に格納される。
【0025】
本実施例においては、本発明で使用する画像処理方法はアプリケーション上に搭載されており、該アプリケーションの実行を介して利用する。なお、本発明で使用する画像処理方法を搭載したアプリケーションの説明は後述する。
【0026】
表示制御部206は、OSやアプリケーションに対して行われるユーザの操作の結果をGUIの画像データとして生成し、表示装置207で表示するための制御を行う。表示装置207には液晶ディスプレイや、CRT(Cathode Ray Tube)ディスプレイが使用できる。
【0027】
I/O制御部208は、複数の入力装置209、出力装置210とのインターフェースを提供するものである。代表的なインターフェースとして、USB(Universal Serial Bus)やPS/2(Personal System/2)がある。
【0028】
入力装置209には、キーボード、マウスといったユーザの意志を画像検索装置に入力するものがある。さらに、デジタルカメラ、USBメモリ、CF(Compact Flash)メモリ、SD(Secure Digital)メモリカードといった記憶装置などを接続することで、画像データを転送することも可能である。
【0029】
出力装置210にはプリンタが接続され、所望の印刷結果を得ることが可能である。
【0030】
(アプリの説明)
以下、本発明で使用する画像処理方法を搭載したアプリケーション(以下、本アプリケーションと呼ぶ)について説明する。
【0031】
前述のPCを起動し、OSから本アプリケーションを呼び出すことで本アプリケーションは起動する。
【0032】
起動時の本アプリケーションの画面を図5に示す。本アプリケーションの操作の流れを説明する前に、本アプリケーションを構成するGUI部品の名称と機能概要を説明する。
【0033】
500は本アプリケーションのメインウィンドウである。メインウィンドウは前述の通り、OSが提供するGUIを組み合わせて形成されている。ウィンドウの拡大縮小、移動、最大化、最小化といった基本的な操作はOSが提供する機能により実現するものであるため、詳細な説明は割愛する。
【0034】
画像選択ボタン501は背景ぼかし処理の対象画像を選択する際に使用する。このボタンを押すことで、ファイル選択ダイアログ(図示せず)が起動する。ユーザはファイルダイアログを通じて、2次記憶装置205や入力装置209に接続された各種記憶装置に記憶された任意の画像ファイルを選択することが可能である。なお、すでに画像が選択済みの状態でこのボタンを押した場合には、すでに選択した画像を取り消して再度画像を選択能となる。
【0035】
画像プレビュー領域505には、画像選択ボタン501の操作によって選択された画像のプレビューが表示される。画像が未選択の場合には白紙表示がされる。
【0036】
画像ファイル名表示領域506には、画像選択ボタン501の操作によって選択された画像のファイル名情報が表示される。画像が未選択の場合には「No Image」の文字列が表示される。
【0037】
また、この領域は後述の領域指定ボタン503押下時には前景領域を指定するための入力領域としても使用される。さらに、前景領域を指定した状態において後述の強度指定スライダー502を操作した際の背景ぼかし効果のプレビュー画面としても使用される。
【0038】
領域指定ボタン503は画像中の前景領域を指定する際に使用する。このボタンを押すことで、マウスを介して画像プレビュー領域505中に任意の領域を指定可能となる。なお、すでに領域が選択済みの状態でこのボタンを押した場合には、すでに指定した領域を取り消して再度領域を指定可能となる。
【0039】
強度指定スライダー502は背景ぼかしの強度を指定する際に使用する。このスライダーを操作することで、背景ぼかしの強度をオフ、弱、中、強の4段階に指定可能となる。強度を強くするほど、背景に対しより強いぼかし効果が得られる。強度指定スライダー操作時には瞬時に背景ぼかしの画像処理が実行され、実行結果が画像プレビュー領域に反映される。これにより、ユーザは背景ぼかし処理時の画像効果を確認しながら適切な強度を指定できる。
【0040】
決定ボタン504は背景ぼかし処理を決定して処理後の画像を保存する際に使用する。このボタンを押すことで、ファイル選択ダイアログ(図示せず)が起動する。ユーザはファイルダイアログを通じて、2次記憶装置205や入力装置209に接続された各種記憶装置に任意のファイル名にて画像を保存できる。
【0041】
以下、本アプリケーションを使用した実際の操作の流れを説明する。
【0042】
前述の通り、本アプリケーション起動時には図5の状態のダイアログが表示される。このときはまだ画像未選択状態であるため、強度指定スライダー502、領域指定ボタン503、決定ボタン504はグレーアウト表示がされており、操作できない状態となっている。
【0043】
ユーザはまず、画像選択ボタンを押下して画像を選択する。このとき選択する画像ファイルフォーマットはJPEG,PNG,TIFFなどいずれでもよい。これらの画像ファイル内の画像情報はフォーマットによらず、RGB各チャンネル16ビットのフルカラービットマップデータとしてRAM204に展開されるため、本発明の画像処理方法はフォーマットには依存せずに良好な結果を得られる。
【0044】
ユーザが画像選択ボタン501を押してファイル選択ダイアログを起動して画像を選択すると、本アプリケーションは画像ファイルフォーマットに応じて適切なデコーダプログラムを選択実行して画像のデコードを行う。デコード結果はビットマップデータとしてRAM204に展開される。デコードが終わると、本アプリケーションはデコード結果のビットマップデータを画像プレビュー領域505に収まるように適宜拡大縮小して表示する。
【0045】
例えば、ユーザが画像「c:¥sample.jpg」を選択した場合、図6のようにデコード結果が表示される。このときは背景ぼかし領域を未指定であるため、強度指定スライダー502、決定ボタン504はグレーアウト表示されており、操作できない状態となっている。
【0046】
なお、ユーザが画像選択を誤った場合には、ユーザは画像選択ボタン501を再度押すことで画像を選択しなおすことが可能である。
【0047】
この状態でユーザが領域指定ボタンを押すと、OSが表示するマウスカーソルの状態が通常の矢印表示(図8(a))から鉛筆表示(図8(b))に切り替わり、画像プレビュー領域505上に任意の前景領域を指定可能となる。
【0048】
ユーザは画像プレビュー領域505上でマウスボタンを押下しながらドラッグ操作することで、任意の曲線を指定できる。曲線指定後にマウスボタンを離すと、曲線の始点と終点を直線で結んだ閉領域が点線表示され、前景領域として規定される。このときマウスカーソルは再び通常の矢印表示に戻る。
【0049】
なお、ユーザが領域指定を誤った場合には、ユーザは領域指定ボタン503を再度押すことで領域を指定しなおすことが可能である。
【0050】
前景領域指定後の画面は図7のように表示される。このときは画像に対して背景ぼかし領域が指定済み状態であるので、強度指定スライダー502、決定ボタン504は操作可能となる。
【0051】
ユーザは強度指定スライダー502を操作して、背景ぼかしの強度を任意に指定できる。強度指定スライダー502の選択位置が変化すると、アプリケーションは本発明の画像処理方法を用いて選択された強度に応じた背景ぼかし処理を行い、処理結果をプレビュー領域505に表示する。
【0052】
例えばユーザが強度指定スライダーを「中」に指定した場合、画像中の背景領域に対して中程度の背景ぼかし処理が施され、処理結果が図9のように表示される。
【0053】
なお、この状態で強度指定スライダーを変化させた場合には、それぞれの強度に応じた背景ぼかし処理が実行し直されるため、ユーザは画像に対して適切な背景ぼかし強度を容易に決定できる。
【0054】
この状態でユーザが決定ボタン504を押すと、ファイル選択ダイアログが起動する。ダイアログ上でファイル名とフォーマットを設定すると、本アプリケーションはRAM204から背景ぼかし処理結果のビットマップデータを取得し、フォーマットに応じて適切なエンコーダプログラムを選択実行して画像のエンコードを行い、結果を保存する。
【0055】
[実施例1]
以上が本アプリケーションの動作概要であるが、本アプリケーションが実行する本発明の画像処理方法について、第一の実施形態における詳細な動作フローを図10を用いて説明する。
【0056】
S1000では、画像処理を施す対象画像のビットマップデータを取得する。前述の通り、本アプリケーションでは画像選択ボタンを押したときに画像をデコードし、ビットマップデータとしてRAM204に展開するので、その情報を取得すればよい。
【0057】
S1100では、対象画像の前景領域を表す情報を取得する。本アプリケーションで領域指定ボタンをもちいて指定した前景領域がこれに相当する。対象画像のビットマップデータの実サイズに相当する二値ビットマップ画像を作成し、前景領域に相当する部分を1、背景領域に相当する部分を0としてマスク画像を作成する。
【0058】
S1200では、S1000で取得した画像を複製して内部に保持する。これはS1600において前景画像と背景画像の合成をする際に、前景画像の情報として利用するためのものである。つまり、前景画像部分の情報のみが分かればよいので、S1100で作成したマスク画像を参照しながら必要な領域の情報のみを保持するようにしてもよい。これにより、動作時の使用メモリ量を削減できる。
【0059】
S1300では、取得した画像サイズと強度指定スライダー502の値から画像の縮小率Rを求める。画像の縮小率を大きくすればするほど、縮小後に背景ぼかしフィルタが適用される領域の画角が大きくなるので、強いぼかし効果が得られる。
【0060】
本実施例では、画像の長辺の画素数をWとしたとき、「W/200」「W/100」「W/50」の値の小数部を切り上げた値をそれぞれ、強度「弱」「中」「強」での画像の縮小率とする。
【0061】
S1400では、S1000で取得したビットマップデータとS1100で生成したマスク画像を参照しながら画像縮小処理を行う。このステップでは、縮小時に前景領域の画素の色味の影響を受けないように画素参照を行うが、詳細については後述する。
【0062】
S1500では、S1100で生成したマスク画像を縮小する。このステップでの縮小処理は二値のマスク画像を単純に平均化縮小し、生じた小数部を切り上げるのみであるので詳細の説明は割愛する。
【0063】
S1600では、S1400で縮小したビットマップデータとS1500で縮小したマスク画像を参照しながら背景ぼかし処理を行う。このステップでは、背景ぼかし時に前景領域の画素の色味の影響を受けないように画素参照を行うが、詳細については後述する。
【0064】
S1700では、S1600で背景ぼかし処理したビットマップデータとマスク画像を参照しながら画像拡大処理を行う。このステップでは、拡大時に前景領域の画素の色味の影響を受けないように画素参照を行うが、詳細については後述する。
【0065】
S1800では、S1200で保持した画像とS1700で拡大したビットマップデータとS1100で作成したマスク画像を参照しながら画像合成処理を行う。S1200で保持した画像の各画素に対し、マスク画像における対応する座標での画素値を調べ、画素値が0であった場合には背景ぼかし画像の画素値を適用する。具体的には、S1500で拡大したビットマップデータにおける対応する座標値での画素値を取得して適用する。
【0066】
(S1400:画像縮小)
S1400での画像縮小処理の詳細を図11を用いて説明する。
【0067】
画像縮小処理はS1000で取得した幅w、高さhの画像を元に、平均値縮小によって幅w’、高さh’の画像を生成する。
【0068】
S1401では、縮小先画像のy座標のループカウンタyを0にセットしてループ処理を開始する。
【0069】
S1402では、縮小先画像のx座標のループカウンタxを0にセットしてループ処理を開始する。
【0070】
S1403では、縮小元画像における縮小対象ウィンドウを設定する。ここでウィンドウの領域はx、y、縮小率Rから求められ、以下の4点(x×R,y×R)、(x×R+R−1,y×R)(x×R,y×R+R−1)(x×R+R−1,y×R+R−1)を頂点座標に持つ矩形領域である。
【0071】
S1404では、ウィンドウ内のマスク画像の画素値を調べ、すべての画素値が1であればウィンドウ内はすべて前景領域であると判断する。
【0072】
前景領域については、後のS1700にて、S1200で保持した前景画像の情報を用いて置換処理することになるため、ぼかし処理結果は不要である。そこでS1404へすすむ。マスク画素のいずれか一画素でも画素値が0であれば、ウィンドウ内は前景領域と背景領域の混合領域であると判断してS1410へすすむ。
【0073】
S1410では、平均値縮小処理で使用する変数を初期化する。具体的には、ウィンドウ内の累積画素値を保持する累積画素値カウンタ配列Vと、ウィンドウ内の背景画素数を保持する背景画素数カウンタGをそれぞれゼロクリアする。なお、VはRGB3チャンネルの値を独立に保持できる配列領域であり、V[0]にはRチャンネルの情報が、V[1]にはGチャンネルの情報が、V[2]にはBチャンネルの情報がそれぞれ保存される。
【0074】
S1411では、ウィンドウ内における相対y座標のループカウンタdyを0にセットしてループ処理を開始する。
【0075】
S1422では、ウィンドウ内における相対x座標のループカウンタdxを0にセットしてループ処理を開始する。
【0076】
S1413では、ウィンドウ内の注目座標(dx,dy)におけるマスク画像の画素値を調べ、背景画素であればS1414へ進む。前景画素であれば、縮小処理時には参照不要な画素なのでS1415へ進む。
【0077】
S1414では、注目画素値をVに加算し、Gをインクリメントする。具体的には、注目画素のRGB値をそれぞれ取得し、V[0]にはRチャンネルの値を、V[1]にはGチャンネルの値を、V[2]にはBチャンネルの値を加算する。
【0078】
S1415では、dxをインクリメントする。
【0079】
S1416では、dx=Rとなった場合にはループを終了してS1417へ進む。それ以外の場合にはループ開始場所へ戻ってS1413へ進む。
【0080】
S1417では、dyをインクリメントする。
【0081】
S1418では、dy=Rとなった場合にはループを終了してS1419へ進む。それ以外の場合にはループ開始場所へ戻ってS1412へ進む。
【0082】
S1419では、V/Gを求め、この値を縮小後画像における座標(x、y)の画素値とする。具体的には、RGB値(V[0]/G,V[1]/G,V[2]/G)を画素値とする。
【0083】
S1420では、ウィンドウ内における全画素の画素平均値を縮小後画像における座標(x、y)の画素値とする。
【0084】
S1421では、ループカウンタxをインクリメントする。
【0085】
S1422では、x>=w/Rとなった場合にはループを終了してS1423へ進む。それ以外の場合にはループ開始場所へ戻ってS1403へ進む。
【0086】
S1423では、ループカウンタyをインクリメントする。
【0087】
S1424では、y>=h/Rとなった場合にはループを終了してENDへ進む。それ以外の場合にはループ開始場所へ戻ってS1402へ進む。
【0088】
(S1600:背景ぼかし)
S1600での背景ぼかし処理の詳細を図12を用いて説明する。
【0089】
背景ぼかし処理はS1400にて行った縮小後の対象画像およびマスク画像に対して行われる。ここでは縮小後の幅w’、高さh’の画素数の画像に対して、図13のような3x3画素のガウシアンフィルタを適用する場合を例にとって説明する。
【0090】
S1601では、y座標のループカウンタyを0にセットしてループ処理を開始する。
【0091】
S1602では、x座標のループカウンタxを0にセットしてループ処理を開始する。
【0092】
S1603では、ループカウンタx、yの値から求まる座標(x,y)を注目画素としたときのマスク画像の画素値を調べ、注目画素の画素値が1であれば前景画素であると判断する。
【0093】
前景画素の領域については、後のS1700にて、S1200で保持した前景画像の情報を用いて置換処理することになるため、ぼかし処理結果は不要である。そこでS1621へすすむ。注目画素の画素値が0であれば背景画素であると判断してS1610へすすむ。
【0094】
S1610では、3×3のガウシアンフィルタウィンドウ内のフィルタ処理で使用する変数を初期化する。具体的には、ウィンドウ内の重み付き累積画素値を保持する累積画素値カウンタVと、ウィンドウ内の累積重み値を保持する累積重み値カウンタGをそれぞれゼロクリアする。
【0095】
S1611では、注目画素を中心とした3×3画素の小領域における相対y座標のループカウンタdyを0にセットしてループ処理を開始する。
【0096】
S1622では、注目画素を中心とした3×3画素の小領域における相対x座標のループカウンタdxを0にセットしてループ処理を開始する。
【0097】
S1613では、小領域内の相対座標(dx,dy)におけるマスク画像の画素値を調べ、背景画素であればS1614に進む。前景画素であれば、背景ぼかし処理においては参照不要な画素なのでS1615へ進む。
【0098】
S1614では、ウィンドウ内の位置に応じたフィルタ係数を求めて画素値に積算し、重み付き画素値を求める。求めた重み付き画素値をVに加算し、フィルタ係数をGに加算する。
【0099】
S1615では、dxをインクリメントする。
【0100】
S1616では、dx=3となった場合にはループを終了してS1617へ進む。それ以外の場合にはループ開始場所へ戻ってS1613へ進む。
【0101】
S1617では、dyをインクリメントする。
【0102】
S1618では、dy=3となった場合にはループを終了してS1619へ進む。それ以外の場合にはループ開始場所へ戻ってS1612へ進む。
【0103】
S1619では、V/Gを求め、これを用いて注目画素の画素値を更新する。
【0104】
S1621では、xをインクリメントする。
【0105】
S1622では、x=w’となった場合にはループを終了してS1623へ進む。それ以外の場合にはループ開始場所へ戻ってS1603へ進む。
【0106】
S1623では、yをインクリメントする。y=h’となった場合にはループを終了してENDへ進む。それ以外の場合にはループ開始場所へ戻ってS1602へ進む。
【0107】
(S1700:画像拡大)
S1700での画像拡大処理の詳細を図13を用いて説明する。
【0108】
本実施例では、画像の拡大処理時には一度に線形拡大せずに、ニアレストネイバー法による二倍拡大と3×3画素平滑化フィルタを繰り返し適用している。このようにすることで拡大時に生じる画像弊害を抑える技術は公知のものであり、例えば特開平8−186708がある。しかし、当該技術を背景ぼかし処理に適用するにあたっては、前述の縮小処理、平滑化処理と同様に注目画素が前景か背景かの考慮が必要となる。
【0109】
S1701では、拡大処理時の累積拡大率カウンタR´を1にセットしてループ処理を開始する。このカウンタは、拡大処理の繰り返しによって画像が何倍拡大されたかを記憶しておくものである。ループ開始時はまだ拡大を行っていないため、1(等倍)を初期値としてセットしている。
【0110】
S1702では、ニアレストネイバー法を用いて画像を二倍拡大する。なお、ここでの拡大処理はマスクを考慮せずに通常の拡大処理を行ってよい。なぜなら、ここでの注目画素の画素値については、すでに前述の縮小処理において、前景画素の影響が排除されているためである。すなわち、前景画素と背景画素が隣接する領域においては、背景画素の画素値のみでもって算出した画素値を保持しているので、ニアレストネイバー法による拡大処理時にはこの画素値をそのまま用いて拡大すればよい。
【0111】
S1703では、拡大後の画像に対して3×3画素の平滑化フィルタを適用する。なお、ここでの平滑化フィルタ適用時にはマスクを考慮する必要がある。なぜなら、ここでは注目画素と隣接画素の画素値を混合することになるため、「注目画素が背景画素だが、隣接画素が前景画素である」という状況が発生するからである。このような場合に前景画素値が混合されることを防ぐために、S1600と同様の手法でマスク情報を考慮しながら平滑化処理を行う。
【0112】
なお、マスク情報としてはS1100で作成したマスク画像を用いればよく、当該マスク画像をS1500と同様に適宜縮小変倍することで本ステップにおける最適なマスク画像を生成できる。
【0113】
S1704では、すでに画像の二倍拡大を行っているのでR’を二倍する。
【0114】
S1705では、R’とR/2を比較する。ここでRとはS1300でもとめた画像縮小率である。この比較により、再度画像の二倍拡大をしてもS1000で取得した対象画像の画素数を超えないことを確認する。R’>R/2である場合には、再度画像の二倍拡大をすると対象画像の画素数を超えてしまうため、ループを終了してS1706へ進む。
【0115】
S1706では、ニアレストネイバー法を用いて画像をR/R’倍拡大する。ここでの処理はS1702と同様に行えばよい。
【0116】
S1707では、拡大後の画像に対して3×3画素の平滑化フィルタを適用する。ここでの処理はS1703と同様に行えばよい。
【0117】
<実施例1の応用>
本実施例では、画像縮小率Rを入力画像のサイズと強度により決定し、縮小後の背景ぼかし処理で用いるガウスフィルタのフィルタサイズは3×3に固定したが、たとえば縮小率Rを半減させてガウスフィルタのフィルタサイズを5×5に倍増してもよい。ガウスフィルタのサイズを大きくとるほど、背景ぼかし処理自体の画質は向上する。反対に、縮小率Rを大きくとるほど、背景ぼかし処理の処理時間は低減する。本発明の技術を実施するにあたっては、実施対象の必要とする要件に応じてこれらのバランスを適宜決定すればよい。
【0118】
[実施例2]
実施例1に述べた構成により、特許文献2にあげたような通常のフィルタ演算処理に対してより高速な処理結果が得られるが、そのために必要な中間画像領域の確保や拡大縮小処理においても画像処理の処理時間は発生する。入力画像の画素数とぼかし強度が十分に大きいときには、本発明の技術を用いることが処理時間の面で有利であることは明らかだが、入力画像の画素数とぼかし強度の組み合わせによっては、通常のフィルタ演算処理を実施したほうが高速な場合も考えられる。そのため、S1000の段階で入力画像の画素数とぼかし強度を調べることで、通常のフィルタ演算と本発明の技術とどちらが有利であるかを概算し、その結果に応じて処理フローを切り替えてもよい。これにより、入力画像の画素数とぼかし強度によらず、常に最適な処理負荷で背景ぼかし処理を行うことができる。
【0119】
本実施例では、そのような切り替え方法について図16を用いて説明する。
【0120】
S2000〜S2300については、第一の実施例のS1000〜S1300と同様の処理であるため、説明を割愛する。
【0121】
S2305では、S2300で求めた画像の縮小率Rを評価する。縮小率Rの値が4より大きければ、4倍以上の拡大縮小処理を行うことで処理の高速化に寄与する率が高いと判断し、S2400へ進む。縮小率Rの値が4以下であれば、拡大縮小処理のオーバヘッドの方が大きいため、処理の高速化には寄与しないと判断し、2900へ進む。
【0122】
S2400〜S2700については、第一の実施例のS1400〜S1700と同様の処理であるため、説明を割愛する。
【0123】
S2900では、S2000で取得したビットマップデータとS2100で取得したマスク画像を参照しながら背景ぼかし処理を行う。背景ぼかし処理の際に用いるガウスフィルタのサイズは、S2300で求めたRを用いて3×Rとする。ただし、フィルタサイズが偶数になる場合には3×R+1とする。このようにフィルタサイズを調整することで、画像拡大縮小を行った場合と同様のぼかし強度による背景ぼかし処理結果が得られる。このステップでは、フィルタサイズが異なる以外については、S2600と同様に処理を行う。すなわち、背景ぼかし時に前景領域の画素の色味の影響を受けないように画素参照を行う。
【0124】
S2800については、第一の実施例のS1800と同様の処理であるため、説明を割愛する。
【0125】
<実施例2の応用>
本実施例では、入力画像の画像サイズに応じて、通常の背景ぼかし処理と拡大縮小を伴う背景ぼかし処理を切り替えたが、入力画像の前景/背景領域の構成比率に応じて切り替えてもよい。例えば、入力画像において背景領域が1/2以上を占める場合は、画像における背景領域の画質が重要であると判断し、S2305においてRの値によらずにS2900へ進むとしてもよい。
【0126】
[実施例3]
実施例1では、背景ぼかし処理時のフィルタサイズを3×3に固定していたが、入力画像の画像サイズや入力画像の前景/背景領域の構成比率に応じてフィルタサイズを決定してもよい。このようにすることで、画質と処理速度のトレードオフを考慮した処理結果が得られる。すなわち、入力画像の画素数が大きいときには、背景ぼかし時のフィルタサイズを下げることで画像の拡大縮小による処理速度の向上を重視させることができる。反対に、入力画像の画素数が小さいときには、画像の拡大縮小による処理速度の向上の寄与は少ないと考え、背景ぼかし時のフィルタサイズを上げることで処理結果の画質向上を重視させることができる。
【0127】
前景/背景領域の構成比率についても同様に背景領域の構成比率が高いときには、背景ぼかし処理部分の画質が重要であると考え、画質向上を重視させることができる。
【0128】
本実施例では、そのような制御方法について図17を用いて説明する。
【0129】
S3000〜S3200については、第一の実施例のS1000〜S1200と同様の処理であるため、説明を割愛する。
【0130】
S3205では、入力画像の画素数と入力画像の前景/背景領域の構成比率に応じてフィルタサイズFを算出する。ここでは、入力画像の長辺方向の画素数をW、背景の構成比率をBとした場合に、F=3×2B×1280/Wとする。小数部は切り捨てて整数化する。ただし、Fが偶数になった場合には1を加算する。このように設定することで、入力画像の長辺方向の画素数が大きい画像や、背景の構成比率が小さい画像ではFは小さくなり、最小1となる。
【0131】
S3300では、取得した画像サイズと強度指定スライダー502の値とS3205で求めたFから画像の縮小率Rを求める。画像の縮小率を大きくすればするほど、縮小後に背景ぼかしフィルタが適用される領域の画角が大きくなるので、強いぼかし効果が得られる。
【0132】
本実施例では、画像の長辺の画素数をWとしたとき、「(3/F)×(W/200)」「(3/F)×(W/100)」「(3/F)×(W/50)」の値の小数部を切り上げた値をそれぞれ、強度「弱」「中」「強」での画像の縮小率とする。このように設定することで、フィルタサイズFが大きい際には画像の縮小率が低くなり、結果としてFがいくつの場合であっても、背景ぼかし処理と拡大縮小処理の組み合わせで得られるぼかし強度が一定に保たれる。
【0133】
S3400〜S3500については、第一の実施例のS1400〜S1500と同様の処理であるため、説明を割愛する。
【0134】
S3600では、S3400で縮小したビットマップデータとS3500で縮小したマスク画像を参照しながら背景ぼかし処理を行う。背景ぼかし処理の際に用いるガウスフィルタのサイズは、S3200で求めたFを用いる。このステップでは、フィルタサイズが異なる以外については、S1600と同様に処理を行う。すなわち、背景ぼかし時に前景領域の画素の色味の影響を受けないように画素参照を行う。
【0135】
S3700〜S3800については、第一の実施例のS1700〜S1800と同様の処理であるため、説明を割愛する。
【0136】
<実施例1〜3のその他の応用>
本実施例では背景ぼかし処理についての適用を説明したが、画像中の所定の領域の高周波成分を低下させるような種類のエフェクト処理であれば同様に適用が可能である。例えば、被写体の背景に対して水平方向の高周波成分を低下させることで、移動する被写体を追いかけながら撮影する、いわゆる「流し撮り」風の画像効果が得られることが知られている。このような画像効果を得る際にも、水平方向の平滑化フィルタの肥大化を防ぐ際には本発明の技術が同様に適用できる。
【0137】
また、本実施例のアプリケーションでは、強度指定スライダー502の操作の都度、選択画像に対してビットマップデータそのものの画素数で処理を行った。しかし、画像プレビュー領域の表示解像度にあらかじめ縮小した画像を別途用意しておき、スライダー操作時には縮小画像に対して処理を行い、決定ボタン504が押された段階で選択画像のビットマップデータそのものに処理を施して画像保存してもよい。さらに、スライダー操作によって作成したプレビュー画像をキャッシュしておき、再度スライダー操作を切り替えた際にはそちらを参照するように制御してもよい。このようにすることで、ユーザはストレスなくプレビュー表示を行いつつ、強度確定時には高画質な処理結果を得ることができる。
【0138】
また、本実施例の平滑化処理では、図13のような3×3のガウシアンフィルタを用いたが、これについて例えば図14(a)のような1×3の平滑化フィルタと図14(b)のような3×1の平滑化フィルタを直列に用いて演算回数を減らすことが可能である。このような場合であっても、それぞれのフィルタ適用時に本実施例と同様にマスク情報を参照することで前景画素の色味の影響を排除してフィルタ処理が実行できる。
【0139】
また、本実施例のアプリケーションでは、ユーザのマウス操作によって被写体領域を指定させたが、領域選択時には画像の輝度差などをヒントとして領域境界を自動トレースさせてもよい。このような技術は一般の画像加工アプリケーションにおいて公知である。その他特許文献1をはじめとした公知の技術を用いて前景領域を自動選択してもよい。本発明の技術は、前景画像/背景画像の選択技術によらず好適に作用するが、本発明の課題とするところの「背景ぼかし領域に前景画素の色味が入り込む」現象を回避するためには、これら技術によって前景/背景を適切に領域選択することが望ましい。
【0140】
また、本実施例では単体のアプリケーションとしての形態を例示して説明したが、既存のアプリケーションから呼び出して使用するサブプログラムやプラグインなどの形式で実現してもよい。
【0141】
また、本実施例では、RGB3チャンネルのカラー画像を対象に処理を説明したが、YCCやCMYKなどといった異なる座標系で定義されるカラー画像に対しても同様に実施可能であることは言うまでもない。その場合、累積画素値カウンタVの配列を適宜用意し、各チャンネルの値を累積させればよい。また、カラー画像でなくとも単一のグレースケール画像でも本発明の課題は同様に発生しており、これを解決する際にも本実施例を応用して適用することが可能である。その場合、累積画素値カウンタVを配列でなく単一のカウンタ変数領域として用意し、輝度や明度といったグレースケール情報を累積させればよい。
【0142】
また、本実施例では、単一のPC上のアプリケーションとしての形態を例示して説明したが、複数の機器(例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタ等)から構成されるシステムに適用してもよい。もしくは、一つの機器からなるPC以外の装置(例えば、プリンタ、複写機、ファクシミリ装置等)に適用してもよい。
【0143】
また、本発明の目的は、以下によっても達成できる。まず、前述した実施形態の機能を実現するソフトウエアのプログラムコードを記録した記憶媒体(または記録媒体)を、システムあるいは装置に供給する。次に、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行すればよい。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけではない。例えば、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0144】
さらに、まず、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、該プログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【符号の説明】
【0145】
201 CPU
202 ブリッジ部
203 ROM
204 RAM
205 2次記憶装置
206 表示制御部
207 表示制御装置
208 I/O制御部
209 入力装置
210 出力装置
501 画像選択ボタン
502 強度指定スライダー
503 領域指定ボタン
504 決定ボタン
505 画像プレビュー領域
506 画像ファイル名表示領域
【技術分野】
【0001】
この発明は、デジタルカメラなどによって撮影された画像に対する画像処理に関するものであり、特に画像の背景領域に対して高周波低減処理を行う画像処理に関する。
【背景技術】
【0002】
近年のデジタルカメラを用いた撮影では、デジタルカメラによって写真をありのままに撮影するだけでなく、撮影時や撮影後に画像データに対してデジタル処理を施すことで、写真に任意の補正を施すことができる。
【0003】
このような補正の一つとして、画像データ中に任意の被写体を指定して、被写体以外の領域にぼかし処理を行う、「背景ぼかし処理」が知られている。「背景ぼかし処理」は本来、一眼レフカメラなどで被写界深度を浅くした状態で被写体にピントを合わせて撮影することで得られる撮影テクニックを、デジタル的に模擬したものである。「背景ぼかし処理」では、カメラの種類や撮影時の状態によらず、任意に背景ぼかし効果を与えられるため、非常に有用な機能である。また、被写体以外の領域の特定方向の高周波成分を意図的に低減することで、移動中の被写体を追随しながら流し撮りした際の画像のような効果を得る、「流し撮り処理」も知られている。これらの処理は、画像中の任意の領域のみの高周波成分を任意の量で低減することで画像効果を生み出している。背景ぼかし処理機能を用いることで、たとえば図1のような撮影画像から図2のような背景のみが大きくぼけた画像を得ることができ、印象的なポートレート作品を作り出すことができる。
【0004】
ところで、背景ぼかし処理や流し撮り処理では、通常の画像全域にわたるぼかし処理などと異なり、二点に留意する必要がある。
【0005】
一点目としては、背景のみにぼかし処理を適用するために、画像の前景領域と背景領域を区別する手段を提供する必要がある。これは例えば、写真プレビュー上で被写体領域をマウスやタッチセンサーなどによってユーザ指定させる方法や、写真撮影時の測距情報やストロボ照射時の各領域の光量などから自動で算出する方法がある。特許文献1には、撮影時にストロボ照射条件と露光条件を変化させた二枚のプレビュー画像の輝度差を求めることで、前景領域と背景領域を区別する方法が開示されている。
【0006】
二点目としては、背景領域のぼかしフィルタ処理時には、前景領域の画素値を参照しないように制御する必要がある。実際の一眼レフカメラでの撮影時でも、背景部分のぼけ画像は背景領域に存在している物体がぼけることで発生しているため、たとえば前景と背景の隣接する領域でも、ぼけ画像の色味は前景の色味の影響を受けずに背景の色味の影響によってのみ決定される。これを無視してしまうと、良好な背景ぼかし処理結果が得られず、たとえば図3のような処理結果となってしまう。この図では、前景が明るく背景が暗い画像に対して、前述の制御を行わずに背景ぼかし処理を行っている。正しくは図2のような効果を得るべきところだが、前景の色味の影響を受けたぼかし処理を行っているために、前景と背景の境界領域で前景の色味が染み出してしまい、まるで被写体の背後に後光が差したような不自然な画像となってしまっている。流し撮り処理においても、同様の課題が発生する。
【0007】
これを制御する方法として、前景と背景の隣接する領域では背景領域の色味を重視したぼかし画像を得ることが有効である。特許文献2には、前景と背景の隣接領域に背景領域の画像を与えることで、背景領域の色味を重視したぼかし画像を得る方法が開示されている。
【0008】
ところで、背景ぼかし処理時には、その画像処理効果を十分に得るために背景画像を広範囲にぼかすことが求められる。ぼかし処理を行う方法として一般にN×Nの空間フィルタを使用することが知られているが、背景画像を大きくぼかすには空間フィルタのサイズをその分大きくとる必要がある。また、画像に対するぼかし処理に必要なフィルタサイズは、画像の解像度に比例する。つまり、同じようなぼかし効果を得る場合であっても、現画像の画素数が大きいときにはより大きなフィルタサイズを必要とする。近年のデジタルカメラの高画素化は著しく、この点でもより大きい空間フィルタサイズを要することとなる。
【0009】
背景ぼかし処理とは別に、画像に対して広範囲にぼかし処理を行う際の工夫として、入力画像を縮小処理し、平滑化フィルタを適用し、拡大処理する技術が知られている。特許文献3には、ある画像に対してN×N画素の平滑化フィルタを適用したい場合に、平滑化処理前に画像を1/Mに縮小し、(N/M)×(N/M)画素の平滑化フィルタを適用し、平滑化処理後に画像をM倍拡大する方法が開示されている。このような手順によって、処理時間を抑えつつ、通常のNxNフィルタ適用時と同様のぼかし効果が得られる。当該技術は通常のぼかし処理であれば有効な手段であるが、背景ぼかしに適用するにあたっては課題が発生する。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2000−307935号公報
【特許文献2】特開2002−300373号公報
【特許文献3】特開平10−232929号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
すなわち、背景ぼかし処理時には前述の通り、ぼかし結果の画素値を求める際に前景領域の画素値を参照しないように制御する必要がある。
【0012】
しかし、当該技術では画像の縮小処理時に前景画素/背景画素にかかわらずに画素値参照を行うため、縮小過程で前景領域の画素値が参照されてしまう。
【0013】
その結果、たとえ縮小処理後の平滑化フィルタ処理において前景画素/背景画素の区別を伴った背景ぼかし処理を行ったとしても、縮小処理後の背景画素の画素値には、縮小処理前の前景画素の画素値の影響が含まれる事態が発生する。
【0014】
以上のとおり、従来の手法では「背景ぼかし処理」を画像弊害なく高速に行うことができなかった。本発明の画像処理方法は、このような事情に鑑みてなされたものである。
【課題を解決するための手段】
【0015】
本発明の画像処理装置は、
画像を入力する画像入力手段と、
前記画像入力手段によって入力された入力画像の各画素に対し、背景画素の存在領域と前景画素の存在領域を指定する背景領域指定手段と、
前記入力画像に対し、高周波成分の低減処理を行い、低減画像を得る高周波低減手段と、
前記入力画像において前記背景領域指定手段で指定された背景領域に対し、前記低減画像における前記背景領域の画素値の合成を行う合成手段と、を持ち、
前記高周波低減手段は、
画像縮小を行う第一処理部と、空間フィルタ処理を行う第二処理部と、画像拡大を行う第三処理部と、を持ち、
前記第一処理部、前記第二処理部において、前記背景領域の境界部を処理する際に、前記背景画素の画素値を前記前景画素の画素値よりも重視して処理を行うことを特徴とする。
【発明の効果】
【0016】
本発明における画像処理装置を用いることで、画像の背景に対して前景の色味の影響を受けずに高周波成分低減処理を高速に実施できる。
【図面の簡単な説明】
【0017】
【図1】背景ぼかし処理前の画像
【図2】背景ぼかし処理後の画像
【図3】不適切な背景ぼかし処理後の画像
【図4】本発明の画像処理方法を実行するためのハードウェア構成
【図5】実施例におけるアプリケーションの画面構成
【図6】背景ぼかし処理対象画像選択時のアプリケーションの画面構成
【図7】前景領域指定時のアプリケーションの画面構成
【図8】本発明の画像処理方法を搭載したアプリケーションのマウスカーソル例
【図9】背景ぼかし処理結果のプレビュー時のアプリケーションの画面構成
【図10】実施例1における画像処理の全体フロー
【図11】実施例1におけるS1400の詳細フロー
【図12】実施例1におけるS1600の詳細フロー
【図13】実施例1におけるS1600で適用する二次元フィルタの係数
【図14】実施例1の応用におけるS1600で適用する一次元フィルタの係数
【図15】実施例1におけるS1700の詳細フロー
【図16】実施例2における画像処理の全体フロー
【図17】実施例3における画像処理の全体フロー
【発明を実施するための形態】
【0018】
以下、本発明の実施の形態について詳細に説明する。
【0019】
図4に本発明で使用する画像処理方法のブロック図を示す。画像処理方法として、パーソナルコンピュータ(PC)を使用すると想定して説明するが、これはあくまで実施の1つの形態を例として示したものであり、本発明は以下の実施に限定されるものではない。
【0020】
(ハードウェア構成の説明)
CPU201は、中央演算ユニット(Central Processing Unit)で、他の機能ブロックや装置の制御を行う。ブリッジ部202は、CPU201と他の機能ブロックの間でデータのやり取りを制御する機能を提供している。
【0021】
ROM(Read Only Memory)203は読み込み専用の不揮発メモリであり、BIOS(Basic Input/Output System)と呼ばれるプログラムが格納されている。BIOSはPCが起動したときに最初に実行されるプログラムであり、2次記憶装置205、表示制御装置207、入力装置209、出力装置210などの周辺機器の基本入出力機能を制御するものである。
【0022】
RAM(Random Access Memory)204は、高速の読み/書き可能な記憶領域を提供する。
【0023】
2次記憶装置205は、大容量の記憶領域を提供するHDD(Hard Disk Drive)である。BIOSが実行されると、HDDに格納されているOS(Operating System)が実行される。OSはすべてのアプリケーションで利用可能な基本的な機能や、アプリケーションの管理、基本GUI(Graphical User Interface)を提供する。アプリケーションは、OSが提供するGUIを組み合わせることで、アプリケーション独自の機能を実現するUIを提供できる。
【0024】
OSや、他のアプリケーションの実行プログラムや作業用に使用しているデータは、必要に応じてRAM204または2次記憶装置205に格納される。
【0025】
本実施例においては、本発明で使用する画像処理方法はアプリケーション上に搭載されており、該アプリケーションの実行を介して利用する。なお、本発明で使用する画像処理方法を搭載したアプリケーションの説明は後述する。
【0026】
表示制御部206は、OSやアプリケーションに対して行われるユーザの操作の結果をGUIの画像データとして生成し、表示装置207で表示するための制御を行う。表示装置207には液晶ディスプレイや、CRT(Cathode Ray Tube)ディスプレイが使用できる。
【0027】
I/O制御部208は、複数の入力装置209、出力装置210とのインターフェースを提供するものである。代表的なインターフェースとして、USB(Universal Serial Bus)やPS/2(Personal System/2)がある。
【0028】
入力装置209には、キーボード、マウスといったユーザの意志を画像検索装置に入力するものがある。さらに、デジタルカメラ、USBメモリ、CF(Compact Flash)メモリ、SD(Secure Digital)メモリカードといった記憶装置などを接続することで、画像データを転送することも可能である。
【0029】
出力装置210にはプリンタが接続され、所望の印刷結果を得ることが可能である。
【0030】
(アプリの説明)
以下、本発明で使用する画像処理方法を搭載したアプリケーション(以下、本アプリケーションと呼ぶ)について説明する。
【0031】
前述のPCを起動し、OSから本アプリケーションを呼び出すことで本アプリケーションは起動する。
【0032】
起動時の本アプリケーションの画面を図5に示す。本アプリケーションの操作の流れを説明する前に、本アプリケーションを構成するGUI部品の名称と機能概要を説明する。
【0033】
500は本アプリケーションのメインウィンドウである。メインウィンドウは前述の通り、OSが提供するGUIを組み合わせて形成されている。ウィンドウの拡大縮小、移動、最大化、最小化といった基本的な操作はOSが提供する機能により実現するものであるため、詳細な説明は割愛する。
【0034】
画像選択ボタン501は背景ぼかし処理の対象画像を選択する際に使用する。このボタンを押すことで、ファイル選択ダイアログ(図示せず)が起動する。ユーザはファイルダイアログを通じて、2次記憶装置205や入力装置209に接続された各種記憶装置に記憶された任意の画像ファイルを選択することが可能である。なお、すでに画像が選択済みの状態でこのボタンを押した場合には、すでに選択した画像を取り消して再度画像を選択能となる。
【0035】
画像プレビュー領域505には、画像選択ボタン501の操作によって選択された画像のプレビューが表示される。画像が未選択の場合には白紙表示がされる。
【0036】
画像ファイル名表示領域506には、画像選択ボタン501の操作によって選択された画像のファイル名情報が表示される。画像が未選択の場合には「No Image」の文字列が表示される。
【0037】
また、この領域は後述の領域指定ボタン503押下時には前景領域を指定するための入力領域としても使用される。さらに、前景領域を指定した状態において後述の強度指定スライダー502を操作した際の背景ぼかし効果のプレビュー画面としても使用される。
【0038】
領域指定ボタン503は画像中の前景領域を指定する際に使用する。このボタンを押すことで、マウスを介して画像プレビュー領域505中に任意の領域を指定可能となる。なお、すでに領域が選択済みの状態でこのボタンを押した場合には、すでに指定した領域を取り消して再度領域を指定可能となる。
【0039】
強度指定スライダー502は背景ぼかしの強度を指定する際に使用する。このスライダーを操作することで、背景ぼかしの強度をオフ、弱、中、強の4段階に指定可能となる。強度を強くするほど、背景に対しより強いぼかし効果が得られる。強度指定スライダー操作時には瞬時に背景ぼかしの画像処理が実行され、実行結果が画像プレビュー領域に反映される。これにより、ユーザは背景ぼかし処理時の画像効果を確認しながら適切な強度を指定できる。
【0040】
決定ボタン504は背景ぼかし処理を決定して処理後の画像を保存する際に使用する。このボタンを押すことで、ファイル選択ダイアログ(図示せず)が起動する。ユーザはファイルダイアログを通じて、2次記憶装置205や入力装置209に接続された各種記憶装置に任意のファイル名にて画像を保存できる。
【0041】
以下、本アプリケーションを使用した実際の操作の流れを説明する。
【0042】
前述の通り、本アプリケーション起動時には図5の状態のダイアログが表示される。このときはまだ画像未選択状態であるため、強度指定スライダー502、領域指定ボタン503、決定ボタン504はグレーアウト表示がされており、操作できない状態となっている。
【0043】
ユーザはまず、画像選択ボタンを押下して画像を選択する。このとき選択する画像ファイルフォーマットはJPEG,PNG,TIFFなどいずれでもよい。これらの画像ファイル内の画像情報はフォーマットによらず、RGB各チャンネル16ビットのフルカラービットマップデータとしてRAM204に展開されるため、本発明の画像処理方法はフォーマットには依存せずに良好な結果を得られる。
【0044】
ユーザが画像選択ボタン501を押してファイル選択ダイアログを起動して画像を選択すると、本アプリケーションは画像ファイルフォーマットに応じて適切なデコーダプログラムを選択実行して画像のデコードを行う。デコード結果はビットマップデータとしてRAM204に展開される。デコードが終わると、本アプリケーションはデコード結果のビットマップデータを画像プレビュー領域505に収まるように適宜拡大縮小して表示する。
【0045】
例えば、ユーザが画像「c:¥sample.jpg」を選択した場合、図6のようにデコード結果が表示される。このときは背景ぼかし領域を未指定であるため、強度指定スライダー502、決定ボタン504はグレーアウト表示されており、操作できない状態となっている。
【0046】
なお、ユーザが画像選択を誤った場合には、ユーザは画像選択ボタン501を再度押すことで画像を選択しなおすことが可能である。
【0047】
この状態でユーザが領域指定ボタンを押すと、OSが表示するマウスカーソルの状態が通常の矢印表示(図8(a))から鉛筆表示(図8(b))に切り替わり、画像プレビュー領域505上に任意の前景領域を指定可能となる。
【0048】
ユーザは画像プレビュー領域505上でマウスボタンを押下しながらドラッグ操作することで、任意の曲線を指定できる。曲線指定後にマウスボタンを離すと、曲線の始点と終点を直線で結んだ閉領域が点線表示され、前景領域として規定される。このときマウスカーソルは再び通常の矢印表示に戻る。
【0049】
なお、ユーザが領域指定を誤った場合には、ユーザは領域指定ボタン503を再度押すことで領域を指定しなおすことが可能である。
【0050】
前景領域指定後の画面は図7のように表示される。このときは画像に対して背景ぼかし領域が指定済み状態であるので、強度指定スライダー502、決定ボタン504は操作可能となる。
【0051】
ユーザは強度指定スライダー502を操作して、背景ぼかしの強度を任意に指定できる。強度指定スライダー502の選択位置が変化すると、アプリケーションは本発明の画像処理方法を用いて選択された強度に応じた背景ぼかし処理を行い、処理結果をプレビュー領域505に表示する。
【0052】
例えばユーザが強度指定スライダーを「中」に指定した場合、画像中の背景領域に対して中程度の背景ぼかし処理が施され、処理結果が図9のように表示される。
【0053】
なお、この状態で強度指定スライダーを変化させた場合には、それぞれの強度に応じた背景ぼかし処理が実行し直されるため、ユーザは画像に対して適切な背景ぼかし強度を容易に決定できる。
【0054】
この状態でユーザが決定ボタン504を押すと、ファイル選択ダイアログが起動する。ダイアログ上でファイル名とフォーマットを設定すると、本アプリケーションはRAM204から背景ぼかし処理結果のビットマップデータを取得し、フォーマットに応じて適切なエンコーダプログラムを選択実行して画像のエンコードを行い、結果を保存する。
【0055】
[実施例1]
以上が本アプリケーションの動作概要であるが、本アプリケーションが実行する本発明の画像処理方法について、第一の実施形態における詳細な動作フローを図10を用いて説明する。
【0056】
S1000では、画像処理を施す対象画像のビットマップデータを取得する。前述の通り、本アプリケーションでは画像選択ボタンを押したときに画像をデコードし、ビットマップデータとしてRAM204に展開するので、その情報を取得すればよい。
【0057】
S1100では、対象画像の前景領域を表す情報を取得する。本アプリケーションで領域指定ボタンをもちいて指定した前景領域がこれに相当する。対象画像のビットマップデータの実サイズに相当する二値ビットマップ画像を作成し、前景領域に相当する部分を1、背景領域に相当する部分を0としてマスク画像を作成する。
【0058】
S1200では、S1000で取得した画像を複製して内部に保持する。これはS1600において前景画像と背景画像の合成をする際に、前景画像の情報として利用するためのものである。つまり、前景画像部分の情報のみが分かればよいので、S1100で作成したマスク画像を参照しながら必要な領域の情報のみを保持するようにしてもよい。これにより、動作時の使用メモリ量を削減できる。
【0059】
S1300では、取得した画像サイズと強度指定スライダー502の値から画像の縮小率Rを求める。画像の縮小率を大きくすればするほど、縮小後に背景ぼかしフィルタが適用される領域の画角が大きくなるので、強いぼかし効果が得られる。
【0060】
本実施例では、画像の長辺の画素数をWとしたとき、「W/200」「W/100」「W/50」の値の小数部を切り上げた値をそれぞれ、強度「弱」「中」「強」での画像の縮小率とする。
【0061】
S1400では、S1000で取得したビットマップデータとS1100で生成したマスク画像を参照しながら画像縮小処理を行う。このステップでは、縮小時に前景領域の画素の色味の影響を受けないように画素参照を行うが、詳細については後述する。
【0062】
S1500では、S1100で生成したマスク画像を縮小する。このステップでの縮小処理は二値のマスク画像を単純に平均化縮小し、生じた小数部を切り上げるのみであるので詳細の説明は割愛する。
【0063】
S1600では、S1400で縮小したビットマップデータとS1500で縮小したマスク画像を参照しながら背景ぼかし処理を行う。このステップでは、背景ぼかし時に前景領域の画素の色味の影響を受けないように画素参照を行うが、詳細については後述する。
【0064】
S1700では、S1600で背景ぼかし処理したビットマップデータとマスク画像を参照しながら画像拡大処理を行う。このステップでは、拡大時に前景領域の画素の色味の影響を受けないように画素参照を行うが、詳細については後述する。
【0065】
S1800では、S1200で保持した画像とS1700で拡大したビットマップデータとS1100で作成したマスク画像を参照しながら画像合成処理を行う。S1200で保持した画像の各画素に対し、マスク画像における対応する座標での画素値を調べ、画素値が0であった場合には背景ぼかし画像の画素値を適用する。具体的には、S1500で拡大したビットマップデータにおける対応する座標値での画素値を取得して適用する。
【0066】
(S1400:画像縮小)
S1400での画像縮小処理の詳細を図11を用いて説明する。
【0067】
画像縮小処理はS1000で取得した幅w、高さhの画像を元に、平均値縮小によって幅w’、高さh’の画像を生成する。
【0068】
S1401では、縮小先画像のy座標のループカウンタyを0にセットしてループ処理を開始する。
【0069】
S1402では、縮小先画像のx座標のループカウンタxを0にセットしてループ処理を開始する。
【0070】
S1403では、縮小元画像における縮小対象ウィンドウを設定する。ここでウィンドウの領域はx、y、縮小率Rから求められ、以下の4点(x×R,y×R)、(x×R+R−1,y×R)(x×R,y×R+R−1)(x×R+R−1,y×R+R−1)を頂点座標に持つ矩形領域である。
【0071】
S1404では、ウィンドウ内のマスク画像の画素値を調べ、すべての画素値が1であればウィンドウ内はすべて前景領域であると判断する。
【0072】
前景領域については、後のS1700にて、S1200で保持した前景画像の情報を用いて置換処理することになるため、ぼかし処理結果は不要である。そこでS1404へすすむ。マスク画素のいずれか一画素でも画素値が0であれば、ウィンドウ内は前景領域と背景領域の混合領域であると判断してS1410へすすむ。
【0073】
S1410では、平均値縮小処理で使用する変数を初期化する。具体的には、ウィンドウ内の累積画素値を保持する累積画素値カウンタ配列Vと、ウィンドウ内の背景画素数を保持する背景画素数カウンタGをそれぞれゼロクリアする。なお、VはRGB3チャンネルの値を独立に保持できる配列領域であり、V[0]にはRチャンネルの情報が、V[1]にはGチャンネルの情報が、V[2]にはBチャンネルの情報がそれぞれ保存される。
【0074】
S1411では、ウィンドウ内における相対y座標のループカウンタdyを0にセットしてループ処理を開始する。
【0075】
S1422では、ウィンドウ内における相対x座標のループカウンタdxを0にセットしてループ処理を開始する。
【0076】
S1413では、ウィンドウ内の注目座標(dx,dy)におけるマスク画像の画素値を調べ、背景画素であればS1414へ進む。前景画素であれば、縮小処理時には参照不要な画素なのでS1415へ進む。
【0077】
S1414では、注目画素値をVに加算し、Gをインクリメントする。具体的には、注目画素のRGB値をそれぞれ取得し、V[0]にはRチャンネルの値を、V[1]にはGチャンネルの値を、V[2]にはBチャンネルの値を加算する。
【0078】
S1415では、dxをインクリメントする。
【0079】
S1416では、dx=Rとなった場合にはループを終了してS1417へ進む。それ以外の場合にはループ開始場所へ戻ってS1413へ進む。
【0080】
S1417では、dyをインクリメントする。
【0081】
S1418では、dy=Rとなった場合にはループを終了してS1419へ進む。それ以外の場合にはループ開始場所へ戻ってS1412へ進む。
【0082】
S1419では、V/Gを求め、この値を縮小後画像における座標(x、y)の画素値とする。具体的には、RGB値(V[0]/G,V[1]/G,V[2]/G)を画素値とする。
【0083】
S1420では、ウィンドウ内における全画素の画素平均値を縮小後画像における座標(x、y)の画素値とする。
【0084】
S1421では、ループカウンタxをインクリメントする。
【0085】
S1422では、x>=w/Rとなった場合にはループを終了してS1423へ進む。それ以外の場合にはループ開始場所へ戻ってS1403へ進む。
【0086】
S1423では、ループカウンタyをインクリメントする。
【0087】
S1424では、y>=h/Rとなった場合にはループを終了してENDへ進む。それ以外の場合にはループ開始場所へ戻ってS1402へ進む。
【0088】
(S1600:背景ぼかし)
S1600での背景ぼかし処理の詳細を図12を用いて説明する。
【0089】
背景ぼかし処理はS1400にて行った縮小後の対象画像およびマスク画像に対して行われる。ここでは縮小後の幅w’、高さh’の画素数の画像に対して、図13のような3x3画素のガウシアンフィルタを適用する場合を例にとって説明する。
【0090】
S1601では、y座標のループカウンタyを0にセットしてループ処理を開始する。
【0091】
S1602では、x座標のループカウンタxを0にセットしてループ処理を開始する。
【0092】
S1603では、ループカウンタx、yの値から求まる座標(x,y)を注目画素としたときのマスク画像の画素値を調べ、注目画素の画素値が1であれば前景画素であると判断する。
【0093】
前景画素の領域については、後のS1700にて、S1200で保持した前景画像の情報を用いて置換処理することになるため、ぼかし処理結果は不要である。そこでS1621へすすむ。注目画素の画素値が0であれば背景画素であると判断してS1610へすすむ。
【0094】
S1610では、3×3のガウシアンフィルタウィンドウ内のフィルタ処理で使用する変数を初期化する。具体的には、ウィンドウ内の重み付き累積画素値を保持する累積画素値カウンタVと、ウィンドウ内の累積重み値を保持する累積重み値カウンタGをそれぞれゼロクリアする。
【0095】
S1611では、注目画素を中心とした3×3画素の小領域における相対y座標のループカウンタdyを0にセットしてループ処理を開始する。
【0096】
S1622では、注目画素を中心とした3×3画素の小領域における相対x座標のループカウンタdxを0にセットしてループ処理を開始する。
【0097】
S1613では、小領域内の相対座標(dx,dy)におけるマスク画像の画素値を調べ、背景画素であればS1614に進む。前景画素であれば、背景ぼかし処理においては参照不要な画素なのでS1615へ進む。
【0098】
S1614では、ウィンドウ内の位置に応じたフィルタ係数を求めて画素値に積算し、重み付き画素値を求める。求めた重み付き画素値をVに加算し、フィルタ係数をGに加算する。
【0099】
S1615では、dxをインクリメントする。
【0100】
S1616では、dx=3となった場合にはループを終了してS1617へ進む。それ以外の場合にはループ開始場所へ戻ってS1613へ進む。
【0101】
S1617では、dyをインクリメントする。
【0102】
S1618では、dy=3となった場合にはループを終了してS1619へ進む。それ以外の場合にはループ開始場所へ戻ってS1612へ進む。
【0103】
S1619では、V/Gを求め、これを用いて注目画素の画素値を更新する。
【0104】
S1621では、xをインクリメントする。
【0105】
S1622では、x=w’となった場合にはループを終了してS1623へ進む。それ以外の場合にはループ開始場所へ戻ってS1603へ進む。
【0106】
S1623では、yをインクリメントする。y=h’となった場合にはループを終了してENDへ進む。それ以外の場合にはループ開始場所へ戻ってS1602へ進む。
【0107】
(S1700:画像拡大)
S1700での画像拡大処理の詳細を図13を用いて説明する。
【0108】
本実施例では、画像の拡大処理時には一度に線形拡大せずに、ニアレストネイバー法による二倍拡大と3×3画素平滑化フィルタを繰り返し適用している。このようにすることで拡大時に生じる画像弊害を抑える技術は公知のものであり、例えば特開平8−186708がある。しかし、当該技術を背景ぼかし処理に適用するにあたっては、前述の縮小処理、平滑化処理と同様に注目画素が前景か背景かの考慮が必要となる。
【0109】
S1701では、拡大処理時の累積拡大率カウンタR´を1にセットしてループ処理を開始する。このカウンタは、拡大処理の繰り返しによって画像が何倍拡大されたかを記憶しておくものである。ループ開始時はまだ拡大を行っていないため、1(等倍)を初期値としてセットしている。
【0110】
S1702では、ニアレストネイバー法を用いて画像を二倍拡大する。なお、ここでの拡大処理はマスクを考慮せずに通常の拡大処理を行ってよい。なぜなら、ここでの注目画素の画素値については、すでに前述の縮小処理において、前景画素の影響が排除されているためである。すなわち、前景画素と背景画素が隣接する領域においては、背景画素の画素値のみでもって算出した画素値を保持しているので、ニアレストネイバー法による拡大処理時にはこの画素値をそのまま用いて拡大すればよい。
【0111】
S1703では、拡大後の画像に対して3×3画素の平滑化フィルタを適用する。なお、ここでの平滑化フィルタ適用時にはマスクを考慮する必要がある。なぜなら、ここでは注目画素と隣接画素の画素値を混合することになるため、「注目画素が背景画素だが、隣接画素が前景画素である」という状況が発生するからである。このような場合に前景画素値が混合されることを防ぐために、S1600と同様の手法でマスク情報を考慮しながら平滑化処理を行う。
【0112】
なお、マスク情報としてはS1100で作成したマスク画像を用いればよく、当該マスク画像をS1500と同様に適宜縮小変倍することで本ステップにおける最適なマスク画像を生成できる。
【0113】
S1704では、すでに画像の二倍拡大を行っているのでR’を二倍する。
【0114】
S1705では、R’とR/2を比較する。ここでRとはS1300でもとめた画像縮小率である。この比較により、再度画像の二倍拡大をしてもS1000で取得した対象画像の画素数を超えないことを確認する。R’>R/2である場合には、再度画像の二倍拡大をすると対象画像の画素数を超えてしまうため、ループを終了してS1706へ進む。
【0115】
S1706では、ニアレストネイバー法を用いて画像をR/R’倍拡大する。ここでの処理はS1702と同様に行えばよい。
【0116】
S1707では、拡大後の画像に対して3×3画素の平滑化フィルタを適用する。ここでの処理はS1703と同様に行えばよい。
【0117】
<実施例1の応用>
本実施例では、画像縮小率Rを入力画像のサイズと強度により決定し、縮小後の背景ぼかし処理で用いるガウスフィルタのフィルタサイズは3×3に固定したが、たとえば縮小率Rを半減させてガウスフィルタのフィルタサイズを5×5に倍増してもよい。ガウスフィルタのサイズを大きくとるほど、背景ぼかし処理自体の画質は向上する。反対に、縮小率Rを大きくとるほど、背景ぼかし処理の処理時間は低減する。本発明の技術を実施するにあたっては、実施対象の必要とする要件に応じてこれらのバランスを適宜決定すればよい。
【0118】
[実施例2]
実施例1に述べた構成により、特許文献2にあげたような通常のフィルタ演算処理に対してより高速な処理結果が得られるが、そのために必要な中間画像領域の確保や拡大縮小処理においても画像処理の処理時間は発生する。入力画像の画素数とぼかし強度が十分に大きいときには、本発明の技術を用いることが処理時間の面で有利であることは明らかだが、入力画像の画素数とぼかし強度の組み合わせによっては、通常のフィルタ演算処理を実施したほうが高速な場合も考えられる。そのため、S1000の段階で入力画像の画素数とぼかし強度を調べることで、通常のフィルタ演算と本発明の技術とどちらが有利であるかを概算し、その結果に応じて処理フローを切り替えてもよい。これにより、入力画像の画素数とぼかし強度によらず、常に最適な処理負荷で背景ぼかし処理を行うことができる。
【0119】
本実施例では、そのような切り替え方法について図16を用いて説明する。
【0120】
S2000〜S2300については、第一の実施例のS1000〜S1300と同様の処理であるため、説明を割愛する。
【0121】
S2305では、S2300で求めた画像の縮小率Rを評価する。縮小率Rの値が4より大きければ、4倍以上の拡大縮小処理を行うことで処理の高速化に寄与する率が高いと判断し、S2400へ進む。縮小率Rの値が4以下であれば、拡大縮小処理のオーバヘッドの方が大きいため、処理の高速化には寄与しないと判断し、2900へ進む。
【0122】
S2400〜S2700については、第一の実施例のS1400〜S1700と同様の処理であるため、説明を割愛する。
【0123】
S2900では、S2000で取得したビットマップデータとS2100で取得したマスク画像を参照しながら背景ぼかし処理を行う。背景ぼかし処理の際に用いるガウスフィルタのサイズは、S2300で求めたRを用いて3×Rとする。ただし、フィルタサイズが偶数になる場合には3×R+1とする。このようにフィルタサイズを調整することで、画像拡大縮小を行った場合と同様のぼかし強度による背景ぼかし処理結果が得られる。このステップでは、フィルタサイズが異なる以外については、S2600と同様に処理を行う。すなわち、背景ぼかし時に前景領域の画素の色味の影響を受けないように画素参照を行う。
【0124】
S2800については、第一の実施例のS1800と同様の処理であるため、説明を割愛する。
【0125】
<実施例2の応用>
本実施例では、入力画像の画像サイズに応じて、通常の背景ぼかし処理と拡大縮小を伴う背景ぼかし処理を切り替えたが、入力画像の前景/背景領域の構成比率に応じて切り替えてもよい。例えば、入力画像において背景領域が1/2以上を占める場合は、画像における背景領域の画質が重要であると判断し、S2305においてRの値によらずにS2900へ進むとしてもよい。
【0126】
[実施例3]
実施例1では、背景ぼかし処理時のフィルタサイズを3×3に固定していたが、入力画像の画像サイズや入力画像の前景/背景領域の構成比率に応じてフィルタサイズを決定してもよい。このようにすることで、画質と処理速度のトレードオフを考慮した処理結果が得られる。すなわち、入力画像の画素数が大きいときには、背景ぼかし時のフィルタサイズを下げることで画像の拡大縮小による処理速度の向上を重視させることができる。反対に、入力画像の画素数が小さいときには、画像の拡大縮小による処理速度の向上の寄与は少ないと考え、背景ぼかし時のフィルタサイズを上げることで処理結果の画質向上を重視させることができる。
【0127】
前景/背景領域の構成比率についても同様に背景領域の構成比率が高いときには、背景ぼかし処理部分の画質が重要であると考え、画質向上を重視させることができる。
【0128】
本実施例では、そのような制御方法について図17を用いて説明する。
【0129】
S3000〜S3200については、第一の実施例のS1000〜S1200と同様の処理であるため、説明を割愛する。
【0130】
S3205では、入力画像の画素数と入力画像の前景/背景領域の構成比率に応じてフィルタサイズFを算出する。ここでは、入力画像の長辺方向の画素数をW、背景の構成比率をBとした場合に、F=3×2B×1280/Wとする。小数部は切り捨てて整数化する。ただし、Fが偶数になった場合には1を加算する。このように設定することで、入力画像の長辺方向の画素数が大きい画像や、背景の構成比率が小さい画像ではFは小さくなり、最小1となる。
【0131】
S3300では、取得した画像サイズと強度指定スライダー502の値とS3205で求めたFから画像の縮小率Rを求める。画像の縮小率を大きくすればするほど、縮小後に背景ぼかしフィルタが適用される領域の画角が大きくなるので、強いぼかし効果が得られる。
【0132】
本実施例では、画像の長辺の画素数をWとしたとき、「(3/F)×(W/200)」「(3/F)×(W/100)」「(3/F)×(W/50)」の値の小数部を切り上げた値をそれぞれ、強度「弱」「中」「強」での画像の縮小率とする。このように設定することで、フィルタサイズFが大きい際には画像の縮小率が低くなり、結果としてFがいくつの場合であっても、背景ぼかし処理と拡大縮小処理の組み合わせで得られるぼかし強度が一定に保たれる。
【0133】
S3400〜S3500については、第一の実施例のS1400〜S1500と同様の処理であるため、説明を割愛する。
【0134】
S3600では、S3400で縮小したビットマップデータとS3500で縮小したマスク画像を参照しながら背景ぼかし処理を行う。背景ぼかし処理の際に用いるガウスフィルタのサイズは、S3200で求めたFを用いる。このステップでは、フィルタサイズが異なる以外については、S1600と同様に処理を行う。すなわち、背景ぼかし時に前景領域の画素の色味の影響を受けないように画素参照を行う。
【0135】
S3700〜S3800については、第一の実施例のS1700〜S1800と同様の処理であるため、説明を割愛する。
【0136】
<実施例1〜3のその他の応用>
本実施例では背景ぼかし処理についての適用を説明したが、画像中の所定の領域の高周波成分を低下させるような種類のエフェクト処理であれば同様に適用が可能である。例えば、被写体の背景に対して水平方向の高周波成分を低下させることで、移動する被写体を追いかけながら撮影する、いわゆる「流し撮り」風の画像効果が得られることが知られている。このような画像効果を得る際にも、水平方向の平滑化フィルタの肥大化を防ぐ際には本発明の技術が同様に適用できる。
【0137】
また、本実施例のアプリケーションでは、強度指定スライダー502の操作の都度、選択画像に対してビットマップデータそのものの画素数で処理を行った。しかし、画像プレビュー領域の表示解像度にあらかじめ縮小した画像を別途用意しておき、スライダー操作時には縮小画像に対して処理を行い、決定ボタン504が押された段階で選択画像のビットマップデータそのものに処理を施して画像保存してもよい。さらに、スライダー操作によって作成したプレビュー画像をキャッシュしておき、再度スライダー操作を切り替えた際にはそちらを参照するように制御してもよい。このようにすることで、ユーザはストレスなくプレビュー表示を行いつつ、強度確定時には高画質な処理結果を得ることができる。
【0138】
また、本実施例の平滑化処理では、図13のような3×3のガウシアンフィルタを用いたが、これについて例えば図14(a)のような1×3の平滑化フィルタと図14(b)のような3×1の平滑化フィルタを直列に用いて演算回数を減らすことが可能である。このような場合であっても、それぞれのフィルタ適用時に本実施例と同様にマスク情報を参照することで前景画素の色味の影響を排除してフィルタ処理が実行できる。
【0139】
また、本実施例のアプリケーションでは、ユーザのマウス操作によって被写体領域を指定させたが、領域選択時には画像の輝度差などをヒントとして領域境界を自動トレースさせてもよい。このような技術は一般の画像加工アプリケーションにおいて公知である。その他特許文献1をはじめとした公知の技術を用いて前景領域を自動選択してもよい。本発明の技術は、前景画像/背景画像の選択技術によらず好適に作用するが、本発明の課題とするところの「背景ぼかし領域に前景画素の色味が入り込む」現象を回避するためには、これら技術によって前景/背景を適切に領域選択することが望ましい。
【0140】
また、本実施例では単体のアプリケーションとしての形態を例示して説明したが、既存のアプリケーションから呼び出して使用するサブプログラムやプラグインなどの形式で実現してもよい。
【0141】
また、本実施例では、RGB3チャンネルのカラー画像を対象に処理を説明したが、YCCやCMYKなどといった異なる座標系で定義されるカラー画像に対しても同様に実施可能であることは言うまでもない。その場合、累積画素値カウンタVの配列を適宜用意し、各チャンネルの値を累積させればよい。また、カラー画像でなくとも単一のグレースケール画像でも本発明の課題は同様に発生しており、これを解決する際にも本実施例を応用して適用することが可能である。その場合、累積画素値カウンタVを配列でなく単一のカウンタ変数領域として用意し、輝度や明度といったグレースケール情報を累積させればよい。
【0142】
また、本実施例では、単一のPC上のアプリケーションとしての形態を例示して説明したが、複数の機器(例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタ等)から構成されるシステムに適用してもよい。もしくは、一つの機器からなるPC以外の装置(例えば、プリンタ、複写機、ファクシミリ装置等)に適用してもよい。
【0143】
また、本発明の目的は、以下によっても達成できる。まず、前述した実施形態の機能を実現するソフトウエアのプログラムコードを記録した記憶媒体(または記録媒体)を、システムあるいは装置に供給する。次に、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行すればよい。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけではない。例えば、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0144】
さらに、まず、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、該プログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【符号の説明】
【0145】
201 CPU
202 ブリッジ部
203 ROM
204 RAM
205 2次記憶装置
206 表示制御部
207 表示制御装置
208 I/O制御部
209 入力装置
210 出力装置
501 画像選択ボタン
502 強度指定スライダー
503 領域指定ボタン
504 決定ボタン
505 画像プレビュー領域
506 画像ファイル名表示領域
【特許請求の範囲】
【請求項1】
デジタル画像データに対して、画像の背景部分の高周波成分を低減する画像処理装置において、
画像を入力する画像入力手段と、
前記画像入力手段によって入力された入力画像の各画素に対し、背景画素の存在領域と前景画素の存在領域を指定する背景領域指定手段と、
前記入力画像に対し、高周波成分の低減処理を行い、低減画像を得る高周波低減手段と、
前記入力画像において前記背景領域指定手段で指定された背景領域に対し、前記低減画像における前記背景領域の画素値の合成を行う合成手段と、を持ち、
前記高周波低減手段は、
画像縮小を行う第一処理部と、空間フィルタ処理を行う第二処理部と、画像拡大を行う第三処理部と、を持ち、
前記第一処理部、前記第二処理部において、前記背景領域の境界部を処理する際に、前記背景画素の画素値を前記前景画素の画素値よりも重視して処理を行うことを特徴とする、画像処理装置。
【請求項2】
前記画像処理装置は、
処理強度を指定する処理強度指定手段を持ち、
前記高周波低減手段は、
前記入力画像の画素数と前記処理強度と前記背景領域の情報の少なくともいずれか一つに応じて、前記第一処理部および前記第三処理部の拡縮倍率と前記第二処理部の空間フィルタサイズの少なくとも一方を決定する制御手段を持つ
ことを特徴とする、請求項1に記載の画像処理装置。
【請求項3】
前記制御手段は、前記第一処理部及び前記第三処理部の拡縮倍率を等倍に決定した際には、前記第一処理部及び前記第三処理部を行わないことを特徴とする、請求項2に記載の画像処理装置。
【請求項4】
前記第一処理部は、背景画素に重みをつけて平均値縮小処理を行うことを特徴とする、請求項1乃至請求項3の何れか1項に記載の画像処理装置。
【請求項5】
前記第三処理部は、ニアレストネイバー法による画像拡大後に背景画素に重みをつけて平滑化フィルタ処理を行うことを繰り返すことを特徴とする、請求項1乃至請求項4の何れか1項に記載の画像処理装置。
【請求項6】
デジタル画像データに対して、画像の背景部分の高周波成分を低減する画像処理方法において、
画像を入力する画像入力工程と、
前記画像入力手段によって入力された入力画像の各画素に対し、背景画素の存在領域と前景画素の存在領域を指定する背景領域指定工程と、
前記入力画像に対し、高周波成分の低減処理を行い、低減画像を得る高周波低減工程と、
前記入力画像において前記背景領域指定工程で指定された背景領域に対し、前記低減画像における前記背景領域の画素値の合成を行う合成工程と、を持ち、
前記高周波低減工程は、
画像縮小を行う第一処理工程と、空間フィルタ処理を行う第二処理工程と、画像拡大を行う第三処理工程と、を持ち、
前記第一処理工程、前記第二処理工程において、前記背景領域の境界部を処理する際に、前記背景画素の画素値を前記前景画素の画素値よりも重視して処理を行うことを特徴とする、画像処理方法。
【請求項7】
請求項6に記載の画像処理方法を実行するためのプログラムコードが記憶された記憶媒体。
【請求項8】
デジタル画像データに対して、画像の背景部分の高周波成分を低減する画像処理装置において、
画像を入力する画像入力手段と、
前記画像入力手段によって入力された入力画像の各画素に対し、背景画素の存在領域と前景画素の存在領域を指定する背景領域指定手段と、
前記入力画像に対し、高周波成分の低減処理を行い、低減画像を得る高周波低減手段と、
前記入力画像において前記背景領域指定手段で指定された背景領域に対し、前記低減画像における前記背景領域の画素値の合成を行う合成手段と、を持ち、
前記高周波低減手段は、
画像縮小を行う第一処理部と、空間フィルタ処理を行う第二処理部と、画像拡大を行う第三処理部と、を持ち、
前記第一処理部、前記第二処理部それぞれの処理は、
前記入力画像を小領域に区分した領域を処理対象として処理するものであって、
前記処理対象の領域が前記背景領域指定手段によって前記前景画素と前記背景画素との混在領域であると指定された際には、
処理対象の領域における、処理前の背景画素の画素値平均をAとし、
処理対象の領域における、処理前の全画素の画素値平均をBとし、
処理対象の領域における、処理後の全画素の画素値平均をCとしたときに
それぞれの画素値平均がB<C<Aの関係を満たすようにCを決定することを特徴とする、画像処理装置。
【請求項1】
デジタル画像データに対して、画像の背景部分の高周波成分を低減する画像処理装置において、
画像を入力する画像入力手段と、
前記画像入力手段によって入力された入力画像の各画素に対し、背景画素の存在領域と前景画素の存在領域を指定する背景領域指定手段と、
前記入力画像に対し、高周波成分の低減処理を行い、低減画像を得る高周波低減手段と、
前記入力画像において前記背景領域指定手段で指定された背景領域に対し、前記低減画像における前記背景領域の画素値の合成を行う合成手段と、を持ち、
前記高周波低減手段は、
画像縮小を行う第一処理部と、空間フィルタ処理を行う第二処理部と、画像拡大を行う第三処理部と、を持ち、
前記第一処理部、前記第二処理部において、前記背景領域の境界部を処理する際に、前記背景画素の画素値を前記前景画素の画素値よりも重視して処理を行うことを特徴とする、画像処理装置。
【請求項2】
前記画像処理装置は、
処理強度を指定する処理強度指定手段を持ち、
前記高周波低減手段は、
前記入力画像の画素数と前記処理強度と前記背景領域の情報の少なくともいずれか一つに応じて、前記第一処理部および前記第三処理部の拡縮倍率と前記第二処理部の空間フィルタサイズの少なくとも一方を決定する制御手段を持つ
ことを特徴とする、請求項1に記載の画像処理装置。
【請求項3】
前記制御手段は、前記第一処理部及び前記第三処理部の拡縮倍率を等倍に決定した際には、前記第一処理部及び前記第三処理部を行わないことを特徴とする、請求項2に記載の画像処理装置。
【請求項4】
前記第一処理部は、背景画素に重みをつけて平均値縮小処理を行うことを特徴とする、請求項1乃至請求項3の何れか1項に記載の画像処理装置。
【請求項5】
前記第三処理部は、ニアレストネイバー法による画像拡大後に背景画素に重みをつけて平滑化フィルタ処理を行うことを繰り返すことを特徴とする、請求項1乃至請求項4の何れか1項に記載の画像処理装置。
【請求項6】
デジタル画像データに対して、画像の背景部分の高周波成分を低減する画像処理方法において、
画像を入力する画像入力工程と、
前記画像入力手段によって入力された入力画像の各画素に対し、背景画素の存在領域と前景画素の存在領域を指定する背景領域指定工程と、
前記入力画像に対し、高周波成分の低減処理を行い、低減画像を得る高周波低減工程と、
前記入力画像において前記背景領域指定工程で指定された背景領域に対し、前記低減画像における前記背景領域の画素値の合成を行う合成工程と、を持ち、
前記高周波低減工程は、
画像縮小を行う第一処理工程と、空間フィルタ処理を行う第二処理工程と、画像拡大を行う第三処理工程と、を持ち、
前記第一処理工程、前記第二処理工程において、前記背景領域の境界部を処理する際に、前記背景画素の画素値を前記前景画素の画素値よりも重視して処理を行うことを特徴とする、画像処理方法。
【請求項7】
請求項6に記載の画像処理方法を実行するためのプログラムコードが記憶された記憶媒体。
【請求項8】
デジタル画像データに対して、画像の背景部分の高周波成分を低減する画像処理装置において、
画像を入力する画像入力手段と、
前記画像入力手段によって入力された入力画像の各画素に対し、背景画素の存在領域と前景画素の存在領域を指定する背景領域指定手段と、
前記入力画像に対し、高周波成分の低減処理を行い、低減画像を得る高周波低減手段と、
前記入力画像において前記背景領域指定手段で指定された背景領域に対し、前記低減画像における前記背景領域の画素値の合成を行う合成手段と、を持ち、
前記高周波低減手段は、
画像縮小を行う第一処理部と、空間フィルタ処理を行う第二処理部と、画像拡大を行う第三処理部と、を持ち、
前記第一処理部、前記第二処理部それぞれの処理は、
前記入力画像を小領域に区分した領域を処理対象として処理するものであって、
前記処理対象の領域が前記背景領域指定手段によって前記前景画素と前記背景画素との混在領域であると指定された際には、
処理対象の領域における、処理前の背景画素の画素値平均をAとし、
処理対象の領域における、処理前の全画素の画素値平均をBとし、
処理対象の領域における、処理後の全画素の画素値平均をCとしたときに
それぞれの画素値平均がB<C<Aの関係を満たすようにCを決定することを特徴とする、画像処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2013−20456(P2013−20456A)
【公開日】平成25年1月31日(2013.1.31)
【国際特許分類】
【出願番号】特願2011−153450(P2011−153450)
【出願日】平成23年7月12日(2011.7.12)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成25年1月31日(2013.1.31)
【国際特許分類】
【出願日】平成23年7月12日(2011.7.12)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]