以下、本発明に係る画像内の陰影部を補正可能なプログラム及び陰影部補正方法の実施の形態を図面を参照して詳細に説明する。
図1は、本発明に係る画像の陰影部を補正可能な装置の一つの実施形態の概略ブロック図である。符号1は、上記装置の一つの実施の形態の全体を指す。本装置1は、例えばパソコン又はワークステーションにより実現される処理装置10と、メインメモリとして使用されるRAM(ランダムアクセスメモリ)(図示せず)及び磁気ディスク記憶装置のような補助記憶装置(図示せず)とを含む記憶装置20と、入出力装置30とを備えている。入出力装置30は、キーボード及びマウス等のポインティングデバイスを含む入力装置31と、CRTディスプレイ装置等の表示装置32又はプリンタ33などの出力装置を備えている。入力装置31はパラメータの入力やコマンドの起動などに使われる。表示装置32又はプリンタ33は、陰影部輝度の補正対象とする画像あるいは当該画像から生成された陰影部を補正した画像などの表示又は印字に使われる。記憶装置20内にデータが記憶されるときに、当該データが図示しないRAMと図示しない補助記憶装置のいずれに記憶されるかは、あらかじめ当該データ毎に決められている。
処理装置10には、画像の陰影部の輝度を補正可能なプログラム40が組み込まれている。プログラム40は、陰影部領域検出部100と、領域分割部200と、陰影部ヒストグラム検出部300と、目標ヒストグラム生成部400と、輝度変換部500というモジュールを含む。陰影部領域検出部100は、2値化部110とノイズ除去部120というモジュールを含む。目標ヒストグラム生成部400は、中央領域決定部410と、中央領域拡大部420と、上下側領域拡大部430というモジュールを含む。輝度変換部500は、輝度変換データ生成部600と、輝度変換実行部700というモジュールを含む。
記憶装置20には、あらかじめ画像データ21が記憶され、この画像データ21をプログラム40により処理して、2値画像データ22と、陰影領域データ23と、領域分割データ24と、実ヒストグラムデータ25と、目標ヒストグラムデータ26と、輝度変換データ27と、輝度補正後画像データ28が生成され、記憶装置20に格納される。以下では断らない限り、画像データ21は、白黒の多値画像(グレイスケール画像)のデータであると仮定する。
より具体的には、本実施の形態では、陰影部を含む画像の例として、例えば人工衛星や航空機等の高度飛翔体から地表を撮影して得られた地理画像が使用される。プログラム40は、当該画像を表す画像データ21に基づいて、当該画像内の陰影部を含む陰影部領域を検出して陰影部領域データ23を生成し、当該画像を複数のブロックに分割して領域分割データ24を生成し、上記陰影部領域の一部を含む一群のブロックの各々について、そのブロック内の陰影部部分領域に含まれる複数の画素の輝度に関する実ヒストグラムデータ25を検出し、その実ヒストグラムデータ25から、コントラストが改善された目標とする目標ヒストグラムデータ26を決定し、目標ヒストグラムデータに基づいて、当該陰影部部分領域の前記複数の画素の輝度を変換するための輝度変換データ27を、前記検出された実ヒストグラムデータ25と前記決定された目標ヒストグラムデータ26とに依存して生成し、前記陰影部領域内の前記複数の画素の輝度を前記生成された輝度変換データ27に基づいて変換して、陰影部のコントラストが改善された、陰影部輝度補正後画像の画像データ28が生成される。
処理装置10は、プログラム40内のそれぞれのモジュールが実行されたときに、陰影部領域を検出する機能ブロック、画像を複数のブロックに領域分割する機能ブロック、陰影部のヒストグラムを検出する機能ブロックと、目標ヒストグラムを生成する機能ブロックと、陰影部の輝度を変換する機能ブロックという複数の機能ブロックとしてコンピュータを動作させる。したがって、処理装置10とプログラム40のこれらのモジュールにより、それぞれのモジュールに対応する複数の機能ブロックが実現されることになる。したがって、処理装置10と、記憶装置20と、入出力装置30と、陰影部領域検出部100、領域分割部200、陰影部ヒストグラム検出部300、目標ヒストグラム生成部400、輝度変換部500は、本発明に係る、画像の陰影部の輝度を補正可能な装置の一つの実施の形態を実現することになる。
プログラム40は、本発明に係る、画像の陰影部輝度を補正可能なプログラムの一つの実施の形態を実現するものであり、記録媒体に記録してあるいはネットワークを介して記憶装置20に記憶され処理装置10で実行される。プログラム40は、記録媒体に記録されて又はネットワークを介して販売可能である。処理装置10が画像の陰影部輝度を補正可能なプログラム40を実行して画像の陰影部輝度を補正する手順は、本発明に係る画像の陰影部輝度補正方法の一つの実施の形態を実現する。
図2は、地理画像の一例を模式的に示す図である。図には、ビルA(211)、ビルB(212)、ビルC(213)が存在し、複数の箇所に道路214が存在し、複数の車215が存在している。図では画面右上方から太陽光が照射され、ビルA(211)の影221、B(212)の影222、C(213)の影223ができ、雲の影224もできている。
非常に広範囲に陰影部が存在している。それぞれのビルの壁面は、太陽光が当たらない陰部分となっている。例えばビルC(213)には、ビルAの影221が投影されており、ビルCの下方部の地面には、ビルCの影223も重畳して投影されている。ビルB(212)には、ビルA(211)の影221と雲の影224が重なって投影され、更に、ビルBの下方部の地面には、更にビルBの影222も重畳されている。このため、このビルBの下方部の地面は非常に濃度が濃くなっており、その部分の画像は識別しにくい。ビルBの壁面も同様に識別しにくい。一方、ビルCの壁面及びその下方部の地面の濃度はそれほど濃くない。一方、陰影部でないところでは、太陽光が直接照射されているので、非常に濃度が低く、画像全体としては、濃度の範囲は非常に広く、陰影部が非常にコントラストが低い状態にあり、陰影部の視認性が低いことが分かる。
従来、画像のコントラストを改良する方法として、線形変換あるいは輝度ヒストグラムの平坦化という手法が知られている(例えば、非特許文献2参照)。
図16は従来技術による線形変換とその問題点を説明するための図である。線形変換は、同(a)に示すように、輝度のヒストグラムの輝度の範囲[a+1,b-1]を輝度の範囲[a',b']に変換することで輝度のコントラストを拡大する手法である。任意の画素の輝度i(a+1≦i≦b-1)が輝度i'(a'≦i'≦b')に変換される。例えば、同図(b)のヒストグラムに示すように、画像の輝度の範囲が実質的に輝度の範囲[a+1,b-1]内である場合、a'=0、b'=MAX(最高の輝度)のときは、変換後の輝度の範囲[a',b']は、同図(c)のヒストグラムに示すように、輝度の最大の範囲[0,MAX]となりコントラストが改善される。
図17(a)は、図2のように、陰影部と明るい非陰影部を含む画像に対するヒストグラムの例を模式的に示す図であり、同図(b)は、このヒストグラムに対して線形変換をした結果得られるヒストグラムの例を模式的に示す図である。図17(a)から分かるように、図2に例示したような画像では、陰影部の輝度の最小値a+1も画像が取りうる輝度の最小値0に近く、かつ非陰影部の輝度の最大値b−1も、画像が取りうる輝度の最大輝度MAXに近い。このような画像に線形変換を施しても、得られるヒストグラムの輝度の範囲は、図17(b)に示すように、同図(a)に示した元の輝度の分布範囲に比べてそれほど大きくは拡大されない。したがって、図2のような画像に対しては、従来の線形変換では、コントラストの改善は難しい。
また、ダイナミックレンジの拡大のために、線形変換する輝度の範囲[a+1,b-1]を図17(a)内の画素が存在する輝度の範囲内の一部の範囲に制限して、その範囲内の画素のみの輝度を輝度の最大の範囲[0,MAX]に変換することも考えられるが、この場合には、輝度iがi≦a+1となる輝度の画素は処理後に輝度が0となり、つぶれという現象が起きる。また、b-1≦iとなる輝度の画素は処理後に輝度がMAXとなり、白とびという現象が起きる。白とびやつぶれが起きるとその部分の情報が失われるという問題がある。
更に、従来技術によるヒストグラムの平坦化では、得られる画像は、コントラストが強すぎ、ノイズも多く発生して、見にくい画像になってしまう。
本発明では、図2のような画像に含まれたコントラストが低い陰影部の視認性を向上するために、陰影部が存在する陰影部領域を検出して、その陰影部領域にある画素に対して輝度を補正する処理を施す。なお、非陰影部領域内の画素の輝度の分布も場所により大きく異なるので、本実施の形態では、画像を複数のブロックに分割し、各ブロック内の陰影部領域部分ごとに陰影部の輝度補正を施す方法を採る。しかし、画像によっては、ブロックに分割しなくてもよい場合もある。
図1において、プログラム40は、起動されると、まず、陰影部領域検出部100を実行する。陰影部領域検出部100は、まず、2値化部110を起動する。2値化部110は、図16(a)に例示したように、陰影部に属する画素の輝度が値1になり、非陰影部の画素の輝度が値0となるように、画像データ21を適当な閾値を用いて2値化して2値画像データ22に変換する。2値化部110での2値化処理には、モード法、判別分析法、Pタイル法、微分ヒストグラム法などの種々の周知技術を適用可能である。どの方法で2値化を行うのが適切であるかは対象画像によって異なるので、画像に合わせて適切な方法を選択すればよい。
なお、Pタイル法は、抽出すべき対象図形の面積、あるいは面積の全体に対する割合があらかじめ予測できる場合に使用する。モード法は、絵柄領域と背景領域とからなる画像の場合、輝度のヒストグラムが2つの山をもつことが多いことを利用し、輝度のヒストグラムの谷の値を輪郭に相当する閾値として決定する手法である。微分ヒストグラム法は、輝度のヒストグラムの形が急変する部分を利用して閾値を決定する手法である。判別分析法は、ある値ftにて画像全体の輝度のヒストグラムを2つのクラス(級)に分けた場合、級間分散÷(クラス1の級内分散+クラス2の級内分散)の算出結果が最大となるときのftをしきい値として決定する手法である。なお、一般的には判別分析法を用いると陰影部と非陰影部を区分しやすい。本実施の形態でも判別分析法を使用した。
図3(a)は、2値化部110により図2に示す図から生成された2値画像を模式的に示す図である。2値化部110の処理により単に閾値で2値化して陰影部領域を検出しようとすると、非常に小さな領域までも検出してしまい、この領域がノイズとなり見にくい画像となってしまう。例えば、この図に示すように、道路の境界線あるいはビルCの屋上の境界線の一部というような細い線あるいは自動車というような小さな画像も検出されている。このような画像部分は、元の地理画像中の、陰影部以外の明るい領域に存在した部分的に暗い部分である。これらは、陰影部を示す画像ではなく、陰影部から見るとノイズである。更に、陰影部分内に明るい小さな物体が存在したときに、明るい小さな画像が検出されることがある。このような画像も本来は陰影部として検出されるべきノイズ部分である。あるいは陰影部の境界がギザギザになる場合もある。
ノイズ除去部120は、このような、陰影部ではないと考えられる、黒い小さい画像、細い線、あるいは逆に陰影部として検出されるべき明るい小さい画像あるいは輪郭のギザギザ等をノイズとして除去する。ノイズ除去には、膨張収縮処理やラベリング処理による小面積除去処理などが知られている(例えば、非特許文献2参照。)。
図4は、ノイズ除去部120の処理の一例を示す概略フローチャートである。まず、2値画像データ22を読み込み(ステップS121)、膨張収縮回数α、小面積サイズβを利用者により入力装置から入力させる(ステップS122)。つぎに膨張→収縮→収縮→膨張の順番でそれぞれ1画素分ずつα回行う。すなわち、α回膨張処理(ステップS123)、α回収縮処理(ステップS124)、α回収縮処理(ステップS125) α回膨張処理(ステップS126)を実行する。以上の処理を行うことで2値画像データ22から、ノイズとなる細長い黒色又は白色の領域が消え、また、ギザギザの輪郭が滑らかな輪郭になる。つぎに、面積がβ以下の領域を除去するための処理を行い微小領域を除去する。すなわち、β以下のサイズの黒領域を白領域に変換し(ステップS127)、β以下の白領域を黒領域に変換する(ステップS128)。本実施の形態では、黒領域を白領域に変換する処理(ステップS127)→白領域を黒領域に変換する処理(ステップS128)の順番で行ったが、順番を逆にしてもよい。以上の処理結果を陰影領域データ23として記憶装置20に保存する(ステップS129)。
陰影領域データ23は、陰影部が存在する領域内の画素の輝度値が1であり、他の画素の輝度値は0である画像データである。この画像データの各画素は、画像データ21の一つの画素に対応していて、画像データ21内の対応する画素が陰影部領域内に位置しているか否かを示すことになる。
図3(b)は、ノイズ除去部120の処理の後に得られる陰影領域データ23が表す、陰影部が存在する領域の例を示す図である。黒色で示された領域が、その領域である。図から分かるように、ビルなどの比較的大きな陰影部だけが示され、図3(a)に含まれたノイズ部分は、除去されている。こうして、ノイズ除去部120の処理が終了し、陰影部領域検出部100の処理が終了する。
本発明では、陰影部のダイナミックレンジを拡げるために陰影部に対して輝度補正を行う。輝度補正を行うのは、図2の画像のうち、図3(b)の黒色で示された陰影部領域に含まれた画素に対してである。陰影部領域内の画素の輝度の分布は画像内の場所により大きく異なる。例えば図2に例示した地理画像には、いくつかの影が重なり合うことによってさまざまな輝度の陰影部分が含まれている。そのためそれぞれの陰影部分領域の輝度のヒストグラムにあった輝度補正を行うことが望ましい。そのため本実施の形態では、画像を複数のブロックに分割し、各ブロック内の陰影部部分領域ごとに陰影部の輝度補正を施す方法を採る。そのため、陰影部領域検出部100が終了すると、図1に戻り、プログラム40内の領域分割部200が実行され、画像データ21に基づいて画像を複数のブロックに分割して、領域分割データ24を生成して記憶装置20に記憶する。
図5(a)は、図2の画像を複数のブロック24Bに分割した状態を示す図である。ブロック24Bは、ここでは正方形と仮定し、そのサイズ(一辺の画素の数)をNbする。利用者は、そのサイズNbを陰影部の輝度の分布状態によって適宜指定可能である。図では画像が4×4個のブロックに分割されているが、このようなブロックサイズは一例であり、他のサイズのブロックを使用してもよいことは言うまでもない。例えば、サイズNbを試行錯誤的に決めることもできる。ブロックサイズNbの初期値を決め、そのブロックサイズの元で、補正対象の陰影画像を補正し、その後、そのブロックサイズを増大あるいは減少する方向に変更し、変更後の陰影画像の補正結果を変更前の陰影画像の補正結果とを見比べて、ブロックサイズの変更により、陰影画像の補正結果がよくなっているか否かを判断し、よくなっていると判断したときには、更にサイズをそれまでのサイズの変化の方向と同じ方向(大きくする方向又は小さくする方向)に変化することを繰り返し、サイズの変更がよくないと判断したときに、サイズを変更前の値に戻すようにしてもよい。なお、ブロックサイズを上記初期値より増大又は減少した後の補正結果が、ブロックサイズが上記初期値であるときの補正結果よりよくないと判断されたときには、ブロックサイズの変更方向を逆方向にして、以上と同様にして望ましいブロックサイズを決めればよい。あるいは、ブロックサイズを決める他の方法として、画像内の陰影部のサイズに依存してブロックサイズを決めることも考えられる。例えば、大きなビルの陰影部分のほぼ全体が一つのブロックに収まるように、ブロックサイズを決めることも考えられる。同図(b)は、画像データ21内のブロック24Bに関するいくつかのパラメータを説明するための図である。ここでは、画像の左上角の画素の位置に原点があり、x軸、y軸が図に示すように、垂直下方方向及び水平右方向に定義される。画像データ21のx軸方向とy軸方向のサイズ(画素数)をNx、Nyとする。ブロックのサイズをブロックの行数Row、列数Colは、ブロックのサイズNbと画像のサイズNx、Nyにより定まる。ブロックには、行番号iBlk、列番号jBlkが与えられる。各ブロックの一つの画素が、ブロック代表画素とする。例えば、各ブロックの左上角の画素をブロック代表画素とする。
ブロック代表画素を図に示すように左上角の頂点の画素Aとすると、その座標(xb,yb)は下記の式1a、1bにより与えられる。
xb=iBlk×Row (1a)
yb=jBlk×Col (1b)
ブロックの他の3個の頂点の画素B、C、Dの座標は、それぞれつぎのとおりである。B(xb+Nb−1,yb)、C(xb+Nb−1,yb+Nb−1)、D(xb,yb+Nb−1)。
図5(c)は、領域分割データ24の例を示す図である。図に示すように、領域分割データ24は、複数のブロックに共通なデータとして、画像のサイズNx、Nyと、ブロックのサイズNbと、ブロックの行数Rowと列数Colとを含んでいる。領域分割データ24には、ブロック別データとして、各ブロックの行番号iBlkと列番号jBlkの組に対応して、陰影部存在フラグFsとブロック内陰影部総画素数Cとが記憶される。ブロックに対応する陰影部存在フラグFsは、当該ブロック内に陰影部に属する画素があるか否かを示すフラグであり、陰影部に属する画素があるときには値1となる。当該ブロックに対するブロック内陰影部総画素数Cは、そのブロック内に存在する、陰影領域データ23に所属する画素の総数である。
陰影領域データ23も、論理的には、画像データ21の複数のブロックにそれぞれ対応する、当該ブロックと同じサイズの複数のブロックに分割されていると考えることができる。画像データ21内の各ブロック内に陰影部に属する画素があるか否かは、当該ブロックに対応する、陰影領域データ23内のブロック内に値1の画素があるか否かにより判断される。画像データ21内の当該ブロックに対するブロック内陰影部総画素数Cは、陰影領域データ23内の、当該ブロックに対応するブロック内にある値1の画素の数である。
陰影部存在フラグFsの決定にあたっては、まず当該ブロックについてブロック内陰影部総画素数Cを計数し、この総数Cが0でないときには、陰影部存在フラグFsの値を1にセットし、総数Cが0であるときには、陰影部存在フラグFsの値を0にセットすればよい。なお、陰影部存在フラグFsを使用しないで、ブロック内陰影部総画素数Cのみを記憶し、総数Cが0でないかあるいは0であるかにより、当該ブロック内に陰影部に属する画素が少なくとも一つ存在すると判断するようにしてもよい。あるいは、逆に、陰影部存在フラグFsのみをブロックに対応して記憶し、ブロック内陰影部総画素数Cは、必要となる毎に、陰影部存在フラグFsが値1である場合には、その内部の画素に対応する陰影領域データ23内の画素の値に基づいて、ブロック内陰影部総画素数Cを計数するようにしてもよい。陰影部存在フラグFsが値0である場合には、ブロック内陰影部総画素数Cの値は計数するまでもなく0である。
後に説明するように、いずれかのブロック内の陰影部の画素のヒストグラムを検出するときに、当該ブロック内に陰影部に属する画素が含まれているか否かを、当該ブロックに対する陰影部存在フラグFsの値が1であるか否かにより判別して、当該ブロックに対する陰影部存在フラグFsの値が1であるときには、当該ブロック内の各画素が陰影部内の画素であるかを判別すればよい。しかし、当該ブロックに対する陰影部存在フラグFsの値が0であるときには、当該ブロック内には陰影部内の画素が存在しないので、そのブロックに対しては、輝度ヒストグラムを生成する必要はない。
図1に戻り、領域分割部200の処理の終了後に、プログラム40は、陰影部に属する画素が存在している一群のブロックの各々に対して、以下の処理を実行する。陰影部に属する画素が存在している一群のブロックは、既に述べたように、対応して記憶された陰影部存在フラグFsの値が1であるブロックである。
まず、陰影部ヒストグラム検出部300が実行される。陰影部ヒストグラム検出部300は、各ブロック別に、当該ブロック内の全画素のうち、陰影部内にある複数の画素についての輝度ヒストグラムを検出し、実ヒストグラムデータ25として記憶装置20に記憶する。なお、ブロック内の画素のうち陰影部に属さない画素は、本実施の形態では処理されない。非陰影部は太陽光が照射されている箇所であるため既に見やすい画像であるためである。本実施の形態では、陰影部にだけ輝度補正を行うことにより処理時間も短縮できるようになっている。
図1に戻り、陰影部ヒストグラム検出部300の処理の終了後に目標ヒストグラム生成部400が実行される。目標ヒストグラム生成部400は、各ブロック別に、当該ブロック内の画素のうち陰影部に属する画素のコントラストを改良した後のヒストグラムを、当該ブロックに対する目標ヒストグラムとして生成し、目標ヒストグラムデータ26として記憶装置に格納する。目標ヒストグラム生成部400には、中央領域決定部410と、中央領域拡大部420と、上下側領域拡大部430とが含まれている。
図6は、目標ヒストグラム生成部400の処理の概要を説明するための図である。同図(a)において、f(i)はいずれかのブロックに対して検出された輝度ヒストグラムを模式的に表し、輝度iを有する画素数を示す関数である。Aはヒストグラムの下側領域、Bは中央領域、Cは上側領域を示す。
本実施の形態では、ヒストグラムの中央領域Bを、同図(b)に示すように、画像が取りうる最小輝度0から最大輝度MAXまでの範囲の輝度を有するように拡大されたヒストグラムg(i)に変換する。このとき、同図(a)に示すヒストグラムの下側領域Aと上側領域Cに属する輝度を有する複数の画素は、従来技術によれば、同図(b)に示すように、輝度0又はMAXにそれぞれ変換される。このままなら、輝度iがi≦a+1となる輝度iは処理後に輝度が0となり、つぶれという現象が起きる。また、b-1≦iとなる輝度iは処理後に輝度がMAXとなり、白とびという現象が起きる。白とびやつぶれが起きるとその部分の情報が失われるという問題がある。このような問題をなくすために、本実施の形態では、それらの領域の画素の輝度別の画素数を、同図(c)に示すように、最小輝度0から最大輝度MAXの範囲でほぼ一様であるヒストグラムに変換し、上記拡大されたヒストグラムg(i)と上記ほぼ一様なヒストグラムとを合成して、目標ヒストグラムh(i)を生成する。
これにより、同図(a)に示すヒストグラムの中央領域Bが最大範囲に拡大でき、このときに変換されなかった同図(a)の下側領域Bと上側領域Cに属する画素が、無視されることなく、同図(c)に示すようにほぼ一様なヒストグラムに属するように、目標ヒストグラムが決定される。本発明では、このように、元のヒストグラムの下側領域Aと上側領域Cに属する画素を切り出し、同図(c)に示すようにほぼ一様なヒストグラムに属させることをクリッピングと呼ぶことがある。上記下側領域Aの輝度限界値と上記上側領域Cの輝度限界値をそれぞれ下側限界値又は上側限界値と呼ぶことがあり、あるいはそれぞれの限界値を下側クリッピング値及び上側クリッピング値と呼ぶことがある。
図1に戻り、目標ヒストグラム生成部400では、まず中央領域決定部410が実行される。
図7は、中央領域決定部410の処理の一例の概略フローチャートである。本実施の形態では、ブロック内に存在する陰影部内に属する画素の総数Cのうち、一定の比率Rを有する輝度が小さい側の画素の集合を下側領域Aとし、ブロック内に存在する陰影部内に属する画素の総数Cのうち、一定の比率Rを有する輝度が大きい側の画素の集合を上側領域Cと定める。一定の比率Rは、利用者にあらかじめ指定させておく。
図7において、まず、輝度値nを初期値0に設定し(ステップS411)、いずれかの処理中のブロックに対して得られたヒストグラムデータを表す関数f(i)に基づいて、最小の輝度値0から輝度値n迄の画素数の累積値がブロック内陰影部総画素数Cと一定の比率Rとの積C×Rを越えたか否かを判定し(ステップS412)、越えていないときには、輝度値nを値1だけ増大する(ステップS413)ことを繰り返し、ステップS412において、初めて画素数の積算値が上記積を越えたと判断されたときに、そのときの輝度値nの値を、ヒストグラム下限領域Aの上限輝度aに設定する(ステップS414)。中央領域Bの下限輝度はa+1になる。
その後ステップS415で輝度値nの値を1だけ増やして、最小の輝度値0から輝度値nまでの値に対する画素数の累積値がブロック内陰影部総画素数Cと(1−R)との積にC×(1−R)を初めて越えるとステップS416で判定されるまで、輝度値nを繰り返し値1ずつ増大し(ステップS417)、上記累積値が初めて上記積を越えたときに、そのときの輝度値nより1小さい値をヒストグラムの上側領域Cの下限輝度bとする(ステップS418)。中央領域Bの上限はb−1となる。
これにより、中央領域Bとして、輝度a+1からb-1までの輝度に対するヒストグラム部分が決定される。ヒストグラムの下側領域の最大輝度はaとなり、上側領域Cの最小輝度はbとなる。なお、以上のようにして求めた値a、bをそれぞれヒストグラムの中央領域Cの最小輝度、最大輝度としてもよいことは言うまでもない。このときには、下側領域Aの上限輝度はa-1となり、上側領域Cの下限輝度はb+1となる。
こうして中央領域決定部410の処理が終了すると、中央領域拡大部420が実行される。ここでは、決定された中央領域Bの下限輝度a+1と上限輝度b-1とを使用して、図6(a)に示した中央領域Bに対して、図16(a)に示したような線形変換が実施され、図6(b)に示したように、中央領域Bは、最小輝度0から最大輝度MAXまでの拡大された輝度範囲に分布するヒストグラムg(i)に変換される。なお、ここでは、中央領域を拡大するために線形変換を使用したが、場合により非線形変換等の他の変換を使用してもよい。
図6(b)に示すように、従来技術での線形変換では、元のヒストグラムの下側領域Aに属する画素の輝度は輝度0のところに変換され、元の上側領域Cに属していた画素の輝度は輝度の最大輝度MAXのところに変換されるが、本実施の形態では、これらの領域に属していた画素には上記線形変換を施さない。上下側領域拡大部430は、これらの領域A、Cの画素を、図6(c)に示したように、最小輝度から最大輝度MAXまで概略一様なヒストグラムに変換し、変換で生成される概略一様なヒストグラムを先に生成された拡大ヒストグラムg(i)と合成して目標ヒストグラムh(i)を生成する。この結果、従来技術で生じる白とびやつぶれは生じない。上記のように、上下側領域拡大部430による処理は、線形変換で発生するオーバーフローした画素を、線形変換後の輝度のヒストグラムの下部に配置する処理であるとも言える。本明細書では、このような処理をクリッピングとも呼ぶことがある。
図8は、上下側領域拡大部430の処理の一例の概略フローチャートである。ステップS431では、元のヒストグラムの下側領域の画素数の累積と上側領域の画素数の累積との総和を異なる輝度数である(MAX+1)で割ることにより平均画素数aveを計算する。この平均値aveは、これらの下側領域と上側領域を一様なヒストグラムに変換したときの各輝度における画素数を与えるものである。ステップS432以降では、この一様なヒストグラムと、先に線形変換で得られた拡大されたヒストグラムg(i)とを合成して目標ヒストグラムh(i)を生成するようになっている。
まず、ステップS432では、輝度iを最小値0に設定する。その後ステップS433で、輝度iに対して拡大されたヒストグラムg(i)と平均画素数aveとを加算して、合成後のヒストグラムを表す関数h(i)を計算する。その後ステップS433で輝度iを1だけ増大して、輝度が最大輝度MAXを超えない範囲でステップS434の計算を繰り返す。こうして、先に得られた拡大されたヒストグラムと上記一様なヒストグラムを合成したヒストグラムh(i)が得られ、このヒストグラムh(i)が、目標ヒストグラムとして使用される。この目標ヒストグラムを表すデータ26が記憶装置20に格納される。
なお、ステップS431において計算された平均画素数aveは、一般には整数ではない。したがって、合成後の目標ヒストグラムh(i)も整数でなくなる。しかし、ステップS433で目標ヒストグラムh(i)を決定するときには、画素数h(i)を、整数となるように決定するものとする。そのためにの一つの方法は、平均画素数aveが整数でないときには、ステップS433において、拡大されたヒストグラムの画素数g(i)と平均画素数aveを加算するときに、輝度iに応じて、加算する平均画素数aveの値として、ステップS431で計算された平均画素数aveを越えない最大の整数と、それより1大きな整数との一組の整数を交互に選んで使用し、全ての輝度iに対して使用した平均画素数aveの総和が、ステップS431の平均の計算式の分子で計算された総画素数に等しくなるように、輝度iに応じて平均の画素数aveを調整すればよい。もちろん、他の方法を使用することもできる。以下では、このようにして、目標ヒストグラムの画素数h(i)は整数になるように決定されるとする。なお、目標ヒストグラムの画素数h(i)は非整数のままにして、後で輝度変換するときに、上に述べたのと類似の方法を使用して、非整数の平均値h(i)に対して割り当てる画素の数が整数となるように、割当てる画素数を調整してもよい。
こうして目標ヒストグラム生成部400の処理が終わると、プログラム40は、つぎに、輝度変換部500(図1)を実行する。輝度変換部500は、まず輝度変換データ生成部600を実行し、輝度変換データを生成する。このデータは、実ヒストグラムデータ25を目標ヒストグラムデータ26に変換するのに使用される。輝度変換データ生成部600の処理の詳細を説明する前に、輝度変換がどのように行われるかを説明する。
図9(a)は、いずれかのブロックの陰影部領域内の画素に関する実ヒストグラム25の例を示す図である。同図(b)は、そのブロックに対する目標ヒストグラムの例を示す図である。同図(c)は、同図(a)に示す実ヒストグラムを表す関数f(i)のグラフを示す図である。同図(d)は、同図(b)に示す目標ヒストグラムを表す関数h(i)のグラフを示す図である。同図(c)では、同じ輝度の画素に関しては、同じ斜線等の模様を用いて画素数が示されている。同図(d)では、同図(c)の輝度が変換される前の画素に対して用いた模様が、輝度が変換された後の画素にも付けられている。
例えば、目標ヒストグラムの輝度0には、実ヒストグラムの輝度0、1のそれぞれ一つの画素と、輝度2の2個の画素のうちの一つの合計3つの画素が割り当てられる。同様に、目標ヒストグラムの輝度1には、実ヒストグラムの輝度2の2個の画素のうちの残りの一つと、現輝度3の3つの画素のうちの2個の画素との合計3個の画素が割り当てられる。同様に、目標ヒストグラムの輝度2には、実ヒストグラムの輝度3の3個の画素のうちの残りの一つと、現輝度4の4つの画素のうちの3個の画素との合計4個の画素が割り当てられる。同様に、目標ヒストグラムの輝度3には、実ヒストグラムの輝度4の4個の画素のうちの残りの一つと、現輝度5の5つの画素のうちの4個の画素との合計5個の画素が割り当てられる。以下、同様である。
図10は、図9(a)、(b)に示された実ヒストグラムと目標ヒストグラムに対する輝度変換データ27の例としての輝度変換テーブルの例を示す図である。以下では、輝度変換テーブルも参照符号27を付けて呼ぶ場合もある。輝度変換データ27は、変換元の画素の輝度i(27A)と、当該輝度iを有する変換対象画素の総数f(i)(27B)と、当該輝度iに対する変換先輝度T(i)(27C)と、同じ輝度iに対する変換先輝度T(i)が複数個ある場合には、同じ輝度iの変換対象画素の総数f(i)のうちそれぞれの変換先輝度T(i)に変換される部分変換対象画素数27Dとを含む。変換先輝度T(i)は、目標ヒストグラムh(i)となるように、元画像のヒストグラムを低輝度から順に足し合わせていき、輝度補正する際の各画素の輝度の割当てを再構成する。もちろん高輝度の画素から順に割り当てるようにしてもよい。この際、同じ変換元の輝度iに対する変換先の輝度T(i)が複数個ある場合には、それぞれの変換先輝度毎に、その輝度に変換されるべき部分変換対象画素数を決めてある。なお、元の画素の輝度の変換にあたっては、輝度変換対象画素の総数から、それぞれの変換先輝度に変換される画素をランダムに決定する。この決定については、後に例を用いて更に詳しく説明する。
図11は、輝度変換データ生成部600の処理の一例の概略フローチャートであり、ここでは、輝度変換データ27として、図10に例示した輝度変換テーブル27を生成する。以下では、図9(a)又は(c)に示した変換元の実ヒストグラムと図9(b)又は(d)に示した変換目標ヒストグラムとを適宜参照して、輝度変換データ生成部600の処理を説明する。
輝度変換データ生成部600は、まずステップS601で、輝度iを0にセットし、変数HighとLowを0にセットする。変数Highは、目標の輝度iに割り当てる元の画像の輝度の最大輝度であり、変数Lowは、目標の輝度iに割り当てる元の画像の輝度の最小値である。ステップS602で、輝度iが最大輝度MAX以下であるかを判定し、そうであれば、ステップS603にて変数Sumを初期値0にセットする。変数Sumは、目標ヒストグラムの輝度iにおける画素数h(i)に割当て候補とされた元の画像の画素の数を表す。
つぎにステップS604において変数Sumが、目標ヒストグラムの輝度iにおける画素数h(i)より小さいことを判定する。すなわち、目標ヒストグラムの輝度iにおける画素数h(i)より小さいときには、元の画像の輝度Highの画素を割り当てられる可能性があることになる。ステップS604での判定の結果が肯定的であれば、ステップS605において、元の実ヒストグラムの輝度Highでの画素数f(High)、今の例ではf(0)を変数Sumに加算し、変数Highの値を1だけ増大する。今の例では、変数Sumは、f(0)に等しくなり、変数Highは値1になる。その後、ステップS604以降が再度実行される。ステップS604では、ステップS605で更新された変数Sumの更新後の値が目標ヒストグラムの輝度iにおける画素数h(i)より小さいか否かを判定する。小さい限り、ステップS605が繰り返される。
図9(a)又は(c)の場合には、目標ヒストグラムの輝度0における画素数h(0)は3であり、元の画像の輝度0、1、2における画素数はそれぞれ1、1、2であるので、Sumがf(0)(=1)になり、変数Highが1になり、その後にSumがf(0)+f(1)=2に増大され、変数Highも値2に増大された後も、ステップS604では、Sumはまだ目標画素数h(0)(=3)より小さいと判断され、ステップS605で再度Sumに次の元の画素数f(2)が加算されてSumの値はf(0)+f(1)+f(2)(=4)になり、変数Highが3に増大される。加算後のSumの値4は、目標の画素数h(0)=3より大きくなる。このことは、目標の輝度i=0に対して、元の画像の輝度0、1の画素を割り付けることができるが、輝度2の画素は全てを割り付けられないことを意味する。したがって、処理はステップS606に移る。そこでは、変数Highが1だけ減じられ、今の例では値2になり、差分Deltを次式2により求める。
Delt=f(High)−(Sum−h(i)) (2)
ここで、(Sum−h(i))は、割当て候補の画素の総数Sumのうち、目標の画素数h(i)を越えた画素の総数であり、差分Deltは、割当て候補の画素のうちの最大の輝度の画素数f(High)のうち、上記目標の画素数h(i)を越えた画素の総数分だけ少ない画素の数、すなわち、画素数f(High)のうち目標の輝度iに割当て可能な画素の数を表す。例えば、図9(a)又は(c)の場合には、Sumは4であり、h(0)は3であり、f(2)は2であるので、上記差分Deltは1となる。すなわち、元の画像の輝度2の2個の画素のうち1個は目標の輝度0に割り当てられるが、残りの1個は、目標の輝度0には割り当てられないことを示している。
ステップS607では、変数Low(今の場合には0)が変数High(今の場合は2)より小さいので、ステップS608において、変数Tmpが変数Lowの値(今の場合は0)にセットされ、ステップS610で、輝度変換テーブルの輝度Tmp(今の例では0)に対する変換先輝度T(Tmp)(今の例ではT(0))として輝度i(今の例では0)を設定する。すなわち、陰影部部分領域内の輝度0に変換先T(0)として輝度0が決定される。ステップS610が繰り返される毎にステップS609で、変数Tmpが変数Highより小さいか否かが判定され、小さいときに、ステップS610が繰り返される。こうしてステップS610が繰り返され変数Tmpを1だけ増大し、同様に、元の輝度1に対する変換先輝度T(1)として輝度0が決定される。以上により、元の画素の輝度iが0、1のときには、変換先の輝度はいずれも輝度0であると決定される。このように変換元の輝度に対して変換先の輝度が決定された場合には、変換元輝度iに対応した、輝度変換テーブル27内の変換先輝度T(i)(27C)に、当該決定された変換先の輝度が格納される。ステップS610では、更に変数Tmpを1だけ増大する。その結果、変数Tmpは2になる。その後、ステップS609において、変数Tmpが変数Highより小さくないと判断されると、処理はステップS611に移る。
ステップS611では、変換元の画像の輝度Highに対する画素数f(High)(例えばf(2)(=2))のうち、式2で計算した差分Deltの数だけの画素(今の例では1個)を目標の輝度iに割り当てる。すなわち、この画素の対してT(High)=iとする。すなわち、今の例では、元の輝度2の画素1個に対して変換先輝度T(2)=0が決定される。元の画像の輝度High(今の例では2)を有する画素の数は2であるので、目標の輝度i(今の例では0)に割り当てられる画素の総数(部分変換対象画素数)は1となる。この部分変換対象画素数が、輝度変換テーブル27内に、変換元の輝度iと変換先目標の輝度highとの組に対応して部分変換対象画素数27Dとして格納される。以下でも部分変換対象画素数が決定されるごとに、その部分変換対象画素数が輝度変換テーブル27内に部分変換対象画素数27Dとして格納される。
その後ステップS612では、次の式3により、元の画像の輝度Highの画素の数f(High)を、元の画像の輝度Highの画素のうちの未割当ての画素の総数に設定しなおす。
f(High)=Sum−h(i) (3)
今の例では、この値は1に等しい。ステップS612では、更に、変数Lowを変数Highの値(今の例では2)に等しくし、目標の輝度iを1だけ増大して値3にする。今の例では、輝度iは値1になる。その後処理はステップS602に戻る。目標のヒストグラムの輝度1の画素数は、図9(b)又は(d)の場合には3であるから、目標の輝度1には、上記f(High)の値(未割当ての画素1個分)がステップS605にて変数Sumに加算され、Sumは値1になり、変数Highは1だけ増大され、値3になる。ステップS604が再度実行された場合、今の仮定のようにSum(=1)が画素数h(1)(=3)より小さく、そのときにはステップS605が再度実行され、変数Sumにf(3)の値(今の例では3)が加算され、Sumは4になる。その後、変数Highが1だけ増大され4になる。ステップS604では、変数Sum(=4)が、目標の画素数h(1)(今の例では3)より大きくなるので、処理はステップS606に再度移る。
ステップS606では、変数Highの値を1だけ減らして3に戻す。更に、上に説明した式2により差分Deltを計算する。今の場合には、この差分Deltは2になる。その後ステップS607では、今の場合、変数Lowが2であり、変数Highは3であるので、変数Lowが変数Highより小さいと判断され、ステップS608にて、変数Tmpが変数Lowの値2に設定され、ステップS609にて、変数Tmpは変数Highより小さいと判断されるので、ステップS610で、元の輝度2の画素のうち、未割当ての画素1個に対する割り当て先の輝度T(2)として輝度1が決定される。すなわち、元の輝度2の2個の画素のうち、未割当ての画素1個に輝度1が割り当てられる。こうして、元の輝度2の2個の画素に対して、目標の輝度0に割り当てられる部分変換対象画素数が1であり、目標の輝度1に割り当てられる部分変換対象画素数が1となる。
その後、変数Tmpが1だけ増大されて3になると、ステップS609では、変数Tmpは変数High(3)より小さくないと判断され、処理はステップS611に移る。ステップS611では、既に述べたように、輝度High(=3)を有する元の画素数f(High)(今の例では3)のうち、ステップS606で計算された差分Delt(今の場合は値2)の数の画素に対して割当て先の輝度T(3)として、輝度i(今の例では1である)を決定する。割当て先を選択する確率は、割当て画素数(今の場合は2)/割当て候補の画素数(今の場合は3)により決まる2/3である。こうして、元の輝度3の画素3個のうちの2個に対して輝度1が割り当てられる。
その後、既に述べたように輝度3の元の画素の未割当ての画素数を上に述べた式3により計算され、その数が、元の画素の輝度3に対する画素数f(High)に設定される。以下、同様にして、元の画像の後続の輝度の画素に対して、新たな割り当て先の輝度T(i)が決定される。なお、以上の説明では、ステップS607による判定では変数Lowが変数Highより小さくないという場合は発生しなかった。このような場合が発生するのは、ステップS612を実行して変数Lowを変数Highの値に等しくした後に、ステップS605が実行され、変数Sumが未割当ての元の画素の画素数の値f(High)にされ、更に、画素数f(High)が次の目標の輝度の画素数h(i)より小さい場合には、ステップS604では変数Sumが画素数h(i)より小さいと判断される。その場合は、処理はステップS606に移る。その場合、ステップS606では、差分Deltが式2にしたがって計算され、その値は画素数h(i)と等しくなる。このような場合には、その後ステップS607では、変数Lowが変数Highより小さくない(両者が等しい)と判定されることになる。この場合には処理はステップS611に移る。ステップS611の処理は既に説明したとおりであるので、省略する。
以上のようにして、輝度変換データ生成部600により、図10に示したような輝度変換テーブル27が生成される。このデータは、後に図9(c)に示す実のヒストグラムを同図(d)に示すような目標ヒストグラムに変換するのに使用される。
プログラム40では、輝度変換部500は、輝度変換データ生成部600の実行後に輝度変換実行部700を実行する。この処理では、画像データ21をコピーしたコピー画像データ(図示せず)を記憶装置20に記憶し、先に生成された輝度変換テーブル27を用いて、このコピー画像データ内の処理中のブロック内に含まれる陰影部部分領域に属する画素の輝度を変換して、その画素の輝度を変換後の輝度で置換すればよい。
例えば、図10の輝度変換テーブルの場合には、変換元輝度iが0、1の場合には、それらに対する変換先輝度T(0)、T(1)はいずれも0である。元の画素の輝度T(i)を変換するときに、同じ変換元の輝度iに対する変換先の輝度iが複数個ある場合には、上に述べたように、それぞれの変換先輝度毎に、その輝度に変換されるべき部分変換対象画素数が決定され、輝度変換テーブル27に格納されている。このような画素の輝度の変換にあたっては、輝度変換対象画素の総数分の画素から、それぞれの変換先輝度に変換される画素を、部分変換対象画素数/輝度変換対象画素の総数の確率で決定すればよい。
例えば、図10の輝度変換テーブルの場合、元の輝度iが2の場合には変換先輝度T(2)は、0と1の二つがあり、それぞれに対する部分変換対象画素数はいずれも1である。したがって、元の輝度iが2の変換対象画素の総数2のうち、1個ずつが変換先輝度0と1に変換される。この元の輝度2の2個の画素のそれぞれに対して、変換先輝度0と1を、部分変換対象画素数/輝度変換対象画素の総数の確率、すなわちいずれの変換先に対しても1/2の確率でランダムに決定すればよい。同様に、元の輝度iが3の場合には、輝度変換対象画素の総数は3であり、変換先輝度は、1と2の二つがあり、それぞれに変換されるべき部分変換対象画素数は2と1である。したがって、輝度変換対象画素の総数3の画素を、2/3、1/3の確率でランダムに変換先輝度1と2に変換すればよい。
輝度2の2個の画素の輝度の変換先をランダムに決定するには、異なる変換先輝度値を、それぞれの変換先輝度に対する部分変換対象画素数だけ生成して、合計で輝度変換対象画素の総数に等しい変換先輝度値のグループを生成し、輝度が2である変換すべき画素が最初に見つかった場合には、このグループからランダムに一つの変換先輝度値を取りだし、その値をその変換すべき画素の変換先の輝度値とし、当該グループからも、上記取り出された変換先輝度値を削除するようにして、後続の輝度2を有する変換すべき画素の輝度を上記グループを使用してランダムに決定すればよい。
以上のようにして、ブロック内の陰影部部分領域内の複数の画素の輝度をそれぞれ変換して、コピー画像データ内のそれらの画素の輝度を、変換後の輝度で書き換えることにより、当該ブロックの陰影部分領域の輝度変換した画像がコピー画像データ内に生成される。本実施の形態では、輝度を変換するのは各ブロック内の陰影部部分領域内の画素のみであり、ブロック内の非陰影部部分領域に属する画素に対しては輝度変換を行わない。上記コピー画像データには、非陰影部部分領域に属さない画素の輝度も含まれている。したがって、上記コピー画像データに含まれた陰影部部分領域内の画素に対して上記書き換えを行うだけで、当該ブロックの陰影部分領域の書き換え後の画像と、陰影部分領域以外の元の画像とが結果として合成され、当該ブロックについて陰影部領域の輝度を補正した後の当該ブロックの画像が得られる。
以上のような、目標ヒストグラム生成部400、輝度変換部500の処理を、陰影部の一部を含む一群のブロックについて行えば、元の画像の陰影部の輝度の補正が完了し、上記コピー画像データは、元の画像の陰影部の輝度を補正した画像データ28(図1)として使用可能なデータになる。
以上から分かるように、元の画像のヒストグラムの下側領域の画素数又は上側領域の画素数と全画素数との比率Rの値を調整することにより、補正後の画像のコントラストを自由に調整することができる。すなわち、比率Rを大きくするほど、下側領域と上側領域のいずれの領域についても、それらに含まれる画素の数が多くなり、それらの画素の輝度が一様なヒストグラムになるように変換されるので、コントラストは一様に強くなり、はっきりと視認できるようになる。また、比率Rを小さくすればコントラストは強くはないが、その分、自然な画像になる。また、比率Rはすべてのブロックに対して一定値を設定してもよいし、ブロックごとにその値を設定してもよい。すべてのブロックで一定にすれば比率の設定処理が簡単になるが、ブロックごとに比率Rの値を決定すれば、陰影部部分領域をコントラストを付けてはっきりと見たいブロックと、陰影部部分領域を自然なコントラストで見たいブロックとを区別して、それぞれのブロックに適した比率Rを使用することが可能になる。あるいは、元の画像データ21の全てのブロックで同じ比率Rを使用する場合でも、異なる比率Rを使用して、複数の補正後の画像データ28を生成して、コントラストが強いことが望ましい用途と、画像の自然さが高いことが望ましい用途に応じて、得られた複数の補正後の画像データ28を使い分けてもよい。
図12は、図2に示した画像に対して本実施の形態で示した陰影部輝度補正を施した結果得られる画像を模式的に示す図である。この図に示すように、陰影部の輝度のコントラストが増大し、陰影部の視認性が向上している。
図13(a)は、人工衛星により地上を撮影して得られた実際の地理画像の例を示す図である。右側の道路の周囲以外は陰影部である。陰影部の内部はほとんど識別できないくらい輝度のコントラストが少ない。同図(b)は、同図(a)の画像を2×2のブロックに区切ったときの、左下角のブロックに対する輝度のヒストグラムである。輝度の低いところに多くの画素があり、全体として、輝度の最小値0に近い値から最大輝度MAXに近い値まで輝度が分布していることが分かる。この図において、aは、中央領域拡大部420(図1)で拡大されるヒストグラム中央領域の下限輝度a+1より1小さい値であり、同様に図においてbはヒストグラム中央領域の上限輝度b-1より1大きい値である。これらの限界輝度a、bは、ヒストグラム下側領域と上側領域との全ヒストグラムに対する比率R(図7)を0.05として決定されたときの値である。
図14(a)は、図13(a)の画像に関して、当該画像を2×2個のブロックに分割して、本実施の形態により陰影部の輝度補正をブロック毎に行った結果得られた濃度補正後の画像の例を示す図である。比率Rは、ブロックごとに視認性をよくするように調整した。他のブロックに対しては、比率Rは、左上角のブロックに対しては、0.045であり、右上角のブロックに対しては、0.04であり、右下角のブロックに対しては、0.07である。右下角のブロックはビルの影が2〜3重に重なっているため他のブロックよりも暗く、コントラストが弱い。そのため他のブロックよりもRを大きく設定した。このように、濃い影と薄い影とでRは変えることが有効である。すなわち、濃い影の部分はRを大きくし、薄い影の部分はRを小さくする。これにより、濃い影の部分も薄い影の部分も、内部がどのようになっているかを視認可能になる。ただし、不自然な画像にならないよう、ノイズが目立たない程度に、これらの部分のコントラストが抑えられるようにRの値を決めることが望ましい。
本実施の形態により陰影部の輝度を補正すると、陰影部内の車を視認でき、道路や建物も視認できるようになっている。また、ノイズも目立たない。更にブロックごとに比率Rを調整しているためブロック間での輝度差が少なく、自然な画像となっている。
同図(b)は、同図(a)の左下角のブロックに対する輝度補正後の輝度のヒストグラムである。このヒストグラムは、図13(b)に示した元のヒストグラムに近い形状を有するヒストグラム形状であるためことが分かる。この結果、図14(a)に示した、輝度補正を行った後の画像には不自然さが少なくなっている。
図15は、比較のために図13の画像の各ブロックの陰影部領域に対して、ブロック毎に従来技術によるヒストグラム平坦化を行った結果得られた画像を示す図である。同図では、陰影部内の視認性は高いが、コントラストが強すぎ、ノイズが目立つ。また、ブロックごとの輝度の変換の程度が大きく異なるためブロックの境界線付近等のほぼ同一箇所の輝度がブロック毎に大きく異なり不自然な画像となっている。これに対し、図14(a)に示した本実施の形態により得られた画像では、このような、ノイズが少なく、かつブロックの境界等のほぼ同じ箇所の輝度はブロックが異なっても極端には輝度は異なっておらず、自然な画像となっている。
したがって、本実施の形態で示したように、陰影部を補正することにより陰影部のコントラストを改善できるだけでなく、自然な輝度変化をする画像を得ることができる。すなわち、ヒストグラムの中央領域に対して線形変換するとともに、ヒストグラムの下側領域と上側領域の画素に対してヒストグラム均等化を施した結果、従来の線形変換のみで得られるコントラストよりは強く、従来のヒストグラム平坦化のみを行った場合よりは弱いコントラストを有し、いわば両方の変換の中間程度のコントラストを有するように陰影部のコントラストを変換でき、かつ陰影部の変換後の画像を自然な画像にすることができる。すなわち、陰影部内の視認性と画像の自然さを両立するように、陰影部の画像を改良できている。
本発明は、上記の実施の形態に限定されるものではなく、本発明の要旨を変更しない範囲で変更又は修正して他の形態で実施してもよいことは言うまでもない。
例えば、上記実施の形態では、画像を複数のブロックに分割し、各ブロックごとに、そこに含まれる陰影部部分領域に対して輝度を補正する処理を施した。図2に例示した地理画像のように、影が重なり合うことによってさまざまな輝度の陰影部分が含まれている場合には、このように画像を複数のブロックに分割して各ブロック毎に陰影部の輝度を補正することができ、各ブロックのコントラストをブロック毎に改善することができる。また、既に述べたように、元の画像のヒストグラムの下側領域の画素数又は上側領域の画素数と全画素数との比率Rの値をブロックごとに調整することが可能になり、例えば、陰影部部分領域をコントラストを付けてはっきりと見たいブロックと、陰影部部分領域を自然なコントラストで見たいブロックとを区別して、それぞれのブロックに適した比率Rを使用することも可能になる。
しかし、本発明は画像を複数のブロックに分割しない場合にも適用可能である。この場合には、既に説明した処理を処理対象の画像の陰影部の全体に対して実行すればよい。
なお、以上では、各ブロックの陰影部部分領域の輝度が非陰影部部分領域の輝度とは無関係に決定されるため、それらの領域の境界部付近では、輝度が急激に不連続に変化することになる。これを解消するために、陰影部領域のうち非陰影部に隣接する部分の変更後の輝度を、隣接する非陰影部の輝度とに基づいて、輝度の変化が不連続とならないように修正するようにしてもよい。あるいは、陰影部領域のうち非陰影部に隣接する部分の変更後の輝度と、当該部分に隣接する非陰影部の部分の輝度との両方を、それらの両方の部分における輝度の変化が連続に変化するように、変更してもよい。
また、以上の実施の形態では、元のヒストグラムの中央領域を線形変換を用いて拡大したが、線形変換に代えて他の変換、例えば非線形変換、区分線形変換を用いてもよい。また。元のヒストグラムの下側領域と上側領域を全輝度範囲に対して一様となるように平坦化したが、これに代えて完全に平坦でなくてもよく、ほぼ一様であればよい。更には、ほぼ一様でなくてもよく、全輝度範囲に分布するように変換してもよい。
f(i)…実ヒストグラムを表す関数、g(i)…実ヒストグラムの中央領域の範囲を拡大した後の拡大ヒストグラムを表す関数、h(i)…目標ヒストグラムを表す関数。