以下、添付図面に従って本発明に係る実施形態を詳細に説明する。
本発明に係る以下に説明する各実施形態では、本発明に係る構成をデジタルカメラに実装した場合について説明する。説明を分かりやすくするため、本実施の形態におけるデジタルカメラは超高解像度(1千万画素を超える解像度)で撮影することができる。通常、パーソナルコンピュータ等の汎用の情報処理装置のディスプレイは、せいぜい1600×1200画素(≒200万画素)程度であるため、撮像画像をそのフル解像度で表示することができない。そこで、ディスプレイにオリジナルの解像度よりも低い、中間的な解像度である縮小画像を生成する必要がある。本実施の形態においては、超高解像度画像撮影が行われた際、中間的な解像度でありながらも、画質劣化を抑制した画像を生成できるようにする。
[第1の実施形態]
本実施の形態では、デジタルカメラで画像を撮影する際、符号列を増やして階層を増やすかどうかユーザーに選択させる。そのようにして撮影された画像をパソコンに取り込み、文書作成ソフトウェア上で撮影した画像の低解像度画像を挿入する処理系を想定する。
図22が実施形態が適用するデジタルカメラ(画像処理装置)のブロック構成図である。このデジタルカメラは、撮影部2201、撮影指示部2202、画像処理部2203、画像圧縮部2204、サイズ指定部2205、解像度判定部2206、出力部2207、階層モード指定部2210、リサイズ部2211を備える。また、デジタルカメラには、装置全体の制御手段として機能するCPU2208、及び、CPU2208の実行するプログラム及びワークエリアとして使用するメモリ2209を備える。また、各種設定された情報も、このメモリ2209に格納される。なお、サイズ指定部2205、階層モード指定部2210は、不図示の操作パネルに設けられたボタン、もしくはメニュー選択により指定するものとする。また、撮影指示部2202はシャッターボタンと言えば分かりやすい。
実施形態におけるデジタルカメラにおいて、ユーザーは、撮影に先立ち、撮影画像の解像度(サイズ)をサイズ指定部2205にて設定できる。選択可能なサイズには、例えばL、M、Sの3通りがある。Lサイズは水平方向4000画素、垂直方向3000画素(以下、4000×3000画素という)であり、Mサイズは2000×1500画素、Sサイズは1600画素×1200画素である。すなわち、実施形態のデジタルカメラが有する撮像部220には、4000×3000の解像度を持つ撮像素子が搭載されているものとする。選択したサイズは、メモリ2209の予め設定された領域に保存される。
またユーザーは、階層モード指定部2210を操作することで、高階層モード、低階層モードの2つのいずれか一方の階層モードを選択する。選択された階層モードは階層モード情報としてメモリ2209の予め設定された領域に保存される。高階層モードでは、撮影した画像(原画像)の半分の解像度の画像(リサイズ画像)を生成し、原画像とリサイズ画像を圧縮し1つのファイルにまとめる。なお、リサイズ処理は、オリジナルの画像データ中の2×2画素の各色成分の平均値を算出し、その各色成分の平均値をリサイズ後の1画素の各成分値として決定するものとする。
上記の通り、サイズ指定部2205にて、解像度を設定した後、ユーザは撮影指示部2202に含まれるシャッターボタンを操作すると、指定された解像度の画像を撮影し、画像処理(ホワイトバランス処理等)を行ない、後述する符号化処理を行なう。そして、生成された符号化データを、出力部2207に接続された不揮発性のメモリカードに保存する処理を行なう。
図23は、シャッターボタンが操作された際のCPU2208の処理手順を示すフローチャートである。なお、AF、AE等の処理は、本願には直接には関係がないので、その説明は省略する。以下、図23のフローチャートに従って処理手順を説明する。
先ず、CPU2208は、撮影部2201で得られた光電変換した信号をデジタルデータに変換し、その変換後のデータを画像データとして取得し(ステップS2301)、メモリ2209に一時的に格納する(ステップS2302)。
次に、CPU2208は、画像処理部2203を制御し、メモリ2209に格納した画像データに対する画像処理を実行させる(ステップS2303)。この画像処理としては、ベイヤー配列のRGBデータを正規の配列に変換する処理,ホワイトバランス、シャープネス,色処理などが考えられる。画像処理結果の画像データは、メモリ2209に再び格納される。画像処理が終了すると、処理はステップS2304に進み、設定されたサイズ情報をメモリ2209から取得し(ステップS2304)、ユーザーが指定したサイズを判定する(ステップS2305)。
もしサイズLが指定されていれば(ステップS2305でYes)、画像圧縮に関する2つの情報、すなわち、系列変換情報SCと符号列形成情報CFそれぞれ対して“2”を設定し、画像圧縮部2204に設定する(ステップS2306)。つまり、系列変換情報と符号列形成情報は、画像圧縮部2204の圧縮符号化する際のパラメータと言うことができる。
なお、系列変換情報SCと符号列形成情報CFの詳細は後述するが、本実施形態における系列変換情報SCについては“0”、“1”、“2”の3つがある。ここで、“2”は中間解像度の画質を向上させるための処理を指示する情報である。また、系列変換情報SCは、後述する周波数変換処理の実行回数を示す情報としても利用される。符号列形成情報CFについては“1”、“2”の2つがあり、“2”は中間解像度優先による符号列の形成を指示する情報である。系列変換情報SC、符号列形成情報CFを共に“2”にした場合、複雑な処理が介在することになり、処理に要する時間も増える。しかし、サイズLの画像の場合、その画素数が非常に多く、実際に表示する段階では、最高解像度で表示することは希であり、むしろ最高解像よりも数段低い中間解像度で表示する可能性が高いと言える。そこで、実施形態では、表示処理の後の処理に応じた処理を行なうため、サイズLが設定された場合、上記のように、系列変換情報SC、及び、符号列形成情報CFを共に“2”に設定する。
一方、指定されたサイズがL以外の場合(指定されたサイズがM、又はSの場合)、処理はステップS2307に進み、指定サイズはMであるか否かを判定する。サイズMが設定されている場合、ステップS2308にて、系列変換情報SCとして“1”、符号列形成情報CFとして“1”を、画像圧縮部2204に設定する。
また、指定されたサイズがM以外、すなわち、サイズSが設定されていると判定した場合、ステップS2309にて、系列変換情報SCとして“0”、符号列形成情報CFとして“1”を、画像圧縮部2204に設定する。
続いて、CPU2208は、階層モード情報をメモリ2209から取得する(ステップS2310)。もし階層モードが高階層モードであれば(ステップS2311でYes)、リサイズ部2211において、撮像した画像データを1/2の解像度にリサイズして(ステップS2312)、画像圧縮部2204に原画像データとリサイズ画像(縮小画像データ)を出力する。つまり、画像圧縮部2204は、原画像とリサイズ画像の2つの画像を符号化することになる。一方で低階層モードであれば(ステップS2311でNo)、原画像データをそのまま画像圧縮部2204に出力する。
この後、処理はステップS2313に進み、画像圧縮部2204に対して圧縮処理を開始させる。この後、ステップS2314にて、CPU2208は、生成された符号化データをファイルにして、メモリカードに格納する。なお、高階層モードの場合、CPU2208は、画像圧縮処理後2つの画像符号化データを1つのファイルにまとめた後、メモリカードに格納する処理を行なう。このとき、ファイルヘッダには、階層モードがいずれであるのかを示す情報、並びに、高階層モードの場合には原画像及びリサイズ画像それぞれの符号化データの先頭位置情報が格納される。
次に、実施形態における画像圧縮部2104の詳細を説明する。
本実施形態の画像圧縮部2104は、先に示した特許文献1で示したHD Photo技術を採用し、階層構造を持つ階層符号化データを生成する。そこで、この技術の基本にしつつ、本実施形態の特徴部分を以下に説明する。
図1は、実施形態における画像圧縮部2204のブロック構成図である。
画像圧縮部2104は、色変換部101、系列変換部102、量子化部103、係数予測部104、係数スキャン部105、エントロピー符号化部106、符号列形成部107で構成される。
画像圧縮部2104の処理を説明するに先立ち、用語について定義する。ブロックとは符号化処理の最小単位であり、実施形態では4×4画素のサイズである。マクロブロックとはブロックを複数個内包する単位であり、実施形態では4×4個のブロック(言い換えれば、16×16画素)を示す。タイルとは、マクロブロックを複数個内包する単位であり、M×N個(M,Nは1以上の整数であって、いずれか一方は2以上の整数)のマクロブロックで構成される。実施形態では、M=6、N=4として説明する。すなわち、1タイルのサイズは、6×4個のマクロブロック=96×64画素のサイズである。なお、ここで示すブロック、マクロブロック、タイルの定義は一例であって、それらのサイズによって本願発明が限定されるものではない。画像圧縮部2104は、タイルを単位に圧縮符号化データを生成するが、その処理における最小処理単位はブロック(4×4画素)である。
色変換部101はR、G、B(実施形態では各成分が8ビット=256階調とする)データをY、U、Vの色空間に変換し、変換結果を系列変換部102に出力する。RGB→YUVの変換は、例えば図3に示す変換式に従って行なう。
Y,U,Vの各コンポーネントの符号化処理は個別に処理される。そこで、説明を簡単なものとするため、以下では、Y(輝度)について説明する。すなわち、以下の説明にて画像データとはYコンポーネントで表わされる画像データを意味することに注意されたい(U,Vの各コンポーネントについては、適宜、置き換えて把握されたい)。
系列変換部102は、図2に示す如く、第1変換部201、第2変換部202、及び、メモリ203を有する。ここで、第1変換部201は必須の処理であり、且つ、系列変換部102の制御も司る。一方、第2変換部202はオプション的な処理であって、実行してもしなくて構わない。また、第2変換部202に処理を実行させるか否かのハンドリングは第1変換部201が行なう。第2の変換部202の処理を行なう場合、その分だけ符号化処理にかかる負担が増え、処理に要する時間も増えるが、画像復号した画質(特に、オリジナルの解像度よりも低い解像度の画像の画質)はより好ましいものとなる。メモリ203は先に説明した系列変換情報SCを保持する。
Yコンポーネントデータは系列変換部102に入力されると、図5に示したようにまず画像はタイルのサイズに分割される(実施形態では、1つのタイルは6×4個のマクロブロックで構成される)。メモリ203には系列変換情報SC(0、1、2のいずれか)が格納されており、その情報に従って、第1変換部201、第2変換部202は、図4のフローチャートに従って処理を実行する。
先ず、ステップS401にて、第1変換部201は、系列変換情報SCをメモリ203から取得する。そして、ステップS402において、第1変換部201は、その系列変換情報SCが“0”であるか否かを判定する。
系列変換情報SCが“0”である場合、第1変換部201は、第2変換部202に対して変換処理を要求しない。そして、第1変換部201はステップS403、S404にて、周波数変換処理を2回実行する。この処理を、図6を用いて具体的に説明する。
先ず、1つのマクロブロックを構成する4×4個のブロックのそれぞれに対し、周波数変換処理を行なう(第1ステージ)。1つのブロックからは、1個のDC成分(直流成分)データと15(=4×4−1)個のAC成分(交流成分)データが得られる。上記の通り、1つのマクロブロックは4×4個のブロックで構成されているので、1つのマクロブロックからは4×4個のDC成分データと、15×4×4個のAC成分データが得られる。この4×4個のDC成分値を集めたものをDCブロックと言う。
上記がステップS403の処理、すなわ、第1回目の周波数変換処理である。
次に、ステップS404の処理(第2回目の周波数変換処理)について説明する。
ステップS404における第2回目の周波数変換対象は、上記のDCブロックである(第2ステージ)。この結果、DCブロックから1個のDC成分値と、15個のAC成分値が得られる。後者のAC成分値は、DCブロック(4×4画素)のDC成分から算出したAC成分であるので、図6ではACDC成分として示している。
なお、ステップS403、S404で生成される成分を区別するのであれば、1回目(ステップS403)で得られるDC成分データ、AC成分データを、第1レベルのDC成分データ、第1レベルのAC成分データとも言う。そして、2回目(ステップS404)で得られるDC成分データ、ACDC成分データを、第2レベルのDC成分データ、第2レベルのAC成分データとも言っても構わない。
ここで、周波数変換処理は図7のフローチャートに示す手順で行われる。なお、同フローチャートは1ブロック(4×4画素)についてのものである点に注意されたい。すなわち、マクロブロックは4×4ブロックで構成されているので、第1回目の周波数変換処理(ステップS403)では、図7のフローチャートに従った処理を16回行なうことになる。
なお、図7のフローチャートにおけるステップS71乃至S78における変換処理(フィルタリング処理)は、図8(b)乃至(d)の同名の変換回路(フィルタリング回路)のいずれかで実行される。また、図7の各変換処理での引数a乃至pは、図8(a)の着目ブロック内の画素a乃至pの位置に対応する。
図7の最初の処理ステップS71の変換処理T_H(a,d,m,p)は、図8(b)の回路構成で実行することを示している。すなわち、図8(b)の入力端子X1,X2,X3,X4に、図8(a)におけるa,d,m,pをそれぞれセットし演算を開始させる。そして、出力端子Y1、Y2、Y3、Y4に現れる4つの値で、元のa,d,m,pの値を更新する。ステップS72以降でも、同様である。なお、ステップS78では、データl,oの正負の符号を反転した後、T_Odd_Odd演算処理(図8(d)参照)を行なうことを示している。
図7の処理をDC成分について平たく言えば、最初の4つの処理(ステップS71乃至74)では、着目ブロック(4×4画素)のデータから、仮の低周波成分を左上隅の2×2の位置(図8ではa,b,e,fの位置)に集中させる。そして、ステップS75では、左上隅の{a,b,e,f}の位置に格納された2×2個の仮低周波成分のデータを用いて、図8(a)の“a”の位置に、着目ブロックの1つのDC成分を格納させる。
また、15個のAC成分については、ステップS71乃至S78の処理過程を経て生成していることになる。
1回目の周波数変換処理では、図7の着目マクロブロックに含まれる16個のブロックそれぞれについて行なう。また、2回めの周波数変換処理では、着目マクロブロックから得られたDCブロック(4×4個のDC成分値)が、図8(a)の配列にあるものと見なし、図7のフローチャートに示す処理を1回行なえば良いことになる。
上記の通り、2回の周波数変換処理で、1つのマクロブロックからは、1つのDC成分、15(=4×4−1)個のACDC成分、240(=15×4×4)個のAC成分が得られる。
なお、実施形態における符号化処理では、タイル単位に符号化データを生成する。実施形態では、1タイルは6×4個のマクロブロックで構成されるものとしているので、上記ステップS403、S404はこの1タイルに含まれるマクロブロックの数だけ処理することになる。
図4の説明に戻る。ステップS402において、第1変換部201は、メモリ203から取得した系列変換情報SCが“0”以外、すなわち、SC=1又は2であると判断した場合、ステップS405に進む。ステップS405では、第1変換部201は、第2変換部202に対して変換処理の開始指示を行なう。
この第2変換部202の処理は、第1変換部201がブロック単位の演算を基礎にしていることに起因するブロック境界の歪みを補正するため、ブロックの境界を跨ぐ(オーバーラップする)範囲で補正処理を行なう。それ故、この第2の変換部202が実行する処理を以降、ブロックオーバラップ処理という。
第1変換部201によって起動指示を受けた第2変換部202は、図9に示したように入力タイル中のブロック(4×4画素)の境界を跨ぐ(オーバーラップする)windowを用いてブロックオーバラップ処理を行なう(ステップS404)。
このブロックオーバラップ処理は、図19のフローチャートに示す通りである。図19には、先に示した図7のフローチャートで示した処理に加えて、2つのフィルタ処理、すなわち、T_s()、及び、T_Ro()が新に追加される。このT_s()、及び、T_Ro()は図20(a),(b)の回路構成で実現する。T_s()、T_R処理は、2入力、2出力のフィルタリング処理である。
ブロックオーバラップ処理は、先に説明した周波数変換処理の処理対象のブロックを跨ぐ範囲を処理対象とすることで、周波数変換するブロック境界での不連続性の発生を抑制できる。
この後、処理は、ステップS406に進み、第1変換部201は、周波数変換処理を1回を行なう。このステップS406における周波数変換処理は、図6のマクロブロックに相当する領域内の4×4個のブロックそれぞれについて周波数変換を行なうものである。すなわち、ステップS403と同様に、16個のブロックを周波数変換し16個のDC成分と、240個のAC成分を算出する処理である。実施形態の場合、1つのタイルに含まれるマクロブロックの数は6×4個であるので、上記処理を24回実行することになる。
次に、ステップS407において、第1変換部201は、メモリ203から取得した系列変換情報SCが“1”であるか否かを判断する。“1”であると判断した場合には、ステップS409に処理を進める。一方、“1”以外、すなわち、系列変換情報SCが“2”であると判断した場合、処理はステップS408に進み、第2変換部202に対して、2回めのブロックオーバラップ処理(図19参照)を実行させる。
なお、ステップS408における第2変換部202が実行するブロックオーバラップ処理の処理対象となるのは、6×4個のDCブロックとなる。
ステップS409では、2回目の周波数変換処理を実行する。この2回めの周波数変換処理はステップS404と同じである。但し、処理対象は、ステップS406、もしくはステップS408の処理を経た1タイルに含まれる複数のDCブロックの集合に対して行なう。すなわち、1つのタイルは6×4個のマクロブロックを内包し、1マクロブロックからDCブロックが1個生成される。従って、24個のDCブロックについて周波数変換を行なうことになる。
以上の処理をまとめると、本実施形態のマクロブロックに対する処理は次の通りである。
・撮影する画像サイズがSサイズの場合:
周波数変換処理→周波数変換処理
・撮影する画像サイズがMサイズの場合:
ブロックオーバラップ処理→周波数変換処理→周波数変換処理
・撮影する画像サイズがLサイズの場合:
ブロックオーバラップ処理→周波数変換処理→ブロックオーバラップ処理→周波数変換処理
以上説明したのが、図1における系列変換部102の処理である。
系列変換部102は上記の変換結果を、後続する量子化部103に出力する。量子化部103は、Qパラメータ(以下QPと呼ぶ)を設定し、この設定されたQPと図10の変換式に従って量子化ステップを算出する。なお、HD Photoによれば、ここで述べるQPの設定方法としては、以下の3つの自由度があり、これらの組み合わせでQPを設定できるとしているので、本実施形態でもこれを準拠するものとする。
・自由度軸1:空間的自由度:
1.1 画像中全マクロブロックに対して同一のQPを設定.
1.2 タイル内における全マクロブロックに対して同一のQPを設定.
1.3 タイル内の各マクロブロックに対して自由にQPを設定.
・自由度軸2:周波数的自由度:
2.1 全周波数成分に対して同一のQPを設定.
2.2 DC成分とローパス成分(ACDC成分)に対して同一のQPを設定、ハイパス成分(AC成分)には異なるQPを設定.
2.3 ローパス成分とハイパス成分で同一のQPを設定、DC成分には異なるQPを設定.
2.4 各周波数成分に異なるQPを設定.
・自由度3:カラープレーン的自由度:
3.1 全カラープレーンでQPを同一に設定.
3.2 輝度プレーンに1つのQPを設定、輝度以外のプレーンに対して同一のQPを設定.
3.3 各プレーン別々にQPを設定.
例えば、従来のJFIFにおける量子化は、空間的自由度では1.1であり、カラープレーン的自由度では3.2である。なお、JFIFではマクロブロック中、各係数に量子化ステップを割り当てるため、周波数的自由度にはあてはまる項目はない。
さて、上記のようにして量子化部103による量子化処理を終えると、量子化後のデータを係数予測部104に出力する。係数予測部104は、係数予測を行い、その予測誤差を出力する。係数予測では、DC成分,ローパス成分,ハイパス成分それぞれ別個のルールに基づいて実施する。なお、予測演算の方法は各タイル単位で決定されて、また、隣接タイルの係数を使わない。以下、係数予測部104による各成分の予測演算について説明する。
(1)DC成分予測
先に説明したように、実施形態の場合、1つのタイルは6×4個のマクロブロックで構成される。1つのマクロブロックからは1つのDC成分(図6参照)が得られるわけであるから、1つのタイルからは6×4個の量子化処理済みのDC成分が得られる。
係数予測部104のDC成分予測処理(予測誤差算出処理)は次の通りである。
1タイル内のDC成分値をラスタースキャンする。図11は、タイル内のスキャン処理中の着目マクロブロックのDC成分Xと、相対的に隣接する近傍DC成分D、T、Lの関係を示している。ラスタースキャンするわけであるから、着目DC成分Xの近傍に位置する近傍DC成分D、T、Lは、既に予測処理(予測誤差算出)を終えた位置にあることになる点に注意されたい。
なお、着目DC成分Xが、左上隅位置にあるとき、近傍DC成分D、T、Lの全てはタイル外に位置する。また、着目DC成分Xが、左上隅位置以外の1ライン目にあるとき、近傍DC成分D、Tはタイル外に位置する。そして、着目DC成分Xが、左上隅位置以外の左端にあるとき、近傍DC成分D、Lはタイル外に位置する。このように、参照すべきタイル外にある近傍DC成分は、所定値(例えば、“0”)を持つものとみなす。この所定値は、画像復号装置と同じになれば良いので、必ずしも“0”でなくても構わない。
以下、図12のフローチャートに従ってタイル内のDC成分予測処理を説明する。
先ず、ステップS1201では、近傍DC成分値であるDとTの差分絶対値(水平方向差分絶対値)ABS_HORを算出し、近傍DC成分値であるDとLの差分絶対値(垂直方向差分絶対値)ABS_VERを算出する。
そして、ステップS1202にて、ABS_HOR<<ABS_VERであるか、すなわち、ABS_HORがABS_VERより十分に小さいか否かを判断する。具体的には、或る正の閾値Thを用い、次式を満たす場合に、ABS_HORがABS_VERよりも十分に小さいと判断する。
ABS_HOR−ABS_VER<Th
ステップS1202の処理を平たく説明するのであれば、着目タイル(図示のXの位置)近傍では、垂直方向よりも、水平方向に似通った画像が連続しているか否かを判断するものである。従って、ステップS1202にて、ABS_HOR<<ABS_VERであった場合、処理はステップS1203に進み、着目DC成分Xの予測値Pとして左隣のDC成分Lを用いることに決定する。
また、ステップS1202にて、Noと判断された場合、ステップS1204に処理を進める。このステップS1204では、ABS_HOR>>ABS_VERであるか、すなわち、ABS_VERがABS_HORより十分に小さいか否かを判断する。これは、ステップS1202と同様であり、次式を満たす場合に、ABS_VERがABS_HORよりも十分に小さいと判断する。
ABS_VER−ABS_HOR<Th
ABS_VER<<ABS_HORであった場合(ステップS1204がYesの場合)、着目DC成分Xと垂直方向に隣に位置するDC成分Tとの差が小さくなる確率が高いと言える。従って、処理はステップS1205に進み、着目DC成分Xの予測値Pとして上隣のDC成分Tを用いることに決定する。
また、ステップS1204にて、Noと判断された場合、ステップS1206に進み、着目DC成分Xの予測値Pとして、(T+L)/2を用いることに決定する。なお、(T+L)/2の算出は、T+Lを算出し、その後で、1ビット下位方向にシフトすることで得られる(小数点以下は切り捨て)。
上記のステップS1203、1205、1206のいずれかによって着目DC成分Xの予測値Pが求まると、ステップS1207にて、着目DC成分Xと予測値Pとの差分を予測誤差として算出する。
この後、処理はステップS1208に進み、着目タイル内の全DC成分の予測誤差算出を終えたか否かを判断する。この判断が否(No)の場合には、ステップS1209にて、着目DC成分Xの位置を次の位置に更新し、ステップS1201に戻る。
以上のようにして、着目タイル内の6×4個のDC成分の予測誤差算出処理が行われる。
(2)ローパス成分予測
図13は、1つのマクロブロックの量子化後のACDC成分値の配列を示している。この配列は、1つのマクロブロックに対して、2回めの周波数変換を行なったACDC成分値(図6参照)でもある。ローパス成分の予測処理の対象となるのは、図13における{1,2,3}で示されるACDC成分か、同図の{4、8、12}で示されるACDC成分のいずれか一方である。例えば、図13におけるACDC成分{4,8,12}を予測処理すると決定された場合、それ以外の{1,2,3,5,6,7,9,10,11,13,14,15}の位置のACDC成分は予測誤差算出処理は行なわない。
なお、着目マクロブロックが、タイル内の左端や上端の位置にあるとき、参照する着目マクロブロックに隣接するマクロブロックは存在しない。このように参照すべきマクロブロックが存在しない場合、その存在しないマクロブロックでは、{1、2、3}を予測誤差算出対象として処理したものと見なす。但し、{4、8、12}を予測誤差算出対象としても構わない。要するに、符号化側と復号側で共通にすればよい。
図14は、ローパス成分予測処理の処理手順を示すフローチャートである。以下、このフローチャートに従って説明する。
ステップS1401では、着目ブロックの左隣のマクロブロックのDC予測方向が水平方向であり、且つ、着目マクロブロックのDC成分の量子化パラメータQP_Cと、着目マクロブロックの左隣のマクロブロックのDC成分の量子化パラメータQP_Lとが等しいか否かを判断する。この2つの条件を満たす場合(ステップS1401の判断やYes)、着目ブロックの予測方向を水平方向として決定する。すなわち、図13における{1,2,3}を予測誤差算出対象として決定し、それ以外は予測誤差算出対象外にする。そして、ステップS1406にて、予測誤差算出を行なう。
また、ステップS1401でNoと判断された場合、ステップS1403に処理を進める。このステップS1403では、着目ブロックの上隣のマクロブロックのDC予測方向が垂直方向であり、且つ、着目マクロブロックのDC成分の量子化パラメータQP_Cと、着目マクロブロックの上隣のマクロブロックのDC成分の量子化パラメータQP_Tとが等しいか否かを判断する。この2つの条件を満たす場合、着目ブロックの予測方向を垂直方向として決定する。すなわち、図13における{4,8,12}を予測誤差算出対象として決定し、それ以外は予測誤差算出対象外にする。そして、ステップS1405にて、予測誤差算出を行なう。
また、ステップS1403の判断がNoの場合、着目マクロブロック内のACDC成分については予測誤差算出は行なわず、本処理を終える。
(3)ハイパス成分予測
図15(a)乃至(c)はハイパス成分の予測方向(3通り)を示す図である。ここで言うハイパス成分は、図6における1回めの周波数変換した際に得られた4×4個のブロックの各DC成分を除いたAC成分である(図6参照)。また、周波数変換した1つのブロックは、1つのDC成分と、15個のAC成分が得られるが、図示では、このAC成分についてその配列の位置を示すため、1乃至15の番号を付した。また、ハイパス成分の予測を求める対象は、図15(a)における{1、2、3}のAC成分、{4、8、12}のAC成分のいずれかになる。例えば、{1、2、3}のAC成分について予測誤差を求めると決定した場合、{4、5、6、…、15}のAC成分は予測誤差算出対象外にする。
図16は、ハイパス成分の予測処理を示すフローチャートであり、以下、同図に従って説明する。
着目タイルの各ブロックの左端の{4、8、12}の位置のAC成分値のエネルギー値E_Lと、着目タイルの各ブロックの上端の{1,2,3}のエネルギー値E_Tを求める。着目タイルには、4×4個のブロックが存在する。E_L値は、16個のブロックの{4、8、12}の位置にあるAC成分の絶対値の合計値で良い。また、E_T値は、16個のブロックの{1、2、3}の位置にあるAC成分の絶対値の合計値で良い。
ステップS1601では、E_LがE_Tに対して十分に小さいか否かを判定する。予め設定された正の閾値Thを用い、次式を満たすか否かを判定すればよい。
E_L−E_T<Th
E_L<<E_Tであると判断した場合、着目ブロックのAC成分の予測誤差を求める方向は水平方向に決定し、ステップS1602にて各ブロックの{4、8、12}の位置にあるAC成分を、図15(a)に示す水平方向にスキャンし、予測誤差を求める。
また、ステップS1601の判定がNoの場合、処理はステップS1605に進み、E_TがE_Lに対して十分に小さいか否かを判定する。上記の閾値Thを用い、次式を満たすか否かを判定すればよい。
E_T−E_L<Th
ステップS1605にて、E_T<<E_Lであると判断した場合、着目ブロックのAC成分の予測誤差を求める方向は垂直方向に決定する。そして、ステップS1604にて各ブロックの{1、2、3}の位置にあるAC成分を、図15(b)に示す水平方向にスキャンし、予測誤差を求める。
また、ステップS1603の判断がNoの場合、着目マクロブロックのAC成分については予測誤差算出は行なわない(図15(c))。
なお、1つのタイルは、実施形態の場合、6×4個のマクロブロックが含まれるので、最終的に出力されるタイル毎の符号化データのヘッダには、各マクロブロックのスキャン方向が水平、垂直、スキャン無しの情報を格納しておく。
以上が係数予測部104の処理の説明である。この係数予測部104による予測処理の結果、DC成分、ACDC成分、AC成分の各予測誤差と、予測誤差を算出しなかった複数の成分値が係数スキャン部105に出力される。
係数スキャン部105は、1タイル分の上記の情報を格納するバッファを有し、各成分(予測誤差、予測誤差を算出していない成分値)を、JPEG方式の係数スキャンと同様にジグザグスキャンを行い、内部バッファ内に並べ替える。この詳細は、HDPhotoを開示している文献、もしくはHDPhoto規格書に記述されているので、ここでの詳述は省略する。
エントロピー符号化部106は、係数スキャン部105内の内部バッファに並べられた値についてエントロピー符号化を行なう(ハフマン符号語の割り当て処理を行なう)。
本実施形態においては、DC成分については、隣り合うブロック間で差分を取った上で差分値をハフマン符号する。ローパス成分,ハイパス成分についてはジグザグスキャン順に沿って、ゼロランの乱数と非ゼロ係数の組み合わせに対して2次元ハフマン符号化を実施する。2次元ハフマン符号化については、JPEGと同様な手法で行うものとする。
1つのタイルのエントロピー符号化を終えると、符号列形成部107はエントロピー符号化の結果となる符号化データを並べ変え、先頭にヘッダをつけて符号列を形成する処理を行なう。
実施形態における1タイルの符号列の配列形式は2種類ある。1つは、スペーシャルモード(空間順符号列)であり、もう1つはフリークエンシーモード(解像度順符号列)である。
スペーシャルモードは、図17に示したとおり、タイル内においてラスタースキャン順にマクロブロック単位にデータを並べたデータ構造である。1つのマクロブロックのデータは、DC、ACDC,ACの符号化データの順である。
一方フリークエンシーモードは、図18に示すように、タイル内の各DC成分の符号化データを並べ、後続してACDC成分の符号化データ、そして、DC成分の符号化データの並べる。つまり、低周波から高周波に向かう順に符号化データを並べる。
スペーシャルモードは、オリジナル画像を最初から再現する際に都合の良いフォーマットである。一方、後者、すなわち、フリークエンシーモードは、オリジナルの画像の解像度よりも低い解像度(中間解像度)の画像を再現する場合に都合が良い。すなわち、徐々に解像度をあげて再現する場合に適したものと言える。
なお、図18におけるスペーシャルモードの符号化データ中の「FLEXBITS」について簡単に説明する。HD Photoの符号化データでは、各成分値(予測誤差値を含む)は、その成分値を表わす多ビットの或るビット位置を境にし、その上位ビット群と下位ビット群に分ける。上位ビット群は、連続して同じ値になる確率が高いので符号化対象とする。下位ビット群で表わされる値は、連続性が無いので符号化しない。FLEXBITSは、各成分値(予測誤差値を含む)の下位ビットの未符号化のデータで構成されるものである。
さて、本実施形態では、先に説明した符号列形成情報CFが“2”の場合、フリークエンシーモードに従った順に符号化データを並べて符号系列を生成する。一方、符号列形成情報CFが“1”の場合には、スペーシャルモードに従った符号系列を生成する。かかる点を平たく言えば、符号化対象の画像の解像度が高い(実施形態では、サイズL以上)の画像を符号化する場合、その画像を構成している画素が非常に多く、一般的に、ユーザは、それよりも低い解像度の画像を見る(復号する)可能性が高いので、フリークエンシーモードに従った符号列を形成するようにした。一方、サイズL未満の場合には、スペーシャルモードに従った符号列を形成するようにした。
なお、フリークエンシーモードとスペーシャルモードを決定する際の閾値として、実施形態では、サイズL以上か未満かで決定するものとしたが、サイズM以上かそれ未満かとしても構わない。特に、昨今のデジタルカメラは、撮像可能な画素数は増える一方であり、撮影できるサイズも3種類ではなく、4種類以上も備えることになるであろうから、ユーザが閾値となるサイズ(画素数)を設定するようようにしても構わない。いずれにしても、どの解像度以上からスペーシャルモードにするかの設定情報は、不揮発性メモリに保持し、この保持された情報に従って、符号列を形成する。
当業者であれば容易に理解できるように、スペーシャルモードの場合、マクロブロック単位に符号列を形成できるので、符号系列の生成は比較的簡単な処理である。一方、フリークエンシーモードは、タイル全体の符号化が終了しないと、符号列を生成することができないので、その分だけ処理に時間を要する。ただ、後者の方法を取ることで、復号再生の初期段階で縮小画像を表示することができるため、アプリケーションとしての価値を高めることが可能となる。
なお、フリークエンシーモードとスペーシャルモードは、1つの画像について一義的に決まるので、ファイルヘッダに、いずれのモードであるかを示す情報を格納することになる。また、ファイルヘッダには、これ以外にも、QP,予測方法,ハフマン符号化のテーブル,符号列の形成方法といった、符号化方法に関する情報が格納される。また、タイルヘッダには、AC成分の予測処理におけるスキャン方向を示す情報が格納されることになる。
以上説明したとように、本第1の実施形態によれば、撮影する画像のサイズが大きいほど、系列変換部102はブロックオーバラップ処理の実行回数(最大2回)を多くする。この結果、中間解像度で再現する画像のブロックノイズが目立つことが無くなり、良好な画像を再現できるようになる。
また、撮影する画像のサイズがLサイズ以上の場合、生成される符号列のデータ構造がフリークエンシーモードとなる。従って、オリジナルの解像度(実施形態では4000×3000画素)だけでなく、それより低い中間解像度(実施形態では、1000×750画素、約250×190画素)の画像を復号可能となる。つまり、オリジナルの解像度を含む、3種類の解像度の画像を、間引きや補間処理といった負荷の大きい処理を介在せずに、符号化データファイルからダイレクトに復号することができる。
更に、実施形態によれば、高階層モード(1つのファイルに、解像度の異なる2種類の画像をオリジナルとして符号化したデータを含めるモード)を指定した場合、上記に加えて、2000×1500画素、500×375画素、125×94画素の計6種類の画像をダイレクトに復号できることになり、その画像の利便性を更に高めることができる。かかる点をより分かりやすくするため、以下では、上記実施形態で生成された符号化画像データファイルを、パーソナルコンピュータ等に代表される情報処理装置で活用する例を以下に説明する。
情報処理装置のハードウェア構成は周知であるので、以下ではその装置上で実行する文書作成ソフトウェア(アプリケーションプログラム)の処理を説明する。なお、このソフトウェアは、ハードディスク等の外部記憶装置に格納され、CPUがRAMに読込み、OS(オペレーティングシステム)上で実行するものである。
また、本実施形態においては、図24に示したような所定の文書フォーマット中の文書における出力領域に写真を挿入する場合における、写真の挿入方法について説明する。
図25は、このソフトウェアにおける写真の挿入処理にかかる部分の処理手順を示すフローチャートである。
先ず、CPUは、文書作成ソフトのユーザーから写真挿入の指示を受け付けると(ステップS2501)、指定された符号化画像ファイルを解析する(ステップS2502)。挿入対象の画像ファイルの選択は、ダイアログボックス等を表示し、画像一覧を表示し、マウス等のポインティングデバイスで指定すれば良い。もしくは、該当するファイルのパス付きファイル名をキーボードから入力しても構わない。
さて、ステップS2502の解析処理では、指定された符号化画像データファイルのヘッダを解析し、そのファイル内に格納された符号化画像データからダイレクトに復号可能な解像度を判別する。例えば、オリジナルの画像データが4000×3000画素であり、低階層モードを示す情報が格納されている場合、そこからダイレクトに復号可能な解像度は、DC、ACDC,AC成分の各符号化データを復号して得られる4000×3000画素、DC,AC成分の符号化データを復号して得られる1000×750画素、及び、DC成分のみを復号して得られる約250×190画素の3種類である。また、高階層モードを示す情報がファイルヘッダに格納されている場合、2000×1500画素をオリジナル画像とするもう1つの符号化データ(リサイズ画像の符号化データ)が格納されているので、そこからダイレクトに復号可能な解像度は、4000×3000画素、2000×1500画素、1000×750画素、500×375画素、約250×190画素、125×94画素の6種類として判別される。
復号可能解像度の判別処理を終えると、CPUは、その判別結果に基づき、復号処理対象の符号列と周波数帯域を決定(特定)する(ステップS2503)。ここでは、挿入すべき文書中の画像挿入領域のサイズ(ユーザが設定する)を下回らず、最低の復号可能解像度を持つ符号列を復号対象として優先的に決定する。
例えば、文書中の写真挿入領域のサイズが4000×3000画素、もしくはそれ以上であれば、オリジナル画像の4000×3000画素を復号するために必要な符号列を復号対象として決定する。
また、文書中の写真挿入領域のサイズが、仮に400×300画素であった場合には、次のいずれかになる。
(1)符号化画像データファイルのヘッダに低階層モードを示す情報が格納されている場合、1000×750画素の画像データを復号するための符号化データを、復号対象として決定する。
(2)符号化画像データファイルのヘッダに高階層モードを示す情報が格納されている場合、500×375画素の画像データを復号するための符号化データを、復号対象として決定する。
上記のようにして、復号対象の周波数帯域に対応する符号列を決めると、CPUはその符号列に基づく復号処理を行う(ステップS2504)。復号処理が終わり復号画像を生成したら、復号画像を挿入領域のサイズに合わせて、リサイズ(多くの場合には間引き処理)し、復号画像の挿入を行う(ステップS2505)。
ここで、上記のステップS2504の復号処理を、ハードウェアで実現する場合の構成(復号装置)を図21に示す。このハードウェアは、情報処理装置が有するバス(PCIバス等)に搭載するカードとして考えると分かりやすい。また、このハードウェアは先に説明したデジタルカメラにも搭載されるものでもある。通常、デジタルカメラは撮像してメモリカードに保存した画像ファイルを復号して表示する機能を持つものであるのがその理由でもある。
図21に示すように、復号装置は、復号情報取得部2101、エントロピー復号部2102、係数展開部2103、係数逆予測部2104、逆量子化部2105、逆系列変換部2106、逆色変換部2107を有する。
復号情報取得部2101に符号列が入力されると、符号列中のヘッダ情報が解析される。この解析処理により、FLEXBITS情報、符号列順情報(フリークエンシー/スペーシャル)、量子化パラメータ情報、オーバーラップ情報などの符号化条件に関する情報が取得される。また、復号情報取得部2101は、復号対象の符号列(ステップS2503で決定した復号対象符号列)を指定する情報も入力する。そして、この指定された符号列を、後続するエントロピー復号部2102に出力する。すなわち、指定された符号列以外はエントロピー復号部2102に出力しない。
エントロピー復号部2102では、入力した符号列をエントロピー復号を行い、復号結果を係数展開部2103へ出力する。係数展開部2103では、エンコード時の係数スキャンにより係数の並べ替えが行われているので、その逆を行い、ラスタースキャン順に戻す。係数逆予測部2104では、量子化ステップ情報などを基に、エンコード時の予測演算の逆演算を行って量子化インデックス(量子化された係数)を生成する。逆量子化部2105では量子化インデックスに対して逆量子化を行って係数を生成し、逆系列変換部2106では図4のフローチャートの逆の処理を行って、色変換データを生成する。逆色変換部2107では、色変換データに対して逆色変換を行い、復号画像を生成する。
以上であるが、ユーザの目標とする解像度の画像を得るためには、その目標とする解像度以上であり、最も小さい解像度の画像を先ず復号することが望ましい。なぜなら、復号した画像から目標とする解像度の縮小画像を生成するためには、その縮小処理ための補間や間引き処理を処理しなければならず、その処理量は復号した画像データの画素数に比例するからである。かかる点、本実施形態によれば、高階層モードを指定した場合、符号化画像データからダイレクトに復号できる解像度は6種類となり、縮小のための処理量が少ない画像を復号できるので、目標とする解像度を得るための処理量を少なくできる。
なお、実施形態では、デジタルカメラが有する最高解像度を4000×3000画素として説明したが、これは一例であって、この解像度に本発明が限定されるものではない。また、実施形態では、マクロブロックのサイズを4×4個のブロックとしたが、これもこれに限られるものではない。つまり、中間解像度は、このマクロブロックのサイズによって決まるので、上記実施形態はその一例を示したに過ぎない。かかる点は、以下に説明する第2の実施形態以降でも同様である。
[第2の実施形態]
上記第1の実施形態では文書作成ソフト上で画像を挿入する際、挿入画像サイズに基づき、復号対象の符号列を決定する例を説明した。
文書作成ソフトが管理する画像ファイルの中には、リサイズ画像の符号列を含まない場合、すなわち、低階層モードの画像ファイルも存在し得る。このような画像ファイルが存在すると、その後の文書作成ソフトによる編集作業にかかる時間が増えることが予想される。そこで、本第2の実施形態では、低階層モードの符号化画像データファイルを探し出し、それを高階層モードの画像ファイルに一括更新する例を説明する。
図26は本実施の形態における文書作成ソフトウェアの処理フローを示している。ユーザーが画像符号化データの高階層化を指示した場合、記憶装置(ハードディスク)に記憶され、文書作成ソフトウェアが管理している符号化画像データファイル数(N)をカウントする(ステップS2601)。カウントが終了すると、カウンタiを0にセットする(ステップS2602)。
次いで、i番目の符号化画像データファイル中のヘッダ部を解析してリサイズ画像の有無を調べる(ステップS2603)。すなわち、ファイルヘッダに格納されている階層モードが低階層モードであるか否かを判定する。
着目画像ファイルにリサイズ画像データの符号化データが格納されている場合には、そのファイルについて更新の必要がないので、処理をステップS2608に進める。そして、カウンタiとファイル数Nを比較し、i<Nであれば、未チェックのファイルが存在することになるので、ステップS2609で変数iを“1”だけインクリメントし、処理をステップS2603に戻す。
一方、ステップS2603にて、i番目の符号化画像データファイルがリサイズ画像のを含まない、すなわち、ファイルヘッダに格納されている階層モードが低階層モードであると判定された場合、処理はステップS2604に進む。ステップS2604では、一旦、オリジナル画像(最高解像度)まで復号処理を行なう。復号方法については第一の実施の形態で示しているのでここでは説明を割愛する。そして、ステップS2605にて、復号した画像データから、リサイズ画像データを生成する。実施形態では、4000×3000画素の画像データから、1/2の解像度の画像をリサイズ画像としているので、リサイズ画像は2000×1500画素の解像度となる。
次いで、ステップS2606に進んで、リサイズ画像を圧縮符号化する。この圧縮符号化については第1の実施形態で示しているのでここでは説明を割愛する。リサイズ画像の符号化データを生成したら、原画像の符号化データファイルに、リサイズ後の画像データの符号化データを格納することで更新する(ステップS2607)。このとき、ファイルヘッダには、高階層モードであることを示す情報も格納する。そして、カウンタiと画像符号化データ数Nの大小判定を行い(ステップS2608)、カウンタの方が小さければ、ステップS2609の処理を経て、ステップS2603以降の処理を繰り返す。
こうして。ステップS2608にて、管理対象の全画像ファイルに対する処理を終えたと判断した場合、本処理を終了する。
以上のように、1回の操作でもって、複数の画像ファイルを高階層モードの画像ファイルに変換することができるので、その後の編集にかかる作業効率を高めることができる。
なお、上記機能は、デジタルカメラにも搭載しても良い。すなわち、一旦、低階層モードで撮影し、メモリカードに保存した画像データファイルを、ユーザの指示に従って高階層モードの画像データファイルの形式に更新しても良い。
[第3の実施形態]
第1の実施形態においては、文書へ写真を挿入する方法を示した。本第3の実施形態においては、文書作成ソフトに管理されている画像符号化データを割り付け印刷をする場合の処理を示す。
図27は本第3の実施形態における文書作成ソフトの一覧印刷処理(一般にNin1の印刷と呼ばれる)のフローチャートである。以下、同図に従って説明する。
ステップS2701では、CPUは、ユーザから印刷すべき符号化画像データファイル(その画像ファイルの数をNとする)の指示、及び、印刷指示を受け付ける。この指示を受けつけると、CPUはプリンタに搭載された記録紙のサイズと、指示された画像の枚数Nに基づき、1枚の記録紙に印刷される画像の割りつけ情報を決定する(ステップS2702)。この割りつけ情報とは、記録紙上の水平、垂直方向の画像数と、各画像の印刷サイズ(第2の実施形態における写真挿入領域サイズに対応する)が含まれる。
次いで、CPUは、ステップS2703にて、変数iを“0”クリアする。
そして、i番目の画像ファイルを解析し、印刷サイズを下回らず、最低の解像度の画像を復号するための符号列、周波数を決定する(ステップS2704)。
このステップS2704を更に詳しく説明すると次の通りである。
第1の実施形態で説明したように、本実施形態におけるデジタルカメラで撮像した画像ファイルのオリジナルの解像度は、L、M、Sの3通りのいずれかである。従って、印刷サイズを下回らず、最低の解像度の画像を復号するための符号列は、L,M,Sに依存する。
ステップS2705では、復号対象として決定した符号列をリードし、復号処理を行なう。復号して得られた画像データは、一旦、パーソナルコンピュータが有するRAMもしくはハードディスクに出力し、保持しておく(ステップS2706)。
次に、ステップS2707に進み。カウンタ値iと画像数Nを比較し、i<NであればステップS2708にてカウンタ値iを“1”だけインクリメントし、ステップS2704に処理を戻す。
また、ステップS2707で、i=Nであると判定した場合、一覧印刷すべき画像の復号処理が済んだことになるので、ステップS2708に進み、先に決定したレイアウトに従って、各復号画像データを配置する。このとき、復号画像の中に印刷サイズを超えるものがある場合、そのサイズにまでリサイズする。
この後、ステップS2710にて、レイアウト配置した結果をプリンタに出力し、印刷を行なわせる。
以上の説明からも容易にわかるように、印刷処理においてCPUにかかる負荷が一番大きいのは、ステップS2705における復号処理である。従って、復号処理で用いる符号化データ量が少ないほど、高速に復号できる。先に説明したように、本実施形態では、高階層モードで符号化された画像データファイルには、低階層モードで符号化された画像データファイルよりも、ダイレクトに復号できる画像サイズの種類は多い。従って、一覧印刷するときの1つの画像の印刷サイズが決まったとき、高階層モードの画像ファイルの方が、低階層モードの画像ファイルよりも、印刷サイズに近い解像度を見つけやすくなり、復号にかかる負担を最小限に抑制することが可能になる。
[第4の実施形態]
上記第1乃至第3の実施形態では、デジタルカメラに符号化処理部を搭載する例を説明したが、本第4の実施形態では原稿画像を読取るイメージスキャナに適用した例を説明する。この場合の符号化処理部は、イメージスキャナの内部に設けても構わないし、パーソナルコンピュータ等にインストールされるスキャナドライバで実現しても構わない。本第4の実施形態では前者を想定し、説明する。
一般に、原稿(紙)の紙サイズの規格にはA版やB版があることが知られているが、そのアスペクト比は“1”ではない。例えば、A版であるA4サイズの紙の場合、約21×30cmのサイズであり、そのアスペクト比は他のA版でも同様であり、B版にも言えることである。
説明を単純化させるため、及び、画像処理の処理を簡単にするため、原稿のアスペクト比は3対4の関係にあるものとして説明する。
今、原稿のサイズを仮に“1”と定義し、この原稿を2枚読込み、1枚の同サイズの記録紙に、その読取った2つの原稿画像を印刷する2in1形式で印刷する場合を考察する。2つの原稿を読み取って、同サイズの1枚の記録紙に、その余白面積を最小にして印刷する場合には、2つの原稿画像を水平、垂直とも縮小率「3/4」で縮小させ、且つ、90°回転させて印刷すると良い。例えば、原稿がA4の3/4のサイズは約15×20cmであるので、2つの縮小画像を90°回転させれば、1枚のA4のサイズに2枚の画像が配置できる。同様に、8in1の場合、2行4列に各画像を配置することになるが、余白を最小限にするためには回転が必要である。
一方、4in1形式(2行2列配置)で印刷する場合、4つの画像を水平、垂直とも1/2に縮小するものの、回転は不要である。9in1(3行3列配置)の場合には水平垂直とも1/3に縮小するものの、やはり回転は不要である。16in1でも同じである。
因に、Nin1におけるNに対して回転が必要か否かは、具体的には次のようにして決めればよい。すなわち、Nを因数分解し、N=N1×N2を得る(N1,N2は正の整数である)。そして、原稿の水平方向(仮に短手方向)をN1で当分割し、垂直方向(長手方向)をN2で等分割した場合の1つの格子のアスペクト比(第1のアスペクト比)を求める。また、これとは逆に、原稿の水平方向をN2で当分割し、垂直方向をN1で等分割した場合の1つの格子のアスペクト比(第2のアスペクト比)を求める。そして、第1,第2のアスペクト比のうちいずれが、原稿サイズのアスペクト比(もしくはその逆数)に近似するかで、レイアウトが決定でき、且つ、回転が必要かを判定できる。
次に、読取った原稿画像データを圧縮符号化したファイルとして記憶管理し、ユーザの指示に従い印刷する場合を考察する。
1枚の記録紙に1枚の画像を印刷する場合には、オリジナルの解像度の画像データを復号し、そのまま印刷処理すれば良いのは容易に理解できよう。
一方、2in1や8in1形式で印刷する場合、最大でもオリジナルの画像の水平、垂直とも3/4のサイズの画像データを生成しておき、それを90°だけ回転させた上で符号化しておくと、印刷時のCPUは回転処理をしなくても済むので、それにかかる負荷は最小限にでき、印刷処理も高速なものとすることができる。
そして、4in1や8in1、9in1形式で印刷する場合には、最大でもオリジナルの画像の水平、垂直とも1/2のサイズの画像データを、回転無しで符号化しておけば、印刷時のCPUにかかる負荷を最小限にできることになる。
上記を踏まえて、本第4の実施形態を説明する。
図28は、本第4の実施形態のイメージスキャナ装置のブロック構成図である。
本装置は、2801は不図示のスキャン部から原稿画像データ(以下、単に画像データという)を入力する入力部、2802はリサイズ部、2803は回転部、2804は符号化部、2805は多重化部、2806は符号化データファイルを生成し、ファイルヘッダを生成するヘッダ生成部である。生成された符号化画像データファイルは、ホストコンピュータに送信するものとするが、メモリカード等の記憶媒体に格納しても良く、その出力先は問わない。
さて、入力部2801が画像データを入力すると、その画像データをリサイズ部2802、及び、符号化部2804に出力する。リサイズ部2802は、入力した画像データから水平及び垂直方向に、1/2、3/4の解像度の画像データを生成する。以下、オリジナルの画像データに対して1/2、3/4の解像度の画像データを単に「1/2解像度の画像データ」、「3/4解像度の画像データ」という。
リサイズ部2802は、1/2解像度の画像データを符号化部2804に出力し、3/4解像度の画像データを回転部2803に出力する。回転部2803は、入力した3/4解像度の画像データを90°回転し、その回転後の3/4解像度の画像データを符号化部2804に出力する。
符号化部2804は、第1の実施形態で説明した図1の構成を有するものであり、入力したオリジナルの画像データ、1/2解像度の画像データ、及び、回転後の3/4解像度の画像データをそれぞれ符号化し、それぞれの符号化データを多重化部2805に出力する。多重化部2805は、入力した3種類の解像度の符号化画像データを予め設定された順序に連結し、ヘッダ生成部2806に出力する。ヘッダ生成部2806は、多重化部2805から入力した符号化データにファイルヘッダを付加する。このとき、ヘッダ生成部2806は、3つの解像度の画像が含まれていることを示す多階層モードの情報、及び、オリジナルの解像度、1/2解像度、3/4解像度それぞれの符号化データの先頭アドレス位置(ビット位置)をファイルヘッダに格納し、1つのファイルとして出力する。
次に、ホストコンピュータにおける印刷処理を図29のフローチャートに従って説明する。説明を単純なものとするため、ここでは2in1、4in1について説明する。また、印刷対象の画像ファイルは、ホストコンピュータのハードディスク等の記憶装置に既に格納されているものとして説明する。
先ず、ステップS2901では、CPUは、ユーザから印刷すべき画像ファイル(その画像ファイルの数をNとする)の指示、及び、印刷形式(Nin1のN)指示を受け付ける。この指示を受けつけると、CPUはプリンタに搭載された記録紙のサイズと、指示された画像の枚数Nに基づき、1枚の記録紙に印刷される画像の割りつけ情報を決定する(ステップS2902)。この割りつけ情報とは、記録紙上の水平、垂直方向の画像数と、各画像の印刷サイズ(第2の実施形態における写真挿入領域サイズに対応する)が含まれる。
次いで、CPUはステップS2903にて、Nin1のNに基づき、符号化データファイルのオリジナルの解像度、1/2解像度、3/4解像度の符号化データのうち、いずれを復号対象とするかを決定する。
この後、ステップS2904にて、CPUは、変数iを“0”クリアする。
そして、CPUは、i番目の画像ファイルを解析し、先に決定した復号対象画像データを復号することで、復号画像データを生成する(ステップS2905)。そして、CPUは、生成した復号画像データをパーソナルコンピュータが有するRAMもしくはハードディスクに出力し、保持しておく(ステップS2906)。
次に、ステップS2907に進み。カウンタ値iと画像数Nを比較し、i<NであればステップS9708にてカウンタ値iを“1”だけインクリメントし、ステップS2905に処理を戻す。
また、ステップS2907にて、i=Nであると判定した場合、一覧印刷すべき画像の復号処理が済んだことになるので、ステップS2709に進み、先に決定したレイアウトに従って、各復号画像データを割り付け配置処理を行なう。
この後、ステップS2710にて、レイアウト配置した結果をプリンタに出力し、印刷を行なわせる。
ここで、ステップS2909の配置処理を図30のフローチャートに従って説明する。
ステップS3001では、印刷指示された形式が2in1であるか否かを判定する。2in1ではない、すなわち、4in1であればそのまま復号した画像を2in1形式に挿入する。一方、2in1であると判定した場合、処理はステップS3002に進み、着目符号化画像データファイルのヘッダを調べ、回転処理済みであることを示す情報があるか否かを判定する。このステップS3002を設けた理由は、2in1形式で印刷対象として指定された符号化画像データファイルが、先に示した回転処理を経ないで生成された場合に対処するためである。従って、回転処理をしていないと判断した場合には、ステップS3003にて、復号画像データに対して90°の回転処理を行なう。
なお、上記は2in1、4in1の例であったが、例えば8in1や9in1、16in1に対応させる場合、ステップS2905では、Nin1で決まる1枚の画像の印刷サイズを下回らず、最小の解像度(画素数)の画像を得るための符号列であって、尚且つ、回転処理を不要とする符号列を復号対象して決定し、復号すれば良い。そして、その後で、その復号画像データを、印刷領域のサイズに合致するようにリサイズすればよい。
以上説明したとおり、本第4の実施形態によれば、90°回転して印刷する画像と回転無しの画像に適したそれぞれの符号化データと、オリジナル画像データの符号化データと多重化したファイルを生成できる。従って、Nin1形式の印刷する場合には、印刷処理を行なうCPU等の処理にかかる負荷を軽減し、高速な印刷処理が可能になる。
なお、先に説明した第1乃至第3の実施形態では、回転処理を行なわなかったが、リサイズ後の画像データに対して画像処理部2203にて回転処理を行わせて符号化しても良い。
[第5の実施形態]
最近のデジタルカメラには本体の姿勢を検出し、撮像画像を圧縮符号化したファイル中にその姿勢情報を含めるものがある。デジタルカメラの液晶表示装置に表示する際や、その画像ファイルをPC上に表示する際に、正立した画像を表示するためである。
しかし、かかる姿勢情報をファイルに格納するとしても、デジタルカメラ等の処理部が液晶表示部に表示する際、もしくは、パーソナルコンピュータのCPUが表示画面にその画像を正立させて表示する際には、画像の回転処理を行なう必要がある。
そこで、本第5の実施形態においては、撮影時の姿勢に応じて、原画像と、回転させたリサイズ画像を圧縮保存し、表示時に機器が自身の向きを判定して最適な符号列を解像度を復号する方法を示す。
図31は本第5の実施形態におけるデジタルカメラのブロック図を示す。同図において、第1の実施形態のブロック図(図22)をベースとしており、同参照符号は同じ機能を有するものとしてその説明は省略する。図31と図22との相違は、階層モード指定部2210の代りに高速回転表示対応モード指定部3101が置き換わった点、デジタルカメラの姿勢を検出する姿勢センサ3102、表示部3103が新に加わった点である。
図32は図31のブロック図から構成されるデジタルカメラシステムの処理手順を示している。第1の実施形態におけるデジタルカメラシステムの処理フロー(図23)と同じ処理には、同参照符号を付した。相異点は、ステップS3201、S3202、S3203とS3204である。従って、以下ではステップS3201以降について説明する。
第1の実施形態と同様、撮影画像取得後に、系列変換情報SCや符号列形成情報CFが決定されると、処理はステップS3201に進む。このステップS3201では、高速回転表示対応モード指定部3101で設定されたモード情報(メモリ2209に格納されているものとする)を取得する。もし高速回転表示対応モードがオフであれば(ステップS3202でNo)、撮影した画像(原画像)を画像圧縮部に転送する。一方、高速回転表示対応モードがオンであれば(ステップS3202でYes)、原画像をコピーして、コピーした画像をリサイズし、回転させた画像(リサイズ画像)を生成する(ステップS3203)。ここでリサイズの比率については、画像のサイズと表示領域のサイズにより決められる。例えば、撮像したオリジナルの画像が4000×3000画素であり、表示部3103の表示領域の解像度が水平方向640画素、垂直方向480画素であるとする。
ポートレートの姿勢(カメラ本体を縦向きに構えた)で撮像した画像を表示する場合、表示部3103を最大限に利用してポートレート画像を表示するためには、480×360画素のサイズの画像を生成する必要がある。つまり、4000×3000画素の画像から、480×360画素のサイズを生成すれば良い。但し、この大きさの画像を回転表示用の画像の原画像と考えてもよいが、これはカメラの表示部3103に限ったものであり、例えばPCに表示する場合にも対処しようと考えるとこのサイズは小さい過ぎる。そこで、本第5の実施形態では、このサイズの4倍のサイズ、すなわち、1920×1440画素のサイズにリサイズし、回転するようにした。CPU2208が表示部3109にポートレートを正立して表示させるためには、符号化データのDC、ACDC成分の符号化データを復号した後リサイズすればよい。
このリサイズ&回転処理を終えると、処理はステップS2313に進み、原画像とリサイズ後の画像を画像圧縮する。この画像圧縮処理の後、リサイズ・回転処理を行なったか否かを示す情報をヘッダに格納し、1つのファイルに多重化して出力する。
続いて本体の液晶画面に画像を表示する方法を説明する。図33のフローチャートにおいて、ユーザーから表示部3103(一般に液晶)の表示画面への撮影画像の表示が指示されると(ステップS3301)、表示形式情報を取得する(ステップS3302)。ここで表示形式とは1in1、4in1表示のいずれかとする。表示形式情報の所得を終えると、復号対象の符号列,周波数帯域を決定する(ステップS3303)。ここのステップについてはのちほど詳細に説明をする。復号対象の符号列,周波数帯域が決まると、復号対象の画像数Nをセットし、復号画像数のカウンタi=0とセットして(ステップS3304)、i番目の画像を復号して(ステップS3305)、メモリ2209へ出力する(ステップS3306)。そして、ステップS3307にて、i<Nであるか否かを判定する。i<Nであると判定した場合、ステップS3309に進んで、iを“1”だけインクリメントし、ステップS3305に処理を戻す。また、もしステップS3307で判断結果がi=Nであると判定した場合、メモリ2209へ蓄積した復号画像を表示部3103へ出力し表示する(ステップS3308)。
次に、上記のステップS3302の詳細な説明を図34のフローチャートを用いて説明する。
ステップS3302へ処理が進むと、現在のデジタルカメラ本体の向きを向き姿勢センサ3102から取得する(ステップS3401)。本体の向きが通常の向き(ランドスケープを撮影する姿勢)であれば(ステップS3402でYes)、復号対象を原画像と決定する(ステップS3403)。一方、デジタルカメラ本体がポートレート撮影する姿勢にある場合、復号対象としてリサイズ画像と決定する(ステップS3404)。復号対象の画像が決定したら、ステップ3302で取得した表示形式を基に、復号対象として最適な周波数帯域を決定する(ステップS3405)。この決定方法は第一の実施の形態と同様である。
以上説明したとおり、リサイズした画像を回転させて画像圧縮して保存することで、カメラ本体が、ポートレート、ランドスケープのいずれの姿勢きでも最適な画像をスムーズに表示することが可能となる。
[第6の実施形態]
第5の実施形態では撮像と表示が同一機器で行う場合について説明した。本実施の形態では、撮像機器と表示機器が異なる場合の画像格納方法について説明する。具体的には、デジタルカメラや携帯電話で撮影した画像のアップロードをネットワーク(インターネット)を介して受け付け、リクエストに応じて保管してる画像をクライアント機器に送信するサーバー/クライアントシステムを想定する。クライアントの機器の液晶表示領域は機器毎に異なるため、アップロードされた画像は必ずしもダウンロードする機器の表示領域には適当でないこともある。そこで本第5の実施の形態におけるサーバーは、アップロードされた画像を、要求した機器に対応可能な大きさへリサイズして圧縮符号化する。さらに受信側の機器が回転表示することも想定して、回転した画像も併せて1つのファイルにして送信する。なお、一旦、リサイズした画像データは、オリジナル画像と対応づけて保存する。次回、同じ解像度の表示装置を持つ機器から要求があった場合に、そのリサイズ&圧縮符号化したファイルを活用するためである。
サーバーは、予め多数の画像ファイルが格納、管理するデータベース(ハードディスク等の記憶装置で構成する)を有するものとする。ここでは説明を単純なものとするため、データベースに格納されている画像ファイルが示す画像は水平方向4000画素、垂直方向3000画素の解像度であるものとする。このデータベースに登録される画像データは、接続した端末からアップロードされるものとする。
また、ここでは、サーバにネットワークを介して接続する端末は、図35に示すような、300×600画素の解像度の表示画面を持つ携帯電話とする。この携帯電話は、表示領域のラスター走査は縦向きに持ったとき、左上から右下に進むように設計されている。つまり、ユーザが図35に示す向きで携帯電話を持っている時には画像の回転は不要で、90°回転させて持っている場合には画像の回転が必要となる。なお携帯電話の画像サイズ、ラスター走査向きから決まる本体の向きについては、携帯電話がサーバに接続した際に、サーバー上に通知されるものとする。以下の説明ではラスター走査が左上から右下へ進むように本体を持った場合の向き、つまり縦向きに持った場合の向きを「通常表示方向」、左下から右上へ進むように本体の向き、つまり横向きに持った場合の向きを「回転表示方向」とする。以下、本第6の実施形態のサーバの処理手順を図36のフローチャートに従って説明する。
図36はサーバ内のCPUが実行する画像配信処理プログラムの処理手順を示している。なお、以下で説明における表現「垂直方向」とは表示画面の長手方向を示し、「水平方向」とは表示画面の短手方向を示すものとして説明する。また、以下の説明では、サーバに接続した通信機器(実施形態では携帯電話)は、サーバに登録された画像ファイルの1つを既に選択しているものとする。また、通信機器(実施形態では携帯電話)の表示画面の解像度に合致するリサイズ後の画像ファイルが存在しないものとして説明する。
先ず、サーバのCPUは、サーバに接続した通信機器(携帯電話等)から、その通信機器の本体情報を取得する(ステップS3601)。ここで本体情報とは、その通信機器の表示画面の表示領域のサイズと、表示画面の向きである。
次に、CPUは通常表示方向に必要な画素数を算出する(ステップS3602)。この計算については、次に述べるとおりである。画像の縦方向の画素数を、その機器の表示画面の表示領域の縦方向の画素数に縮小する比率(r1)を算出する。そして、その比率で画像の横方向を縮小した際、表示領域に収まれば、その比率を用いてリサイズする。一方で表示領域に収まらない場合、画像の横方向の画素数を、表示領域の横方向の画素数に縮小する比率(r2)を算出し、その比率で原画像の縦方向も縮小する。
本第6の実施形態の例では、縦方向での比率r1=600/3000=0.2である。従って、その比率で画像の横方向を縮小すると、4000×0.2=800画素となり、接続した機器(携帯電話)の表示領域の横画素数300画素より大きく、比率r1を用いることはできない。
次に比率r2=300/4000=0.075を算出する。従って、その比率r2で画像の垂直方向を縮小すると、3000×0.075=225となる。これは接続した機器の表示領域の縦方向600画素より小さいので、利用する比率をr2として決定する。この結果、通常表示方向の画像として300×225画素の画像データを生成することを決定する(図35の参照符号3501を参照されたい)。
続いて、処理はステップS3603に進み、回転表示方向において必要となる最大画像の画素数を算出する。これは通常表示方向と同様な算出を行い、400×300画素となる(図35の参照符号3502を参照されたい)。
サイズの算出が終了したら、通常表示方向の画像を生成するためにリサイズを行う(ステップS3604)。次に、回転表示方向の画像を生成するためにリサイズを行い、得られたリサイズ画像を回転させる(ステップS3605)。そのあと、2つのリサイズ画像に対して符号化を行う(ステップS3606)。符号化の処理は既に説明した実施形態と同じであるものとし、その説明は省略する。また、このとき、いずれが通常表示方向/回転表示方向の画像であるかを示す情報をヘッダに含め、1つのファイルを生成し、保存する(ステップS3607)。この後、ステップS3608にて、要求元の機器(携帯電話)に、生成したファイルを送信する。
携帯電話側で受信した後の表示処理方法については、第5の実施形態とほぼ同様であるので説明を割愛する。
以上説明したとおり、第6の実施形態にいよれば、サーバー側で回転あり/なしの2つの画像を圧縮しファイル化し保存することで、これを受信した携帯電話は本体の回転あり/なしいずれの場合でも画像をスムーズに表示することが可能となる。
第2の実施の形態において、画像符号化データを復号してから再エンコードする手法として文書作成ソフトが管理するフォルダ内を対象としていることを示したが、本発明の範囲はこの例には限られない。例えば、PDFのような1ファイル内に画像符号化データを複数種類格納できるフォーマットの内部を探索して、適宜再エンコードする方法も本発明の範疇である。
画像符号化データの組の中に回転された画像が入っていない場合、必要であれば回転させて表示する方法も本発明の範疇である。
2つの画像符号化データを組にすることを前提に説明しているが、3つ以上の場合でも本発明の範疇にはいる。
上記実施形態では2つの符号列を1ファイルにまとめる方法を説明しているが、別々のファイルにして2つのファイルがセットであることを示す管理情報を持つことも本発明の範疇である。
以上の実施形態に相当する処理をコンピュータに実行させるコンピュータプログラムでもって実現しても構わない。また、通常、コンピュータプログラムは、CD−ROM等のコンピュータ可読記憶媒体に格納されており、それをコンピュータが有する読取り部(CD−ROMドライブ等)にセットし、システムにコピーもしくはインストールすることで実行可能になる。したがって、かかるコンピュータ可読記憶媒体も本発明の範疇にあるのは明らかである。