(57)【要約】【課題】レティネックス処理における畳み込み演算でオーバーフローの発生を防止することができる画像処理装置および画像処理プログラムを提供する。【解決手段】畳み込み演算の演算値の最大値ＣｏｎｖＭａｘを求める（Ｓ４２）。フィルタ係数の最大値をＢ、画素値の最大値をＰｉｘｅｌＭａｘとすると、ＣｏｎｖＭａｘは、次式で算出される。ＣｏｎｖＭａｘ＝Ｐ×Ｂ×ＰｉｘｅｌＭａｘ  次に、シフト量ＢｉｔＭａｘを算出する（Ｓ４３）。シフト量ＢｉｔＭａｘは、ＶａｌｕｅＭａｘをＣＰＵ１１が固定小数点演算で扱うことができる最大値とし、ＶａｌｕｅＭａｘをＣｏｎｖＭａｘで除した値の小数点位置をビット数で表した値として算出される。【選択図】図９
2008059287.tif 000002
【特許請求の範囲】
【請求項１】
画像を構成する各画素について周辺平均値を求め、その周辺平均値に基づいてレティネックス処理を行う画像処理装置において、
周辺平均値を求める際に、注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定するマスクサイズ設定手段と、
そのマスクサイズ設定手段により設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定するシフト量設定手段と、
そのシフト量設定手段により設定された小数点位置により畳み込み演算を行う演算手段とを備えていることを特徴とする画像処理装置。
【請求項２】
前記マスクは、所定の領域内の全画素のうちから一部の画素については間引いて係数を有し、その間引き数を設定する間引き数設定手段を備え、
前記シフト量設定手段は、前記マスクサイズ設定手段により設定されたマスクサイズから前記間引き数設定手段により設定された間引き数を差し引いた値である参照数に応じて畳み込み演算における小数点位置を設定することを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記シフト量設定手段は、画素値の最大値とフィルタ係数の最大値と前記参照数との積に基づいて小数点位置を設定することを特徴とする請求項２記載の画像処理装置。
【請求項４】
前記シフト量設定手段は、マスクを構成する全てのフィルタ係数と画素値の最大値との積の総和に基づいて小数点位置を設定することを特徴とする請求項２記載の画像処理装置。
【請求項５】
元画像を縮小して縮小画像を形成する縮小画像形成手段と、
その縮小画像形成手段により形成された縮小画像の各画素についてその画素値と、周辺平均輝度とから反射率を求めることにより縮小レティネックス画像を形成する縮小レティネックス画像形成手段と、
その縮小レティネックス画像形成手段により形成された縮小レティネックス画像の画素値が取る値の全範囲における各画素値の頻度を集計し、正規化を行う際のパラメータを設定する正規化パラメータ設定手段と、
前記元画像の各画素について、画素の値とその画素の周辺平均輝度とから反射率を求め、その反射率を前記正規化パラメータ設定手段により設定されたパラメータに基づいて正規化した正規化レティネックス値を求め、その正規化レティネックス値と、元画像の画素値とに基づいて補正を行う補正手段とを備え、
前記マスクサイズ設定手段は、前記縮小レティネックス画像形成手段により縮小レティネックス画像を形成する際に、前記縮小画像形成手段により形成された縮小画像の各画素について注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定し、
前記シフト量設定手段は、前記マスクサイズ設定手段により設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定し、演算手段は、前記シフト量設定手段により設定された小数点位置により畳み込み演算を行うことを特徴とする請求項１から４のいずれかに記載の画像処理装置。
【請求項６】
画像を構成する各画素について周辺平均値を求め、その周辺平均値に基づいてレティネックス処理を行う画像処理装置により実行される画像処理プログラムにおいて、
周辺平均値を求める際に、注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定するマスクサイズ設定ステップと、
そのマスクサイズ設定ステップにより設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定するシフト量設定ステップと、
そのシフト量設定ステップにより設定された小数点位置により畳み込み演算を行う演算ステップとを備えていることを特徴とする画像処理プログラム。
【請求項７】
前記マスクは、所定の領域内の全画素のうちから一部の画素については間引いて係数を有し、その間引き数を設定する間引き数設定ステップを備え、
前記シフト量設定ステップは、前記マスクサイズ設定ステップにより設定されたマスクサイズから前記間引き数設定ステップにより設定された間引き数を差し引いた値である参照数に応じて畳み込み演算における小数点位置を設定することを特徴とする請求項６記載の画像処理プログラム。
【請求項８】
前記シフト量設定ステップは、画素値の最大値とフィルタ係数の最大値と前記参照数との積に基づいて小数点位置を設定することを特徴とする請求項７記載の画像処理プログラム。
【請求項９】
前記シフト量設定ステップは、マスクを構成する全てのフィルタ係数と画素値の最大値との積の総和に基づいて小数点位置を設定することを特徴とする請求項７記載の画像処理プログラム。
【請求項１０】
元画像を縮小して縮小画像を形成する縮小画像形成ステップと、
その縮小画像形成ステップにより形成された縮小画像の各画素についてその画素値と、周辺平均輝度とから反射率を求めることにより縮小レティネックス画像を形成する縮小レティネックス画像形成ステップと、
その縮小レティネックス画像形成ステップにより形成された縮小レティネックス画像の画素値が取る値の全範囲における各画素値の頻度を集計し、正規化を行う際のパラメータを設定する正規化パラメータ設定ステップと、
前記元画像の各画素について、画素の値とその画素の周辺平均輝度とから反射率を求め、その反射率を前記正規化パラメータ設定ステップにより設定されたパラメータに基づいて正規化した正規化レティネックス値を求め、その正規化レティネックス値と、元画像の画素値とに基づいて補正を行う補正ステップとを備え、
前記マスクサイズ設定ステップは、前記縮小レティネックス画像形成ステップにより縮小レティネックス画像を形成する際に、前記縮小画像形成ステップにより形成された縮小画像の各画素について注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定し、
前記シフト量設定ステップは、前記マスクサイズ設定ステップにより設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定し、
演算ステップは、前記シフト量設定ステップにより設定された小数点位置により畳み込み演算を行うことを特徴とする請求項６から９のいずれかに記載の画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置および画像処理プログラムに関し、特にレティネックス処理における畳み込み演算でオーバーフローの発生を防止することができる画像処理装置および画像処理プログラムに関するものである。
【背景技術】
【０００２】
逆光条件下で被写体が撮像された場合、被写体部分の画像は、詳細な態様が判別困難となるほど明度やコントラストの低い不明瞭な逆光画像となる。かかる逆光画像のみならず、露光の過不足や、撮像時のぶれやぼけ、ノイズ、光量不足などによる劣悪な画像を、画像処理によって明度やコントラストを向上させて画質を改良することが行われている。かかる画像処理の１手法として、レティネックス処理（Ｒｅｔｉｎｅｘ処理）が知られている。
【０００３】
レティネックス処理は、高画質部分については元画像データを保持し、主に低画質部分の画質改良を行うものである。このレティネックス処理では、ガウスフィルタにより、元の画像の各画素データを周辺画素の画素データを反映させた値に補正し、その補正された画素データの自然対数から元の画像の反射率（リフレクタンス）成分データを算出し、元画像の画素成分で元の画像の画素データを除してイルミナンス成分データを算出する。つまり、元の画像を、反射率成分とイルミナンス成分との２の構成成分に分けるのである。そして、イルミナンス成分に対してガンマ補正等の明度や階調（コントラスト）を補正する処理を行った後、その補正されたイルミナンス成分と、反射率成分とを合成することにより、元の画像に対し逆光画像部分などの低画質部分の画質が改良された画像データを生成することができる。反射率成分を求めるには、反射率Ｒ（ｘ，ｙ）の正規化を行う。
【０００４】
ここで、図１０を参照して、反射率Ｒ（ｘ，ｙ）の正規化について説明する。反射率Ｒ（ｘ，ｙ）は、次式により算出される。
【０００５】
【数１】
2008059287.tif 000003
ここで、ｘは、横方向の座標を、ｙは、縦方向の座標を、Ｉ（ｘ，ｙ）は、座標（ｘ，ｙ）における強度値を、Ｆ（ｘ，ｙ）は、座標（ｘ，ｙ）のフィルタ係数を、＊は、畳み込み演算（コンボリューション）をそれぞれ示し、この畳み込み演算により周辺平均輝度（周辺平均値）が求められる。なお、ｌｏｇは、ｅを底とする自然対数である。
【０００６】
この畳み込み演算では、マスクを構成する複数のフィルタ係数と画像を構成する画素値とが乗算され、その積が累算される。よって、この畳み込み演算を行う際の小数点位置を適切に設定しないとオーバーフローが発生する。
【０００７】
図１０は、ある静止画像について、上式により求められた反射率Ｒ（ｘ，ｙ）の最小値を０、最大値を２５５とする０から２５５の範囲の整数値に正規化し、各整数の出現頻度を集計したヒストグラムである。
【０００８】
このヒストグラムからメディアン値Ｍを求め、メディアン値から大きい側へ４５％の画素数を含む範囲の上限値をＵ、メディアン値から小さい側へ４５％の画素数を含む範囲の下限値をＤとする。
【０００９】
ＵおよびＤの値に対応するＲ（ｘ，ｙ）の値を、ＵｐＲ、ＤｏｗｎＲとｐとし、正規化反射率ｒｅｆｌｅ（ｘ，ｙ）は、Ｒ（ｘ，ｙ）の値がＤｏｗｎＲ以下の場合は、０．０とし、Ｒ（ｘ，ｙ）の値がＵｐＲ以上の場合は、１．０とし、Ｒ（ｘ，ｙ）の値がＤｏｗｎＲより大きくＵｐＲより小さい場合は、
【００１０】
【数２】
2008059287.tif 000004
とする。
【００１１】
このようにしてｒｅｆｌｅ（ｘ，ｙ）が求められるので、クリップされる範囲（ＵｐＲとＤｏｗｎＲとの間）を求めるため、Ｒ（ｘ，ｙ）を全画素分記憶しなければならない。尚かつ、Ｒ（ｘ，ｙ）は、対数演算により求まる数値であるので、小数点を用いて記録する必要があり、浮動小数点では、４バイト、倍精度実数の場合には８バイトで画素毎に記憶するため膨大な記憶容量が必要である。
【００１２】
特開２００１−６９５２５号公報（特許文献１）には、このレティネックス処理をＲＧＢの各プレーンで独立に行った場合に、カラーバランスが崩れたり色ずれが発生するという問題点を解決するために、ＲＧＢ値をＹＣｂＣｒやＹＩＱという輝度成分と色成分により構成される座標空間に変換し、輝度成分Ｙに対してのみレティネックス処理を施し、色成分を維持したまま、ＲＧＢに戻すという方法が開示されている。この方法を用いると輝度成分のみが調整され、色成分は調整されないのでカラーバランスが崩れたり色ずれが発生することがない。また、この方法では、輝度成分のみにレティネックス処理を行うので、ＲＧＢの各プレーンそれぞれにレティネックス処理を行う場合に比べ、計算量が少なく、高速で処理を実行することができとともに、Ｒ（ｘ，ｙ）を正規化するために、ＲＧＢそれぞれについて記憶する必要がなく、輝度のみについて記憶すればよいので、必要な記憶容量は少なくなる。
【００１３】
また、特許３７３１５７７号（特許文献２）には、このレティネックス処理の処理速度を高速にする方法が開示されている。この方法は、元画像を平均画素法などの方法により縮小画像（解像度が低い）を形成し、その縮小画像の各画素について周辺平均輝度を求めた周辺平均輝度画像（ボケ画像）を形成し、そのボケ画像を拡大した画像と元画像からレティネックス処理画像を形成し、更に、そのレティネックス処理画像と元画像とから出力画像を形成している。
【特許文献１】特開２００１−６９５２５号公報
【特許文献２】特許３７３１５７７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかしながら、従来のレティネックス処理を行うコンピュータなどでは、畳み込み演算を浮動小数点演算により行っていたが、プリンタなどの安価な機器においては、ＣＰＵなどの演算装置の処理速度が十分ではなく、またメモリ容量も限られるため、この処理を行うことが困難であるという問題点があった。
【００１５】
本発明は、上記問題点を解決するためになされたものであり、レティネックス処理における畳み込み演算を固定小数点演算で行い、オーバーフローの発生を防止することができる画像処理装置および画像処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【００１６】
この目的を達成するために、請求項１記載の画像処理装置は、画像を構成する各画素について周辺平均値を求め、その周辺平均値に基づいてレティネックス処理を行うものであり、周辺平均値を求める際に、注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定するマスクサイズ設定手段と、そのマスクサイズ設定手段により設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定するシフト量設定手段と、そのシフト量設定手段により設定された小数点位置により畳み込み演算を行う演算手段とを備えている。
【００１７】
請求項２記載の画像処理装置は、請求項１記載の画像処理装置において、前記マスクは、所定の領域内の全画素のうちから一部の画素については間引いて係数を有し、その間引き数を設定する間引き数設定手段を備え、前記シフト量設定手段は、前記マスクサイズ設定手段により設定されたマスクサイズから前記間引き数設定手段により設定された間引き数を差し引いた値である参照数に応じて畳み込み演算における小数点位置を設定する。
【００１８】
請求項３記載の画像処理装置は、請求項２記載の画像処理装置において、前記シフト量設定手段は、画素値の最大値とフィルタ係数の最大値と前記参照数との積に基づいて小数点位置を設定する。
【００１９】
請求項４記載の画像処理装置は、請求項２記載の画像処理装置において、前記シフト量設定手段は、マスクを構成する全てのフィルタ係数と画素値の最大値との積の総和に基づいて小数点位置を設定する。
【００２０】
請求項５記載の画像処理装置は、請求項１から４のいずれかに記載の画像処理装置において、元画像を縮小して縮小画像を形成する縮小画像形成手段と、その縮小画像形成手段により形成された縮小画像の各画素についてその画素値と、周辺平均輝度とから反射率を求めることにより縮小レティネックス画像を形成する縮小レティネックス画像形成手段と、その縮小レティネックス画像形成手段により形成された縮小レティネックス画像の画素値が取る値の全範囲における各画素値の頻度を集計し、正規化を行う際のパラメータを設定する正規化パラメータ設定手段と、前記元画像の各画素について、画素の値とその画素の周辺平均輝度とから反射率を求め、その反射率を前記正規化パラメータ設定手段により設定されたパラメータに基づいて正規化した正規化レティネックス値を求め、その正規化レティネックス値と、元画像の画素値とに基づいて補正を行う補正手段とを備え、前記マスクサイズ設定手段は、前記縮小レティネックス画像形成手段により縮小レティネックス画像を形成する際に、前記縮小画像形成手段により形成された縮小画像の各画素について注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定し、前記シフト量設定手段は、前記マスクサイズ設定手段により設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定し、演算手段は、前記シフト量設定手段により設定された小数点位置により畳み込み演算を行う。
【００２１】
請求項６記載の画像処理プログラムは、画像を構成する各画素について周辺平均値を求め、その周辺平均値に基づいてレティネックス処理を行う画像処理装置により実行されるものであり、周辺平均値を求める際に、注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定するマスクサイズ設定ステップと、そのマスクサイズ設定ステップにより設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定するシフト量設定ステップと、そのシフト量設定ステップにより設定された小数点位置により畳み込み演算を行う演算ステップとを備えている。
【００２２】
請求項７記載の画像処理プログラムは、請求項６記載の画像処理プログラムにおいて、前記マスクは、所定の領域内の全画素のうちから一部の画素については間引いて係数を有し、その間引き数を設定する間引き数設定ステップを備え、前記シフト量設定ステップは、前記マスクサイズ設定ステップにより設定されたマスクサイズから前記間引き数設定ステップにより設定された間引き数を差し引いた値である参照数に応じて畳み込み演算における小数点位置を設定する。
【００２３】
請求項８記載の画像処理プログラムは、請求項７記載の画像処理プログラムにおいて、前記シフト量設定ステップは、画素値の最大値とフィルタ係数の最大値と前記参照数との積に基づいて小数点位置を設定する。
【００２４】
請求項９記載の画像処理プログラムは、請求項７記載の画像処理プログラムにおいて、前記シフト量設定ステップは、マスクを構成する全てのフィルタ係数と画素値の最大値との積の総和に基づいて小数点位置を設定する。
【００２５】
請求項１０記載の画像処理プログラムは、請求項６から９のいずれかに記載の画像処理プログラムにおいて、元画像を縮小して縮小画像を形成する縮小画像形成ステップと、その縮小画像形成ステップにより形成された縮小画像の各画素についてその画素値と、周辺平均輝度とから反射率を求めることにより縮小レティネックス画像を形成する縮小レティネックス画像形成ステップと、その縮小レティネックス画像形成ステップにより形成された縮小レティネックス画像の画素値が取る値の全範囲における各画素値の頻度を集計し、正規化を行う際のパラメータを設定する正規化パラメータ設定ステップと、前記元画像の各画素について、画素の値とその画素の周辺平均輝度とから反射率を求め、その反射率を前記正規化パラメータ設定ステップにより設定されたパラメータに基づいて正規化した正規化レティネックス値を求め、その正規化レティネックス値と、元画像の画素値とに基づいて補正を行う補正ステップとを備え、前記マスクサイズ設定ステップは、前記縮小レティネックス画像形成ステップにより縮小レティネックス画像を形成する際に、前記縮小画像形成ステップにより形成された縮小画像の各画素について注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定し、前記シフト量設定ステップは、前記マスクサイズ設定ステップにより設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定し、演算ステップは、前記シフト量設定ステップにより設定された小数点位置により畳み込み演算を行う。
【発明の効果】
【００２６】
請求項１記載の画像処理装置によれば、マスクサイズ設定手段は、周辺平均値を求める際に、注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定し、シフト量設定手段は、マスクサイズ設定手段により設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定し、演算手段は、シフト量設定手段により設定された小数点位置により畳み込み演算を行うので、畳み込み演算を固定小数点演算で行うとともに、オーバーフローの発生を防止することができるという効果がある。
【００２７】
請求項２記載の画像処理装置によれば、請求項１記載の画像処理装置の奏する効果に加え、マスクは、所定の領域内の全画素のうちから一部の画素については間引いて係数を有し、その間引き数を設定する間引き数設定手段を備え、シフト量設定手段は、マスクサイズ設定手段により設定されたマスクサイズから間引き数設定手段により設定された間引き数を差し引いた値である参照数に応じて畳み込み演算における小数点位置を設定するので、マスクのフィルタ係数の間引きを行う場合は、より適切な小数点位置を設定することができる。すなわち、限られたビット数の処理能力を有する場合に、小数点位置を左方に設定すると、オーバーフローが発生する恐れがあるが、右方に設定すると、オーバーフローが発生する恐れはなくなるが、有効桁数が減るため、精度が悪くなる。したがって、演算により生じる最大値を正確に計算し、適切な位置に小数点位置を設定する必要がある。よって、間マスクのフィルタ係数を間引く場合は、畳み込み演算の際に参照される正確な参照数に基づいて、小数点位置を設定する。
【００２８】
請求項３記載の画像処理装置によれば、請求項２記載の画像処理装置の奏する効果に加え、シフト量設定手段は、画素値の最大値とフィルタ係数の最大値と参照数との積に基づいて小数点位置を設定するので、簡易な演算で適切な小数点位置を設定することができる。
【００２９】
請求項４記載の画像処理装置によれば、請求項２記載の画像処理装置の奏する効果に加え、シフト量設定手段は、マスクを構成する全てのフィルタ係数と画素値の最大値との積の総和に基づいて小数点位置を設定するので、より正確な畳み込み演算の演算値の最大値を求めることができる。よってより適切な小数点位置を設定することができる。
【００３０】
請求項５記載の画像処理装置によれば、請求項１から４のいずれかに記載の画像処理装置の奏する効果に加え、元画像を縮小して縮小画像を形成する縮小画像形成手段と、その縮小画像形成手段により形成された縮小画像の各画素についてその画素値と、周辺平均輝度とから反射率を求めることにより縮小レティネックス画像を形成する縮小レティネックス画像形成手段と、その縮小レティネックス画像形成手段により形成された縮小レティネックス画像の画素値が取る値の全範囲における各画素値の頻度を集計し、正規化を行う際のパラメータを設定する正規化パラメータ設定手段と、元画像の各画素について、画素の値とその画素の周辺平均輝度とから反射率を求め、その反射率を正規化パラメータ設定手段により設定されたパラメータに基づいて正規化した正規化レティネックス値を求め、その正規化レティネックス値と、元画像の画素値とに基づいて補正を行う補正手段とを備えているので、高速で正規化パラメータを求めることができ、その結果、処理を開始してから、速く出力が開始されるという効果ある。
【００３１】
また、マスクサイズ設定手段は、縮小レティネックス画像形成手段により縮小レティネックス画像を形成する際に、縮小画像形成手段により形成された縮小画像の各画素について注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定し、シフト量設定手段は、マスクサイズ設定手段により設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定し、演算手段は、シフト量設定手段により設定された小数点位置により畳み込み演算を行うので、畳み込み演算にる演算値が、元画像について畳み込み演算を行う場合に比べて小さいので、限られたビット数の演算装置において、適切な位置に小数点位置を設定し、精度良く演算を行うことができるという効果がある。
【００３２】
請求項６記載の画像処理プログラムによれば、マスクサイズ設定ステップは、周辺平均値を求める際に、注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定し、シフト量設定ステップは、マスクサイズ設定ステップにより設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定し、演算ステップは、シフト量設定ステップにより設定された小数点位置により畳み込み演算を行うので、畳み込み演算を固定小数点演算で行うとともに、オーバーフローの発生を防止することができるという効果がある。
【００３３】
請求項７記載の画像処理プログラムによれば、請求項６記載の画像処理プログラムの奏する効果に加え、マスクは、所定の領域内の全画素のうちから一部の画素については間引いて係数を有し、その間引き数を設定する間引き数設定ステップを備え、シフト量設定ステップは、マスクサイズ設定ステップにより設定されたマスクサイズから間引き数設定ステップにより設定された間引き数を差し引いた値である参照数に応じて畳み込み演算における小数点位置を設定するので、マスクのフィルタ係数の間引きを行う場合は、より適切な小数点位置を設定することができる。すなわち、限られたビット数の処理能力を有する場合に、小数点位置を左方に設定すると、オーバーフローが発生する恐れがあるが、右方に設定すると、オーバーフローが発生する恐れはなくなるが、有効桁数が減るため、精度が悪くなる。したがって、演算により生じる最大値を正確に計算し、適切な位置に小数点位置を設定する必要がある。よって、間マスクのフィルタ係数を間引く場合は、畳み込み演算の際に参照される正確な参照数に基づいて、小数点位置を設定する。
【００３４】
請求項８記載の画像処理プログラムによれば、請求項７記載の画像処理プログラムの奏する効果に加え、シフト量設定ステップは、画素値の最大値とフィルタ係数の最大値と参照数との積に基づいて小数点位置を設定するので、簡易な演算で適切な小数点位置を設定することができる。
【００３５】
請求項９記載の画像処理プログラムによれば、請求項７記載の画像処理プログラムの奏する効果に加え、シフト量設定ステップは、マスクを構成する全てのフィルタ係数と画素値の最大値との積の総和に基づいて小数点位置を設定するので、より正確な畳み込み演算の演算値の最大値を求めることができる。よってより適切な小数点位置を設定することができる。
【００３６】
請求項１０記載の画像処理プログラムによれば、請求項６から９のいずれかに記載の画像処理プログラムの奏する効果に加え、元画像を縮小して縮小画像を形成する縮小画像形成ステップと、その縮小画像形成ステップにより形成された縮小画像の各画素についてその画素値と、周辺平均輝度とから反射率を求めることにより縮小レティネックス画像を形成する縮小レティネックス画像形成ステップと、その縮小レティネックス画像形成ステップにより形成された縮小レティネックス画像の画素値が取る値の全範囲における各画素値の頻度を集計し、正規化を行う際のパラメータを設定する正規化パラメータ設定ステップと、元画像の各画素について、画素の値とその画素の周辺平均輝度とから反射率を求め、その反射率を正規化パラメータ設定ステップにより設定されたパラメータに基づいて正規化した正規化レティネックス値を求め、その正規化レティネックス値と、元画像の画素値とに基づいて補正を行う補正ステップとを備えているので、高速で正規化パラメータを求めることができ、その結果、処理を開始してから、速く出力が開始されるという効果ある。
【００３７】
また、マスクサイズ設定ステップは、縮小レティネックス画像形成ステップにより縮小レティネックス画像を形成する際に、縮小画像形成ステップにより形成された縮小画像の各画素について注目画素と、その注目画素の周辺画素とに対し畳み込み演算を行うマスクのサイズを設定し、シフト量設定ステップは、マスクサイズ設定ステップにより設定されたマスクのサイズに応じて畳み込み演算における小数点位置を設定し、演算ステップは、シフト量設定ステップにより設定された小数点位置により畳み込み演算を行うので、畳み込み演算にる演算値が、元画像について畳み込み演算を行う場合に比べて小さいので、限られたビット数の演算装置において、適切な位置に小数点位置を設定し、精度良く演算を行うことができるという効果がある。
【発明を実施するための最良の形態】
【００３８】
以下、本発明の好ましい実施形態について添付図面を参照して説明する。図１は、本実施形態の画像処理を行う機能を有するプリンタ１の電気的な構成を示したブロック図である。本実施形態においては、プリンタ１に搭載された画像処理プログラムは、パーソナルコンピュータ（以下「ＰＣ」と称する）２や、デジタルカメラ２１や、外部メディア２０から入力された画像データ（元画像データ）に対しレティネックス処理（Ｒｅｔｉｎｅｘ処理）などを実行して、画像データの逆光画像部分などの低画質領域の補正を実行するように構成されている。
【００３９】
図１に示すように、プリンタ１には、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、印刷ヘッドなどから構成され、印刷媒体（例えば、紙媒体など）への印刷（出力）を行う印刷部１５、出力画像サイズなどの入力値をユーザが入力可能なユーザ操作部（例えば、テンキーなど）を有する操作パネル１６とを備えている。
【００４０】
また、プリンタ１は、ケーブル５を介してＰＣ２と接続可能なインターフェイス（以下「Ｉ／Ｆ」と称する）１７と、ケーブル６を介してデジタルカメラ２１と接続可能なＩ／Ｆ１８と、外部メディア２０（例えば、ＳＤメモリカード、メモリスティックなどのフラッシュメモリにより構成される）を着脱自在に装着可能な外部メディアスロット１９とを備えている。これらのＩ／Ｆ１７、１８により行われる通信方法としてＵＳＢ（Universal  Serial  Bus）が使用される。
【００４１】
よって、プリンタ１は、ＰＣ２に記憶されている画像データをケーブル５及びＩ／Ｆ１７を介して入力することが可能であると共に、デジタルカメラ２１によって撮影された画像データをケーブル６及びＩ／Ｆ１８を介して入力することが可能である。さらに、外部メディアスロット１９に装着された外部メディア２０から、その外部メディア２０に記憶されている画像データを入力することが可能である。
【００４２】
ＣＰＵ１１は、プリンタ１全体を制御する演算処理装置である。ＲＯＭ１２は、ＣＰＵ１１により実行される各種制御プログラムやそのプログラムを実行する際に用いられる固定値などを記憶するものであり、レティネックス処理などの画像の処理を行う画像処理プログラムを記憶する画像処理プログラムメモリ１２ａや、印刷を行うための印刷制御プログラムを記憶する印刷制御プログラムメモリ１２ｂ等が備えられている。
【００４３】
ＲＡＭ１３は、制御プログラムがＣＰＵ１１により実行される際に必要な各種レジスタ群などが記憶されるワーキングエリアや、処理中のデータを一時的に格納するテンポラリエリア等を有しランダムにアクセスできる書き換え可能なメモリであり、元画像データを記憶する元画像メモリ１３ａと、元画像を縮小し、縮小した画像のレティネックス処理において求められる反射率を記憶する縮小レティネックス画像メモリ１３ｂと、ヒストグラム処理において各画素値の頻度が記憶されるヒストグラムメモリ１３ｃと、元画像のサイズを記憶する元画像サイズメモリ１３ｄと、使用者などにより設定される印刷を行う際の印刷パラメータを記憶する印刷パラメータメモリ１３ｅと、印刷パラメータなどに基づいて決定される縮小画像サイズと縮小アルゴリズムがそれぞれ記憶される縮小画像サイズメモリ１３ｆと縮小アルゴリズムメモリ１３ｇと、注目画素の周辺平均輝度を求める際に用いられるマスク（フィルタ）の係数を記憶するマスクメモリ１３ｈと、マスクを用いて畳み込み演算を行う際の小数点位置を記憶するシフト量メモリ１３ｉ等を備えている。
【００４４】
元画像データメモリ１３ａは、ＰＣ２、デジタルカメラ２１、及び外部メディア２０から、それぞれ、Ｉ／Ｆ１７、Ｉ／Ｆ１８、及び外部メディアスロット１９を介して入力した画像データを記憶するものである。元画像データを１ライン単位で記憶し、縮小画像を形成することができるライン数のデータを読み込むと、縮小画像を形成する。縮小アルゴリズムが、最近傍法である場合には、１ラインのデータを記憶し、バイリニア法である場合には、２ライン、バイキュービック法である場合には、３ライン、平均画素法の場合は、縮小率に応じたライン数の元画像データが記憶される。なお、本実施形態では、元画像データ及び出力画像データはいずれも、ＲＧＢ値から構成され、これらの各ＲＧＢ値は、８ビット（１バイト）のデータサイズにより表され、１０進数では、「０」〜「２５５」の範囲の値をとる。
【００４５】
ＲＧＢ値は、光の３原色である赤を表すＲ値と、緑を表すＧ値と、青を示すＢ値とを構成成分とする値である。光の３原色の混色により各種の色は生成されるので、元画像の各画素の色は、Ｒ値とＧ値とＢ値との組合せ（ＲＧＢ値）により１の色（色相や階調など）が示される。このＲＧＢ値の値が大きいほど、輝度（明度）は高くなる。
【００４６】
縮小レティネックス画像メモリ１３ｂは、元画像を縮小し、その縮小した画像の輝度信号のみについてレティネックス処理において求められる反射率Ｒｓ（ｘ，ｙ）を記憶するメモリである。元画像を縮小する方法としては、縮小する画像の画素に対応する元画像の位置に最も近い画素の値をサンプリングし、そのサンプリングした画素の値をそのまま用いる最近傍（Nearest  Neighbor）法や、縮小する画像の画素に対応する元画像の位置の周囲の画素を用いて補間演算を行うバイリニア法、バイキュービック法や、平均画素法などが知られている。画質より処理速度を優先する場合は、最近傍法が用いられ、処理速度より画質を優先する場合は、バイキュービック法や、平均画素法が用いられる。
【００４７】
これらいずれかの方法により元画像が縮小され、その縮小された画像の各画素（ピクセル）について反射率が上述の数式１を用いて演算され、この縮小レティネックス画像メモリ１３ｂに記憶される。
【００４８】
ヒストグラムメモリ１３ｃは、縮小画像の各画素の反射率Ｒｓ（ｘ，ｙ）の頻度を集計してヒストグラムを形成するためのメモリである。ヒストグラムが作成されると、そのヒストグラムに基づいて、正規化を行うためのパラメータである上限値および下限値（クリップ範囲）が定められる。
【００４９】
元画像サイズメモリ１３ｄは、元画像のサイズを記憶するもので、元画像データをＰＣ２などから読み込む際に、元画像データに付随して読み込まれ、この元画像サイズメモリ１３ｄに記憶される。縮小画像のサイズおよび縮小アルゴリズムを決定する際には、この元画像サイズメモリ１３ｄに記憶された元画像サイズが参照される。
【００５０】
印刷パラメータメモリ１３ｅは、印刷を行う際の印刷モードを高画質の写真モードとするか、普通画質の普通モードとするか、また、記録媒体の種類を光沢紙、インクジェット紙、普通紙のいずれにするか、また、記録媒体のサイズをＡ４，Ｂ５、レターなどのいずれにするかなどを使用者が設定し、その設定されたパラメータを記憶する。印刷モードが選択されると、選択された印刷モードに設定された印刷の解像度や液滴サイズなどがパラメータとして記憶され、印刷が実行される際には、これらのパラメータに従って印刷が行われる。
【００５１】
これらの印刷パラメータや、元画像のサイズに基づいて、縮小画像のサイズと縮小するアルゴリズが決定され、縮小画像サイズメモリ１３ｆと縮小アルゴリズメモリ１３ｇにそれぞれ記憶される。主として、処理速度より画質が優先される場合は、縮小画像サイズとして大きいサイズが設定され、画質より処理速度が優先される場合は、縮小画像サイズとして小さいサイズが設定される。縮小アルゴリズムとしては、上記、最近傍法、バイリニア法、平均画素法などの中から選択される。
【００５２】
これらの印刷パラメータは、ＰＣ２において使用者により設定され、プリンタ１に入力されるとともに、操作パネル１６に備えられる操作子によっても設定することができる。
【００５３】
マスクメモリ１３ｈは、各画素の周辺平均輝度を求める際に用いられるマスク（フィルタ）を記憶するメモリであり、縮小画像用のマスクと元画像用のマスクそれぞれを記憶する。
【００５４】
マスクサイズは、縮小画像に対応して予め設定され、縮小画像の元画像に対する比率（縮小率）に応じて、元画像の各画素について周辺平均輝度を算出する場合に用いられる元画像用マスクのサイズが決定される。マスクのサイズが設定されると、マスクの中央に位置する注目画素に対応する位置からの距離に応じて、ガウス関数を用いて、マスクを構成する係数が算出され、このマスクメモリ１３ｈに記憶される。
【００５５】
シフト量メモリ１３ｉは、マスクを用いて畳み込み演算を行う際の小数点位置（シフト量）を記憶するものである。畳み込み演算においては、各画素について画素値とその画像に対応するフィルタ係数とが乗算され、その積が累算される。画素値とフィルタ係数との乗算は、固定小数点で演算すると高速で行われる。演算値を格納するレジスタの桁数は、有限であり、小数点位置を上位の桁に設定すると、積を累算するとオーバーフローする恐れがある。また、逆に、小数点位置を下位の桁に設定すると、オーバーフローする恐れは無いが、十分な精度が得られなくなる。そこで、最適な小数点位置を設定する必要がある。
【００５６】
マスクが設定されると、画素を表す数値のビット数と、マスクの係数などにより最適な小数点位置が算出される。なお、小数点位置をシフトするという意味で、小数点位置を、シフト量という。このシフト量は、縮小画像用マスクおよび元画像用マスクそれぞれに算出され、シフト量メモリ１３ｉに記憶される。
【００５７】
操作パネル１６には、印刷パラメータなどを表示するＬＣＤと、印刷パラメータや画像処理に関するパラメータを設定したり、画像処理や印刷処理の実行を指示する各種操作子が備えられている。
【００５８】
次に、図２を参照してプリンタ１に接続されたＰＣ２おいて設定される種々の印刷パラメータについて説明する。図２は、ＰＣ２において、印刷パラメータの設定を選択した際に表示器に表示される印刷パラメータ設定画面２８である。
【００５９】
印刷パラメータ設定画面２８には、印刷を行う記録媒体である印刷用紙を選択設定する用紙種類選択ボックス２８ａと、印刷用紙のサイズを選択設定する用紙サイズ設定ボックス２８ｂと、印刷モードを設定する印刷モード設定ボックス２８ｃと、印刷を行う部数を設定する部数設定ボックス２８ｄなどが表示される。
【００６０】
用紙種類選択ボックス２８ａは、選択された用紙種類を表示する表示エリアと、そのエリアの右端に下方に向いた三角形が描かれたアイコンとを有し、このアイコンにマウスを操作してカーソル合わせ、クリックすると図２に示すようにプルダウンメニューが表示される。つぎに表示されたプルダウンメニューのいずれかの項目にカーソルを移動し、マウスに備えられたスイッチをクリックすると、カーソルにより指定される項目が選択される。
【００６１】
この実施形態では、印刷用紙の種類として、普通紙、光沢紙のいずれかを選択することができ、図２に示す例では、普通紙が選択された状態を示している。
【００６２】
同様に、用紙サイズ設定ボックス２８ｂは、選択された用紙のサイズを表示するエリアと、選択を行うためのプルダウンメニューの表示を指示するアイコンとを有し、用紙のサイズとしては、Ａ４，レター，５”×７”および４”×６”のいずれかを選択することができる。
【００６３】
印刷モード設定ボックス２８ｃも同様に、選択された印刷モードを表示するエリアと、選択を行うためのプルダウンメニューの表示を指示するアイコンとを有し、印刷モードとして、写真モードと普通モードのいずれかを選択することができる。写真モードは、普通モードに比べ、高画質で印刷を行うモードであり、高解像度で印刷が行われる。例えば、写真モードの解像度は、１２００×１２００ｄｐｉであり、普通モードの解像度は、低解像度であって、６００×６００ｄｐｉである。なお、インクジェット方式のプリンタでは解像度に応じて液滴サイズや、使用されるインクの種類が異なるようにしてもよい。
【００６４】
印刷部数設定ボックス２８ｄは、設定された部数を数値で表示するエリアからなり、そのエリアの右側に、数値を増加させるための上向きの三角形を表示したインクリメントアイコンと、数値を減少させるための下向きの三角形を表示したデクリメントアイコンを備え、これらのアイコンにカーソルを移動してマウスを操作することにより、印刷部数を設定することができる。
【００６５】
この印刷パラメータ設定画面２８には、上記アイコン以外に、用紙に対する印刷の向きを設定するラジオボタンや、設定を有効にして設定画面の消去を指示するＯＫボタンや、設定を無効にして設定画面の消去を指示するキャンセルボタンや設定の説明画面の表示を指示するヘルプボタンが表示される。
【００６６】
このようにしてＰＣ２によりて設定された印刷パラメータは、ケーブル５およびＩ／Ｆ１７を介してプリンタ１に入力され、印刷パラメータメモリ１３ｅに記憶される。
【００６７】
次に、図３および図４を参照してＣＰＵ１１により実行される画像処理について説明する。図３および図４は、画像処理を示すフローチャートである。図３に示す処理は、前処理と呼ばれる処理であり、この処理では、元画像を縮小し、縮小した画像に基づいて反射率Ｒの正規化を行うためのクリップ範囲が設定される
この前処理では、まず、元画像データに付随している元画像のサイズを示すデータを元画像サイズメモリ１３ｄに記憶する（Ｓ１）。この画像のサイズを示すデータは、通常長方形の画像を構成する縦と横のピクセル数により表される値である。
【００６８】
次に、印刷パラメータメモリ１３ｅに記憶された印刷パラメータの中から縮小画像サイズと縮小アルゴリズムを設定する際に必要なパラメータを読み出す（Ｓ２）。この、実施形態では、印刷パラメータのうち、印刷モード、用紙種類、用紙サイズが必要なパラメータである。
【００６９】
次に、これらのパラメータなどに基づいて縮小画像サイズと縮小アルゴリズムを決定し、決定した縮小画像サイズを縮小画像サイズメモリ１３ｆ、縮小アルゴリズムを１３ｇにそれぞれ記憶する（Ｓ３）。この処理については、図５〜７を参照して後述する。
【００７０】
次に、縮小画像用のマスク（フィルタＦｓ（ｘ，ｙ））と元画像用のマスク（Ｆ（ｘ，ｙ））を生成し、マスクメモリ１３ｈに記憶する（Ｓ４）。マスクの生成については、図８を参照して後述する。次に、縮小画像用マスク、元画像用マスクそれぞれについて、シフト量を算出し、シフト量メモリ１３ｉに記憶する（Ｓ５）。このシフト量を算出する処理については、図９を参照して後述する。
【００７１】
次に、縮小画像を形成する。縮小画像を形成する処理では、まず、元画像を記憶しているＰＣ２などから、１ライン単位で読み込み、ＲＡＭ１３の元画像メモリ１３ａに記憶する（Ｓ６）。デジタルカメラなどにより形成された画像データは、ＪＰＥＧなどの圧縮法により圧縮されて記憶され、長方形の画像の横方向のピクセルのライン順に記憶されている。
【００７２】
次に、元画像メモリ１３ａに記憶された画像データのライン数が、縮小画像アルゴリズムメモリ１３ｇに記憶された縮小アルゴリズムにより縮小することができるライン数のデータが記憶されたか否かを判断し（Ｓ７）、縮小できるライン数が記憶されていない場合は（Ｓ７：Ｎｏ）、Ｓ４の処理に戻り、縮小できるライン数が記憶されている場合は（Ｓ７：Ｙｅｓ）、その縮小アルゴリズムに従って縮小画像データを形成し（Ｓ８）、その縮小画像をＲＡＭに記憶する（Ｓ９）。縮小画像データをＲＡＭに記憶し、次に１ライン分の元画像を読み込んで元画像メモリ１３ａに記憶する場合は、先に記憶したデータに上書きする。このことにより、元画像メモリ１３ａの記憶容量を削減することができる。
【００７３】
次に、元画像の全てのラインについて走査を行って縮小画像を形成したか否かを判断し（Ｓ１０）、まだ、未処理のラインが残っている場合は（Ｓ１０：Ｎｏ）、Ｓ４の処理に戻り、全ラインについて処理を終了した場合は（Ｓ１０：Ｙｅｓ）、縮小画像の各画素について輝度信号Ｙと色信号Ｃｂ，Ｃｒに変換する（Ｓ１１）。
【００７４】
輝度信号Ｙおよび色信号Ｃｂ，Ｃｒは、元の画素のＲＧＢ値から次式により演算される。
【００７５】
【数３】
2008059287.tif 000005
輝度信号Ｙと色信号Ｃｂ，Ｃｒの値をそれぞれ記憶し、後の演算で使用するようにしてもよいが、記憶容量が小さい場合は、ＲＧＢ値のみを記憶し、必要に応じて演算して求めるようにしてもよい。
【００７６】
次に、上式により演算された輝度信号Ｙについて、反射率Ｒｓ（ｘ，ｙ）を算出する。（Ｓ１２）なお、「ｓ」は、縮小画像についての接尾辞であり、元画像については、接尾辞を付さないものとする。反射率Ｒｓは、縮小画像の各画素の輝度値をＩｓ（ｘ，ｙ）、縮小画像用のフィルタをＦｓ（ｘ，ｙ）として、次式により演算される。
【００７７】
【数４】
2008059287.tif 000006
なお、「＊」は、畳み込み演算（コンボリューション）を示し、この畳み込み演算により周辺平均輝度（周辺平均値）が求められる。なお、ｌｏｇは、ｅを底とする自然対数である。この畳み込み演算において、小数点位置は、シフト量メモリ１３ｉに記憶された縮小画像用のシフト位置に基づいて行われる。
【００７８】
次に、上記演算により求められた反射率Ｒｓ（ｘ，ｙ）をＲＡＭ１３の縮小レティネックス画像メモリ１３ｂに記憶する（Ｓ１３）。
【００７９】
次に、Ｒｓ（ｘ，ｙ）を最大値および最小値と比較する（Ｓ１４）。詳細には、最初の座標について求めた反射率Ｒｓ（ｘ，ｙ）を最大値および最小値とし、そのつぎから求めた反射率Ｒｓ（ｘ，ｙ）と最大値および最小値とをそれぞれ比較し、今回求めた反射率Ｒｓ（ｘ，ｙ）が、最大値より大きい場合は、今回求めた反射率Ｒｓ（ｘ，ｙ）を新たな最大値とし、今回求めた反射率Ｒｓ（ｘ，ｙ）が、最小値より小さい場合は、今回求めた反射率Ｒｓ（ｘ，ｙ）を新たな最小値とし、今回求めた反射率Ｒｓ（ｘ，ｙ）が、最大値より小さく、最小値より大きい場合は、最大値、最小値を変更しないという処理である。
【００８０】
次に、縮小画像の全ての座標についてＳ１２〜Ｓ１４の処理を行ったか否かを判断し（Ｓ１５）、まだ、未処理の座標がある場合は（Ｓ１５：Ｎｏ）、Ｓ１２の処理に戻り、全ての座標についての処理を終了した場合は（Ｓ１５：Ｙｅｓ）、Ｓ１４の処理により求めた最大値と最小値に基づいて、反射率Ｒｓ（ｘ，ｙ）を正規化し、ヒストグラムを形成する（Ｓ１６）。
【００８１】
次に、その形成されたヒストグラムからメディアン値を求め（Ｓ１７）、そのメディアン値とヒストグラムとから反射率Ｒｓ（ｘ，ｙ）のクリップされる範囲（クリップ範囲）を定める（Ｓ１８）。このクリップ範囲は、例えば、メディアン値より大きい値で、全標本の４５％の標本が含まれる上限値をクリップ範囲の上限値とし、メディアン値より小さい値で、全標本の４５％が含まれる下限値をクリップ範囲の下限値とするものである。
【００８２】
以上の前処理により、元画像を縮小した縮小画像の反射率により構成される縮小レティネックス画像を形成し、その縮小レティネックス画像から、元画像の反射率を正規化する際のクリップ範囲が求められる。このことにより、クリップ範囲を求めるための演算の回数が、元画像について求める演算の回数より非常に少なくすることができ、処理速度が速くなる。また、縮小された画像のレティネックス画像を記憶するので、元画像のレティネックス画像を記憶する場合に比べ、少ない記憶容量で処理することができるという利点がある。また、縮小画像を用いて求めたクリップ範囲と、元画像を用いて求めたクリップ範囲とは、大差がない。次表は、縮小画像により求めたクリップ範囲（上限値と下限値）と元画像により求めたクリップ範囲との差異を示すものである。
【００８３】
【表１】
2008059287.tif 000007
この表が示すように、元画像により求めた最大値は、２．７１２、最小値は、−４．０６３であり、縮小画像により求めた最大値は、１．７２９、最小値は、−２．６０７である。よって、元画像により求めた最大値と縮小画像により求めた最大値との差は、０．９８３であり、元画像により求めた最小値と縮小画像により求めた最小値との差は、１．４５６であって、かなり大きな差が認められる。
【００８４】
一方、元画像により求めたクリップ範囲の上限値は、０．８２５、下限値は、−０．８２２であり、縮小画像により求めた上限値は、０．７４２、下限値は、−０．７５５である。よって、元画像により求めた上限値と縮小画像により求めた上限値との差は、０．０８３であり、元画像により求めた下限値と縮小画像により求めた下限値との差は、０．０６７であって、これらの差が小さいことが分かる。
【００８５】
次に、図３に示す処理により求められたクリップ範囲に基づいて行う後処理である元画像のレティネックス処理について説明する。図４は、元画像のレティネックス処理を示すフローチャートである。なお、この後処理では、元画像の各画素について処理が行われ、処理された画素値は、順次印刷部１５に出力される。
【００８６】
まず、元画像について、反射率Ｒ（ｘ，ｙ）を数式１を用いて算出する（Ｓ２１）。この演算において、フィルタＦ（ｘ，ｙ）は、マスクメモリ１３ｈに記憶された元画像用のマスクであり、この畳み込み演算における小数点位置は、シフト量メモリ１３ｉに記憶された元画像用のシフト位置に基づいて行われる。
【００８７】
次に、縮小画像を用いて求めたクリップ範囲に基づいて、Ｒ（ｘ，ｙ）を正規化し、正規化反射率ｒｅｆｌｅ（ｘ，ｙ）を得る（Ｓ２２）。
【００８８】
次に、このｒｅｆｌｅ（ｘ，ｙ）を用いて、次式により輝度についてレティネックス処理を行った画素の値Ｏｕｔ（ｘ，ｙ）を得る（Ｓ２３）。
【００８９】
【数５】
2008059287.tif 000008
次に、このＯｕｔ（ｘ，ｙ）と、色信号Ｃｂ、Ｃｒとに基づいて、ＲＧＢ値に変換する（Ｓ２４）。この変換は、次式により算出される。
【００９０】
【数６】
2008059287.tif 000009
以上の処理により元画像の輝度信号にレティネックス処理が施され、色信号に基づいてＲＧＢ値に戻した画素値が求められる。次に、この処理された画素値を印刷部１５に出力する（Ｓ２５）。よって、前処理により、正規化を行うクリップ範囲が特定されているので、後処理では、順次各画素について処理を行い印刷部１５に出力することができる。その結果、処理を開始してから、印刷が開始されるまでの時間を短縮することができる。
【００９１】
次に、元画像の全画素について処理を終了したか否かを判断し（Ｓ２６）、まだ処理を終了していない画素がある場合は（Ｓ２６：Ｎｏ）、Ｓ２１の処理に戻り、全ての画素について処理を終了した場合は（Ｓ２６：Ｙｅｓ）、この後処理を終了する。
【００９２】
次に、図５、図６および図７を参照して、Ｓ４の処理である縮小画像サイズと縮小アルゴリズムを決定する処理について説明する。元画像を縮小し、その縮小画像を用いてクリップ範囲を決定し、そのクリップ範囲に基づいて元画像の各画素について補正処理を行うので、クリップ範囲を速く決定することができるとともに、少ない記憶容量で処理することができる。しかしながら、縮小画像のサイズが小さい場合や、縮小された画像の画質の劣化が大きい場合には、適切なクリップ範囲を設定できない場合がある。また、縮小画像サイズを必要以上に大きくしたり、縮小画像の画質を必要以上に高くすれば、処理時間が長くかかり、処理速度が低下する。従って、使用者が設定する印刷パラメータなどに応じた適切な縮小画像のサイズや縮小アルゴリズムを選択する必要がある。
【００９３】
図５および図６は、印刷モード、用紙種類、用紙サイズ、元画像のサイズに応じて縮小画像サイズと縮小アルゴリズムを設定するためのルックアップテーブルであり、図５は、写真モード用のもの、図６は、普通モード用のものである。これらのテーブルは、ＲＯＭ１２のテーブルメモリ１２ｃに記憶され、図７に示すフローチャートの処理において参照される。
【００９４】
図５は、印刷モードが写真モードである場合に選択されるテーブルであって、まず、用紙の種類により分類される。この実施形態では、光沢紙と普通紙の２種類で分類しているが、これら以外に、インクジェット紙などにより分類してもよい。
【００９５】
用紙種類の次に、用紙サイズにより分類される。用紙サイズは、用紙サイズが小さい方から順に、４”×６”、５”×７”、レター、Ａ４の４種類に分類され、さらに、各用紙サイズについて元画像サイズにより分類される。元画像のサイズとしては、６００×８００、１２００×１６００、２４００×３２００（ピクセル）の３種類に分類され、それぞれのサイズについて、縮小画像サイズと縮小アルゴリズムとが設定される。
【００９６】
この実施形態では、縮小画像サイズは、１５０×２００、３００×４００、４５０×６００の３種類、縮小アルゴリズムは、平均画素法（ＭＥ）、バイリニア法（ＢＬ）、最近傍法（ＮＮ）の３類のいずれかが設定される。図６は、印刷モードが普通モードである場合に選択されるテーブルであって、写真モードと同様に、用紙種類、用紙サイズ、元画像サイズにより分類され、縮小画像サイズと縮小アルゴリズムとが設定される。
【００９７】
図７は、図３に示すフローチャートのＳ４の処理の詳細を示すフローチャートである。この処理では、まず印刷パラメータとして選択された印刷モードが写真モードであるか普通モードであるかを判定する（Ｓ３１）。印刷モードが、写真モードである場合は、写真モード用のテーブルを選択し（Ｓ３２）、印刷モードが、普通モードである場合は、写真モード用のテーブルを選択し（Ｓ３３）、印刷パラメータとして設定されている用紙種類、用紙サイズ、および元画像サイズメモリ１３ｄに記憶されている元画像サイズとから、設定されている縮小画像サイズと縮小アルゴリズムとを読み出し、縮小画像サイズメモリ１３ｆと縮小アルゴリズムメモリ１３ｇとにそれぞれ記憶する（Ｓ３４）。
【００９８】
次に、図８と図９とを参照して、マスクの生成とマスクを用いて畳み込み演算を行う際のシフト量を算出する処理について説明する。
【００９９】
マスクは、注目画素の周辺の画素の平均輝度を算出するためのフィルタであるが、所定の大きさの領域を必要とする。しかしながら、その領域の全ての座標についてフィルタ係数を有し、畳み込み演算を行うと計算量が膨大になる。そこで、適度に係数を間引くことにより、計算量を削減することが行われている。
【０１００】
図８は、マスクが所定の領域を有する場合に、その領域内のいずれの座標位置にフィルタ係数が存在するかを示す模式図である。図８（ａ）は、マスクの所定の領域が９×９の座標をとるものとし、３つの座標につき１つの座標にフィルタ係数を有する場合を示す。図では、係数が存在する座標をグレイ色、係数が存在しない座標を白色で示す。
この図８（ａ）の場合は、間引き度Ａを１／３とする。間引き度Ａが１の場合は、間引きを行わず、間引き度Ａが１／２の場合は、座標の半分を間引くものとする。
【０１０１】
図８（ａ）に示すマスクの場合は、全座標の数が８１（９×９）であり、間引き度Ａが１／３であるので、８１×（１／３）＝２７の座標にフィルタ係数を有する。よって、
８１−２７＝５４の座標が間引かれ、この値５４を間引き数という。
【０１０２】
フィルタ係数が存在する座標位置が決定されると、ガウス関数を用いて、各座標のフィルタ係数を演算により求める。この演算により求められた係数は、マスクメモリ１３ｈに座標に対応付けて記憶される。
【０１０３】
マスクは、縮小画像用のマスクＦｓと元画像用のマスクＦとが形成される。まず、縮小画像用のマスクＦｓが形成され、つぎに、元画像用のマスクＦが形成される。元画像用のマスクＦのサイズは、縮小画像用マスクＦｓのサイズを縮小率で除した値とする。また、縮小画像を形成する縮小アルゴリズムが最近傍法である場合には、縮小画像用マスクＦｓで参照した画素は、元画像用マスクＦにおいても参照するように係数の座標位置を構成する。このことにより、縮小画像を用いて決定されたクリップ範囲を用いて元画像を処理する場合に、異なる画素を参照する場合に比べ、画質の劣化を防止することができる。
【０１０４】
例えば、縮小画像用のマスクサイズを９×９とした場合に、縮小画像サイズが元画像のサイズの１／２である場合には、元画像用のマスクサイズを１８×１８とし、６つの座標につき１つの座標にフィルタ係数を有するようにする。
【０１０５】
元画像用のマスクについても、係数を有する座標が決定されると、ガウス関数を用いて、各座標のフィルタ係数を演算により求め、求められた係数は、マスクメモリ１３ｈに座標に対応付けて記憶される。
【０１０６】
図８（ｂ）は、所定の領域のうち、係数が存在する位置を決定する極座標関数Ａを示す図である。この関数Ａは、対数螺旋関数であり、ａおよびｂを定数、ｒを半径、θを偏角、直交座標の横軸をｘ、縦軸をｙとし、次式により表される。
【０１０７】
【数７】
2008059287.tif 000010
この関数Ａは、マスクの中央である注目画素に対応する座標を原点として、関数が通る座標位置にフィルタ係数を有し、関数が通らない座標には、フィルタ係数が存在しないものとする。このような関数を用いると、注目画素に近い領域では、フィルタ係数の密度が高く、注目画素から遠い領域では、フィルタ係数の密度を低くすることができる。よって、注目画素に近く、周辺輝度に大きく影響する領域と注目画素より遠く、周辺輝度に影響が少ない領域とで係数の間引く割合を変えることができ、画質の劣化を抑制しながら、まび間引き量を大きくすることができる。
【０１０８】
次に、図９を参照して、シフト量を算出する処理について説明する。図９は、シフト量算出処理を示すフローチャートである。このシフト量算出処理では、まず、マスク参照数Ｐを算出する（Ｓ４１）。マスク参照数Ｐは、間引き度をＡ、マスクサイズをＭａｓｋＳｉｚｅとして、次式で算出される。
Ｐ＝Ａ×ＭａｓｋＳｉｚｅ
図８（ａ）の例では、ＭａｓｋＳｉｚｅが、８１、Ａ＝１／３、よってＰ＝２７である。
【０１０９】
次に、畳み込み演算の演算値の最大値ＣｏｎｖＭａｘを求める（Ｓ４２）。
フィルタ係数の最大値をＢ、画素値の最大値をＰｉｘｅｌＭａｘとすると、ＣｏｎｖＭａｘは、次式で算出される。
ＣｏｎｖＭａｘ＝Ｐ×Ｂ×ＰｉｘｅｌＭａｘ
次に、シフト量ＢｉｔＭａｘを算出する（Ｓ４３）。
シフト量ＢｉｔＭａｘは、ＶａｌｕｅＭａｘをＣＰＵ１１が固定小数点演算で扱うことができる最大値として、次式を満たす最大値として算出される。
【０１１０】
【数８】
2008059287.tif 000011
次に、以上のようにして算出したシフト量をシフト量メモリ１３ｉに記憶する（Ｓ４４）。なお、このシフト量は、縮小画像用のマスクＦｓと元画像用のマスクＦそれぞれについて求め、シフト量メモリ１３ｉに記憶する。
【０１１１】
上記、ＣｏｎｖＭａｘを算出する式では、フィルタの係数は、すべて最大値Ｂであるとして算出したが、より精度を高くするには、フィルタの係数をＷｆｕｎｃ（ｒ）、ｒは、注目画素からの距離とし、
【０１１２】
【数９】
2008059287.tif 000012
として求めることができる。このことにより、各座標のフィルタの係数の値を用いた最大値ＣｏｎｖＭａｘを得ることができるので、算出は複雑になるが、より正確にオーバーフローを生じない小数点位置を設定し、精度の高い畳み込み演算を行うことができる。
【０１１３】
なお、ＭＳＲ（マルチスケールレティネックス）法の場合には、複数のマスクについてＣｏｎｖＭａｘを求め、数式８によりシフト量を求める。
【０１１４】
以上、実施形態について説明したように、レティネックス処理において行われる畳み込み演算のシフト量が、マスクのサイズ、間引き数などにより設定されるので、固定小数点演算により畳み込み演算が行われる際に、オーバーフローを生じさせることなく、精度を維持して演算を行うことができる。
【０１１５】
なお、請求項に記載のマスクサイズ設定手段およびマスクサイズ設定ステップは、図３に示すフローチャートのＳ４の処理が該当し、シフト量設定手段およびシフト量設定ステップは、図３に示すフローチャートのＳ５の処理が該当し、演算手段および演算ステップは、図３に示すフローチャートのＳ１２の処理および図４に示すフローチャートのＳ２１の処理が該当し、間引き数設定手段および間引き数設定ステップは、図９に示すフローチャートのＳ４１の処理が該当し、縮小画像形成形成手段および縮小画像形成ステップは、図３に示すフローチャートのＳ８の処理が該当し、縮小レティネックス画像形成手段および縮小レティネックス画像形成ステップは、図３に示すフローチャートのＳ１２の処理が該当し、正規化パラメータ設定手段および正規化パラメータ設定ステップは、図３に示すフローチャートのＳ１８の処理が該当し、補正手段および補正ステップは、図４に示すフローチャートの処理が該当する。
【０１１６】
以上、実施形態に基づいて本発明を説明したが、本発明は上記各実施形態に何ら限定されるものでなく、本発明の趣旨を逸脱しない範囲内で種々の改良変形が可能であることは容易に推察できるものである。
【０１１７】
例えば、上記実施形態では、色表現系はＲＧＢ形式としたが、ＲＧＢ形式以外の他の色表現系、例えば、ＣＭＹ形式などに本発明を適用してもよい。
【０１１８】
また、上記実施形態では、本発明の画像処理プログラムは、プリンタ１に組み込まれたＣＰＵ１１により実行されるものとしたが、パーソナルコンピュータにアプリケーションとして供給され、パーソナルコンピュータに組み込まれたＣＰＵなどにより実行されるようにしてもよい。
【０１１９】
また、レティネックス処理は、ＳＳＲ（シングルスケール法）であってもＭＳＲ（マルチスケール法）であってもよい。
【０１２０】
また、上記実施形態の画像処理では、ＣＰＵ１１によりレティネックス処理などを行うものとしたが、ＤＳＰ（Digital  Signal  Processor）により行ってもよい。ＤＳＰを用いると、より高速に積和演算などの処理を実行することができる。
【図面の簡単な説明】
【０１２１】
【図１】本発明の実施形態の画像処理プログラムを搭載したプリンタの電気的構成を示すブロック図である。
【図２】印刷パラメータを設定する画面を示す図である。
【図３】画像処理プログラムにより行われる前処理を示すフロー図である。
【図４】前処理に続いて実行される後処理を示すフローチャートである。
【図５】印刷モードが写真モードである場合に参照される写真モード用テーブルである。
【図６】印刷モードが普通モードである場合に参照される普通モード用テーブルである。
【図７】テーブルを参照する処理を示すフローチャートである。
【図８】マスクが所定の領域を有する場合に、その領域内のいずれの座標位置にフィルタ係数が存在するかを示す模式図である。
【図９】シフト量を決定する処理を示すフローチャートである。
【図１０】正規化を行うためのクリップ範囲について説明するためのヒストグラム図である。
【符号の説明】
【０１２２】
１                        プリンタ
２                        パーソナルコンピュータ
１１                      ＣＰＵ
１２                      ＲＯＭ
１２ａ                    画像処理プログラムメモリ
１３                      ＲＡＭ
１３ａ                    元画像メモリ
１３ｂ                    レティネックス画像メモリ
１３ｈ                    マスクメモリ
１３ｉ                    シフト量メモリ
【図１】
2008059287.tif 000013
【図２】
2008059287.tif 000014
【図３】
2008059287.tif 000015
【図４】
2008059287.tif 000016
【図５】
2008059287.tif 000017
【図６】
2008059287.tif 000018
【図７】
2008059287.tif 000019
【図８】
2008059287.tif 000020
【図９】
2008059287.tif 000021
【図１０】
2008059287.tif 000022