特許第5665902号(P5665902)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

5665902画像処理装置、画像処理方法、およびプログラム
<>
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000002
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000003
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000004
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000005
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000006
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000007
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000008
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000009
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000010
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000011
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000012
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000013
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000014
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000015
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000016
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000017
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000018
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000019
  • 5665902-画像処理装置、画像処理方法、およびプログラム 図000020
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5665902
(24)【登録日】2014年12月19日
(45)【発行日】2015年2月4日
(54)【発明の名称】画像処理装置、画像処理方法、およびプログラム
(51)【国際特許分類】
   G06T 11/20 20060101AFI20150115BHJP
   G06T 11/40 20060101ALI20150115BHJP
   G09G 5/377 20060101ALI20150115BHJP
   G09G 5/36 20060101ALI20150115BHJP
【FI】
   G06T11/20 300
   G06T11/40
   G09G5/36 520M
   G09G5/36 520P
   G09G5/36 530C
【請求項の数】6
【全頁数】18
(21)【出願番号】特願2013-54190(P2013-54190)
(22)【出願日】2013年3月15日
(65)【公開番号】特開2014-179031(P2014-179031A)
(43)【公開日】2014年9月25日
【審査請求日】2013年7月9日
(73)【特許権者】
【識別番号】503434852
【氏名又は名称】株式会社TAKUMI
(74)【代理人】
【識別番号】100113608
【弁理士】
【氏名又は名称】平川 明
(74)【代理人】
【識別番号】100123319
【弁理士】
【氏名又は名称】関根 武彦
(72)【発明者】
【氏名】道関 健二
(72)【発明者】
【氏名】西田井 俊男
【審査官】 真木 健彦
(56)【参考文献】
【文献】 特開平05−250123(JP,A)
【文献】 特開2011−096109(JP,A)
【文献】 特開平03−278189(JP,A)
【文献】 特開2009−009345(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 11/20
G06T 11/40
(57)【特許請求の範囲】
【請求項1】
図形の境界線と画像の走査線方向の画素の並びとの交点の位置、および前記図形と他の図形との階層関係を示すレイヤ情報を含む交点情報を生成する交点生成部と、
前記階層関係における上位レイヤの図形の存在範囲を除外して、画像の走査線に交差する図形の一方の境界線と前記走査線との交点(始点)前記図形の他方の境界線と走査線との交点(終点)とによって定義されるスパンを生成するスパン生成部と、
前記スパンに含まれる画素の集合を生成するラスタライザと、を備える画像処理装置。
【請求項2】
前記交点生成部は、交点位置のピクセルを複数のサブピクセルに分割してサブピクセルごとに、図形の境界線がカバーする範囲を示すカバー情報を設定し、
前記スパン生成部は、サブピクセルのカバー情報を基に、前記ピクセルにおいて境界線が通過する部分の前記ピクセルに対する比率を示すカバー値を算出し、前記カバー値にしたがって、前記上位レイヤの図形の存在範囲および前記それぞれの交点を判定する請求項1に記載の画像処理装置。
【請求項3】
コンピュータが、図形の境界線と走査線方向の画素の並びとの交点の位置、および前記図形と他の図形との階層関係を示すレイヤ情報を含む交点情報を生成する交点生成ステップと、
前記階層関係における上位レイヤの図形の存在範囲を除外して、画像の走査線に交差する図形の一方の境界線と前記走査線との交点(始点)前記図形の他方の境界線と走査線との交点(終点)とによって定義されるスパンを生成するスパン生成ステップと、
前記スパンに含まれる画素の集合を生成するステップと、を実行する画像処理方法。
【請求項4】
前記交点生成ステップは、交点位置のピクセルを複数のサブピクセルに分割してサブピクセルごとに、図形の境界線がカバーする範囲を示すカバー情報を設定するステップを有し、
前記スパン生成ステップは、サブピクセルのカバー情報を基に、前記ピクセルにおいて境界線が通過する部分の前記ピクセルに対する比率を示すカバー値を算出し、前記カバー値にしたがって、前記上位レイヤの図形の存在範囲および前記それぞれの交点を判定するステップを有する請求項3に記載の画像処理方法。
【請求項5】
コンピュータに、図形の境界線と走査線方向の画素の並びとの交点の位置、および前記図形と他の図形との階層関係を示すレイヤ情報を含む交点情報を生成する交点生成ステップと、
前記階層関係における上位レイヤの図形の存在範囲を除外して、画像の走査線に交差する図形の一方の境界線と前記走査線との交点(始点)前記図形の他方の境界線と走査線との交点(終点)とによって定義されるスパンを生成するスパン生成ステップと、
前記スパンに含まれる画素の集合を生成するステップと、を実行させるためのコンピュータ実行可能なプログラム。
【請求項6】
前記交点生成ステップは、交点位置のピクセルを複数のサブピクセルに分割してサブピクセルごとに、図形の境界線がカバーする範囲を示すカバー情報を設定するステップを有し、
前記スパン生成ステップは、サブピクセルのカバー情報を基に、前記ピクセルにおいて境界線が通過する部分の前記ピクセルに対する比率を示すカバー値を算出し、前記カバー値にしたがって、前記上位レイヤの図形の存在範囲および前記それぞれの交点を判定するステップを有する請求項5に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ベクタグラフィックス処理に関する。
【背景技術】
【0002】
ベクタグラフィックス、あるいは2次元コンピュータグラフィックスを処理する画像処理では、画像処理装置が重なりあう図形を描画する場合、重なりの一番下の図形から上の図形にむかって順番に描画する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2006−221418号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来の技術では、この手法で下の図形を描画する時点ではどの部分が上の図形により隠蔽されるかが不明であるため、画像処理装置は、隠蔽される図形のピクセル(画素)に対しても描画のための処理を実行する。本発明の課題は、ベクタグラフィックス、あるいは2次元コンピュータグラフィックスを処理する画像処理において、重なりあう図形を描画する処理を効率化することにある。
【課題を解決するための手段】
【0005】
本発明の実施形態の1つの側面は、画像処理装置によって例示される。本画像処理装置は、図形の境界線と画像の走査線方向の画素の並びとの交点の位置、および図形と他の図形との階層関係を示すレイヤ情報を含む交点情報を生成する交点生成部と、階層関係における上位レイヤの図形の存在範囲を除外して、画像の走査線に交差する図形の一方の境界線と走査線との交点(始点)から、図形の他方の境界線と走査線との交点(終点)までの間に含まれる画素の集合であるスパンを生成するスパン生成部と、を備える。
【発明の効果】
【0006】
本画像処理装置によれば、ベクタグラフィックス、あるいは2次元コンピュータグラフィックスを処理する画像処理において、重なりあう図形を描画する処理を効率化することができる。
【図面の簡単な説明】
【0007】
図1】比較例の画像処理装置の処理例である。
図2】比較例に係る画像処理装置を含む情報処理装置の構成を例示する図である。
図3】エッジ情報の構成を例示する図である。
図4】スパン情報の構成を例示する図である。
図5】画像処理装置による処理対象を例示する図である。
図6】比較例に係る交点バッファのフォーマット例である。
図7】1つのピクセルを4×4のサブピクセルに分割した場合のカバー値を例示する図である。
図8】交点バッファの構成を例示する図である。
図9】カバー値情報を加算する処理を例示する図である。
図10】交点Xの右側に隣接する座標(X+1)のピクセルのカバー値情報の算出を例示する図である。
図11】カバー値情報を減算する処理を例示する図である。
図12】カバー値情報の例である。
図13】スパン生成処理を例示する図である。
図14】レイヤ付き交点情報の交点バッファ上のフォーマットを例示する図である。
図15】実施例に係る画像処理装置を含む情報処理装置の構成を例示する図である。
図16】実施例に係るスパン生成処理のフローチャートを例示する図である。
図17】交点処理の詳細を例示する図である。
図18】スパン計算の詳細を例示する図である。
図19】変形例に係るスパン計算の詳細を例示する図である。
【発明を実施するための形態】
【0008】
以下、図面を参照して、一実施形態に係る画像処理装置について説明する。以下の実施形態の構成は例示であり、本装置は実施形態の構成には限定されない。
【0009】
[比較例]
図1から図13を参照して、比較例に係る画像処理装置を説明する。図1は、比較例の画像処理装置101の処理例である。図1(A)は、画像処理装置101を含むコンピュータの表示装置に表示される図形の例である。図1(A)では、上層の図形と、下層の図形が一部重なりあって表示されている。
【0010】
図1(B)は、画像処理装置101によるピクセル(画素)の生成例である。画像処理装置101は、図1(A)の画像を表示装置に表示するため、それぞれの図形のピクセルを生成する。下層の図形のピクセル生成の際、画像処理装置101は、上層の図形と、下層の図形が一部重なりあっていることを認識しないで、下層の図形から順番に図形のピクセルを生成する。このため、画像処理装置101は、下層の図形において、上層の図形によって隠された隠面に対しても、ピクセルを生成する。
【0011】
図2は、画像処理装置101を含む情報処理装置の構成を例示する図である。情報処理装置は、画像処理装置101の他に、例えば、CPU102を含む。CPU102は、例えば、画像処理プログラムを実行し、図形情報を画像処理装置101に引き渡す。図形情報は、例えば、多角形、幅情報を含む線等である。
【0012】
画像処理装置101は、エッジ生成部112、シーケンサ113、交点生成部114、ソータ115、スパン生成部116、交点バッファ117、ラスタライザ118、およびピクセル処理部119を含む。
【0013】
エッジ生成部112は、CPU102から図形情報を受け取り、エッジ情報を生成する。エッジ生成部112は、生成したエッジ情報を図示しないバッファに出力する。なお、バッファは、シーケンサ113によって制御されるため、図2では便宜的に、エッジ生成部112からシーケンサ113にエッジ情報が引き渡されている。エッジ生成部112は、例えば、プログラムを実行するDSPであってもよいし、専用のハードウェア回路であってもよい。
【0014】
シーケンサ113は、交点生成部114、ソータ115、およびスパン生成部116を制御する。シーケンサ113は、例えば、プログラムを実行するDSPであってもよいし、専用のハードウェア回路であってもよい。エッジ情報が引き渡されると、シーケンサ113は、交点生成部114を起動する。ただし、エッジ生成部112と交点生成部114とは、例えば、エッジ情報を格納するバッファを通じて、エッジ情報を授受できればよい。したがって、1つの図形、例えば、多角形中の1つのエッジ情報を生成する度に、エッ
ジ情報が交点生成部114に引き渡されるようにしてもよい。つまり、1つの図形の処理において、エッジ生成部112と交点生成部114とは、並列に処理を実行してもよい。
【0015】
交点生成部114は、エッジ生成部112が出力したエッジ情報を基に、交点情報を生成する。ここで、交点情報とは、エッジ生成部112が出力したエッジ情報と、画像の水平線との交点である。画像の水平線は、画像中のピクセルの水平方向の並びであり、走査線ともいう。
【0016】
つまり、交点情報とは、CPU102が出力した図形の境界線と走査線との交点の情報である。交点生成部114は、生成した交点情報を交点バッファ117に出力する。交点生成部114が例えば、1まとまりの図形に対する交点情報を交点バッファ117に出力すると、シーケンサ113は、ソータ115を起動する。
【0017】
ソータ115は、交点バッファ上の交点情報を走査線(例えば、表示される図形のY座標)、X座標をキーに並べ替える。ソータ115は、例えば、プログラムを実行するDSPであってもよいし、専用のハードウェア回路であってもよい。ソータ115による並べ替えが完了すると、シーケンサ113は、スパン生成部116を起動する。
【0018】
スパン生成部116は、並べ替えが完了した交点バッファ117の交点情報から、スパン情報を生成する。スパン生成部116は、生成したスパン情報をラスタライザ118に引き渡す。スパン生成部116は、例えば、プログラムを実行するDSPであってもよいし、専用のハードウェア回路であってもよい。
【0019】
ラスタライザ118は、スパン情報からピクセル情報を生成する。ラスタライザ118は、生成したピクセル情報をピクセル処理部119に引き渡す。ラスタライザ118は、プログラムを実行するDSPであってもよいし、専用のハードウェア回路であってもよい。ピクセル処理部119は、ピクセル情報から図示しない表示装置を制御する表示装置の制御情報を生成し、表示装置に出力する。
【0020】
なお、図2の説明では、シーケンサ113が、交点生成部114の処理終了後ソータ115を起動し、ソータ115の処理終了後スパン生成部116を起動するものとして説明した。しかし、交点生成部114が交点生成部114の処理終了後ソータ115を起動し、ソータ115がソータ115の処理終了後スパン生成部116を起動してもよい。
【0021】
(エッジ情報とスパン情報)
図3に、エッジ情報の構成を例示する。図3のように、エッジ情報は、例えば、エッジ上端のY座標(YTOP)、エッジ下端のY座標(YBottom)、エッジ上端のX座標(XTOP)、Y座標が1行変化したときのX座標の増(減)分(DeltaX)、エッジの向き(Dir)を有す
る。ここで、エッジの向き(Dir)は、エッジが上向きか下向きかを示す。ただし、図形
の内部は、エッジの向きにエッジに沿って移動したときの進行方向の右側(または左側)に定義される。したがって、エッジの向きが図形の内部がエッジの右側に存在するか、右側に存在するかを定義している、ということもできる。
【0022】
図4にスパン情報の構成を例示する。スパンとは、例えば、画像の走査線、例えば、水平方向のピクセルの並びのうち、走査線が1つの図形と交差する部分に相当する。スパン情報は、スパン両端を定義する。図4のように、スパン情報は、スパンのY座標(Y)、
スパンの左端のX座標(XLeft)、スパンの右端のX座標(XRight)、およびスパンのカバー
値(Cover)を含む。カバー値とは、エッジが通過するピクセルにおいて、エッジが通過す
る部分の当該ピクセルに対する比率をいう。例えば、カバー値0は、エッジがピクセルを通過しないことを意味する。一方、カバー値1は、エッジがそのピクセルの全体を被覆し
て通過することをいう。一方、カバー値が0から1の間の値のとき、エッジがそのピクセルの一部を被覆して通過することをいう。スパン情報は、例えば、カバー値ごとに出力される。
【0023】
(交点生成部114の処理)
図5から図8により、交点生成部114の処理を例示する。図5は、画像処理装置101による処理対象を例示する。図5には、円形環状パターンが例示されている。また、円形環状パターンと交差する水平線が例示されている。円形環状パターンの境界線と水平線との間に、4つの交点が形成される。
【0024】
図2に例示したように、CPU102上のアプリケーションプログラムは、例えば、図5のような図形をエッジ生成部112に引き渡す。エッジ生成部112は、円形環状パターンで例示される図形境界線を直線近似した微小直線(エッジ)を生成し、交点生成部114に引き渡す。交点生成部114は、エッジと水平線が交差する交点情報を交点バッファ117に保存する。なお、図5のような外形が曲線の図形ではなく、外形が直線の辺を含む多角形の図形については、直線の辺がそのままエッジとなる。
【0025】
交点生成部114は、図形のエッジが水平線と交差する箇所について、交差したピクセルのX座標、エッジがピクセルをどれだけカバーしたかを示す情報(カバー値情報)、およびエッジの向き(Dir)を1つの交点情報として保存する。
【0026】
図6は、1つのピクセルを4×4のサブピクセルに分割した場合の1交点当たりの交点情報を格納する交点バッファのフォーマット例である。図6では、交点情報は、カバー値情報(Mark1[0:3]、Mark2[0:3]、Mark3[0:3]、Mark4[0:3])、向き(Dir)、予備(Reserved)、およびX座標を含む。
【0027】
図7は、ピクセルとエッジとの交点で交点情報を取り出すとき、1つのピクセルを4×4のサブピクセルに分割した場合のカバー値情報の例である。Mark1[0:3]、Mark2[0:3]、Mark3[0:3]、Mark4[0:3]は、それぞれ4ビットを有し、エッジによって各サブピクセルがカバーされるか否か、つまり、各サブピクセルが図形の内部に含まれるか否かを示す。交点生成部114は、各交点において、エッジに対して図形外側のサブピクセルに対応するカバー値情報のビットに0を設定し、エッジに対して図形内側のサブピクセルに対応するカバー値情報のビットに1を設定する。
【0028】
スパン生成部116は、スパン生成時、カバー値情報を基に、ピクセル全体のカバー値を算出する。カバー値1は、ピクセルが完全にエッジの内側にカバーされることを示す。つまり、カバー値1のピクセルは、図形内部に完全包含されるピクセルを示す。図7の例では、エッジが上向きであるので、エッジの右側に存在するサブピクセルに対応する各ビットに1が設定されている。さらに、同一図形内で重なりがある場合には、エッジの重なりが発生する。スパン生成部116は、同一座標においてエッジの重なりが重なる場合のカバー値情報を算出するためのカウンタを有している。例えば、スパン生成部116が16ビット長のカウンタをサブピクセル数用いると、同一座標における各サブピクセルにおいて、65535個のエッジの重なりの度合いを算出できる。
【0029】
また、図6において、交点バッファ上の向き(Dir)は、エッジが交点を上向きに通過
するか、下向きに通過するかを示す。本実施形態では、例えば、エッジが交点を上向きに通過するとき、交点の右側に図形の内部が存在するものと定義される。ただし、CPU102、図形処理装置101を含む情報処理装置内で統一されている限り、向きの定義は逆であっても構わない。つまり、エッジが交点を上向きに通過するとき、交点の左側に図形の内部が存在するものと定義してもよい。さらに、図6において、X座標は、水平線上の
位置を示す情報である。X座標は、例えば、左から右に並ぶピクセルの通し番号で例示できる。
【0030】
図8は、交点バッファの構成を例示する図である。本実施形態では、各水平線に対して、用意される交点情報の配列である。図8の各矩形内に、図6の交点バッファのフォーマット形式で、交点情報が格納される。
【0031】
図8の縦方向の並び(0〜H−1)は、水平線、つまり走査線の番号を示す。一方、横方向の並び(0〜k−1)は、各水平線ごとの交点バッファの集合を例示する。図8の例では、各水平線ごとに、k個の交点バッファの配列のエントリが用意される。交点生成部114は、図6のような水平線とエッジが交差する箇所を特定する度に、各水平線の交点配列の空きエントリに、配列の左から順に交点情報を図6のフォーマットで追加する。
【0032】
なお、図2に例示したソータ115は、図6図8で例示される交点バッファ上の交点情報の配列を各水平線(1〜H−1)において、X座標により並べ替えて再度交点バッファ117に保存する。
【0033】
以下、図9から図13により、スパン生成部116の処理を例示する。
(スパン生成部116によるカバー値情報の計算)
図9から図11は、スパン生成部116によるカバー値情報の計算手順を例示する図である。スパン生成部116はソート後の各水平線上の交点情報の配列の先頭より交点情報を取り出す。そして、スパン生成部116は現在のカバー値情報と取り出した交点情報のカバー値情報とを加算または減算して交点のカバー値を求める。スパン生成部116は加算するか減算するかはエッジの向き(Dir)により決定する。本実施形態では、上向きが加
算、下向きが減算とする。本実施形態では、エッジが上向きの場合に、図形の内部がエッジの右側に存在すると定義されているからである。図9にカバー値情報を加算する処理を例示する。カバー値は、ピクセル内のサブピクセルに対応する各ワードのエントリ(Marki[j],i=1,4,j=0,3)ごとに加算される。
【0034】
図10に、交点Xの右側に隣接する座標(X+1)のピクセルのカバー値情報の算出を例示する。図10の例では、交点の次の座標X+1のピクセルのカバー値情報は交点のサ
ブピクセルのうち、座標X+1のピクセルの左側に隣接する縦方向の1列(4サブピクセ
ル)をそのまま右側に4列コピーしたものである。なお、交点Xの次の座標X+1に、さ
らに交点がある場合(交点が連続した場合)には、スパン生成部116は、上記の手順で交点Xのカバー値情報から算出された値に、さらにX+1座標の交点から算出されるカバ
ー値情報を加算する。
【0035】
図11に、カバー値情報を減算する処理を例示する。カバー値は、ピクセル内のサブピクセルに対応する各ビットのエントリ(Marki[j],i=1,4,j=0,3)ごとに減算される。
【0036】
スパン生成部116は、図9から図11の処理によって得られるカバー値情報を基に、所定のルールにしたがって、スパンのカバー値を算出する。例えば、図12のカバー値情報を例に、カバー値の算出結果を例示する。算出方法として、カバー値情報に含まれるサブピクセルのうち、ゼロでないサブピクセル数を数える方法(Non-zeroルール)が例示できる。Non-zeroルールによれば、図12の例では、カバー値は13/16=0.8125となる。また、例えば、サブピクセルのカバー値情報が奇数の数を数える方法(ODDルー
ル)では、図12のカバー値情報の場合、カバー値は6/16=0.375となる。
【0037】
(スパンの生成)
図13に、スパン生成部116によるスパン生成処理を例示する。スパン生成部116
は、カバー値が0.0 でないピクセルのX座標をスパンの始点とする。そして、スパン生成部116は、次に現れるカバー値が0.0 となるピクセルのX座標-1(左隣)のピクセルを終点とする。スパン生成部116は、始点と終点を含むスパン情報を生成し、生成したスパン情報をラスタライザ118に出力する。
【0038】
例えば、図13では、交点Aでカバー値1、交点B+1でカバー値0の場合、スパン生成部116は、交点Aを始点として、交点Bを終点とするスパン情報を生成する。交点Aから交点Bまでが、カバー値1のスパンとなる。
【0039】
(問題点)
図6に例示した通り、交点バッファ117上の交点情報には、奥行き情報がない。例えば、図13のようなスパンが複数生成された場合、スパンとスパンとの間の上下関係が不明である。このような場合には、重なりあう複数の図形を描画する場合には、画像処理装置101は、一番下の図形から順に描画することを要求される。したがって、画像処理装置101は、後の段階で、上層に描画される図形によって隠れた下層の図形部分についても、スパン、さらにはピクセルを生成することになり、無駄な処理を実行することになる。
【実施例】
【0040】
図14から図18を参照して、実施例に係る画像処理装置1について説明する。上記比較例の問題点を解決するため、実施例の画像処理装置1は、交点情報にレイヤ番号を付加して保存する。レイヤ番号は、例えば、図形ごとに与えられる0から始まる整数である。実施例では、レイヤ番号が大きいほど図形の重ねあわせ、つまり図形間の階層関係で上位の図形とする。レイヤ番号は、例えば、CPU上のソフトウェアの処理で与えるものとしてもよい。
【0041】
図14にレイヤ付き交点情報の交点バッファ上のフォーマットを例示する。図14のように、実施例の交点情報は、比較例の図16において、予備エリア(Reserved)が、レイヤ番号(Layer[3:0])となっている。図14の例では、レイヤ番号は4ワードで設定される。
【0042】
図15に、実施例に係る画像処理装置1と、CPU102とを含む情報処理装置の構成を例示する。画像処理装置1は、エッジ生成部12、シーケンサ13、交点生成部14、ソータ15、スパン生成部16、交点バッファ17、ラスタライザ18、およびピクセル処理部19を含む。エッジ生成部12、シーケンサ13、交点生成部14、ソータ15、スパン生成部16、交点バッファ17、ラスタライザ18、およびピクセル処理部19等は、例えば、コンピュータプログラムを実行するDSPであってもよい。また、例えば、ハードウェア記述言語によって画像処理装置1に含まれる各構成部分の処理を記述し、ハードウェア回路によって、各構成部分の処理を実行してもよい。また、画像処理装置1に含まれる各構成部分の処理うち、一部をDSPがコンピュータプログラムによって実行し、一部をハードウェア回路によって実行してもよい。
【0043】
実施例では、CPU102は、例えば、画像処理プログラムを実行し、図形情報とともに、レイヤ番号を含む情報を画像処理装置1に引き渡す。一方、シーケンサ13は、レジスタを有しており、現在処理中の図形のレイヤ番号を保持する。シーケンサ13は、例えば、図形情報の切り替わりごとに、レイヤ番号を交点生成部14に引き渡せばよい。交点生成部14は、生成した交点情報に、シーケンサ13から引き渡されたレイヤ番号を付与する。レイヤ番号を付与された交点情報は、交点バッファ17に保持される。スパン生成部16は、交点情報に付されたレイヤ番号によって、スパンの上下関係を判断しつつ、スパンを生成する。
【0044】
一方、実施例のエッジ生成部12、ソータ15、ラスタライザ18、およびピクセル処理部19の処理は、それぞれ比較例のエッジ生成部112、ソータ115、ラスタライザ118、およびピクセル処理部119の処理と同様である。
【0045】
図16から図18によりスパン生成部16の処理を例示する。図16に、スパン生成部16が実行するスパン生成処理のフローチャートを例示する。図16の処理では、まず、スパン生成部16は、注目レイヤ番号を初期値設定する(S1)。注目レイヤ番号は、現在処理中のレイヤ番号を意味する。注目レイヤ番号の初期値は、例えば、最下層のレイヤを示す0である。
【0046】
次に、スパン生成部16は、水平線位置を初期値設定する(S2)。水平線位置とは、例えば、画像中のラスタの番号であり、図8の交点バッファ117の縦方向の番号(0〜H−1)で例示される。なお、実施例においても、交点バッファの構成は、比較例の図8と同様である。また、S2の処理とともに、スパン生成部16は、各レイヤのカバー値情報を0クリアする。すなわち、各レイヤには、エッジと重なりのない状態を示す初期値が設定される。
【0047】
次に、スパン生成部16は、現在処理中の水平線で交点バッファ読み出し初期位置を設定する(S3)。交点バッファ読み出し位置は、例えば、図8の交点バッファ117の横方向の番号(0〜k−1)で例示される。交点バッファ読み出し初期位置は、例えば、0である。
【0048】
そして、スパン生成部16は、交点処理を実行する(S4)。交点処理は、水平線と図形エッジの交点座標において、エッジとピクセルとの関係を示すカバー値を算出するとともに、図形の水平線上の存在範囲を示すスパンを上位レイヤ優先で算出する処理である。S4の詳細は、図17図18にしたがって、後述する。
【0049】
S4において1つの交点座標における処理を実行後、スパン生成部16は、現在の水平線に次の交点があるか否かを判定する(S5)。現在の水平線に次の交点がある場合、スパン生成部16は、制御をS4に戻す。一方、現在の水平線に次の交点がない場合、スパン生成部16は、水平線を更新するとともに、各レイヤのカバー値情報を0クリアする(S6)。そして、スパン生成部16は、全水平線の処理が終了したか否かを判定する(S7)。全水平線の処理が終了していない場合、スパン生成部16は、制御をS3に戻す。すなわち、スパン生成部16は、次の水平線で、交点バッファ読み出し初期位置から処理を実行する。
【0050】
一方、S7の判定で、全水平線の処理が終了した場合、スパン生成部16は、注目レイヤ番号を更新する(S8)。そして、スパン生成部16は、全レイヤ番号の処理が終了したか否かを判定する(S9)。なお、レイヤ番号の最大値は、例えば、CPU102からシーケンサ13を通じて、スパン生成部16に引き渡される。現在の水平線で全レイヤ番号の処理が終了していない場合、スパン生成部16は、制御をS2に戻す。つまり、新たな注目レイヤ番号において、水平線の初期位置から処理を実行する。
【0051】
一方、全レイヤの処理が終了した場合、スパン生成部16は、スパン生成処理を終了する。なお、図16の処理では、外側のループで注目レイヤ番号を更新し、内側のループで水平線を更新した。しかし、スパン生成部16の処理が、図16に限定される訳ではない。例えば、スパン生成部16は、外側のループで水平線を更新し、内側のループの注目レイヤ番号を更新してもよい。
【0052】
図17に、交点処理(図16のS4)の詳細を例示する。図17の処理では、スパン生成部16は、水平線上の1つの交点座標において、カバー値の算出と、スパンの算出を実行する。
【0053】
図17の例では、まず、スパン生成部16は、交点バッファから交点情報を読む(S40)。そして、スパン生成部16は、読み出した交点情報のレイヤ番号が注目レイヤ番号より下層か否かを判定する(S41)。読み出した交点情報のレイヤ番号が注目レイヤ番号以上の場合、スパン生成部16は、読み出した交点情報のカバー値情報を基に、レイヤごとにスパンのカバー値情報を算出する(S42)。
【0054】
S42の処理では、スパン生成部16は、まず、比較例の図9および図11に示した処理と同様の処理を実行する。すなわち、スパン生成部16は、交点上でエッジが上向きか下向きかを判定する。そして、スパン生成部16は、交点情報が上向きエッジを示す場合には、交点情報が示すレイヤにおいて、スパンの現在のカバー値情報の各ワードに、S41で読み出した交点のカバー値情報の各ワードを加算する。一方、スパン生成部16は、交点情報が下向きエッジを示す場合には、交点情報が示すレイヤにおいて、スパンの現在のカバー値情報の各ワードから、S41で読み出した交点のカバー値情報の各ワードを減算する。
【0055】
そして、スパン生成部16は、各交点座標において、サブピクセルのカバー値情報を基に、各スパンにおける交点のカバー値を算出する。サブピクセルのカバー値情報を基に、各スパンにおける交点のカバー値を算出する処理は、比較例において図12にしたがって例示した処理と同様である。すなわち、スパン生成部16は、0以外のサブピクセル数と、ピクセルに含まれる全サブピクセル数の比率を求めてもよい。また、スパン生成部16は、サブピクセルのカバー値情報(Mark1[0:3]、Mark2[0:3]、Mark3[0:3]、Mark4[0:3])各ビットごとの加算値)が奇数のサブピクセル数と、ピクセルに含まれる全サブピクセル数の比率を求めてもよい。なお、読み出した交点情報のレイヤ番号が注目レイヤ番号より下層の場合、スパン生成部16は、S42の処理を実行しないで、そのままS43に処理を進める。そして、スパン生成部16は、交点バッファ上の次の交点情報の交点の座標が、現在処理中の交点情報の交点の座標と同一か否かを判定する(S43)。ここで、交点の座標が同一とは、2つの交点が重なっていることを意味する。次の交点の座標が、現在処理中の交点の座標と同一の場合、スパン生成部16は、制御をS40に戻す。すなわち、スパン生成部16は、重複した交点座標を有するすべての交点情報に対して、図17の交点処理を実行する。
【0056】
一方、次の交点の座標が、現在処理中の交点の座標と異なる場合、スパン生成部16は、スパン生成部16は、次の交点情報を一時的にレジスタ等に保持する(S44)。以下、一時的にレジスタに保持した交点情報の交点座標をX2とする。なお、S40で読み出した現在の交点情報の交点座標を以下の処理ではX1とする。
【0057】
そして、スパン生成部16は、スパン計算を実行する(S45)。スパン計算では、交点座標が同一の複数の交点情報、または単一の交点情報を基に、スパンの開始、スパンの終了、またはスパンの継続が判断される。
【0058】
図18に、スパン計算(図17のS45)の詳細を例示する。すなわち、上位レイヤの交点座標X1でのカバー値が0.0より大きく、上位レイヤのスパン未継続のとき、スパン生成部16は、交点座標X1のピクセルを上位レイヤのスパンの始点に設定する。ここで、スパン未継続とは、スパンの始点が設定されていない状態をいう。さらに、スパン生成部16は、始点の右隣のピクセルのカバー値を計算し、次の交点までのカバー値に設定する(S451)。
【0059】
また、上位レイヤの次の交点X2のカバー値が0.0で、上位レイヤのスパン継続中のとき、スパン生成部16は、次の交点X2の左隣の座標X2−1のピクセルを上位レイヤのスパンの終点に設定する(S452)。次に、スパン生成部16は、交点座標X1に、カバー値1の上位レイヤがあるか否かを判定する(S453)。交点座標X1に、カバー値1の上位レイヤがあるときで、注目レイヤのスパン継続中のとき、スパン生成部16は、交点座標X1の左側の座標X1−1のピクセルを注目レイヤのスパンの終点に設定する(S454)。さらに、本実施例においては、スパン生成部16は、注目レイヤの現在の交点座標X1でのカバー値および座標X1+1のカバー値を算出する。そして、スパン生成部16は、座標X1+1のカバー値を次の交点までのカバー値とする。すなわち、本実施例においては、カバー値1の上位レイヤがある場合でも、注目レイヤのカバー値が0になるまでは、注目レイヤのカバー値を算出しておく。
【0060】
さらに、S454では、注目レイヤが継続中でなく、注目レイヤカバー値が0より大きくなった場合には、スパン生成部16は、現在の交点座標X1を注目レイヤのスパンの始点に設定する。さらに、スパン生成部16は、注目レイヤの現在の交点座標X1でのカバー値および座標X1+1のカバー値を算出する。そして、スパン生成部16は、座標X1+1のカバー値を次の交点までのカバー値とする。上述のように、現在交点座標X1において、注目レイヤのスパンが継続していて、上位レイヤの交点が1未満に変化した場合は、現在の交点座標X1に注目レイヤの交点がなくても注目レイヤのスパンの始点とする必要がある。そのため、カバー値1の上位レイヤが存在する場合でも、注目レイヤについて、始点の設定と、カバー値の計算とを実行しておくのである。
【0061】
その後、スパン生成部16は、スパン計算1の処理を終了する。一方、交点座標Xに、カバー値1の上位レイヤがないときには、スパン生成部16は、S455からS457の処理を実行する。すなわち、注目レイヤの交点座標X1でのカバー値が0.0より大きく、注目レイヤのスパン未継続のとき、スパン生成部16は、交点座標X1のピクセルを注目レイヤのスパンの始点に設定する。また、スパン生成部16は、始点の右隣のピクセルのカバー値を計算し、次の交点までのカバー値に設定する。注目レイヤの次の交点座標X2までのカバー値を現在のカバー値と呼ぶ。さらに、スパン生成部16は、交点座標X1から次の交点座標X2−1までのスパン情報をラスタライザ18に送出する(S455)。したがって、本実施例の処理では、次の交点X2のカバー値が0でなくても一旦スパンは終了する。ただし、S455の処理に代えて、スパン生成部16が次の交点X2のカバー値が0になるまで、スパンを継続し、次の交点X2のカバー値が0になったときに、スパン情報をラスタライザ18に送出するようにしてもよい。
【0062】
さらに、スパン生成部16は、現在の交点X1に注目レイヤがなく、注目レイヤの現在のカバー値が0.0より大きく、かつ、上位レイヤのカバー値が現在の交点X1で1.0未満に変化した場合、現在の交点X1をスパンの始点に設定する(S456)。S456の処理は、上位レイヤに隠されていた、スパン継続中の注目レイヤが表れたことに対応する。この場合には、上位レイヤに隠されていた注目レイヤのスパンが開始する。
【0063】
さらにまた、注目レイヤの次の交点X2のカバー値が0.0で、注目レイヤのスパン継続中のとき、スパン生成部16は、次の交点X2座標の左隣の座標X2−1のピクセルを注目レイヤのスパンの終点に設定する(S457)。
【0064】
図18の手順を交点座標ごとに繰り返すにより、上位レイヤが存在しない場合には、S455の処理で、注目レイヤのスパンの始点が設定される。一方、交点座標に、カバー値1の上位レイヤが存在する場合でも、S454の説明で述べたように、注目レイヤのスパンの始点と次の交点までの現在のカバー値が設定される。すなわち、本実施例では、上位
レイヤのカバー値が1以上の場合も、注目レイヤの始点とカバー値は一応算出される。
【0065】
しかしながら、上位レイヤのカバー値が1の場合、S453の判定がYESとなり、S455からS457の処理が省略される。その結果、交点にカバー値1の上位レイヤが存在する場合には、注目レイヤに対するスパン情報の出力が省略される。したがって、上位レイヤの図形によって隠される範囲では、当該スパンのピクセルは生成されず、図形処理装置1は、ベクタグラフィックスにおいて、効率的にピクセルを作成できる。
【0066】
さらに、複数の交点座標に対するスパン計算1の処理(図18)の繰り返しにおいて、水平線上で上位レイヤの交点に到達した場合にS452の処理によって、注目レイヤのスパンの終点が設定される。また、水平線上で、注目レイヤの図形の右側エッジに達した場合には、S457の処理によって、注目レイヤのスパンの終点が設定される。
【0067】
(変形例)
図17図18では、交点のカバー値をサブピクセルのカバー値情報から得られる0〜1の間の値として、算出した。しかし、このような手順に代えて、交点のカバー値を0か1かに限定してもよい。例えば、図形処理装置1は、図14の交点情報において、Mark1[3:0]からMark4[3:0]に代えて、交点の有無を示す1ビットのフラグによって、交点の有無を記憶すればよい。その場合には、図17のS43の交点のカバー値計算としては、スパン生成部16は、単に、交点情報から、交点の有無を示す1ビットのフラグを読み出せばよい。
【0068】
図19に、カバー値を0か1に限定する場合のスパン計算(図17のS45)の詳細を例示する。すなわち、上位レイヤの交点座標X1でのカバー値が1であり、かつ、上位レイヤのスパン未継続のとき、スパン生成部16は、交点座標X1のピクセルを上位レイヤのスパンの始点に設定する(T451)。
【0069】
また、上位レイヤの次の交点座標X2のカバー値が0で、上位レイヤのスパン継続中のとき、スパン生成部16は、次の交点座標X2の左隣の座標X2−1のピクセルを上位レイヤのスパンの終点に設定する(T452)。
【0070】
次に、スパン生成部16は、交点座標X1に、カバー値1の上位レイヤがあるか否かを判定する(T453)。交点座標X1に、カバー値1の上位レイヤがあるときで、注目レイヤのスパン継続中のとき、スパン生成部16は、交点座標X1の左隣の座標X1−1のピクセルを注目レイヤのスパンの終点に設定する(T454)。さらに、T454において、注目レイヤが継続中でなく、注目レイヤカバー値が1となった場合には、スパン生成部16は、現在の交点座標X1を注目レイヤのスパンの始点に設定する。さらに、注目レイヤの現在の交点座標X1でのカバー値および座標X1+1のカバー値を算出する。そして、スパン生成部16は、座標X1+1のカバー値を次の交点までのカバー値とする。この処理は、S454と同様である。
【0071】
一方、交点座標X1に、カバー値1の上位レイヤがないときには、スパン生成部16は、T455からT457の処理を実行する。すなわち、注目レイヤの交点座標X1でのカバー値が1であり、かつ、注目レイヤのスパン未継続のとき、スパン生成部16は、交点座標X1のピクセルを注目レイヤのスパンの始点に設定する。また、現在の交点座標X1の右隣から次の交点座標X2までのカバー値を1に設定する。そして、スパン生成部16は、現在の交点座標X1から次の交点X2−1までのスパン情報をラスタライザ1に送出する(T455)。
【0072】
さらに、スパン生成部16は、現在の交点X1に注目レイヤがなく、注目レイヤの現在
のカバー値が1であり、かつ、上位レイヤのカバー値が現在の交点X1で0に変化した場合、現在の交点X1をスパンの始点に設定する(T456)。T456の処理は、S456と同様である。さらにまた、注目レイヤの次の交点座標X2のカバー値が0で、注目レイヤのスパン継続中のとき、スパン生成部16は、次の交点座標X2の左隣の座標X2−1のピクセルを注目レイヤのスパンの終点に設定する(T457)。
【0073】
以上述べたように、カバー値を0か1に限定し、サブピクセルによってカバー値を算出しない場合でも、図16図18と同様に、図形の上位レイヤと下位レイヤの関係から、効率的なピクセルの生成が可能である。
【0074】
すなわち、上位レイヤのカバー値が1の場合、T453の判定がYESとなり、T455からT457の処理が省略される。その結果、交点にカバー値1の上位レイヤが存在する場合には、注目レイヤに対するスパン情報の出力が省略される。したがって、上位レイヤの図形によって隠される範囲では、当該スパンのピクセルは生成されず、図形処理装置1は、ベクタグラフィックスにおいて、効率的にピクセルを作成できる。
【0075】
さらに、複数の交点座標に対するスパン計算2の処理(図19)の繰り返しにおいて、水平線上で上位レイヤの交点に到達した場合にT452の処理によって、注目レイヤのスパンの終点が設定される。また、水平線上で、注目レイヤの図形の右側エッジに達した場合には、T456の処理によって、注目レイヤのスパンの終点が設定される。
【0076】
なお、図19の処理を図18と比較した場合、図18では、交点のカバー値が0から1の範囲の値を取り得るため、上位レイヤの図形が半透明となって下位レイヤの図形を表示する場合があり、スパン生成部16は、始点から次の交点までのカバー値を維持する(図18のS455)。一方、図19では、カバー値は、0または1のいずれかであるので、始点から終点まではカバー値が確定しており、スパン生成部16は、始点から次の交点までのカバー値を維持する必要がない(図19のT455)。
【0077】
(その他)
以下、本実施形態で説明したベクタグラフィックスにおけるピクセルの処理と、3次元グラフィックスでのZバッファ法との違いを説明する。3次元グラフィックスにおける隠面処理に用いられるZバッファ法では、図形処理装置は、ピクセル単位で奥行き情報(Z値)を持ちピクセル単位でZ値比較する。これに対して、本実施形態の図形処理装置1は、ピクセルの集合であるスパン単位で処理するため、より効率よく隠面処理を実行できる。
【0078】
《コンピュータが読み取り可能な記録媒体》
コンピュータその他の機械、装置(以下、コンピュータ等)に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【0079】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、CD−ROM、CD−R/W、DVD、ブルーレイディスク、DAT、8mmテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやROM(リードオンリーメモリ)等がある。
【符号の説明】
【0080】
1 図形処理装置
12 エッジ生成部
13 シーケンサ
14 交点生成部
15 ソータ
16 スパン生成部
17 交点バッファ
18 ラスタライザ
19 ピクセル処理部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19