以下、図面を参照して実施の形態の一例を詳細に説明する。図1には本実施の形態に係る画像処理装置10が示されている。画像処理装置10には、画像処理装置10の各部の動作を制御する装置制御部12と、画像を入力する画像入力部14と、画像を出力する画像出力部16と、操作パネル18とが設けられており、これらはバス20を介して互いに接続されている。
画像入力部14は、例えば、セットされた読取対象の文書(例えば紙原稿)を光学的に読み取って画像データを取得するスキャナ装置としてもよいし、CD−ROMやUSBメモリ等の可搬型メモリから画像データを取得するインタフェース、或いは外部装置からネットワーク等を介して画像データを取得する通信手段であってもよい。
なお、本実施の形態では、画像入力部14に入力された画像データは、縮小処理及び変換処理等の画像処理が施されて画像出力部16に入力される。
画像出力部16は、例えば、入力された画像データが表す画像を記録用紙上に形成する画像形成装置であってもよいし、該画像データが表す画像をLCD等の表示画面に表示することにより画像を出力する表示装置であってもよい。
操作パネル18は、操作画面を表示するための表示部、及びテンキーやタッチパネル等から成り利用者による操作を受付ける操作受付部が設けられている。
装置制御部12はマイクロコンピュータ等から成り、CPU12A、メモリ12B、HDD(Hard Disk Drive)やフラッシュメモリ等から成る不揮発性の記憶部12Cが設けられている。記憶部12Cには、前述した変換処理プログラム、及び変換処理プログラムを実行するためのプラットフォームとして機能するオペレーティング・システム(OS)のプログラムが各々記憶されている。
図2は、本実施の形態に係る画像処理装置10の機能構成図である。図2において、図1と同一の符号を付した構成要素は同一の構成要素であるため、説明を省略する。
図2の機能構成図に示すように、画像処理装置10は、画像入力部14、画像出力部16、及び操作パネル18の他に、処理制御部30、第1変換部32、及び第2変換部40を備えている。第1変換部32及び第2変換部40では、いずれにおいても変換テーブルを用いた処理が行われるが、本実施の形態では、第1変換部32で用いられる変換テーブルを第1変換テーブル36と呼称し、第2変換部40で用いられる変換テーブルを第2変換テーブル44と呼称して区別して説明する。処理制御部30は、第1変換部32及び第2変換部40のいずれかに対して、縮小処理の縮小率及び変換処理の内容を規定する処理条件を示す処理パラメータと、画像入力部14から入力された画像データとを入力して、処理パラメータにより規定される画像処理を行わせる。以下では、第1変換部32又は第2変換部40に入力される画像処理前の画像データを入力画像データと呼称する。処理制御部30、第1変換部32、及び第2変換部40は、装置制御部12のCPU12Aが、変換処理プログラムを実行することにより実現される。
第1変換部32は、第1テーブル値生成部34、第1変換テーブル36、及び第1変換処理部38を備えており、入力画像データに対して縮小処理及び変換処理を行って出力する。本実施の形態では、該変換処理には、ビット数変換処理、色空間変換処理、及び面点変換処理が含まれる。
縮小処理は、本実施の形態では、画像データを主走査方向(画像の水平方向)に平均値法で且つ1/N(ここでは、Nは自然数である)の縮小率で縮小する処理をいう。すなわち、本実施の形態では、サンプリングして(画素を間引く)縮小するのではなく、縮小元の複数の画素データから平均値などの演算処理を行って縮小する。また、ビット数変換処理は、1画素当たりのビット数を変換する処理であり、入力ビット数Biを出力ビット数Boに変換する処理をいう。なお、例えば、1ビットの画像データから8ビットの画像データに変換することを、2階調の画像データを256階調の画像データに変換すると言い換えても良い。
色空間変換処理は、周知の色空間変換処理であって、この色空間変換処理によりチャンネル数も入力チャンネル数Ciから出力チャンネル数Coへ変換される。例えば、YMCK色空間からYCbCr色空間に変換すると、4チャンネルから3チャンネルに変換されることになる。なお、後述するように、K成分をCMY各成分に重畳させてから変換処理する場合には、CMYK4チャンネルを、まずK成分をCMY成分に重畳してCMY3チャンネルにした後、YCbCr3チャンネルへ変換する。
面点変換処理は、面順次形式の画像データを点順次形式の画像データに変換する処理をいう。
第1テーブル値生成部34は、処理制御部30から入力された処理パラメータに基づいて、第1変換処理部38が用いる第1変換テーブル36のテーブル値を求めて、この値を第1変換テーブル36に設定する。
より具体的には、第1テーブル値生成部34は、処理制御部30から入力された処理パラメータ(N,Bi,Bo,入出力色空間の種類,第1変換テーブル36により一括で変換する画素数を規定するパラメータα(αは1以上の整数))に基づいて、α×N×Bi×Ciビット(=α×N画素分のビット数)の入力値と、該入力値をBiからBoへのビット数変換及び色空間変換処理(色空間変換処理はチャンネル数CiからCoへ変換するチャネル数変換処理も伴う)を行った結果としての、α×Bo×Coビット(=α画素分のビット数)の出力値とを対応付けた変換テーブルのテーブル値を生成し、第1変換テーブル36に設定する。
第1変換処理部38は、図3に示すように、入力画像データからα×N画素のデータを取り出し、第1変換テーブル36を用いて、α×N画素のデータをα画素のデータに変換して出力する。言い換えれば、第1変換テーブル36からα×N画素の入力画像データに相当する入力値に対応する出力値を取得して出力する。これを入力画像データの全ての画素が処理されるまで繰り返し、1/Nの縮小率で縮小されビット数変換などの変換処理がされた画像データを出力する。
より具体的には、第1変換処理部38は、入力画像データが点順次形式の場合には該入力画像データを先頭から順に、α×N×Bi×Ciビット(α×N画素のデータ)のデータを取り出して第1変換テーブル36を用いて、該取り出したデータに相当する入力値に対応した出力値(α×Bo×Coビットのデータ、すなわち、α画素のデータ)を出力する。また、入力画像データが面順次形式の場合には、まず、入力画像データを構成する各チャンネル毎の画像データのそれぞれからα×N×Biビットのデータを読み出し、それらを連結して(α×N×Bi)×Ciビットのデータにしてから上記点順次の場合と同じように第1変換テーブル36を用いて処理する。この場合、第1テーブル値生成部34は、面順次形式の入力チャンネル毎のデータを連結した入力値と、点順次形式のデータの出力値とを対応付ける変換テーブルのテーブル値を生成する。
更に、色空間変換処理がCMYK色空間から別の色空間に変換するものである場合には、第1変換処理部38は、まずK成分をCMY成分に重畳してから、第1変換テーブル36による変換処理を行う。重畳方法は、例えば、Bi=1の場合にはOR処理で、それ以外の場合には任意のUCR(Under Color Removal:下色除去)演算やその演算と同等なテーブル処理により行う。後者の場合、例えば、Kを上限値制限しながらCMYに加算するようにしてもよいし、K/C、K/M、K/Yをそれぞれ入力値とする重畳用のテーブルを作って重畳処理するようにしてもよい。なお、これら重畳方法は一般的な技術であるため、ここでは、これ以上の説明は省略する。
なお、第1変換処理部38は、後述する第2変換処理部46の分割変換処理部46Aとは異なり、α×N画素のデータを取り出した場合は、該取り出したデータを分割することなく、1つの変換テーブルで変換して出力するため、以下では、第1変換処理部38を非分割変換処理部と呼称する場合もある。
第2変換部40は、第2テーブル値生成部42、第2変換テーブル44、及び第2変換処理部46を備えており、入力画像データに対して上記縮小処理及び変換処理を行って出力する。
第2テーブル値生成部42は、処理制御部30から入力された処理パラメータに基づいて第2変換処理部46が変換処理に用いる第2変換テーブル44のテーブル値を求めて、第2変換テーブル44を設定する。第2変換テーブル44は、1つで足りる場合もあるし、複数必要な場合もある。
より具体的には、第2テーブル値生成部42は、処理制御部30から入力された処理パラメータ(N,Bi,Bo,入出力色空間の種類,出力1画素の分割処理数k(kは2以上N以下の整数))に基づいて、1画素分の出力画像データを求めるために必要なN画素分の入力画像データを、それぞれが少なくとも1画素が含まれるようにk個の分割データに分割したときの、各k個の分割データの各々に含まれる画素数に対応する第2変換テーブル44のテーブル値の各々を生成する。各分割データに含まれる画素数は同じであっても、異なっていても良い。また、後述するように、第2変換部40では、1個以上k個以下の変換テーブルが用いられるが、本実施の形態では、第2変換部40で用いられる変換テーブルの各々を第2変換テーブル44と呼称する。第2テーブル値生成部42は、第2変換テーブル44の各々について、対応する分割データに含まれる画素数分のビット数を入力値とし、入力値にBiからBoへのビット数変換及び色空間変換処理を行った結果としての1画素分のデータを出力値とするテーブル値を生成する。
第2変換処理部46は、分割変換処理部46A及び合成部46Bを備えている。分割変換処理部46Aは、図4に示すように、入力画像データからN画素分のデータを取り出し、これをk個に分割した分割データの各々について、第2変換テーブル44を用いて1画素のデータに変換し、合成部46Bは、変換されたデータの各々を、1/Nの縮小率で縮小された1画素のデータとなるように合成して出力する。第2変換処理部46は、分割変換処理部46A及び合成部46Bによる処理を、入力画像データの全ての画素が処理されるまで繰り返し、1/Nの縮小率で縮小されビット数変換などの変換処理がされた画像データを出力する。このように第2変換テーブル44によって変換して1個のデータを分割データ毎に生成し、これらを合成して最終的に1画素のデータを生成するが、ここでは第2変換テーブル44による変換後合成前の各データも合成後の1画素のデータとビット数が変わらないため、変換後合成前のデータの各々についても1画素のデータと呼称する。
ここで、第2変換処理部46の処理を具体的に説明する。第2変換処理部46の分割変換処理部46Aは、入力画像データが点順次形式の場合には該入力画像データを先頭から順に、N×Bi×Ciビット(N画素のデータ)を取り出し、このデータをk個に分割(分割は、それぞれが1画素以上となるように分割する。また、1画素のビット列の途中では分割しない、下記面順次形式でも同様)したときの各分割データのそれぞれについて第2変換テーブル44の対応する第2変換テーブル44から、該分割データに相当する入力値に対応する出力値を取得し、合成部46Bは、これらk個の出力値を合成して、1画素分の画像データ(Bo×Coビット)として出力する。また、入力画像データが面順次形式の場合には、まず、入力画像データを構成する各チャンネル毎の画像データのそれぞれからN×Biをk個に分割したときの各ビット列を読み出し、各チャンネル毎のビット列を連結したデータを分割データとして、上記点順次の場合と同じように第2変換テーブル44を用いて処理する。この場合、第2テーブル値生成部42は、面順次形式の入力チャンネル毎のデータが連結された入力値と、点順次形式の出力値とが対応付けられた第2変換テーブル44のテーブル値を生成する。
なお、色空間変換処理がCMYK色空間から別の色空間に変換するものである場合には、第2変換処理部46の分割変換処理部46Aは、第1変換処理部38と同様に、まずK成分をCMY成分に重畳し、CMY色空間から出力色空間へ変換する。
なお、ここでは、第1変換部32及び第2変換部40が行う画像処理のうちの変換処理には、ビット数変換処理、色空間変換処理、及び面点変換処理が含まれる例について説明したが、これに限定されない。
例えば、変換処理としてビット数変換処理のみを行う場合には、処理パラメータとして入出力チャンネル数Ci及びCoは省略される。この場合において、第1変換部32の第1テーブル値生成部34は、α×N×Biビットの入力値と、該入力値をBiからBoへのビット数変換を行った結果としての、α×Boビットの出力値とを対応付けたテーブル値を生成して第1変換テーブル36に設定し、第1変換処理部38は、入力画像データからα×N×Biビット(=α×N画素)のデータを取り出して、これを第1変換テーブル36を用いて変換してα×Boビット(=α画素)のデータを出力することにより、1/Nの縮小率の縮小処理及びBiからBoへのビット数変換処理を行う。また、第2変換部40においては、第2テーブル値生成部42は、各k個の分割データの各々に含まれる画素数に対応する第2変換テーブル44のテーブル値の各々について、対応する分割データに含まれる画素数分のビット数を入力値とし、入力値にBiからBoへのビット数変換を行った結果としての1画素分のデータを出力値とするテーブル値を生成して第2変換テーブル44の各々に設定し、第2変換処理部46は、入力画像データからN画素分のデータを取り出し、これをk個に分割した分割データの各々について、第2変換テーブル44を用いて1画素のデータに変換し、変換された値の各々を合成して1画素分の画像データを出力する。
また、変換処理として色空間変換処理のみを行う場合も、上記と同様に処理すればよい。
次に、第2変換処理部46の合成部46Bで行われる合成方法についてより詳しく説明する。合成方法は、第2変換テーブル44の生成方法に応じて異なる。例えば、第2変換テーブル44の各出力値が、各分割データの画素数に応じた寄与率が既に乗算されている1画素のデータである場合には、第2変換テーブル44により変換されたk個のデータを加算するだけでよい。しかしながら、第2変換テーブル44の各出力値が、各分割データの画素数に応じた寄与率が乗算されていない1画素のデータである場合には、これら各k個のデータに該寄与率を乗算して加算する必要がある。
ここで、図4を参照しながら、寄与率について具体的に説明する。例えば、縮小率が1/5で、k=2の場合、画素数N(=5)を、N1=3、N2=2に分割することができる。従って、分割データD1の画素数をN1(=3)とし、分割データD2の画素数をN2(=2)とすることができる。このように、各分割データの画素数が異なるため、ここでは、各分割データの画素数に応じた第2変換テーブルT1、T2が生成される。
ここで、画素数N1(=3)の分割データD1に対応する第2変換テーブル44を第2変換テーブルT1と呼称し、画素数N2(=2)の分割データD2に対応する第2変換テーブル44を第2変換テーブルT2と呼称する。この2つの第2変換テーブルT1、T2の生成方法は、以下の通りである。入力3画素の各画素毎のデータを加算して3で除算することにより、1画素分のデータを生成し、更に寄与率(重み付け)3/5を乗算して出力値とすることで、第2変換テーブルT1が生成される。また、入力2画素の各画素毎のデータを加算して2で除算することにより1画素分のデータを生成し、更に寄与率2/5を乗算して出力値とすることで、第2変換テーブルT2が生成される。
ここで、仮に、第2変換テーブルT1に、入力3画素の各画素毎のデータを加算して3で除算したデータに対して、更に寄与率3/5を乗算したものが出力値として設定されおり、第2変換テーブルT2に、入力2画素の各画素毎のデータを加算して2で除算したデータに対して、更に寄与率2/5を乗算したものが出力値として設定されていれば、分割データD1、D2を各々に対応する第2変換テーブルT1、第2変換テーブルT2により変換されて得られた2つのデータを加算するだけで、入力N画素が1/5の縮小率で縮小された1画素のデータを得ることができる。このように、寄与率が乗算された出力値がテーブル値として設定されている場合の合成方法(合成方法1と呼称する)は、下記の数式(1)で表せる。
ここで、Pは、合成(加算)結果である1画素のデータ、Pnは、1〜k番目までの分割データD1〜Dkを第2変換テーブル44により変換して得られたデータである
一方、第2変換テーブル44に、寄与率が乗算されていない出力値が設定されている場合(前述した例では、第2変換テーブルT1に、入力3画素の各画素毎のデータを加算して3で除算したデータが出力値として設定されおり、第2変換テーブルT2に、入力2画素の各画素毎のデータを加算して2で除算したデータが出力値として設定されている場合)には、分割データD1〜Dkを第2変換テーブル44により変換して得られたデータP1〜Pkをそのまま加算するのではなく、該データP1〜Pkの各々に寄与率を乗算したものを加算する。この場合の合成方法(合成方法2と呼称する)は、下記の数式(2)で表せる。
ここで、Nn/Nは寄与率を表わす。なお、k個の分割データについて、寄与率の各々が等しい場合(例えば、k=2ので、各分割データの画素数の各々が等しい場合には、各々の寄与率は1/2となる)には、第2変換テーブル44により変換されたk個のデータP1〜Pkを加算した後に、1/2を乗算(すなわち、2で除算)するようにしてもよい。
また、上記では、第2変換テーブル44に、分割データの各画素毎のデータを加算して分割データの画素数で除算したものに寄与率を乗算した(或いは乗算しない)データを出力値とするテーブル値が設定される例について説明したが、これに限定されない。例えば、分割データの各画素毎のデータを加算した1画素分のデータであって、分割データの画素数で除算もせず寄与率も乗算しないデータを出力値とするテーブル値が設定されていてもよい。この場合には、合成方法が上記と異なる。具体的には、第2変換処理部46は、第2変換テーブル44を用いて変換されて得られたk個のデータの各々を加算して1/Nを乗算し、主走査方向に1/Nの縮小率で縮小された1画素のデータを求める。この場合の合成方法(合成方法3と呼称する)は、下記の数式(3)で表せる。
このように、第2変換テーブル44のテーブル値の生成方法に応じて、合成方法が異なる。
ところで、第2変換テーブル44はk個用意してもよいし、場合によっては、それよりも少なくすることもできる。例えば、分割数kがNの約数の場合、N画素のデータをk個の分割データに分割したときの分割データの各々に含まれる画素数は、Nをkで除算(N/k)したときの商と同じ画素数とすることができる。この場合は、分割データに含まれる画素数に対応した少なくとも1つの変換テーブルを第2変換部40で用いる第2変換テーブル44として用意すればよい。なお、第2変換テーブル44としては、1つの変換テーブルを用意し、共通に使用してもよく、2〜k個の変換テーブルを用意し、このうちの少なくとも1つの変換テーブルを共通に使用してもよい。
一方、分割数kがNの約数でない場合、N画素のデータをk個の分割データに分割したときの1つの分割データには、Nをkで除算したときの余りと同じ個数の画素が含まれ、残りの分割データの各々に商と同じ画素数が含まれるようにすることができる。この場合は、商と同じ画素数に対応した第2変換テーブル44、及び余りと同じ画素数に対応した第2変換テーブル44の少なくとも2つの第2変換テーブル44を用意する必要がある。商と同じ画素数が含まれる分割データが複数生じた場合には、商と同じ画素数が含まれる分割データに対しては、上記の分割数kがNの約数の場合と同様に、1つの変換テーブルを用意して共通に使用しても良く、2〜k個の変換テーブルを用意し、少なくとも1つの変換テーブルを共通に使用してもよい。
なお、変換テーブルのテーブル値の生成方法についての具体例は後述する。
次に、処理制御部30について説明する。処理制御部30は、処理パラメータ(N,Bi,Bo,Ci,Co)から定まる第1変換テーブル36の容量から、第1変換部32及び第2変換部40のどちらで画像データを画像処理するかを選択し、選択した変換部に対して処理パラメータ、及び画像データを入力して画像処理を開始させる。ここで、処理制御部30により行われる選択処理ルーチンについて説明する。図5は、選択処理ルーチンの流れを示すフローチャートである。
まず、ステップ100において、以下の数式(4)から第1変換部32で用いられる第1変換テーブル36のサイズ(テーブル容量)Ts(本実施の形態ではTsの単位はバイトとするが、ビットであってもよい)を計算する。ここでは、第1変換部32で変換処理する際に用いられる変換テーブルのテーブル容量をα=1として計算する。
Ts=(α×Bo×Co/8)×2^(α×N×Bi×Ci) ・・・(4)
ここで、「^」は、べき乗の記号であり、2^(α×N×Bi×Ci)は、2の(α×N×Bi×Ci)乗を示す。
ここで、縮小率1/N、入力ビット数Bi及び出力ビット数Boは操作パネル18から利用者により予め指定され、入力チャンネル数Ci及び出力チャンネル数Coは、操作パネル18から予め指定された入出力色空間の種類により特定されるものである。なお、これら処理パラメータの少なくとも1つが画像処理装置10に予め設定されていてもよい。
次に、ステップ102では、上記計算したテーブル容量Tsと予め定められた閾値とを比較し、Tsが閾値未満であれば、画像処理させる変換部として、第1変換部32を選択し、第1変換部32に入力する処理パラメータの1つであるαを求めるため、ステップ104以降の処理を行う。ステップ104では、α=2に設定し、ステップ106で、テーブル容量Tsを上記数式(4)を用いて再計算する。
ステップ108では、再計算したテーブル容量Tsが上記閾値未満であれば、αに1を加算して、ステップ106に戻り、上記処理を繰り返す。また、ステップ108において、再計算したテーブル容量Tsが閾値以上となった場合には、ステップ112で、αから1を減算してテーブル容量Tsが閾値以上となる1つ前のαに戻し、このαの値を第1変換部32に入力される処理パラメータの出力画素数αの値として設定する。すなわち、ステップ104〜ステップ112により、テーブル容量Tsが閾値未満となるαの中で最大のαの値が求められる。
そして、ステップ114において、第1変換部32でテーブル値生成及び変換処理が行われるように、第1変換部32に対して処理パラメータ(N,Bi,Bo,入出力色空間の種類,α)及び画像データを入力する。
一方、ステップ102において、テーブル容量Tsが閾値以上となった場合には、画像処理させる変換部として第2変換部40を選択し、第2変換部40に入力する処理パラメータの1つであるkを求めるため、ステップ120以降の処理を行う。ステップ120では、まず、k=2に設定し、ステップ122で、画素数Nをk個の分割画素数に分割する。
ここで、分割方法の一例を説明する。1番目からk−1番目までの分割画素数N1〜Nk−1は、以下の数式(5)で表わされるように、Nをkで除算することにより求める。ここでは、除算結果は、小数点以下切り捨てとするが、切り上げでもよい。
N1=N2=N3・・・Nk−1=N/k ・・・(5)
次に、k番目の分割画素数Nkについては、以下の数式(6)により求める。
Nk=N−(N1+N2+・・・Nk−1) ・・・(6)
ここで具体例を挙げると、k=2である場合には、N1+N2=NとなるようにNをN1,N2の2つに分割する。具体的には、N1=N/2(切り捨て)、N2=N−N1としてもよい。また、N1=N/2(切り上げ),N2=N−N1でも良い。
また、分割の方法は、上記例に限定されず、N1〜Nkのそれぞれが異なる画素数となるように分割してもよい。いずれの場合であっても、N=N1+N2+N3・・・Nkとなり、且つ各々が整数となるように分割する。また、分割画素数N1〜Nkの各々が、1画素以上となるように分割する。
ステップ124では、テーブル容量Tsを再計算する。ここでは、第2変換部40で用いられる第2変換テーブル44の総テーブル容量を計算する。k個の分割データに対応する第2変換テーブル44の各々を互いに異なるテーブルとする場合には、以下の数式(7)によりテーブル容量が計算される。
なお、画素数が等しい分割データについては共通の第2変換テーブル44を用いることができる。例えば、前述の分割方法の一例として説明した分割方法でNを分割した場合において、N1〜NKが等しい場合(すなわち、Nがkで割り切れる場合)には、本実施の形態では、第2変換テーブル44は1つですむ。従って、以下の数式(8)を用いてTsを計算する。
Ts=(Bo×Co/8)×2^((N/K)×Bi×Ci) ・・・(8)
なお、N1〜NKが等しい場合であっても、互いに異なる第2変換テーブル44を生成するようにしてもよい。例えば、N=8で、N1=N2=4として2つの分割データについて共通の第2変換テーブル44を用いて変換して得られたデータを合成すると、偶数値のデータしか得られないことがある。そこで、例えば、2種類の第2変換テーブル44を生成し、一方の第2変換テーブル44の出力値については、寄与率で乗算する際に小数点以下切り捨てで処理して求め、他方の第2変換テーブル44の出力値については、寄与率で乗算する際に小数点以下切り上げで処理して求める等、2種類の第2変換テーブル44を生成するようにしてもよい。
また、前述の分割方法の一例として説明した分割方法でNを分割した場合において、N1〜Nk−1と、Nkとが異なる場合には、本実施の形態では、以下の数式(9)を用いてテーブル容量Tsを再計算する。
すなわち、ここでは、N1〜Nk−1に対応する分割データに対して用いる第2変換テーブル44を共通の第2変換テーブル44とし、当該第2変換テーブル44のテーブル容量と、Nkに対応する分割データに対して用いる第2変換テーブル44のテーブル容量との合計値を、全体のテーブル容量Tsとして計算している。
ステップ126では、再計算したテーブル容量Tsが閾値以上であれば、kに1を加算して、ステップ122に戻り、上記処理を繰り返す。また、ステップ126において、再計算したテーブル容量Tsが閾値未満となった場合には、このときのkの値を第2変換部40に入力される処理パラメータのkの値として設定する。そして、ステップ130において、第2変換部40でテーブル値生成及び縮小・変換処理が行われるように、第2変換部40に対して処理パラメータ(N,Bi,Bo,入出力色空間の種類,k)及び画像データを入力する。
なお、ここでは、変換処理として、ビット数変換、及び色空間変換を行う場合のテーブル容量Tsを計算する例について説明したが、例えば、変換処理において、色空間変換を行わない場合には、色空間変換を行わない場合のテーブル容量Tsを計算する。この場合、数式(4)に代えて、以下の数式(10)を用いる。
Ts=(α×Bo/8)×2^(α×N×Bi) ・・・(10)
また、数式(7)に代えて、以下の数式(11)を用いる。
また、数式(9)に代えて、以下の数式(12)を用いる。
また、ビット数変換は行わず、色空間変換を行う場合には、上記(10)〜(12)の式において、BoをCoに置き換え、BiをCiに置き換えた式を用いればよい。また、変換テーブルにより、面点変換処理はテーブル容量には影響しないため、テーブル容量の計算において考慮しなくてもよい。
次に、具体的な例を挙げて、変換部の選択、及び処理パラメータ(α及びk)の計算方法について説明する。
(具体例1)
縮小率:1/2、入力画像データの階調数:2(1ビット)、出力画像データの階調数:256(8ビット)、入力色空間:CMYK、出力色空間:YCbCr、の場合には、処理パラメータは、(N,Bi,Bo,Ci,Co)=(2,1,8,3,3)となる。なお、ここでは、CMYKにおけるKをCMYに重畳してCi=3にして処理するようにしている。
α=1として数式(4)で計算されたテーブル容量Tsが閾値未満であれば、第1変換部32が選択されるが、α=2としても、第1変換テーブル36のテーブル容量は、α×N×Bi×Ci=12ビット入力で、かつα×Bo×Co=48ビット出力であるため、テーブル容量は24KBとなり、十分小さい。この値が閾値より小さく、且つα=3の場合のテーブル容量が閾値以上の場合には、α=2として処理パラメータが設定される。
(具体例2)
縮小率:1/8、入力画像データの階調数:2(1ビット)、出力画像データの階調数:256(8ビット)、入力色空間:CMYK、出力色空間:YCbCr、の場合には、処理パラメータは(N,Bi,Bo,Ci,Co)=(8,1,8,3,3)となる。CMYKにおけるKの処理は、上記と同様である。
α=1として数式(4)で計算されたテーブル容量は、(24ビット入力/3バイト出力=)48MBとなる。これが閾値以上であれば、テーブル容量としては大きすぎるため、第2変換部40を選択する。
第2変換部40を選択する場合には、kの値を計算する必要があるが、k=2として数式(7)によりテーブル容量を再計算(この場合には、2つの分割データが1つの変換テーブルを共通に用いるものとする)すると、第2変換テーブル44は、N×Bi×Ci/k=12ビット入力かつBo×Co=24ビット出力で、テーブル容量=12KBとなり、十分に小さい。k=2とした場合に計算されたテーブル容量が閾値より小さい場合には、k=2として処理パラメータが設定される。
(具体例3)
縮小率:1/6、入力画像データの階調数:16(4ビット)、出力画像データの階調数:256(8ビット)、入力色空間:Grey、出力色空間:Grey、の場合には、処理パラメータは、(N,Bi,Bo,Ci,Co)=(6,4,8,1,1)となる。
α=1として数式(4)で計算されたテーブル容量は、第1変換テーブル36は、α×N×Bi×Ci=24ビット入力かつα×Bo×Co=8ビット出力で、テーブル容量=16MBとなる。
仮に、装置に16MBの変換テーブルを記憶するために十分なメモリ容量があり、速度優先である場合には、大きな閾値を設定して第1変換部32が選択されるようにする。一方、使用可能なメモリ容量が少ない場合には、速度を犠牲にして、第2変換部40が選択されるように、小さな閾値を設定する。なお、k=2とした場合に生成される第2変換テーブル44は、テーブル容量=4KBとなり、十分小さい。
すなわち、例えば、メモリ容量の削減より速度を優先したい第1の場合には、閾値を大きくし、速度を犠牲にしてメモリ容量の削減を優先させたい第2の場合には、第1の場合よりも閾値を小さくするようにしてもよい。
次に、図6を参照して、第1変換部32による処理の具体例を説明する。図6では、第1変換部32に、処理パラメータとして、(N,Bi,Bo,入出力色空間の種類,α)=(2,1,8,CMYK→YCbCr,2)が入力された場合を例に挙げる。この場合、第1変換テーブル36により一括で変換処理される出力画素数は2画素(α画素)であり、1/2の縮小率で平均値縮小が行われるため、出力2画素を一度の変換処理で生成するためには、4画素分の入力画像データが必要となる。更にまた、なお、入出力色空間の種類は、入力側がCMYK、出力側がYCbCrであるため、Ci=3(KをCMY成分に重畳する)、Co=3となる。
従って、第1テーブル値生成部34は、図6の(4)に示すように、入力値(入力インデックスともいう)が、4画素×1ビット×3チャンネル=12ビットであり、出力値は、2画素×8ビット×3チャンネル=6バイトの第1変換テーブル36を生成する。なお、ここでは、変換処理としてビット数変換、及び色空間変換の他、面順次形式の入力画像データを点順次形式の出力画像データに変換する面点変換も行うため、これらの変換を行うための変換テーブルが生成される。
第1変換処理部38は、図6の(1)に示すように、入力画像データが、1画素が2階調(1ビット)で表わされたCMYK色空間の面順次形式の画像データである場合に、まず、(2)に示すように、K成分をCMYの各成分に重畳する。ここでは、K成分とCMY各色成分とのOR処理を行うことにより、K成分を重畳するようにしている。続いて、第1変換処理部38は、(3)に示すように、C成分4画素、M成分4画素、Y成分4画素の各画像データをCMYの順に連結させて12ビットのデータを生成する。そして、第1変換処理部38は、(4)に示す第1変換テーブル36から、当該生成した12ビットのデータに相当する入力値に対応して記憶された出力値を取得する。取得した6バイトの出力値は(5)に示すように、画像出力部16に出力される。
次に、図7を参照して、第2変換部40による処理の具体例を説明する。図7では、第2変換部40に、処理パラメータとして、(N,Bi,Bo,入出力色空間の種類,k)=(8,1,8,CMYK→YCbCr,2)が入力された場合を例に挙げる。この場合、1/8の縮小率で平均値縮小を行うにあたり、出力1画素を生成するためには、8画素分の入力画像データが必要となるが、第2変換部40では、入力画像データを分割して各々の分割データについて個別に変換し、これらを合成して1画素分の出力画像データを得るため、ここでは、k=2であることから、8画素/2=4画素分の入力画像データを第2変換テーブル44により一括して変換処理するようにしている。一方、入出力色空間の種類は、入力側がCMYK、出力側がYCbCrであるため、Ci=3(KをCMY成分に重畳する)、Co=3となる。
従って、第2テーブル値生成部42は、図7の(5)に示すように、入力インデックスが、4画素×1ビット×3チャンネル=12ビットであり、出力値は、1画素×8ビット×3チャンネル=3バイトの変換テーブルが生成される。また、この例では、各分割データについて共通の第2変換テーブル44を使用して変換するため、第2変換テーブル44として1つの変換テーブルが生成される。なお、ここでは、変換処理として、ビット数変換、及び色空間変換の他、面点変換も行うため、これら全ての変換を行うための第2変換テーブル44が生成される。また、第2変換テーブル44の出力値を寄与率に応じた値とする場合には、第2変換テーブル44の出力値が1/2の寄与率となるように生成される。
第2変換処理部46は、図7の(1)に示すように、入力画像データの1画素が2階調(1ビット)で表わされたCMYK色空間の面順次形式の画像データである場合に、まず、(2)に示すように、K成分をCMYの各成分に重畳する。ここでも、K成分とCMY各色成分とのOR処理を行うことにより、K成分を重畳するようにしている。続いて、第2変換処理部46は、CMYの各色成分の連続する8画素分の入力画像データを2個に分割した分割データを生成する。具体的には、該8画素分の入力画像データのうち前半4画素について、(3)に示すように、C成分4画素、M成分4画素、Y成分4画素の各ビット列をCMYの順に連結させて12ビットの分割データを生成すると共に、後半4画素についても、(4)に示すように、C成分4画素、M成分4画素、Y成分4画素の各ビット列を連結させて12ビットの分割データを生成する。
そして、第2変換処理部46は、図7の(5)に示す第2変換テーブル44から、上記生成した前半部分12ビットの分割データに相当する入力値に対応して記憶された出力値を取得すると共に、上記生成した後半部分12ビットの分割データに対応して記憶された出力値を取得し、(6)に示すように、取得した3バイトの出力値の各々を合成し、該合成して得られた1画素分の出力画像データを(7)に示すように、画像出力部16に出力する。
なお、第2変換処理部46で面点変換処理が行われない場合、例えば入力画像データが点順次形式であって、出力画像データも点順次式である場合には、上述した連結処理は不要であり、8画素分の入力画像データの先頭から4画素毎に画像データを読み出し、読み出された画像データ(分割データ)の各々について第2変換テーブル44を用いて変換処理すればよい。この場合、当然ながら、第2変換テーブル44は、点順次形式の入力値から点順次形式の出力値に変換するための変換テーブルとなる。なお、第1変換処理部38において面点変換処理が行われない場合も同様に、上記連結処理せずに、第1変換テーブル36による変換を行って出力すればよい。
次に、図8を参照して、第2変換部40による処理の他の具体例を説明する。この例では、2種類の第2変換テーブル44が生成される。
図8では、第2変換部40に、処理パラメータとして、(N,Bi,Bo,入出力色空間の種類,k)=(5,2,8,CMYK→YCbCr,3)が入力された場合を例に挙げる。この場合、1/5の縮小率で平均値縮小を行うにあたり、出力1画素を生成するためには、5画素分の入力画像データが必要となるが、この例では、出力1画素の分割処理数3であることから、5画素分の入力画像データを2画素、2画素、1画素の分割データにそれぞれ分割し、各々に対応する第2変換テーブル44で各々を一括して変換処理し、これを合成して1画素分の出力値を得る。ここで、2画素の分割データの各々については、共通の変換テーブルを用いることとすると、2画素の分割データに対応する第2変換テーブル44(以下、第2変換テーブルA)、及び1画素の分割データに対応する第2変換テーブル44(以下、第2変換テーブルB)を生成する必要がある。なお、入出力色空間の種類は、入力側がCMYK、出力側がYCbCrであるため、Ci=3(KをCMY成分に重畳する)、Co=3となる。
従って、第2テーブル値生成部42により、図8の(6)に示すように、入力インデックスが(2画素×2ビット×3チャンネル)=12ビットであり、出力値は(1画素×8ビット×3チャンネル)=3バイトの第2変換テーブルAが生成されると共に、図8の(7)に示すように、入力インデックスが(1画素×2ビット×3チャンネル)=6ビットであり、出力値は(1画素×8ビット×3チャンネル)=3バイトの第2変換テーブルBが生成される。
なお、ここでは、変換処理として、ビット数変換、色空間変換の他、面点変換も行うため、これら全ての変換を行うための第2変換テーブルA,Bが生成される。また、第2変換テーブルA,Bの各出力値を寄与率に応じた値とする場合には、第2変換テーブルAの出力値が2/5の寄与率となるように生成され、第2変換テーブルBの出力値は1/5の寄与率となるように生成される。
第2変換処理部46は、図8の(1)に示すように、入力画像データが、1画素が4階調(2ビット)で表わされたCMYK色空間の面順次形式の画像データである場合に、まず、(2)に示すように、K成分をCMYの各成分に重畳する。ここでは、K成分とCMY各色成分との2ビット加算処理(但し、11を超えたら11)を行うことにより、K成分を重畳するようにしている。続いて、第2変換処理部46は、CMYの各色成分毎の連続する5画素分の入力画像データを3個に分割した分割データを生成する。具体的には、5画素分の入力画像データのうち、(3)に示すように、C成分、M成分、Y成分の各々の先頭から2画素分のビット列をCMYの順に連結させて12ビットの分割データ(以下、データa)を生成し、それに続く2画素分のビット列についても同様に連結させて、(4)に示すように12ビットの分割データを生成し(以下、データb)、それに続く1画素分のビット列についても同様に連結させて、(5)に示すように、6ビットの分割データ(以下、データc)を生成する。
そして、第2変換処理部46は、図8の(6)に示す第2変換テーブルAを参照して、上記生成したデータaに相当する入力値に対応して記憶された出力値を取得すると共に、上記生成したデータbに相当する入力値に対応して記憶された出力値を取得し、(7)に示す第2変換テーブルBを参照して、上記生成したデータcに相当する入力値に対応して記憶された出力値を取得する。そして、(8)に示すように、取得された3つの出力値の各々を合成し、該合成して得られた1画素分の出力画像データを(9)に示すように、画像出力部16に出力する。
次に、第2テーブル値生成部42による第2変換テーブル44の生成処理の一例について図9を参照しながら説明する。ここでは、図7と同様に、第2変換部40に、処理パラメータとして、(N,Bi,Bo,入出力色空間の種類,k)=(8,1,8,CMYK→YCbCr,2)が入力された場合を例に挙げる(図9(A)も参照。)。
前述したように、1/8の縮小率で平均値縮小を行うため、出力1画素を生成するためには、8画素分の入力画像データが必要となるが、変換処理においては、8画素分の入力画像データを2分割して各々個別に変換し、これらを合成して1画素分の出力画像データを得るため、12ビットの入力インデックス、3バイトの出力値の第2変換テーブル44を生成する。この第2変換テーブル44を生成するときの生成プログラム(擬似コード)の一例を図9(B)に示す。
12ビットの入力値は、0から4095までの値を取り得る。従って、0〜4095までの各々の入力値に対応した出力値を求める必要がある。そこで、図9(B)の符号50を付した部分では、入力値を示す変数iを0から4095まで変化させ、以下の処理を各iについて繰り返させている。
続く符号52で示した部分は、入力値iに含まれるCMYの各成分毎の1の数をカウントして255を乗算し(ビット数変換)、これを4で除算する処理を行っている。
以下、C成分についての演算式、
in_c=255*((i & 0xf00)の中の画素値1の数(Cyan))/4
を、符号52で示した3つの演算式を代表して説明する。
図7を参照して説明したように、この変換処理では、C成分4画素、M成分4画素、Y成分4画素の各入力画像データをCMYの順に連結させて12ビットのデータを生成して変換テーブルにより変換処理を行う。従って、12ビットのデータの先頭4ビットはC成分、それに続く4ビットはM成分、最後の4ビットはY成分となる。そこで、12ビットの「i」と、先頭4ビットが1で続く8ビットが0の「0xf00」(16進数表示)とのANDをとる(i&0xf00)ことにより、C成分のみがそのままの形で得られ、M成分、Y成分にあたる後半8ビットは全て0になる。そしてC成分4ビット中の「1」の数をカウントし、これに255を乗算している。これは、1ビット(2階調)を8ビット(256階調)に変換する場合、2階調における「0」は、256階調では「0」に相当し、2階調における「1」は、256階調の「255」に相当することによる。
更に上記演算式では、2階調の値を256階調に変換した後、4で除算している。これは、前述したように、CMY各色成分毎に4画素分を1度に処理するようにしており、縮小率1/8での平均値縮小を実現するため、ここで1/4している。
符号52に示した、M成分(in_m)、Y成分(in_y)についての演算式も、iとANDをとる値が異なるのみであり、上記と同様であるため、説明を省略する。
次に符号54で示した行では、関数cmy2ycbcr()を用いてCMY色空間からYCbCr色空間への変換を行う。この関数は、色空間の定義により規定される一般的な変換式、或いはデバイスの色再現に合わせて修正した変換方式(変換式や多次元テーブル処理など)である。なお、符号52で求めたin_c、in_m、in_yが、関数cmy2ycbcrに与えられる情報であり、該情報を上記変換式等により変換して求められたY成分、Cb成分、Cr成分の各々の値がout_y(Y成分)、out_cb(Cb成分)、out_cr(Cr成分)にセットされる。
符号56で示した3行では、関数cmy2ycbcr()で求めたout_y、out_cb、out_crの各々を2で除算(寄与率1/2を乗算)した値を、tableという名称の2次元配列に格納している。
以上説明したように、第2変換テーブル44の入力インデックスi(0〜4095)の各々の出力値を求めて、二次元配列に格納することにより、第2変換テーブル44(のテーブル値)が生成される。こうして求めたテーブル値の第2変換テーブル44を用いる場合には、合成部46Bは、前述した合成方法1で合成する。
上記では、主走査方向に1/8の縮小を行う場合に、1/4(符号52)及び1/2(符号56)の乗算処理を行って出力値を求める例について説明したが、図9(C)の擬似コードに示すように、これら除算処理を行わずに出力値を求め、第2変換テーブル44を生成するようにしてもよい。
この場合、図9(C)における変換プログラムの関数 cmy2ycbcr()では、値域/定義域がそれぞれ(0〜255ではなく)0〜255*4であるものとして変換を行う。また、table[i][0]、table[i][1]、table[i][2]はそれぞれ、少なくとも上記定義域の値が格納できるようにビット数(すなわち、各配列要素のサイズ、容量)を広げて確保して、上記処理の値を格納する。こうして求めたテーブル値の第2変換テーブル44を用いる場合には、合成部46Bは、前述した合成方法3で合成する。すなわち、合成部46Bは、第2変換テーブル44により変換されて得られたデータを加算し、これを8で除算して、最終的な1画素分の出力画像データを生成する。
また、符号52部分における各演算式で1/4の乗算は行い、符号56部分における各演算式で1/2の乗算は行わずに第2変換テーブル44を生成してもよい。この場合には、第2変換処理部46は、このように生成された変換テーブルを用いて変換された2つのデータに1/2を乗算して加算することにより、最終的な1画素分の出力画像データを生成する。或いは、この例では、寄与率が全て等しいため、第2変換テーブル44による変換処理後のデータの各々を加算してから1/2を乗算してもよい。すなわち、この場合には、前述した合成方法2で合成される。
なお、副走査方向についても1/Nyの縮小率で平均値縮小したい場合などは、以下のように処理する。
図9(B)に示す処理プログラムで第2変換テーブル44を生成した場合には、該生成した第2変換テーブル44により変換されて得られたデータを加算し、更にそれら加算値を副走査方向にNyライン分加算し、該加算して得られた結果をNyで除算する。
また、図9(C)に示す処理プログラムで第2変換テーブル44を生成した場合には、該生成した第2変換テーブル44により変換されて得られたデータを加算し、更にそれら加算値を副走査方向にNyライン分加算し、該加算して得られた結果をN(=8)×Nyで除算する。
なお、第1テーブル値生成部34の変換テーブルの生成方法については、α×N画素分の入力値と、第1変換処理部38で行われる変換処理後のα×1画素分の出力値とが対応付けられた変換テーブルを生成すればよいため、ここでは詳細な説明を省略する。
ところで、上記実施の形態では、第1変換部32及び第2変換部40により縮小処理及び変換処理が行われ、該変換処理には、ビット数変換(階調変換)、面点変換、及び色空間変換が含まれる例について説明したが、これに限定されるものではなく、変換処理には、ビット数変換(階調変換)及び色空間変換の少なくとも一方が含まれていればよい。
また、上記実施の形態では、入力画像データが面順次形式の画像データである場合を例に挙げて説明したが、例えば、色空間の各チャンネル毎に互いに異なるファイルで構成された画像データであってもよい。このようにチャンネル毎に複数のファイルで構成された入力画像データであっても、面順次形式と同等のデータとして取り扱われ、上記と同様に点順次形式に変換して出力される。
また、上記実施の形態では、処理制御部30が変換部を選択して変換処理させる例について説明したが、第1変換部32を設けずに、第2変換部40だけで変換処理させるように構成してもよい。この場合には、処理制御部30は、ステップ120からステップ130までの処理を行って、kの値を求め、第2変換部40に対して処理パラメータを入力するようにする。また、この場合において、縮小率等を固定とする場合には、その都度第2変換テーブル44を生成する必要がないため、第2テーブル値生成部42を設けず、第2変換テーブル44を予め生成し装置に設定しておく(すなわち、第2変換テーブル44を固定とする)ようにしてもよい。
また、上記実施の形態では、画像入力部14から入力された画像データに変換処理を施して画像出力部16に出力する例について説明したが、これに限定されるものではなく、例えば、既に画像処理装置10内に設けられた記憶装置に記憶されている画像データに変換処理を施すものであってもよい。また変換処理後の出力先も画像出力部16に限定されるものではなく、例えば、画像処理装置10内に設けられた記憶装置に出力して記憶させるようにしてもよいし、通信手段を介して接続された他の装置に出力するようにしてもよい。
本実施の形態で説明した画像処理装置10を、例えば、デジタルカメラやスキャナなどから入力された入力画像に対して、サムネイル(画像を縮小して表現した画像のこと)を生成して表示する際に適用してもよいし、また、コンピュータ上のフォルダや、デスクトップ等に、画像データや文書データを示すアイコンをサムネイルで表示する際に適用してもよい。また、上記画像処理装置10をコピー、プリント、スキャン、ファックス等の複数の機能を有する複合機とし、セキュリティ確保のためにどのような文書が処理されたかを縮小イメージとして蓄積或いは表示する場合に、ログ画像の生成処理に適用するようにしてもよい。更にまた、印刷用に網がけされた画像を確認する表示装置において、高解像度かつ2階調の印刷用画像から(全体を確認するための)低解像度かつ多階調(2階調より多い階調数)の縮小画像を生成する装置として適用してもよい。
更にまた、サーバなどに大量に格納された(高解像度の)画像を、端末上で複数毎まとめてサムネイル表示するような場合に、サーバでサムネイル生成する処理に適用してもよい。
また、上記では画像処理装置の変換処理プログラムの一例としてのプログラムが装置制御部12の記憶部12Cに追加記憶される態様を説明したが、本発明に係る画像処理装置の変換処理プログラムは、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。また、上記実施の形態では、処理制御部30、第1変換部32、及び第2変換部40をCPUがプログラムを実行することにより実現する例について説明したが、ハードウェアにより実現するようにしてもよい。