JP5307681B2 - 画像符号化構造の自動生成方法,画像符号化構造の自動生成装置およびそのプログラム - Google Patents

画像符号化構造の自動生成方法,画像符号化構造の自動生成装置およびそのプログラム Download PDF

Info

Publication number
JP5307681B2
JP5307681B2 JP2009232114A JP2009232114A JP5307681B2 JP 5307681 B2 JP5307681 B2 JP 5307681B2 JP 2009232114 A JP2009232114 A JP 2009232114A JP 2009232114 A JP2009232114 A JP 2009232114A JP 5307681 B2 JP5307681 B2 JP 5307681B2
Authority
JP
Japan
Prior art keywords
node
encoding
decoding
image
coding
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009232114A
Other languages
English (en)
Other versions
JP2011082722A (ja
Inventor
誠明 松村
誠之 高村
裕尚 如澤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2009232114A priority Critical patent/JP5307681B2/ja
Publication of JP2011082722A publication Critical patent/JP2011082722A/ja
Application granted granted Critical
Publication of JP5307681B2 publication Critical patent/JP5307681B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

本発明は,ユーザの要求に合わせた“高画質・低ビットレート・処理時間”の画像符号化手法を自動生成するのに適した画像符号化構造を有する画像符号化技術,画像復号技術およびそれらに用いる最適化された画像符号化構造の自動生成技術に関する。
画像符号化においては,縦横数画素のブロックで画面の分割を行い,分割したブロックを右方向下向きに走査しながら符号化を行う方式が主流である。
また,ブロック内の画素値を符号化する際にも数パターンの符号化手法を用い,符号化テストを行った結果の画質やビットレートから最良の符号化手法を選択して符号化を行うというような,分岐・選択を行いながら符号化を行う手法が主流である。
例えばJPEG(非特許文献1参照)では,画像を一律に8×8のブロックで分割する手法が用いられており,AVC/H.264 FRExt.(非特許文献2参照;以下,AVC/H.264)では,画像を一律に16×16のブロックに分割し,その内部を16×16ブロックでは4パターン,8×8ブロックでは計4個のブロックそれぞれに対して9パターン,4×4ブロックでは計16個のブロックそれぞれに対して9パターンの符号化が行われ,それらの中からラグランジュコスト計算によって最良の手法が選択される。
AVC/H.264の各パターンでは,復号画像における既知の画素値を使用し,平均値や単一方向に既知の画素値を延長させたときの予測値などを生成し,非可逆圧縮であれば,原画像との予測残差に対して離散コサイン変換(DCT)と量子化を行い,量子化後のDCT係数群のエントロピー符号化が行われる。一方,可逆圧縮であれば,予測残差がそのままエントロピー符号化される。
なお,下記の非特許文献3,4では,従来よりも大きいブロックサイズを導入する符号化方式の提案がなされている。また,非特許文献5には,GIFの符号化規格について,非特許文献6には,PNGの符号化規格について記載されている。また,非特許文献7,8には,ロスレスな画像圧縮符号化技術が記載されている。
ISO/IEC SC29/WG1.ISO/IEC 10918-1"Digital compression and coding of continuous-tone still image ",1993 ITU-T Rec. H.264,"Advanced video coding for generic audiovisual services",March ,2005 Jaeil Kim ,Taeyoung Na ,Changhee Kim,Bumshik Lee and Munchurl Kim,"Enlarging MB size for high fidelity video coding beyond HD",VCEG-AJ21 ,Q.6/SG16(VCEG),October ,2008 P.Chen,Y.Ye and M.Karczewicz ,"Video Coding Using Extended Block Sizes ",VCEG-AJ23 ,Q.6/SG16(VCEG),October ,2008 "Graphics Interchange Format (GIF) Specification",[online], インターネット<URL:http://www.w3.org/Graphics/GIF/spec-gif87.txt > World Wide Web Consortium,"Portable Network Graphics (PNG) Specification(Second Edition)",[online], インターネット<URL:http://www.w3.org/TR/PNG/ >,2000,W3C Recommendation 10 November 2003 M. Weinberger ,G. Seroussi ,G. Sapiro ,"The LOCO-I Lossless Image Compression Algorithm: Principles and Standardization into JPEG-LS",IEEE Trans. Image Processing,Vol. 9,No. 8 ,pp.1309-1324,August 2000 X. Wu and N. Memon:"Context-Based ,Adaptive,Lossless Image Coding ",IEEE Transactions on Communications ,vol.45,no.4,pp.437-144,Apr. 1997
例えば4×4ブロックの画素値をビットストリームに変換する手法は,数万パターンでは済まないほど無数に存在する。AVC/H.264における画像の符号化(Iピクチャ)では,ブロックの分割・走査方法を規格内にて定義することで統一して参照可能な復号済みの画素位置を生成する。例えば4×4ブロックでは9パターンの分岐・選択手法を搭載しており,それぞれに対して既知の画素から符号化対象ブロックの予測値を生成・符号化を行う汎用的に効果を発揮する符号化手法を搭載し,それらの中からラグランジュコストの低い手法を選びながら符号化を行う。
上記のAVC/H.264の手法は様々な画像に対して汎用的に符号化効率の高い手法であるが,画像によってはブロックの分割・走査方法を変更,もしくはパターン数の増減,もしくは符号化手法の交換を行った方が符号化効率が高くなることが予想される。しかし,従来手法の処理手順の変更にはソースコードの改変に膨大な手間を要する上,画像に特化した手法を構築しても,同一の手法を他の画像に適用すると符号化効率の悪化を招く可能性がある。そのため画像に応じてこれらを設計する試みは行われていなかった。
このように,従来の画像符号化手法では,符号化を行うブロックのサイズは規格内に準備されている限られた範囲の中でしか処理の分岐・選択が行われていない。
撮像機器による動画像の高解像度化が進む近年,従来準備されていたブロックサイズでは小さ過ぎるため,新しい動画像の符号化規格には,よりサイズの大きなブロックを導入する動きが盛んに行われている(非特許文献3,4参照)。しかし,従来サイズの動画像も使用され続けることも考えられ,そのような動画像については新しい符号化規格では余分な符号量が増えてしまう可能性がある。
また,ブロック内の画素値を符号化する処理部分についても,規格内に搭載されている限られた範囲の中でしか分岐・選択が行われておらず,搭載されている符号化処理機能が不得手とする画像の場合,符号量の増加を招く恐れがある。
例えば,符号化にDCTを用いるJPEGやAVC/H.264は,画素の諧調がなだらかに変化する自然画像や映像の符号化に向いており,高画質かつ低い符号量で圧縮が可能であるが,GIF(非特許文献5参照)やPNG(非特許文献6参照)では,諧調数を増やして高画質化すると符号量が増加してしまう。一方,アニメのように諧調数が少なく,輪郭が明確な画像に対しては,GIFやPNGが可逆圧縮にもかかわらず少ない符号量で圧縮できるのに対し,JPEGやAVC/H.264では輪郭付近にノイズを生じやすく,高画質化すると符号量が増加してしまう。
これらの問題を克服するため,次世代の画像/映像符号化規格ではこれらを補完する手法や技術の組み合わせを模索しているが,それら符号化手法の組み合わせは一般に汎用的な画像や映像に対して効果的な手法を人間が試行錯誤しながら生成しているため,人間の把握できる範囲の最適化しか行われていなかった。
さらに,入力動画像に特化したブロック分割サイズや処理手順を,動画像毎に生成するような方式も存在していなかった。
以上の問題に鑑み,本発明は,最適化に適した符号化構造が可変な画像符号化方式,画像復号方式を実現する仕組みを構築し,また,例えば大小様々なブロックサイズに加え,複数の符号化手法を保持させておき,それらの組み合わせ構造の最適化によって,ユーザの要求に合わせた“高画質・低ビットレート・処理時間”の最適な画像符号化構造を生成できるようにすることにより,高能率な符号化・復号に資する新たな技術の提供を目的とするものである。
本発明の説明に先立ち,本発明で用いる用語の意味・定義について説明する。
・「ノード」について
画像のエンコーダ内で使用される各種符号化機能(画像符号化の各種の要素技術)それぞれをノードと定義する。例えば画像を任意のブロックサイズで分割・走査する符号化機能や,複数手法の中から単一の手法を選択して符号化/復号する符号化機能,既知の画素値を参照して符号化対象ブロック内の画素値を予測し,予測誤差をビットストリームに変換する各種符号化機能などを指す。また,ノードには,JPEGやAVC/H.264などの従来のエンコーダをそのまま適用することもできる。
・「符号化構造」について
ノードの組み合わせで表記されるエンコーダの設計図を符号化構造と定義する。ノードの組み合わせ次第で任意のエンコーダを設計できる。すなわち,符号化構造は,画像符号化を実現するための各種の要素技術の組み合わせを表現したものであり,ノードの接続図でもある。
・「コスト」について
任意の画像に対して任意の符号化構造で圧縮した際に得られる“復号画像の画質・符号量・合計符号化処理時間・最適復号処理時間”の4つから計算される一次元の指標のことをコストと定義する。コストは,下記の“最適化”や分岐・選択のノードの計算時に適宜計算され,コストが低い手法の方がより優れた方法として評価される。例えばAVC/H.264では,ブロックサイズや各種手法の分岐・選択にラグランジュコスト計算が使用されている。
・「最適化」について
入力画像に対してコストが最小となるように符号化構造内のノードの組み換えを行うことを最適化と定義する。
本発明では,符号化対象画像1枚の符号化効率を高めることに注力し,各種ブロックの分割・走査手法,分岐・選択手法,符号化手法を全てノードと見立て,それらの入出力データを統一することで容易なノードの繋ぎ替えを実現する。これにより無数に存在するノードの組み合わせの中から画像に特化した符号化構造を機械的に探索し,コストが最も低い符号化構造を自動生成することを可能にする。この装置によって最適化を行うことで画像の符号化効率の向上を実現することができる。
本発明の符号化構造を生成する装置では,無数のブロックの分割・走査手法,分岐・選択手法,符号化手法その中からどの手法を用いるかを適応的に選択して符号化構造を構築する。符号化装置ではビットストリームの先頭にヘッダ情報に加えてこの符号化構造を記した設計図,すなわちノードの接続図(構造ツリー)の情報を付加し,接続図の情報の後に,各種ノードで出力される符号語を格納する。
復号装置ではビットストリームの先頭からヘッダ情報を読み解き,続いて符号化構造を記した接続図を読み解くことで,復号装置内で符号化に用いられた符号化構造の再構築を行う。続いて復号装置はビットストリームから符号語を切り出しながら符号化構造を辿り,画素の復号を行う。
従来手法では処理の切り替えは行われていたが,規格内にて符号化手法が厳密に定義されていたため,上記接続図を加える必要はなかった。本手法ではこの情報を加えることにより,多様な符号化手法を用いることができる構造が実現される。
さらに詳しく本発明の手法について説明する。本発明では,現存する様々な画像の符号化手法に加え,様々な画素値生成手法を組み合わせ,符号化対象画像に特化した符号化構造を機械的に探索し,ユーザが任意に設定するコスト算出関数が出力するコストを評価値として,コストが最小となる画像符号化構造を自動生成する。
符号化手法の組み合わせは,上記の様々な画像の符号化手法や画素値生成手法に加え,画像を領域毎に分割・走査する機能や,処理の切り替えを行う機能,復号画像に対してフィルタを施す機能のそれぞれを全てノードと見立て,ノードの組み合わせを木構造で記述する。この木構造には符号化手法の組み合わせ構造を記述することとし,これを構造ツリーと呼ぶ。
多様なノードを最適化装置に保持させて,これら構造ツリーの組み合わせ最適化を機械的に行うことにより,人間の把握できる限界を超えた最適化が可能になる。そのため,規格内に組み込まれている限られた機能の切り替えしか実現できていなかった従来手法の不得手な部分を改善することができる。また,最適化装置に与えられる画像に特化させた符号化手法の組み合わせ構造を自動で構築することができる。
本発明では,符号化時はビットストリームの先頭に画像サイズなどの各種ヘッダ情報に続いて構造ツリーの情報を格納し,そのデータの後に各ノードで出力される符号語を格納する。また,復号時はビットストリームを先頭から順次読み解くことで,ヘッダ情報を復号し,構造ツリーを再構築する。続いてビットストリームからビットを切り出しながら再構築した構造ツリーを辿り,画像の復号を行う。
構造ツリー内のノードの組み合わせは,進化的手法の一つである「遺伝的プログラミング」(Genetic Programming :GP)を用いて最適化を行う。GPによる進化計算では,構造ツリー毎にコストを求め,コストが最小となるように進化を重ねるため,構造ツリーのコスト算出手法が求められる。
本発明では,ユーザが任意のコスト算出関数を設定することによりコスト算出手法を決定し,復号画像の画質・符号量・処理時間などから単一評価値に変換した値を用いる。また,このコスト算出関数は構造ツリーの評価値を決定づけるだけでなく,構造ツリー内の処理の分岐・選択時におけるコスト算出にも同じ関数を使用する。
[A]構造ツリーを用いた符号化/復号手順の基本的な考え方
本発明では,画像をブロックに分割する機能や処理の分岐・選択を行う機能,ブロック内の画素値をビットストリームに変換する機能,復号画素に対してフィルタを行う機能の各々をノードとして扱う。これらのノードは,実装上はそれぞれが例えば関数呼出しによって呼び出されるサブプログラムのモジュールのようなものと考えてよい。ノードは大きく以下の3つに分類される。
・構造ノード:ブロックに分割・走査する機能や処理の分岐・選択を行うノード
・符号化/復号ノード:対象ブロック内の画素値をビットストリームに変換/逆変換するノード
・フィルタノード:復号画像の復号済み画素に対してフィルタを施すノード
図1は,構造ツリーの構造の例を表す図であり,図2は,その構造ツリーの符号化(符号語)の例を表す図である。
構造ツリーは,図1のように木構造で表記するため,各ノードは幹方向と枝方向にそれぞれノードを接続する。ここで,あるノードに注目したとき,幹方向に接続するノードを上位ノード,枝方向に接続するノードを下位ノード,幹方向の根元のノードを最上位ノードと定義する。
ノードには,重複のない固有のノード識別番号を割り当てる。例えば32bits固定長のノード識別番号を与えたとき,ノードは合計約43億ノード許容できるが,ノード数が少ない場合には16bits固定長(合計約65536ノード)のノード識別番号や,より少ないビット数でノード識別番号を与えることも可能である。また,ノード毎に接続する下位ノード数を保持しているとすると,構造ツリーは,図2のようにノード識別番号の配列で表記・符号化できる。なお,構造ツリーの列挙順に0,1,2,... とノード番号を付加する。
各ノードは,上位ノードからデータを受け取る入力PINと,下位ノードにデータを受け渡す出力PINを有する。PINは,ノード間でデータを受け渡すための情報接続部(ノード間インタフェース)である。PINは,例えばデータを受け渡すためのメモリ領域として実装されるものでもよい。PINを介してノード間で交換されるデータは,以下の8つが含まれる。
・復号画像:符号化/復号ノードの処理によって順次復号される画像
・ビットストリーム:符号語を追記型で格納
・ブロックサイズ:対象ブロックの縦幅,横幅
・基準座標:対象ブロックの左上のx,y座標値
・最適復号処理時間:コスト最小となる経路を辿った際の復号処理に要する合計時間
・符号化処理時間:符号化処理に要する合計時間
・ノード番号:上記ノード番号
・エラー情報:通常は“エラーなし”
なお,ビットストリームに格納される符号語は,0または1の生起確率に対して適応的にエントロピー符号化を行う適応二値算術符号などを使用する。本説明では,簡素化のためエントロピー符号化を行わず,符号語がそのまま保存されているものとして扱う。
各ノードは入力PINを必ず1つ保持しており,フィルタノードは必ず1つの出力PINを,構造ノードは必ず1つ以上の出力PINを持つ。一方,符号化/復号ノードは出力PINを持たない。そのため,構造ノード,フィルタノードは「非終端ノード」となり,符号化/復号ノードは「終端ノード」となる。
各ノードは処理の終了時に実行結果として,上位ノードに対してPINのデータ構造を返還する(以下:ReturnPIN)。また,エラー発生時には,ReturnPINの“エラー情報”に下位ノードのエラー情報が格納される。符号化/復号時には,それぞれの処理の開始時にPINのデータを最上位ノードに受け渡す。ノード内では下位ノードが再帰的に呼び出され,最上位ノードのReturnPINには,下位ノードを全て実行した際のビットストリーム(符号化時)や復号画像(符号化/復号時)が格納される。
なお,構造ツリーは,例えば画像符号化装置と画像復号装置とで同じものを用いることができる。したがって,同じ識別番号を持つノードであっても,符号化時におけるノードの処理機能と,復号時におけるノードの処理機能とはそれぞれ異なることがあり,画像符号化装置が備えるノード記憶部に格納されるノードと,画像復号装置が備えるノード記憶部に格納されるノードとは,それぞれに適したものがあらかじめ用意される。
[A−1]構造ノード
構造ノードは大きく下記の2つに分類されるが,上記2つの機能を併用した単一ノードを適用することも可能である。
・画面の分割・走査機能の構造ノード
・処理の分岐・選択機能の構造ノード
画面の分割・走査機能の構造ノードは,入力PINのブロック中をノード内で規定するブロックサイズで分割し,網羅的に走査しながら下位ノードを実行する条件と,画像符号化装置と画像復号装置とで走査するブロックの順番が一定であれば,いかなる分割・走査方法であっても対象となる。
処理の分岐・選択機能の構造ノードは,2つ以上の出力PINを持ち,それら下位ノードのReturnPINのどちらか一方を選択し,符号化を行う機能を有していれば,ビットストリームにビットを付加することで明示的に処理を切り替える手法でも,復号画像などの既知の情報から暗黙的に処理を切り替える手法でも,いかなる手法であっても対象となる。
[A−2]符号化/復号ノード
符号化/復号ノードは,上位ノードから渡されるPINのデータを受け取り,ブロックサイズと座標値から対象ブロックを決定し,対象ブロック内の画素値を符号語に変換してビットストリームに格納する機能と,ビットストリームから符号語を切り出し,逆変換することで画素値に戻す機能を持つものとする。
符号化/復号ノードは,対象ブロックを画像と見立てれば画像の符号化/復号を行うプロセスと変わらない。そのため,従来の画像符号化規格であるJPEGやJPEG 2000,GIF,PNGなどと同様のビットストリームを出力する手法も,符号化/復号ノードとして適用できる。したがって,画面全体に対して構造ノードやフィルタノードを使用することなく,単一の符号化/復号ノードを用いて符号化を行えば,ヘッダ情報と構造ツリーをビットストリームに付随する必要性により,符号量は僅かに増加するが,最適化を行わなくても同等レベルの画質・ビットレートを担保できる。そのため,画面内の僅かな部分でも手法を切り替えた方が効率が高くなる場合,従来手法より本手法の方が優れた結果が得られることは容易に推測できる。
従来規格に代表される複雑な符号化を行うノードだけでなく,例えばMED予測器(非特許文献7参照)やGAP(非特許文献8参照)の予測残差を可変長符号化するだけのような簡易的なノードまで,原画像の画素値を符号語に変換して復号画素値を生成する手法であれば,いかなる手法であっても符号化/復号ノードとして適用できる。これは,本発明が様々な画像符号化手法を統合的に扱うことができることを意味している。
また,例えばJPEGでは画面を一律に8×8ブロックに分割し,右方向下向きに走査しながら符号化を行い,AVC/H.264では画面を一律に16×16ブロックに分割し,その内部を8×8ブロック,4×4ブロックに階層的に分割し,それぞれの内部をZ字に走査しながら符号化を行うなど,走査手法が固定されているが(図3参照),本発明では,従来手法のようにブロックの分割・走査手法が固定されておらず,前述の構造ノードの接続次第で復号画像における復号済みの画素位置は大きく変化する。
そのため,復号画像における復号済みの画素位置が,図4のような形で現れる状況も考えられる。このような場合,ビットストリームへの情報付加なしに符号化対象ブロックの内部を四隅の既知の画素値を用いてグラデーション状に補間して復号画像を生成する符号化/復号ノードなども適用可能である。
このような手法は汎用性に欠ける符号化手法のため,効果的に働く例は稀なものとなるかもしれないが,符号化/復号ノードの一つとして準備しておけば,画像に対して特化させる最適化の過程で選出される可能性は十分考えられる。
[A−3]フィルタノード
ブロック毎に符号化を行う非可逆圧縮手法では,ブロック間で不連続な歪を発生させることがあり,視覚的に大きな違和感を与えるため,AVC/H.264では,不連続な歪による違和感を軽減させるためにブロック間の復号画素値を平滑化させるデブロッキングフィルタが搭載されている。
本発明では,構造ノードから渡される対象ブロック内部の処理は符号化/復号ノードの処理に依存する。そのため,仮にAVC/H.264の画像符号化機能を符号化/復号ノードとして用いた場合,AVC/H.264のデブロッキングフィルタが適用されるため,対象ブロック内の歪は軽減できる。しかし,構造ノードによって画面が分割され,領域毎に異なる符号化手法が用いられた場合,対象ブロック間で不連続な歪が発生することが予想される。
本発明では,これらの不連続な歪を軽減するため,隣接するブロック間を跨いで既知の画素値にフィルタを施す機能を持たせる。フィルタは対象ブロックの復号画素とその周辺の復号済みの画素が主な対象であり,AVC/H.264のような平滑化フィルタだけでなく,エッジ強調フィルタなど,画素値を入力として,変換後の画素値を出力するフィルタであればフィルタノードとして適用できる。
[B]構造ツリーの進化手法の基本的な考え方
本発明では,前述の特徴を持つ各種ノード群を複数保持するノードの記憶装置を用意し,その中から複数のノードを引用することで,符号化対象画像を符号化した際に,ユーザが任意に設定するコストが最も低くなるように構造ツリーの最適化を行う。
構造ツリーの最適化には,前述のようにGPを用いた手法を用いる。GPでは,複数の最適化の種(以下:個体)から構成される母集団を生成し,これら母集団の中から1つ,もしくは2つの個体を選択して個体の情報を書き換えることで新しい個体の生成・評価を繰り返し実行する。なお,本発明では,個体は構造ツリーを表す。
GPによる個体の進化手法には,代表的に以下の4種類が使用される。それぞれの簡易的なイメージを図5および図6に示す。
・交叉:2つの個体を部分的に交換する。
・変異:1つの個体内の選択されたノード自体を別のノードに置き換える。
・削除:1つの個体内の選択されたノード自体を取り除く。
・挿入:1つの個体内の選択されたノードの前に新たにノードを挿入する。
本発明において,ノードの種類には前述のように構造ノード,符号化/復号ノード,フィルタノードの3種類があり,それぞれの特徴を用いて進化計算を行う。
・交叉
図5に示すように,2つの個体内からそれぞれランダムにノードの選択を行い,選択したノード以下に接続する全てのノードに対して置き換えを行う。
・変異
図6(A)に変異の例を示す。構造ノード・符号化/復号ノード・フィルタノード全てが変異対象となるが,構造ノードは構造ノードに,符号化/復号ノードは符号化/復号ノードに,フィルタノードはフィルタノードにしか変異しないものとし,変異後のノードはそれぞれランダムに決定する。構造ノードが選択された場合で,変異前の下位ノード数が変異後の下位ノード数より少なかった場合には,今まで接続していた下位ノードはそのまま接続し,残りの下位ノードは符号化/復号ノードをランダムに選択して接続・生成する。一方,変異前の下位ノード数が変異後の下位ノード数より多かった場合には,今まで接続していた下位ノードの中からランダムに選択もしくは優先順序を付けて選び出し,変異後の下位ノードとして接続する。符号化/復号ノードおよびフィルタノードが選択された場合には,それぞれランダムに決定したノードに置き換える。
・削除
図6(B)に削除の例を示す。削除対象となるノードは,下位ノードを持つ構造ノードとフィルタノードのみである。構造ノードが削除対象として選択された場合で,かつ接続する下位ノードの数が1つであった場合には,そのままノードを削除し,上位ノードの出力PINと下位ノードの入力PINとを接続する。2つ以上の下位ノードを持つ構造ノードの場合には,中から1つをランダムに選択もしくは優先順序をつけて選択し,上位ノードの出力PINと下位ノードの出力PINとを接続する。フィルタノードが削除対象として選択された場合には,下位ノードの数は1つなので,そのままノードを削除し,上位ノードの出力PINと下位ノードの入力PINとを接続する。
・挿入
図6(C)に挿入の例を示す。挿入対象となるノードは,下位ノードを持つ構造ノードとフィルタノードのみであり,複数の構造ノードとフィルタノードの中からランダムに1つ挿入するノードを選択する。構造ノードが選択された場合で,かつ接続する下位ノードの数が1つの場合には,そのままノードを追加する。2つ以上の下位ノードを持つ構造ノードの場合には,その中の1つは今まで接続していた下位ノードをそのまま接続し,残りの下位ノードには,符号化/復号ノードをランダムに選択して生成する。フィルタノードが選択された場合には,下位ノードの数は1つなので,そのままノードを挿入する。
[C]評価手法
本発明では,ユーザの要求に合わせた高画質・低ビットレート・処理時間の最適な画像符号化手法を得るため,評価を行う上でのコスト算出関数の設定をユーザが自由に設定可能な構成をとる。コスト算出関数は,最適化時における構造ノードを画像全体に適用した際のコスト算出と,符号化時における構造ノードの分岐・選択機能内の処理の分岐・選択で適用される計算手法とで同じコスト算出関数を用いる。
従来手法では画質と発生符号量が評価対象として使用されており,画質には対象ブロック内画素の二乗誤差和(Sum of Square Difference:以下,SSD)や絶対値和(Sum of Absolute Difference:SAD)が使用され,発生符号量には対象ブロックの符号化にて増加した符号量が使用される。
例えば,AVC/H.264における16×16,8×8,4×4ブロックの分岐・選択や,それぞれのブロック内で最良の手法を選択するコスト算出式には,以下の手法が使用されている。
Cost=SSD+λ×GenBits …(式1)
ここで,SSD(Sum of Square Difference)は符号化対象ブロック内の復号画素値と,原画像の対象ブロック内画素値の二乗誤差が使用される。λは量子化パラメータQP(0〜51)に依存して決定する値であり,GenBitsは対象ブロックの符号化によって増加した符号量が適用される。
本発明でも,上記のようにコスト算出は異なる評価値の積和計算にて行う。しかし,本手法では対象ブロック内の画素値だけでなく,フィルタノードによって隣接ブロックの復号画素値が更新される可能性があるため,対象ブロック内のみを評価値とする従来手法をそのまま使用することはできない。また,最適化の過程において,実用性に欠けるほど符号化や復号に計算時間を要する手法が出力されることも考えられる。これらを考慮するため,本発明ではコスト算出関数内で用いる個別の評価値を以下の4つとして,それぞれの評価値にユーザが設定する係数値を乗算した上で積和計算にてコストを求める。
・画質
・発生符号量
・符号化処理時間
・最適復号処理時間
本発明によれば,最適化に適した符号化構造が可変な画像符号化方式,画像復号方式の実現が可能になり,符号化対象画像の特性に特化した“高画質・低ビットレート・処理時間”の最適な画像符号化構造を自動生成することも可能になる。
構造ツリーの構造の例を表す図である。 構造ツリーの符号化(符号語)の例を表す図である。 従来手法による復号済み画素位置の例を表す図である。 構造ノードの使用による符号化済みの画素位置の変化を表す図である。 交叉の進化計算機能の例を表す図である。 変異,削除,挿入の進化計算機能の例を表す図である。 構造ツリーを用いた画像符号化装置を表す図である。 構造ツリーを用いた画像符号化装置の処理手順を表すフローチャートである。 構造ツリーを用いた画像復号装置を表す図である。 構造ツリーを用いた画像復号装置の処理手順を表すフローチャートである。 ノードによる符号化処理実行のための構成の一例を表す図である。 ノードによる符号化処理実行の処理手順を表すフローチャートである。 ノードによる復号処理実行のための構成の一例を表す図である。 ノードによる復号処理実行の処理手順を表すフローチャートである。 入力ブロックを16×16ブロックで分割しながら単一の下位ノードを実行する構造ノードの符号化処理手順を表すフローチャートである。 入力ブロックを上下2つのブロックに分割してそれぞれ異なる下位ノードを実行する構造ノードの符号化処理手順を表すフローチャートである。 下位ノード2つの符号化結果の中からコストの低い方を選び,符号化を実行する構造ノードの符号化手順を表すフローチャートである。 下位ノード2つの符号化結果の中からコストの低い方を選び,符号化を実行する構造ノードの符号化手順を表すフローチャートである。 下位ノード2つの符号化結果の中からコストの低い方を選び,符号化をされたデータを読み解き,符号化された下位ノードを選んで実行する構造ノードの復号手順を表すフローチャートである。 符号化/復号ノードにおける符号化手順の内部の共通処理手順を表すフローチャートである。 符号化/復号ノードにおける符号化手順の内部の共通処理手順を表すフローチャートである。 符号化/復号ノードにおける復号手順の内部の共通処理手順を表すフローチャートである。 フィルタノードにおける符号化手順の内部の共通処理手順を表すフローチャートである。 フィルタノードにおける符号化手順の内部の共通処理手順を表すフローチャートである。 フィルタノードにおける復号手順の内部の共通処理手順を表すフローチャートである。 構造ツリーの自動生成・最適化装置を表す図である。 構造ツリーの自動生成・最適化装置の処理手順を表すフローチャートである。
以下,実施の形態に従って本発明を詳細に説明する。
[1]構造ツリーを用いた符号化/復号手法
[1−1]構造ツリーを用いた画像符号化装置
本実施形態による画像符号化構造の自動生成装置にて出力される構造ツリーを用いて符号化を行う画像符号化装置1の一実施形態例を図7に示す。
画像符号化装置1は,構造ツリーの手順通りに符号化を行うために,原画像記憶部10と,構造ツリー記憶部11と,コスト算出関数記憶部12と,ノード転送PIN構築部13と,ヘッダ情報格納部14と,構造ツリー格納部15と,ノード実行部16と,ノード記憶部17と,出力データ分岐部18とを備える。
ノード記憶部17は,複数の構造ノード,符号化/復号ノード,フィルタノードの実体をノード識別子に対応させて保持しており,それぞれの符号化/復号処理の実行機能を保持しているものとする。これらのノードは,例えばそれぞれの機能を実現するソフトウェアモジュール等によって構成されるが,ファームウェアその他による実行機能を含んでいてもよい。
原画像記憶部10には,ユーザが与える符号化対象画像(以下,原画像)を格納し,構造ツリー記憶部11には,任意の符号化構造が記述された構造ツリーを格納し,コスト算出関数記憶部12には,ユーザが与えるコスト算出関数の算出手法を格納する。
ノード転送PIN構築部13では,構造ツリーの最上位ノードの入力PINに受け渡すデータの構築を行う。このとき,PINのビットストリームとしてブランクの追記型ビットストリームを構築し,ヘッダ情報格納部14と構造ツリー格納部15で格納するデータ群は,PINのビットストリームに追加格納を行う。なお,構造ツリーの情報は構造ツリー記憶部11を参照し,ノード識別番号を配列の順に格納する。
ノード実行部16は,まず構造ツリー記憶部11を参照して構造ツリーにおける最上位ノードのノード識別番号を取得し,ブロックに分割・走査する機能や処理の分岐・選択を行う機能,符号化/復号処理機能や,復号画像に対してフィルタを施す機能など,搭載される全てのノードを格納しているノード記憶部17の中から該当するノードの符号化/復号機能を引用する。次に,ノード転送PIN構築部13のデータを,引用したノードの入力PINに受け渡し,ノードの符号化処理を実行する。
ノード実行部16は,下位ノードを実行するため,自身を再帰的に実行するための“下位ノード実行機能”を搭載しており,ノード実行部16内で最上位ノード以下に接続する全ての下位ノードが再帰的に実行される。そのため,ノード実行部16のReturnPINのビットストリームに格納されている情報が符号化後のビットストリームとなる。なお,再帰的なノードの実行手順は[2]にて解説を行う。
出力データ分岐部18では,最適化装置(詳しくは図26を用いて後述)内で使用される符号化処理か否かで処理を分岐し,最適化装置内で使用される符号化処理であれば,符号化対象画像を構造ツリーで符号化した際のコスト全体を算出して出力する。それ以外の場合で,ReturnPINのエラー情報にエラーが検出された場合には,エラー情報を出力して処理を終了し,エラー未検出の場合には,ReturnPINのビットストリームを出力して処理を終了する。
[1−2]構造ツリーを用いた画像符号化装置の処理の流れ
次に,画像符号化装置1の処理の流れの例を,図8に示す。
まず,ステップS101にて,ノード転送PINの構築を行う。このとき,原画像記憶部10を参照して,ノード転送PINの各データはそれぞれ以下のように設定する。
・復号画像:原画像と同じ画像サイズのブランク画像
・ビットストリーム:ブランク状態の追記型ビットストリーム
・ブロックサイズ:(Width,Height)=(原画像の横幅,原画像の縦幅)
・基準座標:(x,y)=(0,0)
・最適復号処理時間:0
・符号化処理時間:0
・ノード番号:0
・エラー情報:エラーなし
続いて,ステップS102にて,ノード転送PINのビットストリームに画像サイズ等のヘッダ情報を格納し,ステップS103にて,構造ツリー記憶部11を参照して,ノード転送PINのビットストリームに構造ツリーのノード識別番号を配列の順に格納する(図2参照)。
続いて,ステップS104にて,ノード記憶部17から識別番号のノードの符号化/復号機能を引用し,その引用したノードの入力PINにノード転送PINを受け渡して符号化処理を実行し,ReturnPINをResultに格納する。引用したノードの内部で再帰的に最上位ノード以下に接続する全ての下位ノードが実行されるため,受け取るResultに符号化後のビットストリームやエラー情報が格納される。
続いて,ステップS105にて,最適化装置内の符号化処理か否かを判断し,最適化装置内であれば,ステップS106にて,コスト算出関数記憶部12と原画像記憶部10を参照して符号化対象画像を構造ツリーにて符号化を行った際のコストを算出して出力し,処理を終了する。
それ以外の場合,ステップS107にて,Resultのエラーチェックを行い,エラー検出時にはステップS108にて,Resultのエラー情報を出力して処理を終了する。エラー未検出だった場合にはステップS109にて,Resultのビットストリームを出力し処理を終了する。なお,ステップS107にて,Resultにエラーが検出された場合には,コストを十分に大きな正の値(以下:INF)として出力する。
[1−3]構造ツリーを用いた画像復号装置
本実施形態による画像符号化構造の自動生成装置にて出力される構造ツリーを用いて符号化された画像を復号する画像復号装置2の一実施形態例を図9に示す。
画像復号装置2は,参照型ビットストリームから符号語を順次切り出して,画像復号装置2の内部で符号化に使用された構造ツリーの再構築を行い,構造ツリーを辿りながら画像の復号を行う。これら処理の実現のため,画像復号装置2は,ビットストリーム記憶部20と,ヘッダ情報復号部21と,構造ツリー復号部22と,構造ツリー記憶部23と,ノード転送PIN構築部24と,ノード実行部25と,ノード記憶部26と,出力データ分岐部27とを備える。
ノード記憶部26は,複数の構造ノード,符号化/復号ノード,フィルタノードの実体を保持しており,それぞれの復号処理の実行機能を保持しているものとする。ただし,ノード記憶部26が保持するノード群は,画像符号化装置1のノード記憶部17と同じノード識別番号が割り振られたものでなければならない。
ビットストリーム記憶部20には,画像復号のために使用されるビットストリームを全て格納しており,ヘッダ情報復号部21では,ビットストリーム記憶部20から符号語を切り出して,画像サイズなどのヘッダ情報を復号する。また,構造ツリー復号部22では,ビットストリーム記憶部20から符号語を切り出して,構造ツリーに記述されていたノード識別番号を全て復号する。これらノード識別番号は,構造ツリー記憶部23に格納して符号化に使用された構造ツリーを再構築する。また,ノード転送PIN構築部24では,構造ツリーの最上位ノードの入力PINに受け渡すデータの構築を行う。
ノード実行部25は,まず構造ツリー記憶部23を参照して構造ツリーにおける最上位ノードのノード識別番号を取得し,ブロックに分割・走査する機能や処理の分岐・選択を行う機能,符号化/復号処理機能や,復号画像に対してフィルタを施す機能など,搭載される全てのノードを格納しているノード記憶部26の中から該当するノードの復号機能を引用する。次に,ノード転送PIN構築部24のデータを,引用したノードの入力PINに受け渡し,ノードの復号処理を実行する。
ノード実行部25は,符号化時と同様,下位ノードを実行するため,自身を再帰的に実行する“下位ノード実行機能”を搭載しており,ノード実行部25内で最上位ノード以下に接続する全ての下位ノードが再帰的に実行されるため,ノード実行部25のReturnPINの復号画像が復号後の最終出力画像となる。
出力データ分岐部27では,ReturnPINのエラー検知を行い,エラーが検出された場合,ReturnPINのエラー情報を出力して処理を終了する。エラー未検出の場合には,ReturnPINの復号画像を出力して処理を終了する。
[1−4]構造ツリーを用いた画像復号装置の処理の流れ
次に,画像復号装置2の処理の流れの例を図10に示す。
まず,ステップS201にて,ビットストリーム記憶部20を参照して画像サイズなどのヘッダ情報を復号し,ステップS202にて,ビットストリーム記憶部20を参照して構造ツリーで使用されたノード総数とノード識別番号群を復号し,構造ツリー記憶部23に格納する。
続いて,ステップS203にて,ノード転送PINの構築を行う。このとき,復号したヘッダ情報などを用いて,ノード転送PINの各データはそれぞれ以下のように設定する。
・復号画像:ヘッダ記載の画像サイズのブランク画像
・ビットストリーム:ブランク
・ブロックサイズ:(Width,Height)=(ヘッダ記載の画像横幅,ヘッダ記載の画像縦幅)
・基準座標:(x,y)=(0,0)
・最適復号処理時間:0
・符号化処理時間:0
・ノード番号:0
・エラー情報:エラーなし
続いて,ステップS204にて,ノード記憶部26から識別番号のノードの復号機能を引用し,ノード転送PINを引用したノードの入力PINに受け渡して復号処理を実行し,ReturnPINをResultに格納する。引用したノードの内部で再帰的に最上位ノード以下に接続する全ての下位ノードが実行されるため,ステップS204にて,受け取る実行結果に復号後の復号画像やエラー情報が格納される。
最後にステップS205にて,ReturnPINのエラーチェックを行い,エラー検出時には,ステップS206にて,エラー情報を出力して処理を終了する。エラー未検出であった場合,ステップS207にて,ReturnPINの復号画像を出力して処理を終了する。
[2]ノードの符号化/復号実行手法
[2−1]ノードにおける符号化処理の実行
画像符号化装置1内で使用されるノード実行部16にて,ノードにおける符号化処理が実行されるときの詳細な構成の一例を図11に示す。この処理の流れは,構造ノード・符号化/復号ノード・フィルタノードを通じて同一である。
ノード実行部16は,上位ノードの出力PINを受け取り,ノード識別番号から適用される処理機能を複数のノードの中から照合して機能を引用実行し,上位ノードにReturnPINを返す処理を実現するために,入力PIN初期化部30と,ノード識別番号参照部31と,ノード機能引用部32と,引用機能実行部33と,ビットストリーム記憶部34とを備える。なお,原画像記憶部10と,構造ツリー記憶部11と,コスト算出関数記憶部12と,ノード記憶部17は,図7の画像符号化装置1に示している記憶部と同一である。
入力PIN初期化部30では,上位ノードの出力PINを受け取り,ノードの入力PINへとデータを全て複写して初期化を行い,ノード識別番号参照部31では,入力PINのノード番号を鍵として構造ツリー記憶部11を参照し,引用実行するノード識別番号を取得する。
ノード機能引用部32では,ノード識別番号を鍵としてノード記憶部17を参照して,該当ノードの処理機能を引用し,引用機能実行部33に渡す。引用機能実行部33は,必要に応じて構造ツリー記憶部11,原画像記憶部10,コスト算出関数記憶部12を参照しながら符号化処理を行い,ReturnPINを出力して処理を終了する。なお,引用機能実行部33は,下位ノード実行機能を保持しており,下位ノードへ出力PINを受け渡し,再帰的に実行する機能を有する。
ビットストリーム記憶部34は,符号化/復号ノードおよびフィルタノードの符号化処理内における復号処理実行時にのみ使用されるものであり,通常状態では,ビットストリーム格納部34への符号語の格納・参照は禁止している。使用例は[2−6−1]および[2−7−1]に記す。
[2−2]ノードにおける符号化処理実行の処理の流れ
次に,図11に示すノード実行部16の処理の流れの例を図12に示す。
まず,ステップS301にて,ノードの入力PINを上位ノードの出力PINの情報で初期化する。続いて,ステップS302にて,入力PINのノード番号を用いて構造ツリー記憶部11からノード識別番号を参照する。ノード識別番号はノード記憶部17に送られ,該当するノードの処理機能をステップS303の処理機能に設定する。
続いてステップS303にて,設定された引用機能の符号化処理を実行する。符号化処理の内容は引用機能に依存するが,必ず出力としてReturnPINが出力される。引用機能の処理は,内部で“下位ノードの実行”の有無によって大きく分岐される。ステップS303−1の分岐にて下位ノードの実行命令が検出されなければ,ステップS303−2にて,ReturnPINを出力して処理を終了する。下位ノードの実行命令が検出された場合には,ステップS303−3にて,下位ノードに渡す出力PINを構築して自己再帰を行う。
自己再帰を行うノードは,非終端ノードとなる構成ノードとフィルタノードであり,引用機能内に実装される下位ノードを実行する。下位ノードの実行命令が検出されなくなれば,ステップS303−2にて,ReturnPINを出力して処理を終了する。一方,終端ノードとなる符号化/復号ノードでは,下位ノード実行命令が検出されることはないので,コンスタントにステップS303−2の処理が実行され,ReturnPINを出力して処理を終了する。具体的な符号化処理の実施例については,以下の場所にて解説する。
構成ノードの実施例:[2−5−1],[2−5−3],[2−5−5]
符号化/復号ノードの実施例:[2−6−1]
フィルタノードの実施例:[2−7−1]
[2−3]ノードにおける復号処理の実行
画像復号装置2内で使用されるノード実行部25にて,ノードにおける復号処理が実行されるときの詳細な構成の一例を図13に示す。この処理の流れは,構造ノード・符号化/復号ノード・フィルタノードを通じて同一である。
ノード実行部25は,上位ノードの出力PINを受け取り,ノード識別番号から適用される処理機能を複数のノードの中から照合して機能を引用実行し,上位ノードにReturnPINを返す処理を実現するために,入力PIN初期化部40と,ノード識別番号参照部41と,ノード機能引用部42と,引用機能実行部43とを備える。なお,ビットストリーム記憶部20と,構造ツリー記憶部23と,ノード記憶部26は,[1−3]にて用いるものと同一の記憶部を使用する。
入力PIN初期化部40では,上位ノードの出力PINを受け取り,ノードの入力PINに対してデータを全て複写して初期化を行い,ノード識別番号参照部41では,入力PINのノード番号を鍵として構造ツリー記憶部11を参照し,引用実行するノード識別番号を取得する。
ノード機能引用部42では,ノード識別番号を鍵としてノード記憶部26を参照して,該当ノードの処理機能を引用し,引用機能実行部43に渡す。引用機能実行部43は,必要に応じてビットストリーム記憶部20,構造ツリー記憶部23を参照しながら復号処理を行い,ReturnPINを出力して処理を終了する。なお,引用機能実行部43は,下位ノード実行機能を保持しており,下位ノードへ出力PINを受け渡し,再帰的に実行する機能を有する。
[2−4]ノード復号処理実行の処理の流れ
次に,図13のノード実行部25の処理の流れの例を,図14に示す。
まず,ステップS401にて,ノードの入力PINを上位ノードの出力PINの情報で初期化する。続いて,ステップS402にて,入力PINのノード番号を用いて構造ツリー記憶部23からノード識別番号を参照する。ノード識別番号はノード記憶部26に送られ,該当するノードの処理機能をステップS403の処理機能に設定する。
続いてステップS403にて,設定された引用機能の復号処理を実行する。復号処理の内容は引用機能に依存するが,必ず出力としてReturnPINが出力される。引用機能の処理は,内部で“下位ノードの実行”の有無によって大きく分岐される。ステップS403−1の分岐にて下位ノードの実行命令が検出されなければ,ステップS403−2にて,ReturnPINを出力して処理を終了する。下位ノードの実行命令が検出された場合には,ステップS403−3にて,下位ノードに渡す出力PINを構築して自己再帰を行う。
自己再帰を行うノードは,非終端ノードとなる構成ノードとフィルタノードであり,引用機能内に実装される下位ノードを実行する。下位ノードの実行命令が検出されなくなればステップS403−2にて,ReturnPINを出力して処理を終了する。一方,終端ノードとなる符号化/復号ノードでは下位ノード実行命令が検出されることはないので,コンスタントにステップS403−2の処理が実行され,ReturnPINを出力して処理を終了する。具体的な復号処理の実施例を,以下の場所にて解説する。
構成ノードの実施例:[2−5−2],[2−5−4],[2−5−6]
符号化/復号ノードノ実施例:[2−6−2]
フィルタノードの実施例:[2−7−2]
[2−5]構造ノードの処理の流れ
[2−5−1]画面の分割・走査機能の構造ノード符号化処理の流れ
入力PINのブロック内を16×16のブロックサイズに分割し,右方向下向きに走査しながら単一の下位ノードに出力PINを受け渡し,順次実行するノードの符号化処理の流れを一例として図15に示す。
まず,ステップS501にて,入力PINのブロックサイズを16×16のブロックに分割・走査可能か否かのチェックを行い,分割不可能な場合には,ステップS502にて,入力PINのエラー情報に“分割不可能”と格納・出力して処理を終了する。分割可能であった場合にはステップS503にて,構造ツリー記憶部11を参照し,入力PIN内に格納される自身のノード番号から下位ノードのノード番号を取得し,NodeNumberに格納する。
続いてステップS504にて,入力PINのブロックサイズ内を全て16×16のブロックに分割し,右方向下向きに走査するループを行う。
続いて,ステップS505にて,下位ノードに受け渡す出力PINを構築する。出力PINのブロックサイズは(Width,Height)=(16,16)に,ノード番号をNodeNumberに設定する。基準座標は入力PINの基準座標を(BaseX,BaseY)とすると,ループ回数の増加に伴って(BaseX,BaseY),(BaseX+16,BaseY),(BaseX+32,BaseY)... のように,右方向下向きに走査するように設定する。なお,それ以外のデータには入力PINのデータを複写して用いる。
続いて,ステップS506にて,構築した出力PINを下位ノードの入力PINに受け渡し,下位ノードを実行してReturnPINを受け取りResultに格納する。本ステップの処理が[2−1]にて解説した再帰処理にあたる。
続いて,ステップS507にて,Resultのエラーチェックを行い,エラー検出時には,ステップS508にて,Resultを出力して処理を終了する。エラー未検出の場合には,ステップS509にて,入力PINのブロックサイズ・基準座標・ノード番号以外のデータをResultのデータで更新する。それ以外のデータは更新しない。
上記のステップS505〜S509のループ処理を終了すると,ステップS510にて更新された入力PINを出力して処理を終了する。
[2−5−2]画面の分割・走査機能の構造ノード復号処理
前述の[2−5−1]の例における復号処理の流れは,図15と同一の処理を行うが,構造ツリー記憶部は[1−3]にて用いた構造ツリー記憶部23を用いる。また,ステップS506の再帰処理は[2−3]の再帰処理にあたる。
[2−5−3]画面の分割・走査機能の構造ノード符号化処理
上位ノードから渡される入力PINのブロックサイズを上下2分割し,上から下へと走査しながら上部と下部で実行する下位ノードを切り替える符号化処理の流れを一例として図16に示す。
まず,ステップS601にて,入力PINのブロックサイズを上下2分割可能か否かのチェックを行い,分割不可能な場合には,ステップS602にて,入力PINのエラー情報に“分割不可能”と格納・出力して処理を終了する。一方,分割可能であった場合にはステップS603にて,入力PINのブロックサイズを上下に分割し,上から下へと走査するループを行う。ここで,使用する下位ノードを上下で使い分けるため,それぞれServientID=0,1と番号を付ける。
なお,この例の場合,入力PINのブロックサイズにおけるHeightが1以下のときにエラーとなる。
続いて,ステップS604にて,構造ツリー記憶部11を参照し,ServientIDと入力PIN内のノード番号に格納される自身のノード番号から下位ノードのノード番号を取得して,NodeNumberに格納する。このとき,ブロック上部の処理の場合(ServientID=0)には,1つ目の出力PINに接続する下位ノードのノード番号を,ブロック下部の処理を行う場合(ServientID=1)には,2つ目の出力PINに接続する下位ノードのノード番号を取得する。
続いて,ステップS605にて,下位ノードに受け渡す出力PINを構築する。入力PINのブロックサイズを(Width,Height)=(InWidth,InHeight)とすると,出力PINのブロックサイズは(Width,Height)=(InWidth,InHeight/2)に,基準座標は入力PINの基準座標を(BaseX,BaseY)とすると,(BaseX,BaseY),(BaseX,BaseY+InHeight/2)のように設定し,ノード番号をNodeNumberに設定する。なお,それ以外のデータは入力PINのデータを複写して用いる。
続いて,ステップS606にて,構築した出力PINを下位ノードの入力PINに受け渡し,下位ノードを実行してReturnPINを受け取りResultに格納する。本ステップの処理が[2−1]にて解説した再帰処理にあたる。
続いて,ステップS607にて,Resultのエラーチェックを行い,エラー検出時には,ステップS608にて,ResultをReturnPINとして出力して処理を終了する。エラー未検出の場合には,ステップS609にて,入力PINのブロックサイズ・基準座標・ノード番号以外のデータをResultのデータで更新する。それ以外のデータは更新しない。
上記のステップS605〜ステップS609のループ処理を終了すると,ステップS610にて,更新された入力PINを出力して処理を終了する。
[2−5−4]画面の分割・走査機能の構造ノード復号処理
前述の[2−5−3]の例における復号処理の流れは,図16と同一の処理を行うが,構造ツリー記憶部は[1−3]にて用いた構造ツリー記憶部23を用いる。また,再帰処理は[2−3]の再帰処理にあたる。
[2−5−5]処理の分岐・選択機能の構造ノード符号化処理
2つの出力PINを有し,2つの手法の中からビットストリームに符号語を追加格納することで明示的にコストの低い方を選んで符号化を行う分岐・選択を行う機能のノードの符号化処理の流れの一例を,図17および図18に示す。
まず,ステップS701にて,最小コスト値MinCostをINFで,下位ノード実行前の復号処理時間PreDecTimeを入力PINの最適復号処理時間で,符号化処理時間格納用データとしてEncTimeBufferを入力PINの符号化処理時間で,自身のノード番号を表すSelfNodeNumberを入力PINのノード番号で,下位ノード実行前のビットストリームPreBitStreamを入力PINのビットストリームで,下位ノード実行前の復号画像PreDecImageを入力PINの復号画像で,それぞれ初期化を行う。
続いて,ステップS702にて,全ての分岐パターンの数だけ実行するループを行う。本例では,2つの下位ノードの分岐・選択のため,それぞれServientID=0,1と番号を付ける。
続いて,ステップS703にて,構造ツリー記憶部11を参照し,ServientIDとSelfNodeNumberから下位ノードのノード番号を取得してNodeNumberに格納する。このとき1パターン目(ServientID=0)は1つ目の出力PINに接続する下位ノードのノード番号を,2パターン目(ServientID=1)は2つ目の出力PINに接続する下位ノードのノード番号をそれぞれ取得する。
続いて,ステップS704にて,下位ノードに受け渡す出力PINを構築する。出力PINのノード番号にはNodeNumberを,最適復号処理時間にはPreDecTimeを,符号化処理時間にはEncTimeBufferを設定し,復号画像にはPreDecImageを,ビットストリームにはPreBitStreamをそれぞれ複写して設定する。なお,上記以外のデータは入力PINのデータを複写して用いる。
続いて,ステップS705にて,ServientIDを符号語に変換して出力PINのビットストリームに格納する。
続いて,ステップS706にて,ServientIDの下位ノードの入力PINに構築した出力PINを受け渡し,下位ノードを実行してReturnPINをResultに格納する。本ステップの処理が[2−1]にて解説した再帰処理にあたる。
続いて,ステップS707にて,下位ノードの符号化処理に要した積算時間EncTimeと,下位ノードで適用された最適復号処理実行時の復号処理時間DecTimeを算出する。
EncTime=Resultの符号化処理時間−EncTimeBuffer
…(式2)
DecTime=Resultの最適復号処理時間−PreDecTime
…(式3)
なお,上記処理時間の算出を終了すると,ステップS708にて,EncTimeBufferをResultの符号化処理時間で更新する。
続いて,ステップS709にて,Resultのエラーチェックを行い,エラー検出時には,以下ステップS712までの処理をスキップする。未検出の場合には,ステップS710にて,コスト算出関数記憶部12と原画像記憶部10を参照し,下位ノードによって符号化を行った際のコストを算出し,Costに格納する。
続いて,ステップS711にて,コストとMinCostの比較を行い,コストがMinCost未満の場合にはステップS712にて,入力PINのノード番号以外の全てのデータをResultで更新する。
全てのループを終了すると,ステップS713にて,MinCostがINF未満か否かの判定を行い,INF以上であればステップS714にて,入力PINのエラー情報に“下位全ての手法がエラーのため符号化不可能”と格納・出力して処理を終了する。INF未満の場合にはステップS715にて,入力PINの符号化処理時間をEncTimeBufferで更新し,ステップS716にて,入力PINを実行結果として出力して処理を終了する。
[2−5−6]処理の分岐・選択機能の構造ノード復号処理
前述の[2−5−5]の例における復号処理の流れを図19に示す。
まず,ステップS801にて,下位ノードに受け渡す出力PINの情報を入力PIN情報で初期化し,次に,ステップS802にて,ビットストリーム記憶部20から符号語を切り出し,何番目の下位ノードで符号化が行われたかを示すServientIDを復号する。
続いて,ステップS803にて,ServientIDと入力PIN内のノード番号に格納される自身のノード番号を鍵として構造ツリー記憶部23を参照し,符号化が行われた下位ノードのノード番号を取得し,出力PINのノード番号に格納する。本ステップの処理が[2−3]にて解説した再帰処理にあたる。
続いて,ステップS804にて,下位ノードを実行してReturnPINをResultに格納し,ステップS805にて,Resultを出力して処理を終了する。
[2−6]符号化/復号ノードの特徴
[2−6−1]符号化/復号ノードの符号化処理の流れ
本実施形態は,構造ツリーの評価に復号処理に要する時間もコスト計算対象として含むため,符号化装置内では符号化処理を終えた後にブロック内画素値の完全な復号処理を行う。このように符号化/復号ノードには必須処理が含まれるため,これら符号化処理における必須処理の流れを,図20および図21に示す。
まず,ステップS901にて,入力PINのデータが,引用された符号化/復号ノードにて符号化できるか否かの簡易チェックを行う。ここでは,実際に符号化を行ってエラーを確認するのではなく,ブロックサイズや復号画像における既知の隣接画素位置などを参照し,符号化前にエラーの可能性を調べる。ここで符号化不可能な場合には,ステップS902にて,“符号化不可能”というエラー情報を入力PINに格納・出力して処理を終了する。一方,符号化可能と判断された場合,ステップS903にて,入力PINのビットストリームにおける符号量をLocationに格納し,ステップS904にて,PreEncTimeに現在時間を取得する。
続いて,ステップS905にて,入力PINを引用した符号化/復号ノードの符号化機能に転送して実行し,ReturnPINをEncResultに格納する。このステップ内の処理では,符号化/復号ノード固有の処理が行われる。なお,EncResultには,入力PINのデータが全て複写されており,復号画像には対象ブロックの復号画素値が,ビットストリームには符号化/復号ノードの符号化機能内にて出力された符号語が追加格納される。また,処理中にエラーが発生した場合には,EncResultのエラー情報にそのデータが格納され,入力PIN自体のデータには変更は一切ないものとする。
続いて,ステップS906にて,符号化に要した処理時間を現在時間からPreEncTimeを減算して求め,EncResultの符号化処理時間に加算格納する。
続いて,ステップS907にて,EncResultのエラーチェックを行い,エラー検出時にはステップS908にて,EncResultを出力して処理を終了する。エラー未検出の場合には,ステップS909にて,原画像記憶部10,コスト算出関数記憶部12の参照を禁止し,ビットストリーム記憶部34の格納・参照を許可し,記憶部内のデータを消去した後,ビットストリーム記憶部34にEncResultのビットストリームを格納してデータ参照開始位置をLocationに設定する。続いて,ステップS910にて,PreDecTimeに現在時間を格納する。
続いて,ステップS911にて,入力PINを引用した符号化/復号ノードの復号機能に転送して実行し,ReturnPINをDecResultに格納する。このステップ内の処理では,符号化/復号ノード固有の処理が行われ,復号機能内のビットストリーム参照は,入力PINのデータではなく,ビットストリーム記憶部34のデータを参照する。なお,DecResultには入力PINのデータが全て複写されており,復号画像には対象ブロックの復号画素値が追加格納される。処理中にエラーが発生した場合には,DecResultのエラー情報にそのデータが格納され,入力PIN自体のデータには変更は一切ないものとする。
続いて,ステップS912にて,復号に要した処理時間を現在時間からPreDecTimeを減算して求め,EncResultの最適復号処理時間に加算格納する。また,ステップS913にて,原画像記憶部10,コスト算出関数記憶部12への参照を許可し,ビットストリーム記憶部34のデータを消去して格納・参照を禁止する。
続いて,ステップS914にて,DecResultのエラーチェックを行い,エラー発生時にはステップS915にて,DecResultを出力して処理を終了する。エラー未検出の場合には,ステップS916にて,EncResultとDecResultの復号画像の完全一致の判定を行い,完全一致しなければステップS917にて,入力PINに“復号画像が一致しない”というエラー情報を格納・出力して処理を終了する。完全一致が確認できれば,ステップS918にて,EncResultを出力して処理を終了する。
[2−6−2]符号化/復号ノードの復号処理の流れ
[2−6−1]に記載の符号化/復号ノードの復号処理における必須処理の流れを図22に示す。
まず,ステップS1001にて,入力PINのデータが,引用された符号化/復号ノードにて復号できるか否かの簡易チェックを行う。ここでは,実際に復号を行ってエラーを確認するのではなく,ブロックサイズや既知の隣接画素位置などを参照し,復号前にエラーの可能性を調べる。ここで復号不可能な場合にはステップS1002にて,“復号不可能”というエラー情報を入力PINに格納・出力して処理を終了する。復号可能と判断された場合,ステップS1003にて,PreDecTimeに現在時間を格納する。
続いて,ステップS1004にて,入力PINを引用される符号化/復号ノードの復号機能に転送して実行し,ReturnPINをDecResultに格納する。このステップ内の処理では符号化/復号ノード固有の処理が行われ,復号機能内のビットストリーム参照は,入力PINのデータではなく,ビットストリーム記憶部20のデータを参照する。なお,DecResultには入力PINのデータが全て複写されており,復号画像には対象ブロックの復号画素値が追加格納される。処理中にエラーが発生した場合には,DecResultのエラー情報にそのデータが格納され,入力PIN自体のデータには変更は一切ないものとする。
続いて,ステップS1005にて,復号に要した処理時間を現在時間からPreDecTimeを減算して求め,DecResultの最適復号処理時間に加算して格納し,ステップS1006にて,DecResultを出力して処理を終了する。
[2−7]フィルタノードの特徴
[2−7−1]フィルタノードの符号化処理の流れ
フィルタノードの処理手順も符号化/復号ノードの処理と同様に,符号化装置内で符号化処理を終えた後にブロック内画素値の完全な復号処理を行う。このようにフィルタノードにも必須処理が含まれるため,これら符号化処理における必須処理の流れを,図23および図24に示す。
まず,ステップS1101にて,構造ツリー記憶部11を参照し,入力PIN内のノード番号に格納される自身のノード番号から下位ノードのノード番号を取得してNodeNumberに格納し,ステップS1102にて,下位ノードに受け渡す出力PINを構築する。出力PINには入力PINのデータをそのまま複写し,出力PINのノード番号のみNodeNumberに変更する。
続いて,ステップS1103にて,出力PINを下位ノードの入力PINに受け渡し,下位ノードを実行してReturnPINを受け取りResultに格納する。本ステップの処理が[2−1]にて解説した再帰処理にあたる。なお,Resultには入力PINのデータが全て複写されており,ステップS1103の処理にて,該当フィルタノード以下に接続する下位ノードが全て実行され,終端ノードの符号化/復号ノードにて復号画像が生成されるため,Resultの復号画像には入力PINの対象ブロック内の画素値が全て復号されていることが保障される。また,処理中にエラーが発生した場合には,Resultのエラー情報にそのデータが格納され,入力PIN自体のデータには変更は一切ないものとする。
続いて,ステップS1104にて,エラーチェックを行い,Resultにエラーが検出された場合,ステップS1105にて,Resultを出力して処理を終了する。エラー未検出の場合には,ステップS1106にて,Resultのビットストリームにおける符号量をLocationに格納し,ステップS1107にて,PreEncTimeに現在時間を格納する。
続いて,ステップS1108にて,Resultをフィルタノードの符号化機能に転送して実行し,ReturnPINをEncResultに格納する。このステップ内の処理ではフィルタノード固有の処理が行われる。なお,EncResultにはResultのデータが全て複写されており,復号画像にはフィルタ適用後の復号画素値が,ビットストリームにはフィルタノードの符号化機能内にて出力された符号語が追加格納される。処理中にエラーが発生した場合には,EncResultのエラー情報にそのデータが格納され,Result自体のデータには変更は一切ないものとする。
続いて,ステップS1109にて,符号化に要した処理時間を現在時間からPreEncTimeを減算して求め,EncResultの符号化処理時間に加算格納する。
続いて,ステップS1110にて,EncResultのエラーチェックを行い,エラー検出時にはステップS1111にて,EncResultを出力して処理を終了する。エラー未検出の場合には,ステップS1112にて,原画像記憶部10,コスト算出関数記憶部12の参照を禁止し,ビットストリーム記憶部34の格納・参照を許可して記憶部内のデータを消去した後,ビットストリーム記憶部34にEncResultのビットストリームを格納してデータ参照開始位置をLocationに設定する。続いてステップS1113にて,PreDecTimeに現在時間を格納する。
続いて,ステップS1114にて,Resultを引用したフィルタノードの復号機能に転送して実行し,ReturnPINをDecResultに格納する。このステップ内の処理ではフィルタノード固有の処理が行われ,復号機能内のビットストリーム参照は,Resultのデータではなく,ビットストリーム記憶部34のデータを参照する。なお,DecResultにはResultのデータが全て複写されており,復号画像には対象ブロックの復号画素値が追加格納される。処理中にエラーが発生した場合には,DecResultのエラー情報にそのデータが格納され,Result自体のデータには変更は一切ないものとする。
続いて,ステップS1115にて,復号に要した処理時間を現在時間からPreDecTimeを減算して求め,EncResultの最適復号処理時間に加算格納する。また,ステップS1116にて,原画像記憶部10,コスト算出関数記憶部12への参照を許可し,ビットストリーム記憶部34のデータを消去して格納・参照を禁止する。
続いてステップS1117にて,DecResultのエラーチェックを行い,エラー発生時にはステップS1118にて,DecResultを出力して処理を終了する。エラー未検出の場合には,ステップS1119にて,EncResultとDecResultの復号画像の完全一致の判定を行い,完全一致しなければステップS1120にて,入力PINに“復号画像が一致しない”というエラー情報を格納・出力して処理を終了する。完全一致が確認できれば,ステップS1121にて,EncResultを出力して処理を終了する。
[2−7−2]フィルタノードの復号処理
[2−7−1]に記載の符号化/復号ノードの復号処理における必須処理の流れを図25に示す。
まず,ステップS1201にて,構造ツリー記憶部23を参照し,入力PIN内のノード番号に格納される自身のノード番号から下位ノードのノード番号を取得してNodeNumberに格納し,ステップS1202にて,下位ノードに受け渡す出力PINを構築する。出力PINには入力PINのデータをそのまま複写し,出力PINのノード番号のみNodeNumberに変更する。
続いて,ステップS1203にて,出力PINを下位ノードの入力PINに受け渡し,下位ノードを実行してReturnPINを受け取りResultに格納する。本ステップの処理が[2−3]にて解説した再帰処理にあたる。
続いて,ステップS1204にて,エラーチェックを行い,Resultにエラーが検出された場合,ステップS1205にて,Resultを出力して処理を終了する。エラー未検出の場合には,ステップS1206にて,現在時間をPreDecTimeに格納し,ステップS1207にて,フィルタノードの復号機能にResultを転送し,ReturnPINをDecResultに格納する。
続いて,ステップS1208にて,復号に要した処理時間を現在時間からPreDecTimeを減算して求め,EncResultの最適復号処理時間に加算格納し,ステップS1209にて,DecResultを出力して処理を終了する。
以上説明した本実施形態におけるPINの役割について,補足説明する。
本実施形態では,図7の構造ツリーを用いた画像符号化装置1および図9の構造ツリーを用いた画像復号装置2内で使用される各種ノードの入出力データをPINに記載し,ノード間でPINを交換することで,全てのノードに対する統一的な処理を実現する。
・符号化装置の具体的なPINの交換手順
画像符号化装置1のノード転送PIN構築部13(図7)にて,符号化対象画像全体をブロックに見立てたPINを生成し(図8:S101),ノード実行部16にてPINを最上位ノードに受け渡して符号化処理を実行し,最上位ノードの実行結果が格納されたReturnPINを受け取る(図8:S104)。
ノード実行部16では,図11に示すような符号化処理の実行の仕組みによって,ノード機能の引用により符号化処理が実行される。入力PIN初期化部30(図11にて上位ノードから受け取るPINのデータで入力PINの初期化を行い(図12:S301),引用機能実行部33にて該当ノードの符号化処理が実行される(図12:S303)。引用ノードが下位ノードを実行する場合には,下位ノードに受け渡すPINを構築して下位ノードを実行する(図12:S303−3)。引用ノードの符号化処理が終了すると上位ノードにReturnPINを出力する(図12:S303−2)。
なお,引用ノード内でのPINの各種扱いについては,引用されるノード依存で大きく異なる(図15〜図24参照)。
・復号装置の具体的なPINの交換手順
画像復号装置2のノード転送PIN構築部24(図9)にて,復号画像全体をブロックに見立てたPINを生成し(図10:S201),ノード実行部25にてPINを最上位ノードに受け渡して復号処理を実行し,最上位ノードの実行結果が格納されたReturnPINを受け取る(図10:S204)。
ノード実行部25では,図13に示すような復号処理の実行の仕組みによって,ノード機能の引用により復号処理が実行される。まず,入力PIN初期化部40にて上位ノードから受け取るPINのデータで入力PINの初期化を行い(図14:S401),引用機能実行部43にて該当ノードの復号処理が実行される(図14:S403)。引用ノードが下位ノードを実行する場合には,下位ノードに受け渡すPINを構築して下位ノードを実行する(図14:S403−3)。引用ノードの復号処理が終了すると上位ノードにReturnPINを出力する(図14:S403−2)。
[3]画像符号化構造の自動生成・最適化手法
[3−1]画像符号化構造の自動生成・最適化装置
本実施形態に係る構造ツリーの自動生成・最適化装置5の一実施形態例を図26に示す。
構造ツリーの自動生成・最適化装置5は,GPを用いて,画像符号化構造の構造ツリーを自動生成することを実現するものであり,この自動生成を実現するために,自動生成装置全体を通じて共通して参照可能なノード記憶部50と,最初の母集団となる構造ツリーを生成する母集団生成部51と,コスト未計算の構造ノードを選び出すコスト未計算構造ツリー分配部52と,それらの構造ツリーを格納する母集団記憶部53と,前述の符号化装置を実行して構造ツリーのコストを算出するコスト算出部54と,所定の進化手法により新たな構造ツリーを生成する新規構造ツリー生成部55と,母集団記憶部53との重複を確認する重複確認部56と,母集団記憶部53から構造ツリーを削除する構造ツリー削除部57と,最適化装置の終了を検出する終了判定部58と,最もコストが低い最良の構造ツリーを出力する構造ツリー決定部59とを備える。
ノード記憶部50には,進化計算を行う対象となる全てのノードの符号化/復号機能を保持しており,装置全体を通じて新規ノードの生成や符号化/復号などを行う際にこれらの機能を参照・引用する。また,ノード記憶部50は,ユーザの手によりノードの追加格納ができる。
母集団生成部51は,ノード記憶部50のノードを参照してランダムにコスト未算出の構造ツリーを生成する。なお,この母集団生成部51には,画面全体に対して従来の符号化手法をそのまま用いる手法や,ユーザが任意に設計する構造ツリー,コスト評価済みの構造ツリーなどを含む。
コスト未計算構造ツリー分配部52は,母集団生成部51にて生成された構造ツリーが既にコスト計算されているか否かによって処理を分離する。コスト計算が済んでいる構造ツリーであった場合には,母集団記憶部53に格納し,未評価の構造ツリーはコスト算出部54に送られる。コスト算出部54は符号化実行機能を保持しており,[1−1]の画像符号化装置1による処理を実行して構造ツリーのコストを計算する。コストを算出した構造ツリーは母集団記憶部53に全て格納する。コスト算出部54にて画像符号化装置1を起動して符号化を行う際,画像符号化装置1に与える符号化対象画像,コスト算出関数には,自動生成・最適化装置5に与えられるものと同一のものを与え,構造ツリーは上記未評価の構造ツリーを与える。
新規構造ツリー生成部55は,交叉・変異・削除・挿入の各機能を保持しており,母集団記憶部53から構造ツリーを選択し,その構造ツリーに対して所定の進化計算を実行して新規構造ツリーを生成する。選択した構造ツリーが2つであった場合には交叉機能に,1つであった場合には変異・削除・挿入機能のいずれかをランダムに実行する。また,作成した構造ツリーは重複確認部56に送られ,母集団記憶部53内に既に同じ手法が存在しないかの確認を行い,重複が存在した場合には,新規構造ツリー生成部55に母集団記憶部53からの再選択命令を出す。重複が存在しなければコスト未計算の構造ツリーはコスト算出部54に送られ,画像符号化装置1による処理を実行して構造ツリーのコストを計算の上,評価済みの構造ツリーとして母集団記憶部53に格納される。
構造ツリー削除部57では,母集団記憶部53内の構造ツリー数が設定する数より大きくなった場合にコストが高い(適応度が低い)構造ツリーの削除を行う。
終了判定部58では,ユーザによる進化計算の終了命令もしくは母集団記憶部53内のコスト最小となる構造ツリーが所定の進化回数連続して変化しなければ構造ツリー決定部59に終了命令を出す。構造ツリー決定部59は母集団記憶部53の中でコスト最小の構造ツリーを選び出し,最良の構造ツリーとして出力する。
[3−2]画像符号化構造の自動生成・最適化装置の処理の流れ
次に,構造ツリーの自動生成・最適化装置5の処理の流れの例を図27に示す。
まず,ステップS1301にて,ノード記憶部50からランダムにノードを選択して繋ぎ合わせ,母集団を生成する。このとき,構造ノードやフィルタノードを使用せずに画像全体に単体の符号化/復号ノードを適用する形で,JPEGやJPEG 2000,GIF,PNGなどの従来手法や,ユーザが任意に設計した構造ツリーも母集団として含める。
続いて,ステップS1302にて,作成した全ての構造ツリーに対するループ処理を行い,それぞれの構造ツリーに対してステップS1303にて,コスト評価済みか否かのチェックを行う。コスト算出済みの構造ツリーに対しては,ステップS1304の処理をスキップする。コストが未算出の場合にはステップS1304にて,画像符号化装置1による処理を実行してコストを算出し,ステップS1305にて,母集団記億部53にコスト算出済みの構造ツリーを格納する。
全ての初期母集団のコスト算出が終了すると,ステップS1306にて,母集団の中から1つもしくは2つの構造ツリーを選択し,それらを対象に進化計算を行い,新規構造ツリーを生成する。このとき,母集団記憶部53内の構造ツリー全てをコスト順にソートし,コストが低い構造ツリーが優先的に選択されるように若干重み付けした上でルーレット選択などによって選択を行う。生成した新規構造ツリーはステップS1307にて,母集団記憶部53内の全ての構造ツリーと重複確認が行われ,重複が存在する場合には再度ステップS1306が実行される。重複が確認されなければステップS1308にて,新規構造ツリーのコスト計算が行われ,ステップS1309にて,母集団記憶部53に格納される。
続いて,ステップS1310にて,母集団記憶部の格納総数を計測し,所定の数以上か否かのチェックを行い,所定の数以下であればステップS1311をスキップする。所定の数以上であれば,母集団記憶部53内の構造ツリーの総数が所定の数未満になるように構造ツリーの削除を行う。このとき,母集団記憶部53内の構造ツリー全てをコスト順にソートし,コストが高い構造ツリーもしくはエラーが出力された構造ツリーを優先的に選択されるように若干重み付けした上でルーレット選択などによって選択を行う。なお,ステップS1311の処理は,コストが低い上位いくつかのノードは削除しないなどの例外を加味した上で行う。
続いて,ステップS1312にて,終了判定を行い,ユーザからの終了命令の有無,もしくは所定の回数進化計算を行ってもコスト最小の構造ツリーが変化していなければ,ステップS1313にて,コスト最小の構造ツリーを出力して処理を終了する。上記条件を満たしていなければ,再度ステップS1306以降の処理を再実行する。
[4]コスト算出手法
前述のように,本実施形態では従来手法と同様に画質と発生符号量,そして符号化/復号に要する処理時間を考慮する。そのための一計算例を以下に記す。
コスト算出関数内で用いる個別の評価値を以下の4つとして,それぞれの評価値にユーザが設定する係数値を乗算した上で積和計算にてコストを求める。
・画質
・発生符号量
・符号化処理時間
・最適復号処理時間
[4−1]画質
画質評価には従来手法と同様のSSDやSADを用いる。なお,SSDとSADのどちらを評価値として使用するかはユーザが選択して用いるものとする。
最適化時における構造ツリーのコスト計算(図7の出力データ分岐部18および図8のステップS106)では,復号画像の画素値は全て復号済みであることが保障されるため,原画像と復号画像全体を比較してSSDやSADを求める。
一方,処理の分岐・選択時における計算(図18のステップS710)では,下位に接続するフィルタノードによって隣接ブロックの復号画素値が更新される可能性があるため,隣接ブロックの復号画素値も考慮した評価が望ましい。そのため,隣接何画素までSSDやSAD計算を行うかを決定するRefRangeを設定する。RefRange=0のときは,従来同様に対象ブロック内のみとなり,RefRange=2のときは,対象ブロックの周囲2画素まで考慮してSSDやSAD計算を行う。RefRangeは,ユーザが設定するものとする。
また,SSDやSAD計算は,復号画像における復号画素値に対してしか計算せず,RefRange内であっても復号前の未知の画素値に対しては計算対象から除外する。そのため,対象ブロックの画素数をNumBlockPels,計算対象とした合計画素数をNumAccountとおき,下式にてSSDコストCSSD ,SADコストCSAD を計算する。
SSD =SSD×NumBlockPels/NumAccount …(式4)
SAD =SAD×NumBlockPels/NumAccount …(式5)
可逆圧縮手法の最適化を行う場合,原画像と復号画素値が少しでも異なればCSSD ・CSAD としてINFを設定する。可逆圧縮手法の最適化を行うか否かはユーザが決定するものとする。
[4−2]符号量
符号量には,構造ツリーを用いて符号化を行った際に出力される符号語による符号量のほかに,画像サイズ等に代表される各種ヘッダと構造ツリーの符号量が対象とされる。ヘッダの符号化のために最低限必要な画像サイズを縦横それぞれ固定長でXbits割り当て,構造ツリーの符号化のために,ノード識別番号を固定長でNbits割り当て,記述されるノード数がMノード,構造ツリーを用いて符号化を行った際に出力される符号語をYbitsとすると,全体の符号量CGenBits は,次の(式6)にて計算できる。
GenBits =2×X+N×M+Y …(式6)
最適化時における構造ツリーのコスト計算(図7の出力データ分岐部18および図8のステップS106)では,ReturnPIN内のビットストリームにこれらの情報が全て記述されているため,この値をCGenBitsに用いる。
一方,処理の分岐・選択時におけるコスト計算(図18のステップS710)では,下位ノード実行前の符号量を一度保存しておき,下位ノード実行後に増加した符号量から実行前の符号量を減算し,純粋に下位ノードの実行によって増加した符号量をCGenBits に用いる。
[4−3]符号化処理時間
計算時間の肥大化を防止するために導入する評価値であり,下位ノードを実行したときの符号化/復号ノードおよびフィルタノードで要した符号化処理の計算時間の合計を評価値CEncTime として用いる。なお,符号化/復号ノードおよびフィルタノード内では完全な復号処理を行うが,これら復号処理の計算時間は除外し,PINに格納される符号化処理時間は,処理の分岐・選択を行うときもコストの低いReturnPINの符号化処理時間で上書きされることはなく,随時加算計算されるものとして扱う。そのため図7の出力データ分岐部18および図8のステップS106にて,参照するReturnPIN内の符号化処理時間には全ての分岐・選択を辿った合計の符号化処理時間が格納される。
最適化時における構造ツリーのコスト計算(図7の出力データ分岐部18および図8のステップS106)では,上記のようにReturnPIN内の符号化処理時間に構造ツリー全体の符号化処理時間が格納されているため,この値をCEncTime に用いる。
一方,処理の分岐・選択時におけるコスト計算(図18のステップS710)では,下位ノード実行前の符号化処理時間を一度保存しておき,下位ノード実行後に増加した符号化処理時間から実行前の符号化処理時間を減算し,純粋に下位ノードの実行によって増加した符号化処理時間をCEncTime に用いる。
[4−4]最適復号処理時間
計算時間の肥大化を防止するために導入する評価値であり,下位ノードを実行したときの符号化/復号ノードおよびフィルタノードで要した復号処理の計算時間の合計を評価値CDecTime として用いる。なお,最適復号処理時間は処理の分岐・選択を行うとき,コストの低いReturnPINの最適復号処理時間で上書きされるため,コスト比較の結果,選択されなかった復号処理時間は考慮されない。そのため,復号装置側での復号処理に要する計算時間を見積もる指標として扱うことができ,図7の出力データ分岐部18および図8のステップS106にて,参照するReturnPIN内の最適復号処理時間に,最適な符号化経路を辿った際の復号処理に要する計算時間が格納される。
最適化時における構造ツリーのコスト計算(図7の出力データ分岐部18および図8のステップS106)では,上記のようにReturnPIN内の最適復号処理時間に構造ツリーの最適な符号化経路を辿った際の復号処理に要する計算時間が格納されているため,この値をCDecTime に用いる。
一方,処理の分岐・選択時におけるコスト計算(図18のステップS710)では,下位ノード実行前の最適復号処理時間を一度保存しておき,下位ノード実行後に増加した最適復号処理時間から実行前の最適復号処理時間を減算し,純粋に下位ノードの実行によって増加した最適復号処理時間をCDecTime に用いる。
[4−5]ユーザの設定項目
上記[4−1〜4]の各評価値を用いてコスト算出関数の出力コストを決定する。コスト算出関数には,ユーザの要求に合わせた高画質・低ビットレート・処理時間の最適な画像符号化手法を得るため,以下の4つの設定自由度をユーザに与える。
・可逆圧縮フラグ
・SSDorSADフラグ
・RefRange
・各評価値の係数
“可逆圧縮フラグ”を使用する場合には[4−1]に記載のように原画像と復号画素値が少しでも異なればINFを出力する。“SSDorSADフラグ”は画質の評価値としてCSSD とCSAD のどちらを使用するか決定する。“RefRange”は隣接何画素までSSDやSAD計算を行うかを決定する値である。
“各評価値の係数”には[4−1〜4]の各評価値に乗算する4つの係数(a,b,c,d)を与え,最終的な出力コストCostを下式にて算出する。
Cost=a×(CSSD or CSAD )+b×CGenBits
+c×CEncTime +d×CDecTime …(式7)
また,上記手法だけでなく,4つの評価値を用いてコストを算出する任意の関数も設定可能とする。
符号化処理時間の導入により,最適化の過程で,非現実的な程に符号化処理時間を要する手法の優先度を下げて最適化を行いたい場合には,対応する係数値(上記の例であればc)に大きな値を設定することで,合計符号化処理時間のコストが大きくなる。そのため,積和演算で計算されるコストも対応して高くなり,合計符号化処理時間が短い手法が最適な符号化構造として出力される。合計符号化処理時間に対応する係数値に0を設定した場合には処理時間を度外視して最適化を行う。
最適復号処理時間の導入により,復号装置側での計算負荷を予測できる。最適化の過程で,非現実的な程に復号処理時間を要する手法の優先度を下げて最適化を行いたい場合には,対応する係数値(上記の例であればd)に大きな値を設定することで,最適復号処理時間のコストが大きくなる。そのため積和演算で計算されるコストも対応して高くなり,最適復号処理時間が短い手法が最適な符号化構造として出力される。最適復号処理時間に対応する係数値に0を設定した場合には処理時間を度外視して最適化を行う。
以上の本実施形態による効果とその効果が生じる理由について,まとめて説明すると以下のとおりである。
図26の構造ツリーの自動生成・最適化装置5に,符号化対象画像やコスト算出関数を与えることで符号化構造の最適化を実行する。符号化構造は,新規構造ツリー生成部55にて母集団記憶部53から1つまたは2つの符号化構造を選び出し(図27:S1306),進化計算にて符号化構造を書き換えて新しい符号化構造を生成する。新しい符号化構造はコスト算出部54にて設定される符号化対象画像の符号化処理が行われ,設定されるコスト算出関数から生成した新しい符号化構造のコストを求め(図27:S1308),母集団記憶部53に格納する(図27:S1309)。上記の新規構造ツリー生成とコスト算出を複数回繰り返すことで符号化対象画像に特化した符号化構造を自動構築する。
これにより,第1の効果として,符号化処理時間や復号処理時間が少ない,処理負荷の軽い符号化構造を優先的に実現することが可能になる。その理由について詳しく述べる。
本手法は符号化に要する処理時間(合計符号化処理時間)と,分岐などによって最適な経路を辿った場合に画像の復号に要する処理時間(最適復号処理時間)をコストの計算対象として導入している(「課題を解決するための手段」の項の[C]評価手法を参照,実施例は[4]コスト算出手法の(式7)参照)。符号化処理時間や復号処理時間がかかる符号化構造のコストを高くする最適化を実現するためには,図26の構造ツリーの自動生成・最適化装置5におけるコスト算出部54にてコストを求める際に(図27:S1304,S1308),(式7)における係数値c,dの値を高く設定することで,符号化構造の処理時間に関するコストを高くすることができる。また,分岐・選択の機能を実行するノードにおいても同じ係数値を用いることで,これらを考慮した分岐・選択が実現できる(図18:ステップS710)。結果として各種処理時間を要する符号化構造はコストが高くなるため,処理負荷の軽い符号化構造の最適化が実現できる。
また,第1の効果とは逆に,第2の効果として,符号化処理時間や復号処理時間が多くかかっても,画質・符号量のみを特化させる符号化構造を優先的に実現できるようにすることが可能になる。その理由について詳しく述べる。
符号化処理時間や復号処理時間を無視した画質・符号量のみを特化させる符号化構造の最適化を実現するためには,図26の構造ツリーの自動生成・最適化装置5におけるコスト算出部54にてコストを求める際に(図27:S1304,S1308),(式7)における係数値c,dの値を0に設定することで,処理時間を度外視したオフライン最適化が実行できる。また,分岐・選択の機能を実行するノードにおいても同じ係数値を用いることで,これらを考慮した分岐・選択が実現できる(図18:ステップS710)。結果として,各種処理時間を無視した最適化が実現できるため,画質・符号量のみを特化させる符号化構造の最適化が実現できる。
以上の構造ツリーを用いた画像符号化,画像復号および構造ツリーの自動生成・最適化の処理は,コンピュータとソフトウェアプログラムとによっても実現することができ,そのプログラムをコンピュータ読み取り可能な記録媒体に記録することも,ネットワークを通して提供することも可能である。
本発明は,動画像や静止画像を符号化し復号する場合に適用できるものであり,本発明を適用することで,複数の符号化手法の中から入力動画像や静止画像に特化した符号化手法を自動生成にて実現できるようになる。また,例えば空や夜景,山岳風景やアニメ調の画像など,複数の画像に対して最適化計算を行い,平均的にコストの低い符号化構造を構築すれば,今までにないそれぞれのシーンに特化した符号化構造の組み合わせが得られることが期待される。
1 画像符号化装置
10 原画像記憶部
11 構造ツリー記憶部
12 コスト算出関数記憶部
13 ノード転送PIN構築部
14 ヘッダ情報格納部
15 構造ツリー格納部
16 ノード実行部
17 ノード記憶部
18 出力データ分岐部
2 画像復号装置
20 ビットストリーム記憶部
21 ヘッダ情報復号部
22 構造ツリー復号部
23 構造ツリー記憶部
24 ノード転送PIN構築部
25 ノード実行部
26 ノード記憶部
27 出力データ分岐部

Claims (3)

  1. あらかじめ定められた画像符号化または復号における各要素技術の実行機能を有する複数のノードを,各要素技術を識別するノード識別子に対応させて記憶するノード記憶手段と,前記ノード記憶手段に記憶されたノードを実行するノード実行手段とを備える画像符号化/復号装置が画像符号化または復号に用いる,前記ノード記憶手段に記憶されたノードの組み合わせを示す木構造化されたノード識別子で表される符号化構造の構造ツリーを自動生成する装置が実行する画像符号化構造の自動生成方法であって,
    前記符号化構造の構造ツリーをランダムに生成することで,またはユーザによりあらかじめ準備された前記符号化構造の構造ツリーを読み込むことで,複数の符号化構造の構造ツリーからなる母集団を生成する第1の過程と,
    前記母集団の中から,コスト未算出の符号化構造の構造ツリーを選択し,符号化および復号による画質の劣化,符号化による発生符号量,符号化に要する計算時間および復号に要する計算時間の中の少なくとも複数をコストの評価値とする,与えられたコスト算出式を用いて,前記選択された符号化構造の構造ツリーのコストを算出する第2の過程と,
    コストが高い前記符号化構造の構造ツリーを,前記母集団の中から削除する第3の過程と,
    前記母集団におけるコスト算出済みの符号化構造の構造ツリーの中から,親となる1つもしくは2つの符号化構造の構造ツリーを選択し,それらを対象として,前記符号化構造における構造ツリーにおけるノードを置き換えることで新しく1つまたは複数の符号化構造の構造ツリーを生成する第4の過程と,
    所定の終了条件が満たされるまで,前記第2の過程から前記第4の過程を繰り返しながら,よりコストが低い符号化構造の構造ツリーを探索する第5の過程とを有し,
    所定の終了条件が満たされたときの前記母集団における前記コストが最も低い符号化構造の構造ツリーを出力する
    ことを特徴とする画像符号化構造の自動生成方法。
  2. あらかじめ定められた画像符号化または復号における各要素技術の実行機能を有する複数のノードを,各要素技術を識別するノード識別子に対応させて記憶するノード記憶手段と,前記ノード記憶手段に記憶されたノードを実行するノード実行手段とを備える画像符号化/復号装置が画像符号化または復号に用いる,前記ノード記憶手段に記憶されたノードの組み合わせを示す木構造化されたノード識別子で表される符号化構造の構造ツリーを自動生成する画像符号化構造の自動生成装置であって,
    前記符号化構造の構造ツリーをランダムに生成することで,またはユーザによりあらかじめ準備された前記符号化構造の構造ツリーを読み込むことで,複数の符号化構造の構造ツリーからなる母集団を生成する母集団生成手段と,
    前記母集団の中から,コスト未算出の符号化構造の構造ツリーを選択し,符号化および復号による画質の劣化,符号化による発生符号量,符号化に要する計算時間および復号に要する計算時間の中の少なくとも複数をコストの評価値とする,与えられたコスト算出式を用いて,前記選択された符号化構造の構造ツリーのコストを算出するコスト算出手段と,
    コストが高い前記符号化構造の構造ツリーを,前記母集団の中から削除する構造ツリー削除手段と,
    前記母集団におけるコスト算出済みの符号化構造の構造ツリーの中から,親となる1つもしくは2つの符号化構造の構造ツリーを選択し,それらを対象として,前記符号化構造における構造ツリーにおけるノードを置き換えることで新しく1つまたは複数の符号化構造の構造ツリーを生成する新規構造ツリー生成手段と,
    所定の終了条件が満たされるまで,前記コスト算出手段,前記構造ツリー削除手段および前記新規構造ツリー生成手段による処理を繰り返す制御を行う終了判定手段と,
    所定の終了条件が満たされたときに前記母集団における前記コストが最も低い符号化構造の構造ツリーを出力する構造ツリー決定手段とを備える
    ことを特徴とする画像符号化構造の自動生成装置。
  3. 請求項に記載の画像符号化構造の自動生成方法を,コンピュータに実行させるための画像符号化構造の自動生成プログラム。
JP2009232114A 2009-10-06 2009-10-06 画像符号化構造の自動生成方法,画像符号化構造の自動生成装置およびそのプログラム Expired - Fee Related JP5307681B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009232114A JP5307681B2 (ja) 2009-10-06 2009-10-06 画像符号化構造の自動生成方法,画像符号化構造の自動生成装置およびそのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009232114A JP5307681B2 (ja) 2009-10-06 2009-10-06 画像符号化構造の自動生成方法,画像符号化構造の自動生成装置およびそのプログラム

Publications (2)

Publication Number Publication Date
JP2011082722A JP2011082722A (ja) 2011-04-21
JP5307681B2 true JP5307681B2 (ja) 2013-10-02

Family

ID=44076332

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009232114A Expired - Fee Related JP5307681B2 (ja) 2009-10-06 2009-10-06 画像符号化構造の自動生成方法,画像符号化構造の自動生成装置およびそのプログラム

Country Status (1)

Country Link
JP (1) JP5307681B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5937946B2 (ja) * 2012-10-16 2016-06-22 日本電信電話株式会社 画像符号化装置、画像復号装置、画像符号化方法、画像復号方法、画像符号化プログラム及び画像復号プログラム
JP6037521B2 (ja) * 2015-07-02 2016-12-07 日本電信電話株式会社 画像符号化方法、画像復号方法、画像符号化装置、画像復号装置、画像符号化プログラム及び画像復号プログラム
US10901804B2 (en) 2017-12-15 2021-01-26 Fujitsu Limited Apparatus and method to select services for executing a user program based on a code pattern included therein
CN109344050B (zh) * 2018-08-20 2023-07-21 中国平安人寿保险股份有限公司 一种基于结构树的接口参数分析方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4188139B2 (ja) * 2003-05-19 2008-11-26 三菱電機株式会社 トランスコーダ
KR101232780B1 (ko) * 2006-01-12 2013-09-03 (주)휴맥스 통합 코덱 장치 및 방법

Also Published As

Publication number Publication date
JP2011082722A (ja) 2011-04-21

Similar Documents

Publication Publication Date Title
KR102349176B1 (ko) 영상 부호화 방법 및 컴퓨터로 읽을 수 있는 기록 매체
US10412394B2 (en) Encoding device, decoding device, encoding method, and decoding method
JP6513261B2 (ja) 画像符号化装置、画像符号化方法及びプログラム、画像復号装置、画像復号方法及びプログラム
JP5718363B2 (ja) 大きいサイズの変換単位を用いた映像符号化、復号化方法及び装置
KR20190029732A (ko) 인트라 예측 모드 기반 영상 처리 방법 및 이를 위한 장치
JP5719401B2 (ja) ブロックサイズ決定方法、映像符号化装置、及びプログラム
TW201830972A (zh) 用於視訊寫碼之低複雜度符號預測
KR101426272B1 (ko) 영상 부호화장치 및 영상 복호화장치
KR20160114570A (ko) 고정폭 가변길이의 화소 샘플값 문자열의 매칭이 강화된 영상 압축 방법 및 장치
WO2014190468A1 (en) Video encoder for images
KR20170070256A (ko) 이미지들의 멀티-트리 서브-디비젼을 이용한 비디오 코딩
KR20110066109A (ko) 트리 구조를 이용한 부호화/복호화 방법 및 장치
KR20110114524A (ko) 화상 예측 부호화 장치, 방법 및 프로그램, 화상 예측 복호 장치, 방법 및 프로그램, 및 부호화·복호 시스템 및 방법
JP7325534B2 (ja) 点群符号化のための方法および装置
JP2020205609A (ja) 画像の符号化及び復号方法、画像の符号化及び復号デバイス、及びこれに対応するコンピュータプログラム
KR20210134556A (ko) 인트라 예측 기반의 영상 부호화 또는 복호화 장치 및 방법
JP5307681B2 (ja) 画像符号化構造の自動生成方法,画像符号化構造の自動生成装置およびそのプログラム
KR20180079314A (ko) 그래프 기반 리프팅 변환을 이용하여 비디오 신호를 인코딩, 디코딩하는 방법 및 장치
JP6962193B2 (ja) 動画像符号化装置、動画像符号化方法および動画像符号化プログラムを記憶する記録媒体
WO2012128209A1 (ja) 画像符号化装置、画像復号装置、プログラムおよび符号化データ
JPWO2019150435A1 (ja) 映像符号化装置、映像符号化方法、映像復号装置、映像復号方法、及び映像符号化システム
WO2022261605A2 (en) Method and apparatus for calculating distance based weighted average for point cloud coding
KR20130070618A (ko) 트리 구조를 이용한 부호화/복호화 방법 및 장치
KR20230088437A (ko) Uv 좌표들의 코딩
KR20230087554A (ko) 메시 압축을 위한 정점 재정렬

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120221

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121218

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130123

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130625

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130627

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5307681

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees