JP3630187B2 - 画像処理装置、及び、画像処理方法 - Google Patents
画像処理装置、及び、画像処理方法 Download PDFInfo
- Publication number
- JP3630187B2 JP3630187B2 JP08073295A JP8073295A JP3630187B2 JP 3630187 B2 JP3630187 B2 JP 3630187B2 JP 08073295 A JP08073295 A JP 08073295A JP 8073295 A JP8073295 A JP 8073295A JP 3630187 B2 JP3630187 B2 JP 3630187B2
- Authority
- JP
- Japan
- Prior art keywords
- shading
- block
- register
- luminance
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
- Image Processing (AREA)
- Image Generation (AREA)
Description
【産業上の利用分野】
本発明は、実画像に対応した写実的なシェーディング処理をオブジェクト画像に施すことができる画像処理装置、及び、画像処理方法に関する。
【0002】
【従来の技術】
近年、CG(コンピュータ・グラフィックス)技術の発達に伴い、3次元モデルによるオブジェクト画像にレンダリングやシェーディング等のCG処理を施し、オブジェクト画像をより自然で写実的に表示する技術が各種実用化されている。なお、シェーディングとは、レンダリングにより隠面除去されたオブジェクトの面の見え方、すなわち、オブジェクトを照す光源方向に基づきオブジェクトの面性質(色、反射率、透過率など)に従ってオブジェクト可視面に陰影を付ける処理を指すものを言う。
【0003】
【発明が解決しようとする課題】
ところで、近年では、実際に撮像した実画像上にオブジェクト画像をスーパーインポーズ表示して仮想現実感を創出する技術も開発されている。さて、こうした表示態様にあっては、上述したCG処理が施されるオブジェクト画像と実画像との間には相関関係が存在しない。このため、実画像中における光源方向に対応してオブジェクト画像にシェーディング処理を施さないと、いかにオブジェクト画像を3次元表示させたとしても、両者をスーパーインポーズした画像は不自然さが目立つという弊害が生じる。
【0004】
このような弊害を回避するためには、実画像を撮像した時の光源方向や明るさに対応してシェーディングが付与された複数のオブジェクト画像を予め用意しておき、これらの内から実画像の撮像条件に一致するものを選択してスーパーインポーズ表示すれば、上述した不自然さが解消し得る。
しかしながら、そうした場合には、膨大なデータ量で形成される3次元モデルのオブジェクト画像を、フレーム毎に用意しなければならず、時々刻々変化する実画像に対応させることは現実的でない。そのため、時々刻々変化する実画像に対応して2次元のオブジェクト画像を、あたかも3次元像のように簡易的に写実表現させる技術が待望されている状況にある。
【0005】
本発明は、上述した事情に鑑みてなされたもので、時々刻々変化する実画像に対応してオブジェクト画像を簡易的に写実表現し得る画像処理装置、及び、画像処理方法を提供することを目的としている。
【0006】
【課題を解決するための手段】
上記目的を達成するため、請求項1に記載の発明では、撮像された実画像の輝度情報をフレーム毎に抽出する輝度情報抽出手段と、この輝度情報抽出手段により抽出された1フレーム分の輝度情報を所定画素領域のブロックで面分割し、面分割された複数のブロック毎の平均輝度を算出する平均輝度発生手段と、この平均輝度発生手段により得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とからシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生するシェーディング条件発生手段と、前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生手段によって発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するシェーディング付与手段とを具備することを特徴としている。
【0007】
請求項1に従属する請求項2に記載の発明によれば、記載前記平均輝度発生手段は、所定画素領域で形成されるブロックに含まれる各画素毎の輝度情報を累算した値を、当該ブロック内の総画素数で除算して当該ブロックの平均輝度を発生することを特徴とする。
【0008】
請求項1又は2に従属する請求項3に記載の発明によれば、前記シェーディング条件発生手段は、最も高輝度のブロック位置と最も低輝度のブロック位置との間に位置するブロックを前記シェーディング領域と判定する。
【0009】
請求項1又は2に従属する請求項4に記載の発明によれば、前記シェーディング条件発生手段は、最も高輝度のブロック位置に対して前記シェーディング領域に含まれる各ブロックが8方位のいずれに位置するかを判断してシェーディング方向を定めることを特徴とする。
【0010】
請求項1又は2に従属する請求項5に記載の発明によれば、前記シェーディング条件発生手段は、最も高輝度のブロック位置と最も低輝度のブロック位置との座標差を(X3,Y3)、最も高輝度のブロック位置から前記シェーディング領域の各ブロック位置までの座標差を(Xs1,Ys1)とした場合、これら各ブロックのシェーディング率を(Xs1/X3)・(Ys1/Y3)で算出することを特徴とする。
【0011】
請求項1乃至5の何れかに従属する請求項6に記載の発明によれば、前記シェーディング付与手段は、オブジェクト画像の表示長と、当該オブジェクト画像の表示位置に対応するブロックのシェーディング率とを乗算して当該オブジェクト画像におけるシェーディング領域を判定し、判定したシェーディング領域に含まれる各画素の階調を、対応するシェーディング方向に従って順次低減させてシェーディングを付与することを特徴とする。
【0012】
さらに、本発明の別態様による請求項7に記載の発明では、外部から供給される映像信号にフィルタリングを施して得た輝度信号を、フィールド走査に同期して輝度情報に変換する変換手段と、この変換手段により変換された複数走査ライン分の輝度情報を帰線消去期間中に所定画素幅で分割してなる各ブロック毎の平均輝度を算出し、算出した平均輝度を複数フィールド走査分蓄積して1画面分のブロックの平均輝度を発生する平均輝度発生手段と、この平均輝度発生手段により得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とに応じてシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生するシェーディング条件発生手段と、前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生手段によって発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するシェーディング付与手段とを具備することを特徴としている。
また上記目的を達成するため、請求項8に記載の発明では、撮像された実画像の輝度情報をフレーム毎に抽出する輝度情報抽出ステップと、この輝度情報抽出ステップにて抽出された1フレーム分の輝度情報を所定画素領域のブロックで面分割し、面分割された複数のブロック毎の平均輝度を算出する平均輝度発生ステップと、この平均輝度発生ステップにて得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とからシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生するシェーディング条件発生ステップと、前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生ステップにて発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するシェーディング付与ステップとからなることを特徴としている。
さらに、本発明の別態様による請求項9に記載の発明では、外部から供給される映像信号にフィルタリングを施して得た輝度信号を、フィールド走査に同期して輝度情報に変換する変換ステップと、この変換ステップにて変換された複数走査ライン分の輝度情報を帰線消去期間中に所定画素幅で分割してなる各ブロック毎の平均輝度を算出し、算出した平均輝度を複数フィールド走査分蓄積して1画面分のブロックの平均輝度を発生する平均輝度発生ステップと、この平均輝度発生ステップにて得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とに応じてシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生するシェーディング条件発生ステップと、前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生ステップにて発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するシェーディング付与ステップとからなることを特徴としている。
【0013】
【作用】
本発明では、輝度情報抽出手段が撮像された実画像の輝度情報をフレーム毎に抽出すると、平均輝度発生手段が抽出された1フレーム分の輝度情報を所定画素領域のブロックで面分割し、面分割された複数のブロック毎の平均輝度を算出し、シェーディング条件発生手段がこの平均輝度発生手段により得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とからシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生する。そして、シェーディング付与手段が実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生手段によって発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与する。
したがって、2次元のオブジェクト画像に対して、実画像を撮像した時の光源方向に応じてシェーディングを施すので、時々刻々変化する実画像に対応してオブジェクト画像を簡易的に写実表現することが可能になる。
また本発明では、撮像された実画像の輝度情報を輝度情報抽出ステップにてフレーム毎に抽出すると、平均輝度発生ステップにおいてこの輝度情報抽出ステップにて抽出された1フレーム分の輝度情報を所定画素領域のブロックで面分割し、面分割された複数のブロック毎の平均輝度を算出する。そして、シェーディング条件発生ステップがこの各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とからシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生すると、前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合には、シェーディング付与ステップが前記シェーディング条件発生ステップにて発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与する。
したがって、2次元のオブジェクト画像に対して、実画像を撮像した時の光源方向に応じてシェーディングを施すので、時々刻々変化する実画像に対応してオブジェクト画像を簡易的に写実表現することが可能になる。
【0014】
【実施例】
以下では、先ず本発明の概要について説明し、続いて図面を参照して本発明による実施例について説明するものとする。
A.発明の概要
実際に撮像した実画像とオブジェクト画像とをスーパーインポーズ表示して仮想現実感を創出する場合には、前述したように、時々刻々変化する実画像に対応してオブジェクト画像にシェーディング(陰影)を付与して立体表現しないと不自然さが目立ってしまう。
ところで、立体表現されるオブジェクト画像、つまり、3次元モデルによるオブジェクト画像では、CG処理を施すことで極めて実景に近いものとなるが、処理すべきデータ量が膨大で実画像上の光源方向に対応してリアルタイムにCG処理を施すことはハードウェア上の制約もあり現実的でない。
【0015】
そこで、本発明では、データ量が膨大となる3次元モデルによるオブジェクト画像に替えて2次元のオブジェクト画像を用い、これを簡易的に立体表現するようにシェーディング(陰影)を施す。シェーディングは、次の手順でなされる。最初に、撮像された実画像の1フレーム毎に所定ドット(画素)で形成されるブロック毎(後述する)の輝度情報を抽出し、抽出した各ブロックの輝度情報に基づきフレーム中の光源方向を検出する。次に、検出した光源方向とフレーム内のオブジェクト画像位置とに応じて当該オブジェクト画像に付与するシェーディング範囲を定め、かつ、予め決められた形状(すなわち、オブジェクトの形)に対応したシェーディング率でオブジェクト画像データの濃淡(陰影)を調整する。これにより、時々刻々変化する実画像に対応してオブジェクト画像を簡易的に写実表現し得る訳である。
なお、上記シェーディング率とは、光源方向、形状および面性質とで予め定まる陰影率を指し、その値は経験則的に得られる。具体的に言えば、例えば、オブジェクト形状が「球」であって、その表面が光沢性のものの場合、表面にはハイライト部分とシャドウ部分とが広がり、その際の濃淡比率に相当する。本実施例においては、オブジェクト形状を「球」とした場合について言及している。
【0016】
B.第1実施例の構成
次に、図面を参照して本発明による実施例について説明する。まず、図1は本発明の第1実施例による画像処理装置の全体構成を示すブロック図である。この図において、1はCCDカメラであり、後述する画像処理DSP5から供給される水平/垂直同期信号、水平/垂直駆動信号に応じて撮像信号SSを発生する。2はCCDカメラ1から供給される撮像信号SSを、コンポジットビデオ信号CV、色差信号B−Y,R−Yあるいは輝度信号Yに変換して出力する映像出力エンコーダである。このCCDカメラ1と映像出力エンコーダ2とは、撮像部3を形成しており、以下、図2を参照して撮像部3の構成について説明する。
【0017】
図2において、1aは撮像対象を後述のCCD1g上に結像させる光学系である。1bは赤外光をカットするカットフィルタ、1cはカラーフィルタ、1dは発振回路である。1eはクロック発生回路であり、例えば、8倍オーバーサンプリング信号8fSCを発生して出力する。クロック発生回路1eは、この8倍オーバーサンプリング信号8fSCを次段のクロックドライバ1fに供給すると共に、CCD13から出力される撮像信号SSをサンプリング画像データDSに変換する画像出力エンコーダ2に供給する。
【0018】
クロックドライバ1fは、クロック発生回路1eから供給される8倍オーバーサンプリング信号8fSCに基づき、水平駆動信号、垂直駆動信号、水平/垂直同期信号および帰線消去信号等の各種タイミングに応じた撮像駆動信号を発生してCCD1gに供給する。CCD1gは、この撮像駆動信号に従って対象物を撮像してなる撮像信号SSをフレーム周期毎に発生する。1hはCCD1gから出力される撮像信号SSを増幅して次段の画像出力エンコーダ2側へ供給するアンプである。
【0019】
画像出力エンコーダ2は、構成要素2a〜2jから構成される。2aは、撮像信号SSの不要高周波成分をカットするローパスフィルタ、2b−1〜2b−3は、上述したクロックドライバ12から供給される4倍オーバーサンプリング信号4fSCに応じて撮像信号SSをサンプルホールドして次段へ出力するサンプリング回路である。サンプリング回路2b−1〜2b−3は、それぞれ色分離フィルタを備え、サンプリングホールドした撮像信号SSを各々信号Ye(イエロー)、信号Cy(シアン)および信号G(グリーン)に色分離して次段へ出力する。
【0020】
2c−1,2c−2は、分別フィルタとして作用する減算器であり、減算器2c−1は信号Ye−信号Gより信号R(赤)を、減算器2c−2は信号信号Cy−信号Gより信号B(青)を発生する。2dはローパスフィルタリングが施された撮像信号SSから輝度信号Yを抽出するYプロセス回路である。2e−1〜2e−3は、それぞれバンドパスフィルタ等から構成され、信号R,G,Bをそれぞれ抽出するプロセス回路である。
【0021】
2fは三原色を表わす信号R,G,Bを色差信号B−Y,R−Yに変換するマトリクス回路である。2g,2hはそれぞれマトリクス回路2fから出力される色差信号B−Y,R−Yから不要高周波成分をカットするローパスフィルタである。2iは後述する画像処理DSP(ディジタル・シグナル・プロセッサ)から供給されるRGB入力信号を輝度信号Y、色差信号B−Y,R−Yに変換するマトリクス回路である。2jは輝度信号Y、色差信号B−Y,R−Yに応じてコンポジット映像信号CVを発生するエンコーダである。
【0022】
次に、再び図1に戻り、実施例の全体構成について説明を進める。図1において、4は映像出力アンプであり、上述した画像出力エンコーダ2から供給されるコンポジットビデオ信号CVを増幅して出力する。画像処理DSP5は、後述するCPU8の制御の下に、撮像信号SSに対応する実画像と画像制御VDP6(後述する)から供給されるオブジェクト画像とをスーパーインポーズした合成画像を発生し、当該合成画像に対応したRGB入力信号を画像出力エンコーダ2に供給する。また、画像処理DSP5は、フレームバッファを備えており、当該フレームバッファに1フレーム分の輝度データDYを逐次ストアするようになっている。
【0023】
画像制御VDP(ビデオ・ディスプレイ・プロセッサ)6は、CPU8の制御の下に、画像表示用VRAM7に格納されるオブジェクト画像の表示位置や表示色を制御する。画像制御VDP6から出力されるオブジェクト画像データDOBは、バスBを介して画像処理DSP5に供給される。画像表示用VRAM7には、上記オブジェクト画像データDOBを格納する記憶エリアE1と、上述した実画像データを格納する記憶エリアE2とを有する。なお、記憶エリアE2には、画像処理DSP5内部のフレームバッファに一時記憶される輝度データDYがDMA転送される。
【0024】
CPU8は、プログラムROM9に記憶された各種制御プログラムを実行して装置各部を制御するものであり、その動作については追って説明する。10はワークRAMであり、CPU8においてなされる各種演算結果やフラグを一時記憶するレジスタ群から構成されている。11は画像データROMであり、実画像にスーパーインポーズされる各種のオブジェクト画像データDOB(あるいはバックグランド画像データDBG)が記憶されている。この画像データROM11に格納されるオブジェクト画像データDOBは、CPU8の指示に基づきDMAコントローラ(図示略)によって画像表示用VRAM7にDMA転送される。
【0025】
上記構成において、画像制御VDP6がCPU8の制御の下に、所定のオブジェクト画像データDOBを画像表示VRAM7から読み出して、その表示位置や表示色を制御して画像処理DSP5側に与えると、この画像処理DSP5が当該オブジェクト画像データDOBと撮像された実画像とをスーパーインポーズする。実画像にスーパーインポーズされるオブジェクト画像データDOBは、CPU8の処理によりシェーディング処理が施される。
すなわち、CPU8は画像表示VRAM7の記憶エリアE2にDMA転送される1フレーム分の輝度データDYを、図3に示すようにX方向に9分割、Y方向に8分割して各分割エリア毎の平均輝度を求め、求めた平均輝度から実画像中の光源方向を検出する。光源方向は、図4に図示する通り、オブジェクト画像に対する高輝度方向、つまり、求めた平均輝度の内、最も輝度が高い分割エリアが位置する方向になる。なお、求めた平均輝度が均一である時には「0(無方向)」となる。
【0026】
こうして実画像中における光源方向を抽出した後、CPU8はオブジェクト画像データDOBの表示位置や表示色に応じたシェーディング率に従ってオブジェクト画像に陰影を付与するシェーディング処理を施す。これにより、時々刻々変化する実画像に対応して写実的なシェーディングをオブジェクト画像に施すことが可能になり、以下では、こうした本発明の特徴となる動作について順次説明する。
【0027】
C.第1実施例の動作
ここでは、実画像に対応して写実的なシェーディングをオブジェクト画像に施すCPU8の動作について図5〜図17を参照して説明する。
なお、以下の動作説明にあっては、「初期化/VDP制御」、「輝度データ算出処理」、「光源位置算出処理」、「シェーディング係数処理」、「シェーディング(オブジェクト検出)処理」および「シェーディング(オブジェクトエディット)処理」の各機能に場合分けし、これら各機能について順次説明を進めるものとする。
【0028】
(1)初期化/VDP制御
まず、本実施例に電源が投入されると、CPU8はROM9に記憶された制御プログラムを読み出してロードした後、図5に示すメインルーチンを起動してステップSA1に処理を進める。ステップSA1では、画像処理DSP5や画像制御VDP6等の周辺デバイスに対してイニシャライズを指示する制御信号を供給する。続く、ステップSA2では、ワークRAM10に確保される各種レジスタ群をリセットしたり、初期値をストアしてイニシャライズする。
また、この時点でCPU8は画像データROM11にストアされる画像データ、すなわち、オブジェクト画像データDOB(あるいはバックグラウンド画像データDBG)および画像データDOBの表示位置や表示色を指定するオブジェクトテーブルデータを画像表示用VRAM7側に一旦格納させるべくDMAコントローラにDMA転送を指示する。この場合、転送元アドレス、転送バイト数および転送先アドレスからなる転送指示情報をDMAコンローラにセットする。
【0029】
こうして周辺デバイスおよびワークエリアが初期化されると、CPU8はステップSA3に進み、画像表示用VRAM11に格納されたオブジェクト画像データDOB(あるいはバックグラウンド画像データDBG)を読み出して画像制御VDP6側に転送し、続く、ステップSA4では同様に読み出したオブジェクトテーブルデータを画像制御VDP6側に転送する。そして、ステップSA5に進むと、画像制御VDP6に対して表示制御を開始させる旨の制御信号を与える。これにより、画像制御VDP6は、オブジェクトテーブルデータで指定される表示位置/表示色のオブジェクト画像データDOBを表示させるべく画像制御する。次いで、この後、CPU8はステップSA6に進み、輝度データ算出処理へ移行する。
【0030】
(2)輝度データ算出処理
ステップSA6に進むと、CPU8は図6に示す輝度データ算出処理に移行してステップSB1を実行する。ステップSB1では、前述したCCDカメラ1から供給される撮像信号SSに対応した1フレーム分の輝度データDYをサンプリングしてVRAM7の記憶エリアE2にストアする。次いで、ステップSB2に進むと、レジスタZ1,Z2およびレジスタaをゼロリセットする。ここで、レジスタZ1,Z2は、VRAM7の記憶エリアE2(図3参照)に格納される1フレーム分の輝度データDYをX方向に9分割、Y方向に8分割する際のXポインタ値およびYポインタ値を一時記憶するものである。また、レジスタaは、1フレーム分の輝度データDYをX方向に9分割、Y方向に8分割してなる都合72分割ブロック領域を配列要素で表わす際のポインタ値を一時記憶する。
【0031】
次いで、ステップSB3に進むと、CPU8は上記レジスタZ1,Z2にストアされるXポインタ値およびYポインタ値にそれぞれ「32」,「24」を乗算した値をレジスタX,Yにセットする一方、レジスタYccをゼロリセットする。
ここで、Xポインタ値およびYポインタ値にそれぞれ乗算される値は、1分割領域のドット数を表わしている。すなわち、1フレーム分の輝度データDYをX方向に9分割、Y方向に8分割する場合、1分割ブロック領域(以下、これを単にブロックと記す)は32ドット×24ドットの画素領域で形成される。また、レジスタYccは、1ブロック中における各ドット毎の輝度データDYを累算した値がストアされるレジスタである。
【0032】
次に、ステップSB4では、Xポインタ値で指定されるブロック内にレジスタXの値が存在するか否かを判断する。すなわち、1ブロック内においてX方向ドット成分(ドットライン)の輝度データDYを読み込む条件を満たしているか否かを判断する。ここで、読み込み条件を満たしている時には、判断結果が「YES」となり、次のステップSB5に進み、レジスタX,Yに対応するドットの輝度データDYを読み込み、続く、ステップSB6では読み込んだ輝度データDYをレジスタYccに加算する。次いで、ステップSB7に進むと、次のドット位置での輝度データDYを読み込むべく、レジスタXの値を1インクリメントして歩進させ、上述したステップSB4に処理を戻す。
【0033】
そして、Xポインタ値で指定されるブロック内において、X方向ドット成分の輝度データDYを全て読み込むと、ステップSB4での判断結果が「NO」となり、ステップSB8に処理を進める。ステップSB8では、Yポインタ値で指定されるブロック内にレジスタYの値が存在するか否かを判断する。すなわち、1ブロック内においてY方向ドット成分の輝度データDYを読み込む条件を満たしているか否かを判断する。ここで、読み込み条件を満たしている時には、判断結果が「YES」となり、次のステップSB9に進み、レジスタYの値を1インクリメントすると共に、レジスタXの値をゼロリセットして上述したステップSB5に進む。これにより、読み込むべきドットラインが更新される。
【0034】
次いで、上述したステップSB4、SB8の判断結果がいずれも「NO」となる場合、つまり、レジスタZ1,Z2の値で指定されるブロック内の全ての輝度データDYが読み込まれると、CPU8はステップSB10に処理を進め、レジスタYccにストアされている輝度データDY累算値を、ブロック内総ドット数(32×24)で除算して当該ブロックの平均輝度を求め、これをレジスタY(a)にストアする。そして、次のステップSB11に進むと、レジスタZ1にセットされているXポインタ値が「9」以上、すなわち、1ライン分のブロックについて輝度データDYの読み込みが完了したか否かを判断する。
【0035】
ここで、1ライン分の読み込みが完了していない場合には、判断結果が「NO」となり、ステップSB12に進む。ステップSB12では、レジスタZ1に書込まれるXポインタ値を1インクリメントして歩進させる一方、レジスタaの値も歩進させ、この後に上述したステップSB3に処理を戻し、対応するブロックにおける各ドットの輝度データDYを逐次読み込む。
一方、1ライン分の読み込みが完了した時には、ステップSB11の判断結果が「YES」となり、ステップSB13に進む。ステップSB13では、レジスタZ2にストアされるYポインタ値を1インクリメントして歩進させると共に、レジスタZ1のXポインタ値をゼロリセットし、さらにレジスタaの値も歩進させる。
【0036】
そして、ステップSB14に進むと、CPU8はレジスタZ2にストアされるYポインタ値が「8」、すなわち、1フレーム分の輝度データDYの読み込みが完了したかどうかを判断する。ここで、Yポインタ値が「8」でないならば、判断結果が「NO」となって、ステップSB3に処理を戻し、引続き読み込みを行う。
一方、Yポインタ値が「8」となって、1フレーム分の輝度データDYの読み込みが完了した時には、判断結果が「YES」となり、後述の光源位置算出処理へ移行する。
【0037】
(3)光源位置算出処理
こうして1フレーム分の輝度データDYを、「32×24」ドットのブロックに分け、これら各ブロック毎の輝度データDYを読み込んで平均輝度を算出すると、CPU8は図7に示す光源位置算出処理に移行してステップSC1を実行する。ステップSC1では、レジスタa1,a2をクリアすると共に、レジスタbに「1」をセットする。なお、これらレジスタの意図するところについては追って説明する。次に、ステップSC2に進むと、レジスタbの値が「72」以下であるか、つまり、全ブロックについて輝度判定(後述する)したか否かを判断する。
【0038】
この場合、レジスタbの値は「0」だから、判断結果は「YES」となり、次のステップSC3に進む。ステップSC3では、レジスタYc(a1)の値がレジスタYc(b)以下であるか判断する。すなわち、ブロック同士の平均輝度を比較しており、例えば、ブロック(a1)<ブロック(b)の場合には判断結果が「NO」となり、ステップSC4に進む。ステップSC4では、レジスタbの値を歩進させ、その値が「72」以下である時には再びステップSC3において平均輝度を比較する。
そして、ステップSC3において、例えば、ブロック(a1)≦ブロック(b)になると、判断結果が「YES」となり、次のステップSC5に進み、レジスタbの値をレジスタa1にストアする。続いて、ステップSC6に進むと、レジスタYc(a2)の値がレジスタYc(b)以上であるか否かを判断する。
【0039】
ここで、レジスタYc(a2)の値がレジスタYc(b)以上でない場合には判断結果が「NO」となり、上述したステップSC4に進む。一方、上記判定条件を満たす場合には判断結果が「YES」となって、ステップSC7に進み、レジスタbの値をレジスタa2にストアした後、ステップSC4に処理を進める。結局、これらステップSC2〜SC7を介することで、1フレーム分のブロック中、最も高い平均輝度のブロック(a1)と最も低い平均輝度のブロック(a2)とが抽出される。そして、こうした輝度比較が72ブロック分完了した時点でステップSC2の判断結果が「NO」となり、ステップSC8に進み、レジスタX1〜X3,Y1〜Y3をそれぞれゼロリセットする。
【0040】
ここで、レジスタX1,Y1には、最も高い平均輝度のブロック(a1)を指し示すブロック番号(座標)がストアされ、レジスタX2,Y2には最も低い平均輝度のブロック(a2)を指し示すブロック番号がストアされる。さらに、レジスタX3,Y3には、ブロック(a1)とブロック(a2)との位置差がストアされる。
すなわち、ステップSC9に進むと、CPU8はレジスタa1の値について「9」の剰余を算出し、これにより得られるブロック(a1)のX方向のブロック番号(図3参照)をレジスタX1にセットする。また、レジスタa1の値を「9」で除算し、その商をレジスタY1にセットする。これにより、レジスタX1,Y1には、最も高い平均輝度のブロック(a1)のブロック番号(座標)として(X1,Y1)が確保される。
さらに、上述と同様に、レジスタa2の値について「9」の剰余および商を算出して最も低い平均輝度のブロック(a2)のブロック番号(座標)をレジスタX2,Y2にストアする。また、最も高い平均輝度のブロック位置(X1,Y1)と最も低い平均輝度のブロック位置(X2,Y2)との絶対差分(距離)を求めてレジスタX3,Y3にそれぞれストアする。
【0041】
次に、ステップSC10では、レジスタa,bに各々「1」をセットした後、ステップSC11に進み、最も高い平均輝度のブロック座標位置(X1,Y1)とブロック座標位置(X(a),Y(b))との相対位置(Xs1,Ys1)を算出する。次いで、ステップSC12では、最も低い平均輝度のブロック座標位置(X2,Y2)とブロック座標位置(X(a),Y(b))との相対位置(Xs2,Ys2)を算出する。なお、レジスタaの値はX方向ブロック番号(1〜9で変化)、レジスタbの値はY方向ブロック番号(1〜8で変化)がセットされる。
【0042】
ブロック座標位置(X1,Y1)と、レジスタa,bの値で指定される各ブロック座標位置(X(a),Y(b))との座標差(Xs1,Ys1)およびブロック座標位置(X2,Y2)と、レジスタa,bの値で指定される各ブロック座標位置(X(a),Y(b))との座標差(Xs2,Ys2)が算出されると、CPU8は次のステップSC13に進み、これら座標差(Xs1,Ys1)と座標差(Xs2,Ys2)とがシェーディング領域内にあるかどうかを判断する。シェーディング領域とは、X3>Xs1またはY3>Ys1または(X3=Xs2かつX3=Ys2)なる条件を満たすブロックを指す。すなわち、最も高い平均輝度のブロック位置(X1,Y1)と最も低い平均輝度のブロック位置(X2,Y2)との間であって、かつ、最も低い平均輝度のブロック位置でない領域では、判断結果が「YES」となり、後述するシェーディング係数処理へ進む。
【0043】
これに対し、シェーディング領域でない場合には、判断結果が「NO」となり、ステップSC14に進む。ステップSC14では、シェーディング率Dおよびシェーディング方向Dcをそれぞれ「0」にセットする。次いで、ステップSC15に進むと、CPU8はレジスタaの値が「9」以下であるか否を判断し、「YES」の場合には次のステップSC16に処理を進め、レジスタaの値を1インクリメントする。
一方、判断結果が「NO」の場合、つまり、1ブロックライン分の処理が完了した時には、ステップSC17に進み、レジスタaの値を「1」にセットすると共に、レジスタbの値を1インクリメントする。これにより、ブロックラインがY方向へ更新される。
そして、ステップSC18に進むと、CPU8はレジスタbの値が「8」以上、つまり、1フレーム分の各ブロック(1)〜(72)について光源位置検出処理がなされたかどうかを判断する。ここで、全ブロックについて処理がなされた場合には、判断結果が「YES」となり、後述する3Dシェーディング(OBJ検出)処理へ移行する。一方、そうでない時には前述したステップSC11以降を繰り返す。
【0044】
(4)シェーディング係数処理
上述したステップSC13において、シェーディング領域と判定されたブロックがあると、CPU8は図8に示すシェーディング係数処理に移行してステップSD1を実行する。ステップSD1では、レジスタDtをゼロリセットし、続く、ステップSD2〜SD18では図4に図示するように、光源方向を特定する。まず、ステップSD2では、レジスタX1の値がレジスタX(a)の値以上であるか否かを判断する。ここで、X1<X(a)の場合、すなわち、最も高い平均輝度のブロック位置X1が現在ブロック位置X(a)の左側に位置する時には判断結果が「NO」となり、ステップSD3に進む。
【0045】
ステップSD3では、Y1≧Y(a)であるか否かを判断する。ここで、Y1<Y(a)の場合、すなわち、最も高い平均輝度のブロック位置Y1が現在ブロック位置X(a)の上側に位置する時には判断結果が「NO」となり、ステップSD4に進む。この場合、最も高い平均輝度のブロック位置(X1,Y1)がフレーム中の左側かつ上方、すなわち、光源方向が図4に示す「8」の方向に相当するから、レジスタDtに「8」をセットする。
一方、上記ステップSD3の判断が「YES」の場合、つまり、ブロック位置Y1が現在ブロック位置X(a)に一致するか下方である場合には次のステップSD5に進む。
【0046】
ステップSD5では、ブロック位置Y1が現在ブロック位置X(a)に一致するか否かを判断する。ここで、一致する場合には、最も高い平均輝度のブロック位置(X1,Y1)がフレーム中央左側に位置する訳だから、ステップSD6に進み、レジスタDtに「7」(図4参照)をセットする。これに対し、ブロック位置Y1が現在ブロック位置X(a)の下方である場合にはステップSD5の判断結果が「NO」となり、ステップSD7に進む。ステップSD7では、光源方向がフレーム左下側になるから、レジスタDtに「6」(図4参照)をセットする。
【0047】
次に、上述したステップSD2において判断結果が「YES」の場合、すなわち、最も高い平均輝度のブロック位置X1が現在ブロック位置X(a)と同じか、あるいは右側に位置する時には次のステップSD8に処理を進める。ステップSD8に進むと、CPU8は、最も高い平均輝度のブロック位置X1が現在ブロック位置X(a)と同一であるか否かを判断する。ここで、同一でない場合、つまり、最も高い平均輝度のブロック位置X1が現在ブロック位置X(a)より右側に位置する時には、判断結果が「NO」となり、ステップSD9に進む。
【0048】
ステップSD9では、最も高い平均輝度のブロック位置Y1が現在ブロック位置Y(a)に一致するか、あるいは下側に位置するかどうかを判断する。ここで、ブロック位置Y1が現在ブロック位置Y(a)より上側に位置する場合、最も高い平均輝度のブロック位置Y1は右上側になるので、判断結果は「NO」となり、次のステップSD10に進み、光源がフレーム右上側に位置することから、レジスタDtに「2」(図4参照)をセットする。
【0049】
一方、最も高い平均輝度のブロック位置Y1が現在ブロック位置Y(a)に一致するか、あるいは下側に位置する時には、上記ステップSD9の判断結果が「YES」となり、ステップSD11に処理を進める。ステップSD11に進むと、CPU8は、ブロック位置Y1が現在ブロック位置Y(a)に一致するか否かを判断する。ここで、一致する場合には判断結果が「YES」となり、ステップSD12に処理を進め、レジスタDtに「3」(図4参照)をセットする。これに対し、ブロック位置Y1が現在ブロック位置Y(a)に一致しない場合、つまり、ブロック位置Y1が現在ブロック位置Y(a)の右下側に位置する時には、上記ステップSD11の判断結果が「NO」となり、ステップSD13に進む。ステップSD13では、光源がフレーム右下側に位置することから、レジスタDtに「4」(図4参照)をセットする。
【0050】
次に、上述したステップSD8において判断結果が「YES」の場合、すなわち、最も高い平均輝度のブロック位置X1が現在ブロック位置X(a)と同一である場合には、ステップSD14に処理を進める。ステップSD14では、最も高い平均輝度のブロック位置Y1が現在ブロック位置Y(a)に一致するか、あるいは下側に位置するかどうかを判断する。ここで、ブロック位置Y1が現在ブロック位置Y(a)より上側にあれば、判断結果は「NO」となり、ステップSD15に進む。ステップSD15では、光源がフレーム上側に位置することから、レジスタDtに「1」(図4参照)をセットする。
【0051】
これに対し、上記ステップSD14の判断結果が「NO」となる時、つまり、最も高い平均輝度のブロック位置Y1が現在ブロック位置Y(a)に一致するか、あるいは下側に位置する時には次のステップSD16に処理を進める。ステップSD16では、ブロック位置Y1が現在ブロック位置Y(a)に一致するか否かを判断する。ここで、ブロック位置Y1が現在ブロック位置Y(a)の下側に位置する時には判断結果が「NO」になり、ステップSD17に進み、光源をフレーム下側とすべくレジスタDtに「5」(図4参照)をセットする。
【0052】
一方、ブロック位置Y1が現在ブロック位置Y(a)に一致する場合、つまり、ブロック位置(X1,Y1)と現在ブロック位置(X(a),Y(a))とが一致する時には、上記ステップSD16の判断結果が「YES」となり、ステップSD18に進む。この場合、現在ブロック位置(X(a),Y(a))が光源となるから、ステップSD18では、光源方向を無方向とすべく、レジスタDtに「0」をセットする。
【0053】
こうして最も高い平均輝度のブロック位置(X1,Y1)に基づき1フレーム中における光源方向が定まると、CPU8はステップSD19に進み、レジスタa,bの値に応じて設定される各ブロック毎のシェーディング方向Dc((a*9)+b)に、レジスタDtの値をストアする。そして、ステップSD20では、レジスタa,bの値に応じて設定される各ブロック毎のシェーディング率D((a*9)+b)として(Xs1/X3)*(Ys1/Y3)で定義されるシェーディング率値をストアする。ここで言うシェーディング率Dとは、オブジェクト形状に対応して付与される陰影の比率を表わす値である。
そして、上記の通り、1ブロックについて「シェーディング方向Dc」および「シェーディング率D」が求まると、次のブロックに関して同様な処理を施すため、前述したステップSC15(図7参照)へ処理を戻し、レジスタa,bに格納されるポインタを更新させる。
【0054】
(5)3Dシェーディング(オブジェクト検出)処理
上述したシェーディング係数処理によって1フレーム中の各ブロック毎の「シェーディング方向Dc」および「シェーディング率D」が求まると、CPU8は前述したステップSC18(図7参照)を介して図9に示す3Dシェーディング(オブジェクト検出)処理に進み、ステップSE1を実行する。
ステップSE1では、レジスタZ1,Z2にそれぞれ格納されるXポインタおよびYポインタをゼロリセットすると共に、表示オブジェクト数をカウントするレジスタaの値もゼロリセットする。なお、この処理では、最大64個までのオブジェクト画像の表示位置を検出し得るようにしている。
【0055】
次いで、ステップSE2では、レジスタaの値に基づき、画像制御VDP6の内部RAMに格納されているオブジェクトテーブルデータを読み出してレジスタTX(a),TY(a)にストアする。オブジェクトテーブルデータとは、画面に表示すべきオブジェクト画像の表示位置を表わすデータである。次に、ステップSE3に進むと、レジスタTX(a)にストアしたオブジェクトテーブルデータがX方向のどのブロックに対応するか判定する。
ここで、レジスタZ1に格納されるXポインタの値に応じて定まるブロック内にレジスタTX(a)の値が存在すれば、ステップSE3の判断結果は「YES」となり、後述するステップSE6に処理を進める。
【0056】
一方、そうでない場合には判断結果が「NO」となり、ステップSE4に進み、レジスタZ1の値が「9」以上、つまり、1ブロックライン分の判定が完了したかどうかを判断する。ここで、1ブロックライン分の判定が完了していない場合には、判断結果が「NO」となり、ステップSE5に進み、レジスタZ1に格納されるXポインタ値をインクリメントして歩進させ、再びステップSE3にてレジスタTX(a)にストアしたオブジェクトテーブルデータが、Xポインタの値に応じて定まるブロック内にあるか否かを判断する。
そして、このステップSE3において、Xポインタの値に応じて定まるブロックにオブジェクトテーブルデータが対応する場合、あるいは上記ステップSE4において1ブロックライン分の判定が完了した時には、ステップSE6に処理を進める。
【0057】
ステップSE6に進むと、CPU8は上述したステップSE3〜SE5と同様に、レジスタTY(a)にストアしたオブジェクトテーブルデータがY方向のどのブロックに対応するか判定する。ここで、レジスタZ2に格納されるYポインタの値に応じて定まるブロック内にレジスタTY(a)の値が存在すると、判断結果は「YES」となり、後述するステップSE11に処理を進める。
一方、そうでない場合には判断結果が「NO」となり、ステップSE7に進み、レジスタZ2の値が「8」以上、つまり、1画面分の判定が完了したかどうかを判断する。ここで、1画面分の判定が完了していない場合には、判断結果が「NO」となり、ステップSE8に進み、レジスタZ2に格納されるYポインタ値をインクリメントして歩進させ、再びステップSE6にてレジスタTY(a)にストアしたオブジェクトテーブルデータが、Yポインタの値に応じて定まるブロック内にあるか否かを判断する。
【0058】
これに対し、1画面分の判定が完了すると、ステップSE7の判断結果が「YES」となり、ステップSE9に処理を進める。ステップSE9では、レジスタaの値をインクリメントして歩進させる一方、レジスタZ1,Z2に格納されるX,Yポインタ値をゼロリセットする。次いで、ステップSE10では、歩進したレジスタaの値が「64」以上、すなわち、全オブジェクト画像について表示位置を検出する処理を施したかどうかを判断する。ここで、全オブジェクト画像についての処理が完了したならば、判断結果が「YES」となり、前述した輝度データ算出処理(図6参照)に戻る。一方、そうでない時には、上述したステップSE2以降を実行する。
【0059】
そして、上述したステップSE3,SE6を介してXポインタおよびYポインタの値に応じて定まるブロックに、レジスタTX(a),TY(a)に格納されるオブジェクトテーブルデータが対応する時には、ステップSE11に処理を進め、XポインタおよびYポインタの値に応じて定まるブロックのシェーディング方向DcをレジスタEcにストアする。続いて、ステップSE12では、XポインタおよびYポインタの値に応じて定まるブロックのシェーディング率DをレジスタEにストアする。これにより、オブジェクト画像に付与すべき「シェーディング方向」と「シェーディング率」とが定まることになる。
【0060】
このように、3Dシェーディング(オブジェクト検出)処理では、前述したシェーディング係数処理によって得られた各ブロック毎の「シェーディング方向Dc」および「シェーディング率D」に基づき、オブジェクトテーブルデータで定まるオブジェクト毎の「シェーディング方向Ec」および「シェーディング率E」を判定するようにしている。
【0061】
(6)3Dシェーディング(オブジェクトエディット)処理
次に、各オブジェクト毎の「シェーディング方向Ec」および「シェーディング率E」が設定されると、CPU8は図10に示す3Dシェーディング(オブジェクトエディット)処理に進み、ステップSF1を実行する。まず、ステップSF1では、画像制御VDP6の内部RAMに格納されるオブジェクト画像データOBJ(a)を、レジスタaの値に応じて読み出してレジスタFC(c)に格納する。ここで、cはオブジェクト画像を形成する32ドット×32ドットの画素数1024に対応して0≦c<1024の値をなす。
【0062】
次いで、ステップSF2に進むと、CPU8は、32ドット×32ドットの画像エリア内におけるオブジェクト画像の左端、右端、上端および下端位置をそれぞれ一時記憶するレジスタXh,XL,Yh,YLをゼロリセットすると共に、ドットポインタを格納するレジスタcをもゼロリセットする。そして、次のステップSF3では、レジスタcに応じて読み出したオブジェクト画像データが「0」、つまり、透明なデータであるか否かを判断する。ここで、透明なデータである場合には、判断結果が「YES」となり、次のステップSF4に処理を進める。
【0063】
ステップSF4では、レジスタcの値を1インクリメントして歩進させ、続く、ステップSF5では、歩進した値が「1024」を超えたかどうか、つまり、を判断する。ここで、32ドット×32ドットからなる1つのオブジェクト画像について完了したか否かを判断する。完了していない場合には、判断結果が「NO」になり、上記ステップSF3〜SF4を繰り返す。
一方、1つのオブジェクト画像について完了した時には、判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
【0064】
さて、上述したステップSF3において、読み出したデータが「透明」なデータでない場合には、ここでの判断結果が「NO」となり、ステップSF6に進む。ステップSF6では、レジスタcの値を「32」で除算し、その商をオブジェクト画像の上端ドット位置としてレジスタYhにストアする。次に、ステップSF7に進むと、オブジェクト画像の下端ドット位置YLを検出するため、一旦、レジスタcの値を最終ドット位置に相当する「1023」にセットする。そうして、ステップSF8に進むと、CPU8は、現在レジスタc値に応じてレジスタF(c)から読み出されるオブジェクト画像データが「透明」なデータであるか否かを判断する。
【0065】
そして、「透明」なデータであれば、判断結果が「YES」となり、ステップSF9に処理を進め、レジスタcの値を1デクリメントする。次いで、ステップSF10では、レジスタcの値が「0」に達したかどうかを判断し、「0」に達していない時には上記ステップSF8〜SF9を繰り返す。これに対し、こうしてなされる画像データの逆走査が完了した時には、ステップSF10の判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
【0066】
一方、上述したステップSF8において、最終ドット位置からなされる逆走査過程で、画像データが検出された時、つまり、「透明」なデータではない画像データが検出された時には、判断結果が「NO」となり、ステップSF11に進む。ステップSF11に進むと、CPU8は、現在のレジスタcの値を「32」で除算し、その商をオブジェクト画像の下端ドット位置としてレジスタYLにストアする。
こうしてオブジェクト画像データの上端/下端ドット位置Yh、YLが求まると、CPU8はステップSF12に処理を進め、オブジェクト画像データの左端/右端ドット位置Xh、XLを検出するため、レジスタc,c1およびccをゼロリセットしておく。
【0067】
次に、ステップSF13では、現レジスタcの値に応じてレジスタF(c)から読み出したオブジェクト画像データが「透明」なデータであるか否かを判断する。ここで、読み出したオブジェクト画像データが「透明」なデータである場合には、判断結果が「YES」となり、次のステップSF14に処理を進める。ステップSF14では、レジスタcの値に「32」を加算すると共にレジスタccの値を1インクリメントする。次いで、ステップSF15では、レジスタccの値が「32」以上であるかどうかを判断する。そして、レジスタccの値が「32」以上でない時には、判断結果が「NO」になり、上記ステップSF13〜SF14を繰り返す。
【0068】
一方、レジスタccの値が「32」以上に達した時には、判断結果が「YES」となり、ステップSF16に進み、レジスタc1をインクリメントする一方、このインクリメントしたレジスタc1の値をレジスタcにセットし、かつ、レジスタccをゼロリセットする。そして、ステップSF17に進むと、CPU8は、レジスタcの値が「1024」以上、つまり、1つのオブジェクト画像データについて処理が完了したか否かを判断し、完了していない場合には判断結果が「NO」となり、ステップSF13に処理を戻す。一方、処理が完了した時には、ここでの判断結果が「YES」となって、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
【0069】
ステップSF13のオブジェクト画像データ読み出しにおいて、「透明」なデータでない画像データが読み出された場合には、判断結果が「NO」となり、ステップSF18に処理を進める。ステップSF18では、当該画像の左端ドット位置を検出すべく現在のレジスタcの値について「32の剰余」を求め、求めた剰余値を左端ドット位置としてレジスタXLにセットする。次いで、ステップSF19では、右端ドット位置を求めるため、レジスタcに「1023」、レジスタc1に「31」をそれぞれセットすると共に、レジスタccをゼロリセットする。
【0070】
そして、ステップSF20では、現レジスタcの値に応じてレジスタF(c)からオブジェクト画像データを読み出し、これが「透明」なデータであるかどうかを判断する。ここで、「透明」なデータである場合には、判断結果が「YES」となり、次のステップSF21に進む。ステップSF21では、レジスタcの値から「32」を減算すると共に、レジスタccの値を1インクリメントする。次いで、ステップSF22では、レジスタccの値が「32」以上であるかどうかを判断する。ここで、レジスタccの値が「32」以上でない時には、判断結果が「NO」になり、上記ステップSF20〜SF21を繰り返す。
【0071】
一方、レジスタccの値が「32」以上に達すると、上記ステップSF22の判断結果が「YES」となり、ステップSF23に進み、レジスタc1をデクリメントする一方、このデクリメントしたレジスタc1の値をレジスタcにセットし、かつ、レジスタccをゼロリセットする。そして、ステップSF24に進むと、CPU8は、レジスタcの値が「0」、つまり、1つのオブジェクト画像データについて処理が完了したか否かを判断し、完了していない場合には判断結果が「NO」となり、ステップSF20に処理を戻す。一方、処理が完了した時には、ここでの判断結果が「YES」となって、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
【0072】
上記ステップSF20のオブジェクト画像データ読み出しにおいて、「透明」なデータでない画像データが読み出されると、ここでの判断結果は「NO」となり、ステップSF25に処理を進める。ステップSF25に進むと、CPU8は、オブジェクト画像の右端ドット位置を検出すべく現在のレジスタcの値について「32の剰余」を求め、求めた剰余値を右端ドット位置としてレジスタXhにセットし、図11に示すステップSF26以降に処理を進める。
ステップSF26以降では、3Dシェーディング(オブジェクト検出)処理において求めたオブジェクト毎の「シェーディング方向Ec」および「シェーディング率E」に応じてオブジェクト画像毎に陰影を付与するシェーディング処理を行う。以下、シェーディング方向Ec毎になされるシェーディング処理について説明する。
【0073】
▲1▼シェーディング方向Ecが「0」の場合
まず、ステップSF26に進むと、CPU8は、レジスタcの値をゼロリセットし、続く、ステップSF27では、現在処理対象となっているオブジェクト画像に対応するブロックのシェーディング方向Ecが「0」、すなわち、光源位置であるか否かを判断する。ここで、該当ブロック自身が光源となっている場合には、陰影を付与する必要がないから、判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
【0074】
▲2▼シェーディング方向Ecが「1」の場合
一方、シェーディング方向Ecが「0」でない時には、判断結果が「NO」となり、ステップSF28に処理を進める。そして、ステップSF28では、オブジェクト画像に対応するブロックのシェーディング方向Ecが「1(図4参照)」であるか否かを判断する。ここで、シェーディング方向Ecが「1」であると、判断結果が「YES」となり、次のステップSF29に処理を進める。ステップSF29では、シェーディング領域を算出する。すなわち、レジスタYLの値に対応するシェーディング係数Eを乗算してレジスタYsにストアする一方、レジスタYhの値に「32」を乗算してレジスタcにセットする。さらに、レジスタiに格納される階調値を「16」にセットする。
【0075】
次いで、ステップSF30では、レジスタF(c)に格納される各ドット毎のオブジェクト画像データを各色毎の画像データとしてレジスタF(R),F(G),F(B)に取込む。そして、ステップSF31では、レジスタF(c)から読み出したオブジェクト画像データが「透明」なデータであるかどうかを判断する。ここで、「透明」なデータであれば、判断結果が「YES」となり、次のステップSF32に進み、レジスタcの値を歩進させた後、再び上記ステップSF30に処理を戻して次のドットに対応する画像データを取込む。
【0076】
そして、ステップSF31において、レジスタF(c)から読み出したオブジェクト画像データが「透明」なデータでない場合には、判断結果が「NO」となり、ステップSF33に進む。ステップSF33に進むと、CPU8はシェーデイング率Eに階調値iを乗算した値が読み出した画像データより濃いかどうか各色毎に判定する。ここで、各色RGBにおいて(i・E)値が濃い場合には、判断結果が「YES」となり、次のステップSF34に処理を進め。一方、そうでない場合には、判断結果が「NO」となり、上述したステップSF32に処理を進め、レジスタcの値を歩進させる。
【0077】
ステップSF34では、各色毎の(i・E)値を各レジスタF(R),F(G),F(B)にセットする。そして、ステップSF35では、シェーディングを付与したドットがレジスタYhに格納される上端ドット位置より下であるか否かを判断する。ここで、上端ドット位置より上である時には、シェーディングを付与する必要がないから、判断結果は「NO」となり、ステップSF32を介して次のドットへ移る。一方、上端ドット位置より下であれば、判断結果が「YES」となり、ステップSF36に処理を進める。ステップSF36では、レジスタYhの値を歩進させ、続く、ステップSF37では、レジスタiの階調値を1デクリメントする。
【0078】
次いで、ステップSF38に進むと、現在処理しているドットが下端ドット位置Ysより上か、あるいは階調値iが「0」であるかを判断する。こうした条件のいずれかを満たした時にシェーディング付与が完了したとして判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。これに対し、上記条件のいずれも満たさない時には、シェーディング付与が完了していないと見做して判断結果が「NO」となり、ステップSF32を介してレジスタcの値を歩進させ、次のドットに関するシェーディング付与に移行する。
このように、シェーディング方向Ecが「1」の場合、画面上から下に向う光源方向に基づき、オブジェクト画像を形成する各ドットに対して階調値にシェーディング率Eを乗算してなるシェーディングを付与し、その際、シェーディングはドット位置が下方向へ向うほど階調が低下して黒くなる。
【0079】
▲3▼シェーディング方向Ecが「2」の場合
この場合、図12に示すステップSF39の判断結果が「YES」となって、ステップSF40に処理を進める。ステップSF40では、レジスタXに「31」をセットする一方、レジスタYをゼロリセットする。さらに、レジスタZに「1」をセットし、レジスタiに階調値「16」をセットする。次いで、ステップSF41では、シェーディング領域を算出する。すなわち、レジスタXLの値にシェーディング係数Eを乗算してレジスタXsにストアする一方、レジスタYの値に「32」を乗算した値にレジスタXの値を加算してレジスタcにセットする。
【0080】
次に、ステップSF42に進むと、CPU8は、レジスタF(c)に格納される各色(R,G,B)のオブジェクト画像データをレジスタF(R),F(G),F(B)に取込む。続く、ステップSF43では、レジスタF(c)から読み出したオブジェクト画像データが「透明」なデータであるかどうかを判断する。ここで、「透明」なデータであれば、判断結果が「YES」となり、次のステップSF44に進む。ステップSF44では、レジスタXの値が「31」以上、すなわち、32ドット×32ドットで形成されるオブジェクト画像データの内、最右端のドットであるか否かを判断する。ここで、最右端位置になければ、判断結果は「NO」となり、ステップSF45に処理を進める。
【0081】
ステップSF45では、レジスタX,Yをそれぞれ1インクリメントして歩進させる。すなわち、この場合、シェーディング方向Ecが「2」であるから、光源の方向が右上から進入する。このため、これに直交する方向でオブジェクト画像データの各ドットを読み出すべく、読み出しドット位置をX方向およびY方向にそれぞれ1ドット分歩進させ、所謂、斜め読み出しがなされる。こうして、読み出しドット位置を斜めに歩進させた後、CPU8は上述したステップSF41に戻す。
一方、上記ステップSF44において、レジスタXの値が「31」以上である時には、読み出しドット位置を変更するため、次のステップSF46に進む。ステップSF46では、レジスタXの値からレジスタZの値を減算し、その値をレジスタXにストアする。また、レジスタYをゼロリセットすると共に、レジスタZの値をインクリメントする。これにより、読み出しドット位置が最右端に達した場合、上述した斜め読み出しする際の読み出し行が更新される。
【0082】
次いで、ステップSF47に進むと、レジスタXの値がレジスタXsの値より大、つまり、シェーディング領域を超えたかどうかを判断する。ここで、シェーディング領域を超えた場合には、判断結果が「NO」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。これに対し、現在のドット位置がシェーディング領域内にあれば、判断結果は「YES」となり、前述したステップSF41へ処理を戻す。
【0083】
さて、上述したステップSF41において読み出したオブジェクト画像データが「透明」なデータでない場合には、当該ステップSF41における判断結果が「NO」となり、ステップSF48に進む。ステップSF48では、シェーデイング率Eに階調値iを乗算した値が読み出した画像データより濃いかどうか各色毎に判定する。ここで、各色(R,G,B)において(i・E)値が濃い場合には、判断結果が「YES」となり、次のステップSF49に処理を進め、一方、そうでない場合には、判断結果が「NO」となり、上述したステップSF44に処理を進める。
【0084】
ステップSF49に進むと、CPU8は、各色(R,G,B)毎の(i・E)値を、各レジスタF(R),F(G),F(B)にセットする。そして、ステップSF50では、レジスタYの値が「0」、すなわち、読み出しドット位置が最上端に達したかどうかを判断する。ここで、最上端に達していない時には、引続き次のドットに対してシェーディング処理を施す必要があるから、判断結果は「NO」となり、前述したステップSF44に処理を進める。
一方、読み出しドット位置が最上端に達した時には、判断結果が「YES」となり、ステップSF51に進む。ステップSF51では、前述した斜め読み出しする際の読み出し行が更新されるのに伴い、レジスタiに格納される階調値を1デクリメントして陰影を1段階濃くする。
【0085】
そして、続く、ステップSF52では、現在処理しているドット位置がシェーディング領域を超えたか、あるいは階調値iが「0」のいずれかを満たしているか否かを判断する。ここで、上記両条件のいずれかを満たした時には、シェーディング付与が完了したとして判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。これに対し、上記両条件のいずれも満たさない時には、シェーディング付与が完了していないと見做して判断結果が「NO」となり、ステップSF44に処理を進める。
このように、シェーディング方向Ecが「2」の場合、画面右上から斜め左下に向う光源方向に直交するようオブジェクト画像を形成する各ドットを斜め読み出しし、斜め読み出しされる各ドット行毎に順次低減する階調値とシェーディング率Eとを乗算してなるシェーディングを付与する。
【0086】
▲4▼シェーディング方向Ecが「3」の場合
この場合、前述したステップSF53の判断が「YES」となり、ステップSF54に処理を進める。ステップSF54では、レジスタXに「31」をセットする一方、レジスタYをゼロリセットし、レジスタiに階調値「16」をセットする。次いで、ステップSF55では、レジスタXLの値にシェーディング係数Eを乗算してレジスタXsにシェーディング領域をストアする一方、レジスタYの値に「32」を乗算した値にレジスタXの値を加算してレジスタcにセットする。
【0087】
次に、ステップSF56に進むと、CPU8は、レジスタF(c)に格納される各ドット毎のオブジェクト画像データを、各色(R,G,B)毎の画像データとしてレジスタF(R),F(G),F(B)に取込む。続く、ステップSF57では、レジスタF(c)から読み出したオブジェクト画像データが「透明」なデータであるかどうかを判断する。ここで、「透明」なデータであれば、判断結果が「YES」となり、次のステップSF58に進む。ステップSF58では、レジスタYの値を1インクリメントして歩進させ、続く、ステップSF59では、この歩進したレジスタYの値が「31」より大であるか否かを判断する。すなわち、32ドット×32ドットで形成されるオブジェクト画像データの内、最下端のドットであるか否かを判断する。ここで、最下端位置になければ、判断結果は「NO」となり、前述したステップSF55に処理を戻す。
【0088】
一方、読み出したドットの位置が最下端であれば、上記ステップSF59の判断結果が「YES」となり、ステップSF60に進む。ステップSF60では、レジスタXの値を1デクリメントすると共に、レジスタYをゼロリセットする。すなわち、この場合、シェーディング方向Ecが「3」であるから、光源の方向が右から真横に進入する。このため、32ドット×32ドットのオブジェクト画像データエリアを右端上からY方向(下方向)へ至る読み出し行を、順次左方へ走査させる読み出し形態となる。
【0089】
そして、ステップSF61では、レジスタXsの値がレジスタXの値より大、つまり、シェーディング領域を超えたかどうかを判断する。ここで、シェーディング領域を超えた場合には、判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。これに対し、現在のドット位置がシェーディング領域内にあれば、判断結果は「NO」となり、前述したステップSF55へ処理を戻す。
【0090】
さて、上述したステップSF57において読み出したオブジェクト画像データが「透明」なデータでない場合には、当該ステップSF57における判断結果が「NO」となり、ステップSF62に進む。ステップSF62では、シェーデイング率Eに階調値iを乗算した値が、読み出した画像データより濃いかどうか各色毎に判定する。ここで、各色(R,G,B)において(i・E)値が濃い場合には、判断結果が「YES」となり、次のステップSF63に処理を進める。一方、そうでない場合には、判断結果が「NO」となり、上述したステップSF58に処理を進める。
【0091】
ステップSF63に進むと、CPU8は、各色(R,G,B)毎の(i・E)値を、各レジスタF(R),F(G),F(B)にセットする。そして、ステップSF64では、レジスタYの値が「0」、すなわち、読み出しドット位置が最上端に達したかどうかを判断する。ここで、最上端に達していない時には、引続き次のドットに対してシェーディング処理を施す必要があるから、判断結果は「NO」となり、前述したステップSF58に処理を進める。
一方、読み出しドット位置が最上端に達した時には、判断結果が「YES」となり、ステップSF65に進む。ステップSF65では、レジスタiに格納される階調値を1デクリメントして陰影を1段階濃くする。
【0092】
そして、続く、ステップSF66では、現在処理しているドット位置がシェーディング領域を超えたか、あるいは階調値iが「0」のいずれかを満たしているか否かを判断する。ここで、上記両条件のいずれかを満たした時には、シェーディング付与が完了したとして判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
これに対し、上記両条件のいずれも満たさない時には、シェーディング付与が完了していないと見做して判断結果が「NO」となり、ステップSF58に処理を進める。
このように、シェーディング方向Ecが「3」の場合、画面右真横からの光源方向となるから、32ドット×32ドットのオブジェクト画像データエリアを右端上からY方向へ至る読み出し行を、順次左端側へ走査させるよう読み出しを行い、読み出された各ドット行毎に順次低減する階調値とシェーディング率Eとを乗算してなるシェーディングが付与される。
【0093】
▲5▼シェーディング方向Ecが「4」の場合
この場合、図13に示すステップSF67の判断結果が「YES」となり、ステップSF68に処理を進める。ステップSF68では、レジスタX,Yにそれぞれ「31」をセットする一方、レジスタZに「1」をセットし、かつ、レジスタiに階調値「16」をセットする。次いで、ステップSF69では、シェーディング領域を算出する。すなわち、レジスタYhの値にシェーディング係数Eを乗算してなる値をレジスタYsにストアする一方、レジスタYの値に「32」を乗算した値にレジスタXの値を加算してレジスタcにセットする。
【0094】
次に、ステップSF70に進むと、CPU8は、レジスタF(c)に格納される各ドット毎の各色(R,G,B)のオブジェクト画像データをレジスタF(R),F(G),F(B)に取込む。続く、ステップSF71では、レジスタF(c)から読み出したオブジェクト画像データが「透明」なデータであるかどうかを判断する。ここで、「透明」なデータであれば、判断結果が「YES」となり、次のステップSF72に進む。ステップSF72では、レジスタXの値が「31」以上、すなわち、32ドット×32ドットで形成されるオブジェクト画像データの内、最右端のドットであるか否かを判断する。ここで、最右端位置になければ、判断結果は「NO」となり、ステップSF73に処理を進める。
【0095】
ステップSF73では、レジスタXの値を1インクリメントすると共に、レジスタYの値を1デクリメントする。すなわち、この場合、シェーディング方向Ecが「4」であるから、光源の方向が右下から進入する。このため、これに直交する方向でオブジェクト画像データの各ドットを読み出すべく、読み出しドット位置をX方向にインクリメントさせつつ、Y方向にデクリメントさせて、所謂、斜め読み出しを行う。こうして、読み出しドット位置を斜めに歩進させた後、CPU8は上述したステップSF69に戻す。
【0096】
一方、上記ステップSF72において、レジスタXの値が「31」以上である時には、読み出しドット位置を変更するため、次のステップSF74に進む。ステップSF74では、現レジスタXの値からレジスタZの値を減算し、その値をレジスタXにストアする。また、レジスタYに「31」をセットすると共に、レジスタZの値をインクリメントする。これにより、読み出しドット位置が最右端に達した場合、上述した斜め読み出しする際の読み出し行が更新される。
【0097】
次いで、ステップSF75に進むと、レジスタYの値がレジスタYsの値より大、つまり、シェーディング領域を超えたかどうかを判断する。ここで、シェーディング領域を超えた場合には、判断結果が「NO」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。これに対し、現在のドット位置がシェーディング領域内にあれば、判断結果は「YES」となり、前述したステップSF69へ処理を戻す。
【0098】
さて、上述したステップSF69において読み出したオブジェクト画像データが「透明」なデータでない場合には、当該ステップSF69における判断結果が「NO」となり、ステップSF76に進む。ステップSF76では、シェーデイング率Eに階調値iを乗算した値が、読み出した画像データより濃いかどうか各色毎に判定する。ここで、各色(R,G,B)における(i・E)値が濃い場合には、判断結果が「YES」となり、次のステップSF77に処理を進め、一方、そうでない場合には、判断結果が「NO」となり、上述したステップSF72に処理を進める。
【0099】
ステップSF77に進むと、CPU8は、各色(R,G,B)毎の(i・E)値を、各レジスタF(R),F(G),F(B)にそれぞれセットする。そして、ステップSF78では、レジスタYの値が「31」、すなわち、読み出しドット位置が最下端に達したかどうかを判断する。ここで、最下端に達していない時には、引続き次のドットに対してシェーディング処理を施す必要があるから、判断結果は「NO」となり、前述したステップSF72に処理を進める。
一方、読み出しドット位置が最下端に達した時には、判断結果が「YES」となり、ステップSF79に進む。ステップSF79では、前述した斜め読み出しする際の読み出し行が更新されるのに伴い、レジスタiに格納される階調値を1デクリメントして陰影を1段階濃くする。
【0100】
そして、ステップSF80では、現在処理しているドット位置がシェーディング領域を超えたか、あるいは階調値iが「0」のいずれかを満たしているか否かを判断する。ここで、上記両条件のいずれかを満たした時には、シェーディング付与が完了したとして判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
これに対し、上記両条件のいずれも満たさない時には、シェーディング付与が完了していないと見做して判断結果が「NO」となり、ステップSF72に処理を進める。
このように、シェーディング方向Ecが「4」の場合には、前述したシェーディング方向Ecが「2」と時と同様に、オブジェクト画像を形成する各ドットを斜め読み出しし、斜め読み出しされる各ドット行毎に順次低減する階調値とシェーディング率Eとを乗算してシェーディングを付与している。
【0101】
▲6▼シェーディング方向Ecが「5」の場合
この場合、ステップSF81の判断結果が「YES」となり、ステップSF82に処理を進める。ステップSF82では、レジスタX,Yにそれぞれ「31」をセットする一方、レジスタiに階調値「16」をセットする。次いで、ステップSF83では、レジスタYhの値にシェーディング係数Eを乗算し、その結果をレジスタYs(シェーディング領域)をストアする。また、レジスタYの値に「32」を乗算した値にレジスタXの値を加算してレジスタcにセットする。
【0102】
次に、ステップSF84に進むと、CPU8は、レジスタF(c)に格納される各ドット毎のオブジェクト画像データを各色(R,G,B)毎の画像データとしてレジスタF(R),F(G),F(B)に取込む。続く、ステップSF85では、レジスタF(c)から読み出したオブジェクト画像データが「透明」なデータであるかどうかを判断する。ここで、「透明」なデータであれば、判断結果が「YES」となり、次のステップSF86に進む。
ステップSF86では、レジスタXの値を1デクリメントし、続く、ステップSF87では、このレジスタXの値が「0」より小であるか否かを判断する。すなわち、32ドット×32ドットで形成されるオブジェクト画像データの内、最左端のドットであるか否かを判断する。ここで、最左端ドットでなければ、判断結果は「NO」となり、前述したステップSF83に処理を戻す。
【0103】
一方、読み出したドットの位置が最左端であれば、上記ステップSF87の判断結果が「YES」となり、ステップSF88に進む。ステップSF88では、レジスタYの値を1デクリメントすると共に、レジスタXに「31」をセットする。すなわち、この場合、シェーディング方向Ecが「5」であるから、光源の方向が真下から進入する。このため、32ドット×32ドットのオブジェクト画像データエリアを左端下からX方向へ至る読み出し行を、順次上方向へ走査させる読み出し形態となる。
【0104】
そして、ステップSF89では、レジスタYhの値がレジスタYの値より大、つまり、シェーディング領域を超えたかどうかを判断する。ここで、シェーディング領域を超えた場合には、判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
これに対し、現在のドット位置がシェーディング領域内にあれば、判断結果は「NO」となり、前述したステップSF83へ処理を戻す。
【0105】
さて、上述したステップSF85において読み出したオブジェクト画像データが「透明」なデータでない場合には、当該ステップSF85における判断結果が「NO」となり、ステップSF90に進む。ステップSF90では、シェーデイング率Eに階調値iを乗算した値が、読み出した画像データより濃いかどうか各色毎に判定する。ここで、各色(R,G,B)における(i・E)値が濃い場合には、判断結果が「YES」となり、次のステップSF91に処理を進める。
一方、そうでない場合には、判断結果が「NO」となり、上述したステップSF86に処理を進める。
【0106】
ステップSF91に進むと、CPU8は、各色(R,G,B)毎の(i・E)値を、各レジスタF(R),F(G),F(B)にセットする。そして、ステップSF92では、レジスタXの値が「31」、すなわち、読み出しドット位置が最右端に達したかどうかを判断する。ここで、最右端に達していない時には、引続き次のドットに対してシェーディング処理を施す必要があるから、判断結果は「NO」となり、前述したステップSF86に処理を進める。
一方、読み出しドット位置が最右端に達した時には、判断結果が「YES」となり、ステップSF93に進む。ステップSF93では、レジスタiに格納される階調値を1デクリメントして陰影を1段階濃くする。
【0107】
そして、続く、ステップSF94では、現在処理しているドット位置がシェーディング領域を超えたか、あるいは階調値iが「0」のいずれかを満たしているか否かを判断する。ここで、上記両条件のいずれかを満たした時には、シェーディング付与が完了したとして判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
これに対し、上記両条件のいずれも満たさない時には、シェーディング付与が完了していないと見做して判断結果が「NO」となり、ステップSF86に処理を進める。
このように、シェーディング方向Ecが「5」の場合、画面真下からの光源方向となるから、32ドット×32ドットのオブジェクト画像データエリアを、左端下からX方向へ至る読み出し行を、順次上方向へ走査させる読み出しを行い、読み出された各ドット行毎に順次低減する階調値とシェーディング率Eとを乗算してなるシェーディングが付与される。
【0108】
▲7▼シェーディング方向Ecが「6」の場合
この場合、図14に示すステップSF95の判断結果が「YES」となり、ステップSF96に処理を進める。ステップSF96では、レジスタYに「31」をセットする一方、レジスタXをゼロリセットする。さらに、レジスタZに「1」をセットし、レジスタiに階調値「16」をセットする。次いで、ステップSF97に進むと、CPU8はシェーディング領域を算出する。すなわち、レジスタYhの値にシェーディング係数Eを乗算してなるシェーディング領域値を、レジスタYsにストアすると共に、レジスタYの値に「32」を乗算した値とレジスタXの値とを加算してレジスタcにセットする。
【0109】
次に、ステップSF98に進むと、CPU8は、レジスタF(c)に格納される各ドット毎の各色(R,G,B)のオブジェクト画像データをレジスタF(R),F(G),F(B)に取込む。続く、ステップSF99では、レジスタF(c)から読み出したオブジェクト画像データが「透明」なデータであるかどうかを判断する。ここで、「透明」なデータであれば、判断結果が「YES」となり、次のステップSF100に進む。
ステップSF100では、レジスタYの値が「31」以上、すなわち、32ドット×32ドットで形成されるオブジェクト画像データの内、最下端のドットであるか否かを判断する。ここで、最下端位置になければ、判断結果は「NO」となり、ステップSF101に処理を進める。
【0110】
ステップSF101では、レジスタX,Yをそれぞれ1インクリメントして歩進させる。すなわち、この場合、シェーディング方向Ecが「6」であるから、光源の方向が左下(図4参照)から進入する。このため、これに直交する方向でオブジェクト画像データの各ドットを読み出すべく、読み出しドット位置をX方向およびY方向にそれぞれ1ドット分歩進させ、斜め読み出しを行う。読み出しドット位置を斜めに歩進させた後、CPU8は上述したステップSF97に戻す。
【0111】
一方、上記ステップSF100において、レジスタYの値が「31」以上である時には、判断結果が「YES」となり、ステップSF102に進む。ステップSF102では、読み出しドット位置を変更するため、レジスタYの値からレジスタZの値を減算し、その値をレジスタYにストアする。また、レジスタXをゼロリセットすると共に、レジスタZの値をインクリメントする。これにより、読み出しドット位置が最下端に達した場合、上述した斜め読み出しする際の読み出し行が更新される。
【0112】
次いで、ステップSF103に進むと、レジスタYの値がレジスタYsの値より大、つまり、シェーディング領域を超えたかどうかを判断する。ここで、シェーディング領域を超えた場合には、判断結果が「NO」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。これに対し、現在のドット位置がシェーディング領域内にあれば、判断結果は「YES」となり、前述したステップSF97へ処理を戻す。
【0113】
さて、上述したステップSF97において読み出したオブジェクト画像データが「透明」なデータでない場合には、当該ステップSF97における判断結果が「NO」となり、ステップSF104に進む。ステップSF104では、シェーデイング率Eに階調値iを乗算した値が、読み出した画像データより濃いかどうか各色毎に判定する。ここで、各色(R,G,B)において(i・E)値が濃い場合には、判断結果が「YES」となり、次のステップSF105に処理を進め、一方、そうでない場合には、判断結果が「NO」となり、上述したステップSF100に処理を進める。
【0114】
ステップSF105に進むと、CPU8は、各色(R,G,B)毎の(i・E)値を、各レジスタF(R),F(G),F(B)にセットする。そして、ステップSF106では、レジスタXの値が「0」、すなわち、読み出しドット位置が最左端に達したかどうかを判断する。ここで、最左端に達していない時には、引続き次のドットに対してシェーディング処理を施す必要があるから、判断結果は「NO」となり、前述したステップSF100に処理を進める。
一方、読み出しドット位置が最左端に達した時には、判断結果が「YES」となり、ステップSF107に進む。ステップSF107では、前述した斜め読み出しする際の読み出し行が更新されるのに伴い、レジスタiに格納される階調値を1デクリメントして陰影を1段階濃くする。
【0115】
そして、続く、ステップSF108では、現在処理しているドット位置がシェーディング領域を超えたか、あるいは階調値iが「0」のいずれかを満たしているか否かを判断する。ここで、上記両条件のいずれかを満たした時には、シェーディング付与が完了したとして判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。これに対し、上記両条件のいずれも満たさない時には、シェーディング付与が完了していないと見做して判断結果が「NO」となり、ステップSF100に処理を進める。
このように、シェーディング方向Ecが「6」の場合、画面左下から斜め右上に向う光源方向に直交するようオブジェクト画像を形成する各ドットを斜め読み出しし、斜め読み出しされる各ドット行毎に順次低減する階調値とシェーディング率Eとを乗算してなるシェーディングを付与する。
【0116】
▲8▼シェーディング方向Ecが「7」の場合
この場合、ステップSF109の判断結果が「YES」となり、ステップSF110に処理を進める。ステップSF110では、レジスタX,Yにそれぞれゼロリセットすると共に、レジスタiに階調値「16」をセットする。次いで、ステップSF111では、レジスタXhの値にシェーディング係数Eを乗算して得られるシェーディング領域をレジスタXsにストアする一方、レジスタYの値に「32」を乗算した値とレジスタXの値とを加算してレジスタcにセットする。
【0117】
次に、ステップSF112に進むと、CPU8は、レジスタF(c)に格納される各ドット毎の各色(R,G,B)のオブジェクト画像データをレジスタF(R),F(G),F(B)にそれぞれ取込む。続く、ステップSF113では、レジスタF(c)から読み出したオブジェクト画像データが「透明」なデータであるかどうかを判断する。ここで、「透明」なデータであれば、判断結果が「YES」となり、次のステップSF114に進む。
ステップSF114では、レジスタYの値を1インクリメントして歩進させ、続く、ステップSF115では、この歩進したレジスタYの値が「31」より大であるか否かを判断する。すなわち、32ドット×32ドットで形成されるオブジェクト画像データの内、最下端のドットであるか否かを判断する。ここで、最下端位置になければ、判断結果は「NO」となり、前述したステップSF111に処理を戻す。
【0118】
一方、読み出したドットの位置が最下端であれば、上記ステップSF115の判断結果が「YES」となり、ステップSF116に進む。ステップSF116では、レジスタXの値を1インクリメントすると共に、レジスタYをゼロリセットする。すなわち、この場合、シェーディング方向Ecが「7」であるから、光源の方向が左から真横に進入する。このため、32ドット×32ドットのオブジェクト画像データエリアを左端上から下方向へ至る読み出し行を、順次右端X方向へ走査させる読み出し形態となる。
【0119】
そして、ステップSF117では、レジスタXsの値がレジスタXの値より大、つまり、シェーディング領域を超えたかどうかを判断する。ここで、シェーディング領域を超えた場合には、判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
これに対し、現在のドット位置がシェーディング領域内にあれば、判断結果は「NO」となり、前述したステップSF111へ処理を戻す。
【0120】
さて、上述したステップSF113において読み出したオブジェクト画像データが「透明」なデータでない場合には、当該ステップSF113における判断結果が「NO」となり、ステップSF118に進む。ステップSF118では、シェーデイング率Eに階調値iを乗算した値が、読み出した画像データより濃いかどうか各色毎に判定する。ここで、各色(R,G,B)における(i・E)値が濃い場合には、判断結果が「YES」となり、次のステップSF119に処理を進める。一方、そうでない場合には、判断結果が「NO」となり、上述したステップSF114に処理を進める。
【0121】
ステップSF119に進むと、CPU8は、各色(R,G,B)毎の(i・E)値を、各レジスタF(R),F(G),F(B)にセットする。そして、ステップSF120では、レジスタYの値が「0」、すなわち、読み出しドット位置が最上端に達したかどうかを判断する。ここで、最上端に達していない時には、引続き次のドットに対してシェーディング処理を施す必要があるから、判断結果は「NO」となり、前述したステップSF114に処理を進める。
一方、読み出しドット位置が最上端に達した時には、判断結果が「YES」となり、ステップSF121に進む。ステップSF121では、レジスタiに格納される階調値を1デクリメントして陰影を1段階濃くする。
【0122】
そして、続く、ステップSF122では、現在処理しているドット位置がシェーディング領域を超えたか、あるいは階調値iが「0」のいずれかを満たしているか否かを判断する。ここで、上記両条件のいずれかを満たした時には、シェーディング付与が完了したとして判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
これに対し、上記両条件のいずれも満たさない時には、シェーディング付与が完了していないと見做して判断結果が「NO」となり、ステップSF114に処理を進める。
このように、シェーディング方向Ecが「7」の場合、画面左真横からの光源方向(図4参照)となるから、32ドット×32ドットのオブジェクト画像データエリアを左端上からY方向へ至る読み出し行を、順次右端X方向へ走査させるよう読み出しを行い、読み出された各ドット行毎に順次低減する階調値とシェーディング率Eとを乗算してなるシェーディングが付与される。
【0123】
▲9▼シェーディング方向Ecが「8」の場合
この場合、図15に示すステップSF123の判断結果が「YES」となり、ステップSF124に処理を進める。ステップSF124では、レジスタX,Yをそれぞれゼロリセットする一方、レジスタZに「1」をセットし、かつ、レジスタiに階調値「16」をセットする。次いで、ステップSF125では、シェーディング領域を算出する。すなわち、レジスタXhの値にシェーディング係数Eを乗算してなるシェーディング領域値をレジスタXsにストアする一方、レジスタYの値に「32」を乗算した値とレジスタXの値とを加算してレジスタcにセットする。
【0124】
次に、ステップSF126に進むと、CPU8は、レジスタF(c)に格納される各ドット毎の各色(R,G,B)のオブジェクト画像データをレジスタF(R),F(G),F(B)に取込む。続く、ステップSF127では、レジスタF(c)から読み出したオブジェクト画像データが「透明」なデータであるかどうかを判断する。ここで、「透明」なデータであれば、判断結果が「YES」となり、次のステップSF128に進む。
ステップSF128では、レジスタXの値が「0」以下、すなわち、32ドット×32ドットで形成されるオブジェクト画像データの内、最左端のドットであるか否かを判断する。ここで、最左端位置になければ、判断結果は「NO」となり、ステップSF129に処理を進める。
【0125】
ステップSF73では、レジスタXの値を1デクリメントすると共に、レジスタYの値を1インクリメントする。すなわち、この場合、シェーディング方向Ecが「8」であるから、光源の方向が左上から右斜め下へ進入する。このため、これに直交する方向でオブジェクト画像データの各ドットを読み出すべく、読み出しドット位置をX方向にデクリメントさせつつ、Y方向にインクリメントさせて斜め読み出しを行う。こうして、読み出しドット位置を斜めに歩進させた後、CPU8は上述したステップSF125に戻す。
【0126】
一方、上記ステップSF128において、レジスタXの値が「0」以下である時には、読み出しドット位置を変更するため、次のステップSF130に進む。ステップSF130では、現レジスタXの値にレジスタZの値を加算し、その値をレジスタXにストアする。また、レジスタYをゼロリセットすると共に、レジスタZの値を1インクリメントする。これにより、読み出しドット位置が最左端に達した場合、上述した斜め読み出しする際の読み出し行が更新される。
【0127】
次いで、ステップSF131に進むと、レジスタXの値がレジスタXsの値より大、つまり、シェーディング領域を超えたかどうかを判断する。ここで、シェーディング領域を超えた場合には、判断結果が「NO」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。これに対し、現在のドット位置がシェーディング領域内にあれば、判断結果は「YES」となり、前述したステップSF125へ処理を戻す。
【0128】
さて、上述したステップSF127において、読み出したオブジェクト画像データが「透明」なデータでない場合には、ここでの判断結果が「NO」となり、ステップSF132に進む。ステップSF132では、シェーデイング率Eに階調値iを乗算した値が、読み出した画像データより濃いかどうか各色毎に判定する。ここで、各色(R,G,B)における(i・E)値が濃い場合には、判断結果が「YES」となり、次のステップSF133に処理を進め、一方、そうでない場合には、判断結果が「NO」となり、上述したステップSF128に処理を進める。
【0129】
ステップSF133に進むと、CPU8は、各色(R,G,B)毎の(i・E)値を、各レジスタF(R),F(G),F(B)にそれぞれセットする。そして、ステップSF134では、レジスタYの値が「0」、すなわち、読み出しドット位置が最上端に達したかどうかを判断する。ここで、最上端に達していない時には、引続き次のドットに対してシェーディング処理を施す必要があるから、判断結果は「NO」となり、前述したステップSF128に処理を進める。
一方、読み出しドット位置が最上端に達した時には、判断結果が「YES」となり、ステップSF135に進む。ステップSF135では、前述した斜め読み出しする際の読み出し行が更新されるのに伴い、レジスタiに格納される階調値を1デクリメントして陰影を1段階濃くする。
【0130】
そして、続く、ステップSF136では、現在処理しているドット位置がシェーディング領域を超えたか、あるいは階調値iが「0」のいずれかを満たしているか否かを判断する。ここで、上記両条件のいずれかを満たした時には、シェーディング付与が完了したとして判断結果が「YES」となり、前述した3Dシェーディング(オブジェクト検出)処理におけるステップSE9(図9参照)へ処理を戻す。
これに対し、上記両条件のいずれも満たさない時には、シェーディング付与が完了していないと見做して判断結果が「NO」となり、ステップSF128に処理を進める。
このように、シェーディング方向Ecが「8」の場合には、前述したシェーディング方向Ecが「4」と時と同様に、オブジェクト画像を形成する各ドットを斜め読み出しし、斜め読み出しされる各ドット行毎に順次低減する階調値とシェーディング率Eとを乗算してシェーディングを付与している。
【0131】
このように、第1実施例にあっては、実画像データから抽出した1フレーム分の輝度データDYをX方向に9分割、Y方向に8分割したブロックに分け、これら各ブロック毎の輝度データDYを読み込んで平均輝度を算出し、このフレームにおける高輝度ブロックと低輝度ブロックとを求める。そして、求めた高輝度ブロックと低輝度ブロックとに応じてシェーディング領域を判定すると共に、当該シェーディング領域におけるシェーディング方向およびシェーディング率を算出し、これに基づいてオブジェクト画像にシェーディング処理を施す。
シェーディング処理では、シェーディング領域に位置するオブジェクト画像毎にシェーディング方向Ecとシェーディング率Eとを定める。そして、オブジェクト画像の大きさにシェーディング率Eを乗算して当該オブジェクト画像中のシェーディング領域を求め、求めた領域においてオブジェクト画像の階調をシェーディング方向に対応して「白色」から「黒色」へ順次低減され陰影が付けられる。
【0132】
これにより、実画像の光源方向に当たるオブジェクト画像では、その光源に対応した「ハイライト」として白色に変化する一方、光源から離れるにつれて階調が低下して黒色に変化する陰影が強調されることになる。この結果、2次元のオブジェクト画像に対して、実画像を撮像した時の光源に応じてシェーディングを施すので、時々刻々変化する実画像に対応してオブジェクト画像を簡易的に写実表現することが可能になる訳である。
すなわち、単に、実画像と2次元のオブジェクト画像とをスーパーインポーズ表示した時には、図16に図示するように、オブジェクト画像を3次元的に写実表現し得ないが、本実施例によれば、図17に図示する通り、実画像の光源方向に応じて2次元のオブジェクト画像にシェーディングを付与するから、簡易的に写実表現できる。
【0133】
D.第2実施例の概要
上述した第1実施例においては、画像出力エンコーダ2がCCDカメラ1から供給される撮像信号SSを色差信号と輝度信号とに分離し、その内の輝度信号に基づき実画像における光源方向を検出するようにしていた。これに替えて、第2実施例では外部から供給されるコンポジットビデオ信号から直接的に輝度データを抽出し、抽出した輝度データに基づき、上述した第1実施例と同様にオブジェクト画像にシェーディング処理を施すようにしている。
【0134】
すなわち、第2実施例では、コンポジットビデオ信号をフィルタリングして得られる輝度信号に対してフィールド走査に同期して24ライン分をADサンプリングして輝度データa(0)〜a(6911)を発生する。1ライン288ドットであるから、これを24ライン分サンプリングするため、都合6912データとなり、これを図19に示す態様でメモリにストアする。
ADサンプリングは、フィールド走査に同期してなされる。本実施例の場合、垂直走査が奇数フィールドと偶数フィールド走査とに分れる飛越し走査となる。奇数フィールド走査では、図20(イ)に示す垂直同期パルスV18〜V41、V66〜V89、V114〜V137およびV162〜V185に同期し、偶数フィルードでは垂直同期パルスV42〜V65、V90〜V113、V138〜V161およびV186〜V209に同期する。
【0135】
水平走査は、奇数フィールド/偶数フィールド共に、同図(ロ)に示すように、水平駆動パルスHC67〜HC354に同期し、それ以外の駆動パルス期間は水平ブランキング(帰線消去)期間となる。この水平ブランキング期間あるいは垂直帰線期間中において、ADサンプリングされた24ライン分の輝度データa(0)〜a(6911)(図19参照)をX方向に9分割してなるブロック毎の平均輝度を算出し、その結果をラインブロック毎にメモリに記憶する。24ライン分完了した時点で、偶数フィルード走査に同期して同様に24ライン分のADサンプリングを行い、ブロック毎の平均輝度を算出し、その結果をラインブロック毎にメモリに記憶する。
【0136】
このような奇数フィールド走査と偶数フィールド走査とは、図21に示す順路でなされ、これにより1フレーム分の各ブロック平均輝度が求まる。なお、図21にあっては、Vc=0が奇数フィールド走査を、Vc=1が偶数フィールド走査を表わしている。
なお、帰線消去期間中においては、以上のようにして求めた各ブロックの平均輝度に基づいて定まる光源方向とフレーム内のオブジェクト画像位置とに応じて当該オブジェクト画像に付与するシェーディング範囲を定め、かつ、これに対応したシェーディング率に従ってオブジェクト画像の濃淡(陰影)を調整することでシェーディングが付与される。
【0137】
E.第2実施例の構成
したがって、この第2実施例と前述した第1実施例とは、輝度データを抽出する構成のみが相違する。すなわち、第2実施例では、図18に図示する通り、第1実施例の撮像部3に替えてフィルタ20およびAD変換器21を備える。フィルタ20は、コンポジットビデオ信号から3.58MHzのカラーバースト信号をカットして輝度信号成分を抽出する。AD変換器21は、このフィルタ20から供給される輝度信号を、奇数フィールド走査および偶数フィールド走査のタイミングに同期してA/D変換し、輝度データa(0)〜a(6911)を出力する。また、画像合成部22は、コンポジットビデオ信号と画像制御VDP6から出力されるオブジェクト画像とをスーパーインポーズして出力する。なお、図18において、図1に示す第1実施例と共通する部分には、同一の番号を付し、その説明を省略するものとする。
【0138】
F.第2実施例の動作
ここでは、特に、外部から供給されるコンポジットビデオ信号から輝度データを算出する動作について詳述する。
コンポジットビデオ信号から抽出した各ブロック毎の平均輝度に基づいてなされる「光源位置算出処理」、「シェーディング係数処理」、「シェーディング(オブジェクト検出)処理」および「シェーディング(オブジェクトエディット)処理」は前述した第1実施例と同一だから、その詳細については省略する。
【0139】
(1)初期化/VDP制御
第2実施例による画像処理装置に電源が投入されると、CPU8はROM9に記憶された制御プログラムを読み出してロードした後、図22に示すメインルーチンを起動してステップSH1に処理を進める。ステップSH1では、画像制御VDP6等の周辺デバイスに対してイニシャライズを指示する制御信号を供給する。続く、ステップSH2では、ワークRAM10に確保される各種レジスタ群をリセットしたり、初期値をストアしてイニシャライズする。
また、この時点でCPU8は画像データROM11にストアされる画像データ、すなわち、オブジェクト画像データDOB(あるいはバックグラウンド画像データDBG)および画像データDOBの表示位置や表示色を指定するオブジェクトテーブルデータを画像表示用VRAM7側に一旦格納させるべくDMAコントローラにDMA転送を指示する。この場合、転送元アドレス、転送バイト数および転送先アドレスからなる転送指示情報をDMAコンローラにセットする。
【0140】
こうして周辺デバイスおよびワークエリアが初期化されると、CPU8はステップSH3に進み、画像表示用VRAM11に格納されたオブジェクト画像データDOB(あるいはバックグラウンド画像データDBG)を読み出して画像制御VDP6側に転送する。そして、ステップSH4では読み出したオブジェクトテーブルデータを画像制御VDP6側に転送する。次いで、ステップSH5に進むと、A/D変換器21にバイアスレベルをゼロ点設定する等のイニシャルセットを施す。次に、ステップSH6に進むと、CPU8は、画像制御VDP6に対して表示制御を開始させる旨の制御信号を与える。これにより、画像制御VDP6は、オブジェクトテーブルデータで指定される表示位置/表示色のオブジェクト画像データDOBを表示させるべく画像制御する。次いで、この後、CPU8はステップSH7に進み、輝度データ算出処理へ移行する。
【0141】
(2)輝度データ算出処理
ステップSH7に進むと、CPU8は図23に示す輝度データ算出処理に移行してステップSJ1を実行する。まず、ステップSJ1では、レジスタVc,Hc,Hx,Hyおよびbをそれぞれゼロリセットする。なお、これらレジスタにストアされる値については追って説明する。続いて、ステップSJ2に進むと、CPU8はレジスタVcにストアされる垂直同期パルスカウンタ値が「2」以下、つまり、最初の1フレーム(画面)分の輝度データを抽出し終えたかどうかを判断する。ここで、最初の1フレームにおける奇数フィールド走査あるいは偶数フィールド走査がなされている時には、判断結果が「YES」となり、次のステップSJ3に処理を進める。
【0142】
ステップSJ3では、レジスタaの値をゼロリセットし、続く、ステップSJ4では、レジスタCの値をゼロリセットする。そして、ステップSJ5に進むと、レジスタVcの値が「1」、すなわち、偶数フィールド走査であるか否かを判断する。ここで、最初の奇数フィールド走査である時には、判断結果が「NO」となり、ステップSJ6に進み、レジスタHyに走査ライン番号「18」をセットする。
一方、レジスタVcの値が「1」となる偶数フィールド走査であれば、ここでの判断結果は「YES」となり、ステップSJ7に処理を進め、レジスタHyに走査ライン番号「42」をセットする。
【0143】
次に、ステップSJ8では、レジスタHcの値が(Hy+48・Hx)以上であるか、つまり、垂直同期タイミングが奇数フィールド走査(あるいは偶数フィールド走査)のタイミングになるまで待機する。ここで、例えば、最初の奇数フィールド走査である時には、垂直同期パルスが第18ラインに対応するまで待機する。そして、そのタイミングになった時点で、このステップSJ8の判断結果が「YES」となり、次のステップSJ9に処理を進める。
ステップSJ9では、レジスタCにカウントされる水平駆動パルスHCが「67」以上に達するまで待機し、カウント値が「67」未満の時には判断結果が「NO」となり、ステップSJ10に進む。ステップSJ10では、レジスタCのカウント値を1インクリメントしてステップSJ9に処理を戻す。
【0144】
そして、いま、例えば、レジスタCの値が「67」に達すると、上記ステップSJ9の判断結果が「YES」となり、ステップSJ11に進み、対応する走査ラインの輝度信号をA/Dサンプリングして輝度データを生成する。次いで、ステップSJ12では、このA/Dサンプリングされた輝度データをレジスタYc(a)にストアする。
次に、ステップSJ13では、レジスタCの値が「355」より大であるかどうかを判断する。すなわち、1走査ライン分の輝度信号をA/Dサンプリングしたか否かを判断している。ここで、1走査ライン分のサンプリングが完了していない場合には、判断結果が「NO」となり、ステップSJ14,SJ15を実行してレジスタa,Cの値を1インクリメントして歩進させ、再びステップSJ12に処理を戻す。一方、1走査ライン分288ドットの輝度データをサンプリングし終わった時点で、上記ステップSJ13の判断結果が「YES」となり、次のステップSJ16に処理を進める。
【0145】
ステップSJ16に進むと、CPU8は、垂直同期パルスの累算値がストアされるレジスタHcの値が(Hy+48・Hx+24)を満たすタイミングにあるか否か、すなわち、24ライン分の走査が完了したか否かを判断する。ここで、24ライン分の走査が完了していない時には、判断結果が「NO」となり、ステップSJ17に進み、レジスタCをゼロリセットした後、ステップSJ12に処理を戻して引続き輝度データをサンプリングする。
一方、24ライン分の走査が完了すると、ステップSJ16の判断結果が「YES」となり、図24に示すステップSJ18に処理を進める。ステップSJ18では、レジスタX,Y,Yccをそれぞれゼロリセットする。
【0146】
次いで、ステップSJ19では、サンプリングされ、レジスタYc(a)に格納された288ドット×24ラインの輝度データを32ドット毎のブロックに9分割すべくレジスタaの値を判断する。つまり、288*Y+32*X≦a<288*Y+32*(X+1)なる条件を満たすかどうかを判断する。ここで、レジスタaの値がこの条件を満足する時には、判断結果は「YES」となり、次のステップSJ20に進む。ステップSJ20では、レジスタYcc(b)にレジスタYc(a)の輝度データを累算して行く。つまり、1ブロック32ドット分の輝度データを累算する。そして、この後、ステップSJ21に進み、レジスタaの値を1インクリメントして歩進させる。
【0147】
次に、ステップSJ22に進むと、レジスタYの値が「25」以上、つまり、24ライン分の輝度データをブロック分割し終えたか否かを判断する。ここで、ブロック分割が完了していない時には、判断結果が「NO」となり、上述したステップSJ19に処理を戻し、再度、輝度データを32ドット毎のブロックに9分割すべくレジスタaの値を判断する。そして、上述したステップSJ19において、分割条件が満たされない時には、判断結果が「NO」となり、ステップSJ23に進み、レジスタYの値を1インクリメントすると共に、レジスタXの値をゼロリセットし、かつ、レジスタaの値に「288」を加算する。つまり、ブロック分割するラインを更新する。
【0148】
こうして走査ライン毎の輝度データを逐次32ドット毎のブロックに分割し、これが24ライン分なされると、上述したステップSJ22の判断結果が「YES」となり、CPU8はステップSJ24に処理を進める。ステップSJ24では、レジスタYcc(b)に格納されたブロック毎の輝度累算値を総ドット数(32*24)で除算し、ブロック毎の平均輝度を求め、これをレジスタYcc(b)にストアし直す。次いで、ステップSJ25に進むと、レジスタbの値を1インクリメントする。続いて、ステップSJ26では、レジスタXの値が「9」以上、すなわち、1ブロックラインの平均輝度を算出し終えたか否かを判断する。ここで、1ブロックライン分の処理が完了していない時には、判断結果が「NO」となり、ステップSJ27に処理を進める。
【0149】
ステップSJ27では、次のブロックへ処理を移すべく、レジスタYの値をゼロリセットする一方、レジスタXの値を歩進させ、レジスタaに「32*X」をセットして前述したステップSJ19に処理を戻す。
これに対し、24ラインの輝度データをブロック化し、各ブロック毎の平均輝度を算出し終えた場合には、ステップSJ26の判断結果が「YES」となり、ステップSJ28に進む。ステップSJ28に進むと、CPU8は、レジスタHxの値を1インクリメントし、288ドット×24ラインからなるフィールド走査が完了した旨を表わす。
【0150】
そして、ステップSJ29に進むと、ブロック分割する際のX,Yポインタ、つまり、レジスタX,Yの値をゼロリセットし、次のステップSJ30に処理を進める。ステップSJ30では、レジスタHxが「3」より小さいか否か、すなわち、1画面分の輝度データ(288ドット×192ライン)分の平均輝度算出が完了したか否かを判断する。ここで、レジスタHxが「3」より小さい場合には、1画面分の平均輝度算出が完了していないので、判断結果は「YES」となり、図23に示すステップSJ2に処理を戻す。
一方、1画面分の平均輝度算出が完了した時には、判断結果が「NO」となり、ステップSJ31に処理を進め、レジスタHxの値をゼロリセットする。次いで、ステップSJ32に進み、垂直同期パルスを検出する迄待機し、当該パルスを検出した時点で判断結果が「YES」となり、前述したステップSJ2に処理を戻す。
【0151】
そして、ステップSJ2では、レジスタVcの値が「2」以下であるかどうか判断する。1フレーム(画面)分の平均輝度算出が完了していない状態では、レジスタVcの値が「2」以下であるから、判断結果が「YES」となり、以上説明した過程を繰り返す。これに対し、1フレーム(画面)分の平均輝度算出が完了した時には、レジスタVcの値が「2」より大となり、ここでの判断結果が「NO」となり、図25に示す一連のシェーディング処理を実行する。
【0152】
このように、第2実施例による輝度データ算出処理にあっては、コンポジットビデオ信号をフィルタリングして得られる輝度信号に対し、フィールド走査に同期して24ライン分をADサンプリングする。ADサンプリングされた24ライン分の輝度データa(0)〜a(6911)(図19参照)をX方向に9分割してなるブロック毎の平均輝度を算出し、その結果をラインブロック毎にメモリに記憶する。そして、こうした24ライン分の処理がなされるフィールド走査を、奇数フィールド走査と偶数フィールド走査とにわたって行い1フレーム分の平均輝度を得るようにしている。
【0153】
(3)シェーディング処理
以上のようにして1フレーム(画面)分の平均輝度算出が完了すると、図25に示す一連のシェーディング処理がなされる。
すなわち、前述した第1実施例と同様に、先ず各ブロック毎の平均輝度に基づいてそのフレームにおける高輝度ブロックと低輝度ブロックとを求める(ステップSK1)。そして、求めた高輝度ブロックと低輝度ブロックとに応じて光源の方向を定め、定めた光源方向に応じたシェーディング領域を判定する(ステップSK2)。続いて、当該シェーディング領域のシェーディング係数を算出する(ステップSK3)。
【0154】
次に、シェーディング領域に位置するオブジェクト画像を検出し(ステップSK4)、検出したオブジェクト画像毎にシェーディング方向Ecとシェーディング率Eとを定める(ステップSK5)。そして、オブジェクト画像の大きさにシェーディング率Eを乗算して当該オブジェクト画像中のシェーディング領域を求め、求めた領域においてオブジェクト画像の階調をシェーディング方向に対応して「白色」から「黒色」へ順次低減され、これによりシェーディングが付与される(ステップSK6)。そして、この後、CPU8は図23に示す輝度データ算出処理のステップSJ1に処理を戻す。
【0155】
(4)割込み処理
次に、所定周期毎に割込み実行されて垂直同期パルスおよび水平駆動パルスをカウントする割込み処理について図26を参照して説明する。
所定周期毎にこの処理が実行されると、CPU8はステップSL1に処理を進め、垂直同期パルスV−SYNCを検出したか否かを判断する。ここで、垂直同期パルスV−SYNCを検出すると、判断結果が「YES」となり、次のステップSL2に進む。一方、垂直同期パルスV−SYNCを検出しなかった時には、判断結果が「NO」となり、ステップSL2に進む。ステップSL2では、レジスタVcの値を1インクリメントして歩進させる。
次いで、ステップSL3では、水平駆動パルスHCを検出したかどうかを判断し、検出しなかった時には、この割込み処理を完了してメインルーチンに復帰する。一方、検出した時には、レジスタHcの値を1インクリメントし、その後にメインルーチンに復帰する。
【0156】
以上説明したように、第2実施例によれば、フィールド走査に同期してコンポジットビデオ信号から直接的に輝度信号を抽出し、抽出した輝度信号に基づいて1画面分の平均輝度を発生するので、第1実施例のように撮像部3や画像処理DSP5を備えずとも、リアルタイムに近い状態でシェーディング処理を施すことが可能になる。また、第2実施例においては、24ライン走査分の輝度データをストアするメモリを時分割的に用いているため、大容量のフレームメモリを必要とせず、メモリ容量の節約も実現している。
【0157】
また、本発明による第1および第2実施例におけるシェーディング処理では、シェーディング領域にある各ドット毎に計算を施しているが、これに替えて、例えば、球などの左右対象体では、光源方向を境として一方側の領域での陰影濃度を求め、これを他方側の領域へ写像することも可能である。このようにすることで、シェーディング処理に要する計算量が半減し、より高速な処理が実現し得る。さらに、上述した各実施例にあっては、光源方向を2次元上の8方向に限定したが、これに限らず、光源方向を3次元位置として定め、これに応じたシェーディングを付与することも可能である。
【0158】
【発明の効果】
本発明によれば、輝度情報抽出手段が撮像された実画像の輝度情報をフレーム毎に抽出すると、平均輝度発生手段が抽出された1フレーム分の輝度情報を所定画素領域のブロックで面分割し、面分割された複数のブロック毎の平均輝度を算出し、シェーディング条件発生手段がこの平均輝度発生手段により得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とからシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生する。そして、シェーディング付与手段が実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生手段によって発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するので、時々刻々変化する実画像に対応してオブジェクト画像を簡易的に写実表現することができる。
また、本発明によれば、撮像された実画像の輝度情報を輝度情報抽出ステップにてフレーム毎に抽出すると、平均輝度発生ステップにおいてこの輝度情報抽出ステップにて抽出された1フレーム分の輝度情報を所定画素領域のブロックで面分割し、面分割された複数のブロック毎の平均輝度を算出する。そして、シェーディング条件発生ステップがこの各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とからシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生すると、前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合には、シェーディング付与ステップが前記シェーディング条件発生ステップにて発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するので、時々刻々変化する実画像に対応してオブジェクト画像を簡易的に写実表現することができる。
【図面の簡単な説明】
【図1】本発明の第1実施例による画像処理装置の電気的構成を示すブロック図である。
【図2】第1実施例における撮像部3の構成を示すブロック図である。
【図3】第1実施例における輝度データDyの記憶形態を説明するためのメモリマップである。
【図4】第1実施例における光源方向を説明するための図である。
【図5】第1実施例による初期化/VDP制御処理の動作を説明するためのフローチャートである。
【図6】第1実施例による輝度データ算出処理の動作を説明するためのフローチャートである。
【図7】第1実施例による光源位置算出処理の動作を説明するためのフローチャートである。
【図8】第1実施例によるシェーディング係数処理の動作を説明するためのフローチャートである。
【図9】第1実施例による3Dシェーディング(オブジェクト検出)処理の動作を説明するためのフローチャートである。
【図10】第1実施例による3Dシェーディング(オブジェクトエディット)処理の動作を説明するためのフローチャートである。
【図11】第1実施例による3Dシェーディング(オブジェクトエディット)処理の動作を説明するためのフローチャートである。
【図12】第1実施例による3Dシェーディング(オブジェクトエディット)処理の動作を説明するためのフローチャートである。
【図13】第1実施例による3Dシェーディング(オブジェクトエディット)処理の動作を説明するためのフローチャートである。
【図14】第1実施例による3Dシェーディング(オブジェクトエディット)処理の動作を説明するためのフローチャートである。
【図15】第1実施例による3Dシェーディング(オブジェクトエディット)処理の動作を説明するためのフローチャートである。
【図16】シェーディングを施す以前のオブジェクト画像の一例を、ディスプレー上に表示した中間調画像として撮像した写真である。
【図17】第1実施例によるシェーディングを施したオブジェクト画像の一例を、ディスプレー上に表示した中間調画像として撮像した写真である。
【図18】第2実施例による画像処理装置の構成を示すブロック図である。
【図19】第2実施例による輝度データのサンプリング形態を説明するためのメモリマップである。
【図20】第2実施例による輝度データのサンプリング形態を説明するための垂直/水平走査タイミング図である。
【図21】第2実施例による飛越し走査を説明するための図である。
【図22】第2実施例による初期化/VDP制御処理の動作を説明するためのフローチャートである。
【図23】第2実施例による輝度データ算出処理の動作を説明するためのフローチャートである。
【図24】第2実施例による輝度データ算出処理の動作を説明するためのフローチャートである。
【図25】第2実施例に適用される第1実施例のシェーディング処理の動作概要を示すフローチャートである。
【図26】第2実施例による割込み処理の動作を示すフローチャートである。
【符号の説明】
1 CCDカメラ
2 画像出力エンコーダ
3 撮像部(輝度情報抽出手段)
4 映像出力アンプ
5 画像処理DSP
6 画像制御DSP
7 画像表示用VRAM
8 CPU(平均輝度発生手段、シェーディング条件発生手段、シェーディング付与手段)
9 プログラムROM
10 ワークRAM(平均輝度発生手段)
11 画像データROM
Claims (9)
- 撮像された実画像の輝度情報をフレーム毎に抽出する輝度情報抽出手段と、
この輝度情報抽出手段により抽出された1フレーム分の輝度情報を所定画素領域のブロックで面分割し、面分割された複数のブロック毎の平均輝度を算出する平均輝度発生手段と、
この平均輝度発生手段により得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とからシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生するシェーディング条件発生手段と、
前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生手段によって発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するシェーディング付与手段と
を具備することを特徴とする画像処理装置。 - 前記平均輝度発生手段は、所定画素領域で形成されるブロックに含まれる各画素毎の輝度情報を累算した値を、当該ブロック内の総画素数で除算して当該ブロックの平均輝度を発生することを特徴とする請求項1記載の画像処理装置。
- 前記シェーディング条件発生手段は、最も高輝度のブロック位置と最も低輝度のブロック位置との間に位置するブロックを前記シェーディング領域と判定することを特徴とする請求項1又は2に記載の画像処理装置。
- 前記シェーディング条件発生手段は、最も高輝度のブロック位置に対して前記シェーディング領域に含まれる各ブロックが8方位のいずれに位置するかを判断してシェーディング方向を定めることを特徴とする請求項1又は2に記載の画像処理装置。
- 前記シェーディング条件発生手段は、最も高輝度のブロック位置と最も低輝度のブロック位置との座標差を(X3,Y3)、最も高輝度のブロック位置から前記シェーディング領域の各ブロック位置までの座標差を(Xs1,Ys1)とした場合、これら各ブロックのシェーディング率を(Xs1/X3)・(Ys1/Y3)で算出することを特徴とする請求項1又は2に記載の画像処理装置。
- 前記シェーディング付与手段は、オブジェクト画像の表示長と、当該オブジェクト画像の表示位置に対応するブロックのシェーディング率とを乗算して当該オブジェクト画像におけるシェーディング領域を判定し、判定したシェーディング領域に含まれる各画素の階調を、対応するシェーディング方向に従って順次低減させてシェーディングを付与することを特徴とする請求項1乃至5の何れかに記載の画像処理装置。
- 外部から供給される映像信号にフィルタリングを施して得た輝度信号を、フィールド走査に同期して輝度情報に変換する変換手段と、
この変換手段により変換された複数走査ライン分の輝度情報を帰線消去期間中に所定画素幅で分割してなる各ブロック毎の平均輝度を算出し、算出した平均輝度を複数フィールド走査分蓄積して1画面分のブロックの平均輝度を発生する平均輝度発生手段と、
この平均輝度発生手段により得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とに応じてシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生するシェーディング条件発生手段と、
前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生手段によって発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するシェーディング付与手段と
を具備することを特徴とする画像処理装置。 - 撮像された実画像の輝度情報をフレーム毎に抽出する輝度情報抽出ステップと、
この輝度情報抽出ステップにて抽出された1フレーム分の輝度情報を所定画素 領域のブロックで面分割し、面分割された複数のブロック毎の平均輝度を算出する平均輝度発生ステップと、
この平均輝度発生ステップにて得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とからシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生するシェーディング条件発生ステップと、
前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生ステップにて発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するシェーディング付与ステップと
からなることを特徴とする画像処理方法。 - 外部から供給される映像信号にフィルタリングを施して得た輝度信号を、フィールド走査に同期して輝度情報に変換する変換ステップと、
この変換ステップにて変換された複数走査ライン分の輝度情報を帰線消去期間中に所定画素幅で分割してなる各ブロック毎の平均輝度を算出し、算出した平均輝度を複数フィールド走査分蓄積して1画面分のブロックの平均輝度を発生する平均輝度発生ステップと、
この平均輝度発生ステップにて得られた各ブロックの平均輝度の内、最も高輝度のブロック位置と最も低輝度のブロック位置とに応じてシェーディング領域を判定すると共に、当該シェーディング領域に含まれる各ブロックのシェーディング方向およびシェーディング率を発生するシェーディング条件発生ステップと、
前記実画像上にスーパーインポーズされるオブジェクト画像の表示位置が前記シェーディング領域内に位置する場合、前記シェーディング条件発生ステップにて発生された当該オブジェクト画像の表示位置に対応するブロックのシェーディング方向およびシェーディング率に応じて前記オブジェクト画像にシェーディングを付与するシェーディング付与ステップと
からなることを特徴とする画像処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP08073295A JP3630187B2 (ja) | 1995-03-13 | 1995-03-13 | 画像処理装置、及び、画像処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP08073295A JP3630187B2 (ja) | 1995-03-13 | 1995-03-13 | 画像処理装置、及び、画像処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08249498A JPH08249498A (ja) | 1996-09-27 |
JP3630187B2 true JP3630187B2 (ja) | 2005-03-16 |
Family
ID=13726558
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP08073295A Expired - Fee Related JP3630187B2 (ja) | 1995-03-13 | 1995-03-13 | 画像処理装置、及び、画像処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3630187B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100450836B1 (ko) | 2001-12-11 | 2004-10-01 | 삼성전자주식회사 | 이차원 영상의 입체화 장치 및 방법 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2692458B2 (ja) * | 1991-11-19 | 1997-12-17 | 日本電気株式会社 | 画像の照明方向の変更方法及び装置並び画像合成方法及び装置 |
JPH0628449A (ja) * | 1992-07-08 | 1994-02-04 | Matsushita Electric Ind Co Ltd | 画像合成装置 |
-
1995
- 1995-03-13 JP JP08073295A patent/JP3630187B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH08249498A (ja) | 1996-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1033682B1 (en) | Image processing apparatus and image processing method | |
CN101188774B (zh) | 图像处理设备和图像处理方法 | |
US5634850A (en) | Image processing device and method | |
KR100495191B1 (ko) | 영상합성기및영상합성방법 | |
JPH0785308A (ja) | 画像表示方法 | |
KR20030012889A (ko) | 병렬 z-버퍼 구성 및 투명도 | |
JP4386959B1 (ja) | 画像処理装置 | |
JPH0771225B2 (ja) | テレビジヨン特殊効果装置 | |
US4831557A (en) | Image composing apparatus | |
JP3235776B2 (ja) | 立体感調整方法および立体感調整装置 | |
EP0568697A1 (en) | Method of correcting shading and device therefor | |
US7050066B2 (en) | Image processing apparatus and image processing program | |
JP2000228779A (ja) | 画像処理装置およびその方法 | |
JPH05119752A (ja) | カラー画像の色調整方法及び色調整装置 | |
JP3630187B2 (ja) | 画像処理装置、及び、画像処理方法 | |
CN114241168A (zh) | 显示方法、显示设备及计算机可读存储介质 | |
US20210118216A1 (en) | Method of displaying a wide-format augmented reality object | |
KR100227246B1 (ko) | 화상 변환 장치 | |
JPH07200868A (ja) | 画像処理方法および装置 | |
JPH07129762A (ja) | 素描風画像生成装置 | |
EP0863497A1 (en) | Graphic data generation device with frame buffer regions for normal and size reduced graphics data | |
JP2009205522A (ja) | プログラム、情報記憶媒体、情報変換システム | |
JP2973432B2 (ja) | 画像処理方法および装置 | |
US6900804B1 (en) | Method of forming polygon image and image processing apparatus using the same | |
JPH05120417A (ja) | カラー画像の色調整及び画像合成方法並びに装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20041125 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041208 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20071224 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081224 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081224 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091224 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101224 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101224 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111224 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111224 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121224 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121224 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131224 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |