本発明の実施の形態を、添付の図面を参照して以下に詳細に説明するが、本発明は、以下の実施形態に限定されるものではない。
[第1実施形態]
第1実施形態による符号化装置及び符号化方法について、図面を参照して詳細に説明する。図1は、本実施形態による画像処理装置100を示すブロック図である。図1に示すように、本実施形態による画像処理装置100は、CPU101と、メモリ102と、不揮発性メモリ103と、操作部104と、撮像部112と、画像処理部113と、符号化処理部114と、表示制御部115と、表示部116とを有している。更に、本実施形態による画像処理装置100は、通信制御部117と、通信部118と、記録媒体制御部119と、内部バス130とを有している。画像処理装置100は、撮影レンズ111を用いて被写体の光学像を撮像部112の画素アレイに結像するが、撮影レンズ111は、画像処理装置100のボディ(筐体、本体)から、着脱不能であってもよいし、着脱可能であってもよい。また、画像処理装置100は、記録媒体制御部119を介して画像データの書き込み及び読み出しを記録媒体120に対して行う。記録媒体120は、画像処理装置100に着脱可能であってもよいし、着脱不能であってもよい。
CPU101は、不揮発性メモリ103に記憶されているコンピュータプログラムを実行することによって、内部バス130を介して画像処理装置100の各部(各機能ブロック)の動作を制御する。
メモリ102は、書き換え可能な揮発性メモリである。メモリ102は、画像処理装置100の各部の動作を制御するためのコンピュータプログラム、画像処理装置100の各部の動作に関するパラメータ等の情報、通信制御部117によって受信される情報等を一時的に記録する。また、メモリ102は、撮像部112によって取得された画像、画像処理部113、符号化処理部114等によって処理された画像及び情報を一時的に記録する。メモリ102は、これらを一時的に記録するために十分な記憶容量を備えている。
不揮発性メモリ103は、電気的に消去及び記録が可能なメモリであり、例えばEEPROM等が用いられる。不揮発性メモリ103は、画像処理装置100の各部の動作を制御するコンピュータプログラム及び画像処理装置100の各部の動作に関するパラメータ等の情報を記憶する。当該コンピュータプログラムにより、本実施形態による画像処理装置100によって行われる各種動作が実現される。
操作部104は、画像処理装置100を操作するためのユーザインターフェースを提供する。操作部104は、電源ボタン、メニューボタン、撮影ボタン等の各種ボタンを含んでおり、各種ボタンはスイッチ、タッチパネル等により構成される。CPU101は、操作部104を介して入力されたユーザの指示に従って画像処理装置100を制御する。なお、ここでは、操作部104を介して入力される操作に基づいてCPU101が画像処理装置100を制御する場合を例に説明したが、これに限定されるものではない。例えば、不図示のリモートコントローラ、不図示の携帯端末等から通信部118を介して入力される要求に基づいて、CPU101が画像処理装置100を制御してもよい。
撮影レンズ(レンズユニット)111は、ズームレンズ、フォーカスレンズ等を含む不図示のレンズ群、不図示のレンズ制御部、不図示の絞り等によって構成される。撮影レンズ111は、画角を変更するズーム手段として機能し得る。レンズ制御部は、CPU101から送信される制御信号により、焦点の調整及び絞り値(F値)の制御を行う。撮像部112は、動画像を構成する複数の画像を順次取得する取得手段として機能し得る。撮像部112としては、例えば、例えばCCD(電荷結合素子)、CMOS(相補型金属酸化膜半導体)素子等でのエリアイメージセンサが用いられる。撮像部112は、被写体の光学像を電気信号に変換する不図示の光電変換部が行列状、すなわち、2次元的に配列された不図示の画素アレイを有している。当該画素アレイには、被写体の光学像が撮影レンズ111によって結像される。撮像部112は、撮像した画像を画像処理部113又はメモリ102に出力する。なお、撮像部112は、静止画像を取得することも可能である。
画像処理部113は、撮像部112から出力される画像データ、又は、メモリ102から読み出された画像データに対し、所定の画像処理を行う。当該画像処理の例としては、補間処理、縮小処理(リサイズ処理)、色変換処理等が挙げられる。また、画像処理部113は、撮像部112によって取得された画像データを用いて、露光制御、測距制御等のための所定の演算処理を行う。画像処理部113による演算処理によって得られた演算結果に基づいて、露光制御、測距制御等がCPU101によって行われる。具体的には、AE(自動露出)処理、AWB(オートホワイトバランス)処理、AF(オートフォーカス)処理等がCPU101によって行われる。
符号化処理部114は、画像データに対してフレーム内予測符号化(画面内予測符号化)、フレーム間予測符号化(画面間予測符号化)等を行うことによって、画像データのサイズを圧縮する。符号化処理部114は、例えば、半導体素子等により構成された符号化装置である。符号化処理部114は、画像処理装置100の外部に設けられた符号化装置であってもよい。符号化処理部114は、例えば、H.265(ITU H.265又はISO/IEC23008−2)方式によって符号化処理を行う。符号化処理部114の詳細については、図2を用いて後述する。
表示制御部115は、表示部116を制御する。表示部116は、不図示の表示画面を備える。表示制御部115は、画像データに対してリサイズ処理、色変換処理等を行うことにより、表示部116の表示画面に表示可能な画像を生成し、当該画像、すなわち、画像信号を表示部116に出力する。表示部116は、表示制御部115から送られてくる画像信号に基づいて、表示画面に画像を表示する。表示部116は、表示画面にメニュー等の設定画面を表示する機能であるOSD(On Screen Display)機能を備えている。表示制御部115は、画像信号にOSD画像を重畳して表示部116に画像信号を出力し得る。表示部116は、液晶ディスプレイ、有機ELディスプレイ等により構成されており、表示制御部115から送られてきた画像信号を表示する。表示部116は、例えばタッチパネルであってもよい。表示部116がタッチパネルである場合、表示部116は、操作部104としても機能し得る。
通信制御部117は、CPU101に制御される。通信制御部117は、IEEE802.11等によりあらかじめ定められた無線通信規格に適合する変調信号を生成して、当該変調信号を通信部118に出力する。また、通信制御部117は、無線通信規格に適合する変調信号を、通信部118を介して受信し、受信した変調信号を復号し、復号した信号に応じた信号をCPU101に出力する。通信制御部117は、通信設定を記憶するためのレジスタを備えている。通信制御部117は、CPU101からの制御によって、通信時の送受信感度を調整し得る。通信制御部117は、所定の変調方式で送受信を行うことができる。通信部118は、通信制御部117から供給される変調信号を画像処理装置100の外部にある情報通信機器等の外部機器127へ出力し、また、外部機器127からの変調信号を受信するアンテナを備えている。また、通信部118には、通信用の回路等が備えられている。なお、ここでは、通信部118によって無線通信が行われる場合を例に説明したが、通信部118によって行われる通信は無線通信に限定されるものではない。例えば、配線等を用いた電気的な接続によって通信部118と外部機器127とが接続されてもよい。
記録媒体制御部119は、記録媒体120を制御する。記録媒体制御部119は、CPU101からの要求に基づいて、記録媒体120を制御するための制御信号を記録媒体120に出力する。記録媒体120としては、例えば不揮発性メモリや磁気ディスク等が用いられる。記録媒体120は、上述したように、着脱可能であってもよいし、着脱不能であってもよい。記録媒体120は、符号化された画像データ等を記録する。記録媒体120のファイルシステムに適合した形式で画像データ等がファイルとして保存される。ファイルとしては、例えば、MP4ファイル(ISO/IEC 14496-14:2003)、MXF(Material eXchange Format)ファイル等が挙げられる。各々の機能ブロック101〜104、112〜115、117、119は、内部バス130を介して互いにアクセス可能となっている。
<符号化処理部>
図2は、本実施形態による画像処理装置100に備えられている符号化処理部114を示すブロック図である。図2においては、符号化処理部114とメモリ102とが抜き出して示されている。符号化処理部114は、例えば、動画圧縮規格の1つであるH.265の符号化方式によって符号化を行う。
輝度情報取得部201は、メモリ102から符号化対象となる画像データを取得し、画像データの画素値に基づいて各画素、又は複数の画素を含む画素群に対応する輝度情報を算出することにより輝度情報の取得を行う。すなわち、輝度情報取得部201は輝度情報取得手段として機能する。算出された輝度情報は、メモリ102に一旦保存してもよく、輝度情報取得部201からブロックサイズ制限部202に直接送信してもよい。なお、輝度情報は、各画素の輝度に関する情報を含み得る。具体的には、輝度情報は、各画素の輝度を含んでもよく、複数の画素の輝度から算出された輝度の平均値、合計値、最大値、最小値等の加工後の値を含んでもよい。
ブロックサイズ制限部202は、画像の符号化の単位であるブロックのサイズ(ブロックサイズ)の上限の制限に関するブロックサイズ制限情報を生成し、メモリ102に保存することによりブロックサイズ制限情報の設定を行う。また、ブロックサイズ制限部202は、設定されたブロックサイズ制限情報の更新を行う。すなわち、ブロックサイズ制限部202はブロックサイズ制限手段として機能する。ここでブロックとしては、マクロブロック、Coding Tree Unit(CTU)、Coding Unit(CU)、Prediction Unit(PU)、Transform Unit(TU)等が用いられ得る。マクロブロックはH.264規格における符号化の単位である。CTU、CU、PU、TUはH.265規格における符号化の単位である。CTUは、H.265規格において各画像の符号化処理を行うブロックの単位である。CUはCTUを再帰的に分割するためのブロックの単位である。PUはCUを予測処理用に分割するためのブロックの単位である。TUはCUを変換処理用に分割するためのブロックの単位である。
ブロックサイズ制限部202は、輝度情報取得部201から受信した輝度情報、あるいはメモリ102から取得した輝度情報に基づいて、各ブロックのうちのいずれか、又は全てのブロックサイズの範囲の制限を規定するブロックサイズ制限情報を生成する。そして、ブロックサイズ制限部202は、ブロックサイズ制限情報を予測符号化方法決定部203へ出力する。また、ブロックサイズ制限部202は、予測符号化条件情報として、ある着目画素ブロックを符号化する際に、その着目画素ブロック(符号化対象ブロック)の予測画素ブロックを取得する範囲を規定する情報を予測符号化方法決定部203に出力する。
予測符号化方法決定部203は、ブロックサイズ制限部202から入力される予測符号化条件情報に基づいて、符号化対象領域内の各画素ブロックに対する予測符号化方法を決定する。予測符号化方法決定部203は、入力される画像信号と、メモリ102から読み出した符号化済みの画素値とから、簡易的なフレーム内予測又は動き検出を含むフレーム間予測処理を行うことによって、符号化効率を示す評価値を算出する。そして、予測符号化方法決定部203は、符号化効率が最良となる予測符号化方式を決定する。符号化対象の画素ブロックがIスライスの場合には、予測符号化方法決定部203は、フレーム内の予測画素のブロックサイズと予測モードとを決定する。符号化画素ブロックがPスライス又はBスライスの場合には、フレーム内予測又はフレーム間予測の内、符号化効率の高い方を選択する。なお、フレーム内の全てのスライスがIスライスであるフレームはIフレームと称され、フレーム内の全てのスライスがPスライスであるフレームはPフレームと称され、フレーム内の全てのスライスがBスライスであるフレームはBフレームと称される。予測符号化方法決定部203は、フレーム内予測の場合にはブロックサイズ制限情報に基づき、フレーム内の予測画素のブロックサイズ、フレーム内予測モード等のフレーム内予測符号化用パラメータを決定する。更に、予測符号化方法決定部203は、ブロックサイズ制限情報に基づき、制限内に収まるようにフレーム内の予測画素のブロックサイズを分割する。予測符号化方法決定部203は、ブロックサイズ制限情報が無い場合には、フレーム内の予測画素のブロックサイズを決定する。また、予測符号化方法決定部203は、フレーム間予測の場合には、参照フレーム、画素ブロックの分割パターン、動きベクトル等のフレーム間予測符号化用パラメータを決定する。更に、予測符号化方法決定部203は、ブロックサイズ制限情報に基づき、制限内に収まるように画素ブロックの分割パターンを変更する。予測符号化方法決定部203は、決定した予測符号化用パラメータを予測符号化処理部204に出力する。
予測符号化処理部204は、符号化対象のフレーム中の着目画素ブロックを符号化する際、以下のように動作する。すなわち、予測符号化処理部204は、予測符号化方法決定部203によって決定された予測符号化用パラメータに応じて、メモリ102から読み出した符号化済み画像から予測画素ブロックを生成する。そして、予測符号化処理部204は、着目画素ブロックと予測画素ブロックとの差分である予測残差ブロックを、直交変換・量子化部205に出力する。また、予測符号化処理部204は、予測画素ブロックを局所復号化部206にも出力する。
直交変換・量子化部205は、予測符号化処理部204から供給される予測残差ブロックに対して直交変換処理を行う。また、直交変換・量子化部205は、符号量制御部207によって設定された量子化パラメータに応じた量子化ステップを用いて、直交変換処理により得られた係数を量子化する。直交変換・量子化部205は、量子化後の係数、すなわち、量子化データを、エントロピー符号化部208と局所復号化部206とに出力する。
局所復号化部206は、直交変換・量子化部205から入力される量子化データに対して、逆量子化処理及び逆直交変換処理を行うことによって、予測残差データを生成する。そして、局所復号化部206は、生成された予測残差データに、予測符号化処理部204から入力される予測画像を加算して復号化処理を行い、復号化処理によって得られた画素ブロックによって示される画像データをメモリ102に格納する。メモリ102に格納された復号化処理後の画像データは、フレーム内予測処理に利用される。更に、デブロッキングフィルタ処理が施された復号化データがメモリ102に保持される。メモリ102に保持されたデブロッキングフィルタ処理後の復号化データは、フレーム間予測処理にも利用される。
符号量制御部207は、符号化ピクチャバッファがオーバーフロー又はアンダーフローしないように符号化データの符号量を制御する。符号量制御部207は、エントロピー符号化部208から供給されるエントロピー符号化後の発生符号量に基づいて、後続のフレームに対する量子化パラメータを生成し、生成された量子化パラメータを直交変換・量子化部205に供給する。なお、符号量制御部207は、ブロックサイズ制限部202で設定された量子化優先度情報に基づいて、例えば重み付け量子化係数を変更することにより量子化パラメータを調整する。
エントロピー符号化部208は、入力される量子化データに対してスライス単位にCABAC(コンテキスト適応型2値算術符号化)によるエントロピー符号化処理を行う。エントロピー符号化部208は、入力される多値の量子化データを2値のデータに変換する2値化部と、2値化部によって生成される2値化データを格納する2値化データメモリとを有している。また、エントロピー符号化部208は、2値化データの発生確率をコンテキストに応じて計算し、計算によって求められた2値データの発生確率を保持するコンテキスト計算部を有する。また、エントロピー符号化部208は、コンテキスト計算部から供給される2値データの発生確率に応じて算術符号化を行う算術符号化部を有する。こうして符号化されたデータを多重化処理部209に出力するとともに、エントロピー符号化後の発生符号量を符号量制御部207に出力する。
以上のように、予測符号化方法決定部203、予測符号化処理部204、直交変換・量子化部205、局所復号化部206、符号量制御部207及びエントロピー符号化部208の一部又は全部は、符号化手段として機能する。この符号化手段による画像の符号化はブロックサイズ制限情報に基づき設定されるブロックを単位として行われる。
多重化処理部209は、画像の符号化の開始の際には、符号化対象のフレームのサイズ等の各種シンタックス情報に符号化された画像データを付加することでストリームデータを生成してメモリ102に保存する。
符号化処理部114のCPU210は、不揮発性メモリ103に記憶されているコンピュータプログラムを実行することによって、符号化処理部114の各部の動作を制御する。メモリ102は、符号化処理部114の各部の動作を制御するコンピュータプログラム、各部の動作に関するパラメータ等の情報を一時的に記憶する。
<ブロックの構成>
図3(a)、図3(b)及び図3(c)は、本実施形態における、ブロックの構成の一例を示す図である。図3(a)に示されるように、動画像を構成する1つの画像であるフレーム300は、最大ブロックサイズである複数のブロック301に分割することができる。複数のブロック301は、図3(a)において、A1、A2、A3、A4、…、B1、B2、…と示されている。各種ブロックにおける最大ブロックサイズについて説明する。ブロック301がマクロブロックである場合、ブロック301は、16×16個の画素302で構成される。ブロック301がCTU、CU、PUである場合、ブロック301は、64×64個の画素302で構成される。ブロック301がTUである場合、ブロック301は、32×32個の画素302で構成される。
図3(b)及び図3(c)は、ブロック301の構成例を示す図である。図3(b)に示されるように、ブロック301を各々が複数の画素302を含む複数の画素群303に分割して、画素群303に含まれる各画素302の輝度の平均値、合計値等を画素群303の輝度としてもよい。この場合、画素群303を画素302と同視して扱うことができる。このように、画素302又は画素群303は、輝度情報取得部201における輝度情報の算出を行う際の最小単位となる。
図3(c)は、最大ブロックサイズであるブロック301の分割の例を示す図である。上述のように、予測符号化方法決定部203は、ブロックサイズを決定する。例えば、ブロック301がCUの場合においては、最大ブロックサイズでは、ブロック301は64×64個の画素302で構成され、ブロック301は、ブロック304a、304b、304cのような異なるサイズの複数のブロックに分割することができる。各ブロック304a、304b、304cには、輝度情報の算出を行う複数の画素302又は複数の画素群303が含まれる。なお、マクロブロック、CTU、PU、TUにおいても同様にしてブロック301を複数のブロックに分割することができる。
<符号化処理部114の動作>
図4は、本実施形態による符号化処理部114の動作を示すフローチャートである。この動作は、画像処理装置100の電源がオンの状態において、不揮発性メモリ103に格納されているプログラムがメモリ102に展開され、符号化処理部114内のCPU210がメモリ102のプログラムを読み出して実行することにより実現される。図4のフローチャートによる処理は、フレームごとに実行されるものであり、当該処理は定期的に繰り返し実行されてもよい。
ステップS401において、CPU210は、画像処理部113がメモリ102に保存した伝達関数情報をメモリ102から取得する。その後、CPU210は、処理をステップS401からステップS402に移行させる。
ステップS402において、CPU210は、ステップS401においてメモリ102から取得した伝達関数情報が所定のHDR方式に対応する所定の伝達関数を示すものであるか否かを判断する。所定の伝達関数の一例としては、PQ(Perceptual Quantizer)、又は、HLG(Hybrid Log Gamma)が挙げられる。CPU210は、伝達関数情報が、所定のHDR方式に対応するものであると判断した場合(ステップS402においてYES)、処理をステップS402からステップS403に移行させる。CPU210は、伝達関数情報が、所定のHDR方式に対応するものでないと判断した場合(ステップS402においてNO)、処理をステップS402からステップS408に移行させる。
ステップS403において、CPU210は、画像処理部113によりメモリ102に画像データが書き込まれたことを確認し、メモリ102内の画像データが格納されているアドレスを示すアドレス情報を取得する。その後、CPU210は、処理をステップS403からステップS404に移行させる。
ステップS404において、CPU210は、輝度情報取得部201に対してメモリ102に格納されている画像データのアドレス情報を出力する。輝度情報取得部201は、画像データに含まれる画素値から画素302又は画素群303に対応する輝度情報を算出することにより輝度情報を取得する。なお、輝度情報の算出処理の詳細に関しては後述する。その後、CPU210は、処理をステップS404からステップS405に移行させる。
ステップS405において、CPU210は、画像処理装置100内にあらかじめ決められている設定情報に基づいて、ブロックサイズ制限の判断を画素単位で行うか、あるいは画素群単位で行うかを判断する。画像処理装置100内にあらかじめ決められている設定情報とは、例えば、撮影モード、解像度等の設定についての情報である。例えば、撮影モードが高フレームレートのモードに設定されている場合には、画素群単位で処理を行うことで処理を高速化することができる。同様に、解像度が高い設定となっている場合にも、画素群単位で処理を行うことで処理を高速化することができる。CPU210は、画素単位でブロックサイズ制限を行うと判断した場合(ステップS405において「画素単位」)、処理をステップS405からステップS406に移行させる。CPU210は、画素群単位でブロックサイズの制限を行うと判断した場合(ステップS405において「画素群単位」)、処理をステップS405からステップS407に移行させる。
ステップS406において、CPU210は、ブロックサイズ制限部202を制御することにより、画素単位でブロックサイズの制限を判断し、ブロックサイズ制限情報を生成する。ブロックサイズ制限部202における処理の詳細に関しては後述する。CPU210は、処理をステップS406からステップS408に移行させる。
ステップS407において、CPU210は、ブロックサイズ制限部202を制御することにより、画素群単位でブロックサイズの制限を判断し、ブロックサイズ制限情報を生成し、メモリ102に保存する。ブロックサイズ制限部202における処理の詳細に関しては後述する。CPU210は、処理をステップS407からステップS408に移行させる。
ステップS408において、CPU210は、メモリ102に保存されたブロックサイズ制限情報に基づいて、量子化の際における各ブロックの量子化パラメータの割り当てについての優先度を設定する。ブロックサイズ制限情報によりブロックサイズの上限が制限されているブロックに対しては量子化パラメータの割り当ての優先度を高く設定し、その他のブロックに対しては優先度を低く設定する。また、CPU210は、ブロックサイズの上限の制限の程度に応じて、優先度に重み付けをしてもよい。例えば、TUのブロックにおいて、ブロックサイズの上限が16×16個に制限されているブロックよりも、上限が8×8個に制限されているブロックの量子化パラメータの割り当てを優先させるように優先度の重み付けを設定することができる。その後、CPU210は、処理をステップS408からステップS409に移行させる。
ステップS409において、CPU210は、予測符号化方法決定部203、予測符号化処理部204、直交変換・量子化部205、局所復号化部206、符号量制御部207及びエントロピー符号化部208を制御して符号化処理を実行する。予測符号化方法決定部203は、ブロックサイズ制限情報に基づいて各ブロックのサイズを決定する。当該符号化処理は、このブロックを単位として行われる。その後、CPU210は、処理をステップS409からステップS410に移行させる。
ステップS410において、CPU210は、多重化処理部209を制御し、符号化された画像データに各種シンタックス情報を付加してストリームデータを生成し、生成されたストリームデータをメモリ102に保存する。その後、CPU210は、本フローチャートにおける処理を終了する。なお、シンタックス情報にはCEA−861.3規格で定められているMaximum Content Light Level(MaxCLL)、Maximum Frame−Average Light Level(MaxFALL)が含まれる。
なお、図4に示すフローチャートにおける処理は、CPU210を介在させずに各ブロックが実行することにより実現されてもよい。また、各ブロックは上述の処理の一部を並行して行ってもよい。
<輝度情報取得部201の動作>
図5は、本実施形態による輝度情報取得部201の動作を示すフローチャートである。本処理は、図4のステップS404における符号化処理部114の輝度情報取得部201の処理に関してより詳細に説明したものである。
ステップS501において、輝度情報取得部201は、メモリ102から画像データを読み出す。輝度情報取得部201は、読み出された画像データの画素値がYUV形式、YCbCr形式等である場合には、当該画像データの画素値からガンマ補正後のRGBデータ(以下、ガンマ補正後のRGBデータをR’G’B’データと呼ぶ)を算出する。その後、輝度情報取得部201は、算出されたR’G’B’データをメモリ102に保存する。輝度情報取得部201は、メモリ102からR’G’B’データを読み出し、R’G’B’データに対して、デガンマ処理を行いリニアなRGBデータを算出してメモリ102に保存する。輝度情報取得部201は、メモリ102からRGBデータを読み出し、RGBデータの中の最大値を算出して、MaxCLL値として取得する。更に、輝度情報取得部201は、RGBデータの中での平均値を算出してMaxFALL値として取得する。輝度情報取得部201は、算出されたMaxCLL及びMaxFALLを、輝度情報として、ブロックサイズ制限部202に送信し、又はメモリ102に保存する。その後、輝度情報取得部201は、処理をステップS501からステップS502に移行させる。
ステップS502において、輝度情報取得部201は、メモリ102から読み出した画像データの各画素302の画素値から、各画素302の輝度を取得する。なお、ステップS502の処理は、輝度がRGBデータから取得される場合には、ステップS501におけるMaxCLLを算出する処理又はMaxFALLを算出する処理の中で算出されたRGBデータ等の画素値を用いて行われてもよい。その後、輝度情報取得部201は、処理をステップS502からステップS503に移行させる。
ステップS503において、輝度情報取得部201は、メモリ102から画像データを読み出し、所定の画素群303単位で各画素群303の輝度の平均値、合計値、最大値、最小値等を算出する。なお、ステップS503の処理は、各画素群303の輝度がRGBデータから算出される場合には、ステップS501におけるMaxCLLを算出する処理又はMaxFALLを算出する処理の中で算出されたRGBデータ等の画素値を用いて行われてもよい。その後、輝度情報取得部201は、本フローチャートにおける処理を終了する。なお、図5に示すフローチャートの各ステップの処理は、輝度情報取得部201に代えてCPU210が行ってもよい。
<ブロックサイズ制限部202の動作>
図6は、本実施形態によるブロックサイズ制限部202の動作を示すフローチャートである。本処理は、図4のステップS406又はステップS407における符号化処理部114のブロックサイズ制限部202の処理に関して詳細に説明したものである。処理が画素単位で行われる場合はステップS406における処理となり、処理が画素群単位で行われる場合はステップS407の処理となる。
ステップS601において、ブロックサイズ制限部202は、ブロックサイズを仮決定する。一例として、本ステップで仮決定するブロックサイズは、CTU、CU、PU、TU等の最大ブロックサイズとしてもよい。その後、ブロックサイズ制限部202は、処理をステップS601からステップS602に移行させる。
ステップS602において、ブロックサイズ制限部202は、処理を行うブロックを選択する。本フローチャートにおいて、ループ処理によりステップS602が繰り返し実行されるごとに順次異なるブロックが選択される。ブロックの選択の順序は、例えば、いわゆるラスター順とすることができる。ラスター順とは、例えば、初回には、フレーム内の左上のブロックを選択し、次の回には、前回選択したブロックの右側のブロックを選択し、右端のブロックを選択した後は1つ下の行の左端のブロックを選択し、以下これを繰り返すという順序である。ブロックの選択の終了後、ブロックサイズ制限部202は、処理をステップS602からステップS603に移行させる。
ステップS603において、ブロックサイズ制限部202は、選択されたブロック内の画素302又は画素群303において、輝度情報が示す輝度が第1の範囲内であるか否かを判断する。ブロックサイズ制限部202は、画素302又は画素群303における輝度が第1の範囲内である場合には(ステップS603においてYES)、処理をステップS603からステップS604に移行させる。ブロックサイズ制限部202は、画素302又は画素群303における輝度が第1の範囲外である場合(ステップS603においてNO)、処理をステップS603からステップS605に移行させる。
ステップS604において、ブロックサイズ制限部202は、選択されたブロック内のブロックサイズの上限を所定の第1のサイズに制限するようにブロックサイズ制限情報を更新してメモリ102に保存する。その後、ブロックサイズ制限部202は、処理をステップS604からステップS607に移行させる。
ステップS605において、ブロックサイズ制限部202は、選択されたブロック内の画素302又は画素群303において、輝度情報が示す輝度が、第1の範囲内よりも低い輝度である第2の範囲内であるか否かを判断する。ブロックサイズ制限部202は、画素302又は画素群303における輝度が第2の範囲内であると判断した場合には(ステップS605においてYES)、処理をステップS605からステップS606に移行させる。ブロックサイズ制限部202は、画素302又は画素群303の輝度が第2の範囲外であると判断した場合(ステップS605においてNO)、処理をステップS605からステップS607に移行させる。
ステップS606において、ブロックサイズ制限部202は、選択されたブロック内のブロックサイズの上限を所定の第2のサイズに制限するようにブロックサイズ制限情報を更新してメモリ102に保存する。その後、ブロックサイズ制限部202は、処理をステップS606からステップS607に移行させる。なお、第2のサイズは第1のサイズよりも大きいサイズとして、ステップS606で設定されるブロックサイズの制限が、ステップS604で設定されるブロックサイズの制限よりも緩いものとすることが好ましい。この場合、ブロックサイズの上限の制限を輝度に応じて2段階に設定することができる。
なお、ブロックサイズ制限情報は、ブロックごとに、輝度が第1の範囲内又は第2の範囲内にある画素302又は画素群303のラスター順の番号で示されていてもよい。この場合、ブロックサイズ制限情報は、ブロック番号と、輝度が第1の範囲内である画素302又は画素群303の番号と、輝度が第2の範囲内である画素302又は画素群303の番号とを列挙した文字列により構成される。また、第1の範囲及び第2の範囲は、輝度の上限及び下限で規定される範囲であってもよく、所定の閾値を超える輝度というように下限のみで規定される範囲であってもよい。
ステップS607において、ブロックサイズ制限部202は、選択されたブロック内の全ての画素302又は全ての画素群303に対してステップS603からステップS606までの処理が実行されたか否かを判断する。ブロックサイズ制限部202は、選択されたブロック内の全ての画素302又は全ての画素群303に対して処理が実行されたと判断した場合(ステップS607においてYES)、処理をステップS607からステップS608に移行させる。ブロックサイズ制限部202は、選択されたブロック内に処理が実行されていない画素302又は画素群303があると判断した場合(ステップS607においてNO)、処理をステップS607からステップS603に移行させる。
ステップS608において、ブロックサイズ制限部202は、フレーム内の全てのブロックに対して、ステップS602からステップS607までの処理が実行されたか否かを判断する。ブロックサイズ制限部202は、フレーム内の全てのブロックに対して処理が実行されたと判断した場合(ステップS608においてYES)、処理をステップS608からステップS609に移行させる。ブロックサイズ制限部202は、フレーム内に処理が実行されていないブロックがあると判断した場合(ステップS608においてNO)、処理をステップS608からステップS602に移行させる。
ステップS609において、ブロックサイズ制限部202は、フレーム内のブロックサイズ制限情報にフレーム番号を付加して、メモリ102に保存し、本フローチャートにおける処理を終了させる。
なお、図6のフローチャートにおいては、輝度の判断を第1の範囲及び第2の範囲により行う場合が示されているが、同様にして3以上の範囲による輝度の判断を行ってもよい。また、輝度の判断を第1の範囲のみで行ってもよく、すなわち、ステップS605とステップS606を省略してもよい。また、図6のフローチャートにおける処理は、CTU、CU、PU、TUの各ブロックに対して実行されてもよく、ブロックの種類ごとにプロックサイズ制限情報が生成されてもよい。また、図6に示すフローチャートの各ステップの処理は、ブロックサイズ制限部202に代えてCPU210が行ってもよい。
本実施形態では、輝度が所定の範囲内、典型的には輝度が比較的大きい画素において、ブロックサイズの上限を制限することにより、ブロックサイズを小さくすることができる。これにより、輝度の大きい画素において特に顕著となる符号化の際の量子化による画質の劣化が及ぶ範囲を狭くすることができる。したがって、本実施形態によれば、符号化による画質の劣化を低減し得る符号化装置及び符号化方法が提供される。
[第2実施形態]
第2実施形態による符号化装置及び符号化方法について、図面を参照して詳細に説明する。本実施形態と第1実施形態との相違点は、ブロックサイズ制限部202の動作である。本実施形態において、画像処理装置100の構成は図1と同様であるため説明を省略する。また、本実施形態において、符号化処理部114の構成は図2と同様であるため説明を省略する。また、本実施形態において、符号化処理部114及び輝度情報取得部201の動作は、それぞれ、図4及び図5と同様であるため説明を省略する。
<ブロックサイズ制限部202の動作>
図7は、本実施形態によるブロックサイズ制限部202の動作を示すフローチャートである。本動作は、図4のステップS406又はステップS407における符号化処理部114のブロックサイズ制限部202の処理に関して詳細に説明したものである。処理が画素単位で行われる場合はステップS406における処理となり、処理が画素群単位で行われる場合はステップS407の処理となる。なお、以下の説明において、図6の説明と共通する部分については説明を省略又は簡略化することがある。
ステップS701において、ブロックサイズ制限部202は、ブロックサイズを仮決定する。当該処理は、図6のステップS601と同様である。その後、ブロックサイズ制限部202は、処理をステップS701からステップS702に移行させる。
ステップS702において、ブロックサイズ制限部202は、処理を行うブロックを選択する。当該処理は、図6のステップS602と同様である。ブロックの選択の終了後、ブロックサイズ制限部202は、処理をステップS702からステップS703に移行させる。
ステップS703において、ブロックサイズ制限部202は、選択されたブロック内の画素302又は画素群303において、輝度情報が示す輝度が第1の範囲内であるか否かを判断する。ブロックサイズ制限部202は、画素302又は画素群303における輝度が第1の範囲内である場合には(ステップS703においてYES)、処理をステップS703からステップS704に移行させる。ブロックサイズ制限部202は、画素302又は画素群303における輝度が第1の範囲外である場合(ステップS703においてNO)、処理をステップS703からステップS705に移行させる。
ステップS704において、ブロックサイズ制限部202は、レジスタのフラグFLG_Aの値を1にセットする。フラグFLG_Aは、値が1のとき、ブロック内に輝度が第1の範囲内である画素302又は画素群303を含む領域(以下、第1輝度領域と呼ぶ)が存在することを示し、値が0のとき、ブロック内に第1輝度領域が存在しないことを示す情報である。その後、ブロックサイズ制限部202は、処理をステップS704からステップS707に移行させる。なお、フラグFLG_Aには、ブロック内における第1輝度領域の位置情報も付加しておくものとする。
ステップS705において、ブロックサイズ制限部202は、選択されたブロック内の画素302又は画素群303において、輝度情報が示す輝度が、第1の範囲内よりも低い輝度である第2の範囲内であるか否かを判断する。ブロックサイズ制限部202は、画素302又は画素群303における輝度が第2の範囲内であると判断した場合には(ステップS705においてYES)、処理をステップS705からステップS706に移行させる。ブロックサイズ制限部202は、画素302又は画素群303の輝度が第2の範囲外であると判断した場合(ステップS705においてNO)、処理をステップS705からステップS707に移行させる。
ステップS706において、ブロックサイズ制限部202は、レジスタのフラグFLG_Bの値を1にセットする。フラグFLG_Bは、値が1のとき、ブロック内に輝度が第2の範囲内である画素302又は画素群303を含む領域(以下、第2輝度領域と呼ぶ)が存在することを示し、値が0のとき、ブロック内に第2輝度領域が存在しないことを示す情報である。その後、ブロックサイズ制限部202は、処理をステップS706からステップS707に移行させる。なお、フラグFLG_Bには、ブロック内における第2輝度領域の位置情報も付加しておくものとする。
ステップS707において、ブロックサイズ制限部202は、フラグFLG_Aの値が1であり、かつ、フラグFLG_Bの値も1であるか否かを判断する。この処理では、ブロックサイズ制限部202は、フラグFLG_A及びフラグFLG_Bに基づいて、選択されたブロック内に第1輝度領域と第2輝度領域との両方が存在するか否かを判断している。ブロックサイズ制限部202は、フラグFLG_Aの値が1であり、かつ、フラグFLG_Bの値も1であると判断した場合(ステップS707においてYES)、処理をステップS707からステップS708に移行させる。ブロックサイズ制限部202は、フラグFLG_Aの値とフラグFLG_Bの値の少なくとも1つが0であると判断した場合(ステップS707においてNO)、処理をステップS707からステップS710に移行させる。
ステップS708において、ブロックサイズ制限部202は、選択されたブロック内において、隣接している第1輝度領域と第2輝度領域が存在しているか否かを判断する。具体的には、ブロックサイズ制限部202は、フラグFLG_AとフラグFLG_Bに付加された画素302又は画素群303の位置情報に基づいて当該判断を行う。ブロックサイズ制限部202は、隣接している第1輝度領域と第2輝度領域が存在すると判断した場合(ステップS708においてYES)、処理をステップS708からステップS709に移行させる。ブロックサイズ制限部202は、隣接している第1輝度領域と第2輝度領域が存在しないと判断した場合(ステップS708においてNO)、処理をステップS708からステップS710に移行させる。
ステップS709において、ブロックサイズ制限部202は、隣接している第1輝度領域と第2輝度領域との境界を同一ブロックとするようにブロックサイズ制限情報を更新してメモリ102に保存する。画素302又は画素群303ごとに繰り返しステップS709を実行してもよく、その場合は、隣接している第1輝度領域と第2輝度領域を発見するごとにブロックサイズ制限情報を更新してメモリ102に保存する。その後、ブロックサイズ制限部202は、処理をステップS709からステップS710に移行させる。
ステップS710において、ブロックサイズ制限部202は、選択されたブロック内の全ての画素302又は画素群303に対してステップS703からステップS709の処理が実行されたか否かを判断する。ブロックサイズ制限部202は、選択されたブロック内の全ての画素302又は画素群303に対して処理が実行されたと判断した場合(ステップS710においてYES)、処理をステップS710からステップS711に移行させる。ブロックサイズ制限部202は、選択されたブロック内に処理が実行されていない画素302又は画素群303があると判断した場合(ステップS710においてNO)、処理をステップS710からステップS703に移行させる。
ステップS711において、ブロックサイズ制限部202は、再びフラグFLG_Aの値が1であり、かつ、フラグFLG_Bの値も1であるか否かを判断する。ブロックサイズ制限部202は、フラグFLG_Aの値が1であり、かつ、フラグFLG_Bの値も1であると判断した場合(S711においてYES)、処理をステップS711からステップS712に移行させる。ブロックサイズ制限部202は、フラグFLG_Aの値とFLG_Bの値の少なくとも1つが0であると判断した場合(S711においてNO)、処理をステップS711からステップS713に移行させる。
ステップS712において、ブロックサイズ制限部202は、ブロック内の画素302又は画素群303の輝度の分散値を算出することにより、ブロック内の輝度の平坦度を取得する。分散値とは、ブロック内における画素302又は画素群303の輝度の2乗の平均と平均の2乗との差である。ブロックサイズ制限部202は、輝度の分散値に応じてブロックサイズ制限情報を更新してメモリ102に保存する。例えば、ブロックサイズ制限部202は、輝度の分散値が小さい場合には、ブロックサイズ制限情報により規定されるブロックサイズの上限を低く設定することにより、ブロックサイズの制限を厳しくする。その後、ブロックサイズ制限部202は、処理をステップS712からステップS713に移行させる。
ステップS713において、ブロックサイズ制限部202は、フレーム内の全てのブロックに対して、ステップS702からステップS712までの処理が実行されたか否かを判断する。ブロックサイズ制限部202は、フレーム内の全てのブロックに対して処理が実行されたと判断した場合(ステップS713においてYES)、処理をステップS713からステップS714に移行させる。ブロックサイズ制限部202は、フレーム内に処理が実行されていないブロックがあると判断した場合(ステップS713においてNO)、処理をステップS713からステップS702に移行させる。
ステップS714において、ブロックサイズ制限部202は、フレーム内のブロックサイズ制限情報にフレーム番号を付加して、メモリ102に保存し、本フローチャートにおける処理を終了させる。
なお、図7のフローチャートにおいては、輝度の判断を第1の範囲及び第2の範囲により行う場合が示されているが、同様にして3以上の範囲による輝度の判断を行ってもよい。また、輝度の判断を第1の範囲のみで行ってもよく、すなわち、ステップS705とステップS706を省略してもよい。また、図7のフローチャートにおける処理は、CTU、CU、PU、TUの各ブロックに対して実行されてもよく、ブロックの種類ごとにプロックサイズ制限情報が生成されてもよい。また、図7に示すフローチャートの各ステップの処理は、ブロックサイズ制限部202に代えてCPU210が行ってもよい。
本実施形態では、輝度が第1の範囲内にある第1輝度領域(典型的には輝度が比較的高い画素)と、輝度が第2の範囲内にある第2輝度領域(典型的には輝度が比較的低い画素)が混在している場合における処理について述べた。第1輝度領域と第2輝度領域が隣接している場合にこれらの境界を同一ブロックとすることにより、輝度の境界による影響を考慮することができ、境界付近の量子化による画質の劣化を低減することができる。また、第1輝度領域と第2輝度領域が存在し、かつ分散値が小さい場合に、分散値に応じてブロックサイズの制限を設定することにより、高輝度の領域と低輝度の領域が混在する画像において、画像の平坦性を考慮したブロックサイズの設定が可能となる。
以上のように、本実施形態によれば、第1実施形態の効果に加え、高輝度の領域と低輝度の領域が混在する画像において、輝度の境界の影響及び画像の平坦性を考慮してブロックサイズの制限が行われ、符号化による画質の劣化をより低減することができる。
[第3実施形態]
第3実施形態による符号化装置及び符号化方法について、図面を参照して詳細に説明する。本実施形態が第1実施形態又は第2実施形態との相違する点は、本実施形態においては輝度情報の算出が符号化処理部114の外部の装置で行われている点である。すなわち、本実施形態では、輝度情報取得部201は、符号化処理部114の外部の装置によって画素値を用いて算出された輝度情報を取得する。なお、画像処理装置100の構成は図1と同様であるため説明を省略する。また、本実施形態において、符号化処理部114の構成は図2と同様であるため説明を省略する。また、本実施形態において、ブロックサイズ制限部202の動作は、図6又は図7と同様であるため説明を省略する。
<符号化処理部114の動作>
図8は、本実施形態による符号化処理部114の動作を示すフローチャートである。この動作は、画像処理装置100の電源がオンの状態において、不揮発性メモリ103に格納されているプログラムがメモリ102に展開され、符号化処理部114内のCPU210がメモリ102のプログラムを読み出して実行することにより実現される。図8のフローチャートによる処理は、フレームごとに実行されるものであり、当該処理は定期的に繰り返し実行されてもよい。
ステップS801及びステップS802の動作は、それぞれ図4のステップS401及びステップS402と同様であるため説明を省略する。ステップS803において、CPU210は、CPU101によりメモリ102に格納された輝度情報を取得する。その後、CPU210は、処理をステップS803からステップS804に移行させる。なお、CPU101によりメモリ102に格納された輝度情報を取得することは必須ではなく、別の方法により行われてもよい。例えば、CPU210による輝度情報の取得は、画像処理部113から符号化処理部114に送信されることにより行われてもよく、画像処理装置100以外の外部機器127から符号化処理部114に送信されることにより行われてもよい。
ステップS804において、CPU210は、S403と同様の動作により画像データのアドレス情報を取得する。その後、CPU210は、処理をステップS804からステップS805に移行させる。その後のステップS805からステップS810の動作は、それぞれ図4のステップS405からステップS410の動作と同様であるため説明を省略する。
<CPU101による輝度情報算出の動作>
図9は、本実施形態によるCPU101における輝度情報算出の動作を示すフローチャートである。この動作は、画像処理装置100の電源がオンの状態において、不揮発性メモリ103に格納されているプログラムがメモリ102に展開され、CPU101が、メモリ102のプログラムを読み出して実行することにより実現される。図9のフローチャートによる処理は、フレームごとに実行されるものであり、当該処理は定期的に繰り返し実行されてもよい。
ステップS901において、CPU101は、画像処理部113から取得した伝達関数情報が所定のHDR方式に対応する所定の伝達関数を示すものであるか否かを判断する。所定の伝達関数の一例としては、PQ又はHLGが挙げられる。CPU101は、伝達関数情報が、所定のHDR方式に対応するものであると判断した場合(ステップS901においてYES)、処理をステップS901からステップS902に移行させる。CPU101は、伝達関数情報が、所定のHDR方式に対応するものでないと判断した場合(ステップS901においてNO)、処理をステップS901からステップS906に移行させる。
ステップS902において、CPU101は、メモリ102から画像データを読み出す。CPU101は、読み出された画像データの画素値がYUV形式、YCbCr形式等である場合には、当該画像データの画素値からR’G’B’データを算出してメモリ102に保存する。CPU101は、メモリ102からR’G’B’データを読み出し、R’G’B’データに対して、デガンマ処理を行いリニアなRGBデータを算出してメモリ102に保存する。CPU101は、メモリ102からRGBデータを読み出し、RGBデータの中の最大値を算出して、MaxCLL値として取得する。更に、CPU101は、RGBデータの中での平均値を算出してMaxFALL値として取得する。CPU101は、算出されたMaxCLL及びMaxFALLを、輝度情報として、ブロックサイズ制限部202に送信し、又はメモリ102に保存する。その後、CPU101は、処理をステップS902からステップS903に移行させる。
ステップS903において、CPU101は、メモリ102から読み出した画像データの画素値から各画素302の輝度を取得する。なお、ステップS903の処理は、輝度がRGBデータから取得される場合には、ステップS902においてMaxCLLを算出する処理又はMaxFALLを算出する処理の中で算出されたRGBデータ等の画素値を用いて行われてもよい。その後、CPU101は、処理をステップS903からステップS904に移行させる。
ステップS904において、CPU101は、メモリ102から画像データを読み出し、所定の画素群303単位で各画素群303の輝度の平均値、合計値、最大値、最小値等を算出する。なお、ステップS904の処理は、各画素群303の輝度がRGBデータから算出される場合には、ステップS902におけるMaxCLLを算出する処理又はMaxFALLを算出する処理とともに行われてもよい。その後、CPU101は、処理をステップS904からステップS905に移行させる。
ステップS905において、CPU101は、ステップS902からステップS904までの処理において生成された輝度情報を符号化処理部114に出力する。出力の方法はCPU101がメモリ102に輝度情報を書き込むことにより符号化処理部114が読み出すことができるようにするものであってもよく、CPU101が輝度情報を直接符号化処理部114のレジスタ等に書き込むものであってもよい。その後、CPU101は、処理をステップS905からステップS906に移行させる。
ステップS906において、CPU101は、ステップS901において取得した伝達関数情報を符号化処理部114に出力する。出力の方法はCPU101がメモリ102に伝達関数情報を書き込むことにより符号化処理部114が読み出すことができるようにするものであってもよく、CPU101が伝達関数情報を直接符号化処理部114のレジスタ等に書き込むものであってもよい。その後、CPU101は、処理をステップS906からステップS907に移行させる。
ステップS907において、CPU101は、メモリ102に保存されている画像データのアドレス情報を符号化処理部114に出力する。なお、符号化処理部114が画像処理装置100の外部に存在する場合には、画像データは通信制御部117を介して、符号化処理部114に出力される。その後、CPU101は、処理をステップS906からステップS907に移行させる。
ステップS908において、CPU101は、符号化処理部114から出力されたストリームデータを受信して、メモリ102に保存する。その後、CPU101は、ストリームデータを、MP4ファイル、MXFファイル等にコンテナ化し、記録媒体制御部119を制御してコンテナ化したファイルを記録媒体120に保存する。その後、CPU101は、本フローチャートにおける処理を終了する。
なお、図9に示すフローチャートにおける処理は、CPU101に代えて画像処理部113が実行することにより実現されてもよい。
以上に示したように、輝度情報の算出を符号化処理部114の内部で行わず、外部の装置で算出された輝度情報を取得して符号化処理を行う本実施形態の構成においても、第1又は第2実施形態と同様の効果を得ることができる。例えば、外部の専用コーデックを符号化処理部114として使用する場合において、輝度情報の算出機能が無い場合であっても実施可能である。
[変形実施形態]
以上、好適な実施形態に基づいて本発明について詳述したが、本発明はこれらの実施形態に限定されるものではなく、要旨を逸脱しない範囲での様々な形態も本発明に含まれる。
本発明が適用され得る対象は、上述の実施形態で説明した画像処理装置100、符号化処理部114等に限定されるものではない。例えば、画像処理装置又は符号化装置を複数の装置から構成されるシステムとした場合であっても上述の実施形態と同様の機能を実現することが可能である。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。