(57)【要約】【課題】最適化に適した符号化構造が可変な画像符号化方式，画像復号方式を実現する仕組みを構築することを目的とする。【解決手段】ノード記憶部１７は，画像符号化における各種の要素技術の実行機能を有する複数のノードを記憶する。ノード実行部１６は，符号化対象画像の符号化を行うためのノードの組み合わせを木構造で表す最適化された符号化構造の構造ツリーに従って，ノード記憶部１７に記憶されたノードを参照し実行することにより，符号化対象画像を符号化する。また，画像符号化に用いた符号化構造の構造ツリーについても符号化し，デコーダで復号するビットストリームに加える。【選択図】図７
2011082722.tif 000002
【特許請求の範囲】
【請求項１】
画像符号化に用いられる，あらかじめ定められた画像符号化における各要素技術の実行機能を有する複数のノードを，各要素技術を識別するノード識別子に対応させて記憶するノード記憶手段と，前記ノード記憶手段に記憶されたノードを実行するノード実行手段とを備える画像符号化装置が実行する画像符号化方法であって，
符号化対象画像の符号化を行うための前記ノード記憶手段に記憶されたノードの組み合わせを示す木構造化されたノード識別子で表される符号化構造の構造ツリーを記憶する過程と，
前記符号化構造の構造ツリーを符号化する過程と，
前記符号化構造の構造ツリーにおける最上位のノードから順に，ノード識別番号によって前記ノード記憶手段を参照し，該当するノードを前記ノード実行手段によって実行することにより，前記符号化構造に従って符号化対象画像を符号化する過程と，
前記符号化構造の構造ツリーを符号化した符号化データと前記符号化対象画像の符号化データとをビットストリームとして出力する過程とを有する
ことを特徴とする構造ツリーを用いた画像符号化方法。
【請求項２】
請求項１記載の構造ツリーを用いた画像符号化方法において，
前記ノードとして，符号化対象の入力画像を複数の画素から構成されるブロック単位で分割・走査を行うノード，処理の分岐・選択を行うノード，ブロック内の画素データの符号化／復号を行うノード，および復号画素に対してフィルタを行うノードを有する
ことを特徴とする構造ツリーを用いた画像符号化方法。
【請求項３】
請求項１または請求項２記載の構造ツリーを用いた画像符号化方法において，
前記各ノードは，ノード間でデータを受け渡しするための入力インタフェースもしくは出力インタフェース，またはその双方のノード間インタフェースを有し，
前記各ノードにおける処理対象データまたは処理結果データを，前記ノード間インタフェースを介して受け渡す
ことを特徴とする構造ツリーを用いた画像符号化方法。
【請求項４】
請求項１，請求項２または請求項３記載の構造ツリーを用いた画像符号化方法において，
前記ノード実行部は，現在実行しているノードに下位ノードが存在する場合に，その下位ノードを再帰的に呼び出して実行する
ことを特徴とする構造ツリーを用いた画像符号化方法。
【請求項５】
符号化対象画像を入力して符号化する画像符号化装置であって，
画像符号化に用いられる，あらかじめ定められた画像符号化における各要素技術の実行機能を有する複数のノードを，各要素技術を識別するノード識別子に対応させて記憶するノード記憶手段と，
符号化対象画像の符号化を行うための前記ノード記憶手段に記憶されたノードの組み合わせを示す木構造化されたノード識別子で表される符号化構造の構造ツリーを記憶する手段と，
前記符号化構造の構造ツリーを符号化する手段と，
前記符号化構造の構造ツリーにおける最上位のノードから順に，ノード識別番号によって前記ノード記憶手段を参照し，該当するノードを実行することにより，前記符号化構造に従って符号化対象画像を符号化するノード実行手段と，
前記符号化構造の構造ツリーを符号化した符号化データと前記符号化対象画像の符号化データとをビットストリームとして出力する手段とを備える
ことを特徴とする構造ツリーを用いた画像符号化装置。
【請求項６】
画像復号に用いられる，あらかじめ定められた画像復号における各要素技術の実行機能を有する複数のノードを，各要素技術を識別するノード識別子に対応させて記憶するノード記憶手段と，前記ノード記憶手段に記憶されたノードを実行するノード実行手段とを備える画像復号装置が実行する画像復号方法であって，
復号対象となる入力ビットストリームに含まれる，前記ノード記憶手段に記憶されたノードの組み合わせを示す木構造化されたノード識別子で表される符号化構造の構造ツリーを符号化した符号化データを復号し，符号化構造の構造ツリーを構築する過程と，
前記符号化構造の構造ツリーにおける最上位のノードから順に，ノード識別番号によって前記ノード記憶手段を参照し，該当するノードを前記ノード実行手段によって実行することにより，前記符号化構造に従って，前記入力ビットストリームに含まれる復号対象画像データを復号する過程とを有する
ことを特徴とする構造ツリーを用いた画像復号方法。
【請求項７】
請求項６記載の構造ツリーを用いた画像復号方法において，
前記ノードとして，復号対象画像データを複数の画素から構成されるブロック単位で分割・走査を行うノード，処理の分岐・選択を行うノード，ブロック内の画素データの復号を行うノード，および復号画素に対してフィルタを行うノードを有する
ことを特徴とする構造ツリーを用いた画像復号方法。
【請求項８】
請求項６または請求項７記載の構造ツリーを用いた画像復号方法において，
前記各ノードは，ノード間でデータを受け渡しするための入力インタフェースもしくは出力インタフェース，またはその双方のノード間インタフェースを有し，
前記各ノードにおける処理対象データまたは処理結果データを，前記ノード間インタフェースを介して受け渡す
ことを特徴とする構造ツリーを用いた画像復号方法。
【請求項９】
請求項６，請求項７または請求項８記載の構造ツリーを用いた画像復号方法において，
前記ノード実行部は，現在実行しているノードに下位ノードが存在する場合に，その下位ノードを再帰的に呼び出して実行する
ことを特徴とする構造ツリーを用いた画像復号方法。
【請求項１０】
符号化されたビットストリームを入力して復号する画像復号装置であって，
画像復号に用いられる，あらかじめ定められた画像復号における各要素技術の実行機能を有する複数のノードを，各要素技術を識別するノード識別子に対応させて記憶するノード記憶手段と，
復号対象となる入力ビットストリームに含まれる，前記ノード記憶手段に記憶されたノードの組み合わせを示す木構造化されたノード識別子で表される符号化構造の構造ツリーを符号化した符号化データを復号し，符号化構造の構造ツリーを構築する手段と，
前記符号化構造の構造ツリーにおける最上位のノードから順に，ノード識別番号によって前記ノード記憶手段を参照し，該当するノードを実行することにより，前記符号化構造に従って，前記入力ビットストリームに含まれる復号対象画像データを復号するノード実行手段とを備える
ことを特徴とする構造ツリーを用いた画像復号装置。
【請求項１１】
請求項１から請求項４までのいずれか１項に記載された構造ツリーを用いた画像符号化方法，または請求項６から請求項９までのいずれか１項に記載された構造ツリーを用いた画像復号方法において用いる符号化構造の構造ツリーを自動生成する装置が実行する画像符号化構造の自動生成方法であって，
前記符号化構造の構造ツリーをランダムに生成することで，またはユーザによりあらかじめ準備された前記符号化構造の構造ツリーを読み込むことで，複数の符号化構造の構造ツリーからなる母集団を生成する第１の過程と，
前記母集団の中から，コスト未算出の符号化構造の構造ツリーを選択し，符号化および復号による画質の劣化，符号化による発生符号量，符号化に要する計算時間および復号に要する計算時間の中の少なくとも複数をコストの評価値とする，与えられたコスト算出式を用いて，前記選択された符号化構造の構造ツリーのコストを算出する第２の過程と，
コストが高い前記符号化構造の構造ツリーを，前記母集団の中から削除する第３の過程と，
前記母集団におけるコスト算出済みの符号化構造の構造ツリーの中から，親となる１つもしくは２つの符号化構造の構造ツリーを選択し，それらを対象として，前記符号化構造における構造ツリーにおけるノードを置き換えることで新しく１つまたは複数の符号化構造の構造ツリーを生成する第４の過程と，
所定の終了条件が満たされるまで，前記第２の過程から前記第４の過程を繰り返しながら，よりコストが低い符号化構造の構造ツリーを探索する第５の過程とを有し，
所定の終了条件が満たされたときの前記母集団における前記コストが最も低い符号化構造の構造ツリーを出力する
ことを特徴とする画像符号化構造の自動生成方法。
【請求項１２】
請求項１から請求項４までのいずれか１項に記載された構造ツリーを用いた画像符号化方法，または請求項６から請求項９までのいずれか１項に記載された構造ツリーを用いた画像復号方法において用いる符号化構造の構造ツリーを自動生成する画像符号化構造の自動生成装置であって，
前記符号化構造の構造ツリーをランダムに生成することで，またはユーザによりあらかじめ準備された前記符号化構造の構造ツリーを読み込むことで，複数の符号化構造の構造ツリーからなる母集団を生成する母集団生成手段と，
前記母集団の中から，コスト未算出の符号化構造の構造ツリーを選択し，符号化および復号による画質の劣化，符号化による発生符号量．符号化に要する計算時間および復号に要する計算時間の中の少なくとも複数をコストの評価値とする，与えられたコスト算出式を用いて，前記選択された符号化構造の構造ツリーのコストを算出するコスト算出手段と，
コストが高い前記符号化構造の構造ツリーを，前記母集団の中から削除する構造ツリー削除手段と，
前記母集団におけるコスト算出済みの符号化構造の構造ツリーの中から，親となる１つもしくは２つの符号化構造の構造ツリーを選択し，それらを対象として，前記符号化構造における構造ツリーにおけるノードを置き換えることで新しく１つまたは複数の符号化構造の構造ツリーを生成する新規構造ツリー生成手段と，
所定の終了条件が満たされるまで，前記コスト算出手段，前記構造ツリー削除手段および前記新規構造ツリー生成手段による処理を繰り返す制御を行う終了判定手段と，
所定の終了条件が満たされたときに前記母集団における前記コストが最も低い符号化構造の構造ツリーを出力する構造ツリー決定手段とを備える
ことを特徴とする画像符号化構造の自動生成装置。
【請求項１３】
請求項１から請求項４までのいずれか１項に記載された構造ツリーを用いた画像符号化方法を，コンピュータに実行させるための画像符号化プログラム。
【請求項１４】
請求項６から請求項９までのいずれか１項に記載された構造ツリーを用いた画像復号方法を，コンピュータに実行させるための画像復号プログラム。
【請求項１５】
請求項１１に記載の画像符号化構造の自動生成方法を，コンピュータに実行させるための画像符号化構造の自動生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，ユーザの要求に合わせた“高画質・低ビットレート・処理時間”の画像符号化手法を自動生成するのに適した画像符号化構造を有する画像符号化技術，画像復号技術およびそれらに用いる最適化された画像符号化構造の自動生成技術に関する。
【背景技術】
【０００２】
画像符号化においては，縦横数画素のブロックで画面の分割を行い，分割したブロックを右方向下向きに走査しながら符号化を行う方式が主流である。
【０００３】
また，ブロック内の画素値を符号化する際にも数パターンの符号化手法を用い，符号化テストを行った結果の画質やビットレートから最良の符号化手法を選択して符号化を行うというような，分岐・選択を行いながら符号化を行う手法が主流である。
【０００４】
例えばＪＰＥＧ（非特許文献１参照）では，画像を一律に８×８のブロックで分割する手法が用いられており，ＡＶＣ／Ｈ．２６４  ＦＲＥｘｔ．（非特許文献２参照；以下，ＡＶＣ／Ｈ．２６４）では，画像を一律に１６×１６のブロックに分割し，その内部を１６×１６ブロックでは４パターン，８×８ブロックでは計４個のブロックそれぞれに対して９パターン，４×４ブロックでは計１６個のブロックそれぞれに対して９パターンの符号化が行われ，それらの中からラグランジュコスト計算によって最良の手法が選択される。
【０００５】
ＡＶＣ／Ｈ．２６４の各パターンでは，復号画像における既知の画素値を使用し，平均値や単一方向に既知の画素値を延長させたときの予測値などを生成し，非可逆圧縮であれば，原画像との予測残差に対して離散コサイン変換（ＤＣＴ）と量子化を行い，量子化後のＤＣＴ係数群のエントロピー符号化が行われる。一方，可逆圧縮であれば，予測残差がそのままエントロピー符号化される。
【０００６】
なお，下記の非特許文献３，４では，従来よりも大きいブロックサイズを導入する符号化方式の提案がなされている。また，非特許文献５には，ＧＩＦの符号化規格について，非特許文献６には，ＰＮＧの符号化規格について記載されている。また，非特許文献７，８には，ロスレスな画像圧縮符号化技術が記載されている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】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］, インターネット＜ＵＲＬ：http://www.w3.org/Graphics/GIF/spec-gif87.txt ＞
【非特許文献６】World Wide Web Consortium,“Portable Network Graphics (PNG)  Specification（Second Edition）”，［online］, インターネット＜ＵＲＬ：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
【発明の概要】
【発明が解決しようとする課題】
【０００８】
例えば４×４ブロックの画素値をビットストリームに変換する手法は，数万パターンでは済まないほど無数に存在する。ＡＶＣ／Ｈ．２６４における画像の符号化（Ｉピクチャ）では，ブロックの分割・走査方法を規格内にて定義することで統一して参照可能な復号済みの画素位置を生成する。例えば４×４ブロックでは９パターンの分岐・選択手法を搭載しており，それぞれに対して既知の画素から符号化対象ブロックの予測値を生成・符号化を行う汎用的に効果を発揮する符号化手法を搭載し，それらの中からラグランジュコストの低い手法を選びながら符号化を行う。
【０００９】
上記のＡＶＣ／Ｈ．２６４の手法は様々な画像に対して汎用的に符号化効率の高い手法であるが，画像によってはブロックの分割・走査方法を変更，もしくはパターン数の増減，もしくは符号化手法の交換を行った方が符号化効率が高くなることが予想される。しかし，従来手法の処理手順の変更にはソースコードの改変に膨大な手間を要する上，画像に特化した手法を構築しても，同一の手法を他の画像に適用すると符号化効率の悪化を招く可能性がある。そのため画像に応じてこれらを設計する試みは行われていなかった。
【００１０】
このように，従来の画像符号化手法では，符号化を行うブロックのサイズは規格内に準備されている限られた範囲の中でしか処理の分岐・選択が行われていない。
【００１１】
撮像機器による動画像の高解像度化が進む近年，従来準備されていたブロックサイズでは小さ過ぎるため，新しい動画像の符号化規格には，よりサイズの大きなブロックを導入する動きが盛んに行われている（非特許文献３，４参照）。しかし，従来サイズの動画像も使用され続けることも考えられ，そのような動画像については新しい符号化規格では余分な符号量が増えてしまう可能性がある。
【００１２】
また，ブロック内の画素値を符号化する処理部分についても，規格内に搭載されている限られた範囲の中でしか分岐・選択が行われておらず，搭載されている符号化処理機能が不得手とする画像の場合，符号量の増加を招く恐れがある。
【００１３】
例えば，符号化にＤＣＴを用いるＪＰＥＧやＡＶＣ／Ｈ．２６４は，画素の諧調がなだらかに変化する自然画像や映像の符号化に向いており，高画質かつ低い符号量で圧縮が可能であるが，ＧＩＦ（非特許文献５参照）やＰＮＧ（非特許文献６参照）では，諧調数を増やして高画質化すると符号量が増加してしまう。一方，アニメのように諧調数が少なく，輪郭が明確な画像に対しては，ＧＩＦやＰＮＧが可逆圧縮にもかかわらず少ない符号量で圧縮できるのに対し，ＪＰＥＧやＡＶＣ／Ｈ．２６４では輪郭付近にノイズを生じやすく，高画質化すると符号量が増加してしまう。
【００１４】
これらの問題を克服するため，次世代の画像／映像符号化規格ではこれらを補完する手法や技術の組み合わせを模索しているが，それら符号化手法の組み合わせは一般に汎用的な画像や映像に対して効果的な手法を人間が試行錯誤しながら生成しているため，人間の把握できる範囲の最適化しか行われていなかった。
【００１５】
さらに，入力動画像に特化したブロック分割サイズや処理手順を，動画像毎に生成するような方式も存在していなかった。
【００１６】
以上の問題に鑑み，本発明は，最適化に適した符号化構造が可変な画像符号化方式，画像復号方式を実現する仕組みを構築し，また，例えば大小様々なブロックサイズに加え，複数の符号化手法を保持させておき，それらの組み合わせ構造の最適化によって，ユーザの要求に合わせた“高画質・低ビットレート・処理時間”の最適な画像符号化構造を生成できるようにすることにより，高能率な符号化・復号に資する新たな技術の提供を目的とするものである。
【課題を解決するための手段】
【００１７】
本発明の説明に先立ち，本発明で用いる用語の意味・定義について説明する。
【００１８】
・「ノード」について
画像のエンコーダ内で使用される各種符号化機能（画像符号化の各種の要素技術）それぞれをノードと定義する。例えば画像を任意のブロックサイズで分割・走査する符号化機能や，複数手法の中から単一の手法を選択して符号化／復号する符号化機能，既知の画素値を参照して符号化対象ブロック内の画素値を予測し，予測誤差をビットストリームに変換する各種符号化機能などを指す。また，ノードには，ＪＰＥＧやＡＶＣ／Ｈ．２６４などの従来のエンコーダをそのまま適用することもできる。
【００１９】
・「符号化構造」について
ノードの組み合わせで表記されるエンコーダの設計図を符号化構造と定義する。ノードの組み合わせ次第で任意のエンコーダを設計できる。すなわち，符号化構造は，画像符号化を実現するための各種の要素技術の組み合わせを表現したものであり，ノードの接続図でもある。
【００２０】
・「コスト」について
任意の画像に対して任意の符号化構造で圧縮した際に得られる“復号画像の画質・符号量・合計符号化処理時間・最適復号処理時間”の４つから計算される一次元の指標のことをコストと定義する。コストは，下記の“最適化”や分岐・選択のノードの計算時に適宜計算され，コストが低い手法の方がより優れた方法として評価される。例えばＡＶＣ／Ｈ．２６４では，ブロックサイズや各種手法の分岐・選択にラグランジュコスト計算が使用されている。
【００２１】
・「最適化」について
入力画像に対してコストが最小となるように符号化構造内のノードの組み換えを行うことを最適化と定義する。
【００２２】
本発明では，符号化対象画像１枚の符号化効率を高めることに注力し，各種ブロックの分割・走査手法，分岐・選択手法，符号化手法を全てノードと見立て，それらの入出力データを統一することで容易なノードの繋ぎ替えを実現する。これにより無数に存在するノードの組み合わせの中から画像に特化した符号化構造を機械的に探索し，コストが最も低い符号化構造を自動生成することを可能にする。この装置によって最適化を行うことで画像の符号化効率の向上を実現することができる。
【００２３】
本発明の符号化構造を生成する装置では，無数のブロックの分割・走査手法，分岐・選択手法，符号化手法その中からどの手法を用いるかを適応的に選択して符号化構造を構築する。符号化装置ではビットストリームの先頭にヘッダ情報に加えてこの符号化構造を記した設計図，すなわちノードの接続図（構造ツリー）の情報を付加し，接続図の情報の後に，各種ノードで出力される符号語を格納する。
【００２４】
復号装置ではビットストリームの先頭からヘッダ情報を読み解き，続いて符号化構造を記した接続図を読み解くことで，復号装置内で符号化に用いられた符号化構造の再構築を行う。続いて復号装置はビットストリームから符号語を切り出しながら符号化構造を辿り，画素の復号を行う。
【００２５】
従来手法では処理の切り替えは行われていたが，規格内にて符号化手法が厳密に定義されていたため，上記接続図を加える必要はなかった。本手法ではこの情報を加えることにより，多様な符号化手法を用いることができる構造が実現される。
【００２６】
さらに詳しく本発明の手法について説明する。本発明では，現存する様々な画像の符号化手法に加え，様々な画素値生成手法を組み合わせ，符号化対象画像に特化した符号化構造を機械的に探索し，ユーザが任意に設定するコスト算出関数が出力するコストを評価値として，コストが最小となる画像符号化構造を自動生成する。
【００２７】
符号化手法の組み合わせは，上記の様々な画像の符号化手法や画素値生成手法に加え，画像を領域毎に分割・走査する機能や，処理の切り替えを行う機能，復号画像に対してフィルタを施す機能のそれぞれを全てノードと見立て，ノードの組み合わせを木構造で記述する。この木構造には符号化手法の組み合わせ構造を記述することとし，これを構造ツリーと呼ぶ。
【００２８】
多様なノードを最適化装置に保持させて，これら構造ツリーの組み合わせ最適化を機械的に行うことにより，人間の把握できる限界を超えた最適化が可能になる。そのため，規格内に組み込まれている限られた機能の切り替えしか実現できていなかった従来手法の不得手な部分を改善することができる。また，最適化装置に与えられる画像に特化させた符号化手法の組み合わせ構造を自動で構築することができる。
【００２９】
本発明では，符号化時はビットストリームの先頭に画像サイズなどの各種ヘッダ情報に続いて構造ツリーの情報を格納し，そのデータの後に各ノードで出力される符号語を格納する。また，復号時はビットストリームを先頭から順次読み解くことで，ヘッダ情報を復号し，構造ツリーを再構築する。続いてビットストリームからビットを切り出しながら再構築した構造ツリーを辿り，画像の復号を行う。
【００３０】
構造ツリー内のノードの組み合わせは，進化的手法の一つである「遺伝的プログラミング」（Genetic Programming ：ＧＰ）を用いて最適化を行う。ＧＰによる進化計算では，構造ツリー毎にコストを求め，コストが最小となるように進化を重ねるため，構造ツリーのコスト算出手法が求められる。
【００３１】
本発明では，ユーザが任意のコスト算出関数を設定することによりコスト算出手法を決定し，復号画像の画質・符号量・処理時間などから単一評価値に変換した値を用いる。また，このコスト算出関数は構造ツリーの評価値を決定づけるだけでなく，構造ツリー内の処理の分岐・選択時におけるコスト算出にも同じ関数を使用する。
【００３２】
［Ａ］構造ツリーを用いた符号化／復号手順の基本的な考え方
本発明では，画像をブロックに分割する機能や処理の分岐・選択を行う機能，ブロック内の画素値をビットストリームに変換する機能，復号画素に対してフィルタを行う機能の各々をノードとして扱う。これらのノードは，実装上はそれぞれが例えば関数呼出しによって呼び出されるサブプログラムのモジュールのようなものと考えてよい。ノードは大きく以下の３つに分類される。
【００３３】
・構造ノード：ブロックに分割・走査する機能や処理の分岐・選択を行うノード
・符号化／復号ノード：対象ブロック内の画素値をビットストリームに変換／逆変換するノード
・フィルタノード：復号画像の復号済み画素に対してフィルタを施すノード
図１は，構造ツリーの構造の例を表す図であり，図２は，その構造ツリーの符号化（符号語）の例を表す図である。
【００３４】
構造ツリーは，図１のように木構造で表記するため，各ノードは幹方向と枝方向にそれぞれノードを接続する。ここで，あるノードに注目したとき，幹方向に接続するノードを上位ノード，枝方向に接続するノードを下位ノード，幹方向の根元のノードを最上位ノードと定義する。
【００３５】
ノードには，重複のない固有のノード識別番号を割り当てる。例えば３２ｂｉｔｓ固定長のノード識別番号を与えたとき，ノードは合計約４３億ノード許容できるが，ノード数が少ない場合には１６ｂｉｔｓ固定長（合計約６５５３６ノード）のノード識別番号や，より少ないビット数でノード識別番号を与えることも可能である。また，ノード毎に接続する下位ノード数を保持しているとすると，構造ツリーは，図２のようにノード識別番号の配列で表記・符号化できる。なお，構造ツリーの列挙順に０，１，２，... とノード番号を付加する。
【００３６】
各ノードは，上位ノードからデータを受け取る入力ＰＩＮと，下位ノードにデータを受け渡す出力ＰＩＮを有する。ＰＩＮは，ノード間でデータを受け渡すための情報接続部（ノード間インタフェース）である。ＰＩＮは，例えばデータを受け渡すためのメモリ領域として実装されるものでもよい。ＰＩＮを介してノード間で交換されるデータは，以下の８つが含まれる。
【００３７】
・復号画像：符号化／復号ノードの処理によって順次復号される画像
・ビットストリーム：符号語を追記型で格納
・ブロックサイズ：対象ブロックの縦幅，横幅
・基準座標：対象ブロックの左上のｘ，ｙ座標値
・最適復号処理時間：コスト最小となる経路を辿った際の復号処理に要する合計時間
・符号化処理時間：符号化処理に要する合計時間
・ノード番号：上記ノード番号
・エラー情報：通常は“エラーなし”
なお，ビットストリームに格納される符号語は，０または１の生起確率に対して適応的にエントロピー符号化を行う適応二値算術符号などを使用する。本説明では，簡素化のためエントロピー符号化を行わず，符号語がそのまま保存されているものとして扱う。
【００３８】
各ノードは入力ＰＩＮを必ず１つ保持しており，フィルタノードは必ず１つの出力ＰＩＮを，構造ノードは必ず１つ以上の出力ＰＩＮを持つ。一方，符号化／復号ノードは出力ＰＩＮを持たない。そのため，構造ノード，フィルタノードは「非終端ノード」となり，符号化／復号ノードは「終端ノード」となる。
【００３９】
各ノードは処理の終了時に実行結果として，上位ノードに対してＰＩＮのデータ構造を返還する（以下：ＲｅｔｕｒｎＰＩＮ）。また，エラー発生時には，ＲｅｔｕｒｎＰＩＮの“エラー情報”に下位ノードのエラー情報が格納される。符号化／復号時には，それぞれの処理の開始時にＰＩＮのデータを最上位ノードに受け渡す。ノード内では下位ノードが再帰的に呼び出され，最上位ノードのＲｅｔｕｒｎＰＩＮには，下位ノードを全て実行した際のビットストリーム（符号化時）や復号画像（符号化／復号時）が格納される。
【００４０】
なお，構造ツリーは，例えば画像符号化装置と画像復号装置とで同じものを用いることができる。したがって，同じ識別番号を持つノードであっても，符号化時におけるノードの処理機能と，復号時におけるノードの処理機能とはそれぞれ異なることがあり，画像符号化装置が備えるノード記憶部に格納されるノードと，画像復号装置が備えるノード記憶部に格納されるノードとは，それぞれに適したものがあらかじめ用意される。
【００４１】
［Ａ−１］構造ノード
構造ノードは大きく下記の２つに分類されるが，上記２つの機能を併用した単一ノードを適用することも可能である。
【００４２】
・画面の分割・走査機能の構造ノード
・処理の分岐・選択機能の構造ノード
画面の分割・走査機能の構造ノードは，入力ＰＩＮのブロック中をノード内で規定するブロックサイズで分割し，網羅的に走査しながら下位ノードを実行する条件と，画像符号化装置と画像復号装置とで走査するブロックの順番が一定であれば，いかなる分割・走査方法であっても対象となる。
【００４３】
処理の分岐・選択機能の構造ノードは，２つ以上の出力ＰＩＮを持ち，それら下位ノードのＲｅｔｕｒｎＰＩＮのどちらか一方を選択し，符号化を行う機能を有していれば，ビットストリームにビットを付加することで明示的に処理を切り替える手法でも，復号画像などの既知の情報から暗黙的に処理を切り替える手法でも，いかなる手法であっても対象となる。
【００４４】
［Ａ−２］符号化／復号ノード
符号化／復号ノードは，上位ノードから渡されるＰＩＮのデータを受け取り，ブロックサイズと座標値から対象ブロックを決定し，対象ブロック内の画素値を符号語に変換してビットストリームに格納する機能と，ビットストリームから符号語を切り出し，逆変換することで画素値に戻す機能を持つものとする。
【００４５】
符号化／復号ノードは，対象ブロックを画像と見立てれば画像の符号化／復号を行うプロセスと変わらない。そのため，従来の画像符号化規格であるＪＰＥＧやＪＰＥＧ  ２０００，ＧＩＦ，ＰＮＧなどと同様のビットストリームを出力する手法も，符号化／復号ノードとして適用できる。したがって，画面全体に対して構造ノードやフィルタノードを使用することなく，単一の符号化／復号ノードを用いて符号化を行えば，ヘッダ情報と構造ツリーをビットストリームに付随する必要性により，符号量は僅かに増加するが，最適化を行わなくても同等レベルの画質・ビットレートを担保できる。そのため，画面内の僅かな部分でも手法を切り替えた方が効率が高くなる場合，従来手法より本手法の方が優れた結果が得られることは容易に推測できる。
【００４６】
従来規格に代表される複雑な符号化を行うノードだけでなく，例えばＭＥＤ予測器（非特許文献７参照）やＧＡＰ（非特許文献８参照）の予測残差を可変長符号化するだけのような簡易的なノードまで，原画像の画素値を符号語に変換して復号画素値を生成する手法であれば，いかなる手法であっても符号化／復号ノードとして適用できる。これは，本発明が様々な画像符号化手法を統合的に扱うことができることを意味している。
【００４７】
また，例えばＪＰＥＧでは画面を一律に８×８ブロックに分割し，右方向下向きに走査しながら符号化を行い，ＡＶＣ／Ｈ．２６４では画面を一律に１６×１６ブロックに分割し，その内部を８×８ブロック，４×４ブロックに階層的に分割し，それぞれの内部をＺ字に走査しながら符号化を行うなど，走査手法が固定されているが（図３参照），本発明では，従来手法のようにブロックの分割・走査手法が固定されておらず，前述の構造ノードの接続次第で復号画像における復号済みの画素位置は大きく変化する。
【００４８】
そのため，復号画像における復号済みの画素位置が，図４のような形で現れる状況も考えられる。このような場合，ビットストリームへの情報付加なしに符号化対象ブロックの内部を四隅の既知の画素値を用いてグラデーション状に補間して復号画像を生成する符号化／復号ノードなども適用可能である。
【００４９】
このような手法は汎用性に欠ける符号化手法のため，効果的に働く例は稀なものとなるかもしれないが，符号化／復号ノードの一つとして準備しておけば，画像に対して特化させる最適化の過程で選出される可能性は十分考えられる。
【００５０】
［Ａ−３］フィルタノード
ブロック毎に符号化を行う非可逆圧縮手法では，ブロック間で不連続な歪を発生させることがあり，視覚的に大きな違和感を与えるため，ＡＶＣ／Ｈ．２６４では，不連続な歪による違和感を軽減させるためにブロック間の復号画素値を平滑化させるデブロッキングフィルタが搭載されている。
【００５１】
本発明では，構造ノードから渡される対象ブロック内部の処理は符号化／復号ノードの処理に依存する。そのため，仮にＡＶＣ／Ｈ．２６４の画像符号化機能を符号化／復号ノードとして用いた場合，ＡＶＣ／Ｈ．２６４のデブロッキングフィルタが適用されるため，対象ブロック内の歪は軽減できる。しかし，構造ノードによって画面が分割され，領域毎に異なる符号化手法が用いられた場合，対象ブロック間で不連続な歪が発生することが予想される。
【００５２】
本発明では，これらの不連続な歪を軽減するため，隣接するブロック間を跨いで既知の画素値にフィルタを施す機能を持たせる。フィルタは対象ブロックの復号画素とその周辺の復号済みの画素が主な対象であり，ＡＶＣ／Ｈ．２６４のような平滑化フィルタだけでなく，エッジ強調フィルタなど，画素値を入力として，変換後の画素値を出力するフィルタであればフィルタノードとして適用できる。
【００５３】
［Ｂ］構造ツリーの進化手法の基本的な考え方
本発明では，前述の特徴を持つ各種ノード群を複数保持するノードの記憶装置を用意し，その中から複数のノードを引用することで，符号化対象画像を符号化した際に，ユーザが任意に設定するコストが最も低くなるように構造ツリーの最適化を行う。
【００５４】
構造ツリーの最適化には，前述のようにＧＰを用いた手法を用いる。ＧＰでは，複数の最適化の種（以下：個体）から構成される母集団を生成し，これら母集団の中から１つ，もしくは２つの個体を選択して個体の情報を書き換えることで新しい個体の生成・評価を繰り返し実行する。なお，本発明では，個体は構造ツリーを表す。
【００５５】
ＧＰによる個体の進化手法には，代表的に以下の４種類が使用される。それぞれの簡易的なイメージを図５および図６に示す。
・交叉：２つの個体を部分的に交換する。
・変異：１つの個体内の選択されたノード自体を別のノードに置き換える。
・削除：１つの個体内の選択されたノード自体を取り除く。
・挿入：１つの個体内の選択されたノードの前に新たにノードを挿入する。
【００５６】
本発明において，ノードの種類には前述のように構造ノード，符号化／復号ノード，フィルタノードの３種類があり，それぞれの特徴を用いて進化計算を行う。
【００５７】
・交叉
図５に示すように，２つの個体内からそれぞれランダムにノードの選択を行い，選択したノード以下に接続する全てのノードに対して置き換えを行う。
【００５８】
・変異
図６（Ａ）に変異の例を示す。構造ノード・符号化／復号ノード・フィルタノード全てが変異対象となるが，構造ノードは構造ノードに，符号化／復号ノードは符号化／復号ノードに，フィルタノードはフィルタノードにしか変異しないものとし，変異後のノードはそれぞれランダムに決定する。構造ノードが選択された場合で，変異前の下位ノード数が変異後の下位ノード数より少なかった場合には，今まで接続していた下位ノードはそのまま接続し，残りの下位ノードは符号化／復号ノードをランダムに選択して接続・生成する。一方，変異前の下位ノード数が変異後の下位ノード数より多かった場合には，今まで接続していた下位ノードの中からランダムに選択もしくは優先順序を付けて選び出し，変異後の下位ノードとして接続する。符号化／復号ノードおよびフィルタノードが選択された場合には，それぞれランダムに決定したノードに置き換える。
【００５９】
・削除
図６（Ｂ）に削除の例を示す。削除対象となるノードは，下位ノードを持つ構造ノードとフィルタノードのみである。構造ノードが削除対象として選択された場合で，かつ接続する下位ノードの数が１つであった場合には，そのままノードを削除し，上位ノードの出力ＰＩＮと下位ノードの入力ＰＩＮとを接続する。２つ以上の下位ノードを持つ構造ノードの場合には，中から１つをランダムに選択もしくは優先順序をつけて選択し，上位ノードの出力ＰＩＮと下位ノードの出力ＰＩＮとを接続する。フィルタノードが削除対象として選択された場合には，下位ノードの数は１つなので，そのままノードを削除し，上位ノードの出力ＰＩＮと下位ノードの入力ＰＩＮとを接続する。
【００６０】
・挿入
図６（Ｃ）に挿入の例を示す。挿入対象となるノードは，下位ノードを持つ構造ノードとフィルタノードのみであり，複数の構造ノードとフィルタノードの中からランダムに１つ挿入するノードを選択する。構造ノードが選択された場合で，かつ接続する下位ノードの数が１つの場合には，そのままノードを追加する。２つ以上の下位ノードを持つ構造ノードの場合には，その中の１つは今まで接続していた下位ノードをそのまま接続し，残りの下位ノードには，符号化／復号ノードをランダムに選択して生成する。フィルタノードが選択された場合には，下位ノードの数は１つなので，そのままノードを挿入する。
【００６１】
［Ｃ］評価手法
本発明では，ユーザの要求に合わせた高画質・低ビットレート・処理時間の最適な画像符号化手法を得るため，評価を行う上でのコスト算出関数の設定をユーザが自由に設定可能な構成をとる。コスト算出関数は，最適化時における構造ノードを画像全体に適用した際のコスト算出と，符号化時における構造ノードの分岐・選択機能内の処理の分岐・選択で適用される計算手法とで同じコスト算出関数を用いる。
【００６２】
従来手法では画質と発生符号量が評価対象として使用されており，画質には対象ブロック内画素の二乗誤差和（Sum of Square Difference：以下，ＳＳＤ）や絶対値和（Sum of Absolute Difference：ＳＡＤ）が使用され，発生符号量には対象ブロックの符号化にて増加した符号量が使用される。
【００６３】
例えば，ＡＶＣ／Ｈ．２６４における１６×１６，８×８，４×４ブロックの分岐・選択や，それぞれのブロック内で最良の手法を選択するコスト算出式には，以下の手法が使用されている。
【００６４】
Ｃｏｓｔ＝ＳＳＤ＋λ×ＧｅｎＢｉｔｓ      …（式１）
ここで，ＳＳＤ（Sum of Square Difference）は符号化対象ブロック内の復号画素値と，原画像の対象ブロック内画素値の二乗誤差が使用される。λは量子化パラメータＱＰ（０〜５１）に依存して決定する値であり，ＧｅｎＢｉｔｓは対象ブロックの符号化によって増加した符号量が適用される。
【００６５】
本発明でも，上記のようにコスト算出は異なる評価値の積和計算にて行う。しかし，本手法では対象ブロック内の画素値だけでなく，フィルタノードによって隣接ブロックの復号画素値が更新される可能性があるため，対象ブロック内のみを評価値とする従来手法をそのまま使用することはできない。また，最適化の過程において，実用性に欠けるほど符号化や復号に計算時間を要する手法が出力されることも考えられる。これらを考慮するため，本発明ではコスト算出関数内で用いる個別の評価値を以下の４つとして，それぞれの評価値にユーザが設定する係数値を乗算した上で積和計算にてコストを求める。
【００６６】
・画質
・発生符号量
・符号化処理時間
・最適復号処理時間
【発明の効果】
【００６７】
本発明によれば，最適化に適した符号化構造が可変な画像符号化方式，画像復号方式の実現が可能になり，符号化対象画像の特性に特化した“高画質・低ビットレート・処理時間”の最適な画像符号化構造を自動生成することも可能になる。
【図面の簡単な説明】
【００６８】
【図１】構造ツリーの構造の例を表す図である。
【図２】構造ツリーの符号化（符号語）の例を表す図である。
【図３】従来手法による復号済み画素位置の例を表す図である。
【図４】構造ノードの使用による符号化済みの画素位置の変化を表す図である。
【図５】交叉の進化計算機能の例を表す図である。
【図６】変異，削除，挿入の進化計算機能の例を表す図である。
【図７】構造ツリーを用いた画像符号化装置を表す図である。
【図８】構造ツリーを用いた画像符号化装置の処理手順を表すフローチャートである。
【図９】構造ツリーを用いた画像復号装置を表す図である。
【図１０】構造ツリーを用いた画像復号装置の処理手順を表すフローチャートである。
【図１１】ノードによる符号化処理実行のための構成の一例を表す図である。
【図１２】ノードによる符号化処理実行の処理手順を表すフローチャートである。
【図１３】ノードによる復号処理実行のための構成の一例を表す図である。
【図１４】ノードによる復号処理実行の処理手順を表すフローチャートである。
【図１５】入力ブロックを１６×１６ブロックで分割しながら単一の下位ノードを実行する構造ノードの符号化処理手順を表すフローチャートである。
【図１６】入力ブロックを上下２つのブロックに分割してそれぞれ異なる下位ノードを実行する構造ノードの符号化処理手順を表すフローチャートである。
【図１７】下位ノード２つの符号化結果の中からコストの低い方を選び，符号化を実行する構造ノードの符号化手順を表すフローチャートである。
【図１８】下位ノード２つの符号化結果の中からコストの低い方を選び，符号化を実行する構造ノードの符号化手順を表すフローチャートである。
【図１９】下位ノード２つの符号化結果の中からコストの低い方を選び，符号化をされたデータを読み解き，符号化された下位ノードを選んで実行する構造ノードの復号手順を表すフローチャートである。
【図２０】符号化／復号ノードにおける符号化手順の内部の共通処理手順を表すフローチャートである。
【図２１】符号化／復号ノードにおける符号化手順の内部の共通処理手順を表すフローチャートである。
【図２２】符号化／復号ノードにおける復号手順の内部の共通処理手順を表すフローチャートである。
【図２３】フィルタノードにおける符号化手順の内部の共通処理手順を表すフローチャートである。
【図２４】フィルタノードにおける符号化手順の内部の共通処理手順を表すフローチャートである。
【図２５】フィルタノードにおける復号手順の内部の共通処理手順を表すフローチャートである。
【図２６】構造ツリーの自動生成・最適化装置を表す図である。
【図２７】構造ツリーの自動生成・最適化装置の処理手順を表すフローチャートである。
【発明を実施するための形態】
【００６９】
以下，実施の形態に従って本発明を詳細に説明する。
【００７０】
［１］構造ツリーを用いた符号化／復号手法
［１−１］構造ツリーを用いた画像符号化装置
本実施形態による画像符号化構造の自動生成装置にて出力される構造ツリーを用いて符号化を行う画像符号化装置１の一実施形態例を図７に示す。
【００７１】
画像符号化装置１は，構造ツリーの手順通りに符号化を行うために，原画像記憶部１０と，構造ツリー記憶部１１と，コスト算出関数記憶部１２と，ノード転送ＰＩＮ構築部１３と，ヘッダ情報格納部１４と，構造ツリー格納部１５と，ノード実行部１６と，ノード記憶部１７と，出力データ分岐部１８とを備える。
【００７２】
ノード記憶部１７は，複数の構造ノード，符号化／復号ノード，フィルタノードの実体をノード識別子に対応させて保持しており，それぞれの符号化／復号処理の実行機能を保持しているものとする。これらのノードは，例えばそれぞれの機能を実現するソフトウェアモジュール等によって構成されるが，ファームウェアその他による実行機能を含んでいてもよい。
【００７３】
原画像記憶部１０には，ユーザが与える符号化対象画像（以下，原画像）を格納し，構造ツリー記憶部１１には，任意の符号化構造が記述された構造ツリーを格納し，コスト算出関数記憶部１２には，ユーザが与えるコスト算出関数の算出手法を格納する。
【００７４】
ノード転送ＰＩＮ構築部１３では，構造ツリーの最上位ノードの入力ＰＩＮに受け渡すデータの構築を行う。このとき，ＰＩＮのビットストリームとしてブランクの追記型ビットストリームを構築し，ヘッダ情報格納部１４と構造ツリー格納部１５で格納するデータ群は，ＰＩＮのビットストリームに追加格納を行う。なお，構造ツリーの情報は構造ツリー記憶部１１を参照し，ノード識別番号を配列の順に格納する。
【００７５】
ノード実行部１６は，まず構造ツリー記憶部１１を参照して構造ツリーにおける最上位ノードのノード識別番号を取得し，ブロックに分割・走査する機能や処理の分岐・選択を行う機能，符号化／復号処理機能や，復号画像に対してフィルタを施す機能など，搭載される全てのノードを格納しているノード記憶部１７の中から該当するノードの符号化／復号機能を引用する。次に，ノード転送ＰＩＮ構築部１３のデータを，引用したノードの入力ＰＩＮに受け渡し，ノードの符号化処理を実行する。
【００７６】
ノード実行部１６は，下位ノードを実行するため，自身を再帰的に実行するための“下位ノード実行機能”を搭載しており，ノード実行部１６内で最上位ノード以下に接続する全ての下位ノードが再帰的に実行される。そのため，ノード実行部１６のＲｅｔｕｒｎＰＩＮのビットストリームに格納されている情報が符号化後のビットストリームとなる。なお，再帰的なノードの実行手順は［２］にて解説を行う。
【００７７】
出力データ分岐部１８では，最適化装置（詳しくは図２６を用いて後述）内で使用される符号化処理か否かで処理を分岐し，最適化装置内で使用される符号化処理であれば，符号化対象画像を構造ツリーで符号化した際のコスト全体を算出して出力する。それ以外の場合で，ＲｅｔｕｒｎＰＩＮのエラー情報にエラーが検出された場合には，エラー情報を出力して処理を終了し，エラー未検出の場合には，ＲｅｔｕｒｎＰＩＮのビットストリームを出力して処理を終了する。
【００７８】
［１−２］構造ツリーを用いた画像符号化装置の処理の流れ
次に，画像符号化装置１の処理の流れの例を，図８に示す。
【００７９】
まず，ステップＳ１０１にて，ノード転送ＰＩＮの構築を行う。このとき，原画像記憶部１０を参照して，ノード転送ＰＩＮの各データはそれぞれ以下のように設定する。
・復号画像：原画像と同じ画像サイズのブランク画像
・ビットストリーム：ブランク状態の追記型ビットストリーム
・ブロックサイズ：（Ｗｉｄｔｈ，Ｈｅｉｇｈｔ）＝（原画像の横幅，原画像の縦幅）
・基準座標：（ｘ，ｙ）＝（０，０）
・最適復号処理時間：０
・符号化処理時間：０
・ノード番号：０
・エラー情報：エラーなし
続いて，ステップＳ１０２にて，ノード転送ＰＩＮのビットストリームに画像サイズ等のヘッダ情報を格納し，ステップＳ１０３にて，構造ツリー記憶部１１を参照して，ノード転送ＰＩＮのビットストリームに構造ツリーのノード識別番号を配列の順に格納する（図２参照）。
【００８０】
続いて，ステップＳ１０４にて，ノード記憶部１７から識別番号のノードの符号化／復号機能を引用し，その引用したノードの入力ＰＩＮにノード転送ＰＩＮを受け渡して符号化処理を実行し，ＲｅｔｕｒｎＰＩＮをＲｅｓｕｌｔに格納する。引用したノードの内部で再帰的に最上位ノード以下に接続する全ての下位ノードが実行されるため，受け取るＲｅｓｕｌｔに符号化後のビットストリームやエラー情報が格納される。
【００８１】
続いて，ステップＳ１０５にて，最適化装置内の符号化処理か否かを判断し，最適化装置内であれば，ステップＳ１０６にて，コスト算出関数記憶部１２と原画像記憶部１０を参照して符号化対象画像を構造ツリーにて符号化を行った際のコストを算出して出力し，処理を終了する。
【００８２】
それ以外の場合，ステップＳ１０７にて，Ｒｅｓｕｌｔのエラーチェックを行い，エラー検出時にはステップＳ１０８にて，Ｒｅｓｕｌｔのエラー情報を出力して処理を終了する。エラー未検出だった場合にはステップＳ１０９にて，Ｒｅｓｕｌｔのビットストリームを出力し処理を終了する。なお，ステップＳ１０７にて，Ｒｅｓｕｌｔにエラーが検出された場合には，コストを十分に大きな正の値（以下：ＩＮＦ）として出力する。
【００８３】
［１−３］構造ツリーを用いた画像復号装置
本実施形態による画像符号化構造の自動生成装置にて出力される構造ツリーを用いて符号化された画像を復号する画像復号装置２の一実施形態例を図９に示す。
【００８４】
画像復号装置２は，参照型ビットストリームから符号語を順次切り出して，画像復号装置２の内部で符号化に使用された構造ツリーの再構築を行い，構造ツリーを辿りながら画像の復号を行う。これら処理の実現のため，画像復号装置２は，ビットストリーム記憶部２０と，ヘッダ情報復号部２１と，構造ツリー復号部２２と，構造ツリー記憶部２３と，ノード転送ＰＩＮ構築部２４と，ノード実行部２５と，ノード記憶部２６と，出力データ分岐部２７とを備える。
【００８５】
ノード記憶部２６は，複数の構造ノード，符号化／復号ノード，フィルタノードの実体を保持しており，それぞれの復号処理の実行機能を保持しているものとする。ただし，ノード記憶部２６が保持するノード群は，画像符号化装置１のノード記憶部１７と同じノード識別番号が割り振られたものでなければならない。
【００８６】
ビットストリーム記憶部２０には，画像復号のために使用されるビットストリームを全て格納しており，ヘッダ情報復号部２１では，ビットストリーム記憶部２０から符号語を切り出して，画像サイズなどのヘッダ情報を復号する。また，構造ツリー復号部２２では，ビットストリーム記憶部２０から符号語を切り出して，構造ツリーに記述されていたノード識別番号を全て復号する。これらノード識別番号は，構造ツリー記憶部２３に格納して符号化に使用された構造ツリーを再構築する。また，ノード転送ＰＩＮ構築部２４では，構造ツリーの最上位ノードの入力ＰＩＮに受け渡すデータの構築を行う。
【００８７】
ノード実行部２５は，まず構造ツリー記憶部２３を参照して構造ツリーにおける最上位ノードのノード識別番号を取得し，ブロックに分割・走査する機能や処理の分岐・選択を行う機能，符号化／復号処理機能や，復号画像に対してフィルタを施す機能など，搭載される全てのノードを格納しているノード記憶部２６の中から該当するノードの復号機能を引用する。次に，ノード転送ＰＩＮ構築部２４のデータを，引用したノードの入力ＰＩＮに受け渡し，ノードの復号処理を実行する。
【００８８】
ノード実行部２５は，符号化時と同様，下位ノードを実行するため，自身を再帰的に実行する“下位ノード実行機能”を搭載しており，ノード実行部２５内で最上位ノード以下に接続する全ての下位ノードが再帰的に実行されるため，ノード実行部２５のＲｅｔｕｒｎＰＩＮの復号画像が復号後の最終出力画像となる。
【００８９】
出力データ分岐部２７では，ＲｅｔｕｒｎＰＩＮのエラー検知を行い，エラーが検出された場合，ＲｅｔｕｒｎＰＩＮのエラー情報を出力して処理を終了する。エラー未検出の場合には，ＲｅｔｕｒｎＰＩＮの復号画像を出力して処理を終了する。
【００９０】
［１−４］構造ツリーを用いた画像復号装置の処理の流れ
次に，画像復号装置２の処理の流れの例を図１０に示す。
【００９１】
まず，ステップＳ２０１にて，ビットストリーム記憶部２０を参照して画像サイズなどのヘッダ情報を復号し，ステップＳ２０２にて，ビットストリーム記憶部２０を参照して構造ツリーで使用されたノード総数とノード識別番号群を復号し，構造ツリー記憶部２３に格納する。
【００９２】
続いて，ステップＳ２０３にて，ノード転送ＰＩＮの構築を行う。このとき，復号したヘッダ情報などを用いて，ノード転送ＰＩＮの各データはそれぞれ以下のように設定する。
・復号画像：ヘッダ記載の画像サイズのブランク画像
・ビットストリーム：ブランク
・ブロックサイズ：（Ｗｉｄｔｈ，Ｈｅｉｇｈｔ）＝（ヘッダ記載の画像横幅，ヘッダ記載の画像縦幅）
・基準座標：（ｘ，ｙ）＝（０，０）
・最適復号処理時間：０
・符号化処理時間：０
・ノード番号：０
・エラー情報：エラーなし
続いて，ステップＳ２０４にて，ノード記憶部２６から識別番号のノードの復号機能を引用し，ノード転送ＰＩＮを引用したノードの入力ＰＩＮに受け渡して復号処理を実行し，ＲｅｔｕｒｎＰＩＮをＲｅｓｕｌｔに格納する。引用したノードの内部で再帰的に最上位ノード以下に接続する全ての下位ノードが実行されるため，ステップＳ２０４にて，受け取る実行結果に復号後の復号画像やエラー情報が格納される。
【００９３】
最後にステップＳ２０５にて，ＲｅｔｕｒｎＰＩＮのエラーチェックを行い，エラー検出時には，ステップＳ２０６にて，エラー情報を出力して処理を終了する。エラー未検出であった場合，ステップＳ２０７にて，ＲｅｔｕｒｎＰＩＮの復号画像を出力して処理を終了する。
【００９４】
［２］ノードの符号化／復号実行手法
［２−１］ノードにおける符号化処理の実行
画像符号化装置１内で使用されるノード実行部１６にて，ノードにおける符号化処理が実行されるときの詳細な構成の一例を図１１に示す。この処理の流れは，構造ノード・符号化／復号ノード・フィルタノードを通じて同一である。
【００９５】
ノード実行部１６は，上位ノードの出力ＰＩＮを受け取り，ノード識別番号から適用される処理機能を複数のノードの中から照合して機能を引用実行し，上位ノードにＲｅｔｕｒｎＰＩＮを返す処理を実現するために，入力ＰＩＮ初期化部３０と，ノード識別番号参照部３１と，ノード機能引用部３２と，引用機能実行部３３と，ビットストリーム記憶部３４とを備える。なお，原画像記憶部１０と，構造ツリー記憶部１１と，コスト算出関数記憶部１２と，ノード記憶部１７は，図７の画像符号化装置１に示している記憶部と同一である。
【００９６】
入力ＰＩＮ初期化部３０では，上位ノードの出力ＰＩＮを受け取り，ノードの入力ＰＩＮへとデータを全て複写して初期化を行い，ノード識別番号参照部３１では，入力ＰＩＮのノード番号を鍵として構造ツリー記憶部１１を参照し，引用実行するノード識別番号を取得する。
【００９７】
ノード機能引用部３２では，ノード識別番号を鍵としてノード記憶部１７を参照して，該当ノードの処理機能を引用し，引用機能実行部３３に渡す。引用機能実行部３３は，必要に応じて構造ツリー記憶部１１，原画像記憶部１０，コスト算出関数記憶部１２を参照しながら符号化処理を行い，ＲｅｔｕｒｎＰＩＮを出力して処理を終了する。なお，引用機能実行部３３は，下位ノード実行機能を保持しており，下位ノードへ出力ＰＩＮを受け渡し，再帰的に実行する機能を有する。
【００９８】
ビットストリーム記憶部３４は，符号化／復号ノードおよびフィルタノードの符号化処理内における復号処理実行時にのみ使用されるものであり，通常状態では，ビットストリーム格納部３４への符号語の格納・参照は禁止している。使用例は［２−６−１］および［２−７−１］に記す。
【００９９】
［２−２］ノードにおける符号化処理実行の処理の流れ
次に，図１１に示すノード実行部１６の処理の流れの例を図１２に示す。
【０１００】
まず，ステップＳ３０１にて，ノードの入力ＰＩＮを上位ノードの出力ＰＩＮの情報で初期化する。続いて，ステップＳ３０２にて，入力ＰＩＮのノード番号を用いて構造ツリー記憶部１１からノード識別番号を参照する。ノード識別番号はノード記憶部１７に送られ，該当するノードの処理機能をステップＳ３０３の処理機能に設定する。
【０１０１】
続いてステップＳ３０３にて，設定された引用機能の符号化処理を実行する。符号化処理の内容は引用機能に依存するが，必ず出力としてＲｅｔｕｒｎＰＩＮが出力される。引用機能の処理は，内部で“下位ノードの実行”の有無によって大きく分岐される。ステップＳ３０３−１の分岐にて下位ノードの実行命令が検出されなければ，ステップＳ３０３−２にて，ＲｅｔｕｒｎＰＩＮを出力して処理を終了する。下位ノードの実行命令が検出された場合には，ステップＳ３０３−３にて，下位ノードに渡す出力ＰＩＮを構築して自己再帰を行う。
【０１０２】
自己再帰を行うノードは，非終端ノードとなる構成ノードとフィルタノードであり，引用機能内に実装される下位ノードを実行する。下位ノードの実行命令が検出されなくなれば，ステップＳ３０３−２にて，ＲｅｔｕｒｎＰＩＮを出力して処理を終了する。一方，終端ノードとなる符号化／復号ノードでは，下位ノード実行命令が検出されることはないので，コンスタントにステップＳ３０３−２の処理が実行され，ＲｅｔｕｒｎＰＩＮを出力して処理を終了する。具体的な符号化処理の実施例については，以下の場所にて解説する。
【０１０３】
構成ノードの実施例：［２−５−１］，［２−５−３］，［２−５−５］
符号化／復号ノードの実施例：［２−６−１］
フィルタノードの実施例：［２−７−１］
［２−３］ノードにおける復号処理の実行
画像復号装置２内で使用されるノード実行部２５にて，ノードにおける復号処理が実行されるときの詳細な構成の一例を図１３に示す。この処理の流れは，構造ノード・符号化／復号ノード・フィルタノードを通じて同一である。
【０１０４】
ノード実行部２５は，上位ノードの出力ＰＩＮを受け取り，ノード識別番号から適用される処理機能を複数のノードの中から照合して機能を引用実行し，上位ノードにＲｅｔｕｒｎＰＩＮを返す処理を実現するために，入力ＰＩＮ初期化部４０と，ノード識別番号参照部４１と，ノード機能引用部４２と，引用機能実行部４３とを備える。なお，ビットストリーム記憶部２０と，構造ツリー記憶部２３と，ノード記憶部２６は，［１−３］にて用いるものと同一の記憶部を使用する。
【０１０５】
入力ＰＩＮ初期化部４０では，上位ノードの出力ＰＩＮを受け取り，ノードの入力ＰＩＮに対してデータを全て複写して初期化を行い，ノード識別番号参照部４１では，入力ＰＩＮのノード番号を鍵として構造ツリー記憶部１１を参照し，引用実行するノード識別番号を取得する。
【０１０６】
ノード機能引用部４２では，ノード識別番号を鍵としてノード記憶部２６を参照して，該当ノードの処理機能を引用し，引用機能実行部４３に渡す。引用機能実行部４３は，必要に応じてビットストリーム記憶部２０，構造ツリー記憶部２３を参照しながら復号処理を行い，ＲｅｔｕｒｎＰＩＮを出力して処理を終了する。なお，引用機能実行部４３は，下位ノード実行機能を保持しており，下位ノードへ出力ＰＩＮを受け渡し，再帰的に実行する機能を有する。
【０１０７】
［２−４］ノード復号処理実行の処理の流れ
次に，図１３のノード実行部２５の処理の流れの例を，図１４に示す。
【０１０８】
まず，ステップＳ４０１にて，ノードの入力ＰＩＮを上位ノードの出力ＰＩＮの情報で初期化する。続いて，ステップＳ４０２にて，入力ＰＩＮのノード番号を用いて構造ツリー記憶部２３からノード識別番号を参照する。ノード識別番号はノード記憶部２６に送られ，該当するノードの処理機能をステップＳ４０３の処理機能に設定する。
【０１０９】
続いてステップＳ４０３にて，設定された引用機能の復号処理を実行する。復号処理の内容は引用機能に依存するが，必ず出力としてＲｅｔｕｒｎＰＩＮが出力される。引用機能の処理は，内部で“下位ノードの実行”の有無によって大きく分岐される。ステップＳ４０３−１の分岐にて下位ノードの実行命令が検出されなければ，ステップＳ４０３−２にて，ＲｅｔｕｒｎＰＩＮを出力して処理を終了する。下位ノードの実行命令が検出された場合には，ステップＳ４０３−３にて，下位ノードに渡す出力ＰＩＮを構築して自己再帰を行う。
【０１１０】
自己再帰を行うノードは，非終端ノードとなる構成ノードとフィルタノードであり，引用機能内に実装される下位ノードを実行する。下位ノードの実行命令が検出されなくなればステップＳ４０３−２にて，ＲｅｔｕｒｎＰＩＮを出力して処理を終了する。一方，終端ノードとなる符号化／復号ノードでは下位ノード実行命令が検出されることはないので，コンスタントにステップＳ４０３−２の処理が実行され，ＲｅｔｕｒｎＰＩＮを出力して処理を終了する。具体的な復号処理の実施例を，以下の場所にて解説する。
【０１１１】
構成ノードの実施例：［２−５−２］，［２−５−４］，［２−５−６］
符号化／復号ノードノ実施例：［２−６−２］
フィルタノードの実施例：［２−７−２］
［２−５］構造ノードの処理の流れ
［２−５−１］画面の分割・走査機能の構造ノード符号化処理の流れ
入力ＰＩＮのブロック内を１６×１６のブロックサイズに分割し，右方向下向きに走査しながら単一の下位ノードに出力ＰＩＮを受け渡し，順次実行するノードの符号化処理の流れを一例として図１５に示す。
【０１１２】
まず，ステップＳ５０１にて，入力ＰＩＮのブロックサイズを１６×１６のブロックに分割・走査可能か否かのチェックを行い，分割不可能な場合には，ステップＳ５０２にて，入力ＰＩＮのエラー情報に“分割不可能”と格納・出力して処理を終了する。分割可能であった場合にはステップＳ５０３にて，構造ツリー記憶部１１を参照し，入力ＰＩＮ内に格納される自身のノード番号から下位ノードのノード番号を取得し，ＮｏｄｅＮｕｍｂｅｒに格納する。
【０１１３】
続いてステップＳ５０４にて，入力ＰＩＮのブロックサイズ内を全て１６×１６のブロックに分割し，右方向下向きに走査するループを行う。
【０１１４】
続いて，ステップＳ５０５にて，下位ノードに受け渡す出力ＰＩＮを構築する。出力ＰＩＮのブロックサイズは（Ｗｉｄｔｈ，Ｈｅｉｇｈｔ）＝（１６，１６）に，ノード番号をＮｏｄｅＮｕｍｂｅｒに設定する。基準座標は入力ＰＩＮの基準座標を（ＢａｓｅＸ，ＢａｓｅＹ）とすると，ループ回数の増加に伴って（ＢａｓｅＸ，ＢａｓｅＹ），（ＢａｓｅＸ＋１６，ＢａｓｅＹ），（ＢａｓｅＸ＋３２，ＢａｓｅＹ）... のように，右方向下向きに走査するように設定する。なお，それ以外のデータには入力ＰＩＮのデータを複写して用いる。
【０１１５】
続いて，ステップＳ５０６にて，構築した出力ＰＩＮを下位ノードの入力ＰＩＮに受け渡し，下位ノードを実行してＲｅｔｕｒｎＰＩＮを受け取りＲｅｓｕｌｔに格納する。本ステップの処理が［２−１］にて解説した再帰処理にあたる。
【０１１６】
続いて，ステップＳ５０７にて，Ｒｅｓｕｌｔのエラーチェックを行い，エラー検出時には，ステップＳ５０８にて，Ｒｅｓｕｌｔを出力して処理を終了する。エラー未検出の場合には，ステップＳ５０９にて，入力ＰＩＮのブロックサイズ・基準座標・ノード番号以外のデータをＲｅｓｕｌｔのデータで更新する。それ以外のデータは更新しない。
【０１１７】
上記のステップＳ５０５〜Ｓ５０９のループ処理を終了すると，ステップＳ５１０にて更新された入力ＰＩＮを出力して処理を終了する。
【０１１８】
［２−５−２］画面の分割・走査機能の構造ノード復号処理
前述の［２−５−１］の例における復号処理の流れは，図１５と同一の処理を行うが，構造ツリー記憶部は［１−３］にて用いた構造ツリー記憶部２３を用いる。また，ステップＳ５０６の再帰処理は［２−３］の再帰処理にあたる。
【０１１９】
［２−５−３］画面の分割・走査機能の構造ノード符号化処理
上位ノードから渡される入力ＰＩＮのブロックサイズを上下２分割し，上から下へと走査しながら上部と下部で実行する下位ノードを切り替える符号化処理の流れを一例として図１６に示す。
【０１２０】
まず，ステップＳ６０１にて，入力ＰＩＮのブロックサイズを上下２分割可能か否かのチェックを行い，分割不可能な場合には，ステップＳ６０２にて，入力ＰＩＮのエラー情報に“分割不可能”と格納・出力して処理を終了する。一方，分割可能であった場合にはステップＳ６０３にて，入力ＰＩＮのブロックサイズを上下に分割し，上から下へと走査するループを行う。ここで，使用する下位ノードを上下で使い分けるため，それぞれＳｅｒｖｉｅｎｔＩＤ＝０，１と番号を付ける。
【０１２１】
なお，この例の場合，入力ＰＩＮのブロックサイズにおけるＨｅｉｇｈｔが１以下のときにエラーとなる。
【０１２２】
続いて，ステップＳ６０４にて，構造ツリー記憶部１１を参照し，ＳｅｒｖｉｅｎｔＩＤと入力ＰＩＮ内のノード番号に格納される自身のノード番号から下位ノードのノード番号を取得して，ＮｏｄｅＮｕｍｂｅｒに格納する。このとき，ブロック上部の処理の場合（ＳｅｒｖｉｅｎｔＩＤ＝０）には，１つ目の出力ＰＩＮに接続する下位ノードのノード番号を，ブロック下部の処理を行う場合（ＳｅｒｖｉｅｎｔＩＤ＝１）には，２つ目の出力ＰＩＮに接続する下位ノードのノード番号を取得する。
【０１２３】
続いて，ステップＳ６０５にて，下位ノードに受け渡す出力ＰＩＮを構築する。入力ＰＩＮのブロックサイズを（Ｗｉｄｔｈ，Ｈｅｉｇｈｔ）＝（ＩｎＷｉｄｔｈ，ＩｎＨｅｉｇｈｔ）とすると，出力ＰＩＮのブロックサイズは（Ｗｉｄｔｈ，Ｈｅｉｇｈｔ）＝（ＩｎＷｉｄｔｈ，ＩｎＨｅｉｇｈｔ／２）に，基準座標は入力ＰＩＮの基準座標を（ＢａｓｅＸ，ＢａｓｅＹ）とすると，（ＢａｓｅＸ，ＢａｓｅＹ），（ＢａｓｅＸ，ＢａｓｅＹ＋ＩｎＨｅｉｇｈｔ／２）のように設定し，ノード番号をＮｏｄｅＮｕｍｂｅｒに設定する。なお，それ以外のデータは入力ＰＩＮのデータを複写して用いる。
【０１２４】
続いて，ステップＳ６０６にて，構築した出力ＰＩＮを下位ノードの入力ＰＩＮに受け渡し，下位ノードを実行してＲｅｔｕｒｎＰＩＮを受け取りＲｅｓｕｌｔに格納する。本ステップの処理が［２−１］にて解説した再帰処理にあたる。
【０１２５】
続いて，ステップＳ６０７にて，Ｒｅｓｕｌｔのエラーチェックを行い，エラー検出時には，ステップＳ６０８にて，ＲｅｓｕｌｔをＲｅｔｕｒｎＰＩＮとして出力して処理を終了する。エラー未検出の場合には，ステップＳ６０９にて，入力ＰＩＮのブロックサイズ・基準座標・ノード番号以外のデータをＲｅｓｕｌｔのデータで更新する。それ以外のデータは更新しない。
【０１２６】
上記のステップＳ６０５〜ステップＳ６０９のループ処理を終了すると，ステップＳ６１０にて，更新された入力ＰＩＮを出力して処理を終了する。
【０１２７】
［２−５−４］画面の分割・走査機能の構造ノード復号処理
前述の［２−５−３］の例における復号処理の流れは，図１６と同一の処理を行うが，構造ツリー記憶部は［１−３］にて用いた構造ツリー記憶部２３を用いる。また，再帰処理は［２−３］の再帰処理にあたる。
【０１２８】
［２−５−５］処理の分岐・選択機能の構造ノード符号化処理
２つの出力ＰＩＮを有し，２つの手法の中からビットストリームに符号語を追加格納することで明示的にコストの低い方を選んで符号化を行う分岐・選択を行う機能のノードの符号化処理の流れの一例を，図１７および図１８に示す。
【０１２９】
まず，ステップＳ７０１にて，最小コスト値ＭｉｎＣｏｓｔをＩＮＦで，下位ノード実行前の復号処理時間ＰｒｅＤｅｃＴｉｍｅを入力ＰＩＮの最適復号処理時間で，符号化処理時間格納用データとしてＥｎｃＴｉｍｅＢｕｆｆｅｒを入力ＰＩＮの符号化処理時間で，自身のノード番号を表すＳｅｌｆＮｏｄｅＮｕｍｂｅｒを入力ＰＩＮのノード番号で，下位ノード実行前のビットストリームＰｒｅＢｉｔＳｔｒｅａｍを入力ＰＩＮのビットストリームで，下位ノード実行前の復号画像ＰｒｅＤｅｃＩｍａｇｅを入力ＰＩＮの復号画像で，それぞれ初期化を行う。
【０１３０】
続いて，ステップＳ７０２にて，全ての分岐パターンの数だけ実行するループを行う。本例では，２つの下位ノードの分岐・選択のため，それぞれＳｅｒｖｉｅｎｔＩＤ＝０，１と番号を付ける。
【０１３１】
続いて，ステップＳ７０３にて，構造ツリー記憶部１１を参照し，ＳｅｒｖｉｅｎｔＩＤとＳｅｌｆＮｏｄｅＮｕｍｂｅｒから下位ノードのノード番号を取得してＮｏｄｅＮｕｍｂｅｒに格納する。このとき１パターン目（ＳｅｒｖｉｅｎｔＩＤ＝０）は１つ目の出力ＰＩＮに接続する下位ノードのノード番号を，２パターン目（ＳｅｒｖｉｅｎｔＩＤ＝１）は２つ目の出力ＰＩＮに接続する下位ノードのノード番号をそれぞれ取得する。
【０１３２】
続いて，ステップＳ７０４にて，下位ノードに受け渡す出力ＰＩＮを構築する。出力ＰＩＮのノード番号にはＮｏｄｅＮｕｍｂｅｒを，最適復号処理時間にはＰｒｅＤｅｃＴｉｍｅを，符号化処理時間にはＥｎｃＴｉｍｅＢｕｆｆｅｒを設定し，復号画像にはＰｒｅＤｅｃＩｍａｇｅを，ビットストリームにはＰｒｅＢｉｔＳｔｒｅａｍをそれぞれ複写して設定する。なお，上記以外のデータは入力ＰＩＮのデータを複写して用いる。
【０１３３】
続いて，ステップＳ７０５にて，ＳｅｒｖｉｅｎｔＩＤを符号語に変換して出力ＰＩＮのビットストリームに格納する。
【０１３４】
続いて，ステップＳ７０６にて，ＳｅｒｖｉｅｎｔＩＤの下位ノードの入力ＰＩＮに構築した出力ＰＩＮを受け渡し，下位ノードを実行してＲｅｔｕｒｎＰＩＮをＲｅｓｕｌｔに格納する。本ステップの処理が［２−１］にて解説した再帰処理にあたる。
【０１３５】
続いて，ステップＳ７０７にて，下位ノードの符号化処理に要した積算時間ＥｎｃＴｉｍｅと，下位ノードで適用された最適復号処理実行時の復号処理時間ＤｅｃＴｉｍｅを算出する。
【０１３６】
ＥｎｃＴｉｍｅ＝Ｒｅｓｕｌｔの符号化処理時間−ＥｎｃＴｉｍｅＢｕｆｆｅｒ
…（式２）
ＤｅｃＴｉｍｅ＝Ｒｅｓｕｌｔの最適復号処理時間−ＰｒｅＤｅｃＴｉｍｅ
…（式３）
なお，上記処理時間の算出を終了すると，ステップＳ７０８にて，ＥｎｃＴｉｍｅＢｕｆｆｅｒをＲｅｓｕｌｔの符号化処理時間で更新する。
【０１３７】
続いて，ステップＳ７０９にて，Ｒｅｓｕｌｔのエラーチェックを行い，エラー検出時には，以下ステップＳ７１２までの処理をスキップする。未検出の場合には，ステップＳ７１０にて，コスト算出関数記憶部１２と原画像記憶部１０を参照し，下位ノードによって符号化を行った際のコストを算出し，Ｃｏｓｔに格納する。
【０１３８】
続いて，ステップＳ７１１にて，コストとＭｉｎＣｏｓｔの比較を行い，コストがＭｉｎＣｏｓｔ未満の場合にはステップＳ７１２にて，入力ＰＩＮのノード番号以外の全てのデータをＲｅｓｕｌｔで更新する。
【０１３９】
全てのループを終了すると，ステップＳ７１３にて，ＭｉｎＣｏｓｔがＩＮＦ未満か否かの判定を行い，ＩＮＦ以上であればステップＳ７１４にて，入力ＰＩＮのエラー情報に“下位全ての手法がエラーのため符号化不可能”と格納・出力して処理を終了する。ＩＮＦ未満の場合にはステップＳ７１５にて，入力ＰＩＮの符号化処理時間をＥｎｃＴｉｍｅＢｕｆｆｅｒで更新し，ステップＳ７１６にて，入力ＰＩＮを実行結果として出力して処理を終了する。
【０１４０】
［２−５−６］処理の分岐・選択機能の構造ノード復号処理
前述の［２−５−５］の例における復号処理の流れを図１９に示す。
【０１４１】
まず，ステップＳ８０１にて，下位ノードに受け渡す出力ＰＩＮの情報を入力ＰＩＮ情報で初期化し，次に，ステップＳ８０２にて，ビットストリーム記憶部２０から符号語を切り出し，何番目の下位ノードで符号化が行われたかを示すＳｅｒｖｉｅｎｔＩＤを復号する。
【０１４２】
続いて，ステップＳ８０３にて，ＳｅｒｖｉｅｎｔＩＤと入力ＰＩＮ内のノード番号に格納される自身のノード番号を鍵として構造ツリー記憶部２３を参照し，符号化が行われた下位ノードのノード番号を取得し，出力ＰＩＮのノード番号に格納する。本ステップの処理が［２−３］にて解説した再帰処理にあたる。
【０１４３】
続いて，ステップＳ８０４にて，下位ノードを実行してＲｅｔｕｒｎＰＩＮをＲｅｓｕｌｔに格納し，ステップＳ８０５にて，Ｒｅｓｕｌｔを出力して処理を終了する。
【０１４４】
［２−６］符号化／復号ノードの特徴
［２−６−１］符号化／復号ノードの符号化処理の流れ
本実施形態は，構造ツリーの評価に復号処理に要する時間もコスト計算対象として含むため，符号化装置内では符号化処理を終えた後にブロック内画素値の完全な復号処理を行う。このように符号化／復号ノードには必須処理が含まれるため，これら符号化処理における必須処理の流れを，図２０および図２１に示す。
【０１４５】
まず，ステップＳ９０１にて，入力ＰＩＮのデータが，引用された符号化／復号ノードにて符号化できるか否かの簡易チェックを行う。ここでは，実際に符号化を行ってエラーを確認するのではなく，ブロックサイズや復号画像における既知の隣接画素位置などを参照し，符号化前にエラーの可能性を調べる。ここで符号化不可能な場合には，ステップＳ９０２にて，“符号化不可能”というエラー情報を入力ＰＩＮに格納・出力して処理を終了する。一方，符号化可能と判断された場合，ステップＳ９０３にて，入力ＰＩＮのビットストリームにおける符号量をＬｏｃａｔｉｏｎに格納し，ステップＳ９０４にて，ＰｒｅＥｎｃＴｉｍｅに現在時間を取得する。
【０１４６】
続いて，ステップＳ９０５にて，入力ＰＩＮを引用した符号化／復号ノードの符号化機能に転送して実行し，ＲｅｔｕｒｎＰＩＮをＥｎｃＲｅｓｕｌｔに格納する。このステップ内の処理では，符号化／復号ノード固有の処理が行われる。なお，ＥｎｃＲｅｓｕｌｔには，入力ＰＩＮのデータが全て複写されており，復号画像には対象ブロックの復号画素値が，ビットストリームには符号化／復号ノードの符号化機能内にて出力された符号語が追加格納される。また，処理中にエラーが発生した場合には，ＥｎｃＲｅｓｕｌｔのエラー情報にそのデータが格納され，入力ＰＩＮ自体のデータには変更は一切ないものとする。
【０１４７】
続いて，ステップＳ９０６にて，符号化に要した処理時間を現在時間からＰｒｅＥｎｃＴｉｍｅを減算して求め，ＥｎｃＲｅｓｕｌｔの符号化処理時間に加算格納する。
【０１４８】
続いて，ステップＳ９０７にて，ＥｎｃＲｅｓｕｌｔのエラーチェックを行い，エラー検出時にはステップＳ９０８にて，ＥｎｃＲｅｓｕｌｔを出力して処理を終了する。エラー未検出の場合には，ステップＳ９０９にて，原画像記憶部１０，コスト算出関数記憶部１２の参照を禁止し，ビットストリーム記憶部３４の格納・参照を許可し，記憶部内のデータを消去した後，ビットストリーム記憶部３４にＥｎｃＲｅｓｕｌｔのビットストリームを格納してデータ参照開始位置をＬｏｃａｔｉｏｎに設定する。続いて，ステップＳ９１０にて，ＰｒｅＤｅｃＴｉｍｅに現在時間を格納する。
【０１４９】
続いて，ステップＳ９１１にて，入力ＰＩＮを引用した符号化／復号ノードの復号機能に転送して実行し，ＲｅｔｕｒｎＰＩＮをＤｅｃＲｅｓｕｌｔに格納する。このステップ内の処理では，符号化／復号ノード固有の処理が行われ，復号機能内のビットストリーム参照は，入力ＰＩＮのデータではなく，ビットストリーム記憶部３４のデータを参照する。なお，ＤｅｃＲｅｓｕｌｔには入力ＰＩＮのデータが全て複写されており，復号画像には対象ブロックの復号画素値が追加格納される。処理中にエラーが発生した場合には，ＤｅｃＲｅｓｕｌｔのエラー情報にそのデータが格納され，入力ＰＩＮ自体のデータには変更は一切ないものとする。
【０１５０】
続いて，ステップＳ９１２にて，復号に要した処理時間を現在時間からＰｒｅＤｅｃＴｉｍｅを減算して求め，ＥｎｃＲｅｓｕｌｔの最適復号処理時間に加算格納する。また，ステップＳ９１３にて，原画像記憶部１０，コスト算出関数記憶部１２への参照を許可し，ビットストリーム記憶部３４のデータを消去して格納・参照を禁止する。
【０１５１】
続いて，ステップＳ９１４にて，ＤｅｃＲｅｓｕｌｔのエラーチェックを行い，エラー発生時にはステップＳ９１５にて，ＤｅｃＲｅｓｕｌｔを出力して処理を終了する。エラー未検出の場合には，ステップＳ９１６にて，ＥｎｃＲｅｓｕｌｔとＤｅｃＲｅｓｕｌｔの復号画像の完全一致の判定を行い，完全一致しなければステップＳ９１７にて，入力ＰＩＮに“復号画像が一致しない”というエラー情報を格納・出力して処理を終了する。完全一致が確認できれば，ステップＳ９１８にて，ＥｎｃＲｅｓｕｌｔを出力して処理を終了する。
【０１５２】
［２−６−２］符号化／復号ノードの復号処理の流れ
［２−６−１］に記載の符号化／復号ノードの復号処理における必須処理の流れを図２２に示す。
【０１５３】
まず，ステップＳ１００１にて，入力ＰＩＮのデータが，引用された符号化／復号ノードにて復号できるか否かの簡易チェックを行う。ここでは，実際に復号を行ってエラーを確認するのではなく，ブロックサイズや既知の隣接画素位置などを参照し，復号前にエラーの可能性を調べる。ここで復号不可能な場合にはステップＳ１００２にて，“復号不可能”というエラー情報を入力ＰＩＮに格納・出力して処理を終了する。復号可能と判断された場合，ステップＳ１００３にて，ＰｒｅＤｅｃＴｉｍｅに現在時間を格納する。
【０１５４】
続いて，ステップＳ１００４にて，入力ＰＩＮを引用される符号化／復号ノードの復号機能に転送して実行し，ＲｅｔｕｒｎＰＩＮをＤｅｃＲｅｓｕｌｔに格納する。このステップ内の処理では符号化／復号ノード固有の処理が行われ，復号機能内のビットストリーム参照は，入力ＰＩＮのデータではなく，ビットストリーム記憶部２０のデータを参照する。なお，ＤｅｃＲｅｓｕｌｔには入力ＰＩＮのデータが全て複写されており，復号画像には対象ブロックの復号画素値が追加格納される。処理中にエラーが発生した場合には，ＤｅｃＲｅｓｕｌｔのエラー情報にそのデータが格納され，入力ＰＩＮ自体のデータには変更は一切ないものとする。
【０１５５】
続いて，ステップＳ１００５にて，復号に要した処理時間を現在時間からＰｒｅＤｅｃＴｉｍｅを減算して求め，ＤｅｃＲｅｓｕｌｔの最適復号処理時間に加算して格納し，ステップＳ１００６にて，ＤｅｃＲｅｓｕｌｔを出力して処理を終了する。
【０１５６】
［２−７］フィルタノードの特徴
［２−７−１］フィルタノードの符号化処理の流れ
フィルタノードの処理手順も符号化／復号ノードの処理と同様に，符号化装置内で符号化処理を終えた後にブロック内画素値の完全な復号処理を行う。このようにフィルタノードにも必須処理が含まれるため，これら符号化処理における必須処理の流れを，図２３および図２４に示す。
【０１５７】
まず，ステップＳ１１０１にて，構造ツリー記憶部１１を参照し，入力ＰＩＮ内のノード番号に格納される自身のノード番号から下位ノードのノード番号を取得してＮｏｄｅＮｕｍｂｅｒに格納し，ステップＳ１１０２にて，下位ノードに受け渡す出力ＰＩＮを構築する。出力ＰＩＮには入力ＰＩＮのデータをそのまま複写し，出力ＰＩＮのノード番号のみＮｏｄｅＮｕｍｂｅｒに変更する。
【０１５８】
続いて，ステップＳ１１０３にて，出力ＰＩＮを下位ノードの入力ＰＩＮに受け渡し，下位ノードを実行してＲｅｔｕｒｎＰＩＮを受け取りＲｅｓｕｌｔに格納する。本ステップの処理が［２−１］にて解説した再帰処理にあたる。なお，Ｒｅｓｕｌｔには入力ＰＩＮのデータが全て複写されており，ステップＳ１１０３の処理にて，該当フィルタノード以下に接続する下位ノードが全て実行され，終端ノードの符号化／復号ノードにて復号画像が生成されるため，Ｒｅｓｕｌｔの復号画像には入力ＰＩＮの対象ブロック内の画素値が全て復号されていることが保障される。また，処理中にエラーが発生した場合には，Ｒｅｓｕｌｔのエラー情報にそのデータが格納され，入力ＰＩＮ自体のデータには変更は一切ないものとする。
【０１５９】
続いて，ステップＳ１１０４にて，エラーチェックを行い，Ｒｅｓｕｌｔにエラーが検出された場合，ステップＳ１１０５にて，Ｒｅｓｕｌｔを出力して処理を終了する。エラー未検出の場合には，ステップＳ１１０６にて，Ｒｅｓｕｌｔのビットストリームにおける符号量をＬｏｃａｔｉｏｎに格納し，ステップＳ１１０７にて，ＰｒｅＥｎｃＴｉｍｅに現在時間を格納する。
【０１６０】
続いて，ステップＳ１１０８にて，Ｒｅｓｕｌｔをフィルタノードの符号化機能に転送して実行し，ＲｅｔｕｒｎＰＩＮをＥｎｃＲｅｓｕｌｔに格納する。このステップ内の処理ではフィルタノード固有の処理が行われる。なお，ＥｎｃＲｅｓｕｌｔにはＲｅｓｕｌｔのデータが全て複写されており，復号画像にはフィルタ適用後の復号画素値が，ビットストリームにはフィルタノードの符号化機能内にて出力された符号語が追加格納される。処理中にエラーが発生した場合には，ＥｎｃＲｅｓｕｌｔのエラー情報にそのデータが格納され，Ｒｅｓｕｌｔ自体のデータには変更は一切ないものとする。
【０１６１】
続いて，ステップＳ１１０９にて，符号化に要した処理時間を現在時間からＰｒｅＥｎｃＴｉｍｅを減算して求め，ＥｎｃＲｅｓｕｌｔの符号化処理時間に加算格納する。
【０１６２】
続いて，ステップＳ１１１０にて，ＥｎｃＲｅｓｕｌｔのエラーチェックを行い，エラー検出時にはステップＳ１１１１にて，ＥｎｃＲｅｓｕｌｔを出力して処理を終了する。エラー未検出の場合には，ステップＳ１１１２にて，原画像記憶部１０，コスト算出関数記憶部１２の参照を禁止し，ビットストリーム記憶部３４の格納・参照を許可して記憶部内のデータを消去した後，ビットストリーム記憶部３４にＥｎｃＲｅｓｕｌｔのビットストリームを格納してデータ参照開始位置をＬｏｃａｔｉｏｎに設定する。続いてステップＳ１１１３にて，ＰｒｅＤｅｃＴｉｍｅに現在時間を格納する。
【０１６３】
続いて，ステップＳ１１１４にて，Ｒｅｓｕｌｔを引用したフィルタノードの復号機能に転送して実行し，ＲｅｔｕｒｎＰＩＮをＤｅｃＲｅｓｕｌｔに格納する。このステップ内の処理ではフィルタノード固有の処理が行われ，復号機能内のビットストリーム参照は，Ｒｅｓｕｌｔのデータではなく，ビットストリーム記憶部３４のデータを参照する。なお，ＤｅｃＲｅｓｕｌｔにはＲｅｓｕｌｔのデータが全て複写されており，復号画像には対象ブロックの復号画素値が追加格納される。処理中にエラーが発生した場合には，ＤｅｃＲｅｓｕｌｔのエラー情報にそのデータが格納され，Ｒｅｓｕｌｔ自体のデータには変更は一切ないものとする。
【０１６４】
続いて，ステップＳ１１１５にて，復号に要した処理時間を現在時間からＰｒｅＤｅｃＴｉｍｅを減算して求め，ＥｎｃＲｅｓｕｌｔの最適復号処理時間に加算格納する。また，ステップＳ１１１６にて，原画像記憶部１０，コスト算出関数記憶部１２への参照を許可し，ビットストリーム記憶部３４のデータを消去して格納・参照を禁止する。
【０１６５】
続いてステップＳ１１１７にて，ＤｅｃＲｅｓｕｌｔのエラーチェックを行い，エラー発生時にはステップＳ１１１８にて，ＤｅｃＲｅｓｕｌｔを出力して処理を終了する。エラー未検出の場合には，ステップＳ１１１９にて，ＥｎｃＲｅｓｕｌｔとＤｅｃＲｅｓｕｌｔの復号画像の完全一致の判定を行い，完全一致しなければステップＳ１１２０にて，入力ＰＩＮに“復号画像が一致しない”というエラー情報を格納・出力して処理を終了する。完全一致が確認できれば，ステップＳ１１２１にて，ＥｎｃＲｅｓｕｌｔを出力して処理を終了する。
【０１６６】
［２−７−２］フィルタノードの復号処理
［２−７−１］に記載の符号化／復号ノードの復号処理における必須処理の流れを図２５に示す。
【０１６７】
まず，ステップＳ１２０１にて，構造ツリー記憶部２３を参照し，入力ＰＩＮ内のノード番号に格納される自身のノード番号から下位ノードのノード番号を取得してＮｏｄｅＮｕｍｂｅｒに格納し，ステップＳ１２０２にて，下位ノードに受け渡す出力ＰＩＮを構築する。出力ＰＩＮには入力ＰＩＮのデータをそのまま複写し，出力ＰＩＮのノード番号のみＮｏｄｅＮｕｍｂｅｒに変更する。
【０１６８】
続いて，ステップＳ１２０３にて，出力ＰＩＮを下位ノードの入力ＰＩＮに受け渡し，下位ノードを実行してＲｅｔｕｒｎＰＩＮを受け取りＲｅｓｕｌｔに格納する。本ステップの処理が［２−３］にて解説した再帰処理にあたる。
【０１６９】
続いて，ステップＳ１２０４にて，エラーチェックを行い，Ｒｅｓｕｌｔにエラーが検出された場合，ステップＳ１２０５にて，Ｒｅｓｕｌｔを出力して処理を終了する。エラー未検出の場合には，ステップＳ１２０６にて，現在時間をＰｒｅＤｅｃＴｉｍｅに格納し，ステップＳ１２０７にて，フィルタノードの復号機能にＲｅｓｕｌｔを転送し，ＲｅｔｕｒｎＰＩＮをＤｅｃＲｅｓｕｌｔに格納する。
【０１７０】
続いて，ステップＳ１２０８にて，復号に要した処理時間を現在時間からＰｒｅＤｅｃＴｉｍｅを減算して求め，ＥｎｃＲｅｓｕｌｔの最適復号処理時間に加算格納し，ステップＳ１２０９にて，ＤｅｃＲｅｓｕｌｔを出力して処理を終了する。
【０１７１】
以上説明した本実施形態におけるＰＩＮの役割について，補足説明する。
【０１７２】
本実施形態では，図７の構造ツリーを用いた画像符号化装置１および図９の構造ツリーを用いた画像復号装置２内で使用される各種ノードの入出力データをＰＩＮに記載し，ノード間でＰＩＮを交換することで，全てのノードに対する統一的な処理を実現する。
【０１７３】
・符号化装置の具体的なＰＩＮの交換手順
画像符号化装置１のノード転送ＰＩＮ構築部１３（図７）にて，符号化対象画像全体をブロックに見立てたＰＩＮを生成し（図８：Ｓ１０１），ノード実行部１６にてＰＩＮを最上位ノードに受け渡して符号化処理を実行し，最上位ノードの実行結果が格納されたＲｅｔｕｒｎＰＩＮを受け取る（図８：Ｓ１０４）。
【０１７４】
ノード実行部１６では，図１１に示すような符号化処理の実行の仕組みによって，ノード機能の引用により符号化処理が実行される。入力ＰＩＮ初期化部３０（図１１にて上位ノードから受け取るＰＩＮのデータで入力ＰＩＮの初期化を行い（図１２：Ｓ３０１），引用機能実行部３３にて該当ノードの符号化処理が実行される（図１２：Ｓ３０３）。引用ノードが下位ノードを実行する場合には，下位ノードに受け渡すＰＩＮを構築して下位ノードを実行する（図１２：Ｓ３０３−３）。引用ノードの符号化処理が終了すると上位ノードにＲｅｔｕｒｎＰＩＮを出力する（図１２：Ｓ３０３−２）。
【０１７５】
なお，引用ノード内でのＰＩＮの各種扱いについては，引用されるノード依存で大きく異なる（図１５〜図２４参照）。
【０１７６】
・復号装置の具体的なＰＩＮの交換手順
画像復号装置２のノード転送ＰＩＮ構築部２４（図９）にて，復号画像全体をブロックに見立てたＰＩＮを生成し（図１０：Ｓ２０１），ノード実行部２５にてＰＩＮを最上位ノードに受け渡して復号処理を実行し，最上位ノードの実行結果が格納されたＲｅｔｕｒｎＰＩＮを受け取る（図１０：Ｓ２０４）。
【０１７７】
ノード実行部２５では，図１３に示すような復号処理の実行の仕組みによって，ノード機能の引用により復号処理が実行される。まず，入力ＰＩＮ初期化部４０にて上位ノードから受け取るＰＩＮのデータで入力ＰＩＮの初期化を行い（図１４：Ｓ４０１），引用機能実行部４３にて該当ノードの復号処理が実行される（図１４：Ｓ４０３）。引用ノードが下位ノードを実行する場合には，下位ノードに受け渡すＰＩＮを構築して下位ノードを実行する（図１４：Ｓ４０３−３）。引用ノードの復号処理が終了すると上位ノードにＲｅｔｕｒｎＰＩＮを出力する（図１４：Ｓ４０３−２）。
【０１７８】
［３］画像符号化構造の自動生成・最適化手法
［３−１］画像符号化構造の自動生成・最適化装置
本実施形態に係る構造ツリーの自動生成・最適化装置５の一実施形態例を図２６に示す。
【０１７９】
構造ツリーの自動生成・最適化装置５は，ＧＰを用いて，画像符号化構造の構造ツリーを自動生成することを実現するものであり，この自動生成を実現するために，自動生成装置全体を通じて共通して参照可能なノード記憶部５０と，最初の母集団となる構造ツリーを生成する母集団生成部５１と，コスト未計算の構造ノードを選び出すコスト未計算構造ツリー分配部５２と，それらの構造ツリーを格納する母集団記憶部５３と，前述の符号化装置を実行して構造ツリーのコストを算出するコスト算出部５４と，所定の進化手法により新たな構造ツリーを生成する新規構造ツリー生成部５５と，母集団記憶部５３との重複を確認する重複確認部５６と，母集団記憶部５３から構造ツリーを削除する構造ツリー削除部５７と，最適化装置の終了を検出する終了判定部５８と，最もコストが低い最良の構造ツリーを出力する構造ツリー決定部５９とを備える。
【０１８０】
ノード記憶部５０には，進化計算を行う対象となる全てのノードの符号化／復号機能を保持しており，装置全体を通じて新規ノードの生成や符号化／復号などを行う際にこれらの機能を参照・引用する。また，ノード記憶部５０は，ユーザの手によりノードの追加格納ができる。
【０１８１】
母集団生成部５１は，ノード記憶部５０のノードを参照してランダムにコスト未算出の構造ツリーを生成する。なお，この母集団生成部５１には，画面全体に対して従来の符号化手法をそのまま用いる手法や，ユーザが任意に設計する構造ツリー，コスト評価済みの構造ツリーなどを含む。
【０１８２】
コスト未計算構造ツリー分配部５２は，母集団生成部５１にて生成された構造ツリーが既にコスト計算されているか否かによって処理を分離する。コスト計算が済んでいる構造ツリーであった場合には，母集団記憶部５３に格納し，未評価の構造ツリーはコスト算出部５４に送られる。コスト算出部５４は符号化実行機能を保持しており，［１−１］の画像符号化装置１による処理を実行して構造ツリーのコストを計算する。コストを算出した構造ツリーは母集団記憶部５３に全て格納する。コスト算出部５４にて画像符号化装置１を起動して符号化を行う際，画像符号化装置１に与える符号化対象画像，コスト算出関数には，自動生成・最適化装置５に与えられるものと同一のものを与え，構造ツリーは上記未評価の構造ツリーを与える。
【０１８３】
新規構造ツリー生成部５５は，交叉・変異・削除・挿入の各機能を保持しており，母集団記憶部５３から構造ツリーを選択し，その構造ツリーに対して所定の進化計算を実行して新規構造ツリーを生成する。選択した構造ツリーが２つであった場合には交叉機能に，１つであった場合には変異・削除・挿入機能のいずれかをランダムに実行する。また，作成した構造ツリーは重複確認部５６に送られ，母集団記憶部５３内に既に同じ手法が存在しないかの確認を行い，重複が存在した場合には，新規構造ツリー生成部５５に母集団記憶部５３からの再選択命令を出す。重複が存在しなければコスト未計算の構造ツリーはコスト算出部５４に送られ，画像符号化装置１による処理を実行して構造ツリーのコストを計算の上，評価済みの構造ツリーとして母集団記憶部５３に格納される。
【０１８４】
構造ツリー削除部５７では，母集団記憶部５３内の構造ツリー数が設定する数より大きくなった場合にコストが高い（適応度が低い）構造ツリーの削除を行う。
【０１８５】
終了判定部５８では，ユーザによる進化計算の終了命令もしくは母集団記憶部５３内のコスト最小となる構造ツリーが所定の進化回数連続して変化しなければ構造ツリー決定部５９に終了命令を出す。構造ツリー決定部５９は母集団記憶部５３の中でコスト最小の構造ツリーを選び出し，最良の構造ツリーとして出力する。
【０１８６】
［３−２］画像符号化構造の自動生成・最適化装置の処理の流れ
次に，構造ツリーの自動生成・最適化装置５の処理の流れの例を図２７に示す。
【０１８７】
まず，ステップＳ１３０１にて，ノード記憶部５０からランダムにノードを選択して繋ぎ合わせ，母集団を生成する。このとき，構造ノードやフィルタノードを使用せずに画像全体に単体の符号化／復号ノードを適用する形で，ＪＰＥＧやＪＰＥＧ  ２０００，ＧＩＦ，ＰＮＧなどの従来手法や，ユーザが任意に設計した構造ツリーも母集団として含める。
【０１８８】
続いて，ステップＳ１３０２にて，作成した全ての構造ツリーに対するループ処理を行い，それぞれの構造ツリーに対してステップＳ１３０３にて，コスト評価済みか否かのチェックを行う。コスト算出済みの構造ツリーに対しては，ステップＳ１３０４の処理をスキップする。コストが未算出の場合にはステップＳ１３０４にて，画像符号化装置１による処理を実行してコストを算出し，ステップＳ１３０５にて，母集団記億部５３にコスト算出済みの構造ツリーを格納する。
【０１８９】
全ての初期母集団のコスト算出が終了すると，ステップＳ１３０６にて，母集団の中から１つもしくは２つの構造ツリーを選択し，それらを対象に進化計算を行い，新規構造ツリーを生成する。このとき，母集団記憶部５３内の構造ツリー全てをコスト順にソートし，コストが低い構造ツリーが優先的に選択されるように若干重み付けした上でルーレット選択などによって選択を行う。生成した新規構造ツリーはステップＳ１３０７にて，母集団記憶部５３内の全ての構造ツリーと重複確認が行われ，重複が存在する場合には再度ステップＳ１３０６が実行される。重複が確認されなければステップＳ１３０８にて，新規構造ツリーのコスト計算が行われ，ステップＳ１３０９にて，母集団記憶部５３に格納される。
【０１９０】
続いて，ステップＳ１３１０にて，母集団記憶部の格納総数を計測し，所定の数以上か否かのチェックを行い，所定の数以下であればステップＳ１３１１をスキップする。所定の数以上であれば，母集団記憶部５３内の構造ツリーの総数が所定の数未満になるように構造ツリーの削除を行う。このとき，母集団記憶部５３内の構造ツリー全てをコスト順にソートし，コストが高い構造ツリーもしくはエラーが出力された構造ツリーを優先的に選択されるように若干重み付けした上でルーレット選択などによって選択を行う。なお，ステップＳ１３１１の処理は，コストが低い上位いくつかのノードは削除しないなどの例外を加味した上で行う。
【０１９１】
続いて，ステップＳ１３１２にて，終了判定を行い，ユーザからの終了命令の有無，もしくは所定の回数進化計算を行ってもコスト最小の構造ツリーが変化していなければ，ステップＳ１３１３にて，コスト最小の構造ツリーを出力して処理を終了する。上記条件を満たしていなければ，再度ステップＳ１３０６以降の処理を再実行する。
【０１９２】
［４］コスト算出手法
前述のように，本実施形態では従来手法と同様に画質と発生符号量，そして符号化／復号に要する処理時間を考慮する。そのための一計算例を以下に記す。
【０１９３】
コスト算出関数内で用いる個別の評価値を以下の４つとして，それぞれの評価値にユーザが設定する係数値を乗算した上で積和計算にてコストを求める。
【０１９４】
・画質
・発生符号量
・符号化処理時間
・最適復号処理時間
［４−１］画質
画質評価には従来手法と同様のＳＳＤやＳＡＤを用いる。なお，ＳＳＤとＳＡＤのどちらを評価値として使用するかはユーザが選択して用いるものとする。
【０１９５】
最適化時における構造ツリーのコスト計算（図７の出力データ分岐部１８および図８のステップＳ１０６）では，復号画像の画素値は全て復号済みであることが保障されるため，原画像と復号画像全体を比較してＳＳＤやＳＡＤを求める。
【０１９６】
一方，処理の分岐・選択時における計算（図１８のステップＳ７１０）では，下位に接続するフィルタノードによって隣接ブロックの復号画素値が更新される可能性があるため，隣接ブロックの復号画素値も考慮した評価が望ましい。そのため，隣接何画素までＳＳＤやＳＡＤ計算を行うかを決定するＲｅｆＲａｎｇｅを設定する。ＲｅｆＲａｎｇｅ＝０のときは，従来同様に対象ブロック内のみとなり，ＲｅｆＲａｎｇｅ＝２のときは，対象ブロックの周囲２画素まで考慮してＳＳＤやＳＡＤ計算を行う。ＲｅｆＲａｎｇｅは，ユーザが設定するものとする。
【０１９７】
また，ＳＳＤやＳＡＤ計算は，復号画像における復号画素値に対してしか計算せず，ＲｅｆＲａｎｇｅ内であっても復号前の未知の画素値に対しては計算対象から除外する。そのため，対象ブロックの画素数をＮｕｍＢｌｏｃｋＰｅｌｓ，計算対象とした合計画素数をＮｕｍＡｃｃｏｕｎｔとおき，下式にてＳＳＤコストＣSSD ，ＳＡＤコストＣSAD を計算する。
【０１９８】
ＣSSD ＝ＳＳＤ×ＮｕｍＢｌｏｃｋＰｅｌｓ／ＮｕｍＡｃｃｏｕｎｔ  …（式４）
ＣSAD ＝ＳＡＤ×ＮｕｍＢｌｏｃｋＰｅｌｓ／ＮｕｍＡｃｃｏｕｎｔ  …（式５）
可逆圧縮手法の最適化を行う場合，原画像と復号画素値が少しでも異なればＣSSD ・ＣSAD としてＩＮＦを設定する。可逆圧縮手法の最適化を行うか否かはユーザが決定するものとする。
【０１９９】
［４−２］符号量
符号量には，構造ツリーを用いて符号化を行った際に出力される符号語による符号量のほかに，画像サイズ等に代表される各種ヘッダと構造ツリーの符号量が対象とされる。ヘッダの符号化のために最低限必要な画像サイズを縦横それぞれ固定長でＸｂｉｔｓ割り当て，構造ツリーの符号化のために，ノード識別番号を固定長でＮｂｉｔｓ割り当て，記述されるノード数がＭノード，構造ツリーを用いて符号化を行った際に出力される符号語をＹｂｉｔｓとすると，全体の符号量ＣGenBits は，次の（式６）にて計算できる。
【０２００】
ＣGenBits ＝２×Ｘ＋Ｎ×Ｍ＋Ｙ      …（式６）
最適化時における構造ツリーのコスト計算（図７の出力データ分岐部１８および図８のステップＳ１０６）では，ＲｅｔｕｒｎＰＩＮ内のビットストリームにこれらの情報が全て記述されているため，この値をＣＧｅｎＢｉｔｓに用いる。
【０２０１】
一方，処理の分岐・選択時におけるコスト計算（図１８のステップＳ７１０）では，下位ノード実行前の符号量を一度保存しておき，下位ノード実行後に増加した符号量から実行前の符号量を減算し，純粋に下位ノードの実行によって増加した符号量をＣGenBits に用いる。
【０２０２】
［４−３］符号化処理時間
計算時間の肥大化を防止するために導入する評価値であり，下位ノードを実行したときの符号化／復号ノードおよびフィルタノードで要した符号化処理の計算時間の合計を評価値ＣEncTime として用いる。なお，符号化／復号ノードおよびフィルタノード内では完全な復号処理を行うが，これら復号処理の計算時間は除外し，ＰＩＮに格納される符号化処理時間は，処理の分岐・選択を行うときもコストの低いＲｅｔｕｒｎＰＩＮの符号化処理時間で上書きされることはなく，随時加算計算されるものとして扱う。そのため図７の出力データ分岐部１８および図８のステップＳ１０６にて，参照するＲｅｔｕｒｎＰＩＮ内の符号化処理時間には全ての分岐・選択を辿った合計の符号化処理時間が格納される。
【０２０３】
最適化時における構造ツリーのコスト計算（図７の出力データ分岐部１８および図８のステップＳ１０６）では，上記のようにＲｅｔｕｒｎＰＩＮ内の符号化処理時間に構造ツリー全体の符号化処理時間が格納されているため，この値をＣEncTime に用いる。
【０２０４】
一方，処理の分岐・選択時におけるコスト計算（図１８のステップＳ７１０）では，下位ノード実行前の符号化処理時間を一度保存しておき，下位ノード実行後に増加した符号化処理時間から実行前の符号化処理時間を減算し，純粋に下位ノードの実行によって増加した符号化処理時間をＣEncTime に用いる。
【０２０５】
［４−４］最適復号処理時間
計算時間の肥大化を防止するために導入する評価値であり，下位ノードを実行したときの符号化／復号ノードおよびフィルタノードで要した復号処理の計算時間の合計を評価値ＣDecTime として用いる。なお，最適復号処理時間は処理の分岐・選択を行うとき，コストの低いＲｅｔｕｒｎＰＩＮの最適復号処理時間で上書きされるため，コスト比較の結果，選択されなかった復号処理時間は考慮されない。そのため，復号装置側での復号処理に要する計算時間を見積もる指標として扱うことができ，図７の出力データ分岐部１８および図８のステップＳ１０６にて，参照するＲｅｔｕｒｎＰＩＮ内の最適復号処理時間に，最適な符号化経路を辿った際の復号処理に要する計算時間が格納される。
【０２０６】
最適化時における構造ツリーのコスト計算（図７の出力データ分岐部１８および図８のステップＳ１０６）では，上記のようにＲｅｔｕｒｎＰＩＮ内の最適復号処理時間に構造ツリーの最適な符号化経路を辿った際の復号処理に要する計算時間が格納されているため，この値をＣDecTime に用いる。
【０２０７】
一方，処理の分岐・選択時におけるコスト計算（図１８のステップＳ７１０）では，下位ノード実行前の最適復号処理時間を一度保存しておき，下位ノード実行後に増加した最適復号処理時間から実行前の最適復号処理時間を減算し，純粋に下位ノードの実行によって増加した最適復号処理時間をＣDecTime に用いる。
【０２０８】
［４−５］ユーザの設定項目
上記［４−１〜４］の各評価値を用いてコスト算出関数の出力コストを決定する。コスト算出関数には，ユーザの要求に合わせた高画質・低ビットレート・処理時間の最適な画像符号化手法を得るため，以下の４つの設定自由度をユーザに与える。
【０２０９】
・可逆圧縮フラグ
・ＳＳＤｏｒＳＡＤフラグ
・ＲｅｆＲａｎｇｅ
・各評価値の係数
“可逆圧縮フラグ”を使用する場合には［４−１］に記載のように原画像と復号画素値が少しでも異なればＩＮＦを出力する。“ＳＳＤｏｒＳＡＤフラグ”は画質の評価値としてＣSSD とＣSAD のどちらを使用するか決定する。“ＲｅｆＲａｎｇｅ”は隣接何画素までＳＳＤやＳＡＤ計算を行うかを決定する値である。
【０２１０】
“各評価値の係数”には［４−１〜４］の各評価値に乗算する４つの係数（ａ，ｂ，ｃ，ｄ）を与え，最終的な出力コストＣｏｓｔを下式にて算出する。
【０２１１】
Ｃｏｓｔ＝ａ×（ＣSSD   ｏｒ  ＣSAD ）＋ｂ×ＣGenBits 
＋ｃ×ＣEncTime ＋ｄ×ＣDecTime       …（式７）
また，上記手法だけでなく，４つの評価値を用いてコストを算出する任意の関数も設定可能とする。
【０２１２】
符号化処理時間の導入により，最適化の過程で，非現実的な程に符号化処理時間を要する手法の優先度を下げて最適化を行いたい場合には，対応する係数値（上記の例であればｃ）に大きな値を設定することで，合計符号化処理時間のコストが大きくなる。そのため，積和演算で計算されるコストも対応して高くなり，合計符号化処理時間が短い手法が最適な符号化構造として出力される。合計符号化処理時間に対応する係数値に０を設定した場合には処理時間を度外視して最適化を行う。
【０２１３】
最適復号処理時間の導入により，復号装置側での計算負荷を予測できる。最適化の過程で，非現実的な程に復号処理時間を要する手法の優先度を下げて最適化を行いたい場合には，対応する係数値（上記の例であればｄ）に大きな値を設定することで，最適復号処理時間のコストが大きくなる。そのため積和演算で計算されるコストも対応して高くなり，最適復号処理時間が短い手法が最適な符号化構造として出力される。最適復号処理時間に対応する係数値に０を設定した場合には処理時間を度外視して最適化を行う。
【０２１４】
以上の本実施形態による効果とその効果が生じる理由について，まとめて説明すると以下のとおりである。
【０２１５】
図２６の構造ツリーの自動生成・最適化装置５に，符号化対象画像やコスト算出関数を与えることで符号化構造の最適化を実行する。符号化構造は，新規構造ツリー生成部５５にて母集団記憶部５３から１つまたは２つの符号化構造を選び出し（図２７：Ｓ１３０６），進化計算にて符号化構造を書き換えて新しい符号化構造を生成する。新しい符号化構造はコスト算出部５４にて設定される符号化対象画像の符号化処理が行われ，設定されるコスト算出関数から生成した新しい符号化構造のコストを求め（図２７：Ｓ１３０８），母集団記憶部５３に格納する（図２７：Ｓ１３０９）。上記の新規構造ツリー生成とコスト算出を複数回繰り返すことで符号化対象画像に特化した符号化構造を自動構築する。
【０２１６】
これにより，第１の効果として，符号化処理時間や復号処理時間が少ない，処理負荷の軽い符号化構造を優先的に実現することが可能になる。その理由について詳しく述べる。
【０２１７】
本手法は符号化に要する処理時間（合計符号化処理時間）と，分岐などによって最適な経路を辿った場合に画像の復号に要する処理時間（最適復号処理時間）をコストの計算対象として導入している（「課題を解決するための手段」の項の［Ｃ］評価手法を参照，実施例は［４］コスト算出手法の（式７）参照）。符号化処理時間や復号処理時間がかかる符号化構造のコストを高くする最適化を実現するためには，図２６の構造ツリーの自動生成・最適化装置５におけるコスト算出部５４にてコストを求める際に（図２７：Ｓ１３０４，Ｓ１３０８），（式７）における係数値ｃ，ｄの値を高く設定することで，符号化構造の処理時間に関するコストを高くすることができる。また，分岐・選択の機能を実行するノードにおいても同じ係数値を用いることで，これらを考慮した分岐・選択が実現できる（図１８：ステップＳ７１０）。結果として各種処理時間を要する符号化構造はコストが高くなるため，処理負荷の軽い符号化構造の最適化が実現できる。
【０２１８】
また，第１の効果とは逆に，第２の効果として，符号化処理時間や復号処理時間が多くかかっても，画質・符号量のみを特化させる符号化構造を優先的に実現できるようにすることが可能になる。その理由について詳しく述べる。
【０２１９】
符号化処理時間や復号処理時間を無視した画質・符号量のみを特化させる符号化構造の最適化を実現するためには，図２６の構造ツリーの自動生成・最適化装置５におけるコスト算出部５４にてコストを求める際に（図２７：Ｓ１３０４，Ｓ１３０８），（式７）における係数値ｃ，ｄの値を０に設定することで，処理時間を度外視したオフライン最適化が実行できる。また，分岐・選択の機能を実行するノードにおいても同じ係数値を用いることで，これらを考慮した分岐・選択が実現できる（図１８：ステップＳ７１０）。結果として，各種処理時間を無視した最適化が実現できるため，画質・符号量のみを特化させる符号化構造の最適化が実現できる。
【０２２０】
以上の構造ツリーを用いた画像符号化，画像復号および構造ツリーの自動生成・最適化の処理は，コンピュータとソフトウェアプログラムとによっても実現することができ，そのプログラムをコンピュータ読み取り可能な記録媒体に記録することも，ネットワークを通して提供することも可能である。
【産業上の利用可能性】
【０２２１】
本発明は，動画像や静止画像を符号化し復号する場合に適用できるものであり，本発明を適用することで，複数の符号化手法の中から入力動画像や静止画像に特化した符号化手法を自動生成にて実現できるようになる。また，例えば空や夜景，山岳風景やアニメ調の画像など，複数の画像に対して最適化計算を行い，平均的にコストの低い符号化構造を構築すれば，今までにないそれぞれのシーンに特化した符号化構造の組み合わせが得られることが期待される。
【符号の説明】
【０２２２】
１    画像符号化装置
１０  原画像記憶部
１１  構造ツリー記憶部
１２  コスト算出関数記憶部
１３  ノード転送ＰＩＮ構築部
１４  ヘッダ情報格納部
１５  構造ツリー格納部
１６  ノード実行部
１７  ノード記憶部
１８  出力データ分岐部
２    画像復号装置
２０  ビットストリーム記憶部
２１  ヘッダ情報復号部
２２  構造ツリー復号部
２３  構造ツリー記憶部
２４  ノード転送ＰＩＮ構築部
２５  ノード実行部
２６  ノード記憶部
２７  出力データ分岐部
【図１】
2011082722.tif 000003
【図２】
2011082722.tif 000004
【図３】
2011082722.tif 000005
【図４】
2011082722.tif 000006
【図５】
2011082722.tif 000007
【図６】
2011082722.tif 000008
【図７】
2011082722.tif 000009
【図８】
2011082722.tif 000010
【図９】
2011082722.tif 000011
【図１０】
2011082722.tif 000012
【図１１】
2011082722.tif 000013
【図１２】
2011082722.tif 000014
【図１３】
2011082722.tif 000015
【図１４】
2011082722.tif 000016
【図１５】
2011082722.tif 000017
【図１６】
2011082722.tif 000018
【図１７】
2011082722.tif 000019
【図１８】
2011082722.tif 000020
【図１９】
2011082722.tif 000021
【図２０】
2011082722.tif 000022
【図２１】
2011082722.tif 000023
【図２２】
2011082722.tif 000024
【図２３】
2011082722.tif 000025
【図２４】
2011082722.tif 000026
【図２５】
2011082722.tif 000027
【図２６】
2011082722.tif 000028
【図２７】
2011082722.tif 000029