(第1実施例)
図面を参照して実施例を説明する。図1は、本実施例の多機能機10の概略図を示す。多機能機10は、操作部12と表示部14とスロット部16とスキャナ部20と印刷部22とネットワークインターフェイス24と制御部28等を有する。操作部12は、複数のキーによって構成される。ユーザは、操作部12を操作することによって、様々な指示や命令を多機能機10に入力することができる。表示部14は、様々な情報を表示することができる。スロット部16は、メモリカード18を収容するためのスペースを有する。ユーザは、画像データを記憶しているメモリカード18をスロット部16に挿入することができる。本実施例では、メモリカード18に記憶されている画像データは、RGB形式の画像データである。
スキャナ部20は、CCD、CIS等の読取機構を有する。スキャナ部20は、原稿、写真等をカラースキャンすることによって画像データを生成することができる。本実施例では、スキャナ部20によって生成される画像データは、RGB形式の画像データである。印刷部22は、インクジェットタイプ、レーザタイプ等の印刷機構を有する。印刷部22は、メモリカード18に記憶されている画像データ、又は、スキャナ部20によって生成された画像データに基づいて印刷することができる。また、印刷部22は、ネットワークインターフェイス24に入力されたデータに基づいて印刷することができる。ネットワークインターフェイス24は、LAN26に接続されている。
制御部28は、CPU30とROM32とRAM40等を有する。CPU30は、ROM32に記憶されているプログラム34〜38に従って様々な処理を実行する。ROM32は、様々なプログラム34〜38を記憶している。基本プログラム34は、多機能機10の基本的な動作を制御するためのプログラムである。基本プログラム34は、例えば、表示部14に表示されるデータを生成するためのプログラムを含んでいる。また、基本プログラム34は、例えば、スキャナ部20、印刷部22等を制御するためのプログラムを含んでいる。補正プログラム36は、画像データを補正するためのプログラムである。CPU30が補正プログラム36に従って実行する処理の内容については、後で詳しく説明する。プログラム38は、上記のプログラム34,36以外のプログラムである。RAM40は、CPU30が処理を実行する過程で生成されるデータを一時的に記憶することができる。
本実施例の多機能機10は、スキャナ部20によって生成された画像データを用いて、メモリカード18に記憶されている画像データ(ユーザによって選択された画像データ)を補正することができる。より具体的に言うと、多機能機10は、スキャナ部20によって生成された画像データの色相(ユーザによって選択された色相)内の色に近づくように、メモリカード18に記憶されている画像データの色相内の色を補正することができる。
以下では、補正の対象となる画像データ(メモリカード18に記憶されている画像データ)のことをRGB対象画像データと呼ぶ。また、補正の基準となる画像データ(スキャナ部20によって生成された画像データ)のことをRGB基準画像データと呼ぶ。図2は、RGB基準画像データ60を用いてRGB対象画像データ50が補正される様子を簡単に示す。処理の詳細については後で詳しく説明するが、ここでは、RGB対象画像データ50を補正する手順について簡単に説明する。
RGB対象画像データ50は、複数の画素を有する。各画素の値は、三軸の直交座標系の色空間内(以下ではRGB色空間内と呼ぶことがある)の値によって表現される。具体的に言うと、各画素の値は、R(赤)を示す値(0〜255)と、G(緑)を示す値(0〜255)と、B(青)を示す値(0〜255)とによって表わされる。多機能機10は、RGB対象画像データ50をHSV形式の画像データ52に変換する。以下では、この画像データ52のことをHSV対象画像データ52と呼ぶ。多機能機10は、RGB対象画像データ50を構成する各画素の値(直交座標値)を極座標値に変換することによって、HSV対象画像データ52を生成する。従って、HSV対象画像データ52が有する画素の数は、RGB対象画像データ50が有する画素の数に等しくなる。HSV対象画像データ52が有する各画素の値は、円柱極座標系の色空間内(以下ではHSV色空間内と呼ぶことがある)の値によって表現される。具体的に言うと、各画素の値は、色相(H)を示す値(0〜360°)と、彩度(S)を示す値(0〜1.0)と、輝度(V)を示す値(0〜1.0)とによって表わされる。
多機能機10は、RGB対象画像データ50をHSV対象画像データ52に変換する上記の手法と同様にして、RGB基準画像データ60をHSV形式の画像データ62に変換する。以下では、この画像データ62のことをHSV基準画像データ62と呼ぶ。RGB基準画像データ60が有する各画素の値は、RGB色空間内の値によって表現される。また、HSV基準画像データ62が有する各画素の値は、HSV色空間内の値によって表現される。
多機能機10は、後述する様々な処理を実行することによって、HSV基準画像データ62を用いてHSV対象画像データ52を補正する。これにより、補正後の画像データ56が生成される。以下では、この画像データ56のことを補正済みRGB画像データ56と呼ぶ。補正済みRGB画像データ56が有する各画素の値は、RGB色空間内の値によって表現される。
続いて、多機能機10が実行する補正印刷処理の内容について詳しく説明する。ユーザは、操作部12を操作することによって、補正印刷モードを選択することができる。この操作が実行された場合に、補正印刷処理が実行される。図3は、補正印刷処理のフローチャートを示す。補正印刷処理は、基本プログラム34と補正プログラム36に従ってCPU30によって実行される。なお、図3のフローチャートに示される各処理のうち、S18の処理は補正プログラム36に従って実行され、それ以外の処理は基本プログラム34に従って実行される。
ユーザは、操作部12を操作することによって、メモリカード18に記憶されている複数の画像データの中から1つの画像データを選択することができる。ここで選択された画像データが補正対象の画像データ(即ちRGB対象画像データ50)になる。CPU30は、RGB対象画像データ50が選択されるまで待機する(S10)。
ユーザは、操作部12を操作することによって、RGB対象画像データ50を補正するために用いられる基準の画像(例えば写真)をスキャナ部20によってスキャンさせることができる。CPU30は、この操作が実行されるまで待機する(S12)。ユーザによって操作が実行されると、CPU30は、スキャナ部20にスキャンすることを指示する(S14)。これにより、スキャナ部20は、ユーザによって選択された基準の画像をカラースキャンすることによって、画像データ(即ちRGB基準画像データ60)を生成する。
次いで、CPU30は、複数の補正モードを示す文字列を表示部14に表示させる。具体的に言うと、CPU30は、「空モード」、「緑モード」、及び「肌モード」という文字列を表示部14に表示させる。各補正モードについて簡単に説明する。空モードは、RGB基準画像データ60が有する青色の色相内の色に近づくように、RGB対象画像データ50が有する青色の色相内の色を補正するためのモードである。緑モードは、RGB基準画像データ60が有する緑色の色相内の色に近づくように、RGB対象画像データ50が有する緑色の色相内の色を補正するためのモードである。肌モードは、RGB基準画像データ60が有する肌色の色相内の色に近づくように、RGB対象画像データ50が有する肌色の色相内の色を補正するためのモードである。ユーザは、操作部12を操作することによって、表示部14に表示された3つの補正モードの中から1つの補正モードを選択することができる。CPU30は、この操作が実行されるまで待機する(S16)。ユーザによって選択された補正モードを示す情報は、RAM40に記憶される。
次いで、CPU30は、補正処理を実行する(S18)。補正処理の内容については、後で詳しく説明する。補正処理によって補正済みRGB画像データ56が得られる。CPU30は、補正済みRGB画像データ56を印刷データ(CMYK形式のビットマップデータ)に変換する(S20)。続いて、CPU30は、S20で生成された印刷データに基づいて印刷することを印刷部22に指示する(S22)。この結果、印刷部22は、印刷データに基づいて印刷媒体に印刷する。ユーザは、補正済みRGB画像データ56が印刷された印刷媒体を得ることができる。
続いて、S18で実行される補正処理の内容について詳しく説明する。図4及び図5は、補正処理のフローチャートを示す。CPU30は、RGB対象画像データ50をHSV対象画像データ52に変換する(S40)。図6は、RGB色空間内の座標値をHSV色空間内の座標値に変換するための数式を示す。CPU30は、RGB対象画像データ50を構成する1つの画素(変換対象の画素)を選択する。図6(a)に示されるように、変換対象の画素の座標値を(R,G,B)と表現し、その座標値から変換されたHSV色空間内の座標値を(H,S,V)と表現する。図6(b)に示されるように、CPU30は、R/255とG/255とB/255をそれぞれ算出し、その中の最も大きい値をVとして特定する。また、CPU30は、図6(c)に示される数式に従って、Sを算出する。次いで、CPU30は、図6(d)に示される数式に従って、媒介変数r,g,bを算出する。CPU30は、図6(e)に示される数式に従って、Hを算出する。ここで算出されたHがマイナスの値である場合、CPU30は、図6(f)に示されるように、Hに360を加算することによって、新たなHを算出する。これにより、変換対象の画素の座標値(R,G,B)からHSV色空間内の座標値(H,S,V)を得ることができる。
図7は、HSV色空間を模式的に示す。図7を見ると、HSV色空間が円柱座標系の色空間であることがよくわかる。色相を示すHは、0〜360°のいずれかの値である。彩度を示すSは、0〜1.0のいずれかの値である。輝度を示すVは、0〜1.0のいずれかの値である。
CPU30は、RGB対象画像データ50の他の全ての画素のそれぞれについて、図6(a)〜図6(f)の数式に従って、HSV色空間内の座標値(H,S,V)を算出する。これにより、HSV対象画像データ52が得られる。CPU30は、HSV対象画像データ52をRAM40に記憶させる。
続いて、CPU30は、RGB基準画像データ60をHSV基準画像データ62に変換する(S42)。S42の処理は、上記のS40の処理と同様の手法によって行なわれる。即ち、CPU30は、RGB基準画像データ60の全ての画素のそれぞれについて、図6(a)〜図6(f)に従って、HSV色空間内の座標値(H,S,V)を算出する。これにより、HSV基準画像データ62が得られる。CPU30は、HSV基準画像データ62をRAM40に記憶させる。
次いで、CPU30は、HSV対象画像データ52から代表値を算出する(S44)。以下では、この代表値のことを対象代表値(OH,OS,OV)と呼ぶ。S44の処理は、図3のS16で選択された補正モードに従って実行される。図8は、補正モードと、HとSとVのそれぞれの範囲との対応関係の一例を示す。例えば、補正モードが空モードの場合、Hが180〜240°であり、Sが0〜1.0であり、Vが0〜1.0である。これは、補正モードが空モードの場合には、CPU30は、Hが180〜240°であり、Sが0〜1.0であり、かつ、Vが0〜1.0である画素群に基づいて、代表値を算出することを意味している。
より具体的に言うと、補正モードが空モードの場合、CPU30は、HSV対象画像データ52を構成する全ての画素のうち、Hが180〜240°(図8(a)参照)である画素群を特定する。なお、ここでは、SとVを考慮しない。空モードの場合のSとVのそれぞれの範囲は0〜1.0であり(図8(a)参照)、いずれの画素であってもSとVが0〜1.0の範囲に含まれるからである。次いで、CPU30は、特定された画素群のHの平均値を算出することによってOHを特定し、特定された画素群のSの平均値を算出することによってOSを特定し、特定された画素群のVの平均値を算出することによってOVを特定する。これにより、対象代表値(OH,OS,OV)が得られる。なお、図3のS16で選択された補正モードが緑モードの場合、CPU30は、Hが50〜170°(図8(b)参照)である画素群から対象代表値(OH,OS,OV)を特定する。また、図3のS16で選択された補正モードが肌モードの場合、CPU30は、Hが10〜40°であり、Sが0.1〜0.6であり、かつ、Vが0.2〜1.0(図8(c)参照)である画素群から対象代表値(OH,OS,OV)を特定する。
続いて、CPU30は、HSV基準画像データ62から代表値を算出する(S46)。以下では、この代表値のことを基準代表値(SH,SS,SV)と呼ぶ。S46の処理は、S44の処理と同様に実行される。例えば、図3のS16で選択された補正モードが空モードの場合、CPU30は、HSV基準画像データ62を構成する全ての画素のうち、Hが180〜240°(図8(a)参照)である画素群を特定する。次いで、CPU30は、特定された画素群のHの平均値を算出することによってSHを特定し、特定された画素群のSの平均値を算出することによってSSを特定し、特定された画素群のVの平均値を算出することによってSVを特定する。これにより、基準代表値(SH,SS,SV)が得られる。
次いで、CPU30は、S44で特定された対象代表値(OH,OS,OV)をvab色空間内の座標値に変換する(S48)。以下では、この座標値のことを対象座標値(Ov,Oa,Ob)と呼ぶ。なお、vab色空間は、RGB色空間と異なる三軸の直交座標系の色空間である。vab色空間は、本実施例特有の色空間であり、周知の色空間ではない。図9を参照しながら、S48の処理の内容について説明する。図9は、HSV色空間内の座標値をvab色空間内の座標値に変換するための数式を示す。図9では、変換対象の座標値を(H,S,V)と表現し、その座標値から変換されたvab色空間内の座標値を(v,a,b)と表現している。図9に示される数式において、(H,S,V)を(OH,OS,OV)に置き換えるとともに、(v,a,b)を(Ov,Oa,Ob)に置き換えると、対象座標値(Ov,Oa,Ob)を得るための数式が得られる。CPU30は、この数式に従って、対象座標値(Ov,Oa,Ob)を算出する。
次いで、CPU30は、S46で特定された基準代表値(SH,SS,SV)をvab色空間内の座標値に変換する(S50)。以下では、この座標値のことを基準座標値(Sv,Sa,Sb)と呼ぶ。S50の処理は、S48の処理と同様に実行される。図9に示される数式において、(H,S,V)を(SH,SS,SV)に置き換えるとともに、(v,a,b)を(Sv,Sa,Sb)に置き換えると、基準座標値(Sv,Sa,Sb)を得るための数式が得られる。CPU30は、この数式に従って、基準座標値(Sv,Sa,Sb)を算出する。
続いて、CPU30は、HSV対象画像データ52を構成する1つの画素を選択する(S52)。S52で選択された画素の座標値(以下では画素値と言い換えることもある)を(PH,PS,PV)と表現する。CPU30は、S52で選択された画素の座標値(PH,PS,PV)をvab色空間内の座標値(Pv,Pa,Pb)に変換する(S54)。S54の処理は、S48の処理と同様に実行される。図9に示される数式において、(H,S,V)を(PH,PS,PV)に置き換えるとともに、(v,a,b)を(Pv,Pa,Pb)に置き換えると、座標値(Pv,Pa,Pb)を得るための数式が得られる。CPU30は、この数式に従って、座標値(Pv,Pa,Pb)を算出する。
次いで、CPU30は、座標値(Pv,Pa,Pb)の補正量(Cv,Ca,Cb)を算出する(S56)。図10は、補正量を算出するための数式を示す。CPU30は、S54で算出されたPvと、S48で算出されたOvと、S50で算出されたSvとに基づいて、Cvを算出する。まず、CPU30は、図10(a)に示される数式に従って、下限値Lvと上限値Uvを算出する。次いで、CPU30は、図10(b)に示される数式に従って、Curvvを算出する。なお、図10(b)に示される数式に含まれるAdjSとAdjOは、PvとOvとSvに依存する数値ではなく、予め設定されている定数である。続いて、CPU30は、図10(c)に示される数式に従って、Cvを算出する。
図11は、Pvが横軸であり、PvとCvの和(ここではMvと呼ぶ)が縦軸であるグラフを示す。図11のグラフは、Ovが0.25であるとともにSvが0.38である場合を例にしている。なお、Mvは、PvをCvで補正した場合の補正後の値である。後で詳しく説明するが、本実施例では、PvにCvを加算することのみによってMvを求めない。ただし、Cvについての理解を容易にするために、図11では、PvとCvの和をMvとしている。
図11のグラフから明らかなように、Pvが下限値Lvと上限値Uvの間の値である場合、PvはSvに近づくような補正カーブになっている。この補正カーブは、Svを境界として、上に凸である領域と下に凸である領域とに分けられる。例えば、PvがOvに等しい場合、CvはC1になる。この場合のMvは、OvとC1の和であるV1になる。V1は、OvとSvの間の値である。また、例えば、PvがOvとSvの間の値V2である場合、CvはC2になる。この場合のMvは、V2とC2の和であるV3になる。V3は、V2とSvの間の値である。より具体的には、V3は、V1とSvの間の値である。即ち、補正前の値PvがSvに近い程、補正後の値Mvは、Svに近い値になる。なお、PvがOvである場合にV1に補正される様子と、PvがV2の場合にV3に補正される様子は、図12(a)にも示されている。
CPU30は、補正量Cvを算出する場合と同様の手法を用いて、補正量Caを算出する。CPU30は、PaとOaとSaとに基づいて、Caを算出する。Caは、図10に示される数式と同様の数式に従って算出される。具体的に言うと、図10(a)と図10(b)において、LvをLaに変更し、UvをUaに変更し、OvをOaに変更し、SvをSaに変更し、CurvvをCurvaに変更すると、Curvaを算出することができる。CPU30は、図10(c)に示される数式に従って、Caを算出する。
Paが横軸であり、PaとCaの和(ここではMaと呼ぶ)が縦軸であるグラフを描くと、図11のグラフと同様のグラフが得られる。即ち、Paが下限値Laと上限値Uaの間の値である場合、PaはSaに近づくように補正される。図12(b)は、Paが補正される様子の一例を示す。PaがOaに等しい場合、Paは、OaとSaの間の値A1に補正される。また、PaがOaとSaの間の値A2である場合、Paは、A1とSaの間の値A3に補正される。即ち、補正前の値PaがSaに近い程、補正後の値は、Saに近くなる。
さらに、CPU30は、補正量Cvを算出する場合と同様の手法を用いて、補正量Cbを算出する。CPU30は、PbとObとSbとに基づいて、Cbを算出する。図10(a)と図10(b)において、LvをLbに変更し、UvをUbに変更し、OvをObに変更し、SvをSbに変更し、CurvvをCurvbに変更すると、Curvbを算出することができる。CPU30は、図10(c)に示される数式に従って、Cbを算出する。
Pbが横軸であり、PbとCbの和(ここではMbと呼ぶ)が縦軸であるグラフを描くと、図11のグラフと同様のグラフが得られる。即ち、Pbが下限値Lbと上限値Ubの間の値である場合、PbはSbに近づくように補正される。図12(c)は、Pbが補正される様子の一例を示す。PbがObに等しい場合、Pbは、ObとSbの間の値B1に補正される。また、PbがObとSbの間の値B2である場合、Pbは、B1とSbの間の値B3に補正される。即ち、補正前の値PbがSbに近い程、補正後の値は、Sbに近くなる。
図12から明らかなように、補正対象の画素(図4のS52で選択された画素)の座標値(Pv,Pa,Pb)が対象座標値(Ov,Oa,Ob)に等しい場合、座標値(Pv,Pa,Pb)は、対象座標値(Ov,Oa,Ob)と基準座標値(Sv,Sa,Sb)の間の座標値(V1,A1,B1)に補正される。また、補正対象の画素の座標値(Pv,Pa,Pb)が対象座標値(Ov,Oa,Ob)と基準座標値(Sv,Sa,Sb)の間の座標値(V2,A2,B2)である場合、座標値(V2,A2,B2)は、座標値(V1,A1,B1)と基準座標値(Sv,Sa,Sb)の間の座標値(V3,A3,B3)に補正される。
CPU30は、補正量(Cv,Ca,Cb)を算出すると、図5のS58に進む。S58では、CPU30は、パラメータdとパラメータrangeを算出する。図13(a)は、パラメータdとパラメータrangeを算出するための数式を示す。CPU30は、図13(a)に示される数式に従って、パラメータdとパラメータrangeを算出する。パラメータdは、補正対象の画素の座標値(Pv,Pa,Pb)と対象座標値(Ov,Oa,Ob)との間の距離と、補正対象の画素の座標値(Pv,Pa,Pb)と基準座標値(Sv,Sa,Sb)との間の距離との和である。また、パラメータrangeは、対象座標値(Ov,Oa,Ob)と基準座標値(Sv,Sa,Sb)との間の距離である。
次いで、CPU30は、パラメータdとパラメータrangeに基づいて、パラメータwを算出する(S60)。図13(b)は、wを算出するための数式を示す。なお、図13(b)の数式において、suiの値は、図3のS16で選択された補正モードに応じて設定される。図13(c)は、補正モードとsuiの値の対応関係を示す。緑モードの場合のsuiの値が最も大きく、肌モードの場合のsuiの値が最も小さい。空モードの場合のsuiの値は、緑モードの場合のsuiの値と肌モードの場合のsuiの値との間の値である。図13(b)から分かるように、dがrangeに等しい場合、wは、最も大きい値(1.0)になる。また、dがrangeより大きい場合、dが大きくなるにつれて、wが小さくなる。dがrangeとsuiを乗算することによって得られる値より大きい場合、wは、最も小さい値(0)になる。図13(b)の数式によると、wは、dが大きくなる程、小さくなる値であると言える。逆に言うと、wは、dが小さくなる程、大きくなる値であると言える。
図14は、Pvが横軸であり、wが縦軸であるグラフを示す。図14のグラフは、Ovが0.2であるとともにSvが0.31である場合を例にしている。なお、図14のグラフから明らかなように、PvがOvとSvの間の値である場合(即ちd=rangeである場合)、wは1.0である。PvがOvより小さくなるにつれて、wが滑らかに小さくなっている。また、PvがSvより大きくなるにつれて、wが滑らかに小さくなっている。OvとSvの両者からPvが遠くなる程、wが小さくなる。逆に言うと、OvとSvの両者にPvが近い程、wが大きくなる。なお、Paが横軸であってwが縦軸であるグラフと、Pbが横軸であってwが縦軸であるグラフも、図14のグラフと同様の形状を示す。
CPU30は、補正対象の画素の座標値(Pv,Pa,Pb)を、パラメータwと補正量(Cv,Ca,Cb)に基づいて補正する(S62)。これにより、補正後の座標値(Mv,Ma,Mb)が得られる。図15は、補正後の座標値(Mv,Ma,Mb)を算出するための数式を示す。CPU30は、パラメータwを補正量(Cv,Ca,Cb)に乗算することによって得られる座標値を、補正対象の画素の座標値(Pv,Pa,Pb)に加算することによって、補正後の座標値(Mv,Ma,Mb)を算出する。
上述したように、wを補正量(Cv,Ca,Cb)に乗算することによって、実際の補正量が算出される。wは、図13(b)に示される数式に従って算出されるものであり、dが小さくなる程、大きくなる値である。dが小さくなる程、実際の補正量(w×(Cv,Ca,Cb))が大きくなる。即ち、dが小さくなる程、補正対象の画素の座標値(Pv,Pa,Pb)が大きく補正されることになる。図16は、va平面上の対象座標値Oと基準座標値Sを示す。図16は、色が白に近づく程、大きく補正されることを意味している。逆に言うと、図16は、色が黒に近づく程、小さく補正されることを意味している。完全に黒色の領域は、補正されないことを意味している。この図16からも、上記のパラメータdが小さい程、補正対象の画素の座標値(Pv,Pa,Pb)が大きく補正されることが理解できる。
なお、図16において完全に黒色の領域は、対象座標値Oと基準座標値Sを2つの焦点とする楕円の外側の領域である。即ち、対象座標値Oと基準座標値Sを2つの焦点とする楕円の外側の領域に、補正対象の画素の座標値(Pv,Pa,Pb)が存在する場合、その座標値は補正されない。逆に言うと、対象座標値Oと基準座標値Sを2つの焦点とする楕円の内側の領域に、補正対象の画素の座標値(Pv,Pa,Pb)が存在する場合、その座標値が補正される。図16はva平面で表現されているが、vb平面及びab平面でも同様の図になる。即ち、vab空間において、対象座標値Oと基準座標値Sを2つの焦点とする楕円体の外側の領域に、補正対象の画素の座標値(Pv,Pa,Pb)が存在する場合、その座標値は補正されない。逆に言うと、vab空間において、対象座標値Oと基準座標値Sを2つの焦点とする楕円体の内側の領域に、補正対象の画素の座標値(Pv,Pa,Pb)が存在する場合、その座標値が補正される。
CPU30は、S62において補正後座標値(Mv,Ma,Mb)を算出すると、S64に進む。S64では、CPU30は、補正後座標値(Mv,Ma,Mb)をHSV色空間内の座標値(MH,MS,MV)に変換する。図17は、vab色空間内の座標値をHSV色空間内の座標値に変換する数式を示す。図17では、変換対象の座標値を(v,a,b)と表現し、その座標値から変換されたHSV色空間内の座標値を(H,S,V)と表現している。図17に示される数式において、(v,a,b)を(Mv,Ma,Mb)に置き換えるとともに、(H,S,V)を(MH,MS,MV)に置き換えると、座標値(MH,MS,MV)を得るための数式が得られる。CPU30は、この数式に従って、座標値(MH,MS,MV)を算出する。
次いで、CPU30は、S64で特定された座標値(MH,MS,MV)を、RGB色空間内の座標値(MR,MG,MB)に変換する(S66)。図18は、HSV色空間内の座標値をRGB色空間内の座標値に変換する数式を示す。図18では、変換対象の座標値を(H,S,V)と表現し、その座標値から変換されたRGB色空間内の座標値を(R,G,B)と表現している。図18に示される数式において、(H,S,V)を(MH,MS,MV)に置き換えるとともに、(R,G,B)を(MR,MG,MB)に置き換えると、座標値(MR,MG,MB)を得るための数式が得られる。図18(a)に示されるように、CPU30は、MHから媒介変数in及びflを算出する。なお、図18(b)に示されるように、CPU30は、媒介変数inが偶数の場合、1からflを減算し、新たなflを算出する。次いで、CPU30は、図18(c)に示される数式に従って、MSとMVから媒介変数m及びnを算出する。CPU30は、図18(d)に示される数式に従って、MVとmとnからMRとMGとMBを算出する。これにより、RGB色空間内の座標値(MR,MG,MB)が得られる。
上記のS54〜S66の処理が実行されることによって、HSV対象画像データ52内の1つの画素の座標値(PH,PS,PV)が補正され、補正後の座標値としてRGB色空間内の座標値(MR,MG,MB)が得られる。CPU30は、HSV対象画像データ52内の全ての画素についてS54〜S66の処理が実行されたのか否かを判断する(S68)。ここでNOの場合、CPU30は、HSV対象画像データ52内の次の画素を選択する(S70)。CPU30は、S70で選択された画素について、S54〜S66の処理を実行する。一方において、S68でYESの場合、補正処理が終了する。この場合、S54〜S66の処理で得られたRGB色空間内の座標値で各画素の値が表現される補正済みRGB画像データ56(図2参照)が得られることになる。
本実施例の多機能機10について詳しく説明した。多機能機10は、図4のS44及びS46において、HSV色空間(図7参照)内で処理を実行する。例えば、図4のS44では、多機能機10は、ユーザが望む補正モードに応じた色相H(例えば空モードの場合は180〜240°)を有する画素群をHSV対象画像データ52から特定し、その画素群から対象代表値を算出する。
HSV色空間において対象代表値と基準代表値が求められるために、HSV対象画像データ52内の各画素をHSV色空間内で補正する手法を採用することも考えられる。しかしながら、この場合、次の問題が発生する。図19は、HSV色空間内のHS平面を示す。図19に示すαは、補正モードに応じた色相H(例えば空モードの場合は180〜240°)を示す。HSV色空間内で補正する手法を採用すると、彩度Sの小さい2つの画素120,124が図19に示される位置に存在する場合に、画素120が補正され、画素124が補正されないことになる。この結果、補正前には見た目の色の差がほとんどない両者の画素120,124が、補正後には大きく異なる色になってしまう。HSV色空間内で補正する手法で上記の問題に対処するためには、図20のハッチングで示される領域に含まれる画素群を補正するようにしなければならない。しかしながら、このようなV軸を包含する領域をHSV色空間内で定義するためには、様々なHの値のそれぞれについてS及びVを定義する必要があり、膨大な計算量を必要とする。
これに対し、本実施例の多機能機10は、直交座標系のvab色空間において補正を実行する。即ち、多機能機10は、対象代表値(OH,OS,OV)をvab色空間内の対象座標値(Ov,Oa,Ob)に変換し(図4のS48)、その対象座標値(Ov,Oa,Ob)の周囲の領域(対象座標値(Ov,Oa,Ob)と基準座標値(Sv,Sa,Sb)とを2つの焦点とする楕円体内の領域)に含まれる画素の値を補正する。このために、補正モードに応じた色相を有さない画素124が存在する場合でも、その画素124の値が補正され得る。補正前には見た目の色の差がほとんどない2つの画素120,124が、補正後には大きく異なる色になってしまうことを抑制することができる。本実施例の多機能機10は、HSV基準画像データ62を用いてHSV対象画像データ52を適切に補正することができる。
また、図13の数式に示されるように、多機能機10では、補正モードに応じて設定されているsuiの値が大きい程、補正されるべき画素の値の範囲(range×sui)が大きくなるように設定されている。suiは、緑モードの場合に最も大きく、肌モードの場合に最も小さい。従って、色の変化が認識しにくい緑色を補正する場合には、補正されるべき画素の値の範囲が大きくなり、色の変化を認識しやすい肌色を補正する場合には、補正されるべき画素の値の範囲が小さくなる。補正されるべき画素の値の範囲が、ヒトの視覚特性に鑑みて適切に設定されている。
なお、図11に示される補正カーブは、wが1.0の場合を例にしている。図11の例では、V4は補正されず、V5がV6に補正される。V4とV5は、値が近いために、見た目の色が似ている。V4に対応する画素とV5に対応する画素が隣り合っている場合、補正されない前者の画素(即ちV=V4)と補正される後者の画素(即ちV=V6)の間において、大きく色が異なる可能性がある。このような事象が発生するのを抑制するために、本実施例では、以下の構成が採用されている。即ち、対象座標値(Ov,Oa,Ob)と補正対象の画素の座標値(Pv,Pa,Pb)との間の距離と、基準座標値(Sv,Sa,Sb)と補正対象の画素の座標値(Pv,Pa,Pb)との間の距離との和dが小さい程、補正量が大きくなるように、パラメータwが採用されている。パラメータwは、dが大きくなるにつれて、小さくなる値である(図13(b)参照)。図11に示されるV5に対応する画素は、対象座標値(図11のOv)と基準座標値(図11のSv)の双方に対して遠い位置に存在するために、補正量が小さくなる。この結果、V4に対応する画素とV5に対応する画素が隣り合っている場合であっても、それらの画素の間で大きく色が異なることを抑制することができる。
請求項に記載されている各要素と第1実施例との関係について記載しておく。請求項の画像処理装置は、多機能機10に対応する。請求項の対象画像データは、HSV対象画像データ52に対応する。請求項の基準画像データは、HSV基準画像データ62に対応する。請求項の補正済み画像データは、補正済みRGB画像データ56に対応する。請求項の特定範囲は、各補正モードに応じて決められている色相Hの範囲(図8参照)に対応する。請求項の極座標系の色空間は、HSV色空間に対応する。請求項の第1極座標値は、対象代表値(OH,OS,OV)に対応する。請求項の第1決定部は、補正プログラム36に従って図4のS44の処理を実行するCPU30に対応する。請求項の第1直交座標値は、対象座標値(Ov,Oa,Ob)に対応する。請求項の第1直交座標系の色空間は、vab色空間に対応する。請求項の第1算出部は、補正プログラム36に従って図4のS48の処理を実行するCPU30に対応する。請求項の第2極座標値は、基準代表値(SH,SS,SV)に対応する。請求項の第2決定部は、補正プログラム36に従って図4のS46の処理を実行するCPU30に対応する。請求項の第2直交座標値は、基準座標値(Sv,Sa,Sb)に対応する。請求項の第2算出部は、補正プログラム36に従って図4のS50の処理を実行するCPU30に対応する。請求項の第1直交座標値の周囲の領域(特定領域、及び、楕円体内の領域)は、図13の数式に従って求められるw>0の領域(図16の黒色以外の領域)に対応する。請求項の補正部は、補正プログラム36に従って図4のS52〜S56、及び、図5のS58〜S70の処理を実行するCPU30に対応する。
請求項の第1距離と第2距離との和は、パラメータdに対応する。請求項の第3直交座標値は、図12の(V1,A1,B1)に対応する。請求項の第4直交座標値は、図12の(V2,A2,B2)に対応する。請求項の第5直交座標値は、図12の(V3,A3,B3)に対応する。請求項の第2直交座標系の色空間は、RGB色空間に対応する。請求項の特定画像データは、RGB対象画像データ50に対応する。請求項の変換部は、補正プログラム36に従って図4のS40の処理を実行するCPU30に対応する。請求項の特定直交座標値は、座標値(Pv,Pa,Pb)に対応する。請求項の特定極座標値は、座標値(MH,MS,MV)に対応する。
(第2実施例)
続いて、第2実施例について説明する。本実施例では、図3のS18の補正処理の内容が第1実施例と異なる。第1実施例では、vab色空間内において補正対象の画素の座標値が補正される。これに対し、本実施例では、RGB色空間内において補正対象の画素の座標値が補正される。
図21は、本実施例の補正処理のフローチャートを示す。CPU30は、図4のS40〜S46の処理を実行することによって、対象代表値(OH,OS,OV)を算出するとともに、基準代表値(SH,SS,SV)を算出する。次いで、CPU30は、対象代表値(OH,OS,OV)をRGB色空間内の対象座標値(OR,OG,OB)に変換する(S148)。さらに、CPU30は、基準代表値(SH,SS,SV)をRGB色空間内の対象座標値(SR,SG,SB)に変換する(S150)。S148とS150の処理は、図18に示される数式に従って実行される。
次いで、CPU30は、RGB対象画像データ50を構成する1つの画素を選択する(S152)。なお、以下では、S152で選択された画素の座標値を(PR,PG,PB)と表現する。CPU30は、S152で選択された画素の座標値(PR,PG,PB)の補正量(CR,CG,CB)を算出する。この補正量は、図10に示される数式によって算出される。具体的に言うと、図10において、LvをLRに変更し、UvをURに変更し、OvをORに変更し、SvをSRに変更し、PvをPRに変更し、CurvvをCurvRに変更し、CvをCRに変更すると、CRを算出することができる。なお、本実施例では、図10(a)の「Lv>1.0の場合 Lv=1.0」という記載は、「LR>255の場合 LR=255」に変更される。また、図10(a)の「Uv>1.0の場合 Uv=1.0」という記載は、「UR>255の場合 UR=255」に変更される。CGとCBを算出する手法は、CRを算出する手法と同様である。
続いて、CPU30は、パラメータdとパラメータrangeを算出する(S158)。パラメータdとパラメータrangeは、図13(a)に示される数式に従って算出される。パラメータdは、補正対象の画素の座標値(PR,PG,PB)と対象座標値(OR,OG,OG)との間の距離と、補正対象の画素の座標値(PR,PG,PB)と基準座標値(SR,SG,SB)との間の距離との和である。また、パラメータrangeは、対象座標値(OR,OG,OB)と基準座標値(SR,SG,SB)との間の距離である。
次いで、CPU30は、パラメータdとパラメータrangeに基づいて、パラメータwを算出する(S160)。パラメータwは、図13(b)に示される数式に従って算出される。続いて、CPU30は、補正対象の画素の座標値(PR,PG,PB)を、パラメータwと補正量(CR,CG,CB)に基づいて補正する(S162)。これにより、補正後の座標値(MR,MG,MB)が得られる。S162の処理は、図15に示される数式に従って算出される。即ち、CPU30は、パラメータwを補正量(CR,CG,CB)に乗算することによって得られる座標値を、補正対象の画素の座標値(PR,PG,PB)に加算することによって、補正後の座標値(MR,MG,MB)を算出する。
CPU30は、S162において補正後座標値(MR,MG,MB)を算出すると、S168に進む。S168では、CPU30は、RGB対象画像データ50内の全ての画素についてS156〜S162の処理が実行されたのか否かを判断する。ここでNOの場合、CPU30は、RGB対象画像データ50内の次の画素を選択し(S170)、S156〜S162の処理を実行する。一方において、S168でYESの場合、補正処理が終了する。この場合、補正済みRGB画像データ56(図2参照)が得られることになる。
第1実施例では、図5のS62において補正後の座標値(Mv,Ma,Mb)が算出された後に、座標値(Mv,Ma,Mb)をHSV色空間内の座標値(MH,MS,MV)に変換する処理(S64)と、座標値(MH,MS,MV)をRGB色空間内の座標値(MR,MG,MB)に変換する処理(S66)とが必要とされる。これに対し、本実施例では、図21のS162の処理で得られる座標値(MR,MG,MB)がRGB色空間内の座標値であるために、変換処理が不要である。
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
(1)上記の第1実施例では、図5のS60で算出されるパラメータwが0である場合には、図4のS52で選択された画素に対して補正が行なわれない。従って、パラメータwが0の場合には、図5のS62とS64をスキップしてもよい。この場合、CPU30は、図4のS52で選択された画素の座標値(PH,PS,PV)を座標値(MH,MS,MV)として、図5のS66の処理を実行してもよい。なお、座標値(PH,PS,PV)に対応するRGB対象画像データ50内の座標値がわかっている場合には、S66をスキップすることもできる。
(2)上記の各実施例では、メモリカード18に記憶されている画像データを、補正の対象となるRGB対象画像データ50としている。しかしながら、他の画像データをRGB対象画像データ50としてもよい。例えば、スキャナ部20によって生成される画像データをRGB対象画像データ50としてもよい。また、上記の各実施例では、スキャナ部20によって生成される画像データをRGB基準画像データ60としている。しかしながら、他の画像データをRGB基準画像データ60としてもよい。例えば、メモリカード18に記憶されている画像データをRGB基準画像データ60としてもよい。
(3)上記の各実施例では、極座標系の色空間として円柱座標系の色空間(HSV色空間)を採用している。しかしながら、極座標系の色空間として球座標系の色空間を採用してもよい。
(4)上記の各実施例では、ユーザによって選択された補正モードに応じて、補正対象の色相の範囲が決定される。しかしながら、補正印刷処理では、1つの補正モードのみが存在していてもよい(即ち補正対象の色相の範囲が固定されていてもよい)。また、補正印刷処理では、複数の補正モード(上記の実施例では3つの補正モード)のそれぞれについて補正処理を順次実行してもよい。この場合、多機能機10は、補正後の複数の画像データを表示し、その中から1つの画像データを選択することをユーザに許容し、ユーザによって選択された画像データに基づいて印刷を実行してもよい。
(5)上記の各実施例において、wを利用して補正しなくてもよい。即ち、図15に示される数式において、wを常に1としてもよい。この場合、図11に示される下限値Lvと上限値Uvの間の値のみが補正され、それ以外の値が補正されないことになる(a軸とb軸の場合も同様に補正される)。この変形例では、請求項の周囲の領域は、下限値Lvと上限値Uvの間の領域に対応する。
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
10:多機能機、12:操作部、14:表示部、16:スロット部、18:メモリカード、20:スキャナ部、22:印刷部、24:ネットワークインターフェイス、28:制御部、30:CPU、32:ROM、34:基本プログラム、36:補正プログラム、50 :RGB対象画像データ、52:HSV対象画像データ、56:補正済みRGB画像データ、60:RGB基準画像データ、62:HSV基準画像データ