(第1の実施形態)
図1は、本発明の画像処理装置としてのカメラ100の構成を示すブロック図である。なお、カメラ100は、所定の記録フォーマットに従い動画信号を記録する。また、記録媒体に記録された動画信号やその他の情報は、FAT(File Allocation Table)ファイルシステムに従い、ファイルとして管理される。
図1において、撮像部101は被写体を撮影し、被写体を示す動画データを生成して出力する。撮像部101は、ズームレンズやフォーカスレンズ等の光学系、CCD等のイメージセンサ、アイリス、撮影した動画データをデジタルデータに変換するAD変換器などを有する。画像処理部102は、撮像部101から入力された動画データに対し、設定値に基づいてホワイトバランスや色、明るさなどを調整する画質調整処理を施し、バス115を介して表示制御部105、メモリ111に出力する。露出制御部103は制御部110からの指示に従い、撮像部101におけるシャッター、絞り、撮像素子のゲイン利得の組み合わせによって被写体の露出量を適正に制御する。音声入力部104は、マイクロフォンやアンプ、AD変換器等を有し、被写体の音声を取得し、音声データを出力する。表示制御部105は、制御部110からの指示に従い、動画像や各種の情報を表示部106に表示する。表示部106は液晶パネル等、公知の表示装置を含む。
記録再生部107は、制御部110からの指示に従い、圧縮された動画データや音声データ、各種の情報を記録媒体108に記録し、記録媒体108から再生する。記録媒体108はメモリカードやハードディスク(HDD)等のランダムアクセス可能な記録媒体である。本実施形態では、記録媒体108はフラッシュメモリを内蔵した交換可能なメモリカードである。また、記録媒体108は、不図示の装着、排出機構により、カメラ100に対してユーザが容易に装着、排出可能な構成である。
制御部110はマイコンやその他必要なメモリを有し、不図示の不揮発メモリに記憶されたプログラムに従い、操作部109からのユーザ指示に応じてカメラ100の各部の動作を制御する。操作部109は、ユーザにより操作可能な電源スイッチ、動画像の撮影開始、停止を指示するトリガスイッチ、再生スイッチ、メニュースイッチ等の各種のスイッチを備える。制御部110は、操作部109からのユーザの指示を受け付ける。また、ユーザはメニュースイッチを操作して表示部106にメニュー画面を表示し、このメニュー画面を利用してカメラ100の動作モードや、動画記録時の圧縮モードなどを変更し、また、設定を変更する。
メモリ111は、画像処理部102から出力された動画データや音声入力部102からの音声データ、表示用の画像信号、圧縮された動画データやその他の情報を記憶する。符号化復号化部112は、記録時においては、撮影された動画データを符号化してその情報量を圧縮し、メモリ111に記憶する。また、符号化復号化部112は、再生時においては、再生された動画データや音声データを復号し、情報量を伸張する。出力部113は、撮影された動画データ、或いは、再生された動画データなどをカメラ100の外部機器に出力する。通信部114は、公知の通信方式により外部機器との間で通信を行い、動画や音声データ、或いはその他の情報を送受信する。内部バス115は、カメラ100の各部の間で、各種のデータやコマンドを転送するために用いられる。
次に、撮影時の処理について説明する。操作部109によりカメラ100の電源が投入されると、制御部110はカメラ100の各部を制御して、撮像部101により得られた動画データをメモリ111に記憶する。そして、メモリ111に記憶された動画データに応じた被写体の動画像を表示部106に表示し、記録待機状態となる。なお、本実施形態では、撮像部101から出力される動画のフレームレートは、30フレーム/秒であるとする。また、本実施形態では、記録する動画の各フレームの画面サイズ(画素数)を複数の画面サイズの一つに設定することができる。
この状態で、制御部110は、操作部109により記録開始の指示があるか否かを判別する。記録開始の指示があると、制御部110は各部を制御し、動画と音声の符号化を開始すると共に、記録媒体108に対する動画と音声の記録を開始する。撮像部101は、制御部110からの指示により、撮影した動画データを順次出力する。画像処理部102は、制御部110からの指示に従って動画データを処理し、バス115を介して順次メモリ111に記憶する。また、音声入力部104は、被写体の音声を取得し、音声データをメモリ111に記憶する。符号化復号化部112は、メモリ111に記憶された動画データを圧縮して、再度メモリ111に記憶する。このとき、制御部110は、後述の第1のモードと第2のモードのうち、ユーザによって選択された圧縮モード(記録モード)に応じて動画データを符号化、圧縮するように符号化復号化部112を制御する。制御部110は、記録再生部107に対し、メモリ111から動画データと音声データを読み出し、記録媒体108に記録するように指示する。記録再生部107は、圧縮された動画データと音声データに対し、必要なデータを付加してデータストリームを生成する。そして、所定のファイルシステムに従って、このデータストリームを含む動画ファイルを生成し、記録媒体108に記録する。
そして、記録開始後、操作部109により記録停止の指示があると、制御部110は記録再生部107に対して、動画と音声の記録停止を指示する。記録再生部107は、制御部110からの記録停止の指示に従い、記録媒体108に対する動画と音声の記録を停止する。本実施形態では、記録開始の指示から記録停止の指示までの間に記録された一連の動画を一つのファイルとして管理する。
また、制御部110は、記録を停止すると、記録が停止された動画の先頭フレームを読み出すように記録再生部107に指示する。記録再生部107は、動画の先頭フレームを記録媒体108から読み出し、メモリ111に記憶する。制御部110は、符号化復号化部112に対し、メモリ111に記憶された先頭フレームを復号するように指示する。符号化復号化部112は、メモリ111から先頭フレームの画像データを読み出して復号し、メモリ111に記憶する。制御部110は更に、画像処理部102に対し、復号された先頭フレームの画像データのサイズを縮小させ、記録再生部107に出力させる。そして、制御部110は、記録再生部107に対し、縮小された先頭フレームの画像データを、動画ファイルのサムネイル画像として記録する様に指示する。記録再生部107は、縮小された先頭フレームの画像データをサムネイル画像として動画ファイルに格納し、記録媒体108に記録する。
次に、再生処理について説明する。操作部109により再生モードの指示があると、制御部110は、記録媒体108に記録された動画ファイルのうち、指定された動画ファイルのサムネイル画像を再生するように、記録再生部107を制御する。そして、再生されたサムネイル画像を表示制御部105に送る。表示制御部105はサムネイル画像を表示部106に表示する。そして、ユーザが操作部109を操作し、再生が指示されると、制御部110は表示中のサムネイル画像に対応した動画ファイルを再生するように、記録再生部107を制御する。記録再生部107は、指定された動画ファイルを記録媒体108から再生し、動画ファイルに格納された動画データと音声データをメモリ111に記憶する。符号化復号化部112はメモリ111から動画データを読み出して復号し、再度メモリ111に記憶する。このとき、制御部110は、再生された動画データの圧縮モードを検出し、検出された圧縮モードに応じて復号、伸張処理を行う様に符号化復号化部112に指示する。表示制御部105はメモリ111から復号された動画データを読み出し、再生された動画像を表示部106に表示する。そして、再生停止の指示があると、制御部110は動画ファイルの再生を停止し、再び、サムネイル画像を表示部106に表示させる。
次に、本実施形態における圧縮モードについて説明する。本実施形態では、動画を圧縮して記録する際の圧縮モードとして、第1のモードと第2のモードを備えている。本実施形態は、フレーム内予測符号化方式とフレーム間予測符号化方式を用いて動画像を符号化する。
第1のモードにおいては、撮影された動画の各フレームを、H.264/MPEG4 AVCにおけるフレーム内予測(イントラ予測)を用いた符号化方式により符号化し、圧縮する。この様に、フレーム内予測により各フレームを圧縮することで、復号時に参照フレームを記憶する必要が無くデコーダの負荷が軽い、迅速に復号できる、どのフレームからも復号できるなどの利点がある。
また、第2のモードにおいては、撮影された動画の各フレームを、H.264/MPEG4 AVCにおけるイントラ予測による符号化方式、或いは、動き補償前方予測フレーム間符号化方式を用いて符号化し、圧縮する。この様に、フレーム間予測を用いて動画を圧縮することで、フレーム内予測のみによる圧縮時に比べ、符号量を大幅に削減することができる。ユーザは操作部109を操作することにより、撮影した動画の目的に合わせて、これら二つの圧縮モードの何れか一方を自由に選択し、設定することができる。
なお、ここでは、イントラ予測により圧縮したフレームをIフレームと呼び、前方予測フレーム間圧縮方式を用いて圧縮したフレームをPフレームと呼ぶ。
第1のモードでは、撮影された動画の全てのフレームがIフレームとして符号化される。また、第2のモードでは、15フレーム毎に1フレームがIフレームとして符号化され、残りの14フレームがPフレームとして符号化される。
図2は、符号化復号化部112における符号化処理のブロックを示す図である。図2において、メモリ111より読み出された動画データが水平、垂直それぞれ所定数の画素からなるマクロブロック毎に入力され、演算部201、フレーム内予測部208、動き予測部211に出力される。演算部201は、切り替え部213から出力された予測画像データと入力された画像データとの差分を演算し、整数変換部202に出力する。整数変換部202は、演算部201からのデータに対して直交変換の一つである整数変換処理を施し、入力されたデータを空間成分から周波数成分に変換して量子化部203に出力する。量子化部203は、後述の様に量子化テーブル選択部212から供給された量子化テーブルに従って、各マクロブロックの変換係数を量子化し、エントロピー符号化部204と逆量子化部205に出力する。本実施形態では、マクロブロックの各変換係数に対する量子化幅(量子化ステップ)が割り当てられた量子化テーブルを複数用意し、量子化テーブル選択部212はこれらの量子化テーブルを保持している。量子化テーブル選択部212は、後述の様に、制御部110からの圧縮強度Qの値に対応した量子化テーブルを選択し、量子化部203に送る。
逆量子化部205は、入力されたデータを逆量子化し、逆整数変換部206に出力する。逆整数変換部206は、逆量子化部205からのデータに対して逆整数変換処理を施して、元の空間成分のデータに変換し、演算部207に出力する。演算部207は、切り替え部213からの予測画像データと逆整数変換処理されたデータとを加算し、フレーム内予測部208、ループフィルタ209に出力する。ループフィルタ209は、演算部207からの局部復号データに対して指定されたフィルタ処理を施し、蓄積部210に記憶する。蓄積部210はループフィルタ210からの画像データを記憶する。動き予測部211は、第2の圧縮モードにおいて、Pフレームを処理する際に、蓄積部210に記憶された参照フレームの画像データのうち、入力された画像データとの間の予測誤差(差分)が最も少なくなるマクロブロックを検出し、検出したマクロブロックに対する動きベクトルを動き補償部211に知らせる。動き補償部212は、動きベクトルに従い、蓄積部210から予測画像データとしてのマクロブロックのデータを読み出し、切り替え部213に出力する。
一方、フレーム内予測部208は、第1の圧縮モード、或いは、第2の圧縮モードにおいてIフレームを処理する際に、フレーム内予測処理を行う。即ち、フレーム内予測部208は、演算部207からの、入力されたマクロブロックの画像データに対して画面上で上、もしくは左に隣接する画素のデータと、入力された画像データとに基づいて、最適なイントラ予測モードを検出する。そして、検出したイントラ予測モードで処理するために必要な予測画像データを切り替え部213に出力する。H.264では、互いに異なる所定数のイントラ予測モードが用意されている。フレーム内予測部208は、これらの予測モードのうち、予測誤差が最も少なくなる予測モードを検出する。
切り替え部213は、制御部110からの指示に従い、フレーム内予測部208と動き補償部212からの予測画像データの一方を選択し、演算部201と207に出力する。切り替え部213は、前述の様に、第1の圧縮モードにおいては、動画の記録中は常にフレーム内予測部208からの予測画像データを選択して出力する。また、切り替え部213は、第2の圧縮モードにおいては、Iフレームを処理する際にはフレーム内予測部208からの予測画像データを選択し、Pフレームを処理する際には動き補償部212からの予測画像データを選択する。
フレーム内予測部208が検出した予測モードを示す情報と、動き予測部211が検出した動きベクトルのデータはエントロピー符号化部204に出力される。エントロピー符号化部204は、量子化部203からのデータと、量子化テーブル選択部212により選択されている量子化テーブルの番号、予測モードを示す情報、或いは、動きベクトルのデータを符号化し、圧縮された動画データとして出力する。
次に、第1の圧縮モードと第2の圧縮モードにおけるデータレート(符号量)の制御について説明する。本実施形態では、何れの圧縮モードにおいても、圧縮後の動画データのデータレート(単位時間あたりのデータ量(符号量))が、設定された目標値に近づくように、データレートを制御する。そして、データレートを制御するための制御パラメータとして、圧縮強度Qという変数を用いる。圧縮強度Qは1からnまでの所定値を持ち、各値に対応して動画を量子化する際の量子化テーブル番号が割り当てられる。本実施形態では、圧縮強度Qの値が大きいほど、発生する符号量が小さくなるように設定されているものとする。
まず、第1の圧縮モードにおけるレート制御について説明する。制御部110は、第1の圧縮モードが設定されると、第1の圧縮モードにおける圧縮動画データの目標データレート(目標値)Fi(メガバイト/秒(MB/s))を設定する。本実施形態では、カメラ100のデータ処理能力や記録媒体108に対する最大の記録データレート、或いは、動画ファイルの記録フォーマットにより規定された上限のデータレートなどに基づき、これらを超えない様に目標データレートFiを設定する。
図3(a)は、制御部110によるデータレートの制御処理を示すフローチャートである。制御部110は、1フレームの動画データの符号化処理が完了する度に、図3の処理を実行し、次の1フレームを圧縮するための圧縮強度Qの値を決定する。制御部110は、符号化復号化部112が1フレームの動画データの圧縮処理を完了し、その旨の情報を符号化復号化部112から受けると、図2の処理を開始する。これから圧縮するフレームを記録開始からt番目のフレームとする。制御部110は、直前のフレーム、つまりt−1番目のフレームの圧縮後のデータ量(サイズ)F(t−1)の情報を符号化復号化部112から受け取る(S301)。
次に、制御部110は、目標データレートとフレームレートに基づいて決定した1フレームあたりの目標サイズIoptとt−1番目のフレームのデータ量F(t−1)との比率Pを以下の式(1)より算出する(S302)。
P=Iopt/F(t−1)・・・(1)
なお、第1の圧縮モードにおける1フレームあたりの目標サイズIopt(バイト)は、Iopt=Fi/フレームレートにより予め算出されている。
ここで、P<1の場合、圧縮後のデータ量が目標サイズよりも大きいので、t番目のフレームのデータ量が目標サイズよりも小さくなるように制御したい。また、P>1の場合、圧縮後のデータ量が目標サイズよりも小さいので、t番目のフレームのデータ量は目標サイズよりも大きくなるように制御したい。
次に、制御部110は、圧縮強度Qと圧縮後のデータ量の変化率Sとを対応づけたテーブルに基づいて、t番目のフレームの圧縮強度Q(t)を決定する。
図4は、テーブルをグラフとして表した図である。図4において、変化率Sは、Qの値を1に設定して、あるフレームの画像を圧縮した際の圧縮後のデータ量に対する、各Qの値で同じフレームを圧縮した際の圧縮後のデータ量の割合を示すものである。本実施形態では、圧縮強度Qを1に設定したときの圧縮後のデータ量を100%とし、各Qの値と変化率Sを対応づけたテーブルを不図示の不揮発メモリに記憶している。
そして、制御部110は、図4に示すように、このテーブルに基づいて、メモリ111に記憶しておいた、t−1番目のフレームを圧縮したときの圧縮強度Q(t−1)に対応した変化率S(t−1)を検出する。そして、制御部110は、式(2)に基づき、この変化率S(t−1)に対して式(1)で算出した比率Pを乗算することで、t番目のフレームに対応した変化率S(t)を算出する(S303)。
S(t)=P×S(t−1)・・・(2)
次に、制御部110は、再度、テーブルに基づいて、このS(t)に対応した圧縮強度Q(t)を決定する(S304)。ここで、S(t−1)=P×S(t−1)と同じ値がテーブルに記憶されていない場合には、テーブルに記憶されたSの値のうち、最も近い値をS(t−1)とする。
例えば、t−1番目のフレームの圧縮後のサイズを100キロバイト(KB)、目標サイズを80KBとし、t−1番目のフレームの圧縮強度Qが5で、これに対応する変化率Sが60%だったとする。
この時、目標サイズとt−1番目のフレームのサイズの比率Pは、式(1)よりP=80/100=0.8となる。そこで、t−1番目のフレームについては、60%×0.8=48%の変化率に対応した圧縮強度Qをテーブルから求める。
次に、制御部110は、決定したQ(t)の値を符号化復号化部112に出力し(S305)、更に、次のフレームの圧縮に備え、Q(t)をQ(t−1)としてメモリ111に保存する(S306)。制御部110は、以上の処理を記録停止の指示があるまで繰り返す。なお、記録開始後の、先頭フレームについては、予め設定された圧縮強度Qを設定する。
次に、第2の圧縮モードにおけるレート制御について説明する。前述の様に、第2のモードにおいては、撮影された動画の各フレームを、H.264/MPEG4 AVCにおけるイントラ予測による符号化方式、及び、動き補償前方予測フレーム間符号化方式を用いて符号化し、圧縮する。また、第2のモードでは、15フレーム毎に1フレームをIフレームとして符号化し、残りの14フレームがPフレームとして符号化される。
制御部110は、第2の圧縮モードが設定されると、目標データレートFip(MB/s)を設定する。第2の圧縮モードでは、イントラ予測に加え、フレーム間の予測符号化を用いる。フレーム間予測符号化により符号化を行う場合、フレーム内予測による符号化に比べ、被写体の状態による符号量の変動が大きい。例えば、図5の様に、圧縮後の各フレームのデータ量が目標値の上下を往復するように変動し、一定に収束しない場合(発振した場合)、目標データレートから大きく外れてしまう可能性がある。前述の様に、カメラ100の処理能力や記録フォーマットに規定された上限のレートなどを基に目標レートを設定するが、このように発振によって目標のビットレートを外れてしまうと、最悪の場合処理が間に合わずに、撮影が停止してしまう危険性がある。
そこで、制御部110は、第2の圧縮モードでは、同じ画面サイズの動画を圧縮する場合に、第1の圧縮モードよりも低いレートを目標レートFipとして設定する。例えば、本実施形態では、第1の圧縮モードの目標レートFi(第1の値)に対し、その2/3、或いは3/4程度のレート(第2の値)を第2の圧縮モードの目標レートFipとして設定するが、もちろん、これ以外のレートでもよい。
図3(b)は、制御部110による第2の圧縮モード時のデータレートの制御処理を示すフローチャートである。制御部110は、1フレームの動画データの符号化処理が完了する度に、図3(b)の処理を実行し、次の1フレームを圧縮するための圧縮強度Qの値を決定する。制御部110は、符号化復号化部112が1フレームの動画データの圧縮処理を完了し、その旨の情報を符号化復号化部112から受けると、図3(b)の処理を開始する。これから圧縮するフレームを記録開始からt番目のフレームとする。制御部110は、直前のフレーム、つまりt−1番目のフレームの圧縮後のデータ量(サイズ)F(t−1)の情報を符号化復号化部112から受け取る(S307)。
次に、制御部110は、t−1番目のフレームがIフレームであったか、或いは、Pフレームであったかを判別する(S308)。t−1番目のフレームがIフレームであった場合、制御部110は、目標サイズをIフレームの目標サイズであるIoptに設定する(S309)。また、t−1番目のフレームがPフレームであった場合、制御部110は、目標サイズをPフレームの目標サイズであるPoptに設定する(S310)。
フレーム間予測により動画を符号化する場合、フレーム内予測による符号化に比べて予測誤差が少なく、符号量を少なくすることができる。そこで、第2の圧縮モードにおいては、目標レートとフレームレートとに基づいて、IフレームとPフレームに対し、それぞれ独立に目標サイズを設定している。即ち、Iフレームの目標サイズIoptがPフレームの目標サイズのm倍(mは所定値)となるように、目標レートとフレームレートとに基づいて、目標サイズを設定する。例えば、Iopt×2+Popt×28がFipとなるように、目標サイズを設定する。
次に、制御部110は、設定された目標サイズとt−1番目のフレームのデータ量F(t−1)との比率Pを以下の式(3)または式(4)より算出する(S311)。
t−1番目のフレームがIフレームの場合
P=Iopt/F(t−1)・・・(3)
t−1番目のフレームがPフレームの場合
P=Popt/F(t−1)・・・(4)
ここで、P<1の場合、圧縮後のデータ量が目標サイズよりも大きいので、t番目のフレームのデータ量が目標サイズよりも小さくなるように制御したい。また、P>1の場合、圧縮後のデータ量が目標サイズよりも小さいので、t番目のフレームのデータ量は目標サイズよりも大きくなるように制御したい。
次に、制御部110は、第1の圧縮モード時と同様に、圧縮強度Qと圧縮後のデータ量の変化率Sとを対応づけたテーブルに基づいて、t−1番目のフレームの圧縮強度Q(t−1)に対応した変化率S(t−1)を検出する。そして、制御部110は、式(5)に示す様に、変化率S(t−1)と比率P、更に、時定数T(0<T<1)を乗算し、t番目のフレームの変化率S(t)を算出する(S312)。
S(t)=P×S(t−1)×T・・・(5)
この様に、第2の圧縮モードでは、時定数Tを用いてS(t)を決めるので、符号化された動画データのレートが目標レートに収束せず、発振してしまうことを防止することができる。なお、図6(a)に示すように、時定数Tを大きく設定するほど収束は早いものの、フレームサイズが発振して収束しない可能性が高くなる。また、図6(b)に示す様に、時定数Tを小さく設定するほど収束は遅いものの、発振する可能性が低い。また、時定数Tを小さくしすぎると、被写体の画像の変化に対してデータレートの追従性が悪くなることや、目標レートとは異なるレートに収束してしまう可能性もある。
本実施形態では、時定数Tとして所定値を設定し、撮影中は変更しないものとするが、動画の記録中に、圧縮された動画のデータ量の変動などに基づいて、時定数Tを撮影中に適宜変更するようにしてもよい。
次に、制御部110は、再度、テーブルに基づいて、このS(t)に対応した圧縮強度Q(t)を決定する(S313)。そして、制御部110は、このQ(t)が所定の範囲に含まれているか否かを判別する。
第2の圧縮モードでは、Q(t−1)に対する圧縮強度Qの変化量に対して上限と下限を設ける。即ち、図7に示す様に、Q(t−1)から閾値ThLowだけ小さい値を下限値とし、Q(t−1)から閾値ThHighだけ大きい値を上限値とする。また、本実施形態では、目標レートを超えない様に制御するために、下限側の閾値ThLowよりも上限側の閾値ThHighを大きく設定する。そして、制御部110は、S313で決定されたQ(t)が、下限値よりも小さいかどうかを判別する(S314)。ここで、Q(t)が下限値よりも小さかった場合、制御部110は、Q(t)を下限値Q(t−1)−ThLowに設定する(S319)。また、Q(t)が下限値以上であった場合、制御部110は、Q(t)が上限値よりも大きいか否かを判別する(S315)。Q(t)が上限値よりも大きい場合、制御部110は、Q(t)を上限値Q(t−1)+ThHighに設定する(S316)。また、S314とS315の判定の結果、Q(t)が上限値と下限値の間である場合、制御部110はQ(t)をそのまま設定する。
次に、制御部110は、決定したQ(t)の値を符号化復号化部112に出力し(S317)、更に、次のフレームの圧縮に備え、Q(t)をQ(t−1)としてメモリ111に保存する(S318)。制御部110は、以上の処理を記録停止の指示があるまで繰り返す。なお、第2の圧縮モードにおいても、記録開始後の、先頭フレームについては、予め設定された圧縮強度Qを設定する。
次に、本実施形態における撮影時の露出制御について説明する。前述のように、撮像部101において、レンズを通過した被写体の反射光は撮像素子に結像し、フォトダイオードによる光電変換によって撮像素子に溜まった電荷をデジタルデータに変換することにより、画像情報を得る。この時、露出制御部103はシャッター、絞り、撮像素子のゲインを制御することによって被写体の露出量を適正に制御する。
例えば、被写体を明るく写したい場合、シャッター速度を遅くして露光時間を長くする、絞りを開いて光の取り込み量を多くする、ゲイン(感度)を調整して電荷量を増やすなどの方法がある。それぞれの方法に制約や弊害があるため、制御部110は、シーンに応じて適応的に、ないしはユーザの指定に従って、シャッター速度、絞り値、感度調整の値の組み合わせを変更するように露出制御部103に指示する。
カメラ100では、シャッター速度、絞り値、感度の組み合わせの露出制御データを不揮発メモリに記憶しておき、この露出制御データに基づいて、適応的に露出を制御する。
また、本実施形態で、圧縮モードに応じてゲイン(感度)の最大値を変更している。撮像素子の感度を上げると、弊害としてノイズが劣化することが知られている。ノイズは時空間的にランダムな成分を多く含むランダムノイズと固定パターンノイズに区別される。これらのノイズは、被写体にとっては不要な情報であり、圧縮後のデータ量を増加させることになる。そのため、撮像素子の感度を上げると、圧縮された動画の画質は劣化する。
ここで、フレーム間予測による符号化では前フレームとの差分を符号化するため、固定パターンのノイズに関しては差分が発生せず、符号量の増加は少ないが、ランダムノイズによる画質劣化は回避できない。一方で、フレーム内予測により圧縮を行う場合、ランダムノイズと固定パターンノイズの何れも符号量を増加させることになる。加えて、フレーム内符号化により圧縮した場合、フレーム間予測符号化により圧縮した場合に比べて符号量が多くなし、圧縮効率が低い。そのため、データレートを一定に抑えようとした場合、フレーム間圧縮を行う場合よりも、フレーム内圧縮を行う場合の方が圧縮率を大きくすることになり、圧縮ノイズによる画質劣化がより顕著である。
この様な理由から、第1の圧縮モードでは、第2の圧縮モードよりも、撮像部101における感度アップの際の最大ゲイン量を低く設定している。これにより、撮像部101からの動画データに含まれるノイズ成分を抑え、ノイズによる符号量の増加と画質劣化を防ぐようにした。
また、画像処理部102では、撮像部101からの動画データに対し、シャープネス強調処理を施す。シャープネス強調処理により、画像中のノイズ成分も輪郭として強調されてしまうことがある。そこで、本実施形態では、制御部110は、第1の圧縮モードにおいては、第2の圧縮モードよりも、シャープネス強調の度合いを低くするように、画像処理部102を制御する。また、これ以外にも、撮影中に各フレームの符号量と目標サイズとの差分が所定値よりも大きい場合には、シャープネス強調の度合いを低くして、ノイズによる符号量の増加と画質劣化を抑えるように、制御部110が画像処理部102を制御してもよい。
次に、本実施形態において記録される動画ファイルについて説明する。本実施形態では、クイックタイム(登録商標)ムービーファイルに応じた形式(ファイルの拡張子は.MOV)で動画ファイルを記録する。
図11は、第2の圧縮モードで記録される動画ファイルの構成を示す図である。図11において、ファイルに記録されるデータは「アトム」と呼ばれるデータ構造の内部に記述され、アトムを単位としてファイルに記録される。アトムは次のようなフィールドから構成される。
Size:Sizeフィールドを含む、アトム全体のデータサイズを表す4バイトのフィールド
Type:アトムの種類を表す4バイトのタイプ識別子。
Typeフィールド以降のフィールドはアトムによってはオプションであるため、ここでは説明を省略する。また、アトム内にアトムを包含することが可能であり、それにより入れ子構造を実現している。
図11において、ftyp(ファイルタイプアトム)1101はファイルの種別を表すアトムである。moov(ムービーアトム)1102には、後述のmvhd(ムービーヘッダアトム)やtrak(トラックアトム)などを含む、音声や映像に関する情報が格納されている。mdat(ムービーデータアトム)1103には、音声や映像の実データが格納されている。
udta(ユーザーデータアトム)1104には任意のデータが格納されている。meta(メタデータアトム)1105には、カメラ100のモデル名や通信部114で受信したカメラ100の位置情報やUTC(協定世界時:CoordinatedUniversalTime)などのメタデータが格納されている。mvhd1106には、動画の作成日時や修正日時、タイムスケール、Duraionなどが記載されている。映像用のtrak1107には、映像の符号化の種類や後述のstsc(サンプルチャンクアトム)やstss(同期サンプルアトム)、stsz(サンプルサイズアトム)、stco(チャンクオフセット)などmdat内の映像データに関する情報が格納されている。音声用のtrak1108には、音声データのサンプリング周波数やビット数、チャンネル数などのmdat内の音声データに関する情報が格納されている。
映像用のstsc1109は、1チャンクがいくつのサンプル(映像の場合はフレーム)数で構成されているかを表している。本実施例では全ての映像チャンクが1チャンク=1サンプル(フレーム)から構成されるものとする。stssアトム1110にはキーフレーム番号が格納されている。例えば、動画データにおいて15フレーム毎にIフレームが含まれる場合、stss1110には、1、16、31、46、・・・とキーフレーム番号が記載される。映像用stsz1111には各サンプルのデータサイズが格納されている。映像用stco1112には各チャンクのファイル先頭からのオフセット(バイト数)が格納されている。
mdat1103には、音声チャンクデータ1113、1114と、映像チャンクデータ1115−1120が格納される。各映像チャンクに記載したアルファベットはフレームの種類を表し、アルファベットの添え字の数字は先頭からのフレーム番号を表している。つまり、映像チャンク1115には、一番目のフレームでIフレーム(フレーム内予測により圧縮されたフレーム)のデータが格納されていることを示している。また、映像チャンク1116には、二番目のフレームでPフレーム(フレーム間予測により圧縮されたフレーム)のデータが格納されていることを示している。
以上のように、映像用のstszおよびstcoに格納されている情報を用いることで、mdat内の任意の映像フレームにアクセスするが可能である。
また、図12は第1の圧縮モードで記録される動画ファイルの構成を示す図である。図12において、ftyp1201からstsc1209は図11のftyp1101からstsz1109と同様であるので、説明を省略する。また、stsz1210から音声チャンク1213はstsz1111から音声チャンク1114と同様であるので、説明を省略する。
映像チャンク1214から1219はmdat1203内に格納されている映像チャンクデータを表しており、すべてのフレームがIピクチャから構成されている。そのため、明示的にどのフレームがキーフレームであるかを表す必要がないので、映像trak1207内にstssは存在しない。また、stssを記述する際には、全てのフレームがキーフレームであるので、1,2,3,4、・・・と記述すればよい。
この様に、本実施形態では、第1の圧縮モードでは、前フレームの圧縮強度と実際のデータ量に基づいて、次のフレームの圧縮強度を決定し、データレートを制御することで、圧縮後の動画のデータレートを目標レートに近くなるように調整することができる。
また、第2の圧縮モードにおいては、前フレームの圧縮強度と実際のデータ量に基づいて、次のフレームの圧縮強度を決定し、データレートを制御することで、圧縮後の動画データのデータレートを目標レートに近くなるように調整することができる。
また、第2の圧縮モードでは、第1の圧縮モードに比べて、目標レートを低く設定している。更に、第2の圧縮モードでは、前フレームの符号量と目標サイズとの比率と前フレームの変化率に加え、所定の時定数(係数)Tを乗算することで現フレームの変化率Sを算出する。
そのため、フレーム間予測を用いて符号化を行う場合にも、各フレームの符号量の変化が発振することなく、圧縮後の動画データのレートを目標レートに収束させることができる。
そして、本実施形態では、この様に、各フレームをフレーム内予測により符号化する第1の圧縮モードと、フレーム内予測とフレーム間予測とを用いて符号化する第2の圧縮モードで、それぞれレート制御の手順を変えている。
そのため、各圧縮モードにおいて、適切にレート制御を行うことができ、目標レートに対して符号化された動画のデータレートを収束させることができる。
(第2の実施形態)
次に、第2の実施形態を説明する。第2の実施形態では、第2の圧縮モードにおける制御手順が第1の実施形態とは異なる。その他の構成は第1の実施形態と同じであるので、第2の圧縮モードにおける制御手順について説明する。
フレーム間予測符号化により符号化を行う場合、参照フレームと符号化対象フレームとの間の相関が高く、予測誤差(差分)が少なければ発生する符号量が少なくなる。そのため、フレーム内予測により符号化を行う場合に比べ、大幅に符号量を削減することができる。一方、参照フレームと符号化対象フレームとの間の相関が低く、予測誤差(差分)が多い場合、発生する符号量が多くなる。そのため、この場合には、IフレームとPフレームとの符号量の差が少なくなる。
図8は、フレーム内予測とフレーム間予測を用いて動画を符号化した場合の発生符号量の例を示している。例えば、被写体の動きが小さく、参照フレームと符号化対象フレームとの間の相関が高い場合には、グラフ802の様に、矢印で示したIフレームの符号量と、Pフレームの符号量との差が大きくなる。また、被写体の動きが大きく、参照フレームと符号化対象フレームとの間の相関が低い場合には、グラフ801の様に、矢印で示したIフレームの符号量と、Pフレームの符号量との差が小さくなる。更に、符号化対象の被写体の複雑度(空間周波数)によっても符号量が変化する。
そこで、第2の実施形態では、第2の圧縮モードにおいて、圧縮強度と変化率のテーブルを複数備え、符号化対象の被写体の複雑度と動きに応じて、これら複数のテーブルの何れかを自動的に選択するようにした。
制御部110は、撮影開始の指示の前の待機状態において、動画データの各フレームについて、前フレームとの動きの有無を判定する。例えば、制御部110は、撮影された動画データの前後のフレーム間の差分に基づいて動きの有無を判別する。或いは、制御部110は、不図示の動きセンサの出力に基づいて動きの有無を判別する。更に、制御部110は、撮影待機状態において、各フレームについて複雑度(空間周波数)が高いか低いかを判定する。例えば、制御部110は、撮影された各フレームに対してハイパスフィルタ、ローパスフィルタの処理を施し、それぞれの出力に基づいて複雑度を判定する。そして、制御部110は、これらの判定結果に基づいて、現在撮影されているフレームが、図9に示す四つの区分901−904の何れであるかをフレーム毎に判別する。
図10は、図9に示す各区分に対応したテーブルを示すグラフである。図10において、ライン1001は区分902に対応し、ライン1002は区分901に対応し、ライン1003は区分904に対応し、ライン1004は区分903にそれぞれ対応する。この様に、動きが小さく、また、複雑度も低い被写体の場合には、フレーム間の予測誤差が少なく、圧縮強度Qは比較的小さな値を設定することが多いと考えられる。そのため、区分903に対応した被写体については、圧縮強度Qが小さい範囲に対し、変化率Sが大きく変化する様に設定されたテーブルを選択する。また、動きが大きく、また、複雑度が高い被写体の場合には、圧縮強度Qが小さな値から大きな値まで変動することが考えられる。そのため、区分902に対応した被写体については、圧縮強度Qが小さい値から大きい値まで、比較的同じ様に変化率Sが変化する様に設定されたテーブルを選択する。
制御部110は、撮影開始の指示に応じて、撮影開始直前のフレームに対する、区分901−904の判定結果に基づいて、複数のテーブルの何れかを選択する。そして、これ以降、撮影中は、選択したテーブルに基づいて、図3(b)に示す処理を実行する。
この様に、本実施形態では、第2の圧縮モードにおいて、圧縮強度Qと変化率Sのテーブルを複数用意し、撮影された被写体の状態によってこれら複数のテーブルの何れかを選択する構成とした。
そのため、符号化対象の被写体の状態に応じた最適なレート制御を行うことが可能となる。
なお、第2の実施形態では、撮影待機状態において被写体の状態を図9の様に判別し、撮影開始の直前のフレームに対する判別結果に基づいて、テーブルを選択していた。これ以外にも、例えば、撮影開始の直前の複数フレーム分の動き判別結果と複雑度の判別結果に基づいてテーブルを選択する様にしてもよい。或いは、撮影開始後に、撮影された各フレームの状態をフレーム毎に判別し、この判別結果に基づいて、撮影中に適宜テーブルを変更する様にしてもよい。