以下、図面を参照しながら、いくつかの実施例について詳細に説明する。なお、複数の図面において対応する要素には同一の符号を付す。
図1は、いくつかの実施例に係る画像処理装置100の機能ブロック構成を例示する図である。画像処理装置100は、例えば、携帯電話機、スマートフォン、タブレット端末、パーソナルコンピュータ(PC)、及びノートPCなどの画像を処理する機能を備える装置であってよい。画像処理装置100は、例えば、制御部101及び記憶部102を含む。制御部101は、例えば特定部111及び補正部112などの機能部を含む。画像処理装置100の記憶部102は、例えば、プログラム120及び後述するパッチグループ情報1100,2000などの情報を記憶している。画像処理装置100の制御部101は、プログラム120を読み出して実行することで例えば特定部111及び補正部112などの機能部として機能する。これらの各機能部の詳細及び記憶部102に格納されている情報の詳細については後述する。
[第1の実施例]
図2は、第1の実施例に係るカラーチャート1を例示する図である。カラーチャート1は、中抜けの領域5(例えば貫通穴)を含んでいる。そして、カラーチャート1には、領域5の外周に複数のパッチ(W1〜W4、及びC1〜C16)が配置されている。そのため、例えば、画素値の補正の対象となる被写体を領域5に配置して撮像装置で画像を撮像することで、被写体をパッチで取り囲んで画像を撮像することができる。また、カラーチャート1では、4色(a、b、c、及びd)のパッチが、色毎に2対の合計4個ずつ含まれている。なお、パッチの色は任意の色であってよいが、例えば、補正を行う対象である被写体の画素値に類する色であることが好ましい。例えば、被写体の肌の色を補正する場合には、RGB空間上で人の肌の色が分布すると想定される領域の色が採用されてよい。一例として、ピンク色、黄色、チャコールグレー、赤紫色などの色が採用されてよい。また、各対のパッチは、例えば、補正を行う対象である被写体が写る領域5の中心を対称点30として点対称の位置に配置されている。
例えば、カラーチャート1において、パッチC1、C6、C9及びC14の4個のパッチは色:aを有する同一色のパッチである。また、パッチC2、C5、C10及びC13は、色:bを有する同一色のパッチである。パッチC3、C8、C11及びC16は、色:cを有する同一色のパッチである。パッチC4、C7、C12及びC15は、色:dを有する同一色のパッチである。そして、パッチC1とパッチC9は、対称点30から点対称の位置に対として配置されている。同様に、パッチC6とパッチC14は、対称点30から点対称の位置に対として配置されている。また、パッチC2、C5、C10及びC13、パッチC3、C8、C11及びC16、並びにパッチC4、C7、C12及びC15についても、図2に示されるように、対となるパッチが対称点30から点対称の位置に配置されている。また、図2の例では、同色の2対の合計4個のパッチは、対称点30の周りに等間隔に(例えば、各々が90度の間隔を空けて)配置されている。更に、カラーチャート1は、白色の4個のパッチW1〜W4を含んでおり、これらの白色のパッチW1〜W4が画像に写った際の画素値を用いてホワイトバランスが設定されてもよい。
図3は、画像の照明環境と、カラーチャート1の4個の同色のパッチの位置に応じた画素値との関係を例示する図である。なお、図3においてパッチC1、C6、C9、及びC14は、図2のカラーチャート1のパッチC1、C6、C9、及びC14と対応している。図3(a)は、画像においてカラーチャート1が均一な照明環境で撮像される場合の照明環境と、4個の同色のパッチの位置に応じた画素値との関係を例示している。図3(a)に示す様に、画像の全領域にわたって均一な照明環境で画像が撮像されている場合には、カラーチャート1に配置された4個の同色のパッチC1、C6、C9、及びC14はいずれもほぼ同一の画素値を示す。そのため、例えば、画像においてカラーチャート1の領域5に配置された被写体の画素値の補正に、4個の同色のパッチC1、C6、C9、及びC14のどの画素値を用いても、被写体が本来持つ画素値を再現することができる。
図3(b)は、画像においておおよそ方向20に向かって一定の割合で画素値が増加するグラデーションが発生している照明環境と、4個の同色のパッチの位置に応じた画素値との関係を例示している。この場合、カラーチャート1に配置された4個の同色のパッチC1、C6、C9、及びC14は、グラデーションの影響でそれぞれが異なる色を示す。この状態で、カラーチャート1に配置された4個の同色のパッチのうちのいずれか1つの画素値を基準として補正値を算出したとしても、基準として用いたパッチの照明環境と、補正の対象の被写体の照明環境とが異なる。そのため、基準として用いたパッチから算出される補正値を用いて画素値の補正を行ったとしても、被写体が本来持つ画素値を再現することができないことがある。
この場合に、上述のように、グラデーションでは画像において画素値がおおよそ一方向に向かって一定の割合で変化する。また、カラーチャート1は、図2に示す様に、同色の2対の4個のパッチのうち対となるパッチ同士が対称点30から点対称の位置に配置されている(例えば、パッチC1とパッチC9)。そのため、例えば、点対称の位置に配置されているパッチC1及びパッチC9の画素値の平均をとることで、グラデーションによる照明環境の不均一性がこれらのパッチの画素値に与える影響が平均化できる。それによって、例えば、被写体が写る領域5内にある対称点30におけるパッチの画素値を推定することができる。また同様に、カラーチャート1のパッチC6及びパッチC14は、対称点30に対して点対称に配置されているため、同様に平均をとることで、グラデーションによる照明環境の不均一性がこれらのパッチの画素値に与える影響を平均化することができる。そのため、例えば、パッチC1、C6、C9、及びC14の画素値を平均化して得られた値を、基準として用いて補正値を算出し、被写体の画素値の補正を行うことで、被写体が本来持つ画素値を再現することができる。
しかしながら、図3(c)に示すように、例えば、同色の複数のパッチのうちの一部のパッチの画素値に限定的に影響を及ぼす照明環境の不均一性が画像に生じることがある。例えば、カラーチャート1を手に持った際に指などの影が一部のパッチ上に掛かる場合や、一部のパッチにおいて照明の反射が強く画像が白飛びしてしまう場合などが挙げられる。なお、以下の説明では、この同色の複数のパッチのうちの一部のパッチの画素値に限定的に影響を及ぼす照明環境の不均一性を、部分的照明環境変化50と呼ぶ。例えば、図3(c)では、おおよそ方向20に向かって一定の割合で画素値が増加するグラデーションが発生しており、更に、パッチC1に部分的照明環境変化50が発生している。
この場合、一部のパッチに生じた部分的照明環境変化50の影響でグラデーションの影響を除去することができない。その結果、画素値の補正を行っても被写体が本来持つ画素値を再現できないことがある。
そこで、第1の実施例では、制御部101は、画像に写るカラーチャート1上に配置された複数の同色のパッチのうちで、グラデーションに起因する位置に応じた画素値の変動を表す関数に応じた画素値となるパッチを特定する。ここで、グラデーションに起因する位置に応じた画素値の変動を表す関数に、パッチの画素値が応じた画素値となる場合、それらのパッチは、グラデーション以外の不均一な照明環境変化の影響を受けていないことが推定される。そのため、それらのパッチは、部分的照明環境変化50が発生していないと考えられる。従って、特定されたパッチの画素値を用いて画素値の補正に用いる補正値を得ることで、部分的照明環境変化50の影響を排除して、同色のパッチ間(例えば、領域5)の画素値の補正を行うことができる。それにより、被写体が本来持つ画素値を再現することができる。
続いて、図4から図13は、第1の実施例に係る画素値の補正を説明する図である。なお、図5〜図10においてパッチC1、C6、C9、及びC14は、図2のカラーチャート1のパッチC1、C6、C9、及びC14と対応している。また、以下の説明では、グラデーションに起因する位置に応じた画素値の変動を表す関数の例として、シヌソイド関数が用いられている。シヌソイド関数とは、例えば、サイン関数、及びコサイン関数であってよい。しかしながら、実施例で用いられるグラデーションに起因する位置に応じた画素値の変動を表す関数はこれに限定されるものではない。例えば、グラデーションに起因する位置に応じた画素値の変動を表す関数であれば、画像中の楕円形状又は六角形状上の位置に応じた画素値の変動を表す関数等のその他の関数が用いられてよい。また、この場合、複数のパッチが、関数が表す例えば楕円形状又は六角形状に沿うようにカラーチャート上に配置され、複数のパッチの画素値が関数に応じた画素値となるか否かが判定されてよい。
図4は、画像に発生したグラデーションに起因する画素値の変動と、点Pを中心とした半径rの円の円周上の点との関係を例示する図である。例えば、図4(a)では、画像に、方向20に向かっておおよそ一方向に一定の割合で画素値が増加するグラデーションによる照明環境の変化が発生している。また、画像中の点Pを中心とした半径rの円において、例えば、点41はθの角度が0度の点とする。また、θ0は、グラデーションの向きを表す方向20までの点41からの回転角とする(即ち、θ0はグラデーションの向きを表す)。この場合、点Pを中心とした半径rの円10の円周上を角度θだけ回転した点の画素値yは、シヌソイド曲線を描いて変化する。そのため、円10の円周上の点の画素値yは、シヌソイド関数を用いて表すことができ、例えば、以下の式1で表すことができる。なお、以下の式1では、図4(a)における反時計回りの回転方向が角度θの正の方向であり、αはシヌソイド曲線の振幅の値である。また、βは、シヌソイド曲線の波の振動の中心の値であり、点Pにおける画素値と対応している。また、式1では、画像にグラデーションが発生している場合の円10の円周上の点と、その点での画素値との関係がコサイン関数で表されているが、実施例はこれに限定されるものではなく、例えば、サイン関数が用いられてもよい。
図4(b)は、式1で表される画素値yと、角度θとの関係を表すグラフである。図4(b)に示すように、図4(a)に示すようなグラデーションが発生している画像において円10の円周上に画素値を検出すると、画素値はシヌソイド曲線を描いて変化する。
従って、例えば、図2に例示されるカラーチャート1を用いて撮像した画像にグラデーションが発生している場合、カラーチャート1に含まれる4個の同色のパッチの画素値は、位置に応じてシヌソイド曲線に応じた画素値を有する。図5(a)は、画像に発生したグラデーションと、画像に写るカラーチャート1上の4個の同色のパッチC1、C6、C9、及びC14の配置を例示している。この場合に、各パッチC1、C6、C9、及びC14の画素値は、図5(b)に示すようにおおよそシヌソイド関数に従って変化する。ここで、シヌソイド曲線は、例えば、図4(a)の円10を一周する区間において画素値が単調に減少する減少区間(例えば図4(b)のθ0からθ0+πの区間)と、単調に増加する増加区間(例えば図4(b)のθ0+πからθ0+2πの区間)とを含む。また、カラーチャート1では、対となるパッチが点対称に配置されている。そのため、被写体が写る領域5の周りで連続する3つのパッチ(例えば、対となるパッチC1からパッチC9までの区間)は、図4(b)のシヌソイド曲線において角度:πの幅を持つ区間に対応している。そのため、図5(b)に例示するように、カラーチャート1のパッチC1、C6、C9、及びC14の画素値を被写体が写る領域5の周りに連続する順番で並べると、連続する3つのパッチにおいておおよそ線形な画素値の変化が2本検出される。
一方で、図3(c)で例示するように、同色のパッチのいずれかにおいて部分的照明環境変化50が発生している場合、部分的照明環境変化50が発生しているパッチの画素値が変化する。そのため、部分的照明環境変化50が発生しているパッチの位置と対応するシヌソイド曲線の減少区間又は増加区間において、おおよそ線形な画素値の増加や減少が検出されなくなる。
そこで、第1の実施例では、制御部101は、領域5の周りに連続する順番でパッチの画素値の変化が示す線形性に基づいて、カラーチャート1に含まれる4個の同色のパッチの画素値がおおよそシヌソイド関数に応じた画素値となるか否かを判定する。
<ケース1>
上述のように図5(a)は、画像に発生したグラデーションと、画像に写るカラーチャート1上の4個の同色のパッチC1、C6、C9、及びC14の配置を例示している。また、図5(a)では、画像にグラデーションによる照明環境の変化が発生しており、一方、部分的照明環境変化50は発生していない。この場合に、例えば、カラーチャート1の4個の同色のパッチ(例えば、C1、C6、C9、及びC14)の画素値を、対称点30を中心として反時計回りにC9、C6、C1、及びC14の順に並べると、パッチの画素値は図5(b)に示す変動を示す。そして、対称点30の周りに時計回り、又は反時計回りに連続する3つのパッチにおいて、画素値が線形に増加又は減少する2つの区間が検出される。即ち、図5(b)では区間:C9‐C6‐C1においておおよそ線形な画素値の増加が検出される。また、区間:C1‐C14‐C9においておおよそ線形な画素値の減少が検出される。そして、第1の実施例では、制御部101は、このように対称点30を中心として時計回りに、又は反時計回りに連続する3つのパッチにおいて画素値がおおよそ線形に増加又は減少する場合に、その連続する3つのパッチの区間を線形区間として特定する。即ち、図5(b)の例では、制御部101は、線形区間として、C9‐C6‐C1と、C1‐C14‐C9の2本を特定する。
続いて、線形区間の重なりについて説明する。例えば、図5(b)において、特定された2本の線形区間の両端のパッチ(例えば、C1及びC9)ではなく、線形区間の中間の点を構成する2つのパッチC6及びC14は、互いに別の検出された線形区間では用いられていない。即ち、これらの2本の線形区間には、重複する区間がない。この様に、例えば、特定された線形区間の中間の点を構成するパッチが、別の線形区間において用いられておらず、重複する区間がない場合に、以降の説明では線形区間が重複していないと表現する。一方、線形区間の中間の点を構成するパッチが、別の線形区間において用いられており、一部の区間が重複している場合に、以降の説明では線形区間が重複していると表現する。
ここで、カラーチャート1では、対となるパッチが点対称に配置されているため、対称点30の周りに連続する3つのパッチ(例えば、対となるパッチC1からC9までの区間)は、図4(b)のシヌソイド曲線において角度:πの幅を持つ区間に対応している。そのため、特定された重複しない2本の線形区間は、例えば、上述のシヌソイド曲線の減少区間及び増加区間に対応していると考えられる。従って、例えば、重複しない2本の線形区間が特定される場合、その線形区間に含まれるパッチの画素値はシヌソイド関数に応じた画素値を有しているとみなしてよい。また更に、重複しない2本の線形区間が特定される場合、カラーチャート1の4個の同色のパッチのすべてがいずれかの線形区間に属している。そのため、2本の線形区間が特定される場合、4個の同色のパッチのいずれにも部分的照明環境変化50は発生していない。そのため、例えば、4個の同色のパッチC1、C6、C9、及びC14の画素値を代表する代表値を取得し、得られた代表値を基準として用いて画像の画素値を補正することで、被写体が本来持つ画素値を再現することができる。なお、代表値としては、例えば、4個の同色のパッチC1、C6、C9、及びC14の画素値を平均化した値が用いられてよい。
<ケース2>
図6は、重なりのある2つの線形区間が検出される場合を例示する図である。図6(a)の例では、画像において、弧を描く方向40に向かって一定の割合で画素値を増加させる照明環境の変化が発生している。この場合、例えば、4個の同色のパッチ(例えば、カラーチャート1のC1、C6、C9、及びC14)の画素値を、対称点30を中心として反時計回りの順序に並べると、パッチの画素値は図6(b)の変動を示す。そして、対称点30を中心として時計回り、又は反時計回りに連続する3つのパッチにおいて、図6(b)に示す様に画素値の線形な2つの変動が検出される。即ち、図6(b)ではC1‐C14‐C9へとおおよそ線形な画素値の減少が検出される。また、C14‐C9‐C6へとおおよそ線形な画素値の減少が検出される。従って、図6(b)の例において、制御部101は、C1‐C14‐C9と、C14‐C9‐C6の2本の線形区間を特定する。
また、線形区間の重なりについては、例えば、図6(b)において、特定された2本の線形区間のうち1本目の線形区間:C1‐C14‐C9の中間の点C14は、2本目の線形区間:C14‐C9‐C6に含まれている。また、同様に2本目の線形区間:C14‐C9‐C6の中間の点C9は、1本目の線形区間:C1‐C14‐C9に含まれている。従って、線形区間はC14‐C9において重複している。このように、図6(a)に示す方向40へ向かって徐々に増加するように画素値を変動させる照明環境の変化が画像に発生している場合、カラーチャート1の4個の同色のパッチの画素値から重複する2本の線形区間が検出される。なお、この場合、図6(a)に例示する画素値の変化では、パッチC1とパッチC6との間の画素値の差が大きく、現実的にはこのような形状の画素値の変動が照明環境の変化により生じることは特殊である。そのため、第1の実施例では、2本の線形区間が検出された場合にも、検出された2本の線形区間が重複する場合には、制御部101は、カラーチャート1の4個の同色のパッチの画素値が、シヌソイド関数に応じた画素値を有していないと判定してよい。また、この場合、制御部101は、例えば、画素値の補正を実行せずにエラー情報を出力することで、ユーザに再撮像を促してよい。
<ケース3‐1>
続いて、画像中の4個の同色のパッチのうちの一部のパッチに部分的照明環境変化50が発生しているケース3−1を例示する。なお、部分的照明環境変化50が画像に発生する場合の一例としては、カラーチャートを手に持った際の指などの影が一部のパッチ上に掛かる場合や、一部のパッチが光の反射により白飛びしてしまう場合などが挙げられる。
図7は、グラデーションによる画素値の変化において画素値が最も高くなる位置に、部分的照明環境変化50が発生している場合を例示する図である。図7(a)では、画像において方向20に向かって画素値が徐々に増加するようにグラデーションが生じている。また更に、図7(a)では、グラデーションによる画素値の変化において画素値が最も高くなる位置に存在するパッチC1において、部分的照明環境変化50が発生している。なお、図7(a)において部分的照明環境変化50は、C1と同色の他のパッチC6、C9、及びC14にはかかっておらず、画素値に影響を及ぼしていない。この場合に、例えば、4個の同色のパッチ(例えば、カラーチャート1のC1、C6、C9、及びC14)において対称点30を中心として反時計回りにパッチの画素値を並べると、図7(b)の画素値が検出される。ここで、パッチC1には部分的照明環境変化50が発生しているため、画素値が下がっている。そのため、対称点30の周りに時計回り、又は反時計回りに連続する3つのパッチにおいて、線形な画素値の変動が検出されず、線形区間は特定されない。従って、例えば、グラデーションによる画素値の変化において画素値が最も高くなるパッチに部分的照明環境変化50が発生している場合、線形区間は特定されなくなる。なお、線形区間が特定されない場合、制御部101は、例えば、カラーチャート1の4個の同色のパッチのうち少なくともいずれかのパッチの画素値が、シヌソイド関数に応じた画素値を有していないと判定してよい。また、この場合、少なくともいずれかのパッチが、グラデーション以外の不均一な照明環境変化の影響を受けている。そのため、制御部101は、4個の同色のパッチの画素値のうち少なくともいずれかのパッチで、部分的照明環境変化50が生じていることを検出できる。
<ケース3‐2>
続いて、画像中の4個の同色のパッチのうちの一部のパッチに部分的照明環境変化50が発生しているケース3−2を例示する。なお、部分的照明環境変化50が画像に発生する場合の一例としては、カラーチャートを手に持った際の指などの影が一部のパッチ上に掛かる場合や、一部のパッチが光の反射により白飛びしてしまう場合などが挙げられる。
図8は、グラデーションによる画素値の変化において画素値が最も低くなる位置に、部分的照明環境変化50が発生している場合を例示する図である。図8(a)では、画像に方向20に向かって画素値が徐々に増加するようにグラデーションが生じている。また更に、図8(a)では、グラデーションによる画素値の変化において画素値が最も低くなる位置に存在するパッチC9において、部分的照明環境変化50が発生している。なお、図8(a)において部分的照明環境変化50は、C9と同色の他のパッチC1、C6、及びC14にはかかっておらず、画素値に影響を及ぼしていない。この場合に、例えば、4個の同色のパッチ(例えば、カラーチャート1のC1、C6、C9、及びC14)において対称点30を中心として反時計回りに順に画素値を並べると、図8(b)の画素値が検出される。ここで、パッチC9には部分的照明環境変化50が生じているため、画素値が下がっている。そのため、対称点30の周りに時計回り、又は反時計回りに連続する3つのパッチにおいて、線形な画素値の変動が検出されず、線形区間は特定されない。従って、例えば、グラデーションによる画素値の変化において画素値が最も低くなるパッチに部分的照明環境変化50が発生している場合、線形区間は特定されなくなる。
<ケース3‐3>
続いて、画像中の4個の同色のパッチのうちの一部のパッチに部分的照明環境変化50が発生しているケース3−3を例示する。なお、部分的照明環境変化50が画像に発生する場合の一例としては、カラーチャートを手に持った際の指などの影が一部のパッチ上に掛かる場合や、一部のパッチが光の反射により白飛びしてしまう場合などが挙げられる。
図9は、グラデーションによる画素値の変化において画素値が中間の値を有するパッチの位置に部分的照明環境変化50が生じている場合を例示する図である。図9(a)では、画像に方向20に向かって画素値が徐々に増加するようにグラデーションが生じている。また更に、図9(a)では、グラデーションによる画素値の変化では画素値が中間の値を有する位置に存在するパッチC6において部分的照明環境変化50が生じている。なお、図9(a)において、部分的照明環境変化50は、C6と同色の他のパッチC1、C9、及びC14にはかかっておらず画素値に影響を及ぼしていない。この場合、例えば、4個の同色のパッチ(例えば、カラーチャート1のC1、C6、C9、及びC14)において対称点30を中心として反時計回りに順に画素値を並べると、図9(b)の画素値が検出される。そして、例えば、反時計回りに連続する3つのパッチC1‐C14‐C9において画素値が線形に変化する1本の線形区間が特定される。一方、パッチC6には部分的照明環境変化50が生じているため、画素値が下がっており、例えば、図5(b)では特定されたC9‐C6‐C1の線形区間は特定されない。従って、例えば、グラデーションによる画素値の変化において中間の値を有するパッチに部分的照明環境変化50が発生している場合、1本の線形区間が特定される。この場合、制御部101は、例えば、特定された1本の線形区間に含まれる3個のパッチの画素値はシヌソイド関数に応じた画素値となるパッチであると判定してよい。また、この場合、1本の線形区間に含まれる3個のパッチはグラデーション以外の不均一な照明環境変化の影響を受けていない。そのため、制御部101は、1本の線形区間に含まれる3個のパッチには、部分的照明環境変化50が発生していないと判定してよい。また、制御部101は、例えば、特定された1本の線形区間に含まれなかったパッチのC6が、シヌソイド関数に応じた画素値となるパッチではないと判定してよく、パッチC6に部分的照明環境変化50が生じていると判定してよい。
<ケース4>
図10は、グラデーションによる画素値の変化に加えて、同色のパッチのうちの複数のパッチに部分的照明環境変化50が生じている場合を例示する図である。図10(a)では、画像に方向20に向かって画素値が徐々に増加するようにグラデーションが生じている。また更に、図10(a)では、同色のパッチのうちの複数のパッチ(例えば、C6及びC14)において部分的照明環境変化50が生じている。この場合、例えば、4個の同色のパッチ(例えば、カラーチャート1のC1、C6、C9、及びC14)において対称点30を中心として反時計回りに順に画素値を並べると、図10(b)の画素値が検出される。そして、C6及びC14に部分的照明環境変化50が生じているため、対称点30の周りに時計回り、又は反時計回りに連続する3つのパッチにおいて線形な画素値の変化は検出されない。従って、例えば、4個の同色のパッチのうち、複数のパッチにおいて部分的照明環境変化50が生じている場合、線形区間は特定されなくなる。
以上のケース1から4で説明したように、対称点30から点対称に位置する2対の合計4個の同色のパッチの画素値が、対称点30を中心として時計回りに、又は反時計回りに順に並べられたとする。この場合に、制御部101は、画素値の並びから特定される線形区間の本数から、部分的照明環境変化50が画像中に発生していることを検出することができる。
例えば、制御部101は、4個の同色のパッチの画素値から2本の線形区間が特定されれば、ケース1又はケース2で述べたように、部分的照明環境変化50は画像中に発生していないと判定できる。
また更に、制御部101は、検出された2本の線形区間が重複しているか否かを判定することで、ケース1で例示した直線的なグラデーションによる画素値の変化と、ケース2で例示した特殊な画素値の変化とを区別することができる。そして、線形区間が重複しておらず、ケース1で例示したグラデーションによる画素値の変化が生じている場合には、制御部101は、例えば、2本の線形区間に含まれる4個の同色のパッチの画素値を平均した値を基準として用いて、画素値の補正を行ってもよい。また、線形区間が重複しており、ケース2で例示した特殊な画素値の変化が生じている場合には、制御部101は、エラー情報を出力することで、ユーザに再撮像を促してよい。
一方、2対の合計4個の同色のパッチの画素値から2本の線形区間が特定されない場合には、制御部101は、4個の同色のパッチのうちの一部のパッチに部分的照明環境変化50が発生していると判定できる。この場合には、例えば、これらの4個の同色のパッチの画素値を平均した値を基準として用いて画素値の補正を行ったとしても、部分的照明環境変化50により一部のパッチの画素値が変化しているため、被写体が本来持つ画素値を再現できない恐れがある。そのため、4個の同色のパッチの画素値から2本の線形区間が特定されない場合には、制御部101は、エラー情報を出力することで、ユーザに再撮像を促してよい。これにより、例えば、ユーザは画素値の補正に成功する可能性の高い画像が撮像されるまで画像を撮りなおすことができ、結果として被写体が本来持つ画素値を再現することができる。
或いは、2対の合計4個の同色のパッチの画素値から1本の線形区間が特定される場合には、制御部101は、特定された1本の線形区間に含まれるパッチの画素値を代表する代表値を取得し、画素値の補正を実行してもよい。なお、代表値は、例えば以下のように取得されてよい。
例えば、1本の線形区間が特定される場合、特定された1本の線形区間に含まれる連続する3つのパッチのうちで中間の画素値を有するパッチは、図4(b)に示すシヌソイド関数における振動の中心:βの画素値に近い値を有する。そのため、制御部101は検出された1本の線形区間に含まれる連続する3つのパッチのうちの中間のパッチの画素値を代表値として取得し、得られた代表値を基準に画素値の補正を行ってもよい。或いは、検出された1本の線形区間を構成するパッチの画素値のうち両端のパッチ(例えば、図9ではパッチC1とC9)は対を形成している。そのため、制御部101は、これらのパッチの画素値を平均した値を代表値として取得し、得られた代表値を基準に被写体の画素値の補正を行ってもよい。更に、別の例では、制御部101は、検出された1本の線形区間を構成するパッチのうちで最大の画素値を有するパッチ(例えば、図9ではC1)と、最小の画素値を有するパッチ(例えば、図9ではC9)との画素値の平均値を計算する。そして、制御部101は、得られた平均値と、中間の画素値を有するパッチ(例えば、図9ではC14)の画素値との平均値を更に算出し代表値として用いてもよい。この様に、1本の線形区間が検出される場合には、検出された1本の線形区間に含まれていないパッチの画素値を除外して、制御部101は、1本の線形区間に含まれるパッチの画素値に基づいて代表値を取得し、画素値の補正を実行してよい。また、代表値は、例えば、図4(b)に示すシヌソイド関数における振動の中心:βの画素値に近い値が得られるように、1本の線形区間に含まれるパッチの画素値に基づいてその他の手法で取得されてもよい。
続いて、線形区間の判定について例示する。第1の実施例に係る線形区間は、例えば、以下の判定により特定されてよい。例えば、カラーチャート1上に含まれる4個の同色のパッチのうちの1個をi番目のパッチとする。そして、i番目のパッチから対称点30を中心として時計回り、又は反時計回りに連続する3つのパッチの画素値をpi、pi+1、pi+2とする。この場合に、制御部101は、この連続する3つのパッチの画素値にpi≦pi+1≦pi+2、またはpi≧pi+1≧pi+2の関係が成り立ち、且つ、以下の式A1を満たす場合に、その3つ並んだパッチを線形区間として特定してよい。
pi+1−th<(pi+pi+2)/2<pi+1+th …式A1
ここで、thは画素値の変動が線形であるか否かを判断するために設定される閾値である。なお、閾値thとしては、例えば、対称点30の周りに連続する3つ並んだパッチの画素値にpi≦pi+1≦pi+2、またはpi≧pi+1≧pi+2の関係が成り立つ場合における差分|pi−pi+2|の10%や20%の値が設定されてもよい。また、閾値thの値は、例えば、カラーチャート1を用いて画像を撮像する際に発生するグラデーションの強さがある程度推定できる場合には、評価環境などで決定した閾値を予め記憶部102に記憶して用いてもよい。
続いて、図11及び図12を参照して、第1の実施例に係る画素値補正処理を説明する。図11は、第1の実施例に係るパッチグループ情報1100を例示する図である。パッチグループ情報1100は、例えば、グループ、パッチ数、及びパッチ識別子を含んでいる。グループは、カラーチャート1に配置されるパッチの4色(a、b、c、及びd)に対応するグループである。パッチ数は、各グループが含む同色のパッチの数を示す。パッチ識別子には、各グループが含む4個の同色のパッチに対して割り振られた識別子が登録される。また、図11の例では、パッチ識別子には、対称点30を中心として時計周りの並び順で各グループの4個のパッチが登録されている。例えば、グループaの場合には、C1、C6、C9、及びC14の順でパッチが並んで登録されている。
図12は、第1の実施例に係る画素値補正処理を例示する動作フロー図である。図12の画素値補正処理の動作フローは、例えば、制御部101が記憶部102に格納されているプログラム120を読み出して実行することで実施される。一実施例においては、制御部101に画素値補正処理の実行指示が入力されると図12の動作フローは開始する。
ステップ1201(以降、ステップを“S”と記載し、例えば、S1201と表記する)において、制御部101は、線形区間特定処理を実行する。
図13は、第1の実施例に係る線形区間特定処理の動作フローを例示する図である。図13の線形区間特定処理の動作フローは、例えば、制御部101が記憶部102に格納されているプログラム120を読み出して実行することで実施される。一実施例においては、図12のS1201に進むと、図13の線形区間特定処理は開始する。
S1301において、制御部101は、パラメータ:iの値をi=1、及びパラメータ:lの値をl=0に設定し、パラメータ:i及びパラメータ:lを初期化する。S1302において制御部101は、パッチグループ情報1100において同じグループに属するパッチの画素値を画像から取得する。例えば、パッチグループ情報1100のグループaであれば、制御部101は、C1、C6、C9、及びC14のパッチの画素値を取得する。なお、画像に写るカラーチャート1上のパッチからの画素値の取得は、様々な手法を用いて実施されてよい。例えば、カラーチャート1のパッチが配列された面に位置を示すマークが付されている場合には、制御部101は画像中のマークの位置を基に、カラーチャート1に含まれる各パッチの領域を特定し、パッチの画素値を取得してもよい。或いは別の実施例では、画像に写るカラーチャート1上のパッチからの画素値の取得は、特許文献6に示される手法を利用して実施されてよい。そして、制御部101は、取得されたパッチの画素値:pに対して、例えば、対称点30を中心として時計回りにi番目から順に番号を割り振る。例えば、グループaのC1、C6、C9、及びC14の画素値が取得された場合には、制御部101は、C1、C6、C9、及びC14のパッチのそれぞれの画素値に対しp1、p2、p3、及びp4を割り振る。ここで、例えば、C1の画素値はp1、C6の画素値はp2、C9の画素値はp3、C14の画素値はp4であってよい。
S1303において制御部101は、対称点30を中心として時計回りに連続する同色の3つのパッチの画素値pi、pi+1、pi+2が線形区間であるか否かを判定する。制御部101は、例えば、上述のように画素値pi、pi+1、pi+2にpi≦pi+1≦pi+2、またはpi≧pi+1≧pi+2の関係が成り立ち、且つ、上述の式A1を満たす場合に、その連続する同色の3つのパッチを線形区間として特定してよい。なお、S1303において、例えば、i+1及びi+2の値が、パッチグループ情報1100のパッチ数を超えている場合には、値は1に戻すものとする。即ち、例えば、i=4の場合に、i+1=5、及びi+2=6は、パッチグループ情報1100のグループ:aのパッチ数:4を超えている。この場合には、i+1は1に戻し、i+2は2になる。従って、例えば、S1303においてi=4の場合には、制御部101は、パッチ識別子がC14、C1、C6のパッチの画素値p4、p1、及びp2に対して線形区間であるか否かを判定してよい。
線形区間でない場合(S1303がNO)、フローはS1306へと進む。一方、線形区間である場合(S1303がYES)、フローはS1304へと進む。S1304において制御部101は、特定された線形区間を記憶部102に記憶する。例えば、S1302においてC1、C6、C9、及びC14の画素値がp1、p2、p3、及びp4として取得されており、また、画素値:p1、p2、p3の連続において線形区間が特定されたとする。この場合に、線形区間であると特定された連続する3つのパッチC1‐C6‐C9が記憶部102に記憶されてよい。
S1305において制御部101は、パラメータ:lの値を1増加させる。なお、パラメータ:lは図13の動作フローにおいては線形区間の本数をカウントするパラメータである。S1306において制御部101は、パラメータ:iの値を1増加させる。続いて、S1307において制御部101は、パラメータ:iの値が、パッチグループ情報1100のパッチ数を超えたか否かを判定する。パラメータ:iの値が、パッチグループ情報1100のパッチ数を超えていない場合(S1307がNO)、フローはS1303へと戻り、制御部101は処理を繰り返す。即ち、例えば、S1303からS1307の処理では、繰り返しの度にiが1増加し、制御部101は、p1‐p2‐p3、p2‐p3‐p4、p3‐p4‐p1、p4‐p1‐p2という組み合わせに対して線形区間であるか否かを判定する。そして、制御部101は、これらの組み合わせにおいて線形区間であると判定されたパッチを記憶部102に記憶し、また、線形区間の本数をパラメータ:lによりカウントする。S1307において、パラメータ:iの値が、パッチグループ情報1100のパッチ数を超えている場合(S1307がYES)、本動作フローは終了し、フローは図12のS1202へと進む。
S1202において制御部101は、線形区間の数が2本であるか否か(即ち、パラメータ:l=2)を判定する。線形区間の数が2本である場合(S1202がYES)、フローはS1203へと進む。S1203において制御部101は、2本の線形区間が重複しているか否かを判定する。例えば、制御部101は、S1304で記憶部102に線形区間として記憶されている連続する3つのパッチのうちの中間のパッチが、もう一方の線形区間の連続する3つのパッチに含まれている場合に線形区間が重複していると判定してよい。2本の線形区間が重複していない場合(S1203がNO)、フローはS1204へと進む。なお、2本の線形区間が重複していない場合とは、例えば、図5を参照して例示したケース1であり、この場合、制御部101は、2本の重複しない線形区間が特定された4個の同色のパッチには、部分的照明環境変化50が発生していないと判定できる。S1204において制御部101は、2本の重複しない線形区間が特定された4個の同色のパッチの画素値を代表する代表値を取得する。代表値は、例えば、4個の同色のパッチの画素値の相加平均及び加重平均などの平均値であってよい。S1205において制御部101は、取得された代表値を基準として用いて被写体の画素値の補正を実行する。なお、画素値の補正は、例えば、特許文献1に記載される手法を用いて実行されてよい。
一方、S1203において2本の線形区間が重複する場合(S1203がYES)、フローはS1206へと進む。なお、2本の線形区間が重複する場合とは、例えば、図6を参照して例示したケース2の特殊な画素値の変化が生じている場合である。このケース2で述べたような特殊な画素値の変化が生じている場合、画像に画素値の補正を実行しても被写体が本来持つ画素値を再現できない可能性がある。そのため、S1206において制御部101は、エラー情報を出力し、本動作フローは終了する。なお、エラー情報の出力は、例えば、再撮像を促すメッセージ等を画像処理装置100の表示画面に表示させることであってよい。
また、S1202において線形区間が2本では無い場合(S1202がNO)、フローはS1207に進む。S1207において、制御部101は、線形区間の数が1本であるか否か(即ち、パラメータ:l=1)を判定する。線形区間の数が1本である場合(S1207がYES)、フローはS1208へと進む。S1208において制御部101は、1本の線形区間に含まれる同色の3つのパッチの画素値を代表する代表値を取得する。
例えば、制御部101は、検出された1本の線形区間に含まれる連続する3つのパッチの中間のパッチの画素値を代表値としてよい。或いは、特定された1本の線形区間に含まれるパッチのうちで両端のパッチ(例えば、図9ではパッチC1とC9)は対を形成しているため、制御部101は、この両端のパッチの画素値の相加平均及び加重平均などの平均値を代表値として用いてもよい。続いて、S1205において制御部101は、取得された代表値を基準として用いて被写体の画素値の補正を実行し、本動作フローは終了する。以上で述べたように、1本の線形区間が検出される場合には、制御部101は、S1201の線形区間特定処理において特定された1本の線形区間に含まれていないパッチの画素値を除外して代表値を取得し、画素値の補正を実行してよい。これにより、部分的照明環境変化50が発生しているパッチが画素値の補正において除外されるため、被写体が本来持つ画素値を再現することができる。
一方、S1207において線形区間の数が1本でない場合(S1207がNO)、フローはS1206へと進む。S1206において制御部101は、エラー情報を出力し、本動作フローは終了する。なお、S1207においてNOと判定される場合は、例えば、図7、図8、図10を参照して例示したケース3‐1、ケース3‐2、及びケース4の部分的照明環境変化50が発生している場合である。この場合、例えば、部分的照明環境変化50が発生しているパッチを含む4個の同色のパッチの画素値に基づいて画素値の補正を実行しても被写体が本来持つ画素値を再現できない恐れがある。そのため、制御部101は、S1206においてエラー情報を出力してよい。なお、エラー情報の出力は、例えば、再撮像を促すメッセージ等を画像処理装置100の表示画面に表示させることであってよい。
以上で述べたように、第1の実施例によれば制御部101は、カラーチャート1上の4個の同色のパッチの画素値から特定された線形区間に基づいて、4個の同色のパッチのうちでシヌソイド関数に応じた画素値となるパッチを特定することができる。例えば、2本の重複しない線形区間が特定された場合には、4個の同色のパッチのすべてをシヌソイド関数に応じた画素値となるパッチとして特定できる。また、この場合、制御部101は、4個の同色のパッチのいずれにも部分的照明環境変化50は発生していないと判定できる。そのため、制御部101は、4個の同色のパッチの画素値から代表値を取得し、得られた代表値を基準として用いて画素値の補正を実行することで、被写体が本来持つ画素値を再現することができる。
また、一方で、制御部101は、4個の同色のパッチの画素値から特定された線形区間に基づいて、4個の同色のパッチのいずれかに部分的照明環境変化50が発生していることを検出することができる。例えば、制御部101は、1本の線形区間が特定された場合には、1本の線形区間に含まれる3個の同色のパッチをシヌソイド関数に応じた画素値となるパッチとして特定できる。また、制御部101は、4個の同色のパッチのうち、1本の線形区間に含まれていない残りの1個の同色のパッチにおいて部分的照明環境変化50が発生していることを検出できる。そのため、制御部101は、部分的照明環境変化50が発生しているパッチを、画素値の補正の際に除くことができる。そして、制御部101は、部分的照明環境変化50が発生している場合にも、1本の線形区間に含まれる3個の同色のパッチの画素値から、代表値を取得し、得られた代表値を基準として用いて画素値の補正を実行することができる。従って、被写体が本来持つ画素値を再現することができる。
また、例えば、線形区間が特定されない場合には、制御部101は、いずれかのパッチに部分的照明環境変化50が発生していることを検出できる。そのため、制御部101は、エラー情報を出力することでユーザに再撮影を促すことができ、それにより、ユーザは画素値の補正に成功する可能性の高い画像が撮像されるまで画像を撮りなおすことができる。結果として、ユーザは被写体が本来持つ画素値が再現された画像を取得することができる。上述のように、美容や健康の分野において、肌表面の画像を撮像し、例えば、肌の色、毛穴の大きさと数、シミの大きさや色の濃さなどの肌の状態を画像からデータ化して、それらのデータをもとに肌の状態を評価することが行われている。そして、例えば、このような場合に、被写体が本来持つ画素値が再現されていない画像を用いて肌の状態を評価してしまうと、誤った評価につながってしまう。そのため、例えば、ユーザが、画素値の補正に成功する可能性の高い画像が撮像されるまで画像を撮りなおすことができ、被写体が本来持つ画素値が再現された画像を取得できることは、肌の状態を評価する精度の向上につながるため好ましい。
なお、上記の例では、カラーチャート1が2対の合計4個の同色のパッチを含む場合を例に説明を行った。しかしながら、実施例はこれに限定されるものではなく、例えば、カラーチャートは、2対以上の同色のパッチを含んでいても良い。この場合、例えば、制御部101は、2対以上の同色のパッチのうちの対の一方の同色のパッチから、他方の同色のパッチまでの区間で連続する同色のパッチの画素値が、線形な変動を示すか否かを判定してよい。そして、制御部101は、対の一方の同色のパッチから、他方の同色のパッチまでの区間で線形な変動を示すと判定された場合には、その区間を線形区間として特定してよい。即ち、例えば、カラーチャートが3対の合計6個の同色のパッチを含むとする。この場合に、制御部101は、例えば、S1303において、被写体が写る領域5の周りに連続する4つのパッチにおいて画素値がおおよそ線形に増加又は減少する場合に、その連続する4つのパッチの区間を線形区間として特定してよい。
なお、上述の図12の動作フローにおいて、S1201からS1203、S1206、及びS1207の処理では、画像処理装置100の制御部101は、例えば、特定部111として機能する。また、S1204、S1205及びS1208の処理では、画像処理装置100の制御部101は、例えば、補正部112として機能する。
また、図13の動作フローにおいて、S1301からS1307までの処理では、画像処理装置100の制御部101は、例えば、特定部111として機能する。
[第2の実施例]
続いて、図14から図21を参照し、第2の実施例を説明する。第2の実施例では、例えば、補正を行う対象となる領域の中心を対称点30として、補正を行う対象となる領域の周りに対称点30から点対称に配置される3対以上の同色のパッチを有するカラーチャート2を用いる場合の画素値補正処理を例示する。
なお、図14から図19では、第2の実施例に係る3対以上の同色のパッチを含むカラーチャート2のうちの1色の配置が例として示されている。例えば、図14(a)、図15、及び図16(a)から図19(a)は、カラーチャート2が3対の同色のパッチを含む場合の同色のパッチの配置を例示している。そして、カラーチャート2には、パッチ1〜パッチ6の6つの同色のパッチが、例えば、補正を行う対象である被写体が写る領域の中心を対称点30として点対称の位置に配置されている。ここで、例えば、パッチ1とパッチ4、パッチ2とパッチ5、パッチ3とパッチ6は対称点30に対して点対称の位置に配置されている対となるパッチである。また、図14(a)、図15、及び図16(a)から図19(a)の例では、パッチ1〜パッチ6は対称点30の周りにおおよそ等間隔に配置されている。更に、図14(a)、図16(a)から図19(a)に示す例では、パッチ1からパッチ4へと画素値が徐々に高くなるようにグラデーションが発生している。
また、図14(b)、図16(b)から図19(b)は、カラーチャート2が4対の同色のパッチを含む場合の同色のパッチの配置を例示している。そして、図14(b)、図16(b)から図19(b)では、パッチ1〜パッチ8の8つの同色のパッチが、例えば、補正を行う対象である被写体が写る領域の中心を対称点30として点対称の位置に配置されている。ここで、例えば、パッチ1とパッチ5、パッチ2とパッチ6、パッチ3とパッチ7、パッチ4とパッチ8は対称点30に対して点対称の位置に配置されている対となるパッチである。また、図14(b)、図16(b)から図19(b)の例では、パッチ1〜8は対称点30の周りにおおよそ等間隔に配置されている。更に、図14(b)、図16(b)から図19(b)に示す例では、パッチ1からパッチ5へと画素値が徐々に高くなるようにグラデーションによる照明環境の変化が画像に発生している。そして、例えば、以上のような3対以上の同色のパッチを有するカラーチャート2を用いる第2の実施例では、線形区間は以下のように特定されてよい。
<ケース5>
ケース5は、図14に示す様に、同色の複数のパッチのうちの一部のパッチの画素値に限定的に影響を及ぼす部分的照明環境変化50は発生しておらず、グラデーションによる照明環境の変化が発生している場合の線形区間の特定を例示している。例えば、カラーチャート2に同色のパッチがn対で合計2n個(nは3以上の整数)含まれている場合に、同色のパッチのうちの或るパッチをi番目とする。そして、i番目のパッチから補正を行う対象である被写体が写る領域の周りに時計回りに連続する3つのパッチの画素値をpi、pi+1、pi+2とする。この場合に、制御部101は、この連続する3つのパッチの画素値pi、pi+1、pi+2にpi≦pi+1≦pi+2、またはpi≧pi+1≧pi+2の関係が成り立ち、且つ、上記式A1を満たすか否かを判定する。そして、連続する3つのパッチの画素値にpi≦pi+1≦pi+2、またはpi≧pi+1≧pi+2の関係が成り立ち、且つ、上記式A1を満たす場合に、制御部101は、その連続する3つのパッチに部分的な線形性が有りと判定する。この判定を、カラーチャート2上の同色の2n個のすべてのパッチをi番目のパッチとして実行し、制御部101は、同色の2n個のパッチに含まれる部分的な線形性を取得する。
例えば、図14(a)では、カラーチャート2は、2n=6個(n=3対)でパッチ1〜パッチ6の6個の同色のパッチを含んでいる。この場合に、図14(a)に矢印14で示すように、パッチ1‐2‐3、パッチ2‐3‐4、パッチ4‐5‐6、及びパッチ5‐6‐1の4組の部分的な線形性が検出される。
制御部101は、この検出された部分的な線形性において、例えばpiとpi+1の画素値の大小関係を比較し、部分的な線形性の変動の方向がpiからpi+1にかけて増加しているか、又は減少しているかを特定する。そして、制御部101は、対称点30の周りに連続する(n+1)個の同色のパッチで構成される区間で、変動の方向が同じである部分的な線形性が連続している場合に、その連続する(n+1)個の同色のパッチで構成される区間を線形区間として特定する。従って、第2の実施例では、線形区間は変動の方向が同じである複数の部分的な線形性を含んでいるが、線形区間の全体に渡って画素値が線形に変動をしていなくてもよい。図14(a)では、n=3であるため、n+1は4である。また、部分的な線形性は、対称点30の周りに連続する3点で構成されている。そのため、変動の方向が同じである部分的な線形性が2組連続している場合に、制御部101は、その部分的な線形性が2組連続している区間を線形区間として特定してよい。なお、部分的な線形性が対称点30の周りに連続する3点で構成される場合、制御部101は、変動の方向が同じである部分的な線形性が(n−1)組連続する場合に、その(n−1)組の部分的な線形性が連続する区間を線形区間として特定してよい。
例えば、図14(a)では、検出された部分的な線形性のうち、パッチ1‐2‐3と、パッチ2‐3‐4はカラーチャート2において時計回りに連続して存在している。また、部分的な線形性の変動の方向も、パッチ1‐2‐3と、パッチ2‐3‐4はいずれも増加であり一致している。そのため、制御部101は、この2組の部分的な線形性が連続する区間:パッチ1‐2‐3‐4を線形区間として特定してよい。なお、この線形区間はn+1点(即ち、4点)のパッチを含んでいる。
同様に、検出された部分的な線形性のうち、パッチ4‐5‐6とパッチ5‐6‐1とはカラーチャート2において時計回りに連続して存在している。また、部分的な線形性の変動の方向も、パッチ4‐5‐6と、5‐6‐1とはいずれも減少であり一致している。そのため、制御部101は、この2組の部分的な線形性が連続する区間:パッチ4‐5‐6‐1を線形区間として特定してよい。従って、図14(a)では、制御部101は、2本の線形区間を特定してよい。
また、図14(b)は、カラーチャート2に同色のパッチが2n=8個(n=4対)含まれている場合を例示している。そのため、n+1は5である。また、部分的な線形性は、対称点30の周りに連続する3点の同色のパッチを含む。そのため、変動の方向が同じである部分的な線形性が3組連続している場合に、制御部101はその区間を線形区間として特定してよい。
例えば、図14(b)では、パッチ1‐2‐3、パッチ2‐3‐4、パッチ3‐4‐5において3組の連続する部分的な線形性が連続している。また、これらの部分的な線形性ではいずれもpiからpi+1へと向かって画素値が増加しており、画素値の変動の方向も一致している。従って、制御部101は、この3組の部分的な線形性が連続する区間:パッチ1‐2‐3‐4‐5を線形区間として特定してよい。同様に、図14(b)には、パッチ5‐6‐7、パッチ6‐7‐8、及びパッチ7‐8‐1において画素値の変動の方向が減少で一致している3組の連続する部分的な線形性がある。そのため、制御部101は、この3組の部分的な線形性が連続する区間:パッチ5‐6‐7‐8‐1を線形区間として特定してよい。従って、図14(b)では、制御部101は2本の線形区間を特定してよい。
続いて、線形区間の重なりについて説明する。例えば、図14(a)で特定された2本の線形区間の両端のパッチではなく、線形区間の中間の点である4個のパッチ(パッチ2、パッチ3、パッチ5、及びパッチ6)は、別の検出された線形区間では用いられていない。この様に、例えば、特定された線形区間の中間の点となるパッチが、別の線形区間において用いられていない場合に、制御部101は線形区間が重複していないと判定してよい。一方、線形区間の中間の点となるパッチが、別の線形区間において用いられている場合には、制御部101は線形区間が重複していると判定してよい。
また、第2の実施例では線形区間は、対称点30の周りに連続する同色のn+1個のパッチを含んでおり、カラーチャート2において対となる2個のパッチの間の区間(例えば、図14(a)ではパッチ1からパッチ4までの区間)に対応している。そのため、線形区間は、例えば、図4(b)のシヌソイド曲線において角度:πの幅を持ち、上述のシヌソイド曲線の減少区間又は増加区間に対応している。従って、重複しない線形区間が特定される場合、その線形区間に含まれるパッチの画素値は、シヌソイド関数に応じた画素値を有しているとみなしてよい。また更に、2本の線形区間が特定される場合、2n個の同色のパッチのすべてがいずれかの線形区間に属している。そのため、2本の線形区間が特定される場合、2n個の同色のパッチのいずれにも部分的照明環境変化50は発生していない。従って、制御部101は、例えば、2n個の同色のパッチの画素値を代表する代表値を取得し、得られた代表値を基準として用いて画像の画素値を補正することで、被写体が本来持つ画素値を再現することができる。なお、代表値としては、例えば、2n個の同色のパッチの画素値を平均化した値が用いられてよい。
<ケース6>
ケース6は、重なりのある2本以上の線形区間が特定される場合を例示している。図15は、重なりのある2本以上の線形区間が特定される場合を例示する図であり、方向40へ向かって徐々に増加するように画素値を変動させる照明環境の変化が画像に発生している。この場合に、図15に矢印14で示すように、パッチ1‐2‐3、パッチ2‐3‐4、パッチ3‐4‐5、及びパッチ4‐5‐6の4組の部分的な線形性が検出される。また、これらの部分的な線形性ではいずれもpiからpi+1へ向かって画素値が減少しており、画素値の変動の方向も一致している。また、n=3であるため、制御部101は、画素値の変動の方向が一致する部分的な線形性が2組連続している区間で線形区間を特定してよい。従って、図15では、制御部101は、区間:パッチ1‐2‐3‐4、区間:パッチ2‐3‐4‐5、区間:パッチ3‐4‐5‐6において3本の線形区間を特定する。
一方で、これらの3本の線形区間のうちのいずれかの線形区間において中間の点となるパッチ(パッチ2、パッチ3、パッチ4、及びパッチ5)は、検出された別の線形区間で用いられている。そのため、制御部101は線形区間が重複すると判定してよい。なお、このように重複する2本以上の線形区間が2n個の同色のパッチの画素値から検出される場合、例えば、図15のパッチ1とパッチ6との間のように画素値の差が大きい部分があり、現実的にはこのような形状の画素値の変化が生じることは特殊である。そのため、第2の実施例では、2本以上の重複する線形区間が特定された場合には、制御部101は、例えば、画素値の補正を実行せずに、エラー情報を出力することで、ユーザに再撮像を促してよい。
<ケース7‐1>
続いて、画像中の同色の複数のパッチのうちの一部のパッチに、部分的照明環境変化50が発生しているケース7−1における線形区間の特定について例示する。
図16は、グラデーションによる画素値の変化において画素値が最も高くなる位置に、部分的照明環境変化50が生じている場合を例示する図である。図16(a)では、カラーチャート2は同色のパッチを2n=6個(n=3対)含んでいる。n=3であるため、制御部101は、画素値の変動の方向が一致する部分的な線形性が2組連続している区間で線形区間を特定してよい。しかしながら、パッチ4に部分的照明環境変化50が発生しているため、画素値が下がっており、図14(a)では検出されたパッチ2‐3‐4及びパッチ4‐5‐6の部分的な線形性が、図16(a)では検出されない。そのため、図16(a)では、画素値の変動の方向が一致する部分的な線形性が2組連続して検出されず、線形区間は特定されない。
また、図16(b)では、カラーチャート2は同色のパッチを2n=8個(n=4対)含んでいる。n=4であるため、制御部101は、画素値の変動の方向が一致する部分的な線形性が3組連続している区間で線形区間を特定してよい。しかしながら、パッチ5に部分的照明環境変化50が発生しているため、画素値が下がっており、図14(b)では検出されたパッチ3‐4‐5及びパッチ5‐6‐7の部分的な線形性が、図16(b)では検出されない。そのため、図16(b)では、画素値の変動の方向が一致する部分的な線形性が3組連続して検出されず、線形区間は特定されない。
<ケース7‐2>
続いて、画像中の同色の複数のパッチのうちの一部のパッチに、部分的照明環境変化50が発生しているケース7−2における線形区間の特定について例示する。
図17は、グラデーションによる画素値の変化において画素値が最も低くなる位置に、部分的照明環境変化50が生じている場合を例示する図である。図17(a)では、カラーチャート2は同色のパッチを2n=6個(n=3対)含んでいる。n=3であるため、制御部101は、画素値の変動の方向が一致する部分的な線形性が2組連続している区間で線形区間を特定してよい。しかしながら、パッチ1に部分的照明環境変化50が発生しているため、画素値が下がっており、図14(a)では検出されたパッチ1‐2‐3及びパッチ5‐6‐1の部分的な線形性が、図17(a)では検出されない。そのため、図17(a)では、画素値の変動の方向が一致する部分的な線形性が2組連続して検出されず、線形区間は特定されない。
また、図17(b)では、カラーチャート2は同色のパッチを2n=8個(n=4対)含んでいる。n=4であるため、制御部101は、画素値の変動の方向が一致する部分的な線形性が3組連続している区間で線形区間を特定してよい。しかしながら、パッチ1に部分的照明環境変化50が発生しているため、画素値が下がっており、図14(b)では検出されたパッチ1‐2‐3及びパッチ7‐8‐1の部分的な線形性が、図17(b)では検出されない。そのため、図17(b)では、画素値の変動の方向が一致する部分的な線形性が3組連続して検出されず、線形区間は特定されない。
<ケース7‐3>
続いて、画像中の同色の複数のパッチのうちの一部のパッチに、部分的照明環境変化50が発生しているケース7−3における線形区間の特定について例示する。
図18は、グラデーションによる画素値の変化において中間の画素値を有するパッチに部分的照明環境変化50が発生している場合を例示する図である。図18(a)では、カラーチャート2は同色のパッチを2n=6個(n=3対)含んでいる。n=3であるため、制御部101は、画素値の変動の方向が一致する部分的な線形性が2組連続している区間で線形区間を特定してよい。図18(a)では、パッチ4‐5‐6、及びパッチ5‐6‐1において画素値の変動の方向が一致する部分的な線形性が2組の連続している。そのため、制御部101は、これらの2組の部分的な線形性の区間:パッチ4‐5‐6‐1において、線形区間を特定してよい。一方、パッチ3に部分的照明環境変化50が発生しており、画素値が下がっているため、図14(a)では検出されたパッチ1‐2‐3及びパッチ2‐3‐4の部分的な線形性が図18(a)では検出されない。そのため、図18(a)では制御部101は1本の線形区間を特定してよい。
また、図18(b)では、カラーチャート2は同色のパッチを2n=8個(n=4対)含んでいる。nは4であるため、制御部101は、画素値の変動の方向が一致する部分的な線形性が3組連続している区間で線形区間を特定してよい。図18(b)では、パッチ5‐6‐7、パッチ6‐7‐8、及びパッチ7‐8‐1において画素値の変動の方向が一致する部分的な線形性が3組連続している。そのため、制御部101は、これらの3組の部分的な線形性の区間:パッチ5‐6‐7‐8‐1において、線形区間を特定してよい。一方、パッチ3に部分的照明環境変化50が発生しており、画素値が下がっているため、図14(b)では検出されたパッチ1‐2‐3、パッチ2‐3‐4、及びパッチ3‐4‐5の部分的な線形性が図18(b)では検出されない。そのため、図18(b)では制御部101は1本の線形区間を特定してよい。
<ケース8>
図19は、グラデーションによる画素値の変化に加えて、同色のパッチのうちの2個以上のパッチに部分的照明環境変化50が発生している場合を例示する図である。図19(a)では、カラーチャート2は同色のパッチを2n=6個(n=3対)含んでいる。n=3であるため、制御部101は、画素値の変動の方向が一致する部分的な線形性が2組連続している区間で線形区間を特定してよい。しかしながら、図19(a)に示す2つの例では、画素値の変動の方向が一致する部分的な線形性が2組連続して検出されないため、制御部101は線形区間がないと判定してよい。なお、別な例として、部分的照明環境変化50がパッチ2とパッチ3に生じている場合には、パッチ4‐5‐6‐1の区間において1本の線形区間が特定されてよい。
また、図19(b)では、カラーチャート2は同色のパッチを2n=8個(n=4対)含んでいる。n=4であるため、制御部101は、画素値の変動の方向が一致する部分的な線形性が3組連続している区間で線形区間を特定してよい。しかしながら、図19(b)に示す2つの例では、画素値の変動の方向が一致する部分的な線形性が3組連続して検出されないため、制御部101は線形区間がないと判定してよい。なお、別な例として、部分的照明環境変化50がパッチ2、及びパッチ4に発生している場合には、パッチ5‐6‐7‐8‐1の区間において1本の線形区間が特定されてよい。
以上のケース5から8で説明したように、カラーチャート2がn対の合計2n個の同色のパッチを含む場合にも、制御部101は線形区間を特定することができる。そして、制御部101は、特定された線形区間の本数から、例えば、部分的照明環境変化50が画像中に発生していることを検出することができる。また、制御部101は、検出された線形区間の重複からケース6で述べた特殊な画素値の変化が発生していることを検出してよい。
図20は、第2の実施例に係るパッチグループ情報2000を例示する図である。パッチグループ情報2000は、例えば、グループ、パッチ数、及びパッチ識別子を含んでいる。グループは、カラーチャート2に配置された各色に対応するグループである。例えば、カラーチャート2に5色のパッチが配置される場合には、5つのグループがパッチグループ情報2000に登録されてよい。パッチ数は、各グループが含む同色のパッチの数を示し、2n個の同色のパッチをカラーチャート2は含んでいる。パッチ識別子には、各グループが含む同色の2n個のパッチに対して割り振られた識別子が登録されている。また、パッチ識別子には、例えば、補正を行う対象である被写体が写る領域の周りに時計周りの順番で、カラーチャート2の同じグループに属する同色の2n個のパッチの識別子が登録されていてよい。例えば、グループaでは、a1、a2、…a2nの順でパッチが並んで登録されており、これは、カラーチャート2において補正を行う対象である被写体が写る領域の周りに時計周りにa1、a2、…a2nの順番でパッチが並んでいることを示していてよい。
続いて、第2の実施例に係る画素値補正処理を説明する。第2の実施例において、例えば、制御部101に画素値補正処理の実行指示が入力された場合、制御部101は、図12に示す画素値補正処理の動作フローを開始してよい。
S1201において制御部101は線形区間特定処理を実行する。なお、第2の実施例においては、制御部101は、図21の線形区間特定処理の動作フローを実行してよい。
図21は、第2の実施例に係る線形区間特定処理の動作フローを例示する図である。図21の線形区間特定処理の動作フローは、例えば、制御部101が記憶部102に格納されているプログラム120を読み出して実行することで実施される。一実施例においては、図12のS1201に進むと、図21の線形区間特定処理は開始する。
S2101において、制御部101は、パラメータ:i、j、k、及びlの値をi=1、j=1、k=0、及びl=0にそれぞれお設定し、パラメータ:i、j、k、及びlを初期化する。S2102において制御部101は、パッチグループ情報2000において同じグループに属するパッチの画素値を画像から取得する。例えば、パッチグループ情報2000のグループaであれば、制御部101は、a1、a2、…a2nのパッチの画素値を取得する。なお、画像に写るカラーチャート2上のパッチからの画素値の取得は、様々な手法を用いて実施されてよい。例えば、カラーチャート2のパッチが配列された面に位置を示すマークが付されている場合には、制御部101は、画像中のマークの位置を基に、カラーチャート2に含まれる各パッチの領域を特定し、パッチの画素値を取得してもよい。或いは別の実施例では、画像に写るカラーチャート2上のパッチからの画素値の取得は、特許文献6に示される手法を利用して実施されてよい。そして、制御部101は、カラーチャート2の対称点30を中心として時計回りに取得されたパッチの画素値:pに、i番目から順に番号を割り振る。例えば、a1、a2、…a2nの画素値が取得された場合には、制御部101は、a1、a2、…a2nのそれぞれのパッチの画素値に対しp1、p2、…及びp2nを割り振る。ここで、例えば、パッチa1の画素値はp1、a2の画素値はp2、…、a2nの画素値はp2nであってよい。
S2103において制御部101は、補正を行う対象である被写体が写る領域の中心を対称点30として、対称点30の周りに例えば時計回りに連続する同色の3つのパッチの画素値pi、pi+1、pi+2に部分的な線形性があるか否かを判定する。制御部101は、例えば、画素値pi、pi+1、pi+2にpi≦pi+1≦pi+2、またはpi≧pi+1≧pi+2の関係が成り立ち、且つ、上述の式A1を満たす場合に、部分的な線形性があると判定してよい。なお、例えば、i+1及びi+2の値がパッチグループ情報2000のパッチ数を超えている場合には、値は1に戻すものとする。即ち、例えば、制御部101は、i=2nの場合に、i+1=2n+1、及びi+2=2n+2は、パッチグループ情報2000のグループ:aのパッチ数:2nを超えている。この場合には、i+1は1に戻し、i+2は2になる。即ち、制御部101は、例えば、S2103においてi=2nの場合には、パッチ識別子a2n、a1、及びa2のパッチの画素値p2n、p1、及びp2に対して部分的な線形性があるか否かを判定する。
部分的な線形性がない場合(S2103がNO)、フローはS2104へと進む。S2104において制御部101は、パラメータ:jの値を0に設定する。S2105において制御部101は、パラメータ:iの値を1増加させる。S2106において制御部101は、パラメータ:iの値が、パッチグループ情報2000のパッチ数:2nと一致するか否かを判定する。パラメータ:iの値がパッチグループ情報2000のパッチ数:2nでない場合(S2106がNO)、フローはS2103へと戻る。一方、パラメータ:iの値がパッチグループ情報2000のパッチ数:2nと一致する場合(S2106がYES)、本動作フローは終了し、フローは図12のS1202へと進む。
一方、S2103において部分的な線形性がある場合(S2103がYES)、フローはS2107へと進む。S2107において制御部101は、パラメータ:jの値が0であるか否かを判定する。パラメータ:jの値が0である場合(S2107がYES)、フローはS2108へと進む。S2108において制御部101は、画素値:piが画素値:pi+1よりも大きいか否かを判定する。画素値:piが画素値:pi+1よりも大きい場合(S2108がYES)、フローはS2109へと進み、制御部101は、k=0に設定し、フローはS2111へと進む。一方、画素値:piが画素値:pi+1以下である場合(S2108がNO)、フローはS2110へと進み、制御部101は、k=1に設定し、フローはS2111へと進む。ここで、パラメータkの値は、0であればS2103で検出された部分的な線形性において画素値の変動の方向が減少であることを示している。また、パラメータkの値が1であれば、S2103で検出された部分的な線形性において画素値の変動の方向が増加であることを示している。S2111において制御部101は、パラメータ:jの値を1増加させ、フローはS2105へと進む。なお、パラメータ:jは図21の動作フローでは、例えば、画素値の変動の方向が同じである部分的な線形性が連続する数をカウントするパラメータとして用いられている。
また、S2107においてパラメータ:jの値が0でない場合(S2107がNO)、フローはS2112へと進む。S2112において制御部101は、画素値:piが画素値:pi+1よりも大きいか否かを判定する。画素値:piが画素値:pi+1よりも大きい場合(S2112がYES)、フローはS2113へと進む。S2113において制御部101はパラメータ:kの値が0か否かを判定する。パラメータ:kの値が0でない場合(S2113がNO)、フローはS2104へと戻る。一方、パラメータ:kの値が0である場合(S2113がYES)、フローはS2115へと進む。
また、S2112において画素値:piが画素値:pi+1以下である場合(S2112がNO)、フローはS2114へと進む。S2114において制御部101はパラメータ:kの値が1か否かを判定する。パラメータ:kの値が1でない場合(S2114がNO)、フローはS2104へと戻る。一方、パラメータ:kの値が1である場合(S2114がYES)、フローはS2115へと進む。S2115において制御部101は、パラメータ:jの値を1増加させ、フローはS2116へと進む。S2116において制御部101は、パラメータ:jの値がn−1であるか否かを判定する。パラメータ:jの値がn−1でない場合(S2116がNO)、フローはS2105へと進む。一方、パラメータ:jの値がn−1である場合(S2116がYES)、フローはS2117へと進む。なお、パラメータ:jの値がn−1である場合、piとpi+2の画素値の大小関係が同じである部分的な線形性が(n−1)組連続して検出されたことを示している。部分的な線形性が3点の連続するパッチで構成される場合、部分的な線形性が(n−1)組連続する区間には、n+1個のパッチが含まれており、これはカラーチャート2において対となる2個のパッチの間の区間に対応している。従って、S2117において、制御部101は、部分的な線形性が(n−1)組連続して検出された区間を、線形区間として特定してよい。なお、S2103において部分的な線形性を検出する長さとして、例えば、4点及び5点などの3点以上の長さを用いる場合には、n+1個のパッチの区間に含まれる連続する部分的な線形性の数が変わる。そのため、S2116の判定に用いる値は、部分的な線形性の長さに応じてn−1から変更されてよい。また、別の例では、S2116の判定において、制御部101は、例えば、j個の連続する部分的な線形性に含まれるパッチの数が、n+1個であるか否かを判定してよい。
S2117において制御部101は、パラメータ:lの値を1増加させ、パラメータ:jの値を0に設定する。続いて、S2118において制御部101は、パッチの線形区間を記憶し、フローはS2105へと戻る。例えば、制御部101は、j=1からj=n−1においてS2103で部分的な線形性がありと判定された(n−1)組の部分的な線形性に含まれるパッチを、線形区間として記憶部102に記憶してよい。
以上で述べたように、図21の動作フローにおいて、制御部101は、例えば、カラーチャート2上に含まれる同色の2n個のパッチから、補正を行う対象である被写体が写る領域の周りに時計回りに3つ連続するパッチを選択する。なお、ここで選択される3つ連続するパッチは、S2105でiの値が1増加する度に、例えば、時計回りに1つずつずれてゆく。そして、制御部101は、選択された3つ連続するパッチに部分的な線形性が有るか否かを判定する(S2103)。部分的な線形性がある場合には、S2107からS2111の処理において、制御部101は、検出された部分的な線形性における画素値の変動の方向をkの値として取得する。そして、S2112からS2116の処理において、制御部101は、kの値として取得された画素値の変動の方向が、iの値を1増加して検出された次の部分的な線形性において一致しているか否かを判定する。そして、画素値の変動の方向が、次の部分的な線形性において一致している場合に、制御部101はjの値を1増加させる。この処理を繰り返すことにより、制御部101は、画素値の変動の方向が同じである部分的な線形性が連続する数を、パラメータ:jの値としてカウントする(S2111及びS2115)。そして、画素値の変動の方向が同じである部分的な線形性が、(n−1)組連続する場合に、制御部101は、その(n−1)組の部分的な線形性が連続する区間を線形区間として特定し、線形区間の本数をlの値でカウントする(S2117)。また、制御部101は特定された線形区間に含まれるパッチを記憶部102に記憶する(S2118)。
従って、制御部101は、カラーチャート2が対称点30から点対称に位置する3対以上の同色のパッチを有する場合にも、図21の第2の実施例に係る線形区間特定処理により線形区間を特定し、線形区間の本数を取得することができる。
そして、続く、図12のS1202以降の処理において、制御部101は、取得した線形区間に基づいて、2n個の同色のパッチのうちでシヌソイド関数に応じた画素値となるパッチを特定することができる。また、一方で、制御部101は、2n個の同色のパッチの画素値から特定された線形区間に基づいて、2n個の同色のパッチのいずれかに部分的照明環境変化50が発生していることを検出することができる。
例えば、S1203において、2本の重複しない線形区間が特定された場合には、制御部101は、2n個の同色のパッチのすべてをシヌソイド関数に応じた画素値となるパッチとして特定できる。また、この場合、制御部101は、2n個の同色のパッチのいずれにも部分的照明環境変化50は発生していないと判定できる。そのため、制御部101は、S1204及びS1205において、2n個の同色のパッチの画素値から代表値を取得し、得られた代表値を基準として用いて画素値の補正を実行することで、被写体が本来持つ画素値を再現することができる。
また、例えば、S1207において、1本の線形区間がある場合には、制御部101は、1本の線形区間に含まれるn+1個の同色のパッチをシヌソイド関数に応じた画素値となるパッチとして特定できる。また、制御部101は、2n個の同色のパッチのうち、1本の線形区間に含まれていない残りの同色のパッチに部分的照明環境変化50が発生しているパッチが含まれていることを検出できる。そのため、制御部101は、部分的照明環境変化50が発生している可能性のある残りのパッチを画素値の補正の際に除くことができる。そして、制御部101は、S1208において、1本の線形区間に含まれるn+1個の同色のパッチの画素値から、代表値を取得し、S1205で、代表値を基準として用いて画像の画素値を補正する。これにより、制御部101は、部分的照明環境変化50が発生しているパッチを画素値の補正において除外して、補正を実行することができる。そのため、被写体が本来持つ画素値を再現することができる。
また更に、例えば、S1207において、線形区間が無い場合には、制御部101は、S1206においてエラー情報を出力することでユーザに再撮影を促すことができる。そして、ユーザは、それにより、画素値の補正に成功する可能性の高い画像が撮像されるまで画像を撮りなおすことができる。結果として、ユーザは、被写体が本来持つ画素値が再現された画像を取得することができる。
なお、S1208において、制御部101は、例えば、検出された1本の線形区間に含まれる連続するn+1のパッチの真中に位置するパッチの画素値を代表値として用いてよい。又は、検出された1本の線形区間に含まれるパッチのうちで両端のパッチは、対を形成しているため、制御部101は、この両端のパッチの画素値の相加平均及び加重平均などの平均値を代表値として用いてもよい。或いは、制御部101は、検出された1本の線形区間に含まれる連続するn+1のパッチの画素値の相加平均及び加重平均などの平均値を代表値として用いてもよい。なお、代表値の算出は、これに限定されるものではなく、例えば、その他の算出法を用いて補正の対象となる被写体が写る領域の中心におけるパッチの画素値を推定し、得られた値を代表値として用いてよい。
また、上記の第1の実施例及び第2の実施例では、被写体が写る領域の周りに時計回り又は反時計回りに連続する同色のパッチの画素値の線形な変動が、式A1により検出されている。しかしながら、実施例はこれに限定されるものではなく、その他の判定手法で、被写体が写る領域の周りに連続する同色のパッチの画素値の線形な変動が検出されてもよい。例えば、別の実施例では、被写体が写る領域の中心を対称点30として、対称点30の周りに存在するパッチからパッチまでの回転角を横軸にとり、また、パッチの画素値を縦軸にとる。この場合に、対称点30の周りに時計回り又は反時計回りに連続するパッチの画素値が所定の誤差範囲内で直線に乗るか否かを判定することで、線形な変動が検出されてもよい。
また更に、上記の第1の実施例及び第2の実施例では、図2に示すカラーチャート1、及び図14から図19に示すカラーチャート2が例として用いられている。しかしながら、第1の実施例及び第2の実施例で利用可能なカラーチャートは、これに限定されるものではない。
例えば、図2で例示したカラーチャート1、及び図14から図19で例示したカラーチャート2では、同色のパッチは被写体が写る領域の周りに等間隔の角度で配置されている。パッチを配置する間隔は、図4(b)のシヌソイド曲線の横軸においてパッチが位置する間隔に対応しているため、極端に偏って配置すると、例えば、式A1を用いた線形区間や部分的な線形性の判定に影響を与える可能性がある。そのため、同色のパッチを被写体が写る領域の周りに等間隔に配置することは好ましい。しかしながら、例えば、式A1を用いた判定で、或いは別の判定手法により被写体が写る領域の周りに連続する同色のパッチから線形な画素値の変動を検出し、線形区間を特定できる範囲であれば、パッチの間隔は任意に変更されてもよい。
また、例えば、図2で例示したカラーチャート1、及び図14から図19で例示したカラーチャート2では、対となる同色のパッチが点対称に配置されている。対となる同色のパッチの点対称の配置は、例えば、対となるパッチの画素値の相加平均によりグラデーションの影響を簡便に除去できることにつながるため、好ましい。しかしながら、対となるパッチは、例えば、補正を行う対象である被写体が写る領域の中心を挟んで両側に異なる距離に配置されてもよい。この場合にも、例えば、被写体が写る領域の中心からのパッチまでの距離に応じて、対となるパッチの画素値に重み付けを行うことで、グラデーションの影響を除去し、被写体が写る領域の中心の位置におけるパッチの画素値は推定できる。
また、上述のように、画像にグラデーションが生じている場合にパッチの画素値がシヌソイド曲線に応じた画素値となることは、画像においてパッチが同心円に配置されていることを想定している。そのため、例えば、被写体が写る領域の中心からのパッチまでの距離が異なるように配置されている場合、パッチの画素値にシヌソイド曲線からのズレが生じる。そのため、同色のパッチのそれぞれが同心円に配置されることは好ましい。しかしながら、例えば、式A1を用いた判定で、或いは別の判定手法により被写体が写る領域の中心の周りに連続する同色のパッチから線形な画素値の変動を検出し、線形区間を特定できる範囲であれば、被写体が写る領域の中心からの距離が異なってパッチが配置されていてもよい。そのため、対となる同色のパッチ同士は、例えば、被写体からの平均距離よりも短い距離でパッチ同士が異なる距離に、カラーチャート上に配置されてもよい。なお、距離の違いは、例えば、配置された同色のパッチの画素値から、上述の式A1を用いた判定で、或いは別の判定手法により線形区間を特定することが可能な範囲となるように設定されてよい。
なお、上述の図21の動作フローにおいて、S2101からS2118までの処理では、画像処理装置100の制御部101は、例えば、特定部111として機能する。
[第3の実施例]
図22及び図23は、第3の実施例を説明する図である。カラーチャートにおいて被写体が写る領域の周りに配置される同色のパッチの数が、ある程度以上の数になると検出されたパッチの画素値から式1で表されるシヌソイド関数の曲線に関する情報を取得することが可能である。そのため、検出されたパッチの画素値に基づいて、例えば式1について信頼性の高いα、β、θ0の値を推定することができる。そして、式1において、βはシヌソイド関数(図4(b))の振動の中心における画素値であるため、βは、画像の画素値の補正において基準として用いることができる。そこで、第3の実施例では、制御部101は、被写体が写る領域の周りに配置されたカラーチャートの同色の複数のパッチの画素値に基づいてβの値を算出し、得られたβの値を基準として用いて画像の画素値の補正を実行する。なお、この推定では、同色のパッチの数は、例えば4点以上であってよく、また、8点以上であることが好ましい。また、第3の実施例において、カラーチャートには、例えば、カラーチャート1及びカラーチャート2などが用いられてよい。
まず、α、β、θ0の値の算出は、以下のように実施されてよい。上述したように図4(a)は、例えば、画像において方向20の向きに徐々に明るくなるようにグラデーションによる照明環境の変化が生じている場合を例示している。この場合に、点Pから半径rの円において、例えば、点41は、θの角度が0度の点とする。また、θ0は、グラデーションの向きを表す方向20までの点41からの回転角とする(即ち、θ0は、グラデーションの向きを表す)。この場合、点Pから半径rの円周上を角度θだけ回転した点の画素値yは、例えば、以下の式1で表すことができる。なお、以下の式1では、θの正の方向は、図4(a)における反時計回りの回転方向とする。また、βは、シヌソイド曲線の振動の中心の値であり、点Pにおける画素値と対応している。
ここで、被写体が写る領域の周りに配置された同色のパッチのインデックスをi(i=1〜n)とし、各パッチの点41からの角度をそれぞれxiと表すと、パッチiの画素値の理論値y’iは式1から以下の式で表すことができる。なお、各パッチのそれぞれの点41からの角度xiは、例えば、表として記憶部102に記憶されていてよい。或いは、別の実施例では、例えば、各パッチが等間隔に配置されている場合には、各パッチの角度xiは、配置の間隔に基づいて算出されてもよい。
ここで、i=mのパッチは、部分的照明環境変化50が発生しているパッチと仮定する。この場合、パッチmの画素値の実測値yiは、理論値y’iと離れた値をとると推定されるが、その他のパッチの画素値の実測値yiは、理論値y’iと近しい値をとることが予測される。そのため、制御部101は、パッチmを除いたその他のパッチの画素値を用いて、α、β、θ0の推定値であるαハット、βハット、及びθ0ハットを、以下の式3の評価関数を最小化する値として算出する。
まず、式3を式2により変形することで、式4が得られる。
なお、式4において、yiは、パッチiの画素値の実測値であるため、画像から取得することができる値である。
式4においてJをβで偏微分して0とおき、βについて解くと以下の式5が得られる。
また、式4においてJをαで偏微分して0とおき、αについて解くと以下の式6が得られる。
式4においてJをθ0で偏微分して0とおくと以下の式7が得られる。
ここで、式7について、制御部101は、反復解法であるニュートン法を用いてθ0ハットの解を求める。ニュートン法では、以下の更新式(式8)に基づいて解が求められる。
なお、式8においてtは、反復回数である。また、式8において:
とする。
式8において:
とする。
なお、式8を用いてθ0ハットを求める際に、αハット、及びβハットが必要になる。そこで、一実施例においては、制御部101は、検出されたインデックス:1〜n(mを除く)のパッチのうちから画素値の最大値と、画素値の最小値とを取得する。そして、制御部101は、(画素値の最大値−画素値の最小値)/2を計算し、αハットの初期値として用いる。また、制御部101は、(画素値の最大値+画素値の最小値)/2を計算し、βハットの初期値として用いる。
式8にてθ0ハットを算出した後、制御部101は、この算出したθ0ハットの値とαハットの初期値とを式5に代入して、βハットを求める。また、制御部101は、得られたβハットとθ0ハットとを用いて、式6からαハットを求める。続いて、式5及び式6から得られたβハット及びαハットの値を用いて、制御部101は、式8により新たなθ0ハットを算出する。以上の処理をθ0ハット、βハット、及びαハットの値が収束するまで繰り返すことで、制御部101は、パラメータ:θ0ハット、βハット、及びαハットを算出することができる。
また、得られたパラメータ:θ0ハット、βハット、及びαハットを用いて、制御部101は、i=mのパッチに、部分的照明環境変化50が発生しているか否かを判定することができる。例えば、i=mのパッチに部分的照明環境変化50が発生している場合、パッチmの画素値の実測値yiは、理論値y’iと離れた値をとると推定される。そこで、制御部101は、得られたパラメータ:θ0ハット、βハット、及びαハットを、以下の式11に代入し、パッチmについて実測値yiと、理論値y’iとの残差Diを導出する。なお、Diはパッチの画素値の実測値の理論値への当てはまりの度合いを表している。
ここで、Diの絶対値が閾値ThD以上であれば、制御部101は、i=mのパッチに部分的照明環境変化50が発生していると判定することができる。一方、Diの絶対値が閾値ThD未満であれば、制御部101は、i=mのパッチに部分的照明環境変化50が発生していないと判定することができる。そのため、部分的照明環境変化50が発生していると仮定するパッチmの位置をパッチ1〜パッチnへと順次移動して、以上の判定を行うことで、制御部101は、部分的照明環境変化50が生じているパッチの位置を特定することができる。また、特定された部分的照明環境変化50が発生しているパッチをmとして除いて算出されたβハットの値は、確からしい値を有すると考えられるため、制御部101は、βハットの値を画像の画素値の補正のための基準として用いることができる。
なお、閾値ThDは、例えば、求めたαハットの値(即ち、振幅)に基づいて設定されてよい。ここで、最適なパラメータを算出するためには、当てはまりを重視し、できるだけ厳しい閾値を用いることが好ましい。そのため、閾値ThDは、例えば、2αの3%〜5%程度の値に設定されてよい。しかしながら、閾値ThDの値は、これに限定されるものではなく、例えば、2αの1%〜15%程度の値に設定されてもよい。閾値ThDの値は、例えば、カラーチャートを用いて画素値の補正を行う場合の照明環境がある程度決まっている場合には、評価環境などで決定した閾値を予め記憶部102に記憶して用いてもよい。
図22は、第3の実施例に係る画素値補正処理を例示する図である。図22の画素値補正処理の動作フローは、例えば、制御部101が記憶部102に格納されているプログラム120を読み出して実行することで実施される。一実施例においては制御部101に画素値補正処理の実行指示が入力されると図22の動作フローは開始してよい。
なお、図22のS2201からS2208の処理は、例えば、図12のS1201からS1208の処理とそれぞれ対応していてよい。即ち、例えば、S2201からS2208の処理において、制御部101は、図12のS1201からS1208の処理と同様の処理を実行してよい。例えば、S2201において制御部101は、線形区間特定処理を実行してよい。そして、制御部101は、S2201において例えば、図13又は図21で例示した線形区間特定処理を実行してよい。
また、図22の動作フローでは、S2207において制御部101は、線形区間の数が1本であるか否か(即ち、パラメータ:l=1)を判定する。そして、線形区間の数が1本でない場合(S2207がNO)、フローはS2209へと進む。S2209において制御部101は、代表値取得処理を実行する。
図23は、第3の実施例に係る代表値取得処理の動作フローを例示する図である。図23の代表値取得処理の動作フローは、例えば、制御部101が記憶部102に格納されているプログラム120を読み出して実行することで実施される。一実施例においては、図22のS2209に進むと、図23の代表値取得処理は開始する。
S2301において制御部101は、カラーチャートに含まれている同色の複数のパッチのうちから、未選択のパッチを1つ選択する。S2302において制御部101は、パラメータ算出処理を実行する。なお、S2301で選択したパッチは上述の部分的照明環境変化50が発生していると仮定するパッチmであり、制御部101は、例えば、その選択したパッチmを除いた他の同色の複数のパッチの画素値を用いて、パラメータ算出処理を実行する。
図24は、実施例に係るパラメータ算出処理の動作フローを例示する図である。図24のパラメータ算出処理の動作フローは、例えば、制御部101が記憶部102に格納されているプログラム120を読み出して実行することで実施される。一実施例においては、図23のS2302に進むと、図24のパラメータ算出処理は開始する。
S2401において制御部101は、αハットの初期値を算出する。制御部101は、例えば、カラーチャートに含まれている同色の複数のパッチのうちから、S2301で選択したパッチmを除いた他のパッチの画素値のうちで画素値の最大値と、画素値の最小値とを取得する。そして、制御部101は、取得した画素値の最大値と、画素値の最小値とから(画素値の最大値−画素値の最小値)/2を計算し、αハットの初期値として用いてよい。S2402において制御部101は、βハットの初期値を算出する。制御部101は、例えば、S2401で取得した画素値の最大値と、画素値の最小値とから(画素値の最大値+画素値の最小値)/2を計算し、βハットの初期値として用いてよい。
S2403において制御部101は、算出されたαハットの初期値と、及びβハットの初期値とを用いて式8が収束するまで反復し、θ0ハットを算出する。S2404において制御部101は、αハットの初期値と、S2403で算出されたθ0ハットとから式5を計算しβハットを算出する。S2405において制御部101は、S2404で算出されたβハットと、S2403で算出されたθ0ハットとから式6を計算しαハットを算出する。
S2406において制御部101は、θ0ハット、αハット、及びβハットが収束したか否かを判定する。例えば、制御部101は、前回S2406の処理を実行した際に得られたθ0ハット、αハット、βハットの値と、今回実行した際に得られたθ0ハット、αハット、βハットの値との差が所定の範囲内であれば、収束したと判定してよい。θ0ハット、αハット、βハットの値が収束していない場合(S2406がNO)、フローはS2403へと戻る。そして、2回目以降のS2403、S2404の処理では、制御部101は、S2406で得られているθ0ハット、αハット、βハットを用いて、処理を実行する。即ち、S2403では制御部101は、前回S2404を実行した際に得られたβハットと、前回S2405を実行した際に得られたαハットを用いて式8が収束するまで反復し、θ0ハットを得る。また、S2404では制御部101は、S2403で得られたθ0ハットと、前回S2405を実行した際に得られたαハットを用いてβハットを得る。
そして、S2406においてθ0ハット、αハット、βハットが収束した場合(S2406がYES)、本動作フローは終了し、フローは図23のS2303へと進む。
S2303において制御部101は、S2302で算出されたパラメータ:θ0ハット、αハット、及びβハットと、S2301で選択したパッチの画素値とを用いて、式11を計算し、Diを算出する。S2304において制御部101は、Diの絶対値が閾値ThD以上か否かを判定する。Diの絶対値が閾値ThD以上であれば(S2304がYES)、フローはS2306へと進む。なお、この場合、S2301で選択されたパッチは、部分的照明環境変化50が発生しているパッチと推定される。また、そのような部分的照明環境変化50が発生しているパッチを除いてS2302で算出されているパラメータ:θ0ハット、αハット、βハットは、確からしい値を有する。
続いて、S2306において制御部101は、S2302で算出されたβハットの値を、カラーチャートに含まれている同色の複数のパッチの画素値を代表する代表値として取得する。S2306で代表値を取得すると、本動作フローは終了し、フローは図22のS2205へと進み、制御部101は、特定された代表値を用いて画像の画素値を補正する。
一方、Diの絶対値が閾値ThD未満であれば(S2304がNO)、フローはS2305へと進む。なお、S2304において、Diの絶対値が閾値ThD未満である場合は、S2301で選択されたパッチが式1のシヌソイド関数に応じた画素値となるパッチであることを示している。S2305において制御部101は、カラーチャートに含まれている同色の複数のパッチのすべてを選択したか否かを判定する。すべてのパッチが選択されていない場合(S2305がNO)、フローはS2301に戻り、制御部101は、未選択の別のパッチを選択して処理を繰り返す。
一方、すべてのパッチが選択されている場合(S2305がYES)、フローはS2306へと進む。なお、すべてのパッチが選択されている場合は、S2304で部分的照明環境変化50が発生していると推定されるパッチが無かったことを示している。この場合には、S2306で、制御部101は、得られているパラメータのβを代表値として取得して、以降の処理を実行してもよい。或いは、別の例では、制御部101は、すべてのパッチの画素値を平均化することで代表値を算出してもよい。また、更に別の例では、例えば、S2207においてNOと判定されており線形区間が無いにも関わらず、S2304で部分的照明環境変化50が発生していると推定されるパッチを特定できなかった場合には、信頼できるβが得られていない可能性がある。そのため、すべてのパッチが選択されている場合(S2305がYES)、フローはS2206へと進められてもよい。
以上で述べたように、第3の実施例では、制御部101は、同色の複数のパッチの画素値に基づいて、図4(b)のシヌソイド関数の振動の中心における画素値:βを算出し、その値を被写体の画素値の補正の基準として用いる。そのため、例えば、図7、図8、図16、及び図17を参照して述べた、グラデーションにおいて画素値が最も高い又は低い位置に部分的照明環境変化50が発生している場合についても、画素値の補正で、被写体が本来持つ画素値を再現することができる。
なお、上記の例では、S2301において、制御部101は、部分的照明環境変化50が発生していると仮定するパッチmとして、すべての同色のパッチのうちから選択を行っている。しかしながら、例えば、図21の線形区間特定処理のS2103において部分的な線形性がありと判定されているパッチについては、部分的照明環境変化50が発生していない可能性が高い。そのため、S2103において部分的な線形性がありと判定されているパッチは、S2301で選択する対象から除いてもよい。例えば、図16(a)におけるパッチ1、2、3、5、及び6、並びに図16(b)におけるパッチ1、2、3、4、6、7、及び8は、部分的な線形性がありと判定されているため、S2301で選択する対象から除いてもよい。そして、例えば、図16(a)におけるパッチ4、及び図16(b)におけるパッチ5のように部分的な線形性が検出されなかったパッチを、制御部101はS2301において選択し、以降のS2302の処理を実行してもよい。この様にすることで、代表値取得処理の演算負荷を低減することができる。
なお、以上の図22の動作フローにおいて、S2201からS2203、S2206、及びS2207の処理では、画像処理装置100の制御部101は、例えば、特定部111として機能する。また、S2204、S2205及びS2208の処理では、画像処理装置100の制御部101は、例えば、補正部112として機能する。S2209の処理では、画像処理装置100の制御部101は、例えば、特定部111又は補正部112として機能する。
また、図23の動作フローにおいて、S2301、S2303、S2304、及びS2305の処理では、画像処理装置100の制御部101は、例えば、特定部111として機能する。また、S2302、及びS2306の処理では、画像処理装置100の制御部101は、例えば、補正部112として機能する。
また、図24の動作フローにおいて、S2401からS2406の処理では、画像処理装置100の制御部101は、例えば、補正部112として機能する。
[第4の実施例]
図19に例示されるように、カラーチャート上の同色の複数のパッチのうちの1個以上のパッチに部分的照明環境変化50が発生している場合がある。そこで、第4の実施例は、カラーチャート上の同色の複数のパッチのうちの1個以上のパッチに、部分的照明環境変化50が発生している場合にも代表値の取得を可能とする。
カラーチャート上の同色の複数のパッチのうちの1個以上のパッチに部分的照明環境変化50が発生している状況でβの値を算出する手法として、例えば、RANSAC(Random Sample Consensus)法が利用できる。RANSAC法が利用される場合、制御部101は、例えば、カラーチャート上の同色の複数のパッチの画素値のうち、いくつかだけを用いてパラメータ:α、β、θ0を求める。そして、制御部101は、カラーチャート上の同色の複数のパッチのうちで、求めたパラメータに従う画素値を持つパッチが最も多いパラメータを、パラメータの推定値として特定する。
図25は、第4の実施例に係る代表値取得処理の動作フローを例示する図である。図25の代表値取得処理の動作フローは、例えば、制御部101が記憶部102に格納されているプログラム120を読み出して実行することで実施される。一実施例においては、図22のS2209に進むと、図25の代表値取得処理は開始する。
S2501において制御部101は、反復パラメータ:kの値を0に設定し、反復パラメータ:kを初期化する。S2502において制御部101は、計数パラメータ:Wmaxの値を0に設定し、計数パラメータ:Wmaxを初期化する。S2503において制御部101は、カラーチャート上の同色の複数のパッチのうちからパッチをM個ランダムに選択する。なお、Mは、例えば3以上の整数である。
S2504において制御部101は、S2503でランダムに選択したM個のパッチを用いてパラメータ算出処理を実行する。制御部101は、例えば、図24に示すパラメータ算出処理を実行し、パラメータ:θ0ハット、αハット、βハットの値を算出してよい。なお、図24に示すパラメータ算出処理では、上記式5〜式10が用いられる。ここで、式5〜式10ではi≠mとしており、パッチmが除外されている。しかしながら、第4の実施例では、S2503で選択されなかったパッチが除外されるパッチとなり、パラメータの算出はS2503で選択されたM個のパッチのすべてを用いて行う。そのため、S2504で実行するパラメータ算出処理では、式5〜式10のi≠mの記載によるパッチmの除外は無いものとする。
S2505において制御部101は、式11を用いて、算出したパラメータ:θ0ハット、αハット、βハットに従うパッチの数をカウントし、カウントされた数をWとする。例えば、制御部101は、算出したパラメータ:θ0ハット、αハット、βハットを式11に代入する。そして、制御部101は、カラーチャート上の同色の複数のパッチのそれぞれの画像中の画素値を用いて式11によりDiを算出し、Diの絶対値が閾値ThD未満である場合に、パラメータに従うパッチとしてカウントし、カウントされた数をWとする。
S2506において制御部101は、WがWmaxよりも大きいか否かを判定する。WがWmax以下である場合(S2506がNO)、フローはS2508へと進む。一方、WがWmaxよりも大きい場合(S2506がYES)、フローはS2507へと進む。S2507において制御部101は、WmaxにWの値を設定し、また、S2505においてパラメータに従うパッチと、S2504で算出されたパラメータ:βの値とを記憶部102に記憶する。S2508において制御部101は反復パラメータ:kの値を1増加させる。続いて、S2509において制御部101は、反復パラメータ:kの値がKmaxよりも小さいか否かを判定する。反復パラメータ:kがKmaxよりも小さい場合(S2509がYES)、フローは2503へと戻り、制御部101は新たにパッチをM個ランダムに選択して処理を繰り返す。一方、反復パラメータ:kがKmax以上である場合(S2509がNO)、フローは2510へと進む。なお、Kmaxは、RANSAC法における繰り返し回数である。Kmaxの値は、カラーチャートが含む同色のパッチの数と、S2503でランダムに選択するパッチの数とに基づいて設定されてよく、例えば数百回から数万回の値が設定されてよい。一例として、カラーチャートが同色のパッチを10個含み、同色のパッチのうちからS2503においてランダムに4個のパッチを選択する場合には、組み合わせの数が10×9×8×7=5040≒5,000となる。そのため、5000回がKmaxに設定されてよい。
S2510において制御部101は、Wmaxに設定されているWの値がS2505で得られた際のβの値を記憶部102から読み出し、カラーチャートに含まれている同色の複数のパッチの画素値を代表する代表値として取得する。なお、Wmaxに設定されているWの値がS2505で得られた際のパラメータに従うパッチは、式1のシヌソイド関数に応じた画素値となるパッチである。βの値を代表値として取得すると、本動作フローは終了し、フローは図22のS2205へと進み、制御部101は、取得された代表値を用いて画像の画素値の補正を実行する。
以上で述べたように、第4の実施例では、例えば、図19に示す様にカラーチャートに含まれる同色の複数のパッチのうちの1つ以上のパッチに部分的照明環境変化50が発生している場合にもβの値が算出できる。そのため、カラーチャートに含まれている同色の複数のパッチの画素値を代表する代表値を得ることができる。従って、例えば、部分的照明環境変化50の発生により線形区間が検出されない場合にも、得られた代表値を用いて画像の同色のパッチ間の画素値を補正することができる。それにより、被写体が本来持つ画素値を再現することができる。
以上の図25の動作フローにおいて、S2501からS2503、S2505からS2509の処理では、画像処理装置100の制御部101は、例えば、特定部111として機能する。また、S2504及びS2510の処理では、画像処理装置100の制御部101は、例えば、補正部112として機能する。
なお、以上の第3及び第4の実施例では、S2207でNOと判定され、線形区間が特定されなかった場合に、制御部101が代表値取得処理を実行する例を述べた。しかしながら、実施例はこれに限定されるものではなく、例えば、線形区間が1本及び2本特定されるような場合でも、代表値取得処理により代表値を得ることができる。そのため、第3及び第4の実施例の変形例に係る画素値補正処理として、制御部101は、図26の動作フローを実行してもよい。
図26は、変形例に係る画素値補正処理の動作フローを例示する図である。図26の画素値補正処理の動作フローは、例えば、制御部101が記憶部102に格納されているプログラム120を読み出して実行することで実施される。一実施例においては、制御部101に画素値補正処理の実行指示が入力されると図26の動作フローは開始する。
S2601において、制御部101は、代表値取得処理を実行する。例えば、制御部101は、S2601において、図23又は図25の代表値取得処理を実行し、シヌソイド関数(図4(b))の振動の中心における画素値であるβを、カラーチャートに含まれている同色の複数のパッチの画素値を代表する代表値として取得する。S2602において、制御部101は、取得された代表値を用いて画像の画素値の補正を実行し、本動作フローは終了する。
なお、図26の動作フローにおいて、S2601の処理では、画像処理装置100の制御部101は、例えば、特定部111又は補正部112として機能する。また、S2602の処理では、画像処理装置100の制御部101は、例えば、補正部112として機能する。
以上の変形例に係る画素値補正処理によれば、制御部101は、例えば、上述のケース1、ケース3〜5、ケース7〜8のいずれのケースにおいても、カラーチャートに含まれている同色の複数のパッチの画素値を代表する代表値を得ることができる。従って、制御部101は、得られた代表値を用いて画素値の補正を実行でき、被写体が本来持つ画素値を再現することができる。
また、上述の第3及び第4の実施例及びその変形例において代表値として用いられるβが得られた際に、式11を用いた判定でDiの絶対値が閾値ThD未満であると判定されたパッチは、シヌソイド関数に応じた画素値となるパッチとみなすことができる。従って、制御部101は、カラーチャートに含まれる同色の複数のパッチのうちから、グラデーション以外の不均一な照明環境変化の影響を受けていないパッチを特定できる。また、一方で、代表値として用いられるβが得られた際に、S2304又はS2505における式11を用いた判定で、Diの絶対値が閾値ThD以上と判定されたパッチは、部分的照明環境変化50が発生しているパッチとみなすことができる。従って、制御部101は、画像中の同色の複数のパッチの画素値から部分的照明環境変化50が発生していることを検出でき、且つ、部分的照明環境変化50が発生しているパッチを特定することができる。
また、上記の第3の実施例及び第4の実施例は、図2に示すカラーチャート1、及び図14から図19に示すカラーチャート2を例として用いて説明した。しかしながら、カラーチャートは、これに限定されるものではない。
例えば、第3及び第4の実施例の変形例では、カラーチャート1及びカラーチャート2を含む第1及び第2の実施例で利用可能なカラーチャートが用いられてよい。また、更には、おおよそ同心円状に同色のパッチが配置されているカラーチャートであれば、シヌソイド関数に関する情報がパッチの配置から得られるので、実施例において用いることができる。従って、第3及び第4の実施例の変形例では、例えば、パッチと被写体までの距離の違いが、対となるパッチ同士の被写体からの平均距離よりも短い距離以内となるように同色のパッチが配置されているカラーチャートが用いられてよい。なお、距離の違いは、例えば、上述の式11における閾値ThDに設定される値との関係で、式11により画素値がシヌソイド関数に応じた画素値となるパッチであるか否かを判定することが可能な範囲となるように設定されてよい。
また更に、上述の第3及び第4の実施例、及びその変形例においては、式1に記載されるシヌソイド関数が例として用いられている。しかしながら、第3及び第4の実施例、及びその変形例で利用可能な関数はこれに限定されるものではない。例えば、グラデーションに起因する位置に応じた画素値の変動を表すシヌソイド関数であれば、サイン関数などを用いて表した式が用いられてもよい。また、同様に、例えば、グラデーションに起因する位置に応じた画素値の変動を表す関数であれば、画像中の楕円形状又は六角形状上の位置に応じた画素値の変動を表す関数等のその他の関数が用いられてよい。この場合には、用いる関数に応じて、上述の式2から式11の代替となる数式を導出し、第3及び第4の実施例、及びその変形例が実施されてよい。また、この場合、用いる関数が表す形状に沿うように複数のパッチが配置されたカラーチャートが用いられてよい。
以上で述べたように、いくつかの実施例によれば、例えば、画像において複数の同色のパッチの一部に部分的照明環境変化50が発生している場合に、制御部101は、その発生を検出することができる。また更に、いくつかの実施例によれば、例えば、画像中の複数の同色のパッチの一部に部分的照明環境変化50が発生している場合に、制御部101は、部分的照明環境変化50が発生しているパッチを除外して、画像の画素値の補正を実行することができる。それにより、例えば、画像において複数の同色のパッチの一部に部分的照明環境変化50が発生している場合にも、制御部101は、画像の画素値の補正により、被写体の本来の画素値を再現することができる。また、いくつかの実施例によれば、例えば、画像において複数の同色のパッチの一部に部分的照明環境変化50が発生している場合に、制御部101は、部分的照明環境変化50が発生しているパッチを特定することができる。
なお、上述の実施例において、画素値は、例えば、輝度値、及び色値であってよい。色値は、例えば、色空間における各色成分の値であってよく、原色を赤、緑、青とするRGB空間を用いる場合には、画素値は、例えば赤、緑、及び青のそれぞれの成分の値であってよい。また、上述のいくつかの実施例において、例えば、色値を用いる場合には、制御部101は、色空間の成分となる色のいずれかを用いていくつかの実施例に係る処理を実行してもよい。或いは、制御部101は、色空間の成分となる複数の色を用いていくつかの実施例に係る処理を実行してもよい。
また、上述の実施例において、画像の画素値の補正で基準として用いる代表値の算出についていくつかの例が述べられた。しかしながら、代表値の算出はこれらに限定されるものではない。例えば、グラデーションに起因する位置に応じた画素値の変動を表す関数に応じた画素値となる同色のパッチから、画像中の被写体の位置におけるパッチの画素値を推定できれば、その他の手法が用いられてもよい。例えば、上述の第3及び第4の実施例、及びその変形例においては、同色のパッチに部分的照明環境変化50が発生している場合、そのパッチが特定される。そこで、βを用いる代わりに、例えば、部分的照明環境変化50が発生しているパッチと、そのパッチと対になるパッチの画素値を除いた残りのパッチの画素値を平均し、代表値が算出されてもよい。また更に、上記の第3及び第4の実施例並びに変形例では、算出されたβの値を代表値として用いる場合を例示したが、実施例はこれに限定されるものではない。一実施例においては、制御部101は、算出されたβに基づいて得られるβとは異なる値を代表値として用いてもよい。即ち、例えば、制御部101は、シヌソイド関数の振動の中心(β)の画素値を算出し、振動の中心の画素値に基づいて画像の画素値を補正してよい。
また、上述の例えば図12、図13、図21、図22、図23、図24、図25及び図26の動作フローは例示であり、実施例はこれに限定されるものではない。例えば、可能な場合には、動作フローは処理の順番を変更して実行してもよく、別に更なる処理を含んでいてもよく、又は、一部の処理が省略されてもよい。例えば、別の実施例においては、図13のS1304とS1305の処理は、任意に順序を入れ替えて実行されてもよい。また、図21のS2117とS2118の処理は、任意に順序を入れ替えて実行されてもよい。図24のS2404とS2405の処理は、任意に順序を入れ替えて実行されてもよい。図25のS2501とS2502の処理は、任意に順序を入れ替えて実行されてもよい。
図27は、一実施例に係る画像処理装置100を実現するためのコンピュータ2700のハードウェア構成を例示する図である。図27のコンピュータ2700は、例えば、プロセッサ2701、メモリ2702、記憶装置2703、読取装置2704、通信インタフェース2706、及び入出力装置2707を備える。なお、プロセッサ2701、メモリ2702、記憶装置2703、読取装置2704、通信インタフェース2706、入出力装置2707は、例えば、バス2708を介して互いに接続されている。
プロセッサ2701は、メモリ2702を利用して例えば上述の動作フローの手順を記述したプログラム120を実行することにより、上述した各機能部の一部又は全部の機能を提供する。例えば、画像処理装置100の制御部101は、プロセッサ2701であり、また、記憶部102は、例えばメモリ2702、記憶装置2703、及び着脱可能記憶媒体2705を含んでいる。プロセッサ2701は、例えば、記憶装置2703からプログラム120を読み出して実行することで、特定部111及び補正部112として機能してよい。記憶装置2703は、例えば、プログラム120及びパッチグループ情報1100,2000などの情報を格納していてよい。
メモリ2702は、例えば半導体メモリであり、RAM領域及びROM領域を含んで構成される。なお、RAMは、Random Access Memoryの略称である。また、ROMは、Read Only Memoryの略称である。記憶装置2703は、例えばハードディスク、フラッシュメモリ等の半導体メモリ、又は外部記憶装置である。
読取装置2704は、プロセッサ2701の指示に従って着脱可能記憶媒体2705にアクセスする。着脱可能記憶媒体2705は、例えば、半導体デバイス(USBメモリ、SDメモリカード等)、磁気的作用により情報が入出力される媒体(磁気ディスク等)、及び光学的作用により情報が入出力される媒体(CD‐ROM、DVD等)などにより実現される。なお、USBは、Universal Serial Busの略称である。CDは、Compact Discの略称である。DVDは、Digital Versatile Diskの略称である。
通信インタフェース2706は、例えば、無線LAN通信機器、NFC通信機器、赤外線通信機器などの通信機器であってよい。なお、LANは、Local Area Networkの略称である。通信インタフェース2706は、例えば、プロセッサ2701の指示に従ってネットワーク2720を介してデータを送受信してよい。入出力装置2707は、例えばユーザからの指示を受け付ける入力キー、及びタッチパネルなどのデバイス、或いは画像データを入力する撮像装置であってよい。撮像装置は、例えば、CCD(Charge Coupled Device)やCMOS(Complementary Metal Oxide Semiconductor)などを用いたカメラであってよい。また、入出力装置2707は、例えばディスプレーなどの表示装置、及びスピーカなどの音声装置などであってよい。また、例えば、カラーチャートが写る画像は、撮像装置などの入出力装置2707から入力されてよい。或いは、カラーチャートが写る画像は、記憶装置2703に記憶されていてもよいし、ネットワーク2720及び着脱可能記憶媒体2705を介して取得されてもよい。
実施例に係る各プログラムは、例えば、下記の形態で画像処理装置100に提供される。
(1)記憶装置2703に予めインストールされている。
(2)着脱可能記憶媒体2705により提供される。
(3)プログラムサーバなどのサーバ2730から提供される。
以上で述べた実施例を含むいくつかの実施例は、上述の実施例の各種変形形態及び代替形態を包含するものとして当業者には理解される。例えば、各種実施例は、構成要素を変形して具体化されてよい。また、上述した実施例に開示されている複数の構成要素を適宜組み合わせることにより、種々の実施例が実施されてよい。更には、実施例に示される全構成要素からいくつかの構成要素を削除して又は置換して、或いは実施例に示される構成要素にいくつかの構成要素を追加して種々の実施例が実施されてよい。