以下に、本発明の好ましい実施の形態を、添付の図面に基づいて詳細に説明する。なお、以下に説明する実施形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正又は変更されるべきものであり、本発明は以下の実施形態に限定されるものではない。
(実施例1)
図1は、本発明の実施例1における撮像装置の構成図である。図1の撮像装置において、撮像光学系101は、入射した被写体の光学像を撮像素子102に結像する。撮像素子102は、撮像光学系から入射される被写体の光学像を光電変換により電気信号に変換する。本実施例では、撮像素子102として、CCDを用いる。また、撮像光学系101には、メカシャッターやレンズなどが含まれる。
アナログ信号処理部(CDS)103は、撮像素子102によって光電変換されたアナログ出力信号に対して相関二重サンプリング処理などを行う。アナログ/デジタル変換部(以後、ADC部と称す)104は、アナログ信号処理部103から順次出力されるアナログ画像信号をデジタル画像信号に変換するAD変換処理を行う。縦線処理部105は、ADC部104から出力されたデジタル画像信号に対して、撮像素子102の駆動モードに応じた、縦線の検出や補正処理を行う(詳細な動作は後述する)。
デジタル信号処理部106は、縦線処理部105から出力されたデジタル画像信号に対して、ホワイトバランス調整、ガンマ補正、画素補間等の画質補正処理を施す。フレームメモリ部108は、デジタル画像信号を一時的に格納するメモリであり、例えばDRAMにより構成されている。画像変換部109は、フレームメモリ部108に格納されたデジタル画像信号を電子ビューファインダー110に表示するためのスルー画像への変換処理を行う。電子ビューファインダー110は、スルー画像に変換された画像信号を表示する。これにより、撮像装置スルー画像が電子ビューファインダー110に表示され、ユーザーは表示画像を見て画角合わせを行うことが可能となる。
この状態で、操作部115のシャッタレリーズボタンが押下されると、メモリ部114の情報を基にしたシステム制御部113の制御により、撮像素子102からの1フレーム分の撮像信号がデジタル信号処理部106に取り込まれる。デジタル信号処理部106は、取り込んだ1フレーム分の画像信号に画質補正処理を施し、フレームメモリ部108を通して信号圧縮部111に供給する。信号圧縮部111は、フレームメモリ部108に格納されたデジタル画像信号に対し、JPEG(Joint Photographic Experts Group)等の手法により圧縮符号化処理を行なう。圧縮符号化処理動作は、撮影時のレリーズ動作に伴って開始される。記録メディア部112は、圧縮符号化処理されたデジタル画像信号を記憶するものであり、例えばフラッシュメモリにより構成されている。信号圧縮部111により圧縮符号化処理を施された画像データを記録メディア部112に供給することにより、撮像された静止画像のデータファイルが記録メディア部112に記録される。
また、動画像を記録する場合には、信号処理部106で順次処理された複数フレームの画像信号に信号圧縮部111で圧縮符号化処理を施し、生成された動画像の符号化データを順次記録メディア部112に転送して記録する。一方、記録メディア部112に記録された静止画像のデータファイルを再生する場合、システム制御部113は、操作部115からの操作入力に応じて選択されたデータファイルを記録メディア部112から読み込む。そして、信号圧縮部111に供給して伸張復号化処理を実行させる。復号化された画像信号は画像変換部109を介して電子ビューファインダー110に供給され、これにより静止画像が再生表示される。
また、記録メディア部112から動画像のデータファイルを読み出して信号圧縮部111に供給し、伸張復号化処理させて、電子ビューファインダー110に供給することで、動画像が表示される。システム制御部113は、撮像装置各部の制御を司る。また、システム制御部113は、操作者(ユーザー)の指示に基づき撮像装置の動作モードを設定すると共に、設定された動作モードに対応した情報をメモリ部114から検索する。タイミング信号生成部107は、撮像光学系101、撮像素子102、アナログ信号処理部103、ADC部104に対して、各部をそれぞれ駆動するためのタイミング信号を出力する。このタイミング信号生成部107から出力される各種のタイミング信号は、システム制御部113から供給される基準クロック信号に基づくものである。
操作部115は、撮像装置を起動させる際や、露出条件、ズーム位置、駆動モード等の撮像装置のシステム設定情報などを変更する際にユーザーにより操作されるものである。そして、操作部115は、ユーザーから撮像装置のシステム設定情報の変更に係る変更情報が入力されるたびに、その変更情報をシステム制御部113へ入力する。この操作部115は、例えば、電源スイッチ、シャッタボタン、モード切り換えスイッチ、操作入力群等を含むものである。
次に、図2を用いて、本実施例に用いられる撮像素子102であるCCDの構造について説明する。図2に示すように、撮像素子102は、2次元状に複数のカラーフィルタがベイヤー配列されたフォトダイオード等の光電変換手段である受光素子201、複数の垂直転送部202、4列共有の垂直転送最終段部203、水平転送部204、出力アンプ205を備える。2次元の行列状に配列された複数の受光素子201は、それぞれ光電変換により電荷を発生する。複数の垂直転送部202は、複数の受光素子201で発生した電荷を垂直方向に転送する。垂直転送最終段部203は、4列を1つのブロックとして設けられ、各ブロック毎に垂直転送されてきた同一行の異なる4列の電荷を複数回(最大4回)に分割して水平転送部204に出力する水平分割駆動を行なうように構成されている。本実施例では、撮像素子102内に存在する垂直転送最終段部203の最大数をMとする(1≦m≦M)。水平転送部204は、前記垂直転送部202と垂直転送最終部203により垂直方向に転送された電荷を水平方向に転送する。出力アンプ205は、水平転送部204により水平方向に転送された電荷を画像信号として出力する。撮像素子102は、異なる複数の駆動モードで駆動可能である。すなわち、通常の静止画撮影時に全画素の画像信号を読み出す全画素読み出しモードで駆動可能である。また、画素加算静止画撮影を行う場合に水平2画素加算を行ってから画像信号を読み出す水平2画素加算モードで駆動可能である。さらに、動画撮影時に水平間引きを行なってからさらに水平2画素加算を行って画像信号を読み出す水平間引き加算読み出しモードで駆動可能である。
図2(a)は、ある特定のmブロックの4列とm+1ブロックの4列の計8列のみを抽出した図を示しており、それぞれのブロックの各列に対して、左から、1st列、3rd列、2nd列、4th列と定義する。このような順序にするのは、水平分割駆動を行って各列の電荷を水平転送部204に出力する際に、1ライン分の画像信号を1st列、2nd列、3rd列、4th列の順に読み出すためである。本実施例の撮像素子102は、静止画撮影時などのように全画素を出力する際には、垂直転送最終段部203により各ブロック毎に垂直転送されてきた4列の電荷を4回に分割して水平転送部204に出力する水平4分割駆動を行う。以下、その動作について説明する。
画像信号を出力する際、複数の受光素子201において光電変換された電荷をそれぞれ一斉に各垂直転送部202に読み出し、垂直転送部202全体を駆動して1ライン目の電荷を垂直転送最終段部203まで垂直方向に転送する。1ライン目の電荷が各垂直転送最終段部203に転送された後、水平同期期間毎に各垂直転送最終段部203に転送した電荷を水平転送部204に転送する。
例えば、1回目の水平同期期間(1st_HD)には、各ブロックの垂直転送最終段部203において、1ライン目の1st列(第1列)の電荷を一斉に水平転送部204に垂直転送する。水平転送部204に転送された1st列目の電荷は、出力アンプ205へ順次水平転送され、出力アンプ205より画像信号として出力される。続いて、2回目の水平同期期間(2nd_HD)には、各ブロックの垂直転送最終段部203において、1ライン目の2nd列(第2列)の電荷を一斉に水平転送部204に垂直転送する。水平転送部204に転送された2nd列目の電荷は、出力アンプ205へ順次水平転送され、出力アンプ205より画像信号として出力される。
続いて、3回目の水平同期期間(3rd_HD)には、各ブロックの垂直転送最終段部203において、1ライン目の3rd列(第3列)の電荷を一斉に水平転送部204に垂直転送する。水平転送部204に転送された3rd列目の電荷は、出力アンプ205へ順次水平転送され、出力アンプ205より画像信号として出力される。最後に、4回目の水平同期期間(4th_HD)には、各ブロックの垂直転送最終段部203において、1ライン目の4th列(第4列)の電荷を一斉に水平転送部204に垂直転送する。水平転送部204に転送された4th列目の電荷は、出力アンプ205へ順次水平転送され、出力アンプ205より画像信号として出力される。このように1ライン分の画像信号が4回の水平同期信号によって4回に分割され出力される。この動作を1フレーム分繰り返し行うことで、静止画用の全画像信号が出力される。
次に、全画素の信号をそのまま出力するのではなく、静止画撮影時であっても水平2画素加算を行ってから出力する画素加算静止画撮影を行う場合について説明する。本実施例の撮像素子102は、水平2画素加算を行う際には、垂直転送最終段部203により各ブロック毎に垂直転送されてきた4列の電荷を2回に分割して水平転送部204に出力する水平2分割駆動を行う。以下、その動作について説明する。
画像信号を出力する際、複数の受光素子201において光電変換された電荷をそれぞれ一斉に各垂直転送部202に読み出し、垂直転送部202全体を駆動して1ライン目の電荷を垂直転送最終段部203まで垂直方向に転送する。1ライン目の電荷が各垂直転送最終段部203に転送された後、水平同期期間毎に加算する同色列の電荷を水平転送部204に転送する(詳細は後述する)。ここでは、水平転送部204において、図2(a)に示す、1st列(第1列)と2nd列(第2列)の電荷を加算し、3rd列(第3列)と4th列(第4列)の電荷を加算する。
例えば、1回目の水平同期期間(1st_HD)には、各ブロックの垂直転送最終段部203において、1ライン目の1st列と2nd列の電荷を水平転送部204に垂直転送し、水平転送部204上で1ライン目の1st列の電荷と2nd列の電荷が加算される。水平転送部204において加算された1ライン目の1st列と2nd列の電荷は、出力アンプ205へ順次水平転送され、出力アンプ205より加算画像信号として出力される。
次に、2回目の水平同期期間(2nd_HD)には、1ライン目の3rd列と4th列の電荷を水平転送部204に垂直転送し、水平転送部204上で1ライン目の3rd列と4th列の電荷が加算される。水平転送部204において加算された1ライン目の3rd列と4th列の電荷は、出力アンプ205へ順次水平転送され、出力アンプ205より加算画像信号として出力される。このように水平2画素加算された1ライン分の画像信号が2回の水平同期信号によって2回に分割され出力される。この動作を1フレーム分繰り返し行うことで、水平2画素加算された加算静止画用の画像信号が出力される。
次に、動画撮影時に水平2画素加算を行ってから画像信号を読み出す場合について説明する。本実施例の撮像素子102は、動画撮影時に水平2画素加算を行う際には、垂直転送最終段部203により各ブロック毎に垂直転送されてきた2列の電荷を一斉に水平転送部204に出力する水平分割無し駆動を行う。以下、その動作について説明する。
一般的には、動画撮影のように画素数が少なくても良い駆動を行なう際には、垂直方向における間引き動作なども同時に行うことが多いが、ここでは説明を省略する。受光素子201において光電変換された電荷を図2(a)で示すmブロックにおいては、1st列(第1列)と2nd列(第2列)の電荷のみを一斉に各列の垂直転送部202に読み出す。また、m+1ブロックに対しては、3rd列(第3列)と4th列(第4列)の電荷のみを一斉に各列の垂直転送部202に読み出す。そして、各列の垂直転送部202に読み出された電荷を垂直転送して、1ライン目の電荷を各ブロックの垂直転送最終段部203まで転送する。1ライン分の電荷が各垂直転送最終段部203に転送された後、水平転送部204に垂直転送する。そして、水平転送部204において、図2(a)に示す、mブロックの1st列と2nd列の電荷を加算し、m+1ブロックの3rd列と4th列の電荷を加算する。
水平転送部204において加算された1ライン分のmブロックの1st列と2nd列の電荷と、m+1ブロックの3rd列と4th列の電荷は、出力アンプ205へ順次水平転送され、出力アンプ205より加算画像信号として出力される。このように水平2画素加算された1ライン分の画像信号が1回の水平同期信号によって出力される。この動作を1フレーム分行うことで、水平2画素加算された動画用の画像信号が出力される。このように、本実施例では、駆動モードや画素加算数に応じて、1ライン分の画像信号を分割して読み出す場合の水平分割数が異なる。
ここで、水平4分割駆動を行う際に、撮像素子102により撮像された画像の画面内に発生する縦線の発生原理について図2、図3を用いて説明する。図3において、縦線は白線で示しており、図3(c)、図3(d)では、4本隣接した縦線を4本の白線を並べて示している。
図3(a)は、図2(a)のように垂直転送部202、垂直転送最終段部203に点欠陥が無い場合の出力画像である。ここで、図2(b)に示すように、垂直転送部202上に点欠陥206が存在する場合、点欠陥206より上に存在するラインに対しては、受光素子201で発生した電荷を垂直転送し、点欠陥206上を通過する際に点欠陥206の影響を受ける。そのため、点欠陥206が存在する列に対して縦線が発生する。また、点欠陥206より下に存在するラインに対しては、受光素子201で発生した電荷を垂直転送部202に読み出す際、点欠陥206上を通過してきた空信号に受光素子201の信号電荷が足される。そのため、点欠陥206が存在する列に対して縦線が発生する。そして、図3(b)に示すように、出力画像に対して1本の縦線が発生する。
また、図2(c)に示すように、垂直転送最終段部203上に点欠陥207が存在する場合、垂直転送最終段部203を共有している列の信号電荷が点欠陥207上を通過する際に、点欠陥207の影響を受ける。そのため、垂直転送最終段部203を共有している列に対して縦線が発生する。そして、図3(c)に示すように、出力画像に対して4本の隣接する縦線が発生する。さらに、図2(d)に示すように、垂直転送部202上に点欠陥208が存在し、垂直転送最終段部203上にも点欠陥209が存在する場合、点欠陥208と点欠陥209上を共に通過する列には、更に大きな縦線が発生する。そして、図3(d)に示すように、出力画像に対して4本の隣接する縦線が発生するが、その中で、4列目に示すような、点欠陥208と点欠陥209の影響を受けた他の3本よりも大きな縦線が1本発生する。
水平2分割駆動を行う際に発生する縦線の発生原理についても同様であるが、水平転送部204にて2列分の電荷が加算されるため、点欠陥207の影響で発生する縦線は2本隣接したものとなる。水平分割駆動を行わない駆動において発生する縦線に関しては、水平転送部204にて電荷が加算されるが、もう一方の例えば、mブロックの3rd列と4th列の信号は出力されないため、水平転送部204における点欠陥207の影響で発生する縦線は1本となる。
次に、水平分割数に応じて、縦線を検出する検出動作について、図4、図5を用いて説明する。図4は、図1における縦線処理部105の内部処理ブロックの構成図である。縦線処理部105は、列データ積分処理部401、ラインメモリ402、メディアン処理部403、縦線アドレス検出部404、アドレス記録部405、縦線補正値検出部406、画像メモリ407、縦線補正部408で構成されている。
図5は、図1及び図4の構成を用いて出力画像の縦線検出を行う際のフローチャートである。縦線が発生するアドレスの検出は、本実施形態では、説明のため非撮像時に予め行うものとする。非撮像時とは、例えば、工場での出荷検査など製造時の調整工程である。ステップS501で縦線検出が開始され、ステップS502では必要な初期設定が行われ、ステップS503において、図1のシステム制御部113により駆動モードが選択される。ステップS504では、撮像素子102の駆動モードに応じた縦線検出画像が取得され、列データ積分処理部401に送られる。ここで、縦線検出画像は、遮光画像、もしくはフォトダイオードの電荷を読み出さずに、垂直転送部202を空転送させた空転送画像のことである。
ステップS505において、列データ積分処理部401によって、全ライン分の縦線検出用画像データを列毎に積分し、ステップS506において、列毎の加算平均データTx(列毎の出力データ)を算出する(xは列番号を表し、1<x<Xである)。ステップS506において算出された列毎の加算平均データTxは、ラインメモリ402に保存される。ステップS507において、メディアン処理部403は、システム制御部113から得られる駆動モードごとに異なる水平分割数情報に基づいて、ラインメモリ402に保存された各列の加算平均データTxに対してメディアン処理を行う。そして、各列におけるメディアン値Mdx(基準データ)を求める(基準データ生成手段)。
ステップS508において、縦線アドレス検出部404は、メディアン処理部403で生成された各列のメディアン値Mdx(基準データ)と、各列の加算平均データTx(出力データ)との差分値Sxの絶対値|Sx|を算出する(差分値算出手段)。各列の加算平均データTx(出力データ)は、ラインメモリ402に保存されている。ステップS509では、縦線アドレス検出部404が、ステップS508で求めた差分値の絶対値|Sx|を所定の縦線判定閾値Aと比較する。ここで、所定の縦線判定閾値Aとは、差分値との比較結果に基づいて、縦線が発生しているか否かを判断するための閾値である。
ステップS509において、|Sx|>Aと判定された場合、ステップS510に進んで、縦線アドレス検出部404が縦線有りと判断する。ステップS511では、ステップS510で検出された縦線が発生するアドレスをアドレス記録部405に記録し、ステップS513に進む。ステップS509において、|Sx|≦Aと判定された場合、ステップS512に進んで、縦線アドレス検出部404が縦線無しと判断し、ステップS513に進む。ステップS513では、列番号xが最終列Xになるまで全ての列を検出し、全ての列の検出が終了するとステップS514で動作終了となる。
次に、メディアン処理を用いた縦線検出動作の詳細な説明を行う。図6及び図7は、縦線検出用の遮光画像から縦線を検出する方法を示す図である。まず、図6(a)及び図7(a)を用いて、水平4分割駆動時の隣接縦線検出動作を説明する。図6(a)において、縦線検出用画像601は、水平4分割駆動時に縦線を検出する際に取得する遮光画像であり、4本隣接した縦線602が発生している。縦線検出用画像601において、Xアドレスがx、Yアドレスがyである位置(1≦x≦X1、1≦y≦Y1)の信号値をtxyとする。X1,Y1は、図6(a)に示す縦線検出用画像601の最大Xアドレス、Yアドレスを示している。また、4本隣接した縦線602のXアドレスが、左からそれぞれ、a列、a+1列、a+2列、a+3列であるものとする。
図7(a)は、a列とその周辺の複数列であるa‐4列〜a+7列の加算平均データTa‐4〜Ta+7(出力データ)を用いて、a列、a+1列、a+2列、a+3列のメディアン値Mda、Mda+1、Mda+2、Mda+3(基準データ)を求める様子を示す。例えば、縦線検出対象列であるa列における各行の信号値ta〜taY1の加算平均データTaは、(ta1+ta2+・・・taY1)/Y1で算出され、周辺の複数列についても同様に求められる。また、各列の基準データであるメディアン値Mda、Mda+1、Mda+2、Mda+3を求める際に用いる周辺列の加算平均データTを斜線枠で示している。例えば、a列におけるメディアン値Mda(基準データ)は、a列とa列を中心とした縦線検出対象列周辺の左右4列分の計9個の加算平均データ(Ta‐4,Ta‐3,Ta‐2,Ta‐1,Ta,Ta+1,Ta+2、Ta+3,Ta+4)から求める。
ここで求められたa列の基準データであるメディアン値Mdaと出力データである加算平均データTaの差分値の絶対値|Sa|を算出し、所定の縦線判定閾値Aと比較する。その結果、|Sa|≧Aであると判定された場合には、その列に縦線が発生していると判定され、縦線アドレスとしてアドレス記録部405に記録される。a+1列、a+2列、a+3列についても、それぞれ周辺の複数列の出力データである加算平均データを用いて基準データであるメディアン値を求め、所定の縦線判定閾値Aと比較することで縦線が発生しているか否かを判定する。
図7(d)は、駆動モードに応じて、水平分割数とメディアン処理に用いるデータ数の関係を示した表である。水平4分割駆動を行う静止画撮影時には、最大4本隣接する縦線が発生するため、メディアン処理を行う際、縦線検出対象列とその周辺複数列である左右4列分の計9個の出力データである加算平均データを用いてメディアン処理を行うことを示している。このように、水平4分割駆動を行なう際に、4本隣接する縦線の影響を受けることなくメディアン処理を行なうことが可能になり、図6(a)に示すような4本隣接する縦線を全て検出することができる。
次に、図6(b)及び図7(b)を用いて、水平2分割駆動時の隣接縦線検出動作を説明する。図6(b)において、縦線検出用画像603は、水平2分割駆動時に縦線を検出する際に取得する遮光画像であり、2本隣接した縦線604が発生している。縦線検出用画像603において、Xアドレスがx、Yアドレスがyである位置(1≦x≦X2、1≦y≦Y2)の信号値をtxyとする。X2,Y2は、図6(b)に示す縦線検出用画像603の最大Xアドレス、Yアドレスを示している。また、2本隣接した縦線604のXアドレスが、左からそれぞれ、c列、c+1列であるものとする。ここで、c列とc+1列とその周辺の複数列であるc‐2列〜c+3列は、水平転送部204において2列分の電荷が加算された後に対応するアドレスである。
図7(b)は、c列とその周辺の複数列であるc‐2列〜c+3列の出力データである加算平均データTc‐2〜Tc+3を用いて、c列、c+1列の基準データであるメディアン値Mdc、Mdc+1を求める様子を示している。例えば、縦線検出対象列であるc列における各行の信号値tc1〜tcY2の加算平均データTcは、(tc1+tc2+・・・tcY2)/Y2で算出され、周辺の複数列についても同様に求められる。また、c列、c+1列の基準データであるメディアン値Mdc、Mdc+1を求める際に用いる周辺列の加算平均データTを斜線枠で示している。例えば、縦線検出対象列であるc列における基準データであるメディアン値Mdcは、c列とc列を中心とした左右2列分の計5個の加算平均データ(Tc‐2,Tc‐1,Tc,Tc+1,Tc+2)から求める。
ここで求められたc列の基準データであるメディアン値Mdcと出力データである加算平均データTcの差分値の絶対値|Sc|を算出し、所定の縦線判定閾値Aと比較する。その結果、|Sc|≧Aであると判定された場合には、その列に縦線が発生していると判定され、縦線アドレスとしてアドレス記録部405に記録される。c+1列についても、周辺の複数列の出力データである加算平均データを用いて基準データであるメディアン値を求め、所定の縦線判定閾値Aと比較することで縦線が発生しているか否かを判定する。
水平2分割駆動を行う画素加算静止画撮影時には、最大2本隣接する縦線が発生する。そのため、図7(d)では、メディアン処理を行う際、縦線検出対象列とその周辺複数列である左右2列分の計5個の出力データである加算平均データを用いてメディアン処理を行うことを示している。このように、水平2分割駆動を行なう際に、2本隣接する縦線の影響を受けることなくメディアン処理を行なうことが可能になり、図6(b)に示すような2本隣接する縦線全てを検出することができる。
次に、図6(c)及び図7(c)を用いて、水平分割無し駆動時の縦線検出動作を説明する。図6(c)において、縦線検出用画像605は、水平分割なし駆動時に縦線を検出する際に取得する遮光画像であり、1本の縦線606が発生している。縦線検出用画像605において、Xアドレスがx、Yアドレスがyである位置(1≦x≦X3、1≦y≦Y3)の信号値をtxyとする。X3,Y3は、図6(c)に示す縦線検出用画像605の最大Xアドレス、Yアドレスを示している。また、1本発生する縦線606のXアドレスが、e列であるものとする。ここで、e列とその周辺の複数列であるe‐1列〜e+1列は、水平転送部204において2列分の電荷が加算された後に対応するアドレスである。
図7(c)は、e列の周辺の複数列であるe‐1列〜e+1列の出力データである加算平均データTe‐1〜Te+1を用いて、e列の基準データであるメディアン値Mdeを求める様子を示している。例えば、縦線検出対象列であるe列における各行の信号値te1〜teY3の加算平均データTeは、(te1+te2+・・・teY3)/Y3で算出され、周辺の複数列についても同様に求められる。また、e列の基準データであるメディアン値Mdeを求める際に用いる周辺列の加算平均データTを斜線枠で示している。縦線検出対象列であるe列における基準データであるメディアン値Mdeは、e列とe列を中心とした左右1列分の計3個の加算平均データ(Te‐1,Te,Te+1)から求める。
ここで求められたe列の基準データであるメディアン値Mdeと出力データである加算平均データTeの差分値の絶対値|Se|を算出し、所定の縦線判定閾値Aと比較する。その結果、|Se|≧Aであると判定された場合には、その列に縦線が発生していると判定され、縦線アドレスとしてアドレス記録部405に記録される。
図7(d)では、水平分割駆動を行わない動画撮影時には、縦線検出対象列とその周辺複数列である左右1列分の計3個の出力データである加算平均データを用いてメディアン処理を行うことが示されている。このように、水平分割駆動を行わない場合に、図6(c)に示すような縦線を検出することができる。なお、図7(d)においてメディアン処理に用いるデータ数については、検出列の左右同数が望ましいが、水平分割数の2倍より多ければ、同数でなくても構わない。
以上のように、水平分割数の2倍以上の出力データ数からメディアン処理を行い、メディアン値と加算平均データの差分値の絶対値を検出することで、隣接する縦線の影響を受けることなく、当該列の縦線を検出することができる。なお、ここでは、縦線判定閾値Aを各駆動モード共通なものとして説明したが、駆動モードに応じて、縦線判定閾値をそれぞれ異なる値に設定しても構わない。
次に、撮像動作時における縦線の補正動作を、図8のフローチャートを用いて説明する。ステップS801において電源がONされ、ステップS802においてユーザーが各種設定を行った後、ステップS803においてモードが選択されると、ステップS804において撮影が開始される。撮影が開始されると、ステップS805において、被写体画像信号を読み出す前に縦線補正用画像が取得され、ステップS806において、列データ積分処理部401により縦線補正用画像データを列ごとに全ライン分を積分し、加算平均データを取得する。ここで、縦線補正用画像は、遮光画像、もしくはフォトオードの電荷を読み出さずに、垂直転送部202を空転送させた空転送画像のことである。
ステップS807では、アドレス記録部405に縦線アドレスが記録されている列について、ステップS806で算出された各列の加算平均データを基に縦線補正値算出部406が縦線補正値を算出する。ステップS808において、撮像素子102から被写体画像信号が読み出される。ステップS809において、縦線補正部407は、ステップS808で読み出された被写体画像信号に対して、ステップS807で縦線が発生している列について算出された縦線補正値を減算することで縦線を補正する。ステップS810において、撮影動作を終了するかどうかを判定し、撮影動作を続ける場合には、ステップS805に戻る。また、ステップS810において、撮影動作を終了すると判定した場合には、ステップS811に進んで処理を終了する。
なお、縦線アドレスの検出は、例えば、工場の出荷検査などの非撮影時だけでなく、実際の被写体撮像時に同時に行うことも可能である。図9は、被写体の撮影時に縦線検出を行なう場合のフローチャートである。図9(a)は、基本的に図8と同じであるため、図8に示す処理と同一の処理については同一符号を付して説明を省略する。
ステップS806において、列データ積分処理部401により縦線補正用画像データを列ごとに全ライン分を積分し、加算平均データを取得するライン積分処理の後、ステップS901において図9(b)に示す縦線アドレス検出処理を実行する。なお、図9(b)のステップS902からステップS910までの動作は、図5におけるステップS506からステップS514までの動作と同様であるため、詳細な説明は省略する。図9(a)のステップS901における縦線アドレス検出処理が終わると、ステップS807において、縦線補正値算出部406が縦線補正値を算出する。このような、ステップS901(図9(b))の縦線検出処理動作を行うことで、実際の被写体撮像時に縦線の検出を行なうことができる。
以上のように、本実施例1では、撮像素子の駆動モード毎に異なる水平分割数に応じて、メディアン処理に用いる縦線検出対象列周辺の複数画素列の出力データ数を切り替える。そして、水平分割駆動を行うことで発生する複数隣接した縦線を検出することが可能となる。また、メディアン処理に用いる画素列数を水平分割数に応じて変更することで、工場の出荷検査時に縦線アドレス検出を行う場合は、製造時の調整時間の短縮、実撮像時に縦線アドレス検出を行う場合は、フレームレートの最適化が可能となる。
(実施例2)
実施例1において、複数隣接した縦線を検出する際、水平分割数に応じてメディアン処理に用いるデータ数を切り替える動作を説明した。実施例2では、移動平均処理を用いて隣接縦線を検出する方法を説明する。移動平均処理を用いる際、複数隣接した縦線の影響を少なくするために、隣接数が多くなる水平分割駆動を行うモードにおいては、移動平均処理に用いるデータ数を多くする。図10は、実施例2における縦線処理部105の内部処理ブロックの構成図であり、図4と同一の構成については、同一符号を付して説明を省略する。図10に示す移動平均処理部1001は、列データ積分処理部401によって処理され、ラインメモリ402に保存されている各列の積分データから、各列に対する移動平均値を算出する。
次に、実施例2における縦線検出を行なう際の動作を図11のフローチャートを用いて説明する。図5に示す処理と同一処理については、同一符号を付して説明を省略する。
ステップS1101において、移動平均処理部901は、システム制御部113から得られる駆動モードごとに異なる水平分割数情報に基づいて、ラインメモリ402に保存された各列の加算平均データTxに対して移動平均演算処理を行う。そして、各列における移動平均値Idx(基準データ)を求める(xは列番号を表し、1<x<Xである)。ステップS1102において、縦線アドレス検出部404は、移動平均処理部901で処理された各列の移動平均値Idx(基準データ)と、ラインメモリ402に保存されている各列の加算平均データTx(出力データ)との差分値Lxの絶対値|Lx|を算出する。ステップS1103では、縦線アドレス検出部404が、ステップS1002で求めた差分値の絶対値|Lx|を所定の縦線判定閾値Bと比較する。ここで、所定の縦線判定閾値Bとは、縦線と判断するための閾値である。
ステップS1103において、|Sx|>Bと判定された場合、ステップS510に進んで、縦線アドレス検出部404が縦線有りと判断する。ステップS511では、ステップS510で検出された縦線が発生するアドレスをアドレス記録部405に記録し、ステップS513に進む。ステップS1103において、|Sx|≦Bと判定された場合、ステップS512に進んで、縦線アドレス検出部406が縦線無しと判断し、ステップS513に進む。ステップS513では、列番号xが最終列Xになるまで全ての列を検出し、全ての列の検出が終了するとステップS514で動作終了となる。
次に、移動平均演算処理を用いた縦線検出動作の詳細な説明を行う。ここでは、実施例1を説明する際に用いた図6を用いて説明する。また、移動平均値Idは、当該列を含む左右複数の加算平均データの平均値であるものとする。まず、水平4分割駆動時に移動平均演算処理を用いた隣接縦線検出動作を説明する。
実施例1と同様に、縦線検出用画像601において、Xアドレスがx、Yアドレスがyである位置(1≦x≦X1、1≦y≦Y1)の信号値をtxyとする。また、4本隣接した縦線602のXアドレスが、左からそれぞれ、a列、a+1列、a+2列、a+3列であるものとする。
a列における各行の信号値ta〜taY1の加算平均データTaは、(ta1+ta2+・・・taY1)/Y1で算出される。a列における基準データである移動平均値Idaは、a列とa列を中心とした左右10列分の計21個の加算平均データから下記の式にて算出される。
Ida=((Ta‐10)+(Ta‐9)+・・・+(Ta)+(Ta+1)+・・・
+(Ta+9)+(Ta+10))/21
ここで求められたa列の基準データである移動平均値Idaと出力データである加算平均データTaの差分値の絶対値|La|を算出し、所定の縦線判定閾値Bと比較する。その結果、|La|≧Bであると判定された場合には、その列に縦線が発生していると判定され、縦線アドレスとしてアドレス記録部405に記録される。
図12は、駆動モードに応じて、水平分割数と移動平均処理に用いるデータ数の関係を示した表である。水平4分割駆動を行う静止画撮影時には、最大4本隣接する縦線が発生するため、移動平均処理を行う際、縦線検出対象列とその周辺複数列である左右10列分の計21個の加算平均データを用いて移動平均処理を行うことを示している。そのため、4本隣接した縦線の影響を受けることなく移動平均処理を行なうことが可能になり、図6(a)に示すような4本隣接する縦線を全て検出することができる。
次に、水平2分割駆動時の移動平均処理を用いた隣接縦線検出動作を説明する。縦線検出用画像603において、Xアドレスがx、Yアドレスがyである位置(1≦x≦X2、1≦y≦Y2)の信号値をtxyとする。実施例1と同様に、2本隣接した縦線604のXアドレスが、左からそれぞれ、c列、c+1列であるものとする。縦線検出対象列であるc列における各行の信号値tc1〜tcY2の加算平均データTcは、(tc1+tc2+・・・tcY2)/Y2で算出される。c列における基準データである移動平均値Idcは、c列とc列を中心とした左右5列分の計11個の加算平均データから下記の式にて算出される。
Idc=((Tc‐5)+(Tc‐4)+・・・+(Tc)+(Tc+1)+・・・
+(Tc+4)+(Tc+5))/11
ここで求められたc列の基準データである移動平均値Idcと出力データである加算平均データTcの差分値の絶対値|Lc|を算出し、所定の縦線判定閾値Bと比較する。その結果、|Lc|≧Bであると判定された場合には、その列に縦線が発生していると判定され、縦線アドレスとしてアドレス記録部405に記録される。また、水平2分割駆動を行う画素加算静止画撮影時に最大2本隣接する縦線が発生する。そのため、図12では、移動平均演算処理を行う際、縦線検出対象列とその周辺複数列である左右5列分の計11個の出力データである加算平均データを用いて移動平均処理を行うことが示されている。そのため、2本隣接した縦線の影響を受けることなく移動平均処理を行なうことが可能になり、図6(b)に示すような2本隣接する縦線全てを検出することができる。
次に、水平分割無し駆動時に移動平均処理を用いた縦線検出動作を説明する。縦線検出用画像605において、Xアドレスがx、Yアドレスがyである位置(1≦x≦X3、1≦y≦Y3)の信号値をtxyとする。実施例1と同様に、1本発生する縦線606のXアドレスが、e列であるものとする。縦線検出対象列であるe列における各行の信号値te1〜teY3の加算平均データTeは、(te1+te2+・・・teY3)/Y3で算出される。検出対象列であるe列における基準データである移動平均値Ideは、e列とe列を中心に左右2列分の計5個の加算平均データから下記の式にて算出される。
Ide=((Te‐2)+(Te‐1)+(Te)+(Te+1)+(Te+2))/5
ここで求められたe列の基準データである移動平均値Ideと出力データである加算平均データTeの差分値の絶対値|Le|を算出し、所定の縦線判定閾値Bと比較する。その結果、|Le|≧Bであると判定された場合には、その列に縦線が発生していると判定され、縦線アドレスとしてアドレス記録部405に記録される。また、図12では、動画撮影時には水平分割駆動を行わないため、縦線検出対象列とその周辺複数列である左右3列分の計7個の加算平均データを用いて移動平均処理を行うことが示されている。そして、図6(c)に示すような1本発生する縦線を検出することができる。なお、ここでは、縦線判定閾値Bを各駆動モード共通なものとして説明したが、駆動モードに応じて、縦線判定閾値Bをそれぞれ異なる値に設定しても構わない。
以上のように、本実施例では、移動平均値を算出する際に縦線の影響を極力少なくするために、例えば、水平4分割駆動を行う駆動モードにおいては、移動平均演算処理に用いる周辺列の加算平均データをその他のモードよりも多くした。移動平均値の算出に用いるデータ数については、縦線の影響を十分に低減でき、かつ、加算平均データTxのバラツキを十分に低減できる数であれば、図12に示したようなデータ数に限られるものではない。本実施例2においては、縦線の影響を1/5にすることで、移動平均値の精度が十分満たせると仮定して、移動平均値の算出に用いるデータ数を水平分割数の5倍以上に設定している。また、移動平均値を算出する際に当該列データを含めて算出しているが、当該列のデータを含めず算出するなど、その他の方式で求めても構わない。
以上のように、本実施例2では、駆動モード毎に異なる水平分割数に応じて、移動平均処理に用いる画素列のデータ数を切り替えることで、水平分割駆動を行なうことで発生する複数隣接した縦線を検出することが可能となる。
(実施例3)
実施例1では、メディアン処理を行なう際に、当該列のデータおよび当該列の左右のデータを用いてメディアン値を算出する例について説明した。しかし、複数隣接した縦線が発生する場合には、メディアン処理に用いる左右のデータに縦線が含まれてしまう。そのため、メディアン処理に用いる当該列に対して左右の列データを水平分割数より多くする必要があった。そこで、実施例3では、水平分割数に応じて、メディアン処理に用いる左右のデータとして水平分割数おきの列データを用いることで、メディアン処理に用いるデータを最小にすることが可能である。なお、撮像装置の構成、検出動作は、図1、図5に示す実施例1と同様である。
次に、実施例3におけるメディアン処理を用いた詳細な縦線検出動作の説明を行う。実施例1と同様に図6を用いて説明する。まず、水平4分割駆動時に隣接縦線検出動作を説明する。図6(a)において、縦線検出用画像601は、水平4分割駆動時に縦線を検出する際に取得する遮光画像であり、4本隣接した縦線602が発生している。縦線検出用画像601において、Xアドレスがx、Yアドレスがyである位置(1≦x≦X1、1≦y≦Y1)の信号値をtxyとする。X1,Y1は、図6(a)に示す縦線検出用画像601の最大Xアドレス、Yアドレスを示している。実施例1と同様に、4本隣接した縦線602のXアドレスが、左からそれぞれ、a列、a+1列、a+2列、a+3列であるものとする。
図13(a)は、a列とその周辺列であるa‐4列〜a+7列の加算平均データTa‐4〜Ta+7(出力データ)を用いて、a列、a+1列、a+2列、a+3列のメディアン値Mda、Mda+1、Mda+2、Mda+3(基準データ)を求める様子を示す。例えば、縦線検出対象列であるa列における各行の信号値ta〜taY1の加算平均データTaは、(ta1+ta2+・・・taY1)/Y1で算出され、周辺の複数列についても同様に求められる。また、各列の基準データであるメディアン値Mda、Mda+1、Mda+2、Mda+3を求める際に用いる周囲列の加算平均データTを斜線枠で示している。例えば、縦線検出対象列であるa列における基準データであるメディアン値Mdaは、a列とa列から左右にそれぞれ水平分割数の列だけ離れたブロックにおける計3個の加算平均データ(Ta‐4,Ta,Ta+4)から求める。
ここで求められたa列の基準データであるメディアン値Mdaと出力データである加算平均データTaの差分値の絶対値|Sa|を算出し、所定の縦線判定閾値Aと比較する。その結果、|Sa|≧Aであると判定された場合には、その列に縦線が発生していると判定され、縦線アドレスとしてアドレス記録部405に記録される。a+1列、a+2列、a+3列についても、それぞれ周辺の複数列の出力データである加算平均データを用いて基準データであるメディアン値を求め、所定の縦線判定閾値Aと比較することで縦線が発生しているか否かを判定する。
図13(d)は、駆動モードに応じて、水平分割数とメディアン処理に用いるデータ数、メディアン処理に用いるデータ参照列の関係を示した表である。水平4分割駆動を行う静止画撮影時には、最大4本隣接する縦線が発生する。そのため、メディアン処理を行う際、縦線検出対象列と当該列から左右それぞれにおいて水平分割数である4列だけ離れた列における出力データである加算平均データを用いてメディアン処理を行なうことを示している。このように、水平4分割駆動を行なう際に、4本隣接する縦線の影響を受けることなくメディアン処理を行なうことが可能になり、図6(a)に示すような4本隣接する縦線を全て検出することができる。
次に、図6(b)を用いて、水平2分割駆動時の隣接縦線検出動作を説明する。図6(b)において、縦線検出用画像603は、水平2分割駆動時に縦線を検出する際に取得する遮光画像であり、2本隣接した縦線604が発生している。縦線検出量画像603において、Xアドレスがx、Yアドレスがyである位置(1≦x≦X2、1≦y≦Y2)の信号値をtxyとする。X2,Y2は、図6(b)に示す縦線検出用画像603の最大Xアドレス、Yアドレスを示している。また、実施例1と同様に、2本隣接した縦線604のXアドレスが、左からそれぞれ、c列、c+1列であるものとする。
図13(b)は、c列とその周辺の複数列であるc‐2列〜c+3列の出力データである加算平均データTc‐2〜Tc+3を用いて、c列、c+1列の基準データであるメディアン値Mdc、Mdc+1を求める様子を示している。例えば、縦線検出対象列であるc列における各行の信号値tc1〜tcY2の加算平均データTcは、(tc1+tc2+・・・tcY2)/Y2で算出され、周辺の複数列についても同様に求められる。また、c列、c+1列の基準データであるメディアン値Mdc、Mdc+1を求める際に用いる周辺列の加算平均データTを斜線枠であらわしている。例えば、縦線検出対象列であるc列における基準データであるメディアン値Mdcは、c列とc列から水平分割数である2列だけ離れた列における計3個の加算平均データ(Tc‐2,Tc,Tc+2)から求める。
ここで求められたc列の基準データであるメディアン値Mdcと出力データである加算平均データTcの差分値の絶対値|Sc|を算出し、所定の縦線判定閾値Aと比較する。その結果、|Sc|≧Aであると判定された場合には、その列に縦線が発生していると判定され、縦線アドレスとしてアドレス記録部405に記録される。c+1列についても、周辺の複数列の出力データである加算平均データを用いて基準データであるメディアン値を求め、所定の判定閾値Aと比較することで縦線が発生しているか否かを判定する。
水平2分割駆動を行う画素加算静止画撮影時には、最大2本隣接する縦線が発生する。そのため、図13(d)では、メディアン処理を行う際、縦線検出対象列と当該列から水平分割数である2列だけ離れた列における出力データである加算平均データを用いてメディアン処理を行なうことを示している。このように、水平2分割駆動を行なう際に、2本隣接する縦線の影響を受けることなくメディアン処理が可能になり、図6(b)に示すような2本隣接する縦線を全て検出することができる。
次に、図6(c)を用いて、水平分割無し駆動時の縦線検出動作を説明する。図6(c)において、縦線検出用画像605は、水平分割なし駆動時に縦線を検出する際に取得する遮光画像であり、1本の縦線606が発生している。縦線検出用画像605において、Xアドレスがx、Yアドレスがyである位置(1≦x≦X3、1≦y≦Y3)の信号値をtxyとする。X3,Y3は、図6(c)に示す縦線検出用画像605の最大Xアドレス、Yアドレスを示している。また、実施例1と同様に、1本発生する縦線606のXアドレスが、e列であるものとする。
図13(c)は、e列の周辺の複数列であるe‐1列〜e+1列の出力データである加算平均データTe‐1〜Te+1を用いて、e列の基準データであるメディアン値Mdeを求める様子を示している。例えば、縦線検出対象列であるe列における各行の信号値te1〜teY3の加算平均データTeは、(te1+te2+・・・teY3)/Y3で算出され、周辺の複数列についても同様に求められる。また、e列のメディアン値Mdeを求める際に用いる周囲の加算平均データTを斜線枠であらわしている。縦線検出対象列であるe列における基準データであるメディアン値Mdeは、e列とe列から水平分割数である1列だけ離れた両隣の列における計3個の加算平均データ(Te‐1,Te,Te+1)から求める。
ここで検出されたe列の基準データであるメディアン値Mdeと出力データである加算平均データTeの差分値の絶対値|Se|を算出し、所定の縦線判定閾値Aと比較する。その結果、|Se|≧Aであると判定された場合には、その列に縦線が発生していると判定され、縦線アドレスとしてアドレス記録部405に記録される。
図13(d)では、水平分割駆動を行わない動画撮影時には、複数本隣接する縦線は発生しないため、縦線検出対象列と左右1列分の計3個の出力データである加算平均データを用いてメディアン処理を行なうことが示されている。
以上のように、本実施例3では、駆動モード毎に異なる水平分割数に応じて、メディアン処理に用いるデータの参照列を変えることで、水平分割駆動を行なうことで発生する複数隣接した縦線を検出することが可能となる。また、駆動モードに応じて水平分割数が異なる場合に、縦線を検出する際のメディアン処理に用いるメディアン値を水平分割数だけ離れた列の加算平均データから算出する。そして、メディアン処理の際に用いる加算平均データ数を少なくした場合でも隣接する縦線の影響を排除可能となる。
以上、3つの実施例を用いて説明した通り、複数の駆動モードに応じて水平分割数の異なる駆動を行うことで生じる隣接縦線を検出する際に、当該列の周辺データを水平分割数に応じて変更することにより、隣接縦線を精度よく検出することが可能である。
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。