(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上記パワーサンプリング手法では、実際より高解像度で線分描画を行う必要があり、必要なメモリ量が多くなる。また、上記従来技術では、境界画素の面積の算出や、境界画素の色の濃度の算出といった複雑な計算を行う必要がある。
【0008】
そこで、本発明は、上記問題点に鑑み、大容量のメモリや複雑な演算処理を必要とせず、線分描画時に生じるエイリアシングを効果的に低減する画像処理装置およびプログラムを実現することを目的とする。
【課題を解決するための手段】
【0009】
上記課題を解決するために、第1の発明は、画像上において、線分を描画するための線分描画情報を取得するための画像処理装置であって、入力部と、線分描画情報取得部と、を備える。
【0010】
入力部は、線分を描画するための情報を入力するための機能部である。
【0011】
線分描画情報取得部は、線分を描画するための描画情報を取得する。
【0012】
線分描画情報取得部は、評価値取得部と、閾値設定部と、描画情報決定部とを備える。
【0013】
評価値取得部は、描画対象画素である画素P(xa,ya)と、線分の始点と終点とを通る直線と、の位置関係を示す評価値Dを取得する。
【0014】
閾値設定部は、線分の始点から終点までのx方向の差分量dxと、線分の始点から終点までのy方向の差分量dyとに基づいて、少なくとも3つの閾値Th1、Th2およびTh3を設定する。
【0015】
描画情報決定部は、評価値Dと閾値Th1、Th2およびTh3とに基づいて、描画対象画素P(xa,ya)の描画色の濃度と描画対象画素のy軸正方向の隣接画素P(xa,ya+1)の描画色の濃度とを決定する。
【0016】
そして、評価値Dは、
−0.5×dx×k≦D≦1.5×dx×k
係数k:正の実数
を満たし、
閾値Th1、Th2およびTh3は、
−0.5×dx×k<Th1<Th2<Th3<1.5×dx×k
を満たす。
【0017】
評価値取得部は、評価値Dを差分量dyに基づいて更新し、更新した評価値Dが1.5×dx×k以上である場合、更新した評価値Dをさらに差分量dxに基づいて更新するとともに、次の描画対象画素をP(xa+1,ya+1)に決定する。また、評価値取得部は、更新した評価値Dが1.5×dx×k未満である場合、次の描画対象画素をP(xa+1,ya)に決定する。
【0018】
この画像処理装置では、評価値Dが−0.5×dx×k≦D≦1.5×dx×kを満たす、つまり、評価値Dのループ区間が−0.5×dx×k〜1.5×dx×kに設定され、少なくとも3つの閾値Th1、Th2、Th3により、上記ループ区間を少なくとも4つの区間に分け、評価値Dがどの区間の値であるかによって、描画対象画素P(xa,ya)の描画色の濃度と描画対象画素のy軸正方向の隣接画素P(xa,ya+1)の描画色の濃度とが決定される。
【0019】
つまり、この画像処理装置では、評価値Dに基づく場合分けによって、描画対象画素P(xa,ya)とその隣接画素P(xa,ya+1)との描画色の濃度(画素値)を、中間調を表現するように決定できるので、線分描画時に生じるエイリアシングを効果的に低減することができる。さらに、この画像処理装置では、評価値Dに基づく場合分けによって、描画処理を実行できるので、パワーサンプリング手法のように解像度を上げる処理を行う必要がない。その結果、この画像処理装置では、大容量のメモリ等は不要であり、また、解像度変換や、1つの画素中において線分が占める面積の計算等の複雑な演算処理も不要である。
【0020】
第2の発明は、第1の発明であって、評価値Dの初期値は、「0」である。
【0021】
描画情報決定部は、
(1)評価値Dが−0.5×dx×k≦D<Th1を満たす場合、画素P(xa,ya)の描画色の濃度を濃度DAとし、
(2)評価値DがTh1≦D<Th2を満たす場合、画素P(xa,ya)の描画色の濃度を濃度DB1とするとともに、画素P(xa,ya+1)の描画色の濃度を濃度DB2とし、
(3)評価値DがTh2≦D<Th3を満たす場合、画素P(xa,ya)の描画色の濃度を濃度DC1とするとともに、画素P(xa,ya+1)の描画色の濃度を濃度DC2とし、
(4)評価値DがTh3≦D<1.5×dx×kを満たす場合、画素P(xa,ya)の描画色の濃度を濃度DD1とするとともに、画素P(xa,ya+1)の描画色の濃度を濃度DD2とする。
【0022】
そして、描画色の濃度の値が大きい程、描画色の濃度が濃くなるように設定した場合、濃度DA、DB1、DB2、DC1、DC2、DD1、および、DD2は、
DA≧DB1≧DC1≧DD1
DB2≦DC2≦DD2
を満たす。
【0023】
これにより、この画像処理装置では、同列に位置する描画画素(x座標位置が同一の描画画素)の重心位置が、線分の始点と終点とを通る直線と近くなるように、評価値Dに基づいて、描画画素およびその画素値(描画色の濃度)を決定することができる。
【0024】
つまり、この画像処理装置では、横方向(x軸方向)および縦方向(y軸方向)に解像度を2倍にした場合にどのように描画位置がずれるかを考慮し、評価値Dのループ区間を分ける閾値Th1〜Th3を決定し、評価値Dが分割したループ区間のどの範囲に含まれるかによって、描画画素とその画素値(描画色の濃度)を決定するので、パワーサンプリング手法(オーバーサンプリング手法)と同様に、エイリアス成分を抑制することができる。その結果、この画像処理装置により描画した線分では、ジャギー(エイリアス成分)が目立たない。
【0025】
そして、この画像処理装置では、場合分けによって、描画処理を実行することができ、実際に解像度を上げる処理等を行う必要がないので、パワーサンプリング手法(オーバーサンプリング手法)とは異なり、大容量のメモリは不要である。
【0026】
したがって、この画像処理装置では、大容量のメモリや複雑な演算処理を必要とせず、線分描画時に生じるエイリアシングを効果的に低減することができる。
【0027】
なお、(上記とは逆に)描画色の濃度の値が小さい程、描画色の濃度が濃くなるように設定した場合、前記濃度DA、DB1、DB2、DC1、DC2、DD1、および、DD2は、
DA≦DB1≦DC1≦DD1
DB2≧DC2≧DD2
を満たすようにすればよい。
【0028】
第3の発明は、第1または第2の発明であって、評価値取得部は、
D=D+2×dy×k
により、評価値Dを更新する。
【0029】
そして、更新した評価値Dが1.5×dx×k以上である場合、更新した評価値Dをさらに、
D=D−2×dx×k
により更新するとともに、次の描画対象画素をP(xa+1,ya+1)に決定する。
【0030】
これにより、ブレゼンハムアルゴリズムと同様に、描画対象画素を適切に特定することができる。
【0031】
第4の発明は、第1から第3のいずれかの発明であって、座標変換部と、座標逆変換部と、さらに備える。
【0032】
座標変換部は、第1点と第2点とを結ぶ直線の傾きが0以上1以下でない場合、第3点と第4点とを結ぶ直線の傾きが0以上1以下となるように、第1点を第3点に座標変換し、第2点を第4点に座標変換する座標変換処理を行う。
【0033】
座標逆変換部は、座標変換処理の座標逆変換処理を行う。
【0034】
そして、線分描画情報取得部は、第3点を線分の始点とし、第4点を線分の終点として、第3点と第4点とを結ぶ線分を描画するための描画情報を取得する。
【0035】
座標逆変換部は、線分描画情報取得部により取得された第3点と第4点とを結ぶ線分を描画するための描画情報に含まれる座標位置情報に対して、座標逆変換処理を行う。
【0036】
この画像処理装置では、座標変換して、第1から第3のいずれかの発明と同様の描画処理を実行し、その後、座標逆変換することで、任意の線分(任意の傾きの線分)の描画処理が実行される。したがって、この画像処理装置では、線分の傾きごとに、別々の場合分けをすることなく、第1から第3のいずれかの発明と同様の処理のみを用いて、描画処理を実行することができる。その結果、この画像処理装置では、大容量のメモリや複雑な演算処理を必要とせず、線分描画時に生じるエイリアシングを効果的に低減することができる。
【0037】
第5の発明は、第1から第4のいずれかの発明であって、係数kは、
k=2×n(nは自然数)
である。
【0038】
この画像処理装置では、係数kが2の倍数となるため、描画処理(評価値Dと閾値との比較処理や、評価値Dの更新処理等)を整数演算のみで実現することができる。
【0039】
第6の発明は、画像上において、線分を描画するための線分描画情報を取得するための画像処理方法をコンピュータに実行させるためのプログラムである。
【0040】
画像処理方法は、入力ステップと、線分描画情報取得ステップと、を備える。
【0041】
入力ステップは、線分を描画するための情報を入力するためのステップである。
【0042】
線分描画情報取得ステップは、線分を描画するための描画情報を取得する。
【0043】
線分描画情報取得ステップは、評価値取得ステップと、閾値設定ステップと、描画情報決定ステップとを備える。
【0044】
評価値取得ステップは、描画対象画素である画素P(xa,ya)と、線分の始点および線分の終点とを通る直線と、の位置関係を示す評価値Dを取得する。
【0045】
閾値設定ステップは、線分の始点から終点までのx方向の差分量dxと、線分の始点から終点までのy方向の差分量dyとに基づいて、少なくとも3つの閾値Th1、Th2およびTh3を設定する。
【0046】
描画情報決定ステップは、評価値Dと閾値Th1、Th2およびTh3とに基づいて、描画対象画素P(xa,ya)の描画色の濃度と描画対象画素のy軸正方向の隣接画素P(xa,ya+1)の描画色の濃度とを決定する。
【0047】
そして、評価値Dは、
−0.5×dx×k≦D≦1.5×dx×k
係数k:正の実数
を満たす。
【0048】
閾値Th1、Th2およびTh3は、
−0.5×dx×k<Th1<Th2<Th3<1.5×dx×k
を満たす。
【0049】
評価値取得ステップは、評価値Dを差分量dyに基づいて更新し、更新した評価値Dが1.5×dx×k以上である場合、更新した評価値Dをさらに差分量dxに基づいて更新するとともに、次の描画対象画素をP(xa+1,ya+1)に決定する。また、評価値取得ステップは、更新した評価値Dが1.5×dx×k未満である場合、次の描画対象画素をP(xa+1,ya)に決定する。
【0050】
これにより、第1の発明と同様の効果を奏するプログラムを実現することができる。
【0051】
第7の発明は、画像上において、線分を描画するための線分描画情報を取得するための画像処理用の集積回路であって、入力部と、線分描画情報取得部と、を備える。
【0052】
入力部は、線分を描画するための情報を入力するための機能部である。
【0053】
線分描画情報取得部は、線分を描画するための描画情報を取得する。
【0054】
線分描画情報取得部は、評価値取得部と、閾値設定部と、描画情報決定部とを備える。
【0055】
評価値取得部は、描画対象画素である画素P(xa,ya)と、線分の始点と終点とを通る直線と、の位置関係を示す評価値Dを取得する。
【0056】
閾値設定部は、線分の始点から終点までのx方向の差分量dxと、線分の始点から終点までのy方向の差分量dyとに基づいて、少なくとも3つの閾値Th1、Th2およびTh3を設定する。
【0057】
描画情報決定部は、評価値Dと閾値Th1、Th2およびTh3とに基づいて、描画対象画素P(xa,ya)の描画色の濃度と描画対象画素のy軸正方向の隣接画素P(xa,ya+1)の描画色の濃度とを決定する。
【0058】
そして、評価値Dは、
−0.5×dx×k≦D≦1.5×dx×k
係数k:正の実数
を満たし、
閾値Th1、Th2およびTh3は、
−0.5×dx×k<Th1<Th2<Th3<1.5×dx×k
を満たす。
【0059】
評価値取得部は、評価値Dを差分量dyに基づいて更新し、更新した評価値Dが1.5×dx×k以上である場合、更新した評価値Dをさらに差分量dxに基づいて更新するとともに、次の描画対象画素をP(xa+1,ya+1)に決定する。また、評価値取得部は、更新した評価値Dが1.5×dx×k未満である場合、次の描画対象画素をP(xa+1,ya)に決定する。
【0060】
これにより、第1の発明と同様の効果を奏する集積回路を実現することができる。
【0061】
なお、集積回路は、レンダリングモジュール等を含む概念である。
【発明の効果】
【0062】
本発明によれば、大容量のメモリや複雑な演算処理を必要とせず、線分描画時に生じるエイリアシングを効果的に低減する画像処理装置およびプログラムを実現することができる。
【発明を実施するための形態】
【0064】
[第1実施形態]
第1実施形態について、図面を参照しながら、以下、説明する。
【0065】
<1.1:画像処理システムの構成>
図1は、第1実施形態に係る画像処理システム1000の概略構成図である。
【0066】
画像処理システム1000は、
図1に示すように、画像処理装置1と、表示用メモリ2と、表示部3と、を備える。
【0067】
画像処理装置1は、
図1に示すように、入力部11と、閾値設定部12と、評価値取得部13と、描画情報決定部14とを備える。
【0068】
入力部11は、描画する線分についての情報(以下、「線分情報」という。)を入力するための機能部である。例えば、表示部3の表示画面に表示される画像上において、始点(x1,y1)から終点(x2,y2)に線分を描画する場合、入力部1には、線分の始点の情報、終点の情報、線分の太さ、線分の色、線分の色の濃度等の線分情報が入力される。入力部11は、線分情報を、閾値設定部12と、評価値取得部13と、描画情報決定部14とに出力する。
【0069】
閾値設定部12は、入力部11から出力される線分情報を入力し、線分情報から描画対象画素P(xa,ya)の色濃度(例えば、画素値)と、描画対象画素P(xa,ya)のy軸正方向の隣接画素P(xa,ya+1)の色濃度(例えば、画素値)とを決定するための閾値を少なくとも3つ設定する。なお、この閾値をTh1、Th2、および、Th3とする。そして、閾値設定部12は、設定した閾値の情報を描画情報決定部14に出力する。
【0070】
評価値取得部13は、入力部11から出力される線分情報を入力し、線分情報から描画対象画素である画素P(xa,ya)と、前記始点(x1,y1)および前記終点(x2,y2)を通る直線と、の位置関係を示す評価値Dを取得する。そして、評価値取得部13は、取得した評価値Dに関する情報を描画情報決定部14に出力する。
【0071】
描画情報決定部14は、入力部11から出力される線分情報と、閾値設定部12から出力される閾値の情報と、評価値取得部13から出力される評価値Dに関する情報を入力する。描画情報決定部14は、線分情報と、閾値設定部12により設定された閾値Th1、Th2、Th3と、評価値Dとに基づいて、描画対象画素P(xa,ya)の描画色の濃度(例えば、画素値)と前記描画対象画素のy軸正方向の隣接画素P(xa,ya+1)の描画色の濃度(例えば、画素値)とを決定する。そして、描画情報決定部14は、描画対象画素P(xa,ya)の描画色の濃度が決定した値となるように、表示用メモリ2の描画対象画素P(xa,ya)に対応するアドレスにデータを書き込む。また、描画情報決定部14は、隣接画素P(xa,ya+1)の描画色の濃度が決定した値となるように、表示用メモリ2の描画対象画素P(xa,ya+1)に対応するアドレスにデータを書き込む。
【0072】
表示用メモリ2は、表示部3の表示画面に画像を表示するためのメモリである。表示用メモリ2の所定のアドレスにデータを書き込むことにより、当該アドレスに対応する画素(表示部3の表示画面に表示される画像の画素)の画素値が、書き込まれたデータに対応する画素値となり、表示部3の表示画面に表示される。表示用メモリ2として、例えば、ビデオバッファ、レンダリングバッファ、フレームメモリ、あるいは、VRAMが用いられる。
【0073】
表示部3は、画像を表示することができる表示画面を有しており、表示用メモリ2に書き込まれたデータに従い、表示画面に画像を表示する。
【0074】
<1.2:画像処理システムの動作>
以上のように構成された画像処理システム1000の動作について、図面を参照しながら、説明する。
【0075】
図2は、画像処理システム1000の処理フローチャートである。
【0076】
なお、以下では、説明便宜のため、線分の始点の座標が(x1,y1)であり、線分の終点の座標が(x2,y2)、線の太さが「1」(1画素分の太さ)であり、黒地の背景に白色の線を引く(描画する)場合について、説明する。
【0077】
また、説明便宜のため、線分を描画する画像は、輝度画像(Y画像)であり、画素値は8ビットであり、0〜255の値(画素値「255」が「白」(W100%)であるとする。)をとるものとする。
(S1):
入力部11では、線分の始点の座標(x1,y1)、線分の終点の座標(x2,y2)、線の太さ「1」(1画素分の太さ)、線分の画素値「255」(白)を示す線分情報が入力される。つまり、最初の描画対象画素が画素P(x1,y1)に設定される。描画対象画素Pのx座標をxとし、y座標をyとすると、描画対象画素が画素P(x1,y1)のとき、
x=x1
y=y1
である。
【0078】
また、評価値取得部13は、評価値Dを初期値「0」に設定する。
(S2):
閾値設定部12は、線分情報から線分の始点と終点とのx軸方向の差分量dxおよびy軸方向の差分量dyを、
dx=x2−x1
dy=y2−y1
により算出する。
【0079】
そして、閾値設定部12は、閾値Th1、Th2、および、Th3を、
Th1=dx−2×dy
Th2=dx
Th3=3×dx−2×dy
により算出した値に設定する。
(S3):
最初の描画対象画素P(x1,y1)からxを1ずつインクリメントし、xが線分の終点のx座標であるx2になるまで、ステップS4〜S13の処理が繰り返し実行される。
(S4、S7):
描画情報決定部14は、評価値Dと閾値Th1とを比較し、D<Th1である場合、描画対象画素P(x,y)の画素値を「255」に決定する。
【0080】
そして、描画情報決定部14は、画素P(x,y)に対応する表示用メモリ2のアドレスに、画素値「255」のデータを書き込む。
【0081】
これにより、表示部3の表示画面において、画素P(x,y)に対応する座標位置の画素の画素値が「255」(W100%)となる。
(S4、S5、S8):
描画情報決定部14は、評価値Dと閾値Th1〜Th2とを比較し、Th1≦D<Th2である場合、描画対象画素P(x,y)の画素値を「192」に決定し、描画対象画素のy軸正方向の隣接画素P(x,y+1)の画素値を「64」に決定する。
【0082】
そして、描画情報決定部14は、画素P(x,y)に対応する表示用メモリ2のアドレスに、画素値「192」に相当するデータを書き込む。また、描画情報決定部14は、画素P(x,y+1)に対応する表示用メモリ2のアドレスに、画素値「64」に相当するデータを書き込む。
【0083】
これにより、表示部3の表示画面において、画素P(x,y)に対応する座標位置の画素の画素値が「192」(W75%)となり、画素P(x,y+1)に対応する座標位置の画素の画素値が「64」(W25%)となる。
(S4〜S6、S9):
描画情報決定部14は、評価値Dと閾値Th2〜Th3とを比較し、Th2≦D<Th3である場合、描画対象画素P(x,y)の画素値を「128」に決定し、描画対象画素のy軸正方向の隣接画素P(x,y+1)の画素値を「128」に決定する。
【0084】
そして、描画情報決定部14は、画素P(x,y)に対応する表示用メモリ2のアドレスに、画素値「128」に相当するデータを書き込む。また、描画情報決定部14は、画素P(x,y+1)に対応する表示用メモリ2のアドレスに、画素値「128」に相当するデータを書き込む。
【0085】
これにより、表示部3の表示画面において、画素P(x,y)に対応する座標位置の画素の画素値が「128」(W50%)となり、画素P(x,y+1)に対応する座標位置の画素の画素値が「128」(W50%)となる。
(S4〜S6、S10):
描画情報決定部14は、評価値Dと閾値Th3とを比較し、D≧Th3である場合、描画対象画素P(x,y)の画素値を「64」に決定し、描画対象画素のy軸正方向の隣接画素P(x,y+1)の画素値を「192」に決定する。
【0086】
そして、描画情報決定部14は、画素P(x,y)に対応する表示用メモリ2のアドレスに、画素値「64」に相当するデータを書き込む。また、描画情報決定部14は、画素P(x,y+1)に対応する表示用メモリ2のアドレスに、画素値「192」に相当するデータを書き込む。
【0087】
これにより、表示部3の表示画面において、画素P(x,y)に対応する座標位置の画素の画素値が「64」(W25%)となり、画素P(x,y+1)に対応する座標位置の画素の画素値が「192」(W75%)となる。
(S11):
評価値取得部13は、評価値Dを、
D=D+4×dy
により更新する。
(S12、S13):
評価値取得部13は、ステップS11で更新した評価値Dと3×dxとを比較し、D≧3×dxである場合、評価値Dを
D=D−4×dx
によりさらに更新するとともに、
y=y+1
により、yの座標の値を1だけインクリメントする。つまり、次の描画対象画素のy座標の値を現在の描画対象画素のy座標の値よりも1だけ大きい値にする。
【0088】
その後、処理がステップS3に戻り、ステップS3〜S13の処理が、xの値が線分の終点のx座標であるx2になるまで繰り返し実行される。
【0089】
ここで、上記処理による線分描画の一例について、
図3を用いて、説明する。
【0090】
図3は、始点(0,0)から終点(7,3)に線分を描画する場合の処理について説明するための図である。
【0091】
始点(0,0)から終点(7,3)に線分を描画する場合、閾値設定部12は、
dx=x2−x1=7−0=7
dy=y2−y1=3−0=3
により、dx、dyを算出する。
【0092】
また、閾値設定部12は、
Th1=dx−2×dy=7−2×3=1
Th2=dx=7
Th3=3×dx−2×dy=3×7−2×3=15
により、Th1〜Th3を算出する。
【0093】
≪1回目の処理(描画対象画素:P(0,0))≫
まず、始点(0,0)の画素P(0,0)が描画対象画素に設定される。
【0094】
また、評価値取得部13により評価値Dは、初期値「0」に設定されている。
【0095】
D<Th1(=1)であるので、ステップS7の処理が実行される。つまり、
P(0,0)=255
と決定される。なお、画素P(x,y)について、P(x,y)=Aという表記は、座標位置(x,y)の画素Pの画素値が「A」であることを表すものとする。
【0096】
そして、ステップS11の処理において、
D=D+4×dy=0+4×3=12
により、評価値Dが更新される。
【0097】
更新された評価値D(=12)は、3×dx(=21)より小さいので(ステップS12)、次の描画対象画素が、画素P(1,0)に決定され、次の処理(2回目の処理)が実行される。
【0098】
≪2回目の処理(描画対象画素:P(1,0))≫
2回目の処理では、描画対象画素が画素P(1,0)であり、評価値Dが「12」である。
【0099】
Th2≦D<Th3(D=12、Th2=7、Th3=15)であるので、ステップS9の処理が実行される。つまり、画素P(1,0)および画素P(1,1)の画素値は、
P(1,0)=128
P(1,1)=128
と決定される。
【0100】
そして、ステップS11の処理において、
D=D+4×dy=12+4×3=24
により、評価値Dが更新される。
【0101】
更新された評価値D(=24)は、3×dx(=21)より大きいので(ステップS12)、ステップS13の処理が実行される。つまり、
D=D−4×dx=24−4×7=−4
y=y+1=0+1=1
となる。これにより、次の描画対象画素が、画素P(2,1)に決定される。
【0102】
≪3回目の処理(描画対象画素:P(2,1))≫
3回目の処理では、描画対象画素が画素P(2,1)であり、評価値Dが「−4」である。
【0103】
D<Th1(D=−4、Th1=1)であるので、ステップS7の処理が実行される。つまり、画素P(2,1)の画素値は、
P(2,1)=255
と決定される。
【0104】
そして、ステップS11の処理において、
D=D+4×dy=−4+4×3=8
により、評価値Dが更新される。
【0105】
更新された評価値D(=8)は、3×dx(=21)より小さいので(ステップS12)、ステップS13の処理は実行されず、次の描画対象画素が、画素P(3,1)に決定される。
【0106】
≪4回目の処理(描画対象画素:P(3,1))≫
4回目の処理では、描画対象画素が画素P(3,1)であり、評価値Dが「8」である。
【0107】
Th2≦D<Th3(D=8、Th2=7、Th3=15)であるので、ステップS9の処理が実行される。つまり、画素P(3,1)および画素P(3,2)の画素値は、
P(3,1)=128
P(3,2)=128
と決定される。
【0108】
そして、ステップS11の処理において、
D=D+4×dy=8+4×3=20
により、評価値Dが更新される。
【0109】
更新された評価値D(=20)は、3×dx(=21)より小さいので(ステップS12)、ステップS13の処理は実行されず、次の描画対象画素が、画素P(4,1)に決定される。
【0110】
≪5回目の処理(描画対象画素:P(4,1))≫
5回目の処理では、描画対象画素が画素P(4,1)であり、評価値Dが「20」である。
【0111】
Th3<D(D=20、Th3=15)であるので、ステップS10の処理が実行される。つまり、画素P(4,1)および画素P(4,2)の画素値は、
P(4,1)=64
P(4,2)=192
と決定される。
【0112】
そして、ステップS11の処理において、
D=D+4×dy=20+4×3=32
により、評価値Dが更新される。
【0113】
更新された評価値D(=32)は、3×dx(=21)より大きいので(ステップS12)、ステップS13の処理が実行される。つまり、
D=D−4×dx=32−4×7=4
y=y+1=1+1=2
となる。これにより、次の描画対象画素が、画素P(5,2)に決定される。
【0114】
≪6回目の処理(描画対象画素:P(5,2))≫
6回目の処理では、描画対象画素が画素P(5,2)であり、評価値Dが「4」である。
【0115】
Th1<D≦Th2(D=4、Th1=1、Th2=7)であるので、ステップS8の処理が実行される。つまり、画素P(5,2)および画素P(5,3)の画素値は、
P(5,2)=192
P(4,2)=64
と決定される。
【0116】
そして、ステップS11の処理において、
D=D+4×dy=4+4×3=16
により、評価値Dが更新される。
【0117】
更新された評価値D(=16)は、3×dx(=21)より小さいので(ステップS12)、ステップS13の処理は実行されず、次の描画対象画素が、画素P(6,2)に決定される。
【0118】
≪7回目の処理(描画対象画素:P(6,2))≫
7回目の処理では、描画対象画素が画素P(6,2)であり、評価値Dが「16」である。
【0119】
Th3<D(D=16、Th3=15)であるので、ステップS10の処理が実行される。つまり、画素P(6,2)および画素P(6,3)の画素値は、
P(6,2)=64
P(6,2)=192
と決定される。
【0120】
そして、ステップS11の処理において、
D=D+4×dy=16+4×3=28
により、評価値Dが更新される。
【0121】
更新された評価値D(=28)は、3×dx(=21)より大きいので(ステップS12)、ステップS13の処理が実行される。つまり、
D=D−4×dx=28−4×7=0
y=y+1=2+1=3
となる。これにより、次の描画対象画素が、画素P(7,3)に決定される。
【0122】
≪8回目の処理(描画対象画素:P(7,3))≫
8回目の処理では、描画対象画素が画素P(7,3)であり、評価値Dが「0」である。
【0123】
D<Th1(D=0、Th1=1)であるので、ステップS7の処理が実行される。つまり、画素P(7,3)画素値は、
P(7,3)=255
と決定される。
【0124】
xの値が線分の終点のxの値(=7)と一致しているので、8回目の処理を実行した後、線分描画処理が終了する。
【0125】
以上の処理により、
図3に示すように、始点(0,0)から終点(7,3)に線分が描画される。また、
図4は、
図3に、始点(0,0)と終点(7,3)とを結ぶ線分L1およびx座標の値が同じ描画画素(画素値が「0」でないの画素)の重心の位置を丸印で追加した図である。なお、
図4に示した重心の位置は、(1)x座標の値が同じ描画画素が1つである場合は、当該描画画素の座標位置であり、(2)x座標の値が同じ描画画素が画素PA(x0,y0)、画素PB(x0,y0+1)の2つであり、画素PAの画素値がk1であり、画素PBの画素値がk2である場合、重心位置の座標(xc,yc)は、
xc=x0
yc=y0+k2/(k1+k2)
である。
【0126】
図3、
図4から分かるように、画像処理システム1000により、上記処理を実行することで、始点(0,0)から終点(7,3)への線分を、中間調を有する画素により表現することができる。また、
図4から分かるように、同列に位置する描画画素(x座標位置が同一の描画画素)の重心位置と、始点(0,0)および終点(7,3)を通る直線L1とのずれが少ない。つまり、画像処理システム1000により、上記処理を実行することで、適切に線分を描画することができる。
【0127】
また、
図5に、ブレゼンハムアルゴリズムにより線分描画した線分LH1および線分LH1の一部を拡大して表示した線分LH2と、画像処理システム1000による線分描画した線分LA1および線分LA1の一部を拡大して表示した線分LA2と、を示す。
【0128】
図5から分かるように、ブレゼンハムアルゴリズムにより描画した線分ではジャギー(エイリアス成分)が目立つが、画像処理システム1000により描画した線分では、ジャギーが目立たず、エイリアス成分が適切に抑制されていることが分かる。
【0129】
ここで、画像処理システム1000による描画処理の原理について説明する。
【0130】
まず、
図6を参照しながら、従来のブレゼンハムアルゴリズムによる線分描画処理について、説明する。なお、
図6に示すように、始点P(0,0)から終点P(7,3)に線分を引く場合について説明する。
【0131】
ブレゼンハムアルゴリズムによる描画処理では、まず、始点P(0,0)を描画画素として、所定の画素値に設定する(
図6では、黒く塗りつぶした状態)。なお、説明便宜のため、描画画素の画素値を「1」として、以下、説明する。
【0132】
次に、描画画素の候補は、画素P(1,0)と、画素P(1,1)となる。そして、この2つの画素の中点(
図6に白丸で示した点)と、始点P(0,0)および終点P(7,3)を通る直線との位置関係(上下関係)を判定する。
図6から分かるように、直線L1は、画素P(1,0)と画素P(1,1)との中点(1,0.5)よりも上側に位置しているので、x=1のときの描画画素は、直線L1により近い画素P(1,0)となる。
【0133】
このような処理を終点(7,3)まで繰り返すことで、始点P(0,0)から終点P(7,3)へ線分描画することができる(直線L1を近似して表示することができる)。
【0134】
上記処理は、評価値Dと、始点P(0,0)と終点P(7,3)とのx軸方向の差分量dx、y軸方向の差分量dyとを用いて、以下のように表現することができる。
【0135】
評価値Dは、初期値「0」で、x軸方向正方向に+1する度に、2×dyが加算される。その加算結果がdxを超えた場合、y方向に+1進むように、描画画素を選択する。そして、y方向に+1進んだ場合、評価値Dの値から2×dxを減算する。これを繰り返すことで、始点から終点まで線分描画することができる。
【0136】
図6の場合、以下のようになる。
(1)1回目の処理
D=D+2×dy=0+2×3=6
D<dx(D=6、dx=7)なので、次の描画画素は、P(1,0)に決定される。
(2)2回目の処理
D=D+2×dy=6+2×3=12
D>dx(D=12、dx=7)なので、次の描画画素は、P(2,1)に決定される。
【0137】
また、評価値Dから2×dxが減算される。つまり、
D=D−2×dx=12−2×7=−2
となる。
(3)3回目の処理
D=D+2×dy=−2+2×3=4
D<dx(D=4、dx=7)なので、次の描画画素は、P(3,1)に決定される。
(4)4回目の処理
D=D+2×dy=4+2×3=10
D>dx(D=10、dx=7)なので、次の描画画素は、P(4,2)に決定される。
【0138】
また、評価値Dから2×dxが減算される。つまり、
D=D−2×dx=10−2×7=−4
となる。
(5)5回目の処理
D=D+2×dy=−4+2×3=2
D<dx(D=2、dx=7)なので、次の描画画素は、P(5,2)に決定される。
(6)6回目の処理
D=D+2×dy=2+2×3=8
D>dx(D=8、dx=7)なので、次の描画画素は、P(6,3)に決定される。
【0139】
また、評価値Dから2×dxが減算される。つまり、
D=D−2×dx=8−2×7=−6
となる。
(7)7回目の処理
D=D+2×dy=−6+2×3=0
D<dx(D=0、dx=7)なので、次の描画画素は、P(7,3)に決定される。
【0140】
以上の処理により、
図6に示すように、始点P(0,0)から終点P(7,3)へブレゼンハムアルゴリズムにより線分描画される。
【0141】
上記の処理から分かるように、ブレゼンハムアルゴリズムでは、評価値Dは、0から2×dyずつ増加し、−dxとdxの間をループする。
【0142】
画像処理システム1000では、ブレゼンハムアルゴリズムにおいて、―dxからdxであった評価値Dのループ区間を、−0.5×dxから1.5×dxの区間に変更し、さらに、当該区間を3つの閾値Th1、Th2、Th3で区切り、描画処理を実行する。これにより、画像処理システム1000では、場合分けのみで、線分描画時に生じるエイリアシングを効果的に低減することができる。これについて、以下、説明する。
【0143】
解像度を縦方向(y軸方向)に2倍にした場合と、横方向(x軸方向)に2倍にした場合を考える。
【0144】
まず、解像度を縦方向(y軸方向)に2倍にした場合を考える。
【0145】
図7は、解像度を縦方向(y軸方向)に2倍にした場合の評価値Dのループ区間と、画素のずれ量との関係を模式的に示す図である。
【0146】
図7に示すように、解像度を縦方向(y軸方向)に2倍にしてブレゼンハムアルゴリズムにより、線分描画すると、解像度を上げないでブレゼンハムアルゴリズムにより線分描画した場合に比べて、(1)評価値Dが−dx〜−0.5×dxの区間の値である場合、1画素分上にずれる可能性があり、(2)評価値Dが0.5×dx〜dxの区間の値である場合、1画素分下にずれる可能性がある。
【0147】
なお、評価値Dが−0.5×dx〜0.5×dxの区間の値である場合は、画素ずれは発生しない。
【0148】
次に、解像度を横方向(x軸方向)に2倍にした場合を考える。
【0149】
図8は、解像度を横方向(x軸方向)に2倍にした場合の評価値Dのループ区間と、画素のずれ量との関係を模式的に示す図である。
【0150】
図8に示すように、解像度を横方向(x軸方向)に2倍にしてブレゼンハムアルゴリズムにより、線分描画すると、解像度を上げないでブレゼンハムアルゴリズムにより線分描画した場合に比べて、評価値Dがdx−dy〜dxの区間の値である場合、1画素分斜め方向にずれる可能性がある。
【0151】
なお、評価値Dが−dx〜dx−dyの区間の値である場合は、画素ずれは発生しない。
【0152】
したがって、上記を考慮し、―0.5×dxと0.5×dxと、それらからdyを減算した値−0.5×dx―dyと0.5×dx−dyとを閾値とし、評価値Dのループ区間を分け、評価値Dがどの区間の値であるかにより、画素値を中間調とすることで、エイリアス成分を抑制して線分描画することができる。なお、dy>0.5×dxの場合は、−0.5×dx−dyは、―dx〜dxの範囲に入らないので、代わりに、1.5×dx―dyを閾値とする。
【0153】
具体的には、
図9、
図10に示すように、場合分けを行う。
【0154】
図9は、dy≦0.5×dxの場合の評価値D、描画対象画素、および、画素値の対応関係を模式的に示す図である。
【0155】
図9に示すように、dy≦0.5×dxの場合、描画対象画素をP(x,y)とし、画素値が0〜1の値をとるとして、以下の(1)〜(5)により場合分けし、画素値を決定すればよい。
(1)−dx≦D<−0.5×dx―dyの場合、
P(x,y−1)=0.5
P(x,y)=0.5
(2)−0.5×dx―dy≦D<−0.5×dxの場合、
P(x,y−1)=0.25
P(x,y)=0.75
(3)−0.5×dx≦D<0.5×dx−dyの場合、
P(x,y)=1
(4)0.5×dx−dy≦D<0.5×dxの場合、
P(x,y)=0.75
P(x,y+1)=0.25
(5)0.5×dx≦D<dxの場合、
P(x,y)=0.50
P(x,y+1)=0.50
図10は、dy>0.5×dxの場合の評価値D、描画対象画素、および、画素値の対応関係を模式的に示す図である。
【0156】
図10に示すように、dy>0.5×dxの場合、描画対象画素をP(x,y)とし、画素値が0〜1の値をとるとして、以下の(1)〜(5)により場合分けし、画素値を決定すればよい。
(1)−dx≦D<−0.5×dxの場合、
P(x,y−1)=0.25
P(x,y)=0.75
(2)−0.5×dx≦D<0.5×dx−dyの場合、
P(x,y)=1
(3)0.5×dx−dy≦D<0.5×dxの場合、
P(x,y)=0.75
P(x,y+1)=0.25
(4)0.5×dx≦D<1.5×dx−dyの場合、
P(x,y)=0.5
P(x,y+1)=0.5
(5)1.5×dx−dy≦D<dxの場合、
P(x,y)=0.25
P(x,y+1)=0.75
上記の場合分けは、評価値Dのループ区間を−dx〜dxとしているため、複雑になっている。そこで、評価値Dのループ区間を−0.5×dx〜1.5×dxにすることで場合分けの数を少なくすることができる。これについて、
図11、
図12を用いて、説明する。
【0157】
図11は、
図9と同様に、dy≦0.5×dxの場合の評価値D、描画対象画素、および、画素値の対応関係を模式的に示す図である。
【0158】
図12は、
図10と同様に、dy>0.5×dxの場合の評価値D、描画対象画素、および、画素値の対応関係を模式的に示す図である。
【0159】
図11に示すように、評価値Dのループ区間を−dx〜dx(
図11中の区間T1)とした場合の区間Ta1(−dx≦D<−0.5×dx―dy)は、評価値Dのループ区間を−0.5×dx〜1.5×dx(
図11中の区間T2)とした場合の区間Tb1(dx≦D<0.5×dx―dy)と同じ処理が実行されることを意味する。つまり、ブレゼンハムアルゴリズムでは、評価値Dがdxを超えるとy方向に+1進んだ画素を描画画素とするので、区間Ta1の描画画素の上隣の画素(
図11の画素Pa1)は、区間Tb1の描画画素(
図11の画素Pb1)と同じと考えることができる。
【0160】
また、同様に、評価値Dのループ区間を−dx〜dxとした場合の区間Ta2(−0.5×dx≦D<−0.5×dx)は、評価値Dのループ区間を−0.5×dx〜1.5×dxとした場合の区間Tb2(−0.5×dx−dy≦D<1.5)と同じ処理が実行されることを意味する。つまり、ブレゼンハムアルゴリズムでは、評価値Dがdxを超えるとy方向に+1進んだ画素を描画画素とするので、区間Ta2の描画画素の上隣の画素(
図11の画素Pa2)は、区間Tb2の描画画素(
図11の画素Pb2)と同じと考えることができる。
【0161】
また、
図12に示すように、評価値Dのループ区間を−dx〜dx(
図12中の区間T1)とした場合の区間Tc1(−dx≦D<−0.5×dx)は、評価値Dのループ区間を−0.5×dx〜1.5×dx(
図12中の区間T2)とした場合の区間Td1(dx≦D<1.5×dx)と同じ処理が実行されることを意味する。つまり、ブレゼンハムアルゴリズムでは、評価値Dがdxを超えるとy方向に+1進んだ画素を描画画素とするので、区間Tc1の描画画素の上隣の画素(
図12の画素Pc1)は、区間Td1の描画画素(
図12の画素Pd1)と同じと考えることができる。
【0162】
また、
図11の場合(dy≦0.5×dxの場合)、評価値Dのループ区間を−0.5×dx〜1.5×dxとしたとき、
(1)−0.5×dx≦D<0.5×dx―dyの場合、
P(x,y)=1
(2)0.5×dx−dy≦D<0.5×dxの場合、
P(x,y)=0.75
P(x,y+1)=0.25
(3)0.5×dx≦D<1.5×dx−dyの場合、
P(x,y)=0.5
P(x,y+1)=0.5
(4)1.5×dx−dy≦D<1.5×dxの場合、
P(x,y)=0.25
P(x,y+1)=0.75
となる。
【0163】
また、
図12の場合(dy>0.5×dxの場合)、評価値Dのループ区間を−0.5×dx〜1.5×dxとしたとき、
(1)−0.5×dx≦D<0.5×dx―dyの場合、
P(x,y)=1
(2)0.5×dx−dy≦D<0.5×dxの場合、
P(x,y)=0.75
P(x,y+1)=0.25
(3)0.5×dx≦D<1.5×dx−dyの場合、
P(x,y)=0.5
P(x,y+1)=0.5
(4)1.5×dx−dy≦D<1.5×dxの場合、
P(x,y)=0.25
P(x,y+1)=0.75
となる。
【0164】
上記から分かるように、
図11の場合(dy≦0.5×dxの場合)も、
図12の場合(dy>0.5×dxの場合)も、同じ場合分けによる同じ処理となる。
【0165】
つまり、評価値Dのループ区間を−0.5×dx〜1.5×dxとし、3つの閾値Th1、Th2、Th3を、
Th1=0.5×dx−dy
Th2=0.5×dx
Th3=1.5×dx―dy
とし、評価値Dのループ区間を4つ区間に分けて描画処理を行えばよい。
【0166】
さらに、画像処理システム1000での描画処理は、ブレゼンハムアルゴリズムによる描画処理と同様、N回目の処理での描画対象画素を画素P(xn,yn)とすると、N+1回目の処理での描画対象画素は、画素P(xn+1,yn)または画素P(xn+1,yn+1)であるため、
dy/dx≦1
dy≦dx
が成り立つ。
【0167】
したがって、
−0.5×dx≦0.5×dx−dy≦0.5×dx≦1.5×dx―dy≦1.5×dx
が成り立つ。
【0168】
つまり、
−0.5×dx≦Th1≦Th2≦Th3≦1.5×dx
が成り立つので、
図11の場合(dy≦0.5×dxの場合)も、
図12の場合(dy>0.5×dxの場合)も、−0.5dx、Th1〜Th3、1.5×dxの大小関係は同じである。
【0169】
したがって、
図11の場合(dy≦0.5×dxの場合)も、
図12の場合(dy>0.5×dxの場合)も、同じ場合分けによる同じ処理を実行すればよいことになる。
【0170】
このように、評価値Dのループ区間を−0.5×dx〜1.5×dxにすることで、評価値Dのループ区間を−dx〜dxとする場合に比べて、場合分けの数を少なくすることができる。
【0171】
画像処理システム1000では、評価値Dのループ区間を−0.5×dx〜1.5×dxに設定し、上記のように設定した3つの閾値Th1、Th2、Th3により、上記ループ区間を4つの区間に分け、評価値Dがどの区間の値であるかによって、描画画素およびその画素値(描画色の濃度)を決定する。そして、画像処理システム1000では、同列に位置する描画画素(x座標位置が同一の描画画素)の重心位置が、線分の始点と終点とを通る直線と近くなるように、評価値Dに基づいて、描画画素およびその画素値(描画色の濃度)が決定される。
【0172】
つまり、画像処理システム1000では、横方向(x軸方向)および縦方向(y軸方向)に解像度を2倍にした場合にどのように描画位置がずれるかを考慮し、上記のように、評価値Dのループ区間を分ける閾値Th1〜Th3を決定し、評価値Dが分割したループ区間のどの範囲に含まれるかによって、描画画素とその画素値(描画色の濃度)を決定するので、パワーサンプリング手法(オーバーサンプリング手法)と同様に、エイリアス成分を抑制することができる。その結果、画像処理システム1000により描画した線分では、ジャギー(エイリアス成分)が目立たない。
【0173】
なお、画像処理システム1000では、場合分けによって、描画処理を実行することができ、実際に解像度を上げる処理等を行う必要がないので、パワーサンプリング手法(オーバーサンプリング手法)とは異なり、大容量のメモリは不要である。
【0174】
以上の通り、画像処理システム1000では、大容量のメモリや複雑な演算処理を必要とせず、低コストで、線分描画時に生じるエイリアシングを効果的に低減することができる。
【0175】
なお、
図2のフローチャートを用いて説明した画像処理システム1000の処理では、整数演算のみで処理が実行できるように閾値Th1〜Th3、評価値Dの更新処理等を変更している。画像処理システム1000の処理では、評価値Dと、評価値Dのループ区間を決定する、−0.5×dx、1.5×dxと、閾値Th1〜Th3との大小関係が分かれば処理が実行できるので、整数演算のみで処理が実行できるように閾値Th1〜Th3、評価値Dの更新処理等を調整することができる。
【0176】
図13に、画像処理システム1000の処理を一般化した場合のフローチャートを示す。
【0177】
図13のフローチャートは、
図2のフローチャートにおいて、ステップS2をステップS2’に置換し、ステップS11をステップS11’に置換し、ステップS12をステップS12’に置換し、ステップS13をステップS13’に置換したものである。それ以外については、
図13のフローチャートは、
図2のフローチャートと同じである。
【0178】
図13のフローチャートにおいて、kは、正の実数である。
【0179】
k=1とした場合が、上記で説明した場合となる。つまり、k=1とした場合、
評価値Dのループ区間:−0.5×dx〜1.5×dx
Th1=0.5×dx−dy
Th2=0.5×dx
Th3=1.5×dx―dy
となる。
【0180】
また、
図2のフローチャートは、k=2の場合である。つまり、k=2とした場合、
評価値Dのループ区間:−dx〜3×dx
Th1=dx−2×dy
Th2=dx
Th3=3×dx―2×dy
となる。
【0181】
この場合、整数演算のみで、描画処理を実行することができる。
【0182】
また、上記では、dy/dx≦1を前提とする描画処理、つまり、傾きが0以上1以下の線分の描画処理について説明したが、これに限定されることはない。線分の傾きが1以上、あるいは、0未満の線分の描画処理についても、上記と同様の考え方により、場合分けすることで、描画処理を実行するようにしてもよい。
【0183】
≪第1変形例≫
次に、第1実施形態の第1変形例について、説明する。
【0184】
図14は、本変形例に係る画像処理システム1000Aの概略構成図である。
【0185】
本変形例の画像処理システム1000Aは、第1実施形態の画像処理システム1000において、画像処理装置1を画像処理装置1Aに置換した構成を有する。
【0186】
画像処理装置1Aは、画像処理装置1において、座標変換部15と座標逆変換部16とを追加した構成を有する。
【0187】
それ以外については、本変形例の画像処理システム1000Aは、第1実施形態の画像処理システム1000と同様である。
【0188】
以下では、本変形例に特有の部分について説明する。また、本変形例において、上記実施形態と同様の部分については、同一符号を付し、詳細な説明を省略する。
【0189】
座標変換部15は、入力部11から出力される線分情報を入力し、線分の始点の座標(x1,y1)と終点の座標(x2,y2)を座標変換する。この座標変換について、
図15を用いて説明する。
【0190】
図15は、座標変換を説明するための図である。
【0191】
座標変換部15は、
図15に示すように、x軸、y軸を設定し、x軸、y軸、y=xの直線、および、y=−xの直線により分割される8つの領域を、領域1〜領域8として設定する。
【0192】
座標変換部15は、線分の始点(x1,y1)が、
図15で示した座標の原点(0,0)となるように座標変換を行う。これにより、線分の終点の座標は、(x2−x1,y2−y1)に座標変換される。
(1)変換された点(x2−x1,y2−y1)が、
図15の領域1に存在する場合、
xa=x2−x1
ya=y2−y1
として、第1実施形態と同様の処理により、描画処理が実行される。
(2)変換された点(x2−x1,y2−y1)が、
図15の領域2に存在する場合、x座標の値とy座標の値を入れ替える。つまり、
ya=x2−x1
xa=y2−y1
とする。
【0193】
これにより、点(0,0)から点(xa,ya)への線分描画処理を、第1実施形態と同様の処理を行うことができる。つまり、原点から領域2に含まれる点への線分を、原点から領域1に含まれる点への線分に変換して、第1実施形態と同様を適用する。
(3)変換された点(x2−x1,y2−y1)が、
図15の領域3〜8に存在する場合も、上記と同様に、原点から領域3〜8のいずれかに含まれる点への線分を、原点から領域1に含まれる点への線分に変換して、第1実施形態と同様を適用する。
【0194】
そして、座標変換部15は、上記のように座標変換し、線分の始点(0,0)、線分の終点(xa,ya)を、線分情報に含める。また、座標変換部15は、座標変換に関する情報、すなわち、座標変換前の線分の始点(x1,y1)についての情報、線分の終点が領域1に含まれるようにするために実行した変換方法についての情報(例えば、領域8から領域1へ変換した場合、x座標値はそのままで、y座標値の符号を反転(−1を乗算)したことを示す情報)を、線分情報に含める。
【0195】
そして、座標変換部15は、上記のようにして更新した線分情報を、閾値設定部12と、評価値取得部13と、描画情報決定部14と、座標逆変換部16とに出力する。
【0196】
閾値設定部12、評価値取得部13、および、描画情報決定部14では、第1実施形態と同様の処理が実行される。
【0197】
座標逆変換部16は、描画情報決定部14から出力される描画画素とその画素値(描画色の濃度)に関する情報と、座標変換部15から出力される線分情報とを入力する。
【0198】
そして、座標逆変換部16は、座標変換部15で実行された変換と逆の変換を実行し、描画画素の位置を決定する。
【0199】
例えば、座標変換部15で実行された変換が領域8から領域1へ変換する処理である場合、座標逆変換部は、描画情報決定部14から出力される描画画素P(xb,yb)を、画素P(xb,−yb)へ座標変換し、さらに、線分の始点(x1,y1)から、
図15の座標の原点への移動分を元に戻す座標変換を行う。つまり、座標逆変換部は、描画情報決定部14から出力される描画画素P(xb,yb)を、画素P(xb+x1,−yb+y1)へ座標変換する。
【0200】
そして、座標逆変換部は、画素P(xb+x1,−yb+y1)に相当する画素が、描画情報決定部14から出力された画素値(描画画素P(xb,yb)の画素値として出力された画素値)となるように、表示用メモリ2のアドレスにデータ(当該画素値に相当するデータ)を書き込む。
【0201】
以上のように、本変形例に係る画像処理システム1000Aでは、座標変換して、第1実施形態と同様の描画処理を実行し、その後、座標逆変換することで、任意の線分(任意の傾きの線分)の描画処理が実行される。したがって、本変形例に係る画像処理システム1000Aでは、線分の傾きごとに、別々の場合分けをすることなく、第1実施形態で示した処理のみを用いて、描画処理を実行することができる。その結果、本変形例に係る画像処理システム1000Aでは、大容量のメモリや複雑な演算処理を必要とせず、線分描画時に生じるエイリアシングを効果的に低減することができる。
【0202】
[他の実施形態]
上記実施形態および変形例では、線分の線の太さが1画素分である場合を例に説明したが、これに限定されることはなく、線分の太さは、他の太さであってもよい。線分の太さが2画素分以上である場合、画像上において、当該線分と背景との境界領域に位置する領域(当該線分の上端または下端の領域)において、上記実施形態の描画処理と同様の処理を適用すればよい。これにより、当該線分と背景との境界領域において、エイリアス成分を適切に抑制した描画処理を実行することができる。
【0203】
また、上記実施形態および変形例では、
図2および
図13のステップS7〜S10において、設定される画素値が、「255」、「192」、「128」、「64」としたが、これに限定されることはなく、同列に位置する描画画素(x座標位置が同一の描画画素)の重心位置が、線分の始点と終点とを通る直線と近くなるように、他の値に設定するようにしてもよい。
【0204】
上記実施形態および変形例の一部または全部を組み合わせて、画像処理システム、画像処理装置を構成するようにしてもよい。
【0205】
また、上記実施形態の画像処理システム、画像処理装置の一部または全部は、集積回路(例えば、LSI、システムLSI等)として実現されるものであってもよい。
【0206】
上記実施形態の各機能ブロックの処理の一部または全部は、プログラムにより実現されるものであってもよい。そして、上記実施形態の各機能ブロックの処理の一部または全部は、コンピュータにおいて、中央演算装置(CPU)により行われる。また、それぞれの処理を行うためのプログラムは、ハードディスク、ROMなどの記憶装置に格納されており、ROMにおいて、あるいはRAMに読み出されて実行される。
【0207】
また、上記実施形態の各処理をハードウェアにより実現してもよいし、ソフトウェア(OS(オペレーティングシステム)、ミドルウェア、あるいは、所定のライブラリとともに実現される場合を含む。)により実現してもよい。さらに、ソフトウェアおよびハードウェアの混在処理により実現しても良い。なお、上記実施形態に係る画像処理システム、画像処理装置をハードウェアにより実現する場合、各処理を行うためのタイミング調整を行う必要があるのは言うまでもない。上記実施形態においては、説明便宜のため、実際のハードウェア設計で生じる各種信号のタイミング調整の詳細については省略している。
【0208】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
【0209】
前述した方法をコンピュータに実行させるコンピュータプログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、コンピュータ読み取り可能な記録媒体としては、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリを挙げることができる。
【0210】
上記コンピュータプログラムは、上記記録媒体に記録されたものに限られず、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送されるものであってもよい。
【0211】
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。