(57)【要約】【課題】  そこで、本発明の課題は、上述したようなデジタルカメラ等における画像データのメモリへの格納処理、アクセス動作を高速化し、各種処理に要する時間を極力短縮し、欠陥画素補正処理等の画像データの各種処理の高速化を実現するものである。【解決手段】  画像データを画像メモリに格納する際に画像上の座標位置から画像メモリーの記憶位置へのアドレス変換処理を予め行い所定の中間言語として保持する第一の処理手段と、前記アドレス変換処理後の中間言語のプログラムを解読して実行することにより、画像メモリーの記憶位置への参照及び／または変更を行う第二の処理手段とからなる画像処理装置。【選択図】  図１
2006067069.tif 000002
【特許請求の範囲】
【請求項１】
画像データを画像メモリに格納する際に画像上の座標位置から画像メモリーの記憶位置へのアドレス変換処理を予め行い所定の中間言語として保持する第一の処理手段と、
前記アドレス変換処理後の中間言語のプログラムを解読して実行することにより、画像メモリーの記憶位置への参照及び／または変更を行う第二の処理手段とからなることを特徴とする画像処理装置。
【請求項２】
請求項１において、前記中間言語は、前記画像メモリからビット詰めされた任意の画素データを抽出してスタックへ格納する命令と、前記スタック上のデータを消費して演算を行い演算結果をビット詰めされた画像メモリの任意の画素位置へ書き込む命令を備えたことを特徴とする画像処理装置。
【請求項３】
請求項１において、前記画像メモリはバンク切り替え方式のバンク切り替えやＤＲＡＭのページ等の単位でメモリを論理的にページ単位で扱うように構成され、前記中間言語は前記ページを切り替える命令を備えたことを特徴とする画像処理装置。
【請求項４】
請求項１において、画像上の欠陥画素座標を指示するソースプログラムに基づいて、前記画像メモリにビット詰めされた画像データにおける欠陥画素を補正する命令を備えたことを特徴とする画像処理装置。
【請求項５】
請求項４において、前記中間言語を解釈実行するインタプリタまたはハードウェアなどのコンピュータ言語実行手段と、撮像手段の出力をデジタル信号へ変換するデジタル化手段と、前記デジタル化された信号をビット詰めして画像メモリへ転送するビット詰めメモリ格納手段とを備え、前記撮像手段からの出力を前記デジタル化手段でデジタル化しビット詰めメモリ格納手段によって画像メモリへとビット詰めした画像に対して、前記コンピュータ言語実行手段によって解釈された中間言語の命令にしたがって欠陥画素を補正を行うように構成されていることを特徴とする画像処理装置。
【請求項６】
請求項５において、１枚の画像を複数の分割処理単位へ分割し、前記撮像手段から分割処理単位ごとに転送終了の通知を可能とする分割処理単位転送終了通知手段を備え、その分割単処理単位にあわせて前記分割処理単位転送終了通知手段からの通知に応じて欠陥画素補正動作を開始するように構成されていることを特徴とする画像処理装置。
【請求項７】
請求項３において、前記画像メモリのページ切り替え回数が最小となるように命令順序の最適化を行う事を特徴とする画像処理装置。
【請求項８】
画像データを画像メモリに格納する際に画像上の座標位置から画像メモリーの記憶位置へのアドレス変換処理を予め行い所定の中間言語として保持する第一の処理ステップと、
前記アドレス変換処理後の中間言語のプログラムを解読して実行することにより、画像メモリーの記憶位置への参照及び／または変更を行う第二の処理ステップとからなることを特徴とする画像処理方法。
【請求項９】
請求項８において、前記中間言語は、前記画像メモリからビット詰めされた任意の画素データを抽出してスタックへ格納する命令と、前記スタック上のデータを消費して演算を行い演算結果をビット詰めされた画像メモリの任意の画素位置へ書き込む命令を備えたことを特徴とする画像処理方法。
【請求項１０】
請求項８において、前記画像メモリはバンク切り替え方式のバンク切り替えやＤＲＡＭのページ等の単位でメモリを論理的にページ単位で扱うように構成され、前記中間言語は前記ページを切り替える命令を備えたことを特徴とする画像処理方法。
【請求項１１】
請求項８において、画像上の欠陥画素座標を指示するソースプログラムに基づいて、前記画像メモリにビット詰めされた画像データにおける欠陥画素を補正する命令を備えたことを特徴とする画像処理方法。
【請求項１２】
請求項１１において、前記中間言語を解釈実行するインタプリタまたはハードウェアなどのコンピュータ言語実行工程と、撮像手段の出力をデジタル信号へ変換するデジタル化工程と、前記デジタル化された信号をビット詰めして画像メモリへ転送するビット詰めメモリ格納工程とを備え、前記撮像手段からの出力を前記デジタル化工程でデジタル化しビット詰めメモリ格納工程によって画像メモリへとビット詰めした画像に対して、前記コンピュータ言語実行工程によって解釈された中間言語の命令にしたがって欠陥画素を補正を行うように構成されていることを特徴とする画像処理方法。
【請求項１３】
請求項１２において、１枚の画像を複数の分割処理単位へ分割し、前記撮像手段から分割処理単位ごとに転送終了の通知を可能とする分割処理単位転送終了通知工程を備え、その分割単処理単位にあわせて前記分割処理単位転送終了通知工程からの通知に応じて欠陥画素補正動作を開始するように構成されていることを特徴とする画像処理方法。
【請求項１４】
請求項１０において、前記画像メモリのページ切り替え回数が最小となるように命令順序の最適化を行う事を特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は撮像手段によって得られた画像に含まれる欠陥画素の補正方法に関するものである。
【背景技術】
【０００２】
従来より、撮像素子によって撮像された画像データに対して、撮像素子の欠陥画素補正が行われている。具体的な方法としては、撮像素子から得られた画像を一旦メモリに格納し、ＲＯＭに予め格納された欠陥位置に基づいて欠陥画素を他の画素情報等を用いて補間するものである（たとえば特開平６−１０５２４２号公報）。
【０００３】
また、特開平１０−４２２４４号公報には、１０ビットの画素データを１６ビットのメモリービット詰して格納する方法が記載されている。
【０００４】
撮像素子より読み出された画素データのメモリへの書き込み処理におけるアドレス計算について説明する。
【０００５】
図２は１０ビットの画素データを１６ビット幅のメモリーへ格納した場合の図である。分断した画素を次の１６ビットの上位へ詰め込むのか下位に詰め込むのかといったバリエーションはあるものの５ワード（１０バイト）の繰り返しとなる事が判る。１０と１６の最小公倍数である８０ビットを１６ビットで割った値が５ワードという繰り返しの大きさとなる。図３は９ビットの画素データを１６ビット幅のメモリへ格納した場合である。９ワード（１８バイト）単位の繰り返しとなっている。これに対して欠陥画素の位置は一般的に画素の画像上の座標で表現し、例えば図２９の様に上からＸライン目の左からＹ画素目というように表す。
【０００６】
そして欠陥画素については、その画素データの値をそのまま使用することはせずに、周辺画素の値から欠陥画素のデータを補間して画素値を生成し、補正するのが一般的である。
【特許文献１】特開平６−１０５２４２号公報
【特許文献２】特開平１０−  ４２２４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上述したような欠陥画素補正処理を行う場合を考えると、例えば、欠陥画素を補正する為に周辺上下左右の４画素を平均した値を算出する場合、画像上の画素の座標からビット詰されたメモリ上の位置を少なくとも５回計算しなければならない。また、下位ビットから順にビット詰を行うとして、画像上の画素の座標からメモリのアドレスと格納されているビット位置を得るには以下の計算が必要となる。
【０００８】
（１）画素順の番号＝上からＸライン目×画像の横幅＋左からＹ画素目
（２）メモリ上のアドレス＝（（画素順の番号＋１）×画素のビット幅）／メモリのビット幅
（３）格納されているビット位置＝（（画素順の番号＋１）×画素のビット幅）％メモリのビット幅
そして再計算を避けるように最適化したとしても最低２回の掛け算と１回の割り算を含むため、１つの欠陥画素を補正するために上下左右の画素値の平均を求めるならアドレス計算に最低１０回の掛け算と５回の割り算が必要であり、それに加えて画素値の平均を求める演算も必要となる。
【０００９】
これは上述のような欠陥画素補正プログラムの場合、アドレス計算が処理時間の支配的な要素となり、そのアドレス計算に要する時間が処理時間の遅れに直接作用する事を意味している。
【００１０】
また処理時間を長くする原因は他にも存在する。エンディアンの異なるＣＰＵを用いた場合を考えると、さらに処理が複雑となる。図２や図３は１６ビット幅のメモリの例であるが、３２ビット幅のメモリの場合もある。このようなビット詰めは比較的規模の小さなハードウェアによって構成する事が可能なので、撮像素子からＡＤ変換されたものをハードウェアでビット詰めする構成が効率面でも最適であり、上記特許文献１（特開平１０−４２２４４）でもそのような構成となっている。しかし、使用するＣＰＵによっては、ＣＰＵとビット詰めハードウェアでエンディアンすなわち基本的な情報単位となるビット数が一致していない場合もある。コスト等の理由で製品のラインナップ別にエンディアンの異なるＣＰＵを採用する場合は、ビット詰めハードウェアとＣＰＵでエンディアンを一致させる事は出来ない。この事はつまり、格納されているビット位置から画素を抽出する方法も知らなければならない事になり、より複雑な計算を必要とし、処理時間を長くする原因となる。
【００１１】
また処理時間を長くする原因は、ＤＲＡＭに対するアクセス動作にもある。デジタルカメラの多画素化が進み、画像サイズが大きな物となる為、大容量で安価なＤＲＡＭを使う事でコストメリットがある。一方、ＤＲＡＭに対するデータの格納はページという概念で管理されており、ＤＲＡＭは同一ページ内のアクセスはバースト的に行える（バースト転送）ため高速であるがページの異なる場所へのアクセスはアクセスに時間が掛かる。つまりできるだけ局所的にアクセスを行い、ページをまたがるアクセスを避ける事で効率が良くなることが予想される。しかし、上下左右の同一色の画素を用いる場合を考えると、一般に撮像素子のカラーフィルタの同一色は連続していない事が多く、例えば図２６の様な配列の様に同一色が１画素おきに現れるパターンとなっているため、上下の同一色の画素とは２ライン上と２ライン下の画素を意味する。図３０の○で囲んだ欠陥画素を補間する為には点線の○で囲んだ画素の値を使う事になる。つまり、１つの欠陥画素を補正する為には４ラインの距離にまたがる領域へのアクセスとなるのである。例えば１画素が１２ビットとして１ラインが１４４０画素であれば４ラインの距離は、
（４）１２ビット×１４４０画素×４ライン÷１６ビット  ＝４３２０ワード（８６４０バイト）
となり、８Ｋバイトを超える事になる。ＤＲＡＭの構成等に左右されるが１つのページは１６Ｋバイトとか３２Ｋバイトといった大きさが使用される事から、単純に上下２ラインの画素を順次アクセスすればページをまたがるアクセスが頻繁に発生し、処理時間を長くする要因となる。
【００１２】
また画像転送との同期という観点で見ると、デジタルカメラの多画素化が進み、画像サイズが大きくなると、撮像素子からＡＤ変換し、ビット詰めしたものをメモリーへ転送するための転送時間も大きくなり、欠陥画素補正処理を効率よく行うことが難しい状況にある。特にデジタルカメラ等で欠陥画素を動的に補正する場合は、その処理時間が連写性能等に重要な影響を与えるため、欠陥画素補正処理時間を短く、高速欠陥画素補正処理を可能とする事は非常に重要となる。
【００１３】
そこで、本発明の課題は、上述したようなデジタルカメラ等における画像データのメモリへの格納処理、アクセス動作を高速化し、各種処理に要する時間を極力短縮し、欠陥画素補正処理等の画像データの各種処理の高速化を実現するものである。
【課題を解決するための手段】
【００１４】
上述の課題を解決するために、本願の請求項１に記載の発明によれば、画像データを画像メモリに格納する際に画像上の座標位置から画像メモリーの記憶位置へのアドレス変換処理を予め行い所定の中間言語として保持する第一の処理手段と、前記アドレス変換処理後の中間言語のプログラムを解読して実行することにより、画像メモリーの記憶位置への参照及び／または変更を行う第二の処理手段とからなる画像処理装置を特徴とする。
【発明の効果】
【００１５】
本発明によれば、画像メモリから任意の画素を抽出する為の処理を中間言語のプログラムで実行することができ、従来のデータ処理において支配的であったアドレスとビット位置の算出時間を無くし、処理の高速化を図ることができる。
【発明を実施するための最良の形態】
【００１６】
（第１の実施例）
図１は第１の実施例のブロック図である。１はカメラ全体の処理に加えて本発明におけるコンピュータ言語のインタプリタを実行するＣＰＵである。カメラ全体の処理を行うために例えばレンズやシャッター等の部材も接続されているが、本発明の説明には不要である為省略した。２はＣＰＵ１と同一チップ内に構成されたチップ内蔵のメモリである。ＣＰＵ１とはチップ内の専用ＢＵＳで接続されている為、待ち時間がほとんどなく高速アクセス可能な高速メモリである。３はＣＰＵ１に読み込まれて動作するプログラムを格納してあるＲＯＭである。このＲＯＭにはＣＰＵ１が理解可能なネィティブコード以外に本発明におけるコンピュータ言語のコードも格納されている。
【００１７】
８は撮像面に入射された光学像を光電変換して画像信号に変換する撮像素子であり、７は撮像素子８より出力されたアナログ画像信号出力をデジタル信号へ変換するＡＤ変換器である。４はＡＤ変換器７からの出力をビット詰めし、画像用メモリ６へ格納する処理を行う画像プロセッサである。画像プロセッサ４と画像メモリ６は画像転送用ＢＵＳで接続されており、画像プロセッサ４が画像転送用ＢＵＳのバスマスタとして機能する。
【００１８】
画像プロセッサ４は画像のビット詰めをしながらの転送以外にもビット詰めされた画像を読み出して、色信号処理を行い再び画像用メモリ６の任意のアドレスへ書き込むなどの機能を有し、各種機能はＣＰＵ１からのコントロールにより活性化され制御される。５はＣＰＵ外部ＢＵＳの任意のアドレス空間を通して画像転送用ＢＵＳの任意のアドレス空間への読み書きを可能とするためのメモリウインドウである。このメモリウインドウ５を介在してＣＰＵ１から画像用メモリ６を読み書きする事が可能となる。またメモリウインドウ５はページ番号を切り替える事で画像メモリ６のベースアドレスを変更する事が可能である。このように画像転送用ＢＵＳは画像転送専用に設けられ、ＣＰＵ外部ＢＵＳを分離したことによって、ＣＰＵの責務であるカメラの各種メカニズムや撮影動作に係わる処理のコントロールと、画像処理プロセッサ４と画像メモリ６間における画像データの転送を並列に且つ効率的に実行する事が可能となり、結果的に余ったＣＰＵタイムにＨＡＬＴ命令でＣＰＵを停止させる事によって消費電力を削減する事も可能となる。
【００１９】
図４は第一の実施例のビット詰めされた画像の内部表現を示す図である。本実施例では１画素は１２ビットであり、３ワード、４画素の繰り返しになっている。ここで繰り返しパターンのベースアドレスをＭとすると各画素のＭとのオフセットとビット位置に対してそれぞれＰｉｘｅｌ１〜４のビット位置名称を定義する。
【００２０】
図１のメモリウインドウ５のサイズは６４Ｋバイトであり、メモリウインドウ５の中のオフセットアドレスを表現するのに必要なビット長は１６ビットである。もしウインドウのオフセットではなく１枚の画像の中のオフセットアドレスで表現すれば８００万画素程度の画像で２４ビットは必要になる。メモリウインドウ５のオフセットという表現とする事でオペランドサイズを３分の２の容量にする事が出来る。
【００２１】
それに対してビット位置は４種類存在する為、それぞれの画素を抽出してスタックに積む命令が４命令とスタックへ詰まれた４画素から補間画素値を算出して指定の画素へ格納する命令が４命令とその他ページ切り替え等の命令を合わせても１２８以下である事からオペコード１バイトとオペランド２バイトの３バイト命令を基本として命令セットを設計する事が可能である。
【００２２】
図５は本実施例のコンピュータ言語の命令表である。例えばＰｕｓｈＰｉｘｅｌ１という命令はオペランドである２バイト（１６ビット）のウインドウ内のアドレスと引数として、そのアドレスからＰｉｘｅｌ１形式のビット位置の画素情報を抽出し、スタック上に積むという動作を行う命令である。同様にＰｉｘｅｌ１〜４までの形式の命令が存在する。また、ＲｅｄｕｃｅＡｎｄＳａｖｅＰｉｘｅｌ１という命令はスタック上に積まれた４画素分の情報から左右の画素の画素間レベル差と上下の画素の画素間レベル差を比較してレベル差の少ない側のペアの平均値を補間画素の値とし、オペランドであるアドレスのＰｉｘｅｌ１形式のビット位置へ格納する命令である。ＲｅｄｕｃｅＡｎｄＳａｖｅも同様にＰｉｘｅｌ１〜４までの形式の命令が存在する。
【００２３】
ＣｈａｎｇｅＮｅｘｔＰａｇｅは図１のメモリウインドウ５のページ番号を１つ増加させ、次のページへ切り替える命令で、ＣｈａｎｇｅＰｒｅｖＰａｇｅは逆にページ番号を１つ減少させ前のページへ切り替える命令である。またＣｈａｎｇｅＰａｇｅ命令には２バイトのオペランドで指定されたページ番号へ直接切り替える命令である。
【００２４】
Ｓｗａｐ命令にはオペランドは無く、スタック上のトップと２番目のデータを入れ替えるという命令である。このような命令を併用する事でページ切り替え命令を削減できるが、詳しくは後に述べる事にする。
【００２５】
Ｅｘｉｔ命令は１枚の画像が終了した事を示す命令で、Ｒｅｔｕｒｎ命令は一旦インタプリタを終了して復帰する命令である。
【００２６】
次に画像転送との同期について説明する。１枚の画像の転送が完全に終了してから欠陥画素補正を行うよりも、画像の転送中でも転送が完了した画像データについては欠陥画素補正をスタートさせた方がトータルの処理時間を短縮可能である。しかし、単純に画像転送と同時に欠陥画素補正をスタートさせてしまっては、欠陥画素補正が画像の転送よりも先に終了してしまい、正しく補正が出来なくなってしまう。そこで本実施例では画像を４つのブロックに分け、４分の１の画像が転送終了する度に図１の画像プロセッサ４から図１のＣＰＵ１へ割り込みが掛かるように構成してあり、コンピュータ言語のプログラムも画像の４分の１の単位でＲｅｔｕｒｎ命令が挿入されている。そして図１の画像プロセッサ４から割り込みが入るとインタプリタをスタートさせ、Ｒｅｔｕｒｎ命令を実行する事でインタプリタを一旦抜ける。次の割り込みが入る事で再び次の命令からインタプリタを再スタートさせるというように動作させる事で、画像転送と欠陥画素補正の同期をとっている。これによって画像１枚分の画像データが全て転送されるまでは欠陥画素補正処理を待つことなく、画像データの転送と欠陥画素補正処理を並行して且つ同期を取りながら効率的に実行することができる。
【００２７】
次にインタプリタの実装について説明する。図７は本実施例におけるインタプリタの心臓部分部の実装である。本実施例のＣＰＵは例えばインテルの８０８６互換の命令セットである。インタプリタの実行中はレジスタを図６のような役割で使用しており、図７のラベルＩｎｓｔＴａｂｌｅに各命令の解釈部分へのジャンプテーブルが登録されており、命令のバイナリコードはラベルＩｎｓｔＴａｂｌｅからのオフセット値で定義されている。そして、インテルの８０８６はセグメント内のジャンプを１６ビットのオフセットアドレスで表現可能である。
【００２８】
したがって、命令コードのバイナリ値はすべて偶数の数字であるため全命令として２５６ではなく１２８命令を表現可能である。ラベルＦｅｔｃｈからの４命令がこのインタプリタの心臓部分である。この事から非常に高速に解釈可能である事がわかる。また非常に少ないコードサイズでインタプリタを実装できる。本実施例ではこのインタプリタは図１のＲＯＭ３に記憶しているがカメラのスタートアップ処理の中で図１の内蔵ＢＵＳで高速アクセス可能な主記憶領域のメモリ２へ転送して実行する為さらに高速に動作可能である。
【００２９】
またスタックアーキテクチャについて説明すると、図９のリスト１は本実施例のコンピュータ言語で書かれたプログラムのアッセンブラ表記リストである。実際のプログラムはバイナリコードで表現されているが理解しやすいようにアッセンブラ表記のリストで説明を行う事とする。インタプリタはスタックを介在させてデータを処理を実行していく。上下左右の画素のデータを収集するプログラムはリスト１のようになる。同リストのプログラムでは、００００番地から０００９番地のプログラムを実行する事により、上下左右の画素情報がスタックへ積まれる。０００９番地まで実行した状態のスタックは図８のようになる。０００Ｃの命令を実行すれば４つのスタックが消費され、補間データが計算されて欠陥画素アドレスへ格納される。これが欠陥画素を補間するプログラムの基本的な構成である。スタックは図１のＣＰＵ１と同一チップ内に構成されたチップ内蔵の主記憶領域となるメモリ２を使用しているので非常に高速なアクセスが可能である。
【００３０】
次にメモリのページをまたがる欠陥画素補正処理について説明する。上下４ラインにまたがる画素を使って、１つの画素を補正する為、実際にはページ境界をまたがって画素を集めなければ補正画素値を求める事が出来ない場合が多く発生する。図１０は起こりうるページ境界をまたがる配置を分類したものである。ページの境界線をまたがる配置はパターンＡからＤのどれかにあてはまる。また１つの境界線の前後に沢山のパターンＤとパターンＡが存在するので、ページ切り替えが頻繁に起こると非常に効率が低下する事が予想される。ページ切り替えの回数を最小減に抑えて補正を行う必要があるのである。
【００３１】
ここでページ切り替え回数の最適化について考え、境界線の前後に欠陥画素が集中している場合の処理方法を説明する。図１１のリスト２はページの境界線付近にパターンＡの画素が３つ存在していた場合のプログラムである。リスト２の００００番地から０００６番地までの実行を終えた時に３つの欠陥画素に対して、その２ライン上の同一色画素がそれぞれスタックへ積まれている。図１２はその時点でのスタックの状態である。３つの欠陥を仮に欠陥１、欠陥２、欠陥３と呼び区別する事とすると、欠陥１の上、欠陥２の上、欠陥３の上の画素値がスタックへ詰まれている。
【００３２】
０００９番地の命令を実行する事でウインドウのページが次のページに切り替わる。０００Ｃ番地の命令で欠陥１の下の画素、０００Ｆ番地の命令で欠陥１の右の画素、００１２番地の命令で欠陥１の左の画素をスタックに積む事になる。
【００３３】
図１３はリスト２を００１２番地まで実行したときのスタックの状態を示している。スタックトップから４つを見ると図８とまったく同じ順序で欠陥１を補正するための画素が積まれている事がわかる。
【００３４】
その状態で００１５番地を実行すればスタックを４つ消費して欠陥画素を補正する値が算出されたの後、オペランドで指定された欠陥画素１へ書き込まれる。図１４は００１５番地を実行した直後のスタックの状態である。１つ前のページに存在する欠陥２の上の画素と欠陥３の上の画素がスタックに残っている。本来なら再びページを戻して欠陥２の上の画素をスタックへ積まなければならないが、命令の順序を最適化する事によりページ切り替えを大幅に削減できる事をこのプログラムが証明している。
【００３５】
引き続き００１Ｄ番地までを実行すればスタックは図１５のような状態になる。スタックトップから４つを見ると図８とまったく同じ順序で欠陥２を補正するための画素が積まれている事がわかる。
【００３６】
同様にリスト２を最後まで実行すればたった一回のページ切り替え命令だけで、ページ境界を越えて補間のための画素を必要とする３つの欠陥画素を補正する事が出来る。
【００３７】
ここでスタックの限界について説明する。ページ境界を越えて補間のための画素を必要とする欠陥画素が３つだけならページ切り替えは１度で良いが、たくさんある場合はインタプリタで用意されているスタックの量を超えてしまう事が考えられる。そこでコンパイラはインタプリタで用意されているスタックの範囲を超えない単位でページを切り替えて処理を行い、スタックを回復させてからページを戻して残りの処理を行うようなコード生成を行う。
【００３８】
次にスタックＳＷＡＰについて説明する。図１０のパターンＢの場合は上と左のデータが同一ページなので、ページ切り替えの前に上と左のデータがスタックへ詰まれる事になる。欠陥画素の上と左の画素がスタック上で隣接する事になり、図８とまったく同じ順序にするためには工夫が必要となる。上下と左右がペアになっている必要がある。
【００３９】
リスト３はそれを解決するプログラムである。０００３番地と０００６番地を実行した結果スタックの状態は図１６のようになっている。リスト３の０００９番地を実行するとページが切り替わる。そして、リスト３の０００Ｃを実行して欠陥の下の画素を積み、０００Ｆ番地のＳＷＡＰ命令を実行する事でスタックトップと２番目を入れ替えている。図１８の左側がＳＷＡＰ命令を実行する前で、図１８の右側がＳＷＡＰ命令を実行した後のスタックの状態である。
【００４０】
ここでページをまたがる画素に対する処理を説明する。６バイト周期の繰り返しなので１ページ６４ｋで扱うとページをまたがる画素が出てくる。図１９はページ境界にまたがる画素について示した図である。図１９のＰｉｘｅｌ３はページ境界が線ページ境界Ａになったときに２ページにまたがり、図１９のＰｉｘｅｌ２はページ境界Ｂになった時に２ページにまたがる。図２０はページ境界をまたぐ画素を扱うための命令である。
【００４１】
次に補正プログラムコンパイラについて説明する。上記のようなプログラムはカメラの内部で実行される。一方、上記のようなプログラムはカメラの生産過程で生成されカメラ内部のＲＯＭへ格納される。図２１はカメラの欠陥補正プログラムが製造される過程を示している。カメラ内部の欠陥画素検出プログラムによって撮像素子上の欠陥画素が検出される。そして、工場の設備に転送され欠陥画素ポジション情報ファイルが作成される。次に工場の設備内部の補正プログラムコンパイラによって欠陥画素補正プログラムが生成される。生成された欠陥画素補正プログラムが再びカメラの内部へ転送される。以後、カメラ内部のインタプリタによって欠陥画素補正プログラムが実行される。
【００４２】
図２２は補正プログラムコンパイラのブロックダイアグラムである。コンパイラは複数のブロックで構成する事でそれぞれのブロックの役割を明確にして全体の複雑度を下げる構成とするのが一般的である。それぞれのブロック入力はその前段のブロックの出力であり、また、出力は次のブロックの入力となっている。
【００４３】
図２２において、２２１はファイル語句解析部であり、入力の欠陥画素ポジション情報ファイルのフォーマットを解析し、コンパイラの内部表現へ変換する部分である。２２２はポジション順へソートする部分である。このブロックよりも後段のブロックでは欠陥画素ポジション情報が画像の上から下に順に流れて来る事を前提として設計されているためこのブロックでソーティングを行う。２２３は補正用画素の抽出を行う部分である。１つの欠陥画素に対して上下左右の４画素の情報を使って補間値を計算するため、その座標を抽出する。このブロックの出力は、１つの欠陥画素と４画素の座標が１つの組となり、１つの欠陥画素を演算子とすれば４つのオペランドを持った前置記法の４項演算子として扱う事が出来る。欠陥画素を求める式は
（５）欠陥ポジション補正値＝補間値計算（上画素値，上画素値，右画素値，左画素値）
であり、それを行うプログラムの、この段階の中間表現は例えば、
（６）欠陥画素ポジション上画素ポジション，下画素値ポジション，右画素値ポジション，左画素値ポジション
という式の連続として扱う事ができる。それぞれのポジション情報はまだ、画像上の座標で表現されている。
【００４４】
図２２の２２４は画像上の座標をビット詰めされたメモリーの格納形式である、ページ番号＋オフセットアドレス＋格納ビット位置へ変換する。ページ番号＋オフセットアドレス＋格納ビット位置の表現を画素アドレス形式と定義すると、このブロックの出力は
（７）欠陥画素アドレス上画素アドレス，下画素値アドレス，右画素値アドレス，左画素値アドレス
の羅列となる。この内部表現を「欠陥画素アドレス式」と定義する。
【００４５】
図２２の２２５のブロックでは欠陥画素ポジションが図１０のどのパターンに当てはまるのかを判定し、欠陥画素アドレスに対して属性として設定する。また、パターンＡ〜パターンＤのどれにも当てはまらないものはパターンＮと定義し属性として設定する。属性のついた中間表現である「欠陥画素アドレス式」は
（８）欠陥画素アドレスＮ  上画素値アドレス，下画素値アドレス，右画素値アドレス，左画素値アドレス
（９）欠陥画素アドレスＤ  上画素値アドレス，下画素値アドレス，右画素値アドレス，左画素値アドレス
（１０）欠陥画素アドレスＤ  上画素値アドレス，下画素値アドレス，右画素値アドレス，左画素値アドレス
（１１）欠陥画素アドレスＡ  上画素値アドレス，下画素値アドレス，右画素値アドレス，左画素値アドレス
のようになる。
【００４６】
ここで前置き記法から後置き記法（逆ポーランド法）への変換について説明する。
【００４７】
図２２の２２６は前置き記法で表現されている中間表現を後置き記法（逆ポーランド法）へ変換する。演算子に相当する「欠陥画素アドレス」を最後にもってくれば後置き記法に変換される。つまり、
（１２）欠陥画素アドレス  上画素値アドレス，下画素値アドレス，右画素値アドレス，左画素値アドレス
という内部表現を
（１３）上画素値アドレス，下画素値アドレス，右画素値アドレス，左画素値アドレス  欠陥画アドレス
という内部表現に変更するのがこのブロックの主な役目である。
【００４８】
本実施例のプログラム言語がスタックを使って処理を進める為、後置き記法（逆ポーランド記法）が本実施例のプログラム言語の処理順序となるからである。
【００４９】
ここで最適順序への解析について説明する。図２２の２２６の解析部の入力は前置き記法の欠陥画素アドレス式の行列であり、属性としてページ境界を越える形式（パターンＡ〜パターンＤ＋パターンＮ）が付加されている。これをＢＮＦで表現すると、図２３のようになる。ページ境界付近では多くの場合は連続した式パターンＤの後に式パターンＢまたは式パターンＣがありその後、連続した式パターンＡの順になる。なぜなら、欠陥画素は図２２の２２２でソーティングされており、図１０のパターンを見れば構造上その順番でしか現れない事が判る。そこで、連続した式パターンＤと連続した式パターンＡを構文として理解する事で処理を進める事とする。
【００５０】
式パターンＤのＢＮＦ式を図２４のように定義して扱う事とする。＜＞で囲まれた部分は終端を意味していて欠陥画素アドレス式のそれと対応している。式パターンＤは欠陥画素アドレスＤに続く上下左右の画素からなる欠陥画素アドレス式である。それに加えて、再帰的に式パターンＤを含む構造となっている。
【００５１】
このブロックでは式の解析木を作成しながら後置き記法（逆ポーランド記法）への変換を行っていく。連続した式パターンＤは図２５のような解析木として展開される。再帰定義されている式パターンＤは後置き記法に変換されると同時に深い解析木に展開されている事がわかる。最後に式パターンＣが展開される事で解析木の終端まで到達し、その後解析木の左側から順にコード生成してゆけば連続した式パターンＤの後置き法への変換が出来る。図２６は式パターンＡ、Ｂ、Ｃ、ＮのＢＮＦ式である。式パターンＡも式パターンＤと同様に再帰定義となっている。図２７は連続した式パターンＡと式パターンＢの解析木である。
【００５２】
図２８のリスト４は図２２の２２６の解析部の原理をより明確に説明するためのＣ言語で書かれたソースコードである。関数プログラムでは式が終わるまで式の処理を行い、関数Ｆｏｒｍｕｌａでは「欠陥画素アドレス式」を処理している。「欠陥画素アドレス式」はＰａｔｔｅｒｎＮ，ＰａｔｔｅｒｎＡ，ＰａｔｔｅｒｎＢ，ＰａｔｔｅｒｎＣ，ＰａｔｔｅｒｎＤのいずれかである。関数ＰａｔｔｅｒｎＮでは式パターンＮに相当する処理を行っている。もし、次の「欠陥画素アドレス式」が式パターンＮであれば、上画素アドレス、下画素アドレス、左画素アドレス、右画素アドレスの順にその画素の値を抽出してスタックへ積むためのプッシュ命令を生成し、次にスタックを消費して補間値を計算して欠陥画素アドレスへ書き込む命令を生成している。関数ＧｅｎｅｒａｔｅＰｕｓｈと関数ＧｅｎｅｒａｔｅＲｅｄｕｃｅＡｎｄＳａｖｅは図２２の２２７のコード生成部の関数である。また、関数ＧｅｔＮｅｘｔＩｆＰａｔｔｅｒｎＮは図２２の２２５のページ境界パターンの抽出部に属する関数で指定したパターンであれば「欠陥画素アドレス式」を読み出しパラメータで指定した画素のアドレスを返す、指定したパターンでなければリターン値として定数ＮＯＴＨＩＮＧを返す。
【００５３】
関数ＰａｔｔｅｒｎＡは次の「欠陥画素アドレス式」がＰａｔｔｅｒｎＡでなければ何も処理を行わず、次の「欠陥画素アドレス式」がＰａｔｔｅｒｎＡであればまず、上画素アドレスの値を抽出してスタックへ積む命令を生成する。その次の行は再びＰａｔｔｅｒｎＡの再帰呼び出しとなっている。
【００５４】
この再帰呼び出しによって連続したＰａｔｔｅｒｎＡに対しての解析木をこのプログラムのスタック上に構成していく事になり、結果的に図２７と同様の解析木を処理したこととなる。このような構造は再帰降下パーサーとして知られており、非常に複雑度の低い構造解析部によって欠陥画素を補正するプログラムが生成される事がわかる。
【００５５】
図２２の２２７のコード生成部によって欠陥画素補正プログラムが生成される。ここでは、傷画素アドレスから命令される命令を導出する。図２２の２２６の解析部からは関数ＧｅｎｅｒａｔｅＰｕｓｈおよび関数ＧｅｎｅｒａｔｅＲｅｄｕｃｅＡｎｄＳａｖｅによってコード生成の要求を受け取るが、実際の命令はビット位置ごとに用意されたＰｕｓｈＰｉｘｅｌ１〜４とページ境界のＰｕｓｈＰｉｘｅｌ２ＷＰ，ＰｕｓｈＰｉｘｅｌ３ＷＰのいずれかである。また、適切な場所でページ切り替え命令を生成するのもコード生成部の役割である。図２２の２２７のコード生成部では図２２の２２６の解析部からの命令によって現在のページを知っており、ページが切り替わる事を検出してページ切り替え命令を挿入するのである。また図２２の２２７のコード生成部はそれぞれの命令に割り振られたバイナリコードを知っていて直接コードへ変換し出力を行う。
【００５６】
尚、コンパイラの構造説明では構造上重要でない為に省略したが、インタプリタで用意されているスタックの上限を超えないように命令が生成され、画像の転送と同期するためのＲｅｔｕｒｎ命令も挿入される。いずれも解析部によって生成される命令である。
【００５７】
（その他の実施例）
第一の実施例では、ウインドウを介在してアクセスするハードウェアのページ単位を切り替えていたが、ＤＲＡＭのページ単位で行ってもオーバーヘッド削減の効果は大きい。
【００５８】
また、第一の実施例ではインタプリタのコンピュータプログラムによってコンピュータ言語を解釈実行していたが、コンピュータ言語を直接解釈実行可能なプロセッサによって実行してもよい。
【００５９】
第一の実施例では、構造のシンプルさを説明するために再帰降下パーサーを用いて設計していたが、シフトレディユースパーサーやその他のパーサーで構造解析を行ってもよい。
【００６０】
第一の実施例では１２ビットの画素を１６ビット幅のメモリーへ格納していたが、それ以外のビット幅でも同様の効果がある。
【００６１】
第一の実施例では撮像素子としてエリアセンサーを想定していたが、ラインセンサーを用いたイメージスキャナやフィルムスキャナでも同様の効果がある。
【００６２】
以上述べたように、上述の実施例によれば、画像の座標上のアドレスからメモリのアドレスと格納されているビット位置を得る処理を予め行い、その結果をビット詰めされた画像メモリから任意の画素を抽出する為の命令を持つ命令体系により構成されたコンピュータ言語としてカメラへ搭載する事で、カメラの中でアドレス計算をする必要がなくなり、高速な欠陥補正プログラムを作成する事が可能となる。これによって従来支配的だったアドレスとビット位置の算出時間を無くす事が出来る。例えば１つの欠陥画素に対して１０回の掛け算と５回の割り算を削減できる。
【００６３】
またビット詰めされた画像メモリから任意の画素を抽出し、スタックへ積む命令を持ち、スタック上のデータを消費して演算を行い、演算結果をビット詰めされた画像メモリの任意の画素位置へ書き込む命令を持つコンピュータ言語とする事で、補正に利用する画素情報の収集と補正画素値を演算するアルゴリズムを分離できる為、プログラムを柔軟に変更する事が可能となる。例えば、上下左右の画素の平均値を欠陥画素位置へ書き込む命令を、上下と左右を組として差の少ない組の平均値のみを用いるようアルゴリズムを変更する場合、上下左右の画素を集める命令に変更の影響が及ばないといった効果がある。
【００６４】
またバンク切り替え方式のバンク切り替えや、ＤＲＡＭのページなどの単位で画像メモリを論理的にページ単位で扱い、ページを切り替える命令を有するコンピュータ言語とする事で画素のアドレスをページの先頭からの相対アドレスとして表現する事が可能となるので、メモリのページを越えたアクセス時のペナルティを最小限にしつつ、命令の語調を短くする事が可能となる。例えば、６４Ｋバイトを１ページとして扱えば１６ビットでページ内をアクセスする事が可能なのでオペランドを２バイトで表現する事が可能となる。
【００６５】
また画像座標上の欠陥画素の位置をあらかじめ計測し、そのデータをソースプログラムとして画像上の座標を含む第一の言語体系により記述されたソースプログラムから上記コンピュータ言語への変換を行うコンパイラを使用して、このようなプログラム作成の処理を行う。そして、画像メモリのページ切り替え回数が最小となるように命令順序の最適化を行う事を特徴とした上記コンピュータ言語を生成するコンパイラを使用する事によってＤＲＡＭのページ外へのアクセスやバンクメモリーのページ切り替え等の処理を削減する事ができ、メモリのアクセスを高速化する事が可能となる。
【００６６】
また上記コンパイラによって生成されたビット詰された画像メモリ上の欠陥画素を補正するコンピュータ言語の実行コードを備え、コンピュータ言語を解釈実行するインタプリタまたはハードウェアなどのコンピュータ言語実行手段を備え、画像を光電変換する撮像手段を備え、撮像手段の出力をデジタル信号へ変換するデジタル化手段を備え、上記デジタル化された信号をビット詰めして画像メモリへ転送するビット詰めメモリ格納手段を備え、上記撮像手段からの出力をデジタル化手段でデジタル化しビット詰めメモリ格納手段によって画像メモリへビット詰めした画像をコンピュータ言語の実行コードを上記コンピュータ言語実行手段により実行する事によりビット詰めされた画像メモリーに対して上記撮像手段から得られた画像の欠陥画素を補正するという構成とする事により、メモリへの記憶効率を高める事が出来、且欠陥画素の補正を高速に行う事のできる撮像装置を構成する事が可能となる。
【００６７】
すなわち命令セットのコンピュータ言語で画像メモリのページ切り替えを最小限に抑えて欠陥画素補正を行うプログラムを自動生成でき、画像をビット詰めして格納する事で記憶効率を高める事ができ、さらに高速に欠陥画素を補正する事のできる撮像装置を構成できるようになる。
【００６８】
またコンピュータ言語で記述された複数の異なるプログラムコードを備え、温度や感度などの条件によって上記複数の異なるプログラムコードの中から１つを選択する手段を備え、温度や感度などの条件によって実行させるコンピュータ言語のプログラムを決定し実行するように構成する事により、ＩＳＯ感度や温度といった条件により変化する欠陥画素の数、質に適応可能な欠陥画素補正を行う事が出来るようになる。
【００６９】
１枚の画像を複数の分割処理単位へ分割し、撮像素子から分割処理単位ごとに転送終了の通知を可能とする分割処理単位転送終了通知手段を有し、その分割単処理単位にあわせて上記請求項１のコンピュータ言語のプログラムが、上記分割処理単位転送終了通知手段からの通知を待つように構成する事で、１枚の画像すべての転送を終了するよりも前に欠陥画素の補正を開始する事を可能とする事で、撮像素子からの画像転送開始から画像の欠陥補正の終了までの時間を大幅に短縮する事が可能となる。
【００７０】
すなわち撮像素子からの画像の転送が終了するよりも前に欠陥画素の補正を開始する事が可能となり、連写性能やレスポンス等の撮像装置の性能を高める事が可能となる。
【図面の簡単な説明】
【００７１】
【図１】第一の実施例の構成を示すブロック図
【図２】１０ビットの画素を１６ビット幅のメモリへビット詰めした状態を示す図
【図３】９ビットの画素を１６ビット幅のメモリへビット詰めした状態を示す図
【図４】第一の実施例のビット詰め状態を示す図
【図５】第一の実施例のコンピュータ言語命令表を示す図
【図６】レジスタの役割表を示す図
【図７】第一のインタプリタ心臓部分の実装例を示す図
【図８】リスト１のプログラムを実行後のスタックの状態を説明する図
【図９】基本のプログラムのアッセンブラ表記例のリスト１を示す図
【図１０】ページ境界を越える欠陥画素補正の分類を説明する図
【図１１】ページ切り替えが少ないプログラムのアッセンブラ表記例のリスト２を示す図
【図１２】リスト２の０００６番地実行後のスタックの状態を示す図
【図１３】リスト２の００１２番地実行後のスタックの状態を示す図
【図１４】リスト２の００１５番地実行後のスタックの状態を示す図
【図１５】リスト２の００１Ｄ番地実行後のスタックの状態を示す図
【図１６】リスト３の０００６番地実行後のスタックの状態を示す図
【図１７】スワップ命令を含むプログラムのアッセンブラ表記例のリスト３を示す図
【図１８】リスト３のＳＷＡＰ命令実行前後のスタックの状態を示す図
【図１９】ページをまたがる画素の状態を示す図
【図２０】ページ境界アクセス用命令一覧を示す図
【図２１】コンパイラの運用を説明する図
【図２２】コンパイラのブロックダイアグラム
【図２３】欠陥画素アドレス式トップレベルＢＮＦ式を示す図
【図２４】式パターンＤのＢＮＦ式を示す図
【図２５】連続したパターンＤの解析木を示す図
【図２６】式パターンＡ、Ｂ、Ｃ、ＮのＢＮＦ式を示す図
【図２７】連続したパターンＡの解析木を示す図
【図２８】図２２の解析部の原理を説明するためのプログラムのリスト４を示す図
【図２９】欠陥画素位置座標の表し方を説明する図
【図３０】欠陥画素の補間方法を説明する図
【符号の説明】
【００７２】
１  ＣＰＵ
２  主記憶用メモリ
３  ＲＯＭ
４  画像処理用プロセッサ
６  画像メモリ
【図１】
2006067069.tif 000003
【図２】
2006067069.tif 000004
【図３】
2006067069.tif 000005
【図４】
2006067069.tif 000006
【図５】
2006067069.tif 000007
【図６】
2006067069.tif 000008
【図７】
2006067069.tif 000009
【図８】
2006067069.tif 000010
【図９】
2006067069.tif 000011
【図１０】
2006067069.tif 000012
【図１１】
2006067069.tif 000013
【図１２】
2006067069.tif 000014
【図１３】
2006067069.tif 000015
【図１４】
2006067069.tif 000016
【図１５】
2006067069.tif 000017
【図１６】
2006067069.tif 000018
【図１７】
2006067069.tif 000019
【図１８】
2006067069.tif 000020
【図１９】
2006067069.tif 000021
【図２０】
2006067069.tif 000022
【図２１】
2006067069.tif 000023
【図２２】
2006067069.tif 000024
【図２３】
2006067069.tif 000025
【図２４】
2006067069.tif 000026
【図２５】
2006067069.tif 000027
【図２６】
2006067069.tif 000028
【図２７】
2006067069.tif 000029
【図２８】
2006067069.tif 000030
【図２９】
2006067069.tif 000031
【図３０】
2006067069.tif 000032