画像圧縮方法、装置、電子カメラ、およびプログラム
【課題】 画像領域ごとにフレーム内圧縮/フレーム間予測差分圧縮を切り替える技術を提供する
【解決手段】 本発明の画像圧縮装置は、動きベクトル検出部、判定部、フレーム内圧縮部、およびフレーム間圧縮部を備える。動きベクトル検出部は、画像データ間の動きベクトルを画像上の複数位置で求める。判定部は、動きベクトルの画像上の空間変化を大小判定する。フレーム内圧縮部は、圧縮対象の画像データから、動きベクトルの空間変化が大きいと判定される画像領域Aを選別し、選別された画像領域Aにフレーム内圧縮を施す。フレーム間圧縮部は、圧縮対象の画像データから、動きベクトルの空間変化が小さいと判定される画像領域Bを選別し、選別された画像領域Bにフレーム間予測差分圧縮を施す。
【解決手段】 本発明の画像圧縮装置は、動きベクトル検出部、判定部、フレーム内圧縮部、およびフレーム間圧縮部を備える。動きベクトル検出部は、画像データ間の動きベクトルを画像上の複数位置で求める。判定部は、動きベクトルの画像上の空間変化を大小判定する。フレーム内圧縮部は、圧縮対象の画像データから、動きベクトルの空間変化が大きいと判定される画像領域Aを選別し、選別された画像領域Aにフレーム内圧縮を施す。フレーム間圧縮部は、圧縮対象の画像データから、動きベクトルの空間変化が小さいと判定される画像領域Bを選別し、選別された画像領域Bにフレーム間予測差分圧縮を施す。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像圧縮方法、画像圧縮装置、電子カメラ、および画像処理プログラムに関する。
【背景技術】
【0002】
従来、動画像の画像圧縮方式として、MPEG2方式が知られている(下記の特許文献1など)。このMPEG2方式では、動画像を下記(1)〜(3)のようなフレーム種類に分類して、フレーム単位に画像圧縮の処理を切り替える。
【0003】
(1)Iピクチャ…動画像から所定コマ数おきにIピクチャを抽出し、このIピクチャにフレーム内圧縮を施す。
(2)Pピクチャ…IピクチャとIピクチャの途中に位置するPピクチャを抽出する。前方向のIピクチャから作成した動き予測フレームと、このPピクチャとのフレーム間差(フレーム間予測差分)を求め、このフレーム間予測差分をデータ圧縮する。
(3)Bピクチャ…IピクチャとPピクチャの途中に位置するBピクチャを抽出する。前後のIピクチャおよびPピクチャから作成した動き予測フレームと、このBピクチャとのフレーム間差(フレーム間予測差分)を求め、このフレーム間予測差分をデータ圧縮する。
【特許文献1】特開2005−12372号公報(段落0002など)
【発明の開示】
【発明が解決しようとする課題】
【0004】
上述したように、従来技術では、Iピクチャ,Pピクチャ,およびBピクチャといったフレーム単位に、フレーム内圧縮/フレーム間予測差分圧縮の切り替えを行う。
しかしながら、1フレーム枚分の画像データを複数の画像領域に区分して、これら画像領域ごとにフレーム内圧縮/フレーム間予測差分圧縮の切り替えを行うものはなかった。
そこで、本発明は、画像領域ごとにフレーム内圧縮/フレーム間予測差分圧縮を切り替える技術を提供することを目的とする。
【課題を解決するための手段】
【0005】
《1》 本発明の画像圧縮方法は、画像データ群をデータ圧縮する画像圧縮方法であって、次のステップを備える。
(1)画像データ間の動きベクトルを画像上の複数位置について求めるステップ。
(2)動きベクトルの画像上の変化(以下、空間変化という)を大小判定するステップ。
(3)圧縮対象の画像データから、動きベクトルの空間変化が大きいと判定される画像領域Aを選別し、選別された画像領域Aにフレーム内圧縮を施すステップ。
(4)圧縮対象の画像データから、動きベクトルの空間変化が小さいと判定される画像領域Bを選別し、選別された画像領域Bにフレーム間予測差分圧縮を施すステップ。
《2》 本発明の画像圧縮装置は、画像データ群をデータ圧縮する画像圧縮装置であって、動きベクトル検出部、判定部、フレーム内圧縮部、およびフレーム間圧縮部を備える。
動きベクトル検出部は、画像データ間の動きベクトルを画像上の複数位置について求める。
判定部は、動きベクトルの画像上の変化(以下、空間変化という)を大小判定する。
フレーム内圧縮部は、圧縮対象の画像データから、動きベクトルの空間変化が大きいと判定される画像領域Aを選別し、選別された画像領域Aにフレーム内圧縮を施す。
フレーム間圧縮部は、圧縮対象の画像データから、動きベクトルの空間変化が小さいと判定される画像領域Bを選別し、選別された画像領域Bにフレーム間予測差分圧縮を施す。
《3》 なお好ましくは、動きベクトル検出部は、区分部、および探索部を備える。
区分部は、画像データをブロックに区分し、そのブロックを更に区分することにより、階層的なブロック区分を順次に行う。
探索部は、階層上位のブロックの動きベクトルを先に求め、動きベクトルを開始位置として、階層下位のブロックの動きベクトルを探索する。
判定部は、ブロックの階層間における動きベクトルの変化が所定の許容量内に整定したことを停止条件として、階層下位のブロック区分を停止する。
フレーム内圧縮部は、ブロックの最終的な区分サイズが所定サイズより小さくなるブロックを選別し、選別されたブロックを画像領域Aとしてフレーム内圧縮を施す。
一方、フレーム間圧縮部は、ブロックの最終的な区分サイズが所定サイズより大きいブロックを選別し、選別されたブロックを画像領域Bとしてフレーム間予測差分圧縮を施す。
《4》 また好ましくは、判定部は、階層的なブロック区分が所定サイズより小さくなる前段階で、ブロックの更なる区分を停止する。
この場合、フレーム内圧縮部は、停止条件を満足しないままにブロック区分を停止したブロックを、最終的な区分サイズが所定サイズより小さくなるブロックと見なして、フレーム内圧縮を施す。
一方、フレーム間圧縮部は、停止条件を満足してブロック区分を停止したブロックに対してフレーム間予測差分圧縮を施す。
《5》 なお好ましくは、色差成分についてフレーム内圧縮を行う色差圧縮部を備える。画像データとして、輝度成分および色差成分を含むカラー画像が入力される場合、色差成分については色差圧縮部を用いてフレーム内圧縮を実施する。一方、輝度成分については、上述したフレーム内圧縮部およびフレーム間圧縮部を用いて、画像領域A,Bに分けて圧縮処理を実施する。
《6》 本発明の電子カメラは、《2》〜《5》のいずれか1項に記載の画像圧縮装置と、被写体を撮像して画像データ群を生成する撮像部とを備える。この画像圧縮装置は、撮像部で生成された画像データ群をデータ圧縮する。
《7》 本発明の画像処理プログラムは、コンピュータを、《2》〜《5》のいずれか1項に記載の画像圧縮装置として機能させるためのプログラムである。
【発明の効果】
【0006】
本発明によれば、画像データを画像領域に区分して、画像領域ごとにフレーム内圧縮/フレーム間予測差分圧縮を適応的に切り替えることが可能になる。
【発明を実施するための最良の形態】
【0007】
《実施形態の構成説明》
図1は、電子カメラ11の構成を示すブロック図である。
図1において、電子カメラ11は、被写体を連写撮影または動画撮影して画像データ群を生成する撮像部12と、画像データ群を画像圧縮する画像圧縮装置13とを備えて概略構成される。その他、電子カメラ11は、画像圧縮装置13で生成される複数種類の圧縮データをまとめて、一つまたは複数の圧縮ファイルを生成するファイル生成部21を備える。
【0008】
上記の画像圧縮装置13は、下記の構成要件を備える。
(1)動きベクトル検出部14…画像データ(基準画像という)と画像データ(参照画像という)との間における絵柄の動きベクトルを、画像上の複数位置で求める。なお、この動きベクトル検出部14は、区分部15、および探索部16を備える。
(2)判定部17…複数位置の動きベクトルについて、画像上の空間的変化を大小判定する。
(3)フレーム内圧縮部18…圧縮対象の画像データから、動きベクトルの空間変化が大きい画像領域Aを選別し、選別された画像領域Aに対してフレーム内圧縮を施す。
(4)フレーム間圧縮部19…圧縮対象の画像データから、動きベクトルの空間変化が小さい画像領域Bを選別し、選別された画像領域Bに対してフレーム間予測差分圧縮を施す。
(5)色差圧縮部20…画像データ群の色差成分について、フレーム内圧縮を施す。
【0009】
《実施形態の動作説明》
まず、動きベクトル検出の動作について先に説明する。続いて、動きベクトル検出を画像データの領域区分に使用した、画像圧縮処理について説明する。
【0010】
[動きベクトル検出のメインルーチン]
図2は、動きベクトル検出のメインルーチンを説明する流れ図である。以下、図2に示すステップ番号に沿って、この動作を説明する。
【0011】
ステップS1: 動きベクトル検出部14は、画像データ群の中から、類似度の高い2つの画像データを選択的に取得し、参照画像および基準画像とする。これら2つの画像データの選択には、撮影時刻が近接する、あるいはフレーム間差分が小さいなど、類似度の高い画像データを選択することが好ましい。
2つの画像データの内、一方の参照画像は、探索部16が管理するメモリ領域に格納される。他方の基準画像は、区分部15が管理するメモリ領域に格納される。
なお、参照画像および基準画像をそのまま格納せずに、参照画像および基準画像のエッジ成分を格納してもよい。この処理により、後述するブロック単位のエッジ抽出処理を省略することができる。
【0012】
ステップS2: 動きベクトル検出部14は、動きベクトルの階層方向の並列演算を開始するためにスレッドを生成する。このスレッドでは、基準画像などを参照渡しする引数をつけて、後述する関数F()が呼び出される。
ここで生成されるスレッドは、大元の親スレッドである。この親スレッド内において、同様の子スレッドが再帰的に複数生成されることにより、本メインルーチンの動作と並行して、階層的な動きベクトルの検出動作が多岐にわたって実行される。
【0013】
ステップS3: 動きベクトル検出部14は、上述した階層的なスレッドから逐次に動きベクトルの報告を受ける。動きベクトル検出部14は、報告された動きベクトルを階層構造に分類してデータベース管理する。
【0014】
ステップS4: 動きベクトル検出部14は、親スレッドからスレッド完了の報告を受けると、ステップS5に動作を移行する。一方、親スレッドの処理が未完了の場合は、動きベクトル検出部14はステップS3に動作を戻す。
【0015】
ステップS5: 動きベクトル検出部14は、データベースに登録された動きベクトルを、対応するブロックの階層に従ってツリー構造化する。動きベクトル検出部14は、ツリー構造化された動きベクトルのデータを外部へ出力する。図3は、このツリー構造データの一例を模式的に示す図である。このツーリー構造データに従って、より下位階層の関数F(ブロック)の処理制御(動きベクトルの検出を中断したり、検出方法を変えるなど)を行うことにより、動きベクトル検出を効率化することができる。
【0016】
[動きベクトル検出のスレッド処理]
図4および図5は、上述したスレッド単位に実施される関数F(ブロック)の具体的な処理制御を説明する流れ図である。以下、図4および図5に示すステップ番号に沿って、このスレッド単位の動作を説明する。
【0017】
ステップS10: 区分部15は、関数F(ブロック)に付与される引数を読み込む。
この引数には、基準画像におけるブロックの位置(例えばブロックの左上点の座標)とブロックサイズ(例えばブロックの縦横画素数)が含まれる。
また、ブロックを含む上位ブロックについて動きベクトルが既知の場合には、この動きベクトルのデータも引数に含まれる。
【0018】
ステップS11: 探索部16は、引数のブロックサイズが、予め定められた所定サイズScよりも大きいか否かを判定する。この所定サイズScは、動きベクトル検出を実施する最小単位のブロックサイズを規定するものである。
引数のブロックサイズが所定サイズScよりも大きい場合、探索部16は、動きベクトル検出を実行するため、ステップS12に動作を移行する。
一方、引数のブロックサイズが所定サイズScよりも小さい場合、ステップS27に動作を移行する。この分岐処理によって、ブロックが過度に微細化する前に、動きベクトルの階層的な検出動作を打ち止めとすることができる。
【0019】
ステップS12: 区分部15は、引数に従って基準画像からブロックの画素データを取得し、探索部16に伝達する。
【0020】
ステップS13: 探索部16は、このブロックの画素データから、空間周波数フィルタを用いてエッジ成分を抽出する。探索部16は、ブロックのエッジ成分の絶対値和を求め、エッジ成分の量とする。
【0021】
ステップS14: 探索部16は、ブロックのエッジ成分の量が、所定の閾値より少ないか否かを判定する。この閾値は、動きベクトルを検出するために望ましいエッジ量の推奨下限値を規定するものである。
ブロックに含まれるエッジ成分がこの閾値以上の場合、探索部16はステップS16に動作を移行する。
一方、ブロックに含まれるエッジ成分が閾値よりも少ない場合、探索部16はステップS15に動作を移行する。
【0022】
ステップS15: 探索部16は、ブロックサイズが、予め定められたサイズSa以上か否かを判定する。このサイズSaは、ステップS14の停止条件によらず、動きベクトル検出を継続すべきブロックサイズを規定するものである。
ブロックサイズがサイズSa以上の場合、探索部16は、動きベクトルを検出するため、ステップS16に動作を移行する。この動作により、比較的大きなブロックサイズの段階で、動きベクトル検出が停止してしまう事態を防止できる。
一方、ブロックサイズがサイズSaよりも小さい場合、探索部16はステップS25に動作を移行する。この分岐処理により、エッジ成分が少なくなったブロックから順番に、動きベクトルの階層的な検出動作が打ち止めとなる。
【0023】
ステップS16: 探索部16は、ブロックを含む上位ブロックについて動きベクトルが既知の場合、この動きベクトルを類似領域の探索開始位置に設定する。
【0024】
ステップS17: 探索部16は、ブロックサイズが、予め定められたサイズSb以上か否かを判定する。このサイズSbは、類似領域の探索手法を切り換える目安を示すものであり、個々の探索手法とブロックサイズとの適性などを考慮して決定することが好ましい。
ブロックサイズがサイズSb以上の場合、探索部16は、ステップS18に動作を移行する。
一方、ブロックサイズがサイズSbよりも小さい場合、探索部16は、ステップS20に動作を移行する。
【0025】
ステップS18: ここでは、ブロックサイズが大きいため、射影成分を用いて動きベクトルの検出を行うことで、処理負荷の軽減を図る。
図6は、この射影成分の計算の様子を示す図である。まず、探索部16は、下式に示す縦エッジ抽出用のフィルタ(図6[A]参照)を用いて、基準画像のブロックから縦エッジ成分gyを抽出する。
gy(x,y)=-f(x,y-1)+f(x,y+1)
さらに、探索部16は、下式に示す横エッジ抽出用のフィルタ(図6[B]参照)を用いて、基準画像のブロックから横エッジ成分gxを抽出する。
gx(x,y)=-f(x-1,y)+f(x+1,y)
なお、ノイズの影響を軽減するため、探索部16は、所定の微小振幅に収まる縦エッジ成分gyと横エッジ成分gxについては、ゼロに置き換えることが好ましい。
次に、探索部16は、図6[A]に示すように、縦エッジ成分gyを水平行の単位に累積加算することにより、縦射影波形を算出する。
さらに、探索部16は、図6[B]に示すように、横エッジ成分gxを垂直列の単位に累積加算することにより、横射影波形を算出する。
なお、探索部16は、参照画像の画像全域についても、ステップS18と同様の処理を行い、縦射影波形と横射影波形を予め求めておく。
【0026】
ステップS19: 探索部16は、図6[A]に示すように、基準画像のブロックの縦射影波形と、参照画像の縦射影波形とをずらしながら差分をとり、その差分の絶対値和または二乗和が最小となる波形ズレを探索する。このとき、ステップS16で設定された上位ブロックの動きベクトルを探索開始位置とすることによって、探索時間の短縮を図ることが好ましい。このように求めた波形ズレは、基準画像のブロックと参照画像との縦方向の位置ズレに相当する。
なお、ブロックサイズが閾値(例えば縦100画素)以上では、計算量の少ない差分の絶対値和を比較することが好ましい。また、ブロックサイズが閾値(例えば縦100画素)未満の場合には、差分変動に敏感に反応する二乗和を比較することが好ましい。
また、探索部16は、図6[B]に示すように、横方向についても同一の処理を実施し、基準画像のブロックと参照画像との横方向の位置ズレを検出する。
以上の探索動作を終えた後、ステップS21に動作を移行する。
【0027】
ステップS20: 探索部16は、参照画像内から、ブロックとの空間差分(画素単位の差分の絶対値和または二乗和)が極小となる類似領域を探索する。なお、ブロックサイズが閾値(例えば縦100画素)以上では、計算量の少ない差分の絶対値和を比較することが好ましい。また、ブロックサイズが閾値(例えば縦100画素)未満の場合には、差分変動に敏感に反応する二乗和を比較することが好ましい。
【0028】
ステップS21: 探索部16は、ステップS19またはステップS20で求めた位置ズレに基づいて、当該ブロックの位置における基準画像と参照画像との間の動きベクトルを求める。
【0029】
ステップS22: 探索部16は、メインルーチン(動きベクトル検出部14)が管理するデータベースに、ステップS21で求めた動きベクトルと、ブロックの位置およびサイズを登録する。
【0030】
ステップS23: 判定部17は、上位ブロック(または、近接するブロック)の動きベクトルと、ステップS21で求めた動きベクトルとの差(空間変化)を求める。
この動きベクトルの空間変化の大きさが、誤差などの許容量内に収まっている場合、判定部17は動きベクトルの変化が整定したと判断し、ステップS24に動作を移行する。
一方、動きベクトルの空間変化の大きさが、誤差などの許容量を超える場合、判定部17は、動きベクトルの検出を継続する必要があると判断してステップS26に動作を移行する。
【0031】
ステップS24: 判定部17は、ブロックサイズが、予め定められたサイズSa以上か否かを判定する。このサイズSaは、ステップS23の停止条件によらず、動きベクトル検出を継続すべきブロックサイズを規定するものである。
ブロックサイズがサイズSa以上の場合、判定部17は、動きベクトル検出を継続するため、ステップS26に動作を移行する。
一方、ブロックサイズがサイズSaよりも小さい場合、判定部17は、ステップS25に動作を移行する。
【0032】
ステップS25: 判定部17は、現在処理中のブロックに対して、フレーム内圧縮のフラグをリセットする。このフラグ操作により、後段の画像圧縮処理では、当該ブロックに対して、フレーム間予測差分圧縮が実施される。
このようなフラグ操作の完了後、判定部17は、関数F(ブロック)の読み出し元に動作を戻す。このリターン処理により、動きベクトルが整定したブロックから順番に、動きベクトルの階層的な検出動作が打ち止めとなる。
【0033】
ステップS26: 判定部17は、後述するステップS28のブロック区分によって、ブロックサイズが所定サイズSc未満となるか否かを判定する。
ここで、所定サイズSc未満となる場合、判定部17はステップS27に動作を移行する。
一方、所定サイズSc以上となる場合、判定部17はステップS28に動作を移行する。
【0034】
ステップS27: 判定部17は、現在処理中のブロックに対して、フレーム内圧縮のフラグをセットする。このフラグ操作により、後段の画像圧縮処理では、当該ブロックに対して、フレーム内圧縮が実施される。
このようフラグ操作の完了後、判定部17は、関数F(ブロック)の読み出し元に動作を戻す。このリターン処理により、フレーム内圧縮処理を行うことが確定的なブロックに対して、不要なブロック区分を省くことが可能になる。
【0035】
ステップS28: 区分部15は、ブロックを、例えば2×2に区分することで、下位のブロック(並列ブロック)を得る。この区分パターンや区分数については、動きベクトルのツリー構造データに応じて柔軟に変更してもよい。例えば、上位階層ではブロックの区分数を多くし、下位階層ではブロックの区分数を少なくしてもよい。このような処理制御により、動きベクトルの階層が過度に深くなることを防止できる。
【0036】
ステップS29: ステップS28で区分した下位のブロックそれぞれについて、子スレッドを生成し、子スレッドの単位に関数F(ブロック)の再帰読み出しを実行する。
これら子スレッドの再帰読み出しが全て復帰した時点で、関数F(ブロック)の読み出し元に動作が戻る。
【0037】
[画像圧縮の動作説明]
図7は、画像圧縮の動作を説明する流れ図である。以下、図7に示すステップ番号に沿ってこの動作を説明する。
【0038】
ステップS100: 画像圧縮装置13は、撮像部12から画像データ群を取り込む。
【0039】
ステップS101: 画像圧縮装置13は、絵柄の類似する画像データが隣り合うように、画像データ群の順番を並べ換える(なお、撮影時刻の順に並べるだけでもよい)。
画像圧縮装置13は、動きベクトル検出部14および判定部17を用いて、隣り合う画像データの相互間において、上述した動きベクトル検出の処理(図2,図4,図5)を実施する。その結果、個々の画像データは、図8に示すように、サイズの異なるブロックに区分される。
【0040】
ステップS102: フレーム内圧縮部18は、圧縮対象の画像データから、フレーム内圧縮のフラグがセット状態(ステップS27参照)を示すブロック群を選別する。フレーム内圧縮部18は、選別したブロック群を画像領域Aとし、この画像領域Aの輝度成分に対してフレーム内圧縮を施す。
ここでのフレーム内圧縮は、フレーム内で完結する画像圧縮方式であればよい。例えば、隣り合う画素間で輝度成分の差データを求め、その差データを可変長符号化やランレングス符号化などを用いてデータ圧縮してもよい。また例えば、JPEG方式のように直交変換を用いて画像圧縮を行ってもよい。
なお、画像領域Aをブロックやタイルといった小単位に区分して、フレーム内圧縮を実施してもよい。また、画像領域Aの全域に対して、フレーム内圧縮を実施してもよい。
【0041】
ステップS103: フレーム間圧縮部19は、圧縮対象の画像データから、フレーム内圧縮のフラグがリセット状態(ステップS25参照)を示すブロック群を選別する。フレーム間圧縮部19は、選別したブロック群を画像領域Bとし、この画像領域Bの輝度成分に対してフレーム間予測差分圧縮を施す。
例えば、フレーム間圧縮部19は、基準画像のブロックの区画を動きベクトルの分だけずらした区画を求め、このずらした区画に合わせて参照画像からブロック(動き補償ブロック)を切り出す。次に、フレーム間圧縮部19は、基準画像のブロックと、参照画像の動き補償ブロックとの間で輝度成分のブロック差分を求める。フレーム間圧縮部19は、このブロック差分を圧縮符号化する。フレーム間圧縮部19は、求めたブロック差分の圧縮結果と動きベクトルの符号化データとを合わせて、圧縮データを生成する。
【0042】
ステップS104: 色差圧縮部20は、撮像部12から画像データ群の色差成分(Cb,Crなど)を取得し、これら色差成分に対してフレーム内圧縮を施す。
ここでのフレーム内圧縮も、フレーム内で完結する画像圧縮方式であればよい。
なお、色差成分については、サブサンプリング(4:2:2、4:1:1、4:2:0など)を行うことで、さらに圧縮効率を高めてもよい。
【0043】
ステップS105: ファイル生成部21は、ステップS102〜S103で生成された下記の圧縮データ(1)〜(3)と、画像伸張時に必要な付随情報(画像領域A、Bやブロックのレイアウト情報、画像領域Bのブロックごとの動きベクトルなど)とをまとめて、画像データ群の圧縮ファイルを生成する。
(1)画像領域Aの輝度成分をフレーム内圧縮した圧縮データ
(2)画像領域Bの輝度成分をフレーム間予測差分圧縮した圧縮データ
(3)色差成分をフレーム内圧縮した圧縮データ
なお、ここでの圧縮ファイルは、個々の画像データの単位に生成してもよい。また、動画像ファイルのように、画像データ群を一つにまとめた圧縮ファイルを生成してもよい。
【0044】
《本実施形態の効果など》
本実施形態では、動きベクトルの空間変化が大きい画像領域Aを選別する。このような画像領域Aは、隣接する動きベクトルが大きく変動するため、フレーム間の絵柄の動きが複雑で、フレーム間相関が比較的低い箇所であると考えられる。したがって、この画像領域Aについては、フレーム間予測差分圧縮では圧縮効率を稼ぐことが難しい。そこで、この画像領域Aについてはフレーム内圧縮に切り換えることにより、圧縮効率を高める。
【0045】
一方、本実施形態では、動きベクトルの空間変化が小さい画像領域Bを選別する。このような画像領域Bは、隣接する動きベクトルの変動が小さく、フレーム間の絵柄の動きが単純で、フレーム間相関が比較的高い箇所であると考えられる。したがって、この画像領域Bについては、フレーム間予測差分圧縮を適用することで圧縮効率を高める。
【0046】
さらに、本実施形態では、画像データを階層的にブロック区分し、そのブロックごとに動きベクトルを求める。このとき、動きベクトルの空間変化が大きい画像領域Aでは、動きベクトルの階層間の変化がなかなか整定しないため、ブロックの最終的な区分サイズが小さくなる。一方、動きベクトルの空間変化が小さい画像領域Bでは、動きベクトルの階層間の変化が早い段階で整定するため、ブロックの最終的な区分サイズが大きくなる。そのため、ブロックの最終的な区分サイズを大小判定することで、画像領域A,Bを的確に分けることが可能になる。
【0047】
さらに、本実施形態では、階層的なブロック区分が所定サイズScより小さくなる前段階において、ブロック区分を停止する。このとき、停止条件を満足せずにブロック区分を停止したブロックについては、最終的な区分サイズが所定サイズScより小さくなるブロックと見なし、画像領域Aに分類する。このような見なし処理によって、余分なブロック区分を省いて、処理の高速化を実現できる。
【0048】
また、本実施形態では、輝度成分については画像領域によるフレーム内圧縮/フレーム間予測差分圧縮の切り換えを行う。一方、色差成分についてはフレーム内圧縮を行う。一般に、色差成分については、撮像素子のベイヤ配列上のRB画素間隔や、後処理の色差ローパスフィルタ処理などの影響により、輝度成分に比べて空間周波数の帯域が狭くなる。そのため、フレーム内における色差成分の変化は比較的少なく、フレーム内相関が高くなる。したがって、色差成分については、フレーム内圧縮によって十分に高い圧縮効率を得ることが可能になる。
【0049】
《実施形態の補足事項》
なお、上述した実施形態では、再帰読み出しの関数F()を使用する例について説明した。しかしながら、本発明はこれに限定されるものではない。画像データを階層的に区分しながら、個々のブロックについて動きベクトル検出を個別に実施してもよい。
【0050】
また、上述した実施形態では、矩形状のブロック(図8参照)に区分する例について説明した。しかしながら、本発明はこのブロック形状に限定されるものではない。例えば、エッジに沿ってブロックを区切ることによって、被写体やその被写体パーツの輪郭形状を有するブロックを生成してもよい。
【0051】
なお、上述した実施形態では、ブロックの階層間における動きベクトルの変化を空間変化とし、その空間変化の大小判定から画像領域A,Bを区分している。しかしながら、本発明はこれに限定されるものではない。隣接ブロック間における動きベクトルの変化を空間変化とし、その空間変化の大小判定から画像領域A,Bを区分してもよい。
【0052】
また、上述した実施形態では、画像圧縮装置13を電子カメラ11に搭載する態様について説明した。しかしながら、本発明はこれに限定されるものではない。例えば、画像圧縮装置13単体で構成してもよい。また、コンピュータと画像処理プログラムを用いて、画像圧縮装置13をソフトウェア的に実現してもよい。
【0053】
なお、上述した実施形態では、画像データの輝度色差成分に対して画像圧縮処理を行っている。しかしながら、本発明はこれに限定されるものではない。例えば、RGB成分それぞれについて、上述した輝度成分と同様の画像圧縮処理を施してもよい。また、G成分のみ輝度成分と同様の画像圧縮処理を施し、RB成分についてはフレーム内圧縮を施してもよい。
【実施例1】
【0054】
[フレーム内圧縮/フレーム間圧縮の切り換え効果]
図9〜図11は、画像データ群(フレーム番号0〜180)の演算値(予測差分など)を求め、その演算値の標準偏差Sigmaをフレーム番号ごとにプロットしたグラフである。なお、グラフ中のプロット記号は、下記の圧縮方式を意味する。
(*) 階層的に求めた動きベクトルを用いて圧縮データを求めた場合
(×) グローバル動き補償を行って圧縮データを求めた場合(参考データ)
(+) 動き補償を行わずに圧縮データを求めた場合(参考データ)
(□) 画像全域にフレーム内圧縮を行った場合(参考データ)
(■) ブロック空間差分を最小化する動きベクトルの理想値を用いて、フレーム間予測差分を求めた場合(参考データ)
以下、これらのグラフ別に結果を説明する。
【0055】
まず、図9に示すプロット(*)は、射影成分を用いて階層的な動きベクトルを簡易に求め、これら動きベクトルを用いて画像全域にフレーム間予測差分圧縮を行ったケースである。動きの激しいフレーム番号(60〜120)では、このプロット(*)は、フレーム内圧縮のプロット(□)よりも標準偏差Sigmaが高くなり、圧縮効率の向上に限界がある。
【0056】
図10に示すプロット(*)は、サイズの大きな階層上位のブロックでは射影成分を用いて動きベクトルを求め、サイズの小さな階層下位のブロックでは空間差分を極小化する動きベクトルを求めている。このような部分改良により、プロット(*)が示す標準偏差Sigmaは全般的に低くなり、圧縮効率に一定の改善が見られる。
【0057】
図11に示すプロット(*)は、上述した実施形態に則して、画像データを画像領域A,Bに区分して、画像領域A,Bごとにフレーム内圧縮/フレーム間予測差分圧縮を適応的に切り替えるケースである。この場合、プロット(*)が示す標準偏差Sigmaは更に低くなり、圧縮効率が一段と改善されることが分かる。
【0058】
図12は、上述した図11の標準偏差をエントロピーに換算したものである。この結果からも、本実施形態における圧縮効率の改善効果が確認できる。
【実施例2】
【0059】
[輝度色差成分への適用]
次に、輝度色差成分(ここではYCbCr)からなるカラー画像データに本実施形態を適用するケースについて効果を説明する。
【0060】
図13は、画像データ群(フレーム番号0〜180)の圧縮データを求め、その圧縮データのエントロピーをフレーム番号ごとにプロットしたグラフである。なお、グラフ中のプロット記号は、下記の圧縮方式を意味する。
(*) 階層的に求めた動きベクトルを用いてフレーム間予測差分圧縮を行った場合
(□) 輝度色差成分YCbCrを画像領域A,Bに区分して、フレーム内圧縮/フレーム間予測差分圧縮を適応的に切り替えた場合
(×) グローバル動き補償を行って圧縮データを求めた場合(参考データ)
(+) 動き補償を行わずに圧縮データを求めた場合(参考データ)
(■) 輝度色差成分YCbCrにフレーム内圧縮を行った場合(参考データ)
(○) 色成分RGBにフレーム内圧縮を行った場合(参考データ)
【0061】
この図13に示すプロット(○)とプロット(■)とを比較すると、RGB色空間から輝度色差空間へ変換するだけで、フレーム内圧縮のエントロピーを1.5bit程度下げ、圧縮効率を改善することができる。
【0062】
しかしながら、図13に示すプロット(□)とプロット(■)とを比較すると、プロット(□)の方が全般的にエントロピーが高く、圧縮効率が悪いことが分かる。これは、フレーム内の情報量が少ない色差成分YCbCrについて部分的にフレーム間予測差分圧縮を行ったために、情報量が逆に増えてしまったためと推測される。
【0063】
そこで、色差成分CrCbのみフレーム内圧縮を行う方式に切り換え、図14に示すプロット(□)を得た。このプロット(□)とプロット(■)とを比較すると、プロット(□)の方が全般的にエントロピーが低く、圧縮効率の改善に成功している。
【0064】
なお、本実施例では、輝度色差成分YCbCrの処理について説明した。しかしながら、本発明はこれに限定されるものではない。例えば、Lab等のその他の輝度色差成分に適用してもよい。
【産業上の利用可能性】
【0065】
以上説明したように、本発明は、画像圧縮装置などに利用可能な技術である。
【図面の簡単な説明】
【0066】
【図1】電子カメラ11の構成を示すブロック図である。
【図2】動きベクトル検出のメインルーチンを説明する流れ図である。
【図3】ツリー構造データの一例を模式的に示す図である。
【図4】関数F(ブロック)の処理制御を説明する流れ図(1/2)である。
【図5】関数F(ブロック)の処理制御を説明する流れ図(2/2)である。
【図6】射影成分の計算の様子を示す図である。
【図7】画像圧縮の動作を説明する流れ図である。
【図8】画像のブロック区分の一例を示す図である。
【図9】圧縮効率を示す実験結果である。
【図10】圧縮効率を示す実験結果である。
【図11】圧縮効率を示す実験結果である。
【図12】圧縮効率を示す実験結果である。
【図13】圧縮効率を示す実験結果である。
【図14】圧縮効率を示す実験結果である。
【符号の説明】
【0067】
11…電子カメラ,12…撮像部,13…画像圧縮装置,14…動きベクトル検出部,15…区分部,16…探索部,17…判定部,18…フレーム内圧縮部,19…フレーム間圧縮部,20…色差圧縮部,21…ファイル生成部
【技術分野】
【0001】
本発明は、画像圧縮方法、画像圧縮装置、電子カメラ、および画像処理プログラムに関する。
【背景技術】
【0002】
従来、動画像の画像圧縮方式として、MPEG2方式が知られている(下記の特許文献1など)。このMPEG2方式では、動画像を下記(1)〜(3)のようなフレーム種類に分類して、フレーム単位に画像圧縮の処理を切り替える。
【0003】
(1)Iピクチャ…動画像から所定コマ数おきにIピクチャを抽出し、このIピクチャにフレーム内圧縮を施す。
(2)Pピクチャ…IピクチャとIピクチャの途中に位置するPピクチャを抽出する。前方向のIピクチャから作成した動き予測フレームと、このPピクチャとのフレーム間差(フレーム間予測差分)を求め、このフレーム間予測差分をデータ圧縮する。
(3)Bピクチャ…IピクチャとPピクチャの途中に位置するBピクチャを抽出する。前後のIピクチャおよびPピクチャから作成した動き予測フレームと、このBピクチャとのフレーム間差(フレーム間予測差分)を求め、このフレーム間予測差分をデータ圧縮する。
【特許文献1】特開2005−12372号公報(段落0002など)
【発明の開示】
【発明が解決しようとする課題】
【0004】
上述したように、従来技術では、Iピクチャ,Pピクチャ,およびBピクチャといったフレーム単位に、フレーム内圧縮/フレーム間予測差分圧縮の切り替えを行う。
しかしながら、1フレーム枚分の画像データを複数の画像領域に区分して、これら画像領域ごとにフレーム内圧縮/フレーム間予測差分圧縮の切り替えを行うものはなかった。
そこで、本発明は、画像領域ごとにフレーム内圧縮/フレーム間予測差分圧縮を切り替える技術を提供することを目的とする。
【課題を解決するための手段】
【0005】
《1》 本発明の画像圧縮方法は、画像データ群をデータ圧縮する画像圧縮方法であって、次のステップを備える。
(1)画像データ間の動きベクトルを画像上の複数位置について求めるステップ。
(2)動きベクトルの画像上の変化(以下、空間変化という)を大小判定するステップ。
(3)圧縮対象の画像データから、動きベクトルの空間変化が大きいと判定される画像領域Aを選別し、選別された画像領域Aにフレーム内圧縮を施すステップ。
(4)圧縮対象の画像データから、動きベクトルの空間変化が小さいと判定される画像領域Bを選別し、選別された画像領域Bにフレーム間予測差分圧縮を施すステップ。
《2》 本発明の画像圧縮装置は、画像データ群をデータ圧縮する画像圧縮装置であって、動きベクトル検出部、判定部、フレーム内圧縮部、およびフレーム間圧縮部を備える。
動きベクトル検出部は、画像データ間の動きベクトルを画像上の複数位置について求める。
判定部は、動きベクトルの画像上の変化(以下、空間変化という)を大小判定する。
フレーム内圧縮部は、圧縮対象の画像データから、動きベクトルの空間変化が大きいと判定される画像領域Aを選別し、選別された画像領域Aにフレーム内圧縮を施す。
フレーム間圧縮部は、圧縮対象の画像データから、動きベクトルの空間変化が小さいと判定される画像領域Bを選別し、選別された画像領域Bにフレーム間予測差分圧縮を施す。
《3》 なお好ましくは、動きベクトル検出部は、区分部、および探索部を備える。
区分部は、画像データをブロックに区分し、そのブロックを更に区分することにより、階層的なブロック区分を順次に行う。
探索部は、階層上位のブロックの動きベクトルを先に求め、動きベクトルを開始位置として、階層下位のブロックの動きベクトルを探索する。
判定部は、ブロックの階層間における動きベクトルの変化が所定の許容量内に整定したことを停止条件として、階層下位のブロック区分を停止する。
フレーム内圧縮部は、ブロックの最終的な区分サイズが所定サイズより小さくなるブロックを選別し、選別されたブロックを画像領域Aとしてフレーム内圧縮を施す。
一方、フレーム間圧縮部は、ブロックの最終的な区分サイズが所定サイズより大きいブロックを選別し、選別されたブロックを画像領域Bとしてフレーム間予測差分圧縮を施す。
《4》 また好ましくは、判定部は、階層的なブロック区分が所定サイズより小さくなる前段階で、ブロックの更なる区分を停止する。
この場合、フレーム内圧縮部は、停止条件を満足しないままにブロック区分を停止したブロックを、最終的な区分サイズが所定サイズより小さくなるブロックと見なして、フレーム内圧縮を施す。
一方、フレーム間圧縮部は、停止条件を満足してブロック区分を停止したブロックに対してフレーム間予測差分圧縮を施す。
《5》 なお好ましくは、色差成分についてフレーム内圧縮を行う色差圧縮部を備える。画像データとして、輝度成分および色差成分を含むカラー画像が入力される場合、色差成分については色差圧縮部を用いてフレーム内圧縮を実施する。一方、輝度成分については、上述したフレーム内圧縮部およびフレーム間圧縮部を用いて、画像領域A,Bに分けて圧縮処理を実施する。
《6》 本発明の電子カメラは、《2》〜《5》のいずれか1項に記載の画像圧縮装置と、被写体を撮像して画像データ群を生成する撮像部とを備える。この画像圧縮装置は、撮像部で生成された画像データ群をデータ圧縮する。
《7》 本発明の画像処理プログラムは、コンピュータを、《2》〜《5》のいずれか1項に記載の画像圧縮装置として機能させるためのプログラムである。
【発明の効果】
【0006】
本発明によれば、画像データを画像領域に区分して、画像領域ごとにフレーム内圧縮/フレーム間予測差分圧縮を適応的に切り替えることが可能になる。
【発明を実施するための最良の形態】
【0007】
《実施形態の構成説明》
図1は、電子カメラ11の構成を示すブロック図である。
図1において、電子カメラ11は、被写体を連写撮影または動画撮影して画像データ群を生成する撮像部12と、画像データ群を画像圧縮する画像圧縮装置13とを備えて概略構成される。その他、電子カメラ11は、画像圧縮装置13で生成される複数種類の圧縮データをまとめて、一つまたは複数の圧縮ファイルを生成するファイル生成部21を備える。
【0008】
上記の画像圧縮装置13は、下記の構成要件を備える。
(1)動きベクトル検出部14…画像データ(基準画像という)と画像データ(参照画像という)との間における絵柄の動きベクトルを、画像上の複数位置で求める。なお、この動きベクトル検出部14は、区分部15、および探索部16を備える。
(2)判定部17…複数位置の動きベクトルについて、画像上の空間的変化を大小判定する。
(3)フレーム内圧縮部18…圧縮対象の画像データから、動きベクトルの空間変化が大きい画像領域Aを選別し、選別された画像領域Aに対してフレーム内圧縮を施す。
(4)フレーム間圧縮部19…圧縮対象の画像データから、動きベクトルの空間変化が小さい画像領域Bを選別し、選別された画像領域Bに対してフレーム間予測差分圧縮を施す。
(5)色差圧縮部20…画像データ群の色差成分について、フレーム内圧縮を施す。
【0009】
《実施形態の動作説明》
まず、動きベクトル検出の動作について先に説明する。続いて、動きベクトル検出を画像データの領域区分に使用した、画像圧縮処理について説明する。
【0010】
[動きベクトル検出のメインルーチン]
図2は、動きベクトル検出のメインルーチンを説明する流れ図である。以下、図2に示すステップ番号に沿って、この動作を説明する。
【0011】
ステップS1: 動きベクトル検出部14は、画像データ群の中から、類似度の高い2つの画像データを選択的に取得し、参照画像および基準画像とする。これら2つの画像データの選択には、撮影時刻が近接する、あるいはフレーム間差分が小さいなど、類似度の高い画像データを選択することが好ましい。
2つの画像データの内、一方の参照画像は、探索部16が管理するメモリ領域に格納される。他方の基準画像は、区分部15が管理するメモリ領域に格納される。
なお、参照画像および基準画像をそのまま格納せずに、参照画像および基準画像のエッジ成分を格納してもよい。この処理により、後述するブロック単位のエッジ抽出処理を省略することができる。
【0012】
ステップS2: 動きベクトル検出部14は、動きベクトルの階層方向の並列演算を開始するためにスレッドを生成する。このスレッドでは、基準画像などを参照渡しする引数をつけて、後述する関数F()が呼び出される。
ここで生成されるスレッドは、大元の親スレッドである。この親スレッド内において、同様の子スレッドが再帰的に複数生成されることにより、本メインルーチンの動作と並行して、階層的な動きベクトルの検出動作が多岐にわたって実行される。
【0013】
ステップS3: 動きベクトル検出部14は、上述した階層的なスレッドから逐次に動きベクトルの報告を受ける。動きベクトル検出部14は、報告された動きベクトルを階層構造に分類してデータベース管理する。
【0014】
ステップS4: 動きベクトル検出部14は、親スレッドからスレッド完了の報告を受けると、ステップS5に動作を移行する。一方、親スレッドの処理が未完了の場合は、動きベクトル検出部14はステップS3に動作を戻す。
【0015】
ステップS5: 動きベクトル検出部14は、データベースに登録された動きベクトルを、対応するブロックの階層に従ってツリー構造化する。動きベクトル検出部14は、ツリー構造化された動きベクトルのデータを外部へ出力する。図3は、このツリー構造データの一例を模式的に示す図である。このツーリー構造データに従って、より下位階層の関数F(ブロック)の処理制御(動きベクトルの検出を中断したり、検出方法を変えるなど)を行うことにより、動きベクトル検出を効率化することができる。
【0016】
[動きベクトル検出のスレッド処理]
図4および図5は、上述したスレッド単位に実施される関数F(ブロック)の具体的な処理制御を説明する流れ図である。以下、図4および図5に示すステップ番号に沿って、このスレッド単位の動作を説明する。
【0017】
ステップS10: 区分部15は、関数F(ブロック)に付与される引数を読み込む。
この引数には、基準画像におけるブロックの位置(例えばブロックの左上点の座標)とブロックサイズ(例えばブロックの縦横画素数)が含まれる。
また、ブロックを含む上位ブロックについて動きベクトルが既知の場合には、この動きベクトルのデータも引数に含まれる。
【0018】
ステップS11: 探索部16は、引数のブロックサイズが、予め定められた所定サイズScよりも大きいか否かを判定する。この所定サイズScは、動きベクトル検出を実施する最小単位のブロックサイズを規定するものである。
引数のブロックサイズが所定サイズScよりも大きい場合、探索部16は、動きベクトル検出を実行するため、ステップS12に動作を移行する。
一方、引数のブロックサイズが所定サイズScよりも小さい場合、ステップS27に動作を移行する。この分岐処理によって、ブロックが過度に微細化する前に、動きベクトルの階層的な検出動作を打ち止めとすることができる。
【0019】
ステップS12: 区分部15は、引数に従って基準画像からブロックの画素データを取得し、探索部16に伝達する。
【0020】
ステップS13: 探索部16は、このブロックの画素データから、空間周波数フィルタを用いてエッジ成分を抽出する。探索部16は、ブロックのエッジ成分の絶対値和を求め、エッジ成分の量とする。
【0021】
ステップS14: 探索部16は、ブロックのエッジ成分の量が、所定の閾値より少ないか否かを判定する。この閾値は、動きベクトルを検出するために望ましいエッジ量の推奨下限値を規定するものである。
ブロックに含まれるエッジ成分がこの閾値以上の場合、探索部16はステップS16に動作を移行する。
一方、ブロックに含まれるエッジ成分が閾値よりも少ない場合、探索部16はステップS15に動作を移行する。
【0022】
ステップS15: 探索部16は、ブロックサイズが、予め定められたサイズSa以上か否かを判定する。このサイズSaは、ステップS14の停止条件によらず、動きベクトル検出を継続すべきブロックサイズを規定するものである。
ブロックサイズがサイズSa以上の場合、探索部16は、動きベクトルを検出するため、ステップS16に動作を移行する。この動作により、比較的大きなブロックサイズの段階で、動きベクトル検出が停止してしまう事態を防止できる。
一方、ブロックサイズがサイズSaよりも小さい場合、探索部16はステップS25に動作を移行する。この分岐処理により、エッジ成分が少なくなったブロックから順番に、動きベクトルの階層的な検出動作が打ち止めとなる。
【0023】
ステップS16: 探索部16は、ブロックを含む上位ブロックについて動きベクトルが既知の場合、この動きベクトルを類似領域の探索開始位置に設定する。
【0024】
ステップS17: 探索部16は、ブロックサイズが、予め定められたサイズSb以上か否かを判定する。このサイズSbは、類似領域の探索手法を切り換える目安を示すものであり、個々の探索手法とブロックサイズとの適性などを考慮して決定することが好ましい。
ブロックサイズがサイズSb以上の場合、探索部16は、ステップS18に動作を移行する。
一方、ブロックサイズがサイズSbよりも小さい場合、探索部16は、ステップS20に動作を移行する。
【0025】
ステップS18: ここでは、ブロックサイズが大きいため、射影成分を用いて動きベクトルの検出を行うことで、処理負荷の軽減を図る。
図6は、この射影成分の計算の様子を示す図である。まず、探索部16は、下式に示す縦エッジ抽出用のフィルタ(図6[A]参照)を用いて、基準画像のブロックから縦エッジ成分gyを抽出する。
gy(x,y)=-f(x,y-1)+f(x,y+1)
さらに、探索部16は、下式に示す横エッジ抽出用のフィルタ(図6[B]参照)を用いて、基準画像のブロックから横エッジ成分gxを抽出する。
gx(x,y)=-f(x-1,y)+f(x+1,y)
なお、ノイズの影響を軽減するため、探索部16は、所定の微小振幅に収まる縦エッジ成分gyと横エッジ成分gxについては、ゼロに置き換えることが好ましい。
次に、探索部16は、図6[A]に示すように、縦エッジ成分gyを水平行の単位に累積加算することにより、縦射影波形を算出する。
さらに、探索部16は、図6[B]に示すように、横エッジ成分gxを垂直列の単位に累積加算することにより、横射影波形を算出する。
なお、探索部16は、参照画像の画像全域についても、ステップS18と同様の処理を行い、縦射影波形と横射影波形を予め求めておく。
【0026】
ステップS19: 探索部16は、図6[A]に示すように、基準画像のブロックの縦射影波形と、参照画像の縦射影波形とをずらしながら差分をとり、その差分の絶対値和または二乗和が最小となる波形ズレを探索する。このとき、ステップS16で設定された上位ブロックの動きベクトルを探索開始位置とすることによって、探索時間の短縮を図ることが好ましい。このように求めた波形ズレは、基準画像のブロックと参照画像との縦方向の位置ズレに相当する。
なお、ブロックサイズが閾値(例えば縦100画素)以上では、計算量の少ない差分の絶対値和を比較することが好ましい。また、ブロックサイズが閾値(例えば縦100画素)未満の場合には、差分変動に敏感に反応する二乗和を比較することが好ましい。
また、探索部16は、図6[B]に示すように、横方向についても同一の処理を実施し、基準画像のブロックと参照画像との横方向の位置ズレを検出する。
以上の探索動作を終えた後、ステップS21に動作を移行する。
【0027】
ステップS20: 探索部16は、参照画像内から、ブロックとの空間差分(画素単位の差分の絶対値和または二乗和)が極小となる類似領域を探索する。なお、ブロックサイズが閾値(例えば縦100画素)以上では、計算量の少ない差分の絶対値和を比較することが好ましい。また、ブロックサイズが閾値(例えば縦100画素)未満の場合には、差分変動に敏感に反応する二乗和を比較することが好ましい。
【0028】
ステップS21: 探索部16は、ステップS19またはステップS20で求めた位置ズレに基づいて、当該ブロックの位置における基準画像と参照画像との間の動きベクトルを求める。
【0029】
ステップS22: 探索部16は、メインルーチン(動きベクトル検出部14)が管理するデータベースに、ステップS21で求めた動きベクトルと、ブロックの位置およびサイズを登録する。
【0030】
ステップS23: 判定部17は、上位ブロック(または、近接するブロック)の動きベクトルと、ステップS21で求めた動きベクトルとの差(空間変化)を求める。
この動きベクトルの空間変化の大きさが、誤差などの許容量内に収まっている場合、判定部17は動きベクトルの変化が整定したと判断し、ステップS24に動作を移行する。
一方、動きベクトルの空間変化の大きさが、誤差などの許容量を超える場合、判定部17は、動きベクトルの検出を継続する必要があると判断してステップS26に動作を移行する。
【0031】
ステップS24: 判定部17は、ブロックサイズが、予め定められたサイズSa以上か否かを判定する。このサイズSaは、ステップS23の停止条件によらず、動きベクトル検出を継続すべきブロックサイズを規定するものである。
ブロックサイズがサイズSa以上の場合、判定部17は、動きベクトル検出を継続するため、ステップS26に動作を移行する。
一方、ブロックサイズがサイズSaよりも小さい場合、判定部17は、ステップS25に動作を移行する。
【0032】
ステップS25: 判定部17は、現在処理中のブロックに対して、フレーム内圧縮のフラグをリセットする。このフラグ操作により、後段の画像圧縮処理では、当該ブロックに対して、フレーム間予測差分圧縮が実施される。
このようなフラグ操作の完了後、判定部17は、関数F(ブロック)の読み出し元に動作を戻す。このリターン処理により、動きベクトルが整定したブロックから順番に、動きベクトルの階層的な検出動作が打ち止めとなる。
【0033】
ステップS26: 判定部17は、後述するステップS28のブロック区分によって、ブロックサイズが所定サイズSc未満となるか否かを判定する。
ここで、所定サイズSc未満となる場合、判定部17はステップS27に動作を移行する。
一方、所定サイズSc以上となる場合、判定部17はステップS28に動作を移行する。
【0034】
ステップS27: 判定部17は、現在処理中のブロックに対して、フレーム内圧縮のフラグをセットする。このフラグ操作により、後段の画像圧縮処理では、当該ブロックに対して、フレーム内圧縮が実施される。
このようフラグ操作の完了後、判定部17は、関数F(ブロック)の読み出し元に動作を戻す。このリターン処理により、フレーム内圧縮処理を行うことが確定的なブロックに対して、不要なブロック区分を省くことが可能になる。
【0035】
ステップS28: 区分部15は、ブロックを、例えば2×2に区分することで、下位のブロック(並列ブロック)を得る。この区分パターンや区分数については、動きベクトルのツリー構造データに応じて柔軟に変更してもよい。例えば、上位階層ではブロックの区分数を多くし、下位階層ではブロックの区分数を少なくしてもよい。このような処理制御により、動きベクトルの階層が過度に深くなることを防止できる。
【0036】
ステップS29: ステップS28で区分した下位のブロックそれぞれについて、子スレッドを生成し、子スレッドの単位に関数F(ブロック)の再帰読み出しを実行する。
これら子スレッドの再帰読み出しが全て復帰した時点で、関数F(ブロック)の読み出し元に動作が戻る。
【0037】
[画像圧縮の動作説明]
図7は、画像圧縮の動作を説明する流れ図である。以下、図7に示すステップ番号に沿ってこの動作を説明する。
【0038】
ステップS100: 画像圧縮装置13は、撮像部12から画像データ群を取り込む。
【0039】
ステップS101: 画像圧縮装置13は、絵柄の類似する画像データが隣り合うように、画像データ群の順番を並べ換える(なお、撮影時刻の順に並べるだけでもよい)。
画像圧縮装置13は、動きベクトル検出部14および判定部17を用いて、隣り合う画像データの相互間において、上述した動きベクトル検出の処理(図2,図4,図5)を実施する。その結果、個々の画像データは、図8に示すように、サイズの異なるブロックに区分される。
【0040】
ステップS102: フレーム内圧縮部18は、圧縮対象の画像データから、フレーム内圧縮のフラグがセット状態(ステップS27参照)を示すブロック群を選別する。フレーム内圧縮部18は、選別したブロック群を画像領域Aとし、この画像領域Aの輝度成分に対してフレーム内圧縮を施す。
ここでのフレーム内圧縮は、フレーム内で完結する画像圧縮方式であればよい。例えば、隣り合う画素間で輝度成分の差データを求め、その差データを可変長符号化やランレングス符号化などを用いてデータ圧縮してもよい。また例えば、JPEG方式のように直交変換を用いて画像圧縮を行ってもよい。
なお、画像領域Aをブロックやタイルといった小単位に区分して、フレーム内圧縮を実施してもよい。また、画像領域Aの全域に対して、フレーム内圧縮を実施してもよい。
【0041】
ステップS103: フレーム間圧縮部19は、圧縮対象の画像データから、フレーム内圧縮のフラグがリセット状態(ステップS25参照)を示すブロック群を選別する。フレーム間圧縮部19は、選別したブロック群を画像領域Bとし、この画像領域Bの輝度成分に対してフレーム間予測差分圧縮を施す。
例えば、フレーム間圧縮部19は、基準画像のブロックの区画を動きベクトルの分だけずらした区画を求め、このずらした区画に合わせて参照画像からブロック(動き補償ブロック)を切り出す。次に、フレーム間圧縮部19は、基準画像のブロックと、参照画像の動き補償ブロックとの間で輝度成分のブロック差分を求める。フレーム間圧縮部19は、このブロック差分を圧縮符号化する。フレーム間圧縮部19は、求めたブロック差分の圧縮結果と動きベクトルの符号化データとを合わせて、圧縮データを生成する。
【0042】
ステップS104: 色差圧縮部20は、撮像部12から画像データ群の色差成分(Cb,Crなど)を取得し、これら色差成分に対してフレーム内圧縮を施す。
ここでのフレーム内圧縮も、フレーム内で完結する画像圧縮方式であればよい。
なお、色差成分については、サブサンプリング(4:2:2、4:1:1、4:2:0など)を行うことで、さらに圧縮効率を高めてもよい。
【0043】
ステップS105: ファイル生成部21は、ステップS102〜S103で生成された下記の圧縮データ(1)〜(3)と、画像伸張時に必要な付随情報(画像領域A、Bやブロックのレイアウト情報、画像領域Bのブロックごとの動きベクトルなど)とをまとめて、画像データ群の圧縮ファイルを生成する。
(1)画像領域Aの輝度成分をフレーム内圧縮した圧縮データ
(2)画像領域Bの輝度成分をフレーム間予測差分圧縮した圧縮データ
(3)色差成分をフレーム内圧縮した圧縮データ
なお、ここでの圧縮ファイルは、個々の画像データの単位に生成してもよい。また、動画像ファイルのように、画像データ群を一つにまとめた圧縮ファイルを生成してもよい。
【0044】
《本実施形態の効果など》
本実施形態では、動きベクトルの空間変化が大きい画像領域Aを選別する。このような画像領域Aは、隣接する動きベクトルが大きく変動するため、フレーム間の絵柄の動きが複雑で、フレーム間相関が比較的低い箇所であると考えられる。したがって、この画像領域Aについては、フレーム間予測差分圧縮では圧縮効率を稼ぐことが難しい。そこで、この画像領域Aについてはフレーム内圧縮に切り換えることにより、圧縮効率を高める。
【0045】
一方、本実施形態では、動きベクトルの空間変化が小さい画像領域Bを選別する。このような画像領域Bは、隣接する動きベクトルの変動が小さく、フレーム間の絵柄の動きが単純で、フレーム間相関が比較的高い箇所であると考えられる。したがって、この画像領域Bについては、フレーム間予測差分圧縮を適用することで圧縮効率を高める。
【0046】
さらに、本実施形態では、画像データを階層的にブロック区分し、そのブロックごとに動きベクトルを求める。このとき、動きベクトルの空間変化が大きい画像領域Aでは、動きベクトルの階層間の変化がなかなか整定しないため、ブロックの最終的な区分サイズが小さくなる。一方、動きベクトルの空間変化が小さい画像領域Bでは、動きベクトルの階層間の変化が早い段階で整定するため、ブロックの最終的な区分サイズが大きくなる。そのため、ブロックの最終的な区分サイズを大小判定することで、画像領域A,Bを的確に分けることが可能になる。
【0047】
さらに、本実施形態では、階層的なブロック区分が所定サイズScより小さくなる前段階において、ブロック区分を停止する。このとき、停止条件を満足せずにブロック区分を停止したブロックについては、最終的な区分サイズが所定サイズScより小さくなるブロックと見なし、画像領域Aに分類する。このような見なし処理によって、余分なブロック区分を省いて、処理の高速化を実現できる。
【0048】
また、本実施形態では、輝度成分については画像領域によるフレーム内圧縮/フレーム間予測差分圧縮の切り換えを行う。一方、色差成分についてはフレーム内圧縮を行う。一般に、色差成分については、撮像素子のベイヤ配列上のRB画素間隔や、後処理の色差ローパスフィルタ処理などの影響により、輝度成分に比べて空間周波数の帯域が狭くなる。そのため、フレーム内における色差成分の変化は比較的少なく、フレーム内相関が高くなる。したがって、色差成分については、フレーム内圧縮によって十分に高い圧縮効率を得ることが可能になる。
【0049】
《実施形態の補足事項》
なお、上述した実施形態では、再帰読み出しの関数F()を使用する例について説明した。しかしながら、本発明はこれに限定されるものではない。画像データを階層的に区分しながら、個々のブロックについて動きベクトル検出を個別に実施してもよい。
【0050】
また、上述した実施形態では、矩形状のブロック(図8参照)に区分する例について説明した。しかしながら、本発明はこのブロック形状に限定されるものではない。例えば、エッジに沿ってブロックを区切ることによって、被写体やその被写体パーツの輪郭形状を有するブロックを生成してもよい。
【0051】
なお、上述した実施形態では、ブロックの階層間における動きベクトルの変化を空間変化とし、その空間変化の大小判定から画像領域A,Bを区分している。しかしながら、本発明はこれに限定されるものではない。隣接ブロック間における動きベクトルの変化を空間変化とし、その空間変化の大小判定から画像領域A,Bを区分してもよい。
【0052】
また、上述した実施形態では、画像圧縮装置13を電子カメラ11に搭載する態様について説明した。しかしながら、本発明はこれに限定されるものではない。例えば、画像圧縮装置13単体で構成してもよい。また、コンピュータと画像処理プログラムを用いて、画像圧縮装置13をソフトウェア的に実現してもよい。
【0053】
なお、上述した実施形態では、画像データの輝度色差成分に対して画像圧縮処理を行っている。しかしながら、本発明はこれに限定されるものではない。例えば、RGB成分それぞれについて、上述した輝度成分と同様の画像圧縮処理を施してもよい。また、G成分のみ輝度成分と同様の画像圧縮処理を施し、RB成分についてはフレーム内圧縮を施してもよい。
【実施例1】
【0054】
[フレーム内圧縮/フレーム間圧縮の切り換え効果]
図9〜図11は、画像データ群(フレーム番号0〜180)の演算値(予測差分など)を求め、その演算値の標準偏差Sigmaをフレーム番号ごとにプロットしたグラフである。なお、グラフ中のプロット記号は、下記の圧縮方式を意味する。
(*) 階層的に求めた動きベクトルを用いて圧縮データを求めた場合
(×) グローバル動き補償を行って圧縮データを求めた場合(参考データ)
(+) 動き補償を行わずに圧縮データを求めた場合(参考データ)
(□) 画像全域にフレーム内圧縮を行った場合(参考データ)
(■) ブロック空間差分を最小化する動きベクトルの理想値を用いて、フレーム間予測差分を求めた場合(参考データ)
以下、これらのグラフ別に結果を説明する。
【0055】
まず、図9に示すプロット(*)は、射影成分を用いて階層的な動きベクトルを簡易に求め、これら動きベクトルを用いて画像全域にフレーム間予測差分圧縮を行ったケースである。動きの激しいフレーム番号(60〜120)では、このプロット(*)は、フレーム内圧縮のプロット(□)よりも標準偏差Sigmaが高くなり、圧縮効率の向上に限界がある。
【0056】
図10に示すプロット(*)は、サイズの大きな階層上位のブロックでは射影成分を用いて動きベクトルを求め、サイズの小さな階層下位のブロックでは空間差分を極小化する動きベクトルを求めている。このような部分改良により、プロット(*)が示す標準偏差Sigmaは全般的に低くなり、圧縮効率に一定の改善が見られる。
【0057】
図11に示すプロット(*)は、上述した実施形態に則して、画像データを画像領域A,Bに区分して、画像領域A,Bごとにフレーム内圧縮/フレーム間予測差分圧縮を適応的に切り替えるケースである。この場合、プロット(*)が示す標準偏差Sigmaは更に低くなり、圧縮効率が一段と改善されることが分かる。
【0058】
図12は、上述した図11の標準偏差をエントロピーに換算したものである。この結果からも、本実施形態における圧縮効率の改善効果が確認できる。
【実施例2】
【0059】
[輝度色差成分への適用]
次に、輝度色差成分(ここではYCbCr)からなるカラー画像データに本実施形態を適用するケースについて効果を説明する。
【0060】
図13は、画像データ群(フレーム番号0〜180)の圧縮データを求め、その圧縮データのエントロピーをフレーム番号ごとにプロットしたグラフである。なお、グラフ中のプロット記号は、下記の圧縮方式を意味する。
(*) 階層的に求めた動きベクトルを用いてフレーム間予測差分圧縮を行った場合
(□) 輝度色差成分YCbCrを画像領域A,Bに区分して、フレーム内圧縮/フレーム間予測差分圧縮を適応的に切り替えた場合
(×) グローバル動き補償を行って圧縮データを求めた場合(参考データ)
(+) 動き補償を行わずに圧縮データを求めた場合(参考データ)
(■) 輝度色差成分YCbCrにフレーム内圧縮を行った場合(参考データ)
(○) 色成分RGBにフレーム内圧縮を行った場合(参考データ)
【0061】
この図13に示すプロット(○)とプロット(■)とを比較すると、RGB色空間から輝度色差空間へ変換するだけで、フレーム内圧縮のエントロピーを1.5bit程度下げ、圧縮効率を改善することができる。
【0062】
しかしながら、図13に示すプロット(□)とプロット(■)とを比較すると、プロット(□)の方が全般的にエントロピーが高く、圧縮効率が悪いことが分かる。これは、フレーム内の情報量が少ない色差成分YCbCrについて部分的にフレーム間予測差分圧縮を行ったために、情報量が逆に増えてしまったためと推測される。
【0063】
そこで、色差成分CrCbのみフレーム内圧縮を行う方式に切り換え、図14に示すプロット(□)を得た。このプロット(□)とプロット(■)とを比較すると、プロット(□)の方が全般的にエントロピーが低く、圧縮効率の改善に成功している。
【0064】
なお、本実施例では、輝度色差成分YCbCrの処理について説明した。しかしながら、本発明はこれに限定されるものではない。例えば、Lab等のその他の輝度色差成分に適用してもよい。
【産業上の利用可能性】
【0065】
以上説明したように、本発明は、画像圧縮装置などに利用可能な技術である。
【図面の簡単な説明】
【0066】
【図1】電子カメラ11の構成を示すブロック図である。
【図2】動きベクトル検出のメインルーチンを説明する流れ図である。
【図3】ツリー構造データの一例を模式的に示す図である。
【図4】関数F(ブロック)の処理制御を説明する流れ図(1/2)である。
【図5】関数F(ブロック)の処理制御を説明する流れ図(2/2)である。
【図6】射影成分の計算の様子を示す図である。
【図7】画像圧縮の動作を説明する流れ図である。
【図8】画像のブロック区分の一例を示す図である。
【図9】圧縮効率を示す実験結果である。
【図10】圧縮効率を示す実験結果である。
【図11】圧縮効率を示す実験結果である。
【図12】圧縮効率を示す実験結果である。
【図13】圧縮効率を示す実験結果である。
【図14】圧縮効率を示す実験結果である。
【符号の説明】
【0067】
11…電子カメラ,12…撮像部,13…画像圧縮装置,14…動きベクトル検出部,15…区分部,16…探索部,17…判定部,18…フレーム内圧縮部,19…フレーム間圧縮部,20…色差圧縮部,21…ファイル生成部
【特許請求の範囲】
【請求項1】
画像データ群をデータ圧縮する画像圧縮方法であって、
前記画像データ間の動きベクトルを画像上の複数位置について求めるステップと、
前記動きベクトルの前記画像上の変化(以下、空間変化という)を大小判定するステップと、
圧縮対象の前記画像データから、前記動きベクトルの前記空間変化が大きいと判定される画像領域Aを選別し、選別された前記画像領域Aにフレーム内圧縮を施すステップと、
圧縮対象の前記画像データから、前記動きベクトルの前記空間変化が小さいと判定される画像領域Bを選別し、選別された前記画像領域Bにフレーム間予測差分圧縮を施すステップと
を備えたことを特徴とする画像圧縮方法。
【請求項2】
画像データ群をデータ圧縮する画像圧縮装置であって、
前記画像データ間の動きベクトルを画像上の複数位置について求める動きベクトル検出部と、
前記動きベクトルの前記画像上の変化(以下、空間変化という)を大小判定する判定部と、
圧縮対象の前記画像データから、前記動きベクトルの前記空間変化が大きいと判定される画像領域Aを選別し、選別された前記画像領域Aにフレーム内圧縮を施すフレーム内圧縮部と、
圧縮対象の前記画像データから、前記動きベクトルの前記空間変化が小さいと判定される画像領域Bを選別し、選別された前記画像領域Bにフレーム間予測差分圧縮を施すフレーム間圧縮部と
を備えたことを特徴とする画像圧縮装置。
【請求項3】
請求項2に記載の画像圧縮装置において、
前記動きベクトル検出部は、
前記画像データをブロックに区分し、そのブロックを更に区分することにより、階層的なブロック区分を行う区分部と、
階層上位の前記ブロックの動きベクトルを先に求め、前記動きベクトルを開始位置として、階層下位の前記ブロックの動きベクトルを探索する探索部とを備え、
前記判定部は、前記ブロックの階層間における動きベクトルの変化が所定の許容量内に整定したことを停止条件として、階層下位のブロック区分を停止し、
前記フレーム内圧縮部は、前記ブロックの最終的な区分サイズが所定サイズより小さくなるブロックを選別し、選別された前記ブロックを前記画像領域Aとしてフレーム内圧縮を施し、
前記フレーム間圧縮部は、前記ブロックの最終的な区分サイズが前記所定サイズより大きいブロックを選別し、選別された前記ブロックを前記画像領域Bとしてフレーム間予測差分圧縮を施す
ことを特徴とする画像圧縮装置。
【請求項4】
請求項3に記載の画像圧縮装置において、
前記判定部は、階層的なブロック区分が前記所定サイズより小さくなる前段階で、前記ブロックの更なる区分を停止し、
前記フレーム内圧縮部は、前記停止条件を満足せずにブロック区分を停止したブロックを、最終的な区分サイズが所定サイズより小さくなるブロックと見なして、フレーム内圧縮を施し、
前記フレーム間圧縮部は、前記停止条件を満足してブロック区分を停止したブロックにフレーム間予測差分圧縮を施す、
ことを特徴とする画像圧縮装置。
【請求項5】
請求項2ないし請求項4のいずれか1項に記載の画像圧縮装置において、
前記画像データは、輝度成分および色差成分を含むカラー画像であり、
前記色差成分にフレーム内圧縮を施す色差圧縮部を備え、
前記輝度成分は、前記フレーム内圧縮部および前記フレーム間圧縮部によって前記画像領域A,Bに分けて圧縮する
ことを特徴とする画像圧縮装置。
【請求項6】
請求項2ないし請求項5のいずれか1項に記載の画像圧縮装置と、
被写体を撮像して画像データ群を生成する撮像部とを備え、
前記画像圧縮装置は、前記撮像部で生成された前記画像データ群をデータ圧縮する
ことを特徴とする電子カメラ。
【請求項7】
コンピュータを、請求項2ないし請求項5のいずれか1項に記載の画像圧縮装置として機能させるための画像処理プログラム。
【請求項1】
画像データ群をデータ圧縮する画像圧縮方法であって、
前記画像データ間の動きベクトルを画像上の複数位置について求めるステップと、
前記動きベクトルの前記画像上の変化(以下、空間変化という)を大小判定するステップと、
圧縮対象の前記画像データから、前記動きベクトルの前記空間変化が大きいと判定される画像領域Aを選別し、選別された前記画像領域Aにフレーム内圧縮を施すステップと、
圧縮対象の前記画像データから、前記動きベクトルの前記空間変化が小さいと判定される画像領域Bを選別し、選別された前記画像領域Bにフレーム間予測差分圧縮を施すステップと
を備えたことを特徴とする画像圧縮方法。
【請求項2】
画像データ群をデータ圧縮する画像圧縮装置であって、
前記画像データ間の動きベクトルを画像上の複数位置について求める動きベクトル検出部と、
前記動きベクトルの前記画像上の変化(以下、空間変化という)を大小判定する判定部と、
圧縮対象の前記画像データから、前記動きベクトルの前記空間変化が大きいと判定される画像領域Aを選別し、選別された前記画像領域Aにフレーム内圧縮を施すフレーム内圧縮部と、
圧縮対象の前記画像データから、前記動きベクトルの前記空間変化が小さいと判定される画像領域Bを選別し、選別された前記画像領域Bにフレーム間予測差分圧縮を施すフレーム間圧縮部と
を備えたことを特徴とする画像圧縮装置。
【請求項3】
請求項2に記載の画像圧縮装置において、
前記動きベクトル検出部は、
前記画像データをブロックに区分し、そのブロックを更に区分することにより、階層的なブロック区分を行う区分部と、
階層上位の前記ブロックの動きベクトルを先に求め、前記動きベクトルを開始位置として、階層下位の前記ブロックの動きベクトルを探索する探索部とを備え、
前記判定部は、前記ブロックの階層間における動きベクトルの変化が所定の許容量内に整定したことを停止条件として、階層下位のブロック区分を停止し、
前記フレーム内圧縮部は、前記ブロックの最終的な区分サイズが所定サイズより小さくなるブロックを選別し、選別された前記ブロックを前記画像領域Aとしてフレーム内圧縮を施し、
前記フレーム間圧縮部は、前記ブロックの最終的な区分サイズが前記所定サイズより大きいブロックを選別し、選別された前記ブロックを前記画像領域Bとしてフレーム間予測差分圧縮を施す
ことを特徴とする画像圧縮装置。
【請求項4】
請求項3に記載の画像圧縮装置において、
前記判定部は、階層的なブロック区分が前記所定サイズより小さくなる前段階で、前記ブロックの更なる区分を停止し、
前記フレーム内圧縮部は、前記停止条件を満足せずにブロック区分を停止したブロックを、最終的な区分サイズが所定サイズより小さくなるブロックと見なして、フレーム内圧縮を施し、
前記フレーム間圧縮部は、前記停止条件を満足してブロック区分を停止したブロックにフレーム間予測差分圧縮を施す、
ことを特徴とする画像圧縮装置。
【請求項5】
請求項2ないし請求項4のいずれか1項に記載の画像圧縮装置において、
前記画像データは、輝度成分および色差成分を含むカラー画像であり、
前記色差成分にフレーム内圧縮を施す色差圧縮部を備え、
前記輝度成分は、前記フレーム内圧縮部および前記フレーム間圧縮部によって前記画像領域A,Bに分けて圧縮する
ことを特徴とする画像圧縮装置。
【請求項6】
請求項2ないし請求項5のいずれか1項に記載の画像圧縮装置と、
被写体を撮像して画像データ群を生成する撮像部とを備え、
前記画像圧縮装置は、前記撮像部で生成された前記画像データ群をデータ圧縮する
ことを特徴とする電子カメラ。
【請求項7】
コンピュータを、請求項2ないし請求項5のいずれか1項に記載の画像圧縮装置として機能させるための画像処理プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2008−79238(P2008−79238A)
【公開日】平成20年4月3日(2008.4.3)
【国際特許分類】
【出願番号】特願2006−259094(P2006−259094)
【出願日】平成18年9月25日(2006.9.25)
【出願人】(000004112)株式会社ニコン (12,601)
【Fターム(参考)】
【公開日】平成20年4月3日(2008.4.3)
【国際特許分類】
【出願日】平成18年9月25日(2006.9.25)
【出願人】(000004112)株式会社ニコン (12,601)
【Fターム(参考)】
[ Back to top ]