以下、図面を参照して本発明を実施するための形態について説明する。
[1.第1実施形態に係る構成および機能概要]
(1.1 画像処理装置の構成および機能)
まず、本発明に係る第1実施形態に係る画像処理装置の概要構成および機能について、図を用いて説明する。
図1は、本発明の第1実施形態に係る画像処理装置の概要構成例を示すブロック図である。
図1に示すように、画像処理装置1は、画像処理用のLSI(Large Scale Integration)であり、各種の演算を行うCPU(Central Processing Unit)部2と、専用の画像処理を行う画像処理部3と、画像データ等を記憶する記憶部4と、処理される画像データを入力して処理結果を出力する入出力部(I/O)5と、を備える。これら各部は、画像処理装置1において、同一ダイ上に集積され、内部バス(図示せず)に接続されている。
入出力部5は、任意の画像信号(例えば、RGB信号)から、Y,Cb,Cr信号等の輝度と色を示す画像信号に変換する機能を有する。
CPU部2は、演算装置やレジスタ等を有し、各種のプログラムを実行したり、入出力部5を通したデータの入出力を制御したり、画像処理部3に画像処理の指令をしたり、画像処理装置1外部のメインメモリ等を制御する。
画像処理部3は、論理回路や、ラインメモリやシフトレジスタ等を有する。そして画像処理部3は、動画データにおけるフレーム画像から、輝度や明度等の明るさの変換を行う画素を中心とした局所領域を抽出したり、局所領域におけるヒストグラム(局所ヒストグラム)を生成したり、フレーム画像を所定のブロック毎に分割したり等、CPU部2からの指令に従って専用の画像処理をする。また、画像処理部3は、Box-Filtering方式を利用した、高速に逐次的に画像処理するための回路を有する。
記憶部4は、DRAM(Dynamic Random Access Memory)等により構成され、画像を記憶するためのメモリ、すなわち、フレーム・メモリの機能を有する。また、記憶部4は、画像処理部3において生成された中間的な処理値を一時的に記憶する。また、記憶部4には、画像処理に必要なパラメータテーブルが記憶されている。
(1.2 画像処理部の構成および機能)
次に、画像処理部3の構成および機能について図を用いて説明する。
図2は、図1の画像処理部の概要構成例を示すブロック図である。図3は、動画データのフレーム画像をブロックに分割した様子の一例を示す模式図である。図4は、局所ヒストグラム生成部の概要構成例を示すブロック図である。図5は、図4に示したY方向の加算処理部の概要構成例を示すブロック図である。図6は、図4に示したX方向の加算処理部の概要構成例を示すブロック図である。
図2に示すように、画像処理部3はフレーム画像を所定のブロック(ブロックの領域)毎に分割し、各ブロックにおけるヒストグラム(ブロック・ヒストグラム)を生成するブロック・データ生成部3aと、ブロック・ヒストグラムを一時的に記憶するブロック・データ用メモリ3bと、ブロック・ヒストグラムを用いて局所領域におけるヒストグラム(局所ヒストグラム)を生成する局所領域データ生成部3cと、を有する。例えば、ヒストグラムは、画像処理のための前処理による処理値の一例として、明るさに関するヒストグラムである。
ブロック・データ生成部3aは、図3に示すように、フレーム画像を所定のブロック毎に分割し、ブロックアドレスを決定するための回路と、ブロック・ヒストグラムの各階級に対応したカウンタと、各カウンタをインクリメントさせるための輝度判定器とを有する。
ブロック・データ生成部3aは、図3に示すように、フレーム画像30を、例えば、8画素×8画素のブロックBに分割する。そして、ブロック・データ生成部3aは、画像処理のための前処理の一例として、各ブロックにおいて、ブロック・ヒストグラムBn[i、j](ブロック処理値の一例)を算出する。なお、[i、j]は、ブロックアドレス[行のブロック番号i、列のブロック番号j]であり、添え字nは、ヒストグラムの階級番号である。
ブロック・データ用メモリ3bは、書き込み用メモリと読み出し用メモリを有する。そして、ブロック・データ生成部3aは、生成したブロック・ヒストグラムBn[i、j]tをブロック・データ用メモリ3bに書き込み、時間的にフレーム番号が1つ前のブロック・ヒストグラムBn[i、j]t−1をブロック・データ用メモリ3bから取得し、ブロック・ヒストグラムBn[i、j]t−1を局所領域データ生成部3cに出力する。
このように、ブロック・データ生成部3aは、動画データのフレームの画像を所定のブロック毎に分割するブロック分割手段の一例として機能する。また、ブロック・データ生成部3aは、各ブロックに対して、画像処理のための前処理を行い、各ブロックのブロック処理値を算出するブロック処理値算出手段の一例として機能する。
次に、図4に示すように、局所領域データ生成部3cは、ブロック・データ生成部3aからのブロック・ヒストグラムBn[i、j]のデータを処理するY方向の加算処理部10と、Y方向の加算処理部10からのデータを処理するX方向の加算処理部20と、ブロック・ヒストグラムBn[i、j]の値を、ブロックの画素数で割り、1画素当たりの画素処理値を算出する除算器(図示せず)とを備える。
局所領域データ生成部3cは、ブロック・データ生成部3aがブロック・ヒストグラムを算出しているフレームに対して局所領域を設定する。そして、局所領域データ生成部3cは、局所領域に対応する各ブロックのブロック・ヒストグラムから、局所領域に対して局所ヒストグラム(局所処理値の一例)を算出する。
なお、Y方向の加算処理部10およびX方向の加算処理部20が、Box-Filtering方式を実現し、計算を高速化する。また、除算器は、固定小数点法を用いた割り算を行う機能を有する。また、局所領域の大きさは、ブロックの大きさより大きいとする。例えば、8画素×8画素のブロックとすると、191画素×191画素の局所領域となる。また、この除算器は、ブロックの画素数が2のべき乗の場合は、シフト演算(切捨て無しの固定主数点除算なので、小数点の位置だけをずらす)等によって、ブロックの画素数が2のべき乗では無い場合は、繰り返し除算法、引き戻し法、引き放し法等により、演算を行う。
ここで、X方向は、画像処理の対象である原画像(例えば、動画データのフレーム画像)に対して走査する方向であり、Y方向とは、原画像に対してX方向に走査してX方向の端に来ると、Y方向に順に走査を1画素移動させる方向である。
このように、局所領域データ生成部3cは、フレームに対して局所領域を設定する局所領域設定手段の一例としての機能を有する。また、局所領域データ生成部3cは、局所領域に対応する各ブロック処理値から、局所領域に対して前処理による局所処理値を算出する局所処理値算出手段の一例としての機能を有する。また、局所領域データ生成部3cは、局所領域に属する画素に対応する画素処理値から、局所処理値を算出する局所処理値算出手段の一例としての機能を有する。また局所領域データ生成部3cは、ブロックにおけるブロック処理値と、ブロックの画素数とから、1画素当たりの画素処理値を算出する画素処理値算出手段の一例としての機能を有する。また、局所領域データ生成部3cは、ブロックにおける処理値を、ブロックの画素数で割る際に、固定小数点法を用いた割り算により、画素処理値を算出する画素処理値算出手段の一例としての機能を有する。
そして、画像処理部3は、Y方向の加算処理部10およびX方向の加算処理部20により、座標[xc,yc]である対象画素PIX[xc,yc]の輝度値L[xc,yc]を中心とした局所領域(タップ数2N+1の正方領域)の統計情報として、局所領域のヒストグラムを構成する各階級値SumCnを算出する。ここで、階級数(ビン数)が4の場合、SumCnは、SumC0、SumC1、SumC2、SumC3を示す。
(1.3 Y方向の加算処理部10の概要構成および機能)
次に、Y方向の加算処理部10の概要構成および機能について、図5を用いて説明する。なお、データについては、データB0[i、j]を用いて説明を行い、データB1、B2、B3に関しては同様なので、省略する。
図5は、Y方向の加算処理部10の概要構成例を示すブロック図である。
図5に示すように、Y方向の加算処理部10は、入力側からのブロック・データ生成部3aの出力データB0[i(xc+N),j(yc+N)]と、出力側からのフィードバックされたデータとを加算する加算器11と、加算器11からの出力データから、入力側からのブロック・データ生成部3aの出力データB0[i(xc+N),j(yc−N−1)]を減算する減算器12と、減算器12からのデータBarC0を1ライン分(原画像のX方向の画素数個分)順に記憶するラインメモリ13と、を有する。なお、i(x)は、X方向におけるX座標xに対応するブロックアドレスiであり、j(y)は、Y方向におけるX座標yに対応するブロックアドレスjである。また、画像データの座標は一例である。
加算器11は、例えば、半加算器や全加算器等から構成された複数ビット用の加算器であり、任意の桁数の2進数の加算を行う。
減算器12は、例えば、not回路や全加算器等から構成された複数ビット用の減算器であり、任意の桁数の2進数の減算を行う。
ラインメモリ13は、原画像のX方向のライン分の長さの画素データ等を記憶するメモリであり、減算器12からの出力のデータBarC0[xc+N,yc]を記憶し、1ライン分遅れたデータを加算器11に出力するシフトレジスタとして機能する。すなわち、加算処理のたびに、参照したBarC0[xc+N,yc−1]を破棄し、生成したBarC0[xc+N,yc]を記憶するFIFOメモリとして機能する。ここで、画像処理装置1は、X方向に1画素ずつ走査していき、1ライン分遅れた画素データを出力するので、ラインメモリ13は、Y方向に1画素マイナスの画素データを出力する。
Y方向の加算処理部10の入力は、加算器11の一方の入力端および減算器12の一方の入力端により形成されている。加算器11の出力端は、減算器12の入力端に接続され、減算器12の出力端は、Y方向の加算処理部10の外部に出力する出力端を形成し、この分岐がラインメモリ13の入力端に接続されている。そして、ラインメモリ13の出力端は、加算器11の入力端に接続されている。
(1.4 X方向の加算処理部20の概要構成および機能)
次に、X方向の加算処理部20の概要構成および機能について、図6を用いて説明する。なお、データについては、データBarC0を用いて説明を行い、データBarC1、BarC2、BarC3に関しては同様なので、省略する。
図6は、X方向の加算処理部20の概要構成例を示すブロック図である。
図6に示すように、X方向の加算処理部20は、入力側からの入力のデータBarC0[xc+N,yc]と、出力側からのフィードバックされたデータSumC0[xc,yc]とを加算する加算器21と、加算器21からの出力データから、シフトレジストされた入力側からの入力のデータBarC0[xc−N−1,yc]を減算して外部に出力する減算器22と、入力側からの入力のデータBarC0[xc+N,yc]をシフトレジストするシフトレジスタ23と、減算器22の出力のデータSumC0[xc,yc]を1データ分記憶して、データSumC0[xc−1,yc]を加算器21に出力する記憶器24と、を有する。
加算器21は、加算器11と同様の構成および機能を有し、減算器22は、減算器12と同様の構成および機能を有する。
シフトレジスタ23は、タップ数分のデータを記憶するシフトレジスタであり、入力側からの入力のデータBarC0[xc+N,yc]を記憶し、タップ数分遅れたデータBarC0[xc−N−1,yc]を減算器22に出力するシフトレジスタとして機能する。
記憶器24は、データ1個分を記憶する遅延素子である。
X方向の加算処理部20の入力は、加算器21およびシフトレジスタ23の入力端に接続されている。加算器21およびシフトレジスタ23の出力端は、減算器22の入力端に接続され、減算器22の出力端は、X方向の加算処理部20の外部に出力する出力端を形成し、この分岐が記憶器24の入力端に接続されている。そして、記憶器24の出力端は、加算器21の入力端に接続されている。
[2.画像処理装置における第1実施形態の動作]
(2.1 画像処理装置の動作例)
次に、画像処理装置1の動作例について、図7から図9を用いて説明する。
図7は、画像処理装置1における第1実施形態の動作例を示すフローチャートである。図8は、動画データのフレーム画像おいて、対象画素を中心とした局所領域の一例を示す模式図である。図9は、局所領域とブロックとの関係の一例を示す模式図である。
まず、図7に示すように、画像処理装置1は、動画データを取得する(ステップS1)。具体的には、画像処理装置1の入出力部5が、リアルタイムで、動画データのフレームとして、1のフレーム画像のデータを取得し、フレームに対して、任意の画像信号(例えば、RGB信号)から、Y,Cb,Cr信号等の輝度と色を示す画像信号に変換する。
このように、画像処理装置1は、複数のフレームからなる動画データを取得する動画データ取得手段の一例として機能する。
次に、画像処理装置1は、動画データのフレームの画像を所定のブロック毎に分割する(ステップS2)。具体的には、画像処理装置1における画像処理部3のブロック・データ生成部3aが、図3に示すように、例えば、1920画素×1080画素のフレーム画像に対して、8画素×8画素のブロックBに分割し、ブロックアドレス[i、j]を決定する。なお、8画素×8画素のブロックの場合、1920画素×1080画素のフレーム画像は、240ブロック×135ブロックに分割される。
このように、画像処理装置1は、動画データのフレームの画像を所定のブロック毎に分割するブロック分割手段の一例として機能する。
次に、画像処理装置1は、各ブロックに対して、ブロック・ヒストグラムを算出する(ステップS3)。具体的には、ブロック・データ生成部3aが、式(1)に従い、ブロック・ヒストグラム(画像処理のための前処理によるブロック処理値の一例)を算出する。
L[x,y] <=63の時、B0[i,j]のカウントを1つ増加、
64<= L[x,y] <=127の時、B1[i,j]のカウントを1つ増加、
128<= L[x,y] <=191の時、B2[i,j]のカウントを1つ増加、
192<= L[x,y]の時、B3[i,j]のカウントを1つ増加
・・・(1)
なお、式(1)は、ビン数が4、最大輝の範囲が0から255の場合であって、x,yは、画像の座標、L[x,y]は座標[x,y]の輝度値、[i,j]は、座標[x,y]に対応するブロックアドレスである。また、B0[i,j]からB3[i,j]は、Bn[i,j]のヒストグラムを構成する階級値(画素数)であり、B0[i,j]は、輝度値が0〜63の階級の階級値、B1[i,j]は、輝度値が64〜127の階級の階級値、B2[i,j]は、輝度値が128〜191の階級の階級値、B3[i,j]は、輝度値が192〜255の階級の階級値である。ブロック・データ用メモリ3bにおけるBn[i,j]は、ブロック毎のヒストグラム生成時には、全てゼロで初期化される。
このように、画像処理装置1は、各ブロックに対して、画像処理のための前処理を行い、各ブロックのブロック処理値を算出するブロック処理値算出手段の一例として機能する。また、画像処理のための前処理によるブロック処理値の一例が、ブロックにおける明るさに関するヒストグラムである。なお、前処理は、ヒストグラムの生成、重み付けヒストグラムの生成、輝度値変換による輝度値を求める処理等が挙げられる。
次に、画像処理装置1は、フレームに対して対象画素を設定する(ステップS4)。具体的には、画像処理装置1における画像処理部3の局所領域データ生成部3cが、リアルタイムで、動画データのフレームとして、ステップS1で取得したフレーム画像に対して次のフレーム画像のデータを取得し、フレームに対して、任意の画像信号(例えば、RGB信号)から、Y,Cb,Cr信号等の輝度と色を示す画像信号に変換する。そして、局所領域データ生成部3cが、フレーム画像から処理の対象画素を設定する。さらに具体的には、局所領域データ生成部3cが、画像処理の対象であるフレーム画像に対してX方向に走査してX方向の端に来ると、Y方向に順に走査を1画素移動させて、対象画素を設定していき、フレーム画像を画素毎に順次ディジタル処理する。
次に、画像処理装置1は、フレームの局所領域を設定する(ステップS5)。具体的には、局所領域データ生成部3cが、図8に示すように、対象画素31を中心とした局所領域32(例えば、191画素×191画素)を設定する。ここで、Box-Filtering方式を利用する場合、タップ数を設定することにより、局所領域が決定される。対象画素31を1画素ずつ走査して、2箇所の画素データを入力することにより、局所ヒストグラムを求める局所領域も移動したことになる。
このように、画像処理装置1は、フレームに対して局所領域を設定する局所領域設定手段の一例として機能する。
次に、画像処理装置1は、ブロック・ヒストグラムとブロックの画素数とから、ブロックにおける1画素当たりの階級値を算出する(ステップS6)。具体的には、局所領域データ生成部3cの除算器が、各ブロック(ブロックアドレス[i、j])におけるブロック・ヒストグラムの各階級値B0[i、j]、B1[i、j]、B2[i、j]、B3[i、j]に対して、ブロックの画素数(例えば、64(8×8))で固定小数点法を用いた割り算を行い、ブロックアドレス[i、j]における1画素当たりの階級値B0[i、j]/ブロックの画素数、B1[i、j]/ブロックの画素数、B2[i、j]/ブロックの画素数、B3[i、j]/ブロックの画素数(例えば、階級値B0[i、j]/64、B1[i、j]/64、B2[i、j]/64、B3[i、j]/64)を算出する。
ここで、次のステップS7において、局所領域に含まれるブロック・ヒストグラムBn[i,j]を、全て加算して、局所領域の局所ヒストグラムを生成するが、図9に示すように、局所領域32に完全に含まれるブロックBと、局所領域32に一部含まれるブロックBがある場合がある。例えば、図9に示すような場合、i=1においてj=0からj=6までのブロックB、i=7においてj=0からj=6までのブロックB、j=0においてi=1からi=7までのブロックB、および、j=6においてi=1からi=7までのブロックBは、局所領域32に一部含まれるブロックBである。
局所領域32に完全に含まれるブロックBに関しては、ブロック・データ用メモリ3bに記憶された情報自体を利用でき、ブロック・ヒストグラムBn[i,j]のデータをそのまま使う分には情報の劣化は生じない。しかし、局所領域32に一部含まれるブロックBに関しては、ブロックBに含まれるブロック・ヒストグラムの階級値の平均値(ブロック・ヒストグラムの階級値をブロック画素数で割った1画素当たりの階級値)を、局所領域32に含まれるブロックBの面積の割合で積算した値を利用する。この際、丸め誤差が生じないように、固定小数点法を用いた割り算を行う。
このように、画像処理装置1は、ブロックにおけるブロック処理値と、ブロックの画素数とから、1画素当たりの画素処理値を算出する画素処理値算出手段の一例として機能する。また、画像処理装置1は、ブロックにおけるブロック処理値を、ブロックの画素数で割る際に、固定小数点法を用いた割り算により、画素処理値を算出する画素処理値算出手段の一例として機能する。
次に、画像処理装置1は、局所領域に属する画素に対応するブロックにおける1画素当たりの階級値から、局所ヒストグラムを算出する(ステップS7)。具体的には、局所領域データ生成部3cが、1画素におけるBn[i、j]/ブロックの画素数の値に対して、Box-Filtering方式を利用して、各局所領域における局所ヒストグラムを算出する。さらに具体的には、図4に示すように、局所領域データ生成部3cのY方向の加算処理部10およびX方向の加算処理部20が、Bn[i(xc+N)、j(yc+N)]/ブロックの画素数と、Bn[i(xc+N)、j(yc−N−1)]/ブロックの画素数とから、局所ヒストグラムSumCn[xc、yc]を出力する。但し、図4においては、”/ブロックの画素”を省略した。
なお、Box-Filtering方式を用いない場合は、局所領域データ生成部3cが、局所ヒストグラムの階数毎に、ブロック・ヒストグラムBn[i、j]を合計して、局所ヒストグラムを算出する。例えば、局所ヒストグラムの階級0の値は、局所領域32に完全に含まれるブロックBにおける階級値B0[i、j]の和(例えば、[i=2、j=1]から[i=6、j=5]まで階級値B0[i、j]の和)と、局所領域32に一部含まれるブロックBにおけるB0[i、j]/ブロックの画素数×ブロック面積比との合計から算出される。ここで、ブロックの面積比は、各ブロックにおいて局所領域が占める面積/ブロックの面積である。
または、局所領域データ生成部3cが、局所領域32に属する各画素に対して、各画素の座標[x,y]に対するブロックアドレス[i,j]を求め、Bn[i,j]/ブロックの画素数の値の和を階級毎に加算して、局所ヒストグラムを算出してもよい。
ステップS7において、局所ヒストグラムが算出されたら、画像処理装置1は、局所ヒストグラムを利用して、コントラスト調整等の様々な画像処理をフレーム画像に対して行う。
画像処理装置1は、次のフレーム画像を取得して、ブロック・データ生成部3aが、次のフレーム画像のブロック・ヒストグラムを算出し、ブロック・データ用メモリ3bに記憶する。局所領域データ生成部3cは、ブロック・データ用メモリ3bに記憶されている前のフレーム画像のブロック・ヒストグラムから、局所ヒストグラムを算出する。
このように、画像処理装置1は、局所領域に対応する各ブロック処理値から、局所領域に対する前処理による局所処理値を算出する局所処理値算出手段の一例として機能する。また、画像処理装置1は、局所領域に属する画素に対応する画素処理値から、局所処理値を算出する局所処理値算出手段の一例として機能する。また、画像処理装置1は、ブロックが局所領域に重なる部分の大きさに基づき、局所領域に属する画素に対応する画素処理値から、局所処理値を算出する局所処理値算出手段の一例として機能する。また、画像処理装置1は、局所領域に属する画素に対応する画素処理値から、ボックスフィルタ方式により局所処理値を算出する局所処理値算出手段の一例として機能する。また、画像処理装置1は、局所領域に対応する前記各ブロックのヒストグラムから、前記局所処理値として、局所領域における明るさに関する局所ヒストグラムを算出する局所処理値算出手段の一例として機能する。
以上のように、画像処理装置1は、動画に対して、各フレーム画像の局所ヒストグラムを求め、様々な画像処理を行っていく。
なお、時間的に1つ前のフレーム画像の局所ヒストグラム等の局所処理値に基づき、フレーム画像に対して、輝度変換等の画像処理を行う。そのため、動画に対しても、高速で画像処理を行うことができる。
(2.2 Box-Filtering方式)
次に、Box-Filtering方式に関して、図10から図13を用いて説明する。
図10に示すように、画素1(31)は、局所領域32の中心画素PIX[xc,yc]の座標である。ここで、画素1に対する局所領域をとする。また、便宜上、図10から図13において、ブロックの大きさを4画素×4画素、局所領域の大きさを、5画素×5画素(N=2)として説明する。
この局所領域の局所ヒストグラムを構成する各階級値を、階数が4の場合、SumC0[xc,yc]、SumC1[xc,yc]、SumC2[xc,yc]、SumC3[xc,yc]とする。また、SumC0[xc,yc]は、輝度値が0〜63の階級の階級値、SumC1[xc,yc]は、輝度値が64〜127の階級の階級値、SumC2[xc,yc]は、輝度値が128〜191の階級の階級値、SumC3[xc,yc]は、輝度値が192〜255の階級の階級値とする。なお、以下、階級0に関して、SumC0[xc,yc]を例に説明する。
まず、図10に示すように、対象画素である画素1より、X方向に1画素前の画素PIX[xc−1,yc]に対する局所領域として領域2を設定する。なお、局所領域データ生成部3cが、走査における1画素前に、局所領域である領域2における局所ヒストグラムSumC0[xc−1,yc]を既に求めたとする。また、図10における画素に対応する各マス(ブロックアドレス[i、j]の位置)は、B0[i、j]/ブロックの画素数の値(例えば、B0[i、j]/16)も示している。
領域1と領域2には、共通領域が存在する。その差分は、図11に示すように、領域4と領域5である。領域4または領域5内におけるブロック・ヒストグラムB0[i、j]の総和(領域内のブロックアドレス[i、j]におけるB0[i、j]/ブロックの画素数の値の総和)を、BarC0[x,y](但し、x,yは、各領域の中央部の座標)、局所領域一辺の長さを2N+1とすると、
領域1 = 領域2 − 領域4 + 領域5
である。
従って、
となる。
ここで、図11に示すように、領域4内におけるブロック・ヒストグラムB0[i、j]の総和BarC0[xc−N−1,yc]は、ブロックアドレス[1、0]に属する画素が2つ、ブロックアドレス[1、1]に属する画素が3つなので、
B0[1、0]/16×2+B0[1、1]/16×3
となる。
次に、領域5に対応するBar0[xc+N,yc]の生成方法を説明する。
領域5(Bar0[xc+N,yc])の中心画素は、図12に示すように、画素2(PIX[xc+N,yc])である。Bar0[xc+N,yc](領域5)の生成に当たり、図12に示すように、領域5から見てY方向に−1画素(図中、1画素上)の領域である領域6、すなわち、BarC0[xc+N,yc−1]を設定する。
図13に示すように、領域5と領域6にも共通部分が存在するので、非共通部分である画素3(PIX[xc+N,yc+N])と画素4(PIX[xc−N,yc−N−1])より、
領域5 = 領域6 − 画素4 + 画素3
である。
従って、
となる。
ここで、BarC0[x,y]を1ライン分記憶したMemC0を設定する(回路上はラインメモリ13に記憶される)。MemC0の領域は、図13に示す領域7とする。
すなわち、
とする。
BarC0[xc+N,yc]を求めるに当たり、BarC0[xc+N,yc−1]は、MemC0より参照する。一方、MemC0は、BarC0[xc+N,yc]生成後、参照したBarC0[xc+N,yc−1]を削除し、生成したBarC0[xc+N,yc]を追加することとする。この操作によって、次の対象画素である、PIX[xc+1,yc]に備えることが可能となる。
以上より、局所ヒストグラムSumC0[xc,yc]を求めるためには、画素4と画素3のみ参照すればよいので、少しの演算で、局所ヒストグラムSumC0[xc,yc]を求めることが可能となる。また、この方式は局所領域の大きさに関わらず、演算コストは同一となる。
次に、式(2)から式(4)で示した方法を、ステップS7において適用し、局所領域データ生成部3cは、局所ヒストグラムを求める。
なお、Y方向の加算処理部10は、式(3)に従う処理を行う。式(3)において、BarC0[xc+N,yc−1]は、ラインメモリ(MemC0)13より参照される。X方向の加算処理部20は、式(2)に従う処理を行う。
本実施形態によれば、複数のフレームからなる動画データを取得し、フレームに対して局所領域32を設定し、動画データのフレームの画像を、局所領域32より大きさが小さい所定のブロックB毎に分割し、各ブロックBに対して、画像処理のための前処理を行い前記各ブロックのブロック処理値(例えば、ブロック・ヒストグラム)を算出し、局所領域32に対応する各ブロック処理値から、局所領域32に対する前処理による局所処理値(例えば、局所ヒストグラム)を算出することにより、画像処理のための前処理によりブロック単位にブロック処理値を算出し、例えば、時間的に次のフレームにおいて、局所領域に対応するブロック処理値から、局所処理値を算出しているので、画素単位に各局所領域の局所処理値を記憶しておく必要がないため、メモリの大きさを軽減することができる。
すなわち、回路またはCPUを用いた計算において、少ないメモリで局所ヒストグラム等の局所領域における局所処理値を算出できる。例えば、高精細度マルチメディアインターフェース用の画像の場合において、局所領域の大きさの一辺が191画素とすると、通常、必要なメモリは約1MBとなる。しかし、本実施形態では、1パス目において8画素×8画素のブロック・ヒストグラムを取得した場合、約95KBのメモリで済み、必要なメモリの大きさは、約1/10となる。
また、ブロックBにおけるブロック処理値(例えば、ブロック・ヒストグラム)と、ブロックの画素数とから、1画素当たりの画素処理値(例えば、Bn[i、j]/ブロックの画素数)を算出し、局所領域32に属する画素に対応する画素処理値から、局所処理値(例えば、局所ヒストグラム)を算出する場合、ブロックにおけるブロック処理値に対応した1画素当たりの画素処理値により、メモリの大きさを軽減して、局所ヒストグラム等の局所処理値を算出できる。
ブロックにおけるブロック処理値を、ブロックの画素数で割る際に、固定小数点法を用いた割り算により、画素処理値を算出する場合、丸め誤差が発生しないので、高精度に局所ヒストグラム等の局所処理値を算出できる。
ブロックBが局所領域32に重なる部分の大きさに基づき、局所領域32に属する画素に対応する画素処理値から、局所処理値を算出する場合、局所領域32に完全に含まれないブロックBが存在しても、局所ヒストグラム等の局所処理値を高精度に算出できる。
局所領域32に属する画素に対応する画素処理値から、ボックスフィルタ方式により局所処理値を算出する場合、少ないメモリで局所ヒストグラム等の局所処理値を算出できる。
画像処理のための前処理によるブロック処理値がブロックにおける明るさに関するヒストグラムであって、局所領域に対応する各ブロックのヒストグラム(ブロック・ヒストグラムBn[i、j])から、局所処理値として、局所領域における明るさに関する局所ヒストグラムSumC0[xc,yc]を算出する場合、メモリを軽減した回路、または、計算により、局所領域における画像の統計量として局所ヒストグラムを算出できる。
(第2実施形態)
[3.第2実施形態に係る画像処理装置の構成および機能]
(3.1 画像処理装置の構成および機能)
次に、本発明の第2実施形態に係る画像処理装置について図を用いて説明する。
第2実施形態に係る画像処理装置の概要構成は第1実施形態とほぼ同じである。但し、ブロック・データ生成部3aは、ブロック・ヒストグラムBn[i、j]の代わりに、画像処理のための前処理によるブロック処理値の一例として、各ブロックにおいて輝度値変換による値(ブロック輝度値)BCs[i、j]、BCm[i、j]、BCh[i、j]を算出し、ブロック・データ用メモリ3bは、値BCs[i、j]、BCm[i、j]、BCh[i、j]を記憶する。局所領域データ生成部3cは、局所ヒストグラムSumCn[xc,yc]の代わりに、輝度値変換により変換した輝度値の総和のデータSumCs[xc,yc]、SumCm[xc,yc]、SumCh[xc,yc]を算出する。なお、前記第1実施形態と同一または対応する部分には、同一の符号を用いて異なる構成および作用のみを説明する。その他の実施形態および変形例も同様とする。
図14は、本発明の第2実施形態に係る画像処理装置において、図1の画像処理部の概要構成例を示すブロック図である。
図14に示すように、画像処理部3のブロック・データ生成部3aは、原画像の画素データの輝度値に応じて輝度値を変換する輝度値変換関数を実現する輝度値変換テーブル部TCs、TCm、TChを更に備える。
輝度値変換テーブル部TCsは、低輝度領域用の輝度値変換テーブルを有し、輝度値変換テーブル部TCmは、中輝度領域用の輝度値変換テーブルを有し、輝度値変換テーブル部TChは、高輝度領域用の輝度値変換テーブルを有する。
各輝度値変換テーブル部TCs、TCm、TChに、原画像の局所領域内のある画素の輝度値L[x,y]に対して、各輝度値変換テーブル部TCs、TCm、TChは、各輝度値変換テーブルに対応した値Cs[x,y]、Cm[x,y]、Ch[x,y]を出力する。
(3.2 第2実施形態に係る画像処理装置の動作例)
次に、第2実施形態に係る画像処理装置1の動作例について、図15から図19に基づき説明する。
ここで、局所領域に含まれる輝度変換後の低輝度データであるCs[x,y]、同じく中輝度データであるCm[x,y]、同じく高輝度データであるCh[x,y]に関して、それぞれ同じ処理になるので、Cs[x,y]を例に説明する。
図15に示すように、画像処理装置1は、各輝度領域に対応した輝度領域関数を設定する(ステップS10)。具体的には、画像処理装置1のCPU部2が、図16に示すように、輝度領域(明るさ領域の一例)を低輝度領域Bs,中輝度領域Bm,高輝度領域Bhに、重みにより区分するための輝度領域関数Ws,Wm,Wh(明るさ領域関数の一例)を各々設定する。輝度領域関数Ws,Wm,Whは、輝度に対する重みにより各輝度領域を規定する。低輝度領域Bsは、輝度領域関数Wsの重みに従って、輝度を表す値が0から255まで広がる領域である。中輝度領域Bmは、輝度領域関数Wmの重みに従って、輝度0から輝度256まで広がる領域である。高輝度領域Bhは、輝度領域関数Whの重みに従って、輝度0から輝度256まで広がる領域である。
輝度値Lの関数である輝度領域関数Ws,Wm,Whは、例えば、式(5)により設定される。
輝度領域関数Wsおよび輝度領域関数Whは、ガウス関数であり、また、低、中、高の各領域の面積(重みの合計)がほぼ等しくなるように、分散値σが調整される。また、輝度領域関数Wmは、ある輝度値における各輝度領域の重みの合計が、1になるように設定される。なお、本実施形態では、ガウス関数を用いたが、シグモイド曲線等、他の関数を用いてもよい。但し、関数は連続的な変化をする関数であることが好ましい。また、分割される領域数は3に限らず、2や4でもよい。
このように、画像処理装置1は、明るさに対する重みにより明るさ領域(低輝度領域Bs等)を規定するための明るさ領域関数(輝度領域関数Ws等)を設定する明るさ領域関数設定手段の一例として機能する。また、画像処理装置1は、明るさ領域毎(各輝度領域Bs、Bm,Bh)に、各明るさ領域関数を設定する明るさ領域関数設定手段の一例として機能する。
次に、画像処理装置1は、輝度領域関数から輝度領域毎の輝度値変換関数を設定する(ステップS11)。具体的には、画像処理装置1のCPU部2が、輝度領域関数Ws、Wm,Whを累積した輝度累積関数Fs,Fm、Fhを求める。輝度累積関数Fs,Fm、Fhは、
である。ここで、最小輝度は0とし、最大輝度をLmaxとする。
そして、画像処理装置1のCPU部2が、図17に示すように、輝度累積関数Fs,Fm、Fhより、輝度値変換関数Cs、Cm、Ch(明るさ変換関数の一例)を設定する。
ここで、輝度値変換関数Cs、Cm、Chは、正規化するために、輝度累積関数Fs,Fm、Fhを、輝度累積関数Fs,Fm、Fhの各々最大値である最大値max[Fs]、max[Fm]、max[Fh]で割った関数である。
このように、画像処理装置1は、明るさ領域関数(輝度領域関数Ws,Wm,Wh)を明るさ(輝度)に対して累積することにより、輝度累積関数Fs,Fm、Fhを求め、明るさ変換関数(輝度値変換関数Cs、Cm、Ch)を設定する明るさ変換関数設定手段の一例として機能する。また、画像処理装置1は、各明るさ領域関数に対して、各明るさ変換関数(輝度値変換関数Cs、Cm、Ch)を設定する明るさ変換関数設定手段の一例として機能する。
次に、画像処理装置1は、輝度領域毎の上・下限変換関数を設定する(ステップS12)。具体的には、画像処理装置1のCPU部2が、図18A、図18B、図18Cに示すように、輝度変換の上限値と下限値を規定するために、輝度領域Bs、Bm、Bh毎に上限変換関数として、上限ガンマ曲線関数Gs1、Gm1、Gh1と、下限変換関数として、下限ガンマ曲線関数Gs0、Gm0、Gh0とを設定する。ここで、各ガンマ曲線関数(ガンマ補正関数)のガンマ値は任意に設定可能とする。
なお、上限変換関数(上限ガンマ曲線関数Gs1、Gm1、Gh1)は、輝度に対して連続かつ単調増加であり、輝度変換の出力の上限を決める。下限変換関数(下限ガンマ曲線関数Gs0、Gm0、Gh0)は、輝度に対して連続かつ単調増加であり、輝度変換の出力の下限を決める。また、上限ガンマ曲線関数Gs1、Gm1、Gh1および下限ガンマ曲線関数Gs0、Gm0、Gh0は、ガンマ補正関数である。また、ガンマ補正関数は、明るさに対する視覚特性に合うように補正する関数の一例である。また、本実施形態では上限変換関数および下限変換関数の一例として、ガンマ曲線関数を挙げたが、上限変換関数および下限変換関数を生成する曲線は、単調増加であれば、ガンマ曲線関数に限定されるものでは無い。例えば、複数のガンマ曲線関数を合成した曲線や、直線とガンマ曲線関数を合成した曲線等であってもよい。
次に、画像処理装置1は、動画データの取得し、動画データの第1フレームの画像を所定のブロック毎に分割する(ステップS13)。具体的には、画像処理装置1の入出力部5が、ステップS1のように、動画データを取得し、ステップS2のように、画像処理装置1における画像処理部3のブロック・データ生成部3aが、動画データの第1フレームの画像を所定のブロック毎に分割する。なお、第1フレームは、輝度変換等の画像処理をしたい第2フレームに対して、時間的に1つ前のフレームである。また、第2フレームの時間をtとすると、第1フレームの時間はt−1となる。
このように画像処理装置1は、画像処理を行う原画像の入力を受け付ける原画像入力手段の一例として機能する。
次に、画像処理装置1は、各ブロックにおける輝度変換値関数で変換した輝度値を算出する(ステップS14)。具体的には、ブロック・データ生成部3aが、第1フレーム(t−1)において、ブロック([i、j])に属する各画素[x,y]に対して、各輝度領域Bs、Bm、Bhに輝度値変換関数Cs[L]、Cm[L]、Ch[L]で変換した輝度値Cs[x,y]、Cm[x,y]、Ch[x,y]を求め、ブロック内での和を算出し、輝度値BCs[i、j]、BCm[i、j]、BCh[i、j]とする。さらに具体的には、図14に示すように、画像処理部3の輝度値変換テーブル部TCs、TCm、TChが、局所領域の各画素に対して、各領域の輝度値変換関数Cs[L]、Cm[L]、Ch[L]の値を求める。そして、ブロック・データ生成部3aが、各ブロック(ブロックアドレス[i、j])での和の輝度値(ブロック輝度値)BCs[i、j]、BCm[i、j]、BCh[i、j]を算出し、ブロック・データ用メモリ3bに記憶する。
次に、画像処理装置1は、ステップS4およびS5のように、第2フレームに対して対象画素を設定し、第1フレームより時間的に後の第2フレームの局所領域を設定する(ステップS15)。
このように画像処理装置1は、原画像から、明るさの変換を行う画素を中心とした局所領域を設定する局所領域設定手段の一例として機能する。
次に、画像処理装置1は、第2フレーム(t)において、各輝度領域に対して対象画素の輝度値における上限・下限変換関数値を算出する(ステップS16)。具体的には、画像処理装置1のCPU部2が、低輝度領域Bsの場合、図19Aに示すように、第2フレーム(t)における局所領域の対象画素PIX[xc,yc]の輝度値L[xc,yc]における上限変換関数値Gs1[L[xc,yc]]および下限変換関数値Gs0[L[xc,yc]]を算出する。中輝度領域Bmの場合、図19Bに示すように、画像処理装置1のCPU部2が、対象画素[xc,yc]の輝度値L[xc,yc]における上限変換関数値Gm1[L[xc,yc]]および下限変換関数値Gm0[L[xc,yc]]を算出する。高輝度領域Bhの場合、図19Cに示すように、画像処理装置1のCPU部2が、対象画素[xc,yc]の輝度値L[xc,yc]における上限変換関数値Gh1[L[xc,yc]]および下限変換関数値Gh0[L[xc,yc]]を算出する。このように、画像処理装置1は、第2フレーム(t)における上限変換関数値Gs1、Gm1、Gh1および下限変換関数値Gs0、Gm0、Gh0を算出する。
なお、上限変換関数値Gs1[L[xc,yc]]、Gm1[L[xc,yc]]、Gh1[L[xc,yc]]は、各輝度領域において、変換を行う画素(対象画素PIX[xc,yc])の明るさ(輝度値L[xc,yc])における上限変換関数Gs1、Gm1、Gh1の値である上限値である。下限変換関数値Gs0[L[xc,yc]]、Gm0[L[xc,yc]]、Gh0[L[xc,yc]]は、各輝度領域において、変換を行う画素(対象画素PIX[xc,yc])の明るさ(輝度値L[xc,yc])における下限変換関数Gs0、Gm0、Gh0の値である下限値である。
このように、画像処理装置1は、明るさに対して連続かつ単調増加であり、明るさの変換の出力上限を決める上限変換関数を設定する上限変換関数設定手段、明るさに対して連続かつ単調増加であり、明るさの変換の出力下限を決める下限変換関数を設定する下限変換関数設定手段の一例として機能する。また、画像処理装置1は、各明るさ領域(輝度領域Bs,Bm,Bh)に対応して上限変換関数(上限ガンマ曲線関数Gs1、Gm1、Gh1)を設定する上限変換関数設定手段の一例として機能する。また、画像処理装置1は、各明るさ領域(輝度領域Bs,Bm,Bh)に対応して下限変換関数(下限ガンマ曲線関数Gs0、Gm0、Gh0)を設定する下限変換関数設定手段の一例として機能する。
また、画像処理装置1は、変換を行う画素の明るさにおける上限変換関数の値である上限値および下限変換関数の値である下限値を算出する上限・下限値算出手段の一例として機能する。また、画像処理装置1は、各明るさ領域(輝度領域Bs,Bm,Bh)に対応する上限変換関数および下限変換関数に応じて、各上限値および下限値を算出する上限・下限値算出手段の一例として機能する。
次に、画像処理装置1は、ブロックの画素数から、ブロックにおける1画素当たりの変換した輝度値(ブロック輝度値)を算出する(ステップS17)。具体的には、ステップS6のように、局所領域データ生成部3cの除算器が、各ブロック(ブロックアドレス[i、j])での和の輝度値BCs[i、j]、BCm[i、j]、BCh[i、j]に対して、ブロックの画素数(例えば、64(8×8))で固定小数点法を用いた割り算を行い、ブロックアドレス[i、j]における1画素当たりの変換した輝度値BCs[i、j]/ブロックの画素数、BCm[i、j]/ブロックの画素数、BCh[i、j]/ブロックの画素数を算出する。このように、画像処理装置1は、第1フレーム(t−1)において、ブロックにおける1画素当たりの変換した輝度値(ブロック輝度値)を算出する。
次に、画像処理装置1は、局所領域における輝度値変換関数で変換した輝度値の総和を求め、分割比率を算出する(ステップS18)。具体的には、画像処理装置1の画像処理部3(局所領域データ生成部3c)が、座標[xc,yc]である対象画素PIX[xc,yc]の輝度値L[xc,yc]を中心とした局所領域32の統計情報として、第1フレーム(t−1)において、各輝度領域Bs、Bm、Bhに輝度値変換関数Cs[L]、Cm[L]、Ch[L]で変換した輝度値の総和のデータSumCs、SumCm、SumChを各々求めるために、第1実施形態のBn[i、j]/ブロックの画素数の値の代わりに、ブロックアドレス[i、j]における1画素当たりの変換した輝度値BCs[i、j]/ブロックの画素数、BCm[i、j]/ブロックの画素数、BCh[i、j]/ブロックの画素数の値に対して、Box-Filtering方式を利用する。画像処理部3のY方向の加算処理部10およびX方向の加算処理部20が、第1フレーム(t−1)における総和のデータSumCs、SumCm、SumChを求める。
そして、画像処理装置1のCPU部2は、画像処理部3から、総和のデータSumCs、SumCm、SumChのデータを受信し、正規化するために、各総和のデータSumCs、SumCm、SumChは局所領域に含まれる画素数SUMで各々割り、第1フレーム(t−1)における各分割比率Hs、Hm、Hhを求める。
各分割比率Hs、Hm、Hhを式で表すと式(8)になる。
ここで、局所領域は一辺の長さを2N+1の大きさの正方形とする。また、局所領域に含まれる各画素の輝度をL[i,j]とする。また、Cs[L[i,j]]、Cm[L[i,j]]、Ch[L[i,j]]を、各々単にCs[i,j]、Cm[i,j]、Ch[i,j]と記載する。
なお、各分割比率Hs、Hm、Hhは、Y方向の加算処理部10およびX方向の加算処理部20により、Box-Filtering方式で高速に算出される。また、本実施形態では、局所領域の形を正方形としたが、任意の縦横比の長方形でもよい。また、各座標値[i,j]は、ラスタスキャン順に増加する。
次に、画像処理装置1は、第2フレーム(t)における上限・下限変換関数値と、第1フレーム(t−1)における分割比率とより、第2フレーム(t)における各輝度領域の変換輝度値を求める(ステップS19)。具体的には、画像処理装置1のCPU部2が、輝度領域Bs、Bm、Bh毎に、第2フレーム(t)における対象画素PIX[xc,yc]の輝度値L[xc,yc]に対応する、各領域の上限ガンマ値と下限ガンマ値に対して、第1フレーム(t−1)から求めた分割比率Hs,Hm、Hhを利用して、第2フレーム(t)における輝度領域毎の変換輝度値Ls、Lm、Lhを、式(9)より求める。
図19Aに示すように、低輝度領域Bsの場合、輝度値L[xc,yc]における各領域の下限ガンマ値Gs0[L[xc,yc]]および上限ガンマ値Gs1[L[xc,yc]]から、分割比率Hs[xc,yc]から、式(9)に従って変換輝度値Ls[xc,yc]を求める。
また、図19Bに示すように、中輝度領域Bmの場合、輝度値L[xc,yc]における各領域の下限ガンマ値Gm0[L[xc,yc]]および上限ガンマ値Gm1[L[xc,yc]]から、分割比率Hm[xc,yc]から、式(9)に従って変換輝度値Lm[xc,yc]を求める。
また、図19Cに示すように、高輝度領域Bhの場合、輝度値L[xc,yc]における各領域の下限ガンマ値Gh0[L[xc,yc]]および上限ガンマ値Gh1[L[xc,yc]]から、分割比率Hh[xc,yc]から、式(9)に従って変換輝度値Lh[xc,yc]を求める。
このように、画像処理装置1は、局所領域における各画素の明るさ(輝度)に応じて、上限値と下限値との間の値を設定するための比率(分割比率H)を算出する比率算出手段の一例として機能する。また、画像処理装置1は、局所領域における各画素の明るさに明るさ変換関数(輝度値変換関数Cs、Cm、Ch)を適用して、比率を算出する比率算出手段の一例として機能する。また、画像処理装置1は、各明るさ変換関数(輝度値変換関数Cs、Cm、Ch)を適用して、各上限値および下限値に対する各比率(分割比率Hs、Hm、Hh)を算出する比率算出手段の一例として機能する。
次に、画像処理装置1は、各輝度領域の変換輝度値より変換輝度を求める(ステップS20)。具体的には、画像処理装置1のCPU部2が、式(10)のように、各領域の変換輝度値Ls[xc,yc]、Lm[xc,yc]、Lh[xc,yc]を加算し、対象画素PIX[xc,yc]における輝度値を変換した輝度Lout[xc,yc]を求める。
このように、画像処理装置1は、上限値と下限値と比率とにより、明るさ(輝度)の変換を行う画素の変換後の明るさ(輝度Lout)を算出する明るさ算出手段の一例として機能する。また、画像処理装置1は、各上限値および下限値と、各比率(分割比率Hs、Hm、Hh)とより、変換後の明るさを算出する明るさ算出手段の一例として機能する。
次に、画像処理装置1は、フレーム画像を走査して、最後の画素まで上記の処理を行う。
なお、輝度値変換関数Cs、Cm、Chが、輝度の軸の方向で反転させた場合でもよい。
例えば、輝度値変換関数Csは、
Cs=1−Fs[L]/max[Fs] ・・・(11)
でもよい。
本実施形態によれば、複数のフレームからなる動画データを取得し、フレームに対して局所領域32を設定し、動画データのフレームの画像を、局所領域32より大きさが小さい所定のブロックB毎に分割し、各ブロックBに対して、画像処理のための前処理を行い各ブロックのブロック処理値(例えば、ブロック輝度値BCs[i、j]、BCm[i、j]、BCh[i、j])を算出し、局所領域32に対応する各ブロック処理値から、局所領域32に対する前処理による局所処理値(例えば、変換した輝度値の総和のデータSumCs、SumCm、SumCh)を算出することにより、画像処理のための前処理によりブロック単位にブロック処理値を算出し、例えば、時間的に次のフレームにおいて、局所領域に対応するブロック処理値から、局所処理値を算出しているので、画素単位に各局所領域の局所処理値を記憶しておく必要がないため、メモリの大きさを軽減することができる。
また、本実施形態によれば、明るさが連続する画像でも精度よく各画素の輝度を変換できる。すなわち、空等のグラデーション領域を含む画像であっても、良好な輝度変換を行うことができる。
局所領域32における各画素の輝度に応じて、分割比率Hs、Hm、Hhを算出している。例えば、対象画素の局所領域内に含まれる画素に対する総和のデータSumCs、SumCm、SumChのような、局所領域内における平均的な値により、分割比率Hs、Hm、Hhを算出している。このため、対象画素が、1画素ずれても、分割比率Hs、Hm、Hhの値が大きく変化しなく、対象画素の近傍の他の対象画素でも、変換の割合が大きく変化しない。従って、空等のグラデーション領域を含む画像であっても、良好な輝度変換を行うことができる。
なお、従来の手法では、空等のグラデーション領域を含む画像のように、輝度が緩やかに変化する画像の場合、輝度のヒストグラムが特定の輝度に集中した形状で、輝度変換を行うと、ヒストグラムの形状が広がり、良好な輝度変換を行うことができなかった。しかし、本実施形態によれば、上限変換関数(Gs1等)および下限変換関数Gs0等)により、極端な輝度変換が防止でき、空等のグラデーション領域を含む画像であっても、良好な輝度変換を行うことができる。
また、本実施形態によれば、ブロックノイズが無く、高精度にコントラストの改善ができる。また、画像処理装置1は、時間的に前の第1フレームの画像データから局所領域における局所値を利用しているので、高速化で適切に各画素の明るさを変換できる。
また、画像処理装置1が、明るさ(輝度)に対する重みにより明るさ領域(低輝度領域Bs等)を規定するための明るさ領域関数(輝度領域関数Ws等)を設定し、明るさ領域関数を明るさに対して累積することにより(輝度累積関数Fs等)、明るさ変換関数(輝度値変換関数Cs等)を設定し、局所領域における各画素の明るさに明るさ変換関数を適用して、分割比率Hs等を算出する場合、局所領域における各画素の情報を反映した分割比率が決定でき、明るさ変換の精度を向上させることができる。
また、画像処理装置1が、明るさ領域毎(輝度領域Bs,Bm,Bh)に、各明るさ領域関数(輝度領域関数Ws,Wm,Wh)を設定し、各明るさ領域関数に対して、各明るさ変換関数(輝度値変換関数Cs、Cm、Ch)を設定し、各明るさ領域に対応して上限変換関数(上限ガンマ曲線関数Gs1、Gm1、Gh1)を設定し、各明るさ領域に対応して下限変換関数(下限ガンマ曲線関数Gs0、Gm0、Gh0)を設定する。そして、画像処理装置1が、各明るさ領域に対応する上限変換関数および下限変換関数に応じて、各上限値および下限値を算出し、各明るさ変換関数を適用して、各上限値および下限値に対する各比率(分割比率Hs、Hm、Hh)を算出し、各上限値および下限値と、各比率とにより、変換後の明るさを算出する場合、ユーザが輝度領域毎に、輝度領域関数Ws,Wm,Wh、上限変換関数、および、下限変換関数の少なくとも1つを調整することにより、コントラスト等の調節ができる。
また、明るさ領域関数(輝度領域関数Ws,Wm,Wh)が、連続関数である場合、特に、原画像の明るさが連続する領域における、画像処理の精度を向上させることができる。
また、上限変換関数および下限変換関数が、ガンマ補正関数のように、明るさに対する視覚特性に合うように補正する関数である場合、人間の感覚にあった画像補正ができる。
なお、第1および第2実施形態の処理は、コンピュータにより実行してもよい。この場合、第1および第2実施形態の処理を実行するプログラムを記憶した記録媒体等をコンピュータが読み出し実行する。
第1および第2実施形態の処理をコンピュータソフトウエアで実装する場合においても、組み込み機器等に実装するときは、コンピュータのCPUが使用するメモリが少ない方が、より高速な処理が可能になる可能性が高くなる。
また、例えばトーンカーブを変更し、画像変換の結果を人間が見ながら修正して行くようなアプリケーションソフトでは、適切な画像変換結果を得るまで何度もパラメータを変えて画像変換を繰り返すような操作を行なうアプリケーションソフトの形態が考えられる。
このようなアプリケーションでは原画像自体は変化しないので、原画像から生成される局所ヒストグラムは一度生成すればよいが、パラメータを変更した場合、何度も画像変換を行う必要がある。また、局所ヒストグラム等の局所処理値のデータは、元データより大きくなる場合が多々存在する。このような場合、局所ヒストグラム等の局所処理値の代わりに、ブロック・ヒストグラムのようなブロック処理値を、ブロック・データ用メモリ3bに保存しておけば、より少ないメモリの消費で済み、良好な実行速度を得ることが可能である。
また、第1および第2実施形態における画像補正技術は、ディジタルスチルカメラやビデオカメラでの画像処理のみならず、医療、車載、監視等、様々な用途に適用できる。
さらに、本発明は、上記各実施形態に限定されるものではない。上記各実施形態は、例示であり、本発明の特許請求の範囲に記載された技術的思想と実質的に同一な構成を有し、同様な作用効果を奏するものは、いかなるものであっても本発明の技術的範囲に包含される。