画像処理装置、画像処理方法及びプログラム
【課題】レンダリング処理を高速化することを目的とする。
【解決手段】PDLデータを順次、受け取り、PDLデータに含まれる図形を後段の処理に渡す受け取り手段と、受け取り手段より渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当て手段と、図形ごとに抽出されたエッジ情報を合成する合成手段と、合成手段で合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプール手段と、スプール手段からタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成手段と、を有することによって課題を解決する。
【解決手段】PDLデータを順次、受け取り、PDLデータに含まれる図形を後段の処理に渡す受け取り手段と、受け取り手段より渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当て手段と、図形ごとに抽出されたエッジ情報を合成する合成手段と、合成手段で合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプール手段と、スプール手段からタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成手段と、を有することによって課題を解決する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像処理装置、画像処理方法及びプログラムに関する。
【背景技術】
【0002】
従来から図形を描画するために図形が持つ座標情報等から図形の輪郭情報(エッジ情報とも呼ぶ)を抽出し、輪郭情報に基づいて画像を形成するレンダリング手法は一般に広く利用されている(例えば、特許文献1参照)。輪郭情報は直線で表現されるが直線を表現するための手法としてDDAアルゴリズムが知られている(非特許文献1参照)。
図1は、従来のレンダラの処理の一例を示す図である。ここでは入力図形をバンドに分割して処理を行っている。グラフィックス処理を実行するにあたり、このようなシステムで問題となるのは、多くのグラフィックスオブジェクトが入力された場合にレンダリング速度の低下が発生することである。そこで図1にあるようにバンドで分割された場合の処理では、それぞれのバンドに対して独立した処理単位(スレッド)を割り当てることで処理速度の向上を試みるものが提案されている(特許文献2)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平4−170686号公報
【特許文献2】特開2003−51019号公報
【非特許文献】
【0004】
【非特許文献1】David Rogers,"Procedural Elements for Computer Graphics"McGraw−Hill Education
【発明の概要】
【発明が解決しようとする課題】
【0005】
従来のレンダラでは、図形はパス等の座標や線分情報が渡された段階でスキャンライン上のエッジデータ等を生成する構造となっている。このため図形ごとに独立処理を行うことは出来ない。一方、バンド単位で分割を行えば各領域には依存性はなく並列処理を行うことは出来る。この方法では一定の条件下では並列処理の実行が効率的に実行可能だが全ての場合において効率的に動作するわけではない。例えば、1つの図形をみた場合に、それが上下に隣接する2つのバンド領域Aとバンド領域Bに跨る場合は、そのままでは並列処理が実行出来ない。このような状態で処理を進めるには2つのバンド領域それぞれに対して図形を供給(データの複製、及び転送等)する必要がある。このことからバンド並列型の処理ではバンド境界に跨る図形を多く含むPDLデータの場合、十分な高速化が期待出来ないという課題がある。バンドの区切り位置をオブジェクトの配置を考慮して調整することも考えられるが、どのように調整をしたとしてもバンドを跨る図形は存在しうるため根本的な解決手段とはならない。またバンド1つに対して1スレッドしか処理が(基本単位として)割り当てられないことを考える。するとオブジェクトの配置がバンドの領域に対して極端に偏って分布しているような(例えば1バンド上に数百ものオブジェクトが存在する)場合は処理の高速化が十分に期待出来ない問題があった。
【0006】
本発明はこのような問題点に鑑みなされたもので、レンダリング処理を高速化することを目的とする。
【課題を解決するための手段】
【0007】
そこで、本発明は、PDLデータを順次、受け取り、前記PDLデータに含まれる図形を後段の処理に渡す受け取り手段と、前記受け取り手段より渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当て手段と、前記図形ごとに抽出されたエッジ情報を合成する合成手段と、前記合成手段で合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプール手段と、前記スプール手段からタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成手段と、を有する。
【発明の効果】
【0008】
本発明によれば、レンダリング処理を高速化することが出来る。
【図面の簡単な説明】
【0009】
【図1】従来のレンダラの処理の一例を示す図である。
【図2】画像処理装置のハードウェア構成の一例を示す図である。
【図3】図形ごとに処理の単位(スレッド)を割り当てた一例を示す図である。
【図4】各図形においてエッジ抽出処理を各々独立に適用した場合の概念図である。
【図5】画像処理装置のソフトウェア構成(システム構成)等の一例を示す図である。
【図6】三角形の図形に対してエッジ抽出処理を行う様子を示した図である。
【図7】スキャンラインの処理の一例を示すフローチャートである。
【図8】「エッジ抽出処理」と、抽出されたエッジのデータをマージする処理「データ合成」と、におけるデータの流れを説明するための図である。
【図9】PDL処理とエッジ抽出処理(合成処理を含む)とにおいてどのように時間が短縮されるかを説明した図である。
【図10】実施形態1の構成について適用するコア数を増やしていった場合の性能の変化を示した図である。
【図11】コア数が8の場合のプログラム内部スレッドの活動状況を示した図である。
【図12】「データ受け取り」の処理にボトルネックが発生していることを説明するための図である。
【図13】「データ受け取り」の処理を多段の(複数の)処理に分けることを説明するための図である。
【図14】システム側から通知された利用可能なコア数に応じて、選択する処理を切り替える一例を示す図である。
【図15】実施形態2の構成を適用した場合の、コア数に対する、性能の変化をグラフで示した図である。
【図16】コア数に応じて処理フローが切り替わるシステムの構成の一例を示す図である。
【発明を実施するための形態】
【0010】
以下、本発明の実施形態について図面に基づいて説明する。
【0011】
<実施形態1>
図2は、画像処理装置のハードウェア構成の一例を示す図である。
図2において、CPU101は、ROM103又はハードディスク111からRAM102にロードされたOSや一般アプリケーション等のプログラムを実行し、後述するソフトウェアの機能及びフローチャートの処理を実現する。
RAM102は、CPU101の主メモリ、ワークエリア等として機能する。キーボードコントローラ(KBC)105は、キーボード109や不図示のポインティングデバイスからのキー入力を制御する。CRTコントローラ(CRTC)106は、CRTディスプレイ110の表示を制御する。ディスクコントローラ(DKC)107は、ブートプログラム、種々のアプリケーション、フォントデータ、ユーザファイル等を記憶するハードディスク(HD)111やフレキシブルディスク(FD)等とのアクセスを制御する。PRTC108は、接続されたプリンタ107との間の信号の交換を制御する。NC112は、ネットワークに接続されて、ネットワークに接続された他の機器との通信制御処理を実行する。
なお、本実施形態では、以下に示す画像処理装置の機能は、ソフトウェアにより実現されるものと説明するが、各機能を専用のハードウェアで画像処理装置に実装するようにしても良い。
なお、本実施形態のCPU101は、マルチコアのCPUであるものとする。画像処理装置が、複数のCPUを有していても良い。
【0012】
本実施形態のレンダラは、図3にあるように図形ごとに処理の単位(スレッド)を割り当てる。図形の位置はページ上に配置(絶対座標上)されているが、それぞれは個別の相対座標にマップされ(図形の外接矩形の左上の点を原点に持つ相対座標に変換され)、各領域においてエッジ抽出処理を行うことが出来る。
図4は、各図形においてエッジ抽出処理を各々独立に適用した場合の概念図である。ページ上の図形ごとにエッジ抽出処理を実施する様子を示している。図形ごとに抽出されたエッジ情報は再度ページ上の座標にマップされ合成処理がなされる。それぞれの処理は各々依存性がないために独立に実行することが出来る。つまり、図形のデータが入力された後、各図形のエッジ抽出の処理、及び各抽出処理後のデータをマージする処理(データ合成)それぞれについて複数のスレッドを割り当てることが可能である。スレッドの処理はそれを実行するユニット(CPUコア)にマップされ各コアが時間独立に処理を実行することで、並列で動作することが出来る。
更には、本実施形態のレンダラではコアの割り振りを決定するに際し、各データの分析した結果(例えば、PDL関連情報)に基づいて割り当てを決定するコア管理機構を有し、制御に基づいて並列処理を行う。システム上利用可能なコア数が多い場合に、処理の効率を更に高める目的で、PDLデータの受け取り処理の部分においては各図形の基本情報であるPDL関連情報を抽出する。そして、レンダラは、ベクタライズ等の処理を後段のパイプライン処理にマップすることでデータ処理の負荷分散を図るよう構成されており、コア数が増大した場合でもスケーラブルに性能が向上する。
【0013】
並列処理構造を持つRIPシステムの基本構成を説明する。
図5は、画像処理装置のソフトウェア構成(システム構成)等の一例を示す図である。図にあるようにPDLデータは、描画インターフェースを経由して、RIPシステム側に受け渡される。RIPシステム側では「データ受け取り」の処理ブロックが図形、文字、画像等のPDLオブジェクトを受け取り、不図示の内部スプーラに適時データを蓄えた後に後段の処理ユニットにデータを流すよう構成されている。PDLオブジェクトが図形等であった場合は、「データ受け取り」は、図5にあるエッジ抽出処理(スレッド)にデータを受け渡す。一方、PDLオブジェクトがイメージであった場合は、「データ受け取り」は、画像処理(スレッド)にデータを受け渡す。図形がページに複数存在する場合は、それぞれに対してエッジ抽出処理が割り当てられる。それぞれのエッジ抽出処理で抽出されたエッジデータは、適宜後段のデータ合成処理(スレッド)に渡され、ページ上に合成(重ね合わせの処理)がなされると同時にタイル状のデータにフォーマットされた上でスプーラにRIP中間データとして書き出される。タイル上にフォーマットされたRIP中間データは更に後段のタイル処理(スレッド)により各タイルにおいてピクセルの展開処理が行われる。それぞれのタイルの処理は、時間独立で実行がなされる。
【0014】
図6は、三角形の図形に対してエッジ抽出処理を行う様子を示した図である。図中、水平方向右を示す矢印はスキャンラインであって、三角形の外接矩形の上から下へ順にスキャン走査を行うよう構成されている。図6では3ライン目のスキャンが行われており、辺AB及び辺AC上のエッジ(2つ)が抽出されている。
【0015】
図7は、スキャンラインの処理の一例を示すフローチャートである。
まず、ステップS11では、「エッジ抽出処理」は、入力された図形のデータについて初期化処理を行う。この処理の中では、「エッジ抽出処理」は、スキャンの範囲等を決定し後段の処理が実行出来るよう、ループ数のパラメータ群をセットする。
次にステップS12において、「エッジ抽出処理」は、スキャンラインのY方向へのループ処理を開始する。ステップS13では、「エッジ抽出処理」は、現在のスキャンラインにかかる図形(図形の輪郭を形成する辺のデータ)を拾い出し、かつ、スキャンライン上に存在するエッジ情報(カレントのエッジデータリスト)を、更新する必要があるか否かを判断する。「エッジ抽出処理」は、もし更新の必要がなければステップS17へ進むが更新の必要があれば、ステップS14へ進む。
【0016】
ステップS14では、「エッジ抽出処理」は、カレントのエッジデータリストに対して、エッジを追加又は削除の判断を行う。「エッジ抽出処理」は、図形の輪郭にスキャンラインがかかった場合等、エッジを追加する場合は、ステップS15にて追加すべきデータをX方向へ昇順となるように追加する。ここで追加されたデータはノードと呼ばれ、それぞれがリスト上に連結されている。一方で、図形の輪郭からスキャンラインが外れた場合等、エッジデータを削除する場合は、「エッジ抽出処理」は、ステップS16に進み、エッジデータリストから該当するデータを削除する。
ステップS17は、カレントのスキャンラインにおけるX方向のエッジ情報を抽出するための処理である。ステップS18では、「エッジ抽出処理」は、エッジデータリスト上の各ノードに順次アクセスしていく。エッジ情報は、カレント(Y値)のスキャンラインにおけるデータ値(DA)を線分の傾き等の情報から更新するよう構成されており、データの更新処理はステップS19にて、実行される。ステップS20の処理は、Xループのためのカウンタ減算処理である。ステップS21では、「エッジ抽出処理」は、X方向ループの終了有無を判定する。ステップS17からステップ21mではX方向のループであったが、ステップS12からステップS22まではY方向のループであり、これら二重のループにて平面上の図形の輪郭情報(エッジ情報)を抽出するよう構成されている。
【0017】
図8は、図5(基本システム概説図)の処理の中で、「エッジ抽出処理」と、抽出されたエッジのデータをマージする処理「データ合成」と、におけるデータの流れを説明するための図である。図8にあるように図形1、2のデータは実体としては図形の種類を表す図形種情報とそれを構成する座標データとの群で構成されている。これらデータは「エッジ抽出処理」、即ち、先に説明した図7にある処理フローによりエッジデータが抽出される。図形1と図形2とにはそれぞれ独立した別々のスレッドで処理がなされるために同時に2つの図形のエッジデータが抽出される。この処理は図8ではスレッド1、スレッド2として表現されている。これらの処理の過程において不図示である色情報抽出処理により図形の輪郭の中の塗り情報が同時に抽出される。スレッド3ではスレッド1及びスレッド2により抽出されたエッジデータ及び色情報から「データ合成」によってデータの合成処理が行われる。例えば、図形2が赤の単色(不透明)で塗られており図形1が青の単色(不透明)で塗られていて、図形1が図形2の上に描画されている場合、重なりの部分は上層の色である青が塗られることになる。この状態では色情報は2つ(即ち、青と赤)が保存される。一方でスレッド3が処理の対象とする領域(図8の例では矩形タイル)においては図形1と図形2との領域におけるエッジデータの合成(例えば重なった結果で不要になったエッジは消去される)が行われる。
本実施形態の処理方式では、重なりの状況によって、領域に関して保持すべき色情報の数が増えることもある。例えば図形1が赤の単色(不透明)で塗られており、図形2が青の単色(透過)で塗られている場合で、かつ、図形2が図形1の上に重なっている場合は透過合成の計算により重なっている領域の色が計算される。例えば、青と赤とを合成すると紫となるため、スレッド3の処理においては赤、青、紫の色情報が保持される。
【0018】
図9のグラフは、PDL処理とエッジ抽出(合成処理を含む)処理とにおいてどのように時間が短縮されるかを説明した図である。CPUが1つのコアしか持たない場合は複数のスレッドを立ち上げても各スレッドの処理は時分割で処理されるだけであるため処理の高速化を図ることは実質的には出来ない。図9における処理時間のグラフのうち、PDL処理の時間とは図5でいう所の「PDLインタプリタ」と「データ受け取り」との処理に関する時間がこれに該当し、エッジ抽出の時間は図5でいう所の「エッジ抽出処理」、「データ合成処理」がこれに該当する。
このグラフの例では、CPU1コアのシステムでは1ページ分の処理時間はトータルで700ms必要であって、その内訳は、PDL処理に160msを要し、その後のエッジ抽出処理には540ms要していることになる。
これを同様にCPU2コアのシステムで実行した場合は、PDL処理とエッジ抽出処理とをそれぞれ独立して動作出来るために、1ページ分のPDL図形の処理が完了する前にエッジ抽出処理を開始することが出来る。例えば端的には最初の図形PDL処理から渡された時点からエッジ抽出処理を開始しても良いし、一定時間、複数の図形を蓄えてから処理を開始しても良い。図9の例ではPDL処理を開始後、10ms経過した時点でエッジ抽出処理を開始している。その後はエッジ抽出処理が進むにつれてPDL処理が必要なデータを同時に生成していくことになる。加えてエッジ抽出処理は2つの処理群に分けられて処理が行われる。このケースではコアが2つ同時に動作するためにエッジ抽出処理全体の処理が加速される。PDL処理が動作している間はどちらかのコアでPDL処理とエッジ抽出処理とが時分割で行われるが、もう一方のコアはエッジ抽出処理だけを担当する(或いは時々に役割を交代することも可能である)ため、総合すると全体の処理を短縮することが出来る。
【0019】
<実施形態2>
図10は、実施形態1の構成について適用するコア数を増やしていった場合の性能の変化を示した図である。図10にあるようにCPU1コア時の1ページの処理時間が700msであった場合、CPU2コアの場合は370ms(1.9倍高速)、CPU4コアの場合は200ms(3.5倍高速)、CPU8コアの場合は180ms(3.9倍高速)となった。つまり実施形態1の構成によりコア数に応じてパフォーマンス(RIP処理速度)を向上出来るようになった。
ここで更にコア数を増やしていった場合のことも勘案し、コア数が増えた場合の内部処理状況の分析を行った。
【0020】
図11は、コア数が8の場合のプログラム内部スレッドの活動状況を示した図である。図11のグラフは、スレッド・アクティビティのグラフである。図11中に黒帯が記録されている所はCPUの各コアがスレッドの処理を実行していた領域を示しており、空白の領域はコアがアイドル(休止)している領域を示している。このグラフが示すようにコア番号の8,7,6に関しては図中10の円で示されるようにコアが動いていない領域(時間帯)がかなり多くあることが読み取れる。同条件の(データ負荷が同じ)場合でCPUコアが4つで動作している場合を分析すると、このような状態は観察されない。
この状況を分析した所、図12でいうところの「データ受け取り」の処理にボトルネックが発生していることが判明した。データ受け取りの部分では受け取った図形が直線データだけで構成されている場合は直ちにデータを受け取れるが、曲線データであった場合は、ベクタライズと呼ばれる直線化処理を行っている。通常は十分に高速処理出来る処理も、曲線を持つ図形が多く入力されると、この処理に時間がかかり、その結果、後段のエッジ抽出処理へのデータ入力が間に合わなくなってくる。データを受け取れないエッジ抽出処理は処理を開始出来ずにアイドル時間でデータを待機する状態となってしまう。
【0021】
したがって、実施形態2では、「データ受け取り」処理を図13の(b)にあるように多段の処理ブロックを構成することで全体のパフォーマンスを更に改善する。図13の(b)中、PDLオブジェクトは、描画インターフェースを経由してデータ受け取り処理に渡されるが、そこでは最初にベクタライズ必要の有無が判断される。その後、必要な場合のみ図形にマーキングが施され、データリスト1にスプールが行われる。データリスト1は、第一のデータ保持部の一例である。
実施形態2の提案では、図13の(b)にあるように、ベクタライズ処理自体は後段の別スレッドのタスクにより「処理1」を実行する時間とは別の独立した時間(独立時間)で実行される。後段のベクタライズ処理ではデータリスト1のデータのうち、ベクタライズが必要なデータが適宜ピックアップされ、ベクタライズ処理が行われる(この動作は図にあるように適宜、複数スレッドで行っても良い)。ベクタライズされたデータはデータリスト2に格納され、後段のエッジ抽出処理に適宜渡される。つまり、マーキングを施されなかったデータリスト1に保持されている図形が後段のエッジ抽出処理に渡されると共に、データリスト2に保持されている図形が後段のエッジ抽出処理に渡される。データリスト2は、第二のデータ保持部の一例である。
図13(a)中のグラフからわかるように、このような構成をとることでCPUコア数が8となった場合でもエッジ抽出処理へのデータ供給が途切れず、その結果常に並列で動作が可能となり全体のパフォーマンスを向上させることが出来る。
【0022】
ここで図13の(b)にて説明したように「データ受け取り」に多段の処理ブロックを適用すると8コアの場合に処理パフォーマンスが向上することが判明したが逆にこれを4コアの場合に適用するとどうなるかについて簡単に説明する。図13(a)中のグラフにあるように8コアの処理時にはデータ受け取りの処理時間のオーバーヘッドとして35ms(20ms+15ms)を消費している。これを4コアの場合に適用しても4コアの場合は、そもそもエッジ抽出処理の部分で4つのコアがフルに稼働しているため並列処理度が向上することはない。つまりデータを供給する側に工夫をしてもシステムのパフォーマンスの向上は得られないということになる。このため4コアの場合には図13の(b)にあるような多段構成の処理系は適用しない方が良いということになる。以上のことから、実施形態2ではコア数が4、又は8という状況に応じて提供する処理アルゴリズムを切り替えるよう構成する。
【0023】
図14は、システム側から通知された利用可能なコア数に応じて、選択する処理を切り替える一例を示す図である。即ちコア数が4までの場合は図中左にあるように実施形態1の構成をとり、8コア以上の場合は右ブロックにあるようにデータ受け取りの処理を図13の(b)にあるように多段構成とした処理アルゴリズムで処理するよう構成する。なお、4は、所定の数の一例である。
図15は、実施形態2の構成を適用した場合の、コア数に対する、性能の変化をグラフで示した図である。図にあるようにCPU1コア時の1ページの処理時間が700msであった場合、CPU2コアの場合は370ms(1.9倍高速)、CPU4コアの場合は200ms(3.5倍高速)、CPU8コアの場合は135ms(5.2倍高速)となる。つまり、実施形態2の構成によりコア数に応じたパフォーマンス(RIP処理速度)を引き出すことが出来る。
【0024】
<実施形態3>
実施形態2では、コア数は8までのケースについて説明したが勿論CPUのコア数に制限があるわけではない。また8コアのケースにおける多段構成とした処理部は図5中のデータ受け取り処理を挙げたが同様の効果が挙げられる箇所があればそれらは別の箇所の処理でも良く特に処理箇所に依存しているものではない。8コア以上のケースを考えた場合、更にエッジ抽出に要する時間は短縮されることが想定される。その場合にはデータ受け取りの処理を更に高速に行えるように新規の処理フローを導入しても良いが、供給側のデータを十分に積み上げてから処理を開始するように開始しても良い。コア数が増えることによってデータを処理していく処理ユニットにおいて入力と出力量とのバランスの調整が必要となるがそれらは実験的に求めても良いし理論的なモデル又は予測に基づいても良い。コア数が増えることにより各ブロックの処理自体を違う方法で実現しても良い。
図16は、コア数に応じて処理フローが切り替わるシステムの構成の一例を示す図である。ここでは切り替えが行われる各処理フローにおいて、それぞれが共通で用いる機能ブロックをモジュール化し、プログラムサイズを最小化する構成を示している。また想定される別のシナリオとしては、処理負荷が重くないページが多く入力されてきた場合等には、例えばコア数が4の場合にはCPUコア自体にアイドル時間が多く発生することも考えられる。そのような状態のときにはスプーラ内に処理済みのページが十分に蓄積され、その結果、エンジン出力速度をキープする上で、当面の間、ページの加速処理を行う必要がない場合も考えられる。そのような場合を想定して調停機能(コア数に応じてアイドル時間の調整を行うようなシステム)を設けるようにしても良い。
【0025】
<その他の実施形態>
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムを読み出して実行する処理である。
【0026】
以上、上述した各実施形態によれば、図形がどのように配置されていてもそれぞれに対して均等にコアを割り当てることが出来るようになるため、処理効率を向上(データ転送の無駄の削減、及びコア待機時間の削減)することが出来る。この結果、グラフィックスが多く含まれるような処理負荷の高いページが入力された場合でも効果的にレンダリング速度を高速化出来る。
【0027】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
なお、上述した構成は、プリンタ装置、ディスプレイ等の表示装置、画像出力デバイス等に利用することが出来る。
【技術分野】
【0001】
本発明は、画像処理装置、画像処理方法及びプログラムに関する。
【背景技術】
【0002】
従来から図形を描画するために図形が持つ座標情報等から図形の輪郭情報(エッジ情報とも呼ぶ)を抽出し、輪郭情報に基づいて画像を形成するレンダリング手法は一般に広く利用されている(例えば、特許文献1参照)。輪郭情報は直線で表現されるが直線を表現するための手法としてDDAアルゴリズムが知られている(非特許文献1参照)。
図1は、従来のレンダラの処理の一例を示す図である。ここでは入力図形をバンドに分割して処理を行っている。グラフィックス処理を実行するにあたり、このようなシステムで問題となるのは、多くのグラフィックスオブジェクトが入力された場合にレンダリング速度の低下が発生することである。そこで図1にあるようにバンドで分割された場合の処理では、それぞれのバンドに対して独立した処理単位(スレッド)を割り当てることで処理速度の向上を試みるものが提案されている(特許文献2)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平4−170686号公報
【特許文献2】特開2003−51019号公報
【非特許文献】
【0004】
【非特許文献1】David Rogers,"Procedural Elements for Computer Graphics"McGraw−Hill Education
【発明の概要】
【発明が解決しようとする課題】
【0005】
従来のレンダラでは、図形はパス等の座標や線分情報が渡された段階でスキャンライン上のエッジデータ等を生成する構造となっている。このため図形ごとに独立処理を行うことは出来ない。一方、バンド単位で分割を行えば各領域には依存性はなく並列処理を行うことは出来る。この方法では一定の条件下では並列処理の実行が効率的に実行可能だが全ての場合において効率的に動作するわけではない。例えば、1つの図形をみた場合に、それが上下に隣接する2つのバンド領域Aとバンド領域Bに跨る場合は、そのままでは並列処理が実行出来ない。このような状態で処理を進めるには2つのバンド領域それぞれに対して図形を供給(データの複製、及び転送等)する必要がある。このことからバンド並列型の処理ではバンド境界に跨る図形を多く含むPDLデータの場合、十分な高速化が期待出来ないという課題がある。バンドの区切り位置をオブジェクトの配置を考慮して調整することも考えられるが、どのように調整をしたとしてもバンドを跨る図形は存在しうるため根本的な解決手段とはならない。またバンド1つに対して1スレッドしか処理が(基本単位として)割り当てられないことを考える。するとオブジェクトの配置がバンドの領域に対して極端に偏って分布しているような(例えば1バンド上に数百ものオブジェクトが存在する)場合は処理の高速化が十分に期待出来ない問題があった。
【0006】
本発明はこのような問題点に鑑みなされたもので、レンダリング処理を高速化することを目的とする。
【課題を解決するための手段】
【0007】
そこで、本発明は、PDLデータを順次、受け取り、前記PDLデータに含まれる図形を後段の処理に渡す受け取り手段と、前記受け取り手段より渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当て手段と、前記図形ごとに抽出されたエッジ情報を合成する合成手段と、前記合成手段で合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプール手段と、前記スプール手段からタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成手段と、を有する。
【発明の効果】
【0008】
本発明によれば、レンダリング処理を高速化することが出来る。
【図面の簡単な説明】
【0009】
【図1】従来のレンダラの処理の一例を示す図である。
【図2】画像処理装置のハードウェア構成の一例を示す図である。
【図3】図形ごとに処理の単位(スレッド)を割り当てた一例を示す図である。
【図4】各図形においてエッジ抽出処理を各々独立に適用した場合の概念図である。
【図5】画像処理装置のソフトウェア構成(システム構成)等の一例を示す図である。
【図6】三角形の図形に対してエッジ抽出処理を行う様子を示した図である。
【図7】スキャンラインの処理の一例を示すフローチャートである。
【図8】「エッジ抽出処理」と、抽出されたエッジのデータをマージする処理「データ合成」と、におけるデータの流れを説明するための図である。
【図9】PDL処理とエッジ抽出処理(合成処理を含む)とにおいてどのように時間が短縮されるかを説明した図である。
【図10】実施形態1の構成について適用するコア数を増やしていった場合の性能の変化を示した図である。
【図11】コア数が8の場合のプログラム内部スレッドの活動状況を示した図である。
【図12】「データ受け取り」の処理にボトルネックが発生していることを説明するための図である。
【図13】「データ受け取り」の処理を多段の(複数の)処理に分けることを説明するための図である。
【図14】システム側から通知された利用可能なコア数に応じて、選択する処理を切り替える一例を示す図である。
【図15】実施形態2の構成を適用した場合の、コア数に対する、性能の変化をグラフで示した図である。
【図16】コア数に応じて処理フローが切り替わるシステムの構成の一例を示す図である。
【発明を実施するための形態】
【0010】
以下、本発明の実施形態について図面に基づいて説明する。
【0011】
<実施形態1>
図2は、画像処理装置のハードウェア構成の一例を示す図である。
図2において、CPU101は、ROM103又はハードディスク111からRAM102にロードされたOSや一般アプリケーション等のプログラムを実行し、後述するソフトウェアの機能及びフローチャートの処理を実現する。
RAM102は、CPU101の主メモリ、ワークエリア等として機能する。キーボードコントローラ(KBC)105は、キーボード109や不図示のポインティングデバイスからのキー入力を制御する。CRTコントローラ(CRTC)106は、CRTディスプレイ110の表示を制御する。ディスクコントローラ(DKC)107は、ブートプログラム、種々のアプリケーション、フォントデータ、ユーザファイル等を記憶するハードディスク(HD)111やフレキシブルディスク(FD)等とのアクセスを制御する。PRTC108は、接続されたプリンタ107との間の信号の交換を制御する。NC112は、ネットワークに接続されて、ネットワークに接続された他の機器との通信制御処理を実行する。
なお、本実施形態では、以下に示す画像処理装置の機能は、ソフトウェアにより実現されるものと説明するが、各機能を専用のハードウェアで画像処理装置に実装するようにしても良い。
なお、本実施形態のCPU101は、マルチコアのCPUであるものとする。画像処理装置が、複数のCPUを有していても良い。
【0012】
本実施形態のレンダラは、図3にあるように図形ごとに処理の単位(スレッド)を割り当てる。図形の位置はページ上に配置(絶対座標上)されているが、それぞれは個別の相対座標にマップされ(図形の外接矩形の左上の点を原点に持つ相対座標に変換され)、各領域においてエッジ抽出処理を行うことが出来る。
図4は、各図形においてエッジ抽出処理を各々独立に適用した場合の概念図である。ページ上の図形ごとにエッジ抽出処理を実施する様子を示している。図形ごとに抽出されたエッジ情報は再度ページ上の座標にマップされ合成処理がなされる。それぞれの処理は各々依存性がないために独立に実行することが出来る。つまり、図形のデータが入力された後、各図形のエッジ抽出の処理、及び各抽出処理後のデータをマージする処理(データ合成)それぞれについて複数のスレッドを割り当てることが可能である。スレッドの処理はそれを実行するユニット(CPUコア)にマップされ各コアが時間独立に処理を実行することで、並列で動作することが出来る。
更には、本実施形態のレンダラではコアの割り振りを決定するに際し、各データの分析した結果(例えば、PDL関連情報)に基づいて割り当てを決定するコア管理機構を有し、制御に基づいて並列処理を行う。システム上利用可能なコア数が多い場合に、処理の効率を更に高める目的で、PDLデータの受け取り処理の部分においては各図形の基本情報であるPDL関連情報を抽出する。そして、レンダラは、ベクタライズ等の処理を後段のパイプライン処理にマップすることでデータ処理の負荷分散を図るよう構成されており、コア数が増大した場合でもスケーラブルに性能が向上する。
【0013】
並列処理構造を持つRIPシステムの基本構成を説明する。
図5は、画像処理装置のソフトウェア構成(システム構成)等の一例を示す図である。図にあるようにPDLデータは、描画インターフェースを経由して、RIPシステム側に受け渡される。RIPシステム側では「データ受け取り」の処理ブロックが図形、文字、画像等のPDLオブジェクトを受け取り、不図示の内部スプーラに適時データを蓄えた後に後段の処理ユニットにデータを流すよう構成されている。PDLオブジェクトが図形等であった場合は、「データ受け取り」は、図5にあるエッジ抽出処理(スレッド)にデータを受け渡す。一方、PDLオブジェクトがイメージであった場合は、「データ受け取り」は、画像処理(スレッド)にデータを受け渡す。図形がページに複数存在する場合は、それぞれに対してエッジ抽出処理が割り当てられる。それぞれのエッジ抽出処理で抽出されたエッジデータは、適宜後段のデータ合成処理(スレッド)に渡され、ページ上に合成(重ね合わせの処理)がなされると同時にタイル状のデータにフォーマットされた上でスプーラにRIP中間データとして書き出される。タイル上にフォーマットされたRIP中間データは更に後段のタイル処理(スレッド)により各タイルにおいてピクセルの展開処理が行われる。それぞれのタイルの処理は、時間独立で実行がなされる。
【0014】
図6は、三角形の図形に対してエッジ抽出処理を行う様子を示した図である。図中、水平方向右を示す矢印はスキャンラインであって、三角形の外接矩形の上から下へ順にスキャン走査を行うよう構成されている。図6では3ライン目のスキャンが行われており、辺AB及び辺AC上のエッジ(2つ)が抽出されている。
【0015】
図7は、スキャンラインの処理の一例を示すフローチャートである。
まず、ステップS11では、「エッジ抽出処理」は、入力された図形のデータについて初期化処理を行う。この処理の中では、「エッジ抽出処理」は、スキャンの範囲等を決定し後段の処理が実行出来るよう、ループ数のパラメータ群をセットする。
次にステップS12において、「エッジ抽出処理」は、スキャンラインのY方向へのループ処理を開始する。ステップS13では、「エッジ抽出処理」は、現在のスキャンラインにかかる図形(図形の輪郭を形成する辺のデータ)を拾い出し、かつ、スキャンライン上に存在するエッジ情報(カレントのエッジデータリスト)を、更新する必要があるか否かを判断する。「エッジ抽出処理」は、もし更新の必要がなければステップS17へ進むが更新の必要があれば、ステップS14へ進む。
【0016】
ステップS14では、「エッジ抽出処理」は、カレントのエッジデータリストに対して、エッジを追加又は削除の判断を行う。「エッジ抽出処理」は、図形の輪郭にスキャンラインがかかった場合等、エッジを追加する場合は、ステップS15にて追加すべきデータをX方向へ昇順となるように追加する。ここで追加されたデータはノードと呼ばれ、それぞれがリスト上に連結されている。一方で、図形の輪郭からスキャンラインが外れた場合等、エッジデータを削除する場合は、「エッジ抽出処理」は、ステップS16に進み、エッジデータリストから該当するデータを削除する。
ステップS17は、カレントのスキャンラインにおけるX方向のエッジ情報を抽出するための処理である。ステップS18では、「エッジ抽出処理」は、エッジデータリスト上の各ノードに順次アクセスしていく。エッジ情報は、カレント(Y値)のスキャンラインにおけるデータ値(DA)を線分の傾き等の情報から更新するよう構成されており、データの更新処理はステップS19にて、実行される。ステップS20の処理は、Xループのためのカウンタ減算処理である。ステップS21では、「エッジ抽出処理」は、X方向ループの終了有無を判定する。ステップS17からステップ21mではX方向のループであったが、ステップS12からステップS22まではY方向のループであり、これら二重のループにて平面上の図形の輪郭情報(エッジ情報)を抽出するよう構成されている。
【0017】
図8は、図5(基本システム概説図)の処理の中で、「エッジ抽出処理」と、抽出されたエッジのデータをマージする処理「データ合成」と、におけるデータの流れを説明するための図である。図8にあるように図形1、2のデータは実体としては図形の種類を表す図形種情報とそれを構成する座標データとの群で構成されている。これらデータは「エッジ抽出処理」、即ち、先に説明した図7にある処理フローによりエッジデータが抽出される。図形1と図形2とにはそれぞれ独立した別々のスレッドで処理がなされるために同時に2つの図形のエッジデータが抽出される。この処理は図8ではスレッド1、スレッド2として表現されている。これらの処理の過程において不図示である色情報抽出処理により図形の輪郭の中の塗り情報が同時に抽出される。スレッド3ではスレッド1及びスレッド2により抽出されたエッジデータ及び色情報から「データ合成」によってデータの合成処理が行われる。例えば、図形2が赤の単色(不透明)で塗られており図形1が青の単色(不透明)で塗られていて、図形1が図形2の上に描画されている場合、重なりの部分は上層の色である青が塗られることになる。この状態では色情報は2つ(即ち、青と赤)が保存される。一方でスレッド3が処理の対象とする領域(図8の例では矩形タイル)においては図形1と図形2との領域におけるエッジデータの合成(例えば重なった結果で不要になったエッジは消去される)が行われる。
本実施形態の処理方式では、重なりの状況によって、領域に関して保持すべき色情報の数が増えることもある。例えば図形1が赤の単色(不透明)で塗られており、図形2が青の単色(透過)で塗られている場合で、かつ、図形2が図形1の上に重なっている場合は透過合成の計算により重なっている領域の色が計算される。例えば、青と赤とを合成すると紫となるため、スレッド3の処理においては赤、青、紫の色情報が保持される。
【0018】
図9のグラフは、PDL処理とエッジ抽出(合成処理を含む)処理とにおいてどのように時間が短縮されるかを説明した図である。CPUが1つのコアしか持たない場合は複数のスレッドを立ち上げても各スレッドの処理は時分割で処理されるだけであるため処理の高速化を図ることは実質的には出来ない。図9における処理時間のグラフのうち、PDL処理の時間とは図5でいう所の「PDLインタプリタ」と「データ受け取り」との処理に関する時間がこれに該当し、エッジ抽出の時間は図5でいう所の「エッジ抽出処理」、「データ合成処理」がこれに該当する。
このグラフの例では、CPU1コアのシステムでは1ページ分の処理時間はトータルで700ms必要であって、その内訳は、PDL処理に160msを要し、その後のエッジ抽出処理には540ms要していることになる。
これを同様にCPU2コアのシステムで実行した場合は、PDL処理とエッジ抽出処理とをそれぞれ独立して動作出来るために、1ページ分のPDL図形の処理が完了する前にエッジ抽出処理を開始することが出来る。例えば端的には最初の図形PDL処理から渡された時点からエッジ抽出処理を開始しても良いし、一定時間、複数の図形を蓄えてから処理を開始しても良い。図9の例ではPDL処理を開始後、10ms経過した時点でエッジ抽出処理を開始している。その後はエッジ抽出処理が進むにつれてPDL処理が必要なデータを同時に生成していくことになる。加えてエッジ抽出処理は2つの処理群に分けられて処理が行われる。このケースではコアが2つ同時に動作するためにエッジ抽出処理全体の処理が加速される。PDL処理が動作している間はどちらかのコアでPDL処理とエッジ抽出処理とが時分割で行われるが、もう一方のコアはエッジ抽出処理だけを担当する(或いは時々に役割を交代することも可能である)ため、総合すると全体の処理を短縮することが出来る。
【0019】
<実施形態2>
図10は、実施形態1の構成について適用するコア数を増やしていった場合の性能の変化を示した図である。図10にあるようにCPU1コア時の1ページの処理時間が700msであった場合、CPU2コアの場合は370ms(1.9倍高速)、CPU4コアの場合は200ms(3.5倍高速)、CPU8コアの場合は180ms(3.9倍高速)となった。つまり実施形態1の構成によりコア数に応じてパフォーマンス(RIP処理速度)を向上出来るようになった。
ここで更にコア数を増やしていった場合のことも勘案し、コア数が増えた場合の内部処理状況の分析を行った。
【0020】
図11は、コア数が8の場合のプログラム内部スレッドの活動状況を示した図である。図11のグラフは、スレッド・アクティビティのグラフである。図11中に黒帯が記録されている所はCPUの各コアがスレッドの処理を実行していた領域を示しており、空白の領域はコアがアイドル(休止)している領域を示している。このグラフが示すようにコア番号の8,7,6に関しては図中10の円で示されるようにコアが動いていない領域(時間帯)がかなり多くあることが読み取れる。同条件の(データ負荷が同じ)場合でCPUコアが4つで動作している場合を分析すると、このような状態は観察されない。
この状況を分析した所、図12でいうところの「データ受け取り」の処理にボトルネックが発生していることが判明した。データ受け取りの部分では受け取った図形が直線データだけで構成されている場合は直ちにデータを受け取れるが、曲線データであった場合は、ベクタライズと呼ばれる直線化処理を行っている。通常は十分に高速処理出来る処理も、曲線を持つ図形が多く入力されると、この処理に時間がかかり、その結果、後段のエッジ抽出処理へのデータ入力が間に合わなくなってくる。データを受け取れないエッジ抽出処理は処理を開始出来ずにアイドル時間でデータを待機する状態となってしまう。
【0021】
したがって、実施形態2では、「データ受け取り」処理を図13の(b)にあるように多段の処理ブロックを構成することで全体のパフォーマンスを更に改善する。図13の(b)中、PDLオブジェクトは、描画インターフェースを経由してデータ受け取り処理に渡されるが、そこでは最初にベクタライズ必要の有無が判断される。その後、必要な場合のみ図形にマーキングが施され、データリスト1にスプールが行われる。データリスト1は、第一のデータ保持部の一例である。
実施形態2の提案では、図13の(b)にあるように、ベクタライズ処理自体は後段の別スレッドのタスクにより「処理1」を実行する時間とは別の独立した時間(独立時間)で実行される。後段のベクタライズ処理ではデータリスト1のデータのうち、ベクタライズが必要なデータが適宜ピックアップされ、ベクタライズ処理が行われる(この動作は図にあるように適宜、複数スレッドで行っても良い)。ベクタライズされたデータはデータリスト2に格納され、後段のエッジ抽出処理に適宜渡される。つまり、マーキングを施されなかったデータリスト1に保持されている図形が後段のエッジ抽出処理に渡されると共に、データリスト2に保持されている図形が後段のエッジ抽出処理に渡される。データリスト2は、第二のデータ保持部の一例である。
図13(a)中のグラフからわかるように、このような構成をとることでCPUコア数が8となった場合でもエッジ抽出処理へのデータ供給が途切れず、その結果常に並列で動作が可能となり全体のパフォーマンスを向上させることが出来る。
【0022】
ここで図13の(b)にて説明したように「データ受け取り」に多段の処理ブロックを適用すると8コアの場合に処理パフォーマンスが向上することが判明したが逆にこれを4コアの場合に適用するとどうなるかについて簡単に説明する。図13(a)中のグラフにあるように8コアの処理時にはデータ受け取りの処理時間のオーバーヘッドとして35ms(20ms+15ms)を消費している。これを4コアの場合に適用しても4コアの場合は、そもそもエッジ抽出処理の部分で4つのコアがフルに稼働しているため並列処理度が向上することはない。つまりデータを供給する側に工夫をしてもシステムのパフォーマンスの向上は得られないということになる。このため4コアの場合には図13の(b)にあるような多段構成の処理系は適用しない方が良いということになる。以上のことから、実施形態2ではコア数が4、又は8という状況に応じて提供する処理アルゴリズムを切り替えるよう構成する。
【0023】
図14は、システム側から通知された利用可能なコア数に応じて、選択する処理を切り替える一例を示す図である。即ちコア数が4までの場合は図中左にあるように実施形態1の構成をとり、8コア以上の場合は右ブロックにあるようにデータ受け取りの処理を図13の(b)にあるように多段構成とした処理アルゴリズムで処理するよう構成する。なお、4は、所定の数の一例である。
図15は、実施形態2の構成を適用した場合の、コア数に対する、性能の変化をグラフで示した図である。図にあるようにCPU1コア時の1ページの処理時間が700msであった場合、CPU2コアの場合は370ms(1.9倍高速)、CPU4コアの場合は200ms(3.5倍高速)、CPU8コアの場合は135ms(5.2倍高速)となる。つまり、実施形態2の構成によりコア数に応じたパフォーマンス(RIP処理速度)を引き出すことが出来る。
【0024】
<実施形態3>
実施形態2では、コア数は8までのケースについて説明したが勿論CPUのコア数に制限があるわけではない。また8コアのケースにおける多段構成とした処理部は図5中のデータ受け取り処理を挙げたが同様の効果が挙げられる箇所があればそれらは別の箇所の処理でも良く特に処理箇所に依存しているものではない。8コア以上のケースを考えた場合、更にエッジ抽出に要する時間は短縮されることが想定される。その場合にはデータ受け取りの処理を更に高速に行えるように新規の処理フローを導入しても良いが、供給側のデータを十分に積み上げてから処理を開始するように開始しても良い。コア数が増えることによってデータを処理していく処理ユニットにおいて入力と出力量とのバランスの調整が必要となるがそれらは実験的に求めても良いし理論的なモデル又は予測に基づいても良い。コア数が増えることにより各ブロックの処理自体を違う方法で実現しても良い。
図16は、コア数に応じて処理フローが切り替わるシステムの構成の一例を示す図である。ここでは切り替えが行われる各処理フローにおいて、それぞれが共通で用いる機能ブロックをモジュール化し、プログラムサイズを最小化する構成を示している。また想定される別のシナリオとしては、処理負荷が重くないページが多く入力されてきた場合等には、例えばコア数が4の場合にはCPUコア自体にアイドル時間が多く発生することも考えられる。そのような状態のときにはスプーラ内に処理済みのページが十分に蓄積され、その結果、エンジン出力速度をキープする上で、当面の間、ページの加速処理を行う必要がない場合も考えられる。そのような場合を想定して調停機能(コア数に応じてアイドル時間の調整を行うようなシステム)を設けるようにしても良い。
【0025】
<その他の実施形態>
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムを読み出して実行する処理である。
【0026】
以上、上述した各実施形態によれば、図形がどのように配置されていてもそれぞれに対して均等にコアを割り当てることが出来るようになるため、処理効率を向上(データ転送の無駄の削減、及びコア待機時間の削減)することが出来る。この結果、グラフィックスが多く含まれるような処理負荷の高いページが入力された場合でも効果的にレンダリング速度を高速化出来る。
【0027】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
なお、上述した構成は、プリンタ装置、ディスプレイ等の表示装置、画像出力デバイス等に利用することが出来る。
【特許請求の範囲】
【請求項1】
PDLデータを順次、受け取り、前記PDLデータに含まれる図形を後段の処理に渡す受け取り手段と、
前記受け取り手段より渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当て手段と、
前記図形ごとに抽出されたエッジ情報を合成する合成手段と、
前記合成手段で合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプール手段と、
前記スプール手段からタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成手段と、
を有する画像処理装置。
【請求項2】
前記割り当て手段は、図形の絶対座標を、図形の外接矩形の左上の点を原点に持つ相対座標に変換し、図形ごとの各領域においてエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる請求項1記載の画像処理装置。
【請求項3】
前記エッジ抽出処理は、エッジ情報を抽出すると共に図形の輪郭の中の塗り情報を抽出する請求項1又は2記載の画像処理装置。
【請求項4】
前記受け取り手段と、前記割り当て手段及び前記合成手段と、を別々のスレッドで実行させる請求項1乃至3何れか1項記載の画像処理装置。
【請求項5】
前記受け取り手段は、
前記図形が、ベクタライズが必要な図形か否かを判断し、ベクタライズが必要であると判断した場合、前記図形にマーキングを施し、図形を第一のデータ保持部に保存するマーキング手段と、
前記第一のデータ保持部に保持されている図形のうち、マーキングが施されている図形に対してベクタライズを施し、図形を第二のデータ保持部に保持するベクタライズ手段と、
を有し、
前記マーキングを施されなかった前記第一のデータ保持部に保持されている図形を前記後段の処理である前記割り当て手段に渡すと共に、前記第二のデータ保持部に保持されている図形を前記後段の処理である前記割り当て手段に渡し、前記マーキング手段と、前記ベクタライズ手段と、を別々に実行する請求項1乃至4何れか1項記載の画像処理装置。
【請求項6】
前記受け取り手段は、利用可能なCPUのコア数が所定の数より大きい場合は、前記マーキング手段と、前記ベクタライズ手段と、を実行する処理を選択し、利用可能なCPUのコア数が所定の数より小さい場合は、前記マーキング手段と、前記ベクタライズ手段と、を実行する処理を選択しない請求項5記載の画像処理装置。
【請求項7】
画像処理装置が実行する画像処理方法であって、
PDLデータを順次、受け取り、前記PDLデータに含まれる図形を後段の処理に渡す受け取りステップと、
前記受け取りステップより渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当てステップと、
前記図形ごとに抽出されたエッジ情報を合成する合成ステップと、
前記合成ステップで合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプールステップと、
前記スプールステップからタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成ステップと、
を有する画像処理方法。
【請求項8】
コンピュータに、
PDLデータを順次、受け取り、前記PDLデータに含まれる図形を後段の処理に渡す受け取りステップと、
前記受け取りステップより渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当てステップと、
前記図形ごとに抽出されたエッジ情報を合成する合成ステップと、
前記合成ステップで合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプールステップと、
前記スプールステップからタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成ステップと、
を実行させるプログラム。
【請求項1】
PDLデータを順次、受け取り、前記PDLデータに含まれる図形を後段の処理に渡す受け取り手段と、
前記受け取り手段より渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当て手段と、
前記図形ごとに抽出されたエッジ情報を合成する合成手段と、
前記合成手段で合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプール手段と、
前記スプール手段からタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成手段と、
を有する画像処理装置。
【請求項2】
前記割り当て手段は、図形の絶対座標を、図形の外接矩形の左上の点を原点に持つ相対座標に変換し、図形ごとの各領域においてエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる請求項1記載の画像処理装置。
【請求項3】
前記エッジ抽出処理は、エッジ情報を抽出すると共に図形の輪郭の中の塗り情報を抽出する請求項1又は2記載の画像処理装置。
【請求項4】
前記受け取り手段と、前記割り当て手段及び前記合成手段と、を別々のスレッドで実行させる請求項1乃至3何れか1項記載の画像処理装置。
【請求項5】
前記受け取り手段は、
前記図形が、ベクタライズが必要な図形か否かを判断し、ベクタライズが必要であると判断した場合、前記図形にマーキングを施し、図形を第一のデータ保持部に保存するマーキング手段と、
前記第一のデータ保持部に保持されている図形のうち、マーキングが施されている図形に対してベクタライズを施し、図形を第二のデータ保持部に保持するベクタライズ手段と、
を有し、
前記マーキングを施されなかった前記第一のデータ保持部に保持されている図形を前記後段の処理である前記割り当て手段に渡すと共に、前記第二のデータ保持部に保持されている図形を前記後段の処理である前記割り当て手段に渡し、前記マーキング手段と、前記ベクタライズ手段と、を別々に実行する請求項1乃至4何れか1項記載の画像処理装置。
【請求項6】
前記受け取り手段は、利用可能なCPUのコア数が所定の数より大きい場合は、前記マーキング手段と、前記ベクタライズ手段と、を実行する処理を選択し、利用可能なCPUのコア数が所定の数より小さい場合は、前記マーキング手段と、前記ベクタライズ手段と、を実行する処理を選択しない請求項5記載の画像処理装置。
【請求項7】
画像処理装置が実行する画像処理方法であって、
PDLデータを順次、受け取り、前記PDLデータに含まれる図形を後段の処理に渡す受け取りステップと、
前記受け取りステップより渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当てステップと、
前記図形ごとに抽出されたエッジ情報を合成する合成ステップと、
前記合成ステップで合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプールステップと、
前記スプールステップからタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成ステップと、
を有する画像処理方法。
【請求項8】
コンピュータに、
PDLデータを順次、受け取り、前記PDLデータに含まれる図形を後段の処理に渡す受け取りステップと、
前記受け取りステップより渡された図形ごとにエッジ情報を抽出する処理の単位であるエッジ抽出処理を割り当てる割り当てステップと、
前記図形ごとに抽出されたエッジ情報を合成する合成ステップと、
前記合成ステップで合成されたデータをタイル状のフォーマットで中間データとしてスプールするスプールステップと、
前記スプールステップからタイル状の中間データを読み出し、中間データからピクセルを生成するに際し、タイルごとにそれぞれ処理を行う生成ステップと、
を実行させるプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【公開番号】特開2012−185697(P2012−185697A)
【公開日】平成24年9月27日(2012.9.27)
【国際特許分類】
【出願番号】特願2011−48654(P2011−48654)
【出願日】平成23年3月7日(2011.3.7)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成24年9月27日(2012.9.27)
【国際特許分類】
【出願日】平成23年3月7日(2011.3.7)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]