JP6230268B2 - 画像処理装置、画像処理方法およびプログラム - Google Patents

画像処理装置、画像処理方法およびプログラム Download PDF

Info

Publication number
JP6230268B2
JP6230268B2 JP2013108873A JP2013108873A JP6230268B2 JP 6230268 B2 JP6230268 B2 JP 6230268B2 JP 2013108873 A JP2013108873 A JP 2013108873A JP 2013108873 A JP2013108873 A JP 2013108873A JP 6230268 B2 JP6230268 B2 JP 6230268B2
Authority
JP
Japan
Prior art keywords
image
drawing command
foreground
rule
command
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
Application number
JP2013108873A
Other languages
English (en)
Other versions
JP2014229111A (ja
Inventor
陽平 木内
陽平 木内
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2013108873A priority Critical patent/JP6230268B2/ja
Priority to US14/273,604 priority patent/US9122977B2/en
Publication of JP2014229111A publication Critical patent/JP2014229111A/ja
Application granted granted Critical
Publication of JP6230268B2 publication Critical patent/JP6230268B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/02Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers using printers
    • G06K15/18Conditioning data for presenting it to the physical printing elements
    • G06K15/1848Generation of the printable image
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/60Editing figures and text; Combining figures or text

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)

Description

本発明は、画像処理装置、画像処理方法およびプログラムに関し、より詳細には、前景画像を背景画像に重ねる処理を行う画像処理装置、画像処理方法およびプログラムに関する。
従来、画像形成システムでは入力情報に基づき画像形成システムに適した印刷情報を作成して画像出力を行うことができる。具体的には、入力された描画命令に含まれる属性情報に基づき、画像処理パラメーターを変更して画像を生成する。ここで属性情報とは描画命令の種類を示す情報で、例えばテキスト、ライン、グラフィック、イメージなどがある。
描画命令としては同一の領域を塗る命令であっても、属性情報がグラフィックとイメージのように異なる場合、画素の色をその描画命令に従って決める際に用いられるルール(描画命令の描画ルール)が異なる場合がある。例えば、PostScript(登録商標)の描画処理においては、属性情報に応じて異なる描画ルールが規定されている(非特許文献1参照)。ラインやテキスト、グラフィックの属性を持つオブジェクトの描画は、そのオブジェクトの描画領域にわずかでも交差する画素を塗りつぶす(以下、交差ルールと呼ぶ)。イメージの属性を持つオブジェクトの描画は、画素の中心がそのオブジェクトの描画領域内にある画素のみを塗りつぶす(以下、中心ルールと呼ぶ)。属性情報によって画素単位の描画ルールが異なるのはPostScript(登録商標)に限定されるものではなく、他のページ記述言語でも同様の場合がある。
一方、近年のアプリケーションやOSの多様化により、描画命令が複雑化し、描画処理、画像処理の負荷が増大してきている。複雑な描画命令を高速に処理するために、コンピュータの処理の都合上、アプリケーションが一つのオブジェクトの画像(オブジェクト画像と呼ぶ)を複数の描画命令に分割することがある。その理由としては例えば、オブジェクト画像が大きくなるにつれてデータ量も極めて大きくなり、そのオブジェクトを一体として処理するには処理資源の負担が大きくなるからである。一般にアプリケーションのオブジェクト画像の分割処理では、オブジェクト画像が、互いに隣接する複数の描画領域に分割される。言い換えれば、元々は一つのオブジェクト画像が、複数の描画命令に分割される。それぞれの描画領域について背景オブジェクトを描画するための一つまたは複数の背面の描画命令と前景オブジェクトを描画するための一つの最前面の描画命令が発行される。なお、処理される描画領域の順は、描画の方向(例えば、ページの下から上)によって決める。各描画領域について、背面の描画命令が先に発行され、最前面の描画命令が最後に発行される。
分割後の複数の描画命令の描画結果が、元々一つのオブジェクト画像であったか否かをここでは描画命令の一体性と呼ぶ。分割された描画命令の一体性を描画時に判定する技術として、描画命令の領域配置の情報と、拡大率、解像度、デフォルト設定色などからなる内容情報とを用いて、描画命令の一体性を判定する技術がある(特許文献1参照)。
特許第3707523号公報
PostScriptリファレンスマニュアル第3版(アドビシステムズ著、株式会社アスキー発行)
しかしながら、特許文献1の技術では、描画命令の描画ルールに特別の考慮を行っていない。アプリケーションによって分割された描画命令を実行する際に、描画領域の境界部分に、背景オブジェクトと前景オブジェクトの画素を塗る描画ルールの違いにより、元のオブジェクト画像には存在しなかった背景色の線が現れてしまう場合がある。特許文献1の技術では、このような画像不正を検出することができない。以下、このような画像不正の発生について、図4から図7を用いて具体的に説明する。
図4は、アプリケーション上のオブジェクト画像の例である。図4のオブジェクト画像400は、アプリケーションによって処理される元のオブジェクト画像である。
図5は、アプリケーションが生成する描画命令の例である。アプリケーションは、複雑な描画命令を高速に処理するため、オブジェクト画像を複数の描画命令に分割して生成する場合がある。この例では、描画領域をグラフィック(例えば白色の背景色)で描画する4つのグラフィック描画命令と、そのグラフィックの前面にオブジェクト画像を描画する4つのイメージ描画命令と、最後にページを出力するページ出力命令509とに分割されている。グラフィック描画命令501、503、505、507の属性情報はグラフィックであり、イメージ描画命令502、504、506、508の属性情報はイメージである。グラフィック描画命令およびイメージ描画命令の第1引数から第4引数は、描画領域の左下のX座標、Y座標、右上のX座標、Y座標を表している。座標の単位はpt(ポイント;1/72inch)である。グラフィック描画命令の第5引数は、描画の色を表し、この例では白である。イメージ描画命令の第5引数は、イメージデータを格納した変数を表す。イメージデータの内容はこの例では省略している。
描画命令は、501、502、503、・・・の順に発行されており、描画領域が重なる場合に最後に発行された描画命令に従って描画が行われる。一般にアプリケーションのオブジェクト画像の分割処理では、背面の一つまたは複数の描画命令とそれらを領域的に包含する最前面の描画命令を一つの単位として、それらが領域的に隣接する一連の描画命令として生成されることが多い。この例では、グラフィック描画命令501、503、505、507は、背面の描画命令であり、イメージ描画命令502、504、506、508は、それぞれグラフィック描画命令501、503、505、507を領域的に包含する最前面の描画命令である。
図6(a)は、図5の描画命令によって描画されるオブジェクトの位置関係を模式的に表した図である。グラフィック601、603、605、607は、グラフィック描画命令501、503、505、507(背面の描画命令)でそれぞれ描画される背景オブジェクトである。イメージ602、604、606、608は、イメージ描画命令502、504、506、508(最前面の描画命令)でそれぞれ描画される前景オブジェクトである。グラフィック601、603、605、607は隣り合う輪郭の座標の間に差分があり、隣接していない。ここではグラフィック601、603、605、607が隣接していない例を示したが、隣接していても処理の説明としては同様である。イメージ602、604、606、608は隣り合う輪郭の座標が完全に一致しており、隣接している。このように、イメージ602、604、606、608の領域はそれぞれ、グラフィック601、603、605、607の領域を完全に包含し、かつ、前面に位置している。
図6(b)は、イメージ602とイメージ604との境界上の部分領域609を拡大した図である。図6(b)には画素610およびその中心611が示されており、画素610の大きさは画像処理システムの解像度に依存する。ここでは、簡単のため画素の大きさを1.0ptとしている。この例では、グラフィック601の輪郭612と、グラフィック603の輪郭614と、イメージ602とイメージ604の境界613が全て画素610を通過している。ここで、「輪郭」は領域の内部と外部を分ける線を意味する語として用い、「境界」は二つの隣接する領域が互いに接している線を意味する語として用いている。
PostScript(登録商標)の描画ルールによって、グラフィック601、603は、交差ルールで描画されるため、描画領域にかかる画素610を塗りつぶす。一方、イメージ602、604は中心ルールで描画されるため、画素610の中心611が描画領域内にあるイメージ602のみが画素610を塗りつぶし、イメージ604は画素610を塗りつぶさない。すなわち、描画ルールによっては、背景オブジェクトであるグラフィック601、前景オブジェクトであるイメージ602、および背景オブジェクトであるグラフィック603は画素610を塗りつぶす。前景オブジェクトであるイメージ604は画素610を塗りつぶさない。さらに、描画領域が重なる場合に最後に発行された描画命令に従って描画が行われるため、画素610は背景オブジェクトであるグラフィック603の色で塗りつぶされる。
図7は、図5の描画命令の描画結果を模式的に表した図である。前景オブジェクトであるイメージ602、604、606、608の境界上に位置する画素は、背景オブジェクトであるグラフィック603、605、607の色で塗りつぶされ、1画素幅の白線701として現れる。これは元のオブジェクト画像400には存在しなかった線であり、画像不正としてユーザに認識される。なお、図7において、白線701の輪郭は説明のために付加したもので、実際には描画されない。
上述したように、特許文献1の技術では、描画命令の描画ルールに特別の考慮は行っていない。そのため、背景オブジェクトと前景オブジェクトの画素を塗る描画ルールの違いにより発生する、分割された描画命令によって描画されるオブジェクト同士の境界部分の画像不正を検出することができない。
このような課題を解決するために、本発明の画像処理装置は、前景画像を背景画像に重ねる処理を行う画像処理装置であって、画像の描画ルールに基づいて、前記前景画像の輪郭の画素において前記前景画像を用いずに前記背景画像を用いた不正描画が行われる可能性があるかどうかを判定する判定手段と、前記判定手段によって前記前景画像の輪郭の画素において前記不正描画が行われる可能性があると判定された場合、前記輪郭の画素において前記前景画像を用いた描画をするように制御する制御手段と、前記前景画像は複数の前景画像を含み、前記複数の前景画像のうち、互いに隣接する前景画像を検出する検出手段と、を有し、前記判定手段は、前記互いに隣接する前景画像の描画ルールが、描画領域にわずかでも交差する画素を塗りつぶすルールでない場合に、前記検出手段によって検出された互いに隣接する前景画像の共通輪郭の画素において前記不正描画が行われる可能性があると判定することを特徴とする。
本発明によれば、描画命令の描画ルールを考慮した上で、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、画像不正の発生を防止し、ユーザが所望する画像を生成することができる。
本発明の実施形態における、画像形成システムの構成を示すブロック図。 本発明の実施形態における、制御装置110において動作するソフトウェアモジュール図。 実施形態における、制御装置110において動作する描画補正処理ソフトウェアモジュール図。 アプリケーションにおけるオブジェクト画像の例。 アプリケーションが生成する描画命令の例。 描画命令によって描画されるオブジェクトの位置関係を模式的に表した図。 描画命令の描画結果を模式的に表した図。 本発明の実施形態における画像形成装置100の描画ルールを説明するための図。 本発明の実施例1における画像形成装置100の描画処理を示すフローチャート。 本発明の実施例2における画像形成装置100の描画処理を示すフローチャート。 本発明の実施例3における画像形成装置100の描画処理を示すフローチャート。
以下、本発明を実施するための形態について図面を用いて説明する。
<画像形成システムの構成>
図1は、本実施形態における画像形成システムの構成を示す図である。図1に示すように、本実施形態における画像形成システムは、画像形成装置100と、イーサネット(登録商標)等のLAN(Local Area Network)160を介して画像形成装置100と接続されているホストコンピュータ(PC)170および175を備える。
画像形成装置100は、リーダー装置120、プリンタ装置130、操作表示部140および画像記憶部150、ならびにこれら各構成要素を制御する制御装置(コントローラ部)110を含む。
制御装置110は、CPU112、ROM114、RAM116等を有し、CPU112がROM114、RAM116、または他の記憶媒体に格納されたプログラムに基づいて、画像形成装置100全体を統括制御する。例えば、制御装置110は、CPU112に、それぞれPDL解釈処理、ディスプレイリスト生成処理、及びレンダリング処理等を行うためのあらかじめ決められたプログラムをロードする構成をとる。またレンダリング処理に関しては、ここでは記述しないが専用のハードウェアを利用しても構わない。
プリンタ装置130は、画像データの出力を行う。操作表示部140は、画像出力処理を行うための各種印刷設定の操作を行うキーボード、及び画像出力設定を行う操作ボタン等の表示を行う液晶パネルを備える。画像記憶部150は、画像データやドキュメントデータ、印刷装置制御言語(例えば、ESCコード、PDL(Page Description Language))などの印刷データを格納することができる。例えば、画像記憶部150は、LAN160を介してホストコンピュータ(PC)170より受信した画像データ、ドキュメントデータおよびPDL、ならびにリーダー装置120を制御して読み込む画像データ等を格納することができる。本実施形態では、画像形成装置100を説明するのにMFP(Multi Function Printer)を例として用いた。もちろん、SFP(Single Function Printer)やLBP(Laser Beam Printer)、その他のプリント方式のプリンタでもよいことは言うまでもない。
<画像形成装置100において動作するソフトウェアモジュールの構成>
図2は、本実施形態における画像形成装置100の制御装置110において動作するソフトウェアモジュールの構成を示す図である。これらソフトウェアは、画像形成装置100におけるROM114にて保存され、起動時に、RAM116へ展開され、CPU112によって実行されることで動作する。
ジョブ制御部200は、印刷ジョブの入力から出力を関数コールやメッセージ通信などの手段によって制御する。
PDL解析部201、202、203は、画像形成装置100に搭載されるPDLの種類(例えば、PostScript、PCL、XPSなど)だけの数が存在する。PDL解析部201、202、203は、ジョブ制御部200からの制御に従い、PDL受信バッファ(図示せず)に格納されたPDLデータを読み込み、解釈処理を実行する。
ディスプレイリスト(Display List)生成部210は、ジョブ制御部200からの制御とPDL解析部201、202、203から渡された描画情報により処理を実行し、生成したディスプレイリストをメモリに格納する。
レンダリング処理部220は、RAM116からディスプレイリストをロードし、レンダリング処理を実行することでディスプレイリストをイメージデータに変換し、画像記憶部150へ出力する処理を行う。
画像処理部230は、画像記憶部150から描画ビットマップイメージおよび属性ビットマップイメージをロードし、属性に応じた最適な画像処理パラメーターで画像処理を実行する。画像処理と合わせてコントーンイメージデータをハーフトーンイメージデータに変換し、画像記憶部150へ出力する処理を行う。
<画像形成装置100において動作する描画補正処理ソフトウェアモジュールの構成>
図3は本実施形態におけるPDL解析部201、202、203に含まれる描画補正処理ソフトウェアモジュールの構成を示す図である。
描画命令受付部310は、PDLに含まれる描画命令を受付ける。
補正対象決定部320は、描画領域特定部321、最前面描画命令特定部322、隣接性判定部323、連続性判定部324、描画ルール判定部325を含み、描画命令受付部310が受付けた描画命令から補正対象となる描画処理を決定する。
描画領域特定部321は、描画命令の領域配置の情報から、描画命令の描画領域を特定する。なお描画命令の描画領域は、描画命令によって描画されるオブジェクトの描画されるべき領域のことである。
最前面描画命令特定部322は、描画命令の描画領域の情報を用いて、最前面の描画命令を特定する。隣接性判定部323は、描画命令の領域的な隣接性を判定する。連続性判定部324は、連続する描画命令から、最前面の描画命令が全て隣接する最大の単位を特定する。描画ルール判定部325は、描画命令の描画ルールを判定する。なお、描画命令の描画ルールは、その描画命令に従って描画される画像の描画ルールであるため、画像の描画ルールと呼ぶこともある。
描画命令補正部330は、描画命令実行順序変更部331、描画命令結合部332、描画命令スキップ部333、描画命令補間部334を含み、補正対象決定部320が補正対象として特定した描画命令に補正処理を行う。描画命令実行順序変更部331は、背面の描画命令を先に実行した後に、最前面の描画命令を実行するように描画命令の実行順序を変更することにより補正する。描画命令結合部332は、最前面の描画命令を結合することにより補正する。描画命令スキップ部333は、背面の描画処理をスキップすることにより補正する。描画命令補間部334は、描画命令の境界部分の画素を最前面の描画命令のいずれかで塗りつぶすことにより補正する。
描画命令実行部340は、描画命令補正部が補正した描画処理を実行する。
なお、これらの描画補正処理ソフトウェアは、PDL解析部201、202、203ではなく、ディスプレイリスト生成部210、レンダリング処理部220、画像処理部230にて実装してもよい。また、複数のモジュールに分散して実装してもよいし、専用のハードウェアを利用しても構わない。これらの描画補正処理ソフトウェアの処理の詳細は、図9から図11を参照して後述する。
<画像形成装置100の描画ルール>
図8は、本実施例における画像形成装置100の描画ルールを説明するための図である。描画ルールの例としては、図8に挙げた交差ルール、中心ルール、左上ルール、左辺ルールなどがあるが、この他のルールでも構わない。図8に示す画素801から812の大きさは画像形成装置100の解像度に依存する。通常は、画像形成装置100の解像度が600dpiであるの場合に、画素の大きさは1/600=0.00167inchとなる。また、画像形成装置100の解像度が1200dpiである場合、画素の大きさは1/1200=0.00083inchとなる。図8に示すオブジェクト820は描画命令によって描画されるオブジェクトを表し、画素801から812に部分的にかかっている。
交差ルールでは、オブジェクト820は、オブジェクト820の領域にわずかでも交差する画素を塗りつぶす。よって、オブジェクト820は画素801、802、803を塗りつぶす。
中心ルールでは、オブジェクト820は、画素の中心がオブジェクト820の領域内にある画素のみを塗りつぶす。よって、オブジェクト820は画素805、806を塗りつぶすが、画素804は塗りつぶさない。
左上ルールでは、オブジェクト820は、画素の左上の頂点がオブジェクト820の領域内にある画素のみを塗りつぶす。よって、オブジェクト820は画素807を塗りつぶすが、画素808、809は塗りつぶさない。
左辺ルールでは、オブジェクト820は、画素の左辺がオブジェクト820の領域に包含される画素、および画素の左辺がオブジェクト820の領域とわずかでも交差する画素を塗りつぶす。よって、オブジェクト820は画素810、811を塗りつぶすが、画素812は塗りつぶさない。
本実施例では、ラインやテキスト、グラフィックのオブジェクトは交差ルールで描画し、イメージのオブジェクトは中心ルールで描画する。これにより、描画命令の属性情報によって描画ルールを判定することができる。しかし、本発明の対象は、ページ内に複数の描画ルールが混在するものであればこれに限定されるものではなく、例えば描画命令ごとに描画ルールを指定してもよいし、その他の条件で描画ルールを切り替えるようにしてもよい。また、上記で説明した描画ルールに限定されるものでもない。
(実施例1)
以下、発明を実施するための形態のうち、実施例1に特有の処理について説明する。なお、実施例1は、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、描画命令の実行順序を変更するか、もしくは最前面の描画命令を結合することにより、画像不正のないオブジェクト画像を生成する。
<画像形成装置100の描画処理>
図9は、本実施例における画像形成装置100の描画処理を示すフローチャートである。
図9の描画処理では、変数として、現在処理対象としている最新の描画命令を格納する処理対象描画命令cur_inst、および直前に処理した描画命令を格納する直前描画命令prev_instを使用する。また、キューとして、一時キューtmp_que、前景キューfg_que、背景キューbg_queを使用する。一時キューtmp_queは描画命令を一時的にスプールするキューであり、最前面の描画命令が見つかるまでの間、描画命令の実行を保留するために使用される。最前面の描画命令が見つかると、一時キューtmp_queの描画命令は背面の描画命令として背景キューbg_queに移動され、最前面の描画命令は前景キューfg_queに追加される。前景キューfg_queは、最前面の描画命令をスプールするキューであり、最前面の描画命令が継続して隣接している間に限り、最前面の描画命令の実行を保留するために使用される。背景キューbg_queは、背面の描画命令をスプールするキューであり、前景キューfg_queと同じ期間だけ背面の描画命令の実行を保留するために使用される。このように背面の描画命令と最前面の描画命令の実行を保留し、分離してスプールすることにより、描画命令の実行順序を変更したり、最前面の描画命令のみを選択的に結合したりすることが可能となる。
図9のフローチャートに示す描画処理は、RAM116に格納されたプログラムを実行したCPU112によって実行される。なお、描画処理はページごとに実行される。以下、描画処理の各ステップの処理について説明する。
ステップS901では、CPU112が、以降の処理で使用する変数およびキュー等を初期化する。すなわち、直前描画命令prev_instをNULLで初期化し、一時キューtmp_que、背景キューbg_que、前景キューfg_queをクリアして空にする。
ステップS902では、CPU112が、次の描画命令があるか否か判定する。次の描画命令がある(YES)と判定した場合は、次の描画命令を読み込んで、ステップS903に進む。次の描画命令がない(NO)と判定した場合はステップS916に進む。
ステップS903では、CPU112が、処理対象描画命令cur_instの値を、ステップS902で読み込んだ描画命令に設定する。
ステップS904では、CPU112が、直前描画命令prev_instがNULLであるか否かを判定する。NULLである(YES)と判定した場合は、ステップS907に進む。NULLでない(NO)と判定した場合はステップS905に進む。
ステップS905では、CPU112が、直前描画命令prev_instの描画領域が、処理対象描画命令cur_instの描画領域に含まれるか否かを判定する。描画領域が同一である場合も、含まれるものとして判定する。含まれる(YES)と判定した場合はステップS906に進む。含まれない(NO)と判定した場合はステップS908に進む。本ステップの処理により、描画命令の描画領域が直後の描画命令の描画領域に含まれるか否かを判定することができ、含まれる場合は背面の描画命令として、含まれない場合は最前面の描画命令として、判定することができる。
ステップS906では、CPU112が、直前描画命令prev_instに格納した描画命令(ステップS905で特定した背面の描画命令)を一時キューtmp_queに追加する。
ステップS907では、CPU112が、直前描画命令prev_instの値を、処理対象描画命令cur_instに格納した描画命令に設定する。
ステップS902からステップS907までの処理により、背面の描画命令がtmp_queに格納される。一方、ステップS905でNOとなった時点で、直前描画命令prev_instの値は、最前面の描画命令と判定され、処理はステップS908に進む。
ステップS908では、直前描画命令prev_instの描画ルール(ステップS905で特定した最前面の描画命令の描画ルール)が交差ルールであるか否かを判定する。本実施例では、描画ルールは描画命令の属性情報と対応するため、本ステップの判定は、直前描画命令prev_instの属性情報が、ライン、テキスト、グラフィックのいずれかである場合は交差ルールであると判定することにより行われる。最前面の描画命令の描画ルールが交差ルールである場合に、当該最前面の描画命令と直前の最前面の描画命令との境界部分(共通輪郭)における画素は、必ず当該最前面の描画命令で塗りつぶされることになるため、画像不正は生じない。そのため、当該最前面の描画命令およびその描画領域に含まれる背面の描画命令と、その前の描画命令との間の実行順序の変更は行わなくてもよい。一方、最前面の描画命令の描画ルールが交差ルールでない場合に、オブジェクト画像の分割処理に起因する画像不正が発生しうる(前景画像の輪郭の画素において前景画像を用いず背景画像を用いた不正描画が行われる可能性がある)と判定する。本ステップでは、交差ルールである(YES)と判定した場合にステップS911に進み、交差ルールでない(NO)と判定した場合にステップS909に進む。
なお、本ステップの判定処理をスキップしてステップS909に進んでもよい。また、ここで、交差ルールと中心ルールが混在する場合に最前面の描画命令の描画ルールが交差ルールであれば画像不正を生じないと判定することを説明したが、本ステップで、画像不正を生じない他の判定方法を用いてもよい。例えば、左上ルールと中心ルールが混在し、かつ、描画命令がページの下から上に向かって描画された場合は、最前面の描画命令の描画ルールが左上ルールであれば画像不正は生じないため、そのような場合にはステップS911に進むように制御してもよい。
ステップS909では、CPU112が、前景キューfg_queが空であるか否かを判定する。空である(YES)と判定した場合、ステップS913に進む。空でない(NO)と判定した場合、ステップS910に進む。
ステップS910では、CPU112が、直前描画命令prev_instの描画領域(ステップS905で特定した最前面の描画命令の描画領域)が、前景キューfg_queに格納された描画命令の描画領域に隣接するか否かを判定する。ここで、描画領域が隣接するとは、空間的に隣り合う描画命令で描画されるオブジェクトの輪郭の一部の区間が完全に同じ座標である状態を意味し、例えば、隣り合う2つの矩形(バンド単位の画像)の一辺の座標が一致している場合などが該当する。例えば、イメージ描画命令502、504は、その描画命令で描画されるイメージ602、604の輪郭の一部の区間が(X=100.9,Y=200.6)と(X=300.6,Y=200.6)とを結ぶ線分で一致しているため、隣接している。一方、グラフィック描画命令501、503は、その描画命令で描画されるグラフィック601、603の輪郭に同じ座標である区間を持たないため、隣接していない。輪郭の一部の区間が同じ座標であればよく、それ以外の領域が重なっていたりしてもよい。
ステップS910の処理により、ステップS905で特定した最前面の描画命令が互いに隣接するか否かを判定すること(隣接する前景画像を検出すること)ができる。最前面の描画命令が隣接していない場合に、オブジェクト画像の分割処理に起因する画像不正が発生することはないため、当該最前面の描画命令およびその描画領域に含まれる背面の描画命令と、その前の描画命令との間の実行順序の変更は行わなくてもよい。ステップS910では、隣接する(YES)と判定した場合に、ステップS913に進み、隣接していない(NO)と判定した場合に、ステップS911に進む。具体的には、最前面の描画命令が互いに隣接していないと判定した場合に、ステップS911以降の処理で、スプールした描画命令を実行およびクリアする処理を行い、その後で、描画命令のスプールを新たに開始する。最前面の描画命令が互いに隣接すると判定した場合に、ステップS913以降の処理で、描画命令のスプールを継続する。このような構成により、最前面の描画命令が全て隣接する一連の描画命令の最大の単位に処理を適用することができ、描画命令の一体性の判定の精度を向上することができる。また、最前面の描画命令が隣接していない場合に、描画命令のスプールを新たに開始するため、描画命令をページ全体にわたってスプールする手法に比べて、高速かつ省メモリで処理することができる。
ステップS911では、CPU112が、背景キューbg_queの描画命令を実行してクリアする。ここで、CPU112は、背景キューbg_queに格納した順に描画命令を実行する。
ステップS912では、CPU112が、前景キューfg_queの描画命令を実行してクリアする。ここで、CPU112は、前景キューfg_queに格納した順に描画命令を実行する。他の実施例としては、CPU112が、前景キューfg_queの描画命令を結合し、新たな描画命令を生成して実行するようにしてもよい。
ステップS911、ステップS912の処理により、スプールした描画命令について、背面の描画命令をまとめて実行し、その後で、最前面の描画命令をまとめて実行することができる。本ステップの処理により、最前面の描画命令が背面の描画命令より後に実行されるようになり、画像不正のないオブジェクト画像を生成することができる。
ステップS913では、CPU112が、背景キューbg_queに一時キューtmp_queを結合する。この処理は、背景キューbg_queの最後に一時キューtmp_queに格納された描画命令を追加することによって行われる。
ステップS914では、CPU112が、一時キューtmp_queをクリアして空にする。
ステップS915では、CPU112が、直前描画命令prev_instに格納した描画命令を前景キューfg_queに追加する。
ステップS908からステップS915までの処理により、背面の描画命令を背景キューbg_queに、最前面の描画命令を前景キューに格納することができる。そして、最前面の描画命令の隣接性を判定し、最前面の描画命令が隣接していないと判定した時点で、背面の描画命令をまとめて実行した後に、最前面の描画命令をまとめて実行するよう、描画命令の実行順序を変更して実行することができる。
ステップS916では、CPU112が、背景キューbg_queの描画命令を実行してクリアする。ここで、CPU112は、背景キューbg_queに格納した順に描画命令を実行する。
ステップS917では、CPU112が、一時キューtmp_queの描画命令を実行してクリアする。ここで、CPU112は、一時キューtmp_queに格納した順に描画命令を実行する。
ステップS918では、CPU112が、前景キューfg_queの描画命令を実行してクリアする。ここで、CPU112は、前景キューfg_queに格納した順に描画命令を実行する。他の実施例としては、CPU112が、前景キューfg_queの描画命令を結合し、新たな描画命令を生成して実行するようにしてもよい。
ステップS919では、CPU112が、直前描画命令prev_instに格納した描画命令を実行する。本ステップが終了すると、CPU112は、描画処理を終了する。
本実施例の描画処理フローで図5のグラフィック描画命令を処理することにより、画像不正のないオブジェクト画像を生成することができる。
グラフィック描画命令501についての処理においては、ステップS902でグラフィック描画命令501が次の描画命令であると判定し、ステップS903で処理対象描画命令cur_instの値をグラフィック描画命令501に設定する。そして、ステップS904で直前描画命令prev_instがNULLであると判定し、ステップS907に進む。ステップS907で直前描画命令prev_instの値を、処理対象描画命令cur_instに格納したグラフィック描画命令501に設定する。グラフィック描画命令501についての処理が終了すると、フローはステップS902に戻る。
イメージ描画命令502についての処理においては、ステップS902でイメージ描画命令502が次の描画命令であると判定し、ステップS903で処理対象命令cur_instの値をイメージ描画命令502に設定する。この時点で、処理対象命令cur_instの値がイメージ描画命令502となり、直前描画命令prev_instの値がグラフィック描画命令501となる。そして、ステップS904で直前描画命令prev_instがNULLではないと判定し、ステップS905に進む。ステップS905で直前描画命令prev_instの描画領域が処理対象命令cur_instの描画領域に含まれることから、直前描画命令prev_instに格納したグラフィック描画命令501を背面の描画命令と特定し、ステップS906に進む。ステップS906では、直前描画命令prev_instに格納したグラフィック描画命令501を一時キューtmp_queに追加する。そして、ステップS907では、直前描画命令prev_instの値を、処理対象描画命令cur_instに格納したイメージ描画命令502に設定する。イメージ描画命令502についての処理が終了すると、フローはステップS902に戻る。
グラフィック描画命令503についての処理においては、ステップS902でグラフィック描画命令503が次の描画命令であると判定し、ステップS903で処理対象命令cur_instの値をグラフィック描画命令503に設定する。この時点で、処理対象命令cur_instの値がグラフィック描画命令503となり、直前描画命令prev_instの値がイメージ描画命令502となる。そして、ステップS904で直前描画命令prev_instがNULLではないと判定し、ステップS905に進む。ステップS905で直前描画命令prev_instの描画領域が処理対象命令cur_instの描画領域に含まれないことから、直前描画命令prev_instに格納したイメージ描画命令502を最前面の描画命令と特定し、ステップS908に進む。ステップS908で直前描画命令prev_inst(イメージ描画命令502)の描画ルールが交差ルールではなく中心ルールであると判定する。そして、ステップS909で前景キューfg_queが空であると判定し、ステップS913に進む。ステップS913では、イメージ描画命令502についての処理において一時キューtmp_queに追加されたグラフィック描画命令501を背景キューbg_queの最後に追加する。ステップS914で一時キューtmp_queをクリアし、ステップS915で直前描画命令prev_instに格納したイメージ描画命令502を前景キューfg_queに追加する。さらに、ステップS907では、直前描画命令prev_instの値を、処理対象命令cur_instに格納したグラフィック描画命令503に設定する。グラフィック描画命令503についての処理が終了すると、フローはステップS902に戻る。
次に、イメージ描画命令504についての処理により、グラフィック描画命令503が一時キューtmp_queに追加され、直前描画命令prev_instの値がイメージ描画命令504となる。
グラフィック描画命令505についての処理により、グラフィック描画命令503が背景キューbg_queに追加され、グラフィック描画命令505が前景キューfg_queに追加され、直前描画命令prev_instの値がイメージ描画命令504となる。
イメージ描画命令506についての処理により、グラフィック描画命令505が一時キューtmp_queに追加され、直前描画命令prev_instの値がイメージ描画命令506となる。
グラフィック描画命令507についての処理により、グラフィック描画命令505が背景キューbg_que追加され、イメージ描画命令506が前景キューfg_queに追加され、直前描画命令prev_instの値がグラフィック描画命令507となる。
イメージ描画命令508についての処理により、グラフィック描画命令507が一時キューtmp_queに追加され、直前描画命令prev_instの値がイメージ描画命令508となる。なお、この時点で、背景キューbg_queにはグラフィック描画命令501、503、505が格納されており、前景キューfg_queにはイメージ描画命令502、504、506が格納されている。
イメージ描画命令508についての処理が終了すると、フローはステップS902に戻る。ステップS902では、次の描画命令がないと判定し、ステップS916からステップS919までの処理に進む。ステップS916では、背景キューbg_queに格納したグラフィック描画命令501、503、505が順に実行され、ステップS917では、tmp_queに格納したグラフィック描画命令507が実行される。そして、ステップS918では、前景キューfg_queに格納したイメージ描画命令502、504、506が順に実行され、ステップS919では、直前描画命令prev_instに格納したイメージ描画命令508が実行される。
以上の処理により、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定する。境界部分に画像不正が発生しうる描画領域について、描画命令の実行順序を、背面の描画命令をまとめて実行した後に、最前面の描画命令をまとめて実行するように変更する。それによって、描画領域の境界部分の画素において最前面の描画命令を用いて描画を行うことを確保することができ、ユーザが所望する画像を生成することができる。また、一連の連続する描画命令の中で、隣接する最前面の描画命令をまとめて実行することにより、最前面の描画命令が全て隣接する一連の描画命令の最大の単位に処理を適用することができ、描画命令の一体性の判定の精度を向上することができる。
(実施例2)
以下、発明を実施するための形態のうち、実施例2に特有の処理について説明する。なお、実施例2は、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、背景の描画命令の実行をスキップすることにより、ユーザが所望する画像を生成する。特に言及しない限り、実施例1と同様の処理については説明を省略する。
<画像形成装置100の描画処理>
図10は、本実施例における画像形成装置100の描画処理を示すフローチャートである。
図10の描画処理では、変数として、処理対象描画命令cur_inst、直前描画命令prev_inst、および終了フラグdoTerminateProcessを使用する。また、キューとして、一時キューtmp_que、前景キューfg_queを使用する。フラグとして、終了フラグdoTerminateProcessを使用する。処理対象描画命令cur_instは現在処理対象としている最新の描画命令を格納し、直前描画命令prev_instは直前に処理した描画命令を格納する。終了フラグdoTerminateProcessは、描画処理を終了するか否かの状態を管理するためのフラグであり、ページ内に次の描画命令がない場合にTRUEに設定される。一時キューtmp_queは描画命令を一時的にスプールするキューであり、最前面の描画命令が見つかるまでの間、描画命令をスプールするように使用される。前景キューfg_queは、最前面の描画命令をスプールするキューであり、最前面の描画命令が継続して隣接している間に限り、最前面の描画命令をスプールするように使用される。
図10のフローチャートの処理は、RAM116に格納されたプログラムを実行したCPU112によって実行される。描画処理はページごとに実行される。
以下、描画処理の各ステップの処理について説明する。
ステップS1001では、CPU112が、以降の処理で使用する変数およびキュー等を初期化する。すなわち、直前描画命令prev_instをNULLで初期化し、一時キューtmp_que、前景キューfg_queをクリアして空にし、終了フラグdoTerminateProcessをFALSEに設定する。
ステップS1002では、CPU112が、次の描画命令があるか否か判定する。次の描画命令がある(YES)と判定した場合は、次の描画命令を読み込んで、ステップS1003に進む。次の描画命令がない(NO)と判定した場合はステップS1017に進む。
ステップS1003、S1004、S1005、S1006、S1007の処理は、それぞれステップS903、S904、S905、S906、S907の処理と同様であるため説明を省略する。
ステップS1008では、CPU112が、直前描画命令prev_instの描画ルールが交差ルールであるか否かを判定する。本ステップの詳細は、ステップS908と同様であるため省略する。最前面の描画命令の描画ルールが交差ルールである場合には、当該最前面の描画命令と直前の最前面の描画命令との境界部分における画素は、必ず当該最前面の描画命令で塗りつぶされることになるため、画像不正は生じない。そのため、当該最前面の描画領域に含まれる背面の描画命令の実行をスキップしなくてもよい。本ステップでは、交差ルールである(YES)と判定した場合にステップS1011に進み、交差ルールでない(NO)と判定した場合にステップS1009に進む。
ステップS1009では、CPU112が、前景キューfg_queが空であるか否かを判定する。空である(YES)と判定した場合、ステップS1011に進む。空でない(NO)と判定した場合、ステップS1010に進む。
ステップS1010では、CPU112が、直前描画命令prev_instの描画領域が、前景キューfg_queに格納された描画命令の描画領域に隣接するか否かを判定する。本ステップの詳細は、ステップS910と同様であるため省略する。本ステップの処理により、ステップS1005で特定した最前面の描画命令が互いに隣接するか否かを判定することができる。最前面の描画命令が隣接していない場合に、オブジェクト画像の分割処理に起因する画像不正が発生することはないため、当該最前面の描画領域に含まれる背面の描画命令の実行をスキップしなくてもよい。本ステップでは、隣接する(YES)と判定した場合にステップS1013に進み、隣接していない(NO)と判定した場合にステップS1011に進む。具体的には、最前面の描画命令が互いに隣接していないと判定した場合に、ステップS1011の処理で、スプールした背面の描画命令(当該最前面の描画命令の描画領域に含まれる背面の描画命令)を実行する。また、ステップS1012の処理で、スプールした隣接する最前面の描画命令をクリアする。最前面の描画命令が互いに隣接すると判定した場合に、ステップS1013以降の処理で、スプールした背面の描画命令を実行せずにクリアする。
ステップS1011では、CPU112が、一時キューtmp_queの描画命令を実行する。ここで、CPU112は、一時キューtmp_queに格納した順に描画命令を実行する。
ステップS1012では、CPU112が、前景キューfg_queの描画命令をクリアして空にする。
ステップS1013では、CPU112が、直前描画命令prev_instに格納した描画命令を実行する。
ステップS1014では、CPU112が、終了フラグdoTerminateProcessがTRUEであるか否かを判定する。TRUEである(YES)と判定した場合、描画処理を終了する。FALSEである(NO)と判定した場合、ステップS1015に進む。
ステップS1015では、CPU112が、一時キューtmp_queの描画命令をクリアして空にする。
ステップS1016では、CPU112が、直前描画命令prev_instに格納した描画命令を前景キューfg_queに追加する。
ステップS1008からステップS1016までの処理により、背面の描画命令を即座に実行せず、一時キューtmp_queに格納することができる。そして、最前面の描画命令の隣接性を判定し、最前面の描画命令が隣接している場合には、オブジェクト画像の分割処理に起因する画像不正が発生しうると判定し、一時キューtmp_queに格納された背面の描画命令を実行することなくクリアすることができる。最前面の描画命令が隣接していない場合には、オブジェクト画像の分割処理に起因する画像不正が発生することはないため、通常通り一時キューtmp_queに格納された背面の描画命令を実行することができる。
ステップS1002で次の描画命令がないと判定した場合に、処理はステップS1017に進む。ステップS1017では、CPU112が、終了フラグdoTerminateProcessをTRUEに設定する。本ステップの処理が終了するとステップS1008に進む。そして、ステップS1008からステップS1013の処理を実行してから、ステップS1014で終了フラグdoTerminateProcessがTRUEと判定し、描画処理を終了する。
本実施例の描画処理フローで図5のグラフィック描画命令を処理することにより、画像不正のないオブジェクト画像を生成することができる。
グラフィック描画命令501についての処理において、ステップS1007で直前描画命令prev_instの値をグラフィック描画命令501に設定する。
イメージ描画命令502についての処理において、ステップS1005で特定した背面の描画命令(グラフィック描画命令501)を一時キューtmp_queに格納する。また、ステップS1007で直前描画命令prev_instの値をイメージ描画命令502に設定する。
グラフィック描画命令503についての処理において、ステップS1005でイメージ描画命令502を最前面の描画命令と特定し、ステップS1008からステップS1010の判定処理に進む。前景キューfg_queが空であるため、処理はステップS1011に進む。ステップS1010で、通常通り一時キューtmp_queに格納された背面の描画命令(グラフィック描画命令501)を実行する。そして、ステップS1013では、直前描画命令prev_instに格納した最前面の描画命令(イメージ描画命令502)を実行する。さらに、ステップS1015では、実行された背面の描画命令(グラフィック描画命令501)を格納した一時キューtmp_queをクリアする。ステップS1016では、イメージ描画命令502を前景キューfg_queに追加し、当該前景キューfg_queは最前面の描画命令の隣接性を判定するために用いられる。
イメージ描画命令504についての処理は、イメージ描画命令502についての処理と類似である。イメージ描画命令504についての処理において、ステップS1005で特定した背面の描画命令(グラフィック描画命令503)を一時キューtmp_queに格納する。また、ステップS1007で直前描画命令prev_instの値をイメージ描画命令504に設定する。
グラフィック描画命令505についての処理において、ステップS1005でイメージ描画命令504を最前面の描画命令と特定し、ステップS1008からステップS1010の判定処理に進む。最前面の描画命令が隣接していると判定され、一時キューtmp_queに格納された背面の描画命令(グラフィック描画命令505)の実行をスキップし、ステップS1013以降の処理に進む。ステップS1013では、直前描画命令prev_instに格納した最前面の描画命令(イメージ描画命令504)を実行する。ステップS1015では、背面の描画命令を格納した一時キューtmp_queをクリアする。ステップS1016では、イメージ描画命令504を前景キューfg_queに追加する。
イメージ描画命令506についての処理は、イメージ描画命令502、504についての処理と類似である。イメージ描画命令506についての処理において、ステップS1005で特定した背面の描画命令(グラフィック描画命令505)を一時キューtmp_queに格納する。また、ステップS1007で直前描画命令prev_instの値をイメージ描画命令506に設定する。
グラフィック描画命令507についての処理は、グラフィック描画命令505についての処理と類似である。グラフィック描画命令507についての処理では、一時キューtmp_queに格納された背面の描画命令(グラフィック描画命令505)の実行をスキップする。また、直前描画命令prev_instに格納した最前面の描画命令(イメージ描画命令506)を実行し、背面の描画命令を格納した一時キューtmp_queをクリアし、イメージ描画命令506を前景キューfg_queに追加する。
イメージ描画命令508についての処理は、イメージ描画命令502、504、506についての処理と類似である。イメージ描画命令508についての処理において、ステップS1005で特定した背面の描画命令(グラフィック描画命令507)を一時キューtmp_queに格納する。また、ステップS1007で直前描画命令prev_instの値をイメージ描画命令508に設定する。
イメージ描画命令508についての処理が終了すると、フローはステップS1002に戻る。そして、ステップS1002で次の描画命令がないと判定し、ステップS1017に進む。ステップS1017で終了フラグdoTerminateProcessをTRUEに設定し、ステップS1008以降の処理に進む。ステップS1013では、直前描画命令prev_instに格納した最前面の描画命令(イメージ描画命令508)を実行する。そして、ステップS1014で終了フラグdoTerminateProcessがTRUEであると判定し、描画処理を終了する。
以上の処理により、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、境界部分に画像不正が発生しうる描画領域について、背景の描画命令の実行をスキップする。それによって、描画領域の境界部分の画素において最前面の描画命令を用いて描画を行うことを確保することができ、ユーザが所望する画像を生成することができる。
(実施例3)
以下、発明を実施するための形態のうち、実施例3に特有の処理について説明する。なお、実施例3は、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、画像不正が発生した可能性のある画素を最前面の描画命令の色で補間することにより、ユーザが所望する画像を生成する。特に言及しない限り、実施例1、2と同様の処理については説明を省略する。
<画像形成装置100の描画処理>
図11は、本実施例における画像形成装置100の描画処理を示すフローチャートである。
図11の描画処理では、変数として、処理対象描画命令cur_inst、直前描画命令prev_inst、描画済前景輪郭fg_borders、および終了フラグdoTerminateProcessを使用する。処理対象描画命令cur_inst、直前描画命令prev_inst、終了フラグdoTerminateProcessについては、実施例2と同様であるため説明を省略する。描画済前景輪郭fg_bordersは、最前面の描画命令の輪郭の座標を記憶するためのバッファであり、最前面の描画命令が継続して隣接している間、最前面の描画命令の描画領域を記憶するために使用される。
図10のフローチャートの処理は、RAM116に格納されたプログラムを実行したCPU112によって実行される。描画処理はページごとに実行される。
以下、描画処理の各ステップの処理について説明する。
ステップS1101では、CPU112が、以降の処理で使用する変数等を初期化する。すなわち、直前描画命令prev_instをNULLで初期化し、描画済前景輪郭fg_bordersをクリアして空にし、終了フラグdoTerminateProcessをFALSEに設定する。
ステップS1102では、CPU112が、次の描画命令があるか否か判定する。次の描画命令がある(YES)と判定した場合は、次の描画命令を読み込んで、ステップS1103に進む。次の描画命令がない(NO)と判定した場合はステップS1115に進む。
ステップS1103、S1104の処理は、ステップS903、S904の処理と同様であるため説明を省略する。
ステップS1105では、CPU112が、直前描画命令prev_instに格納した描画命令を実行する。
ステップS1106では、CPU112が、直前描画命令prev_instの描画領域が、処理対象描画命令cur_instの描画領域に含まれるか否かを判定する。本ステップの処理の詳細はステップS905、S1005と同様であるため省略する。含まれる(YES)と判定した場合は、直前描画命令prev_instに格納した描画命令が最前面の描画命令と特定することができ、ステップS1107に進む。含まれない(NO)と判定した場合は、直前描画命令prev_instに格納した描画命令が背面の描画命令と特定することができ、ステップS1108に進む。
ステップS1107の処理は、ステップS907の処理と同様であるため説明を省略する。
ステップS1108では、直前描画命令prev_instの描画ルールが交差ルールであるか否かを判定する。本ステップの詳細は、ステップS908と同様であるため省略する。最前面の描画命令の描画ルールが交差ルールである場合には、当該最前面の描画命令と直前の最前面の描画命令との境界部分における画素は、必ず当該最前面の描画命令で塗りつぶされることになるため、画像不正は生じない。そのため、後述のステップS1111における補間処理は行わなくてもよい。本ステップでは、交差ルールである(YES)と判定した場合にステップS1112に進み、交差ルールでない(NO)と判定した場合にステップS1109に進む。
ステップS1109では、CPU112が、描画済前景輪郭fg_bordersが空であるか否かを判定する。空である(YES)と判定した場合、ステップS1113に進む。空でない(NO)と判定した場合、ステップS1110に進む。
ステップS1110では、CPU112が、直前描画命令prev_instの描画領域の輪郭の一部が、描画済前景輪郭fg_bordersの一部と一致するか否かを判定する。本ステップの処理で一致すると判定された場合、直前描画命令prev_instの描画領域は、過去に描画された最前面の描画命令と隣接しているとみなすことができる。本ステップの処理により、ステップS1106で特定した最前面の描画命令が互いに隣接するか否かを判定することができる。最前面の描画命令が隣接していない場合に、オブジェクト画像の分割処理に起因する画像不正が発生することはないため、後述のステップS1111における補間処理は行わなくてもよい。本ステップでは、一致する(YES)と判定した場合に、ステップS1111に進み、一致しない(NO)と判定した場合に、ステップS1112に進む。具体的には、最前面の描画命令が互いに隣接すると判定した場合に、ステップS1111で、隣接する境界線上の画素について、直前描画命令prev_instの該当する座標の輪郭色で塗りつぶす処理(補間処理)を行う。最前面の描画命令が互いに隣接しないと判定した場合に、補間処理を行わず、ステップS1112で、最前面の描画命令の輪郭の座標を記憶するバッファである描画済前景輪郭fg_bordersをクリアする処理を行う。
ステップS1111では、CPU112が、一致した描画済前景輪郭fg_borders上の画素を、直前描画命令prev_instの該当する座標の輪郭色で塗りつぶす。この処理は、隣接する境界線上の画素について、直前描画命令prev_instの描画ルールを変更して塗りつぶす処理とみなすことができる。本ステップの処理により、画像不正が発生した可能性のある画素を最前面の描画命令の色で補間し、画像不正のないオブジェクト画像を生成することができる。本ステップの処理が終了するとステップS1113に進む。
ステップS1112では、CPU112が、描画済前景輪郭fg_bordersをクリアして空にする。本ステップの処理が終了するとステップS1113に進む。
ステップS1113では、CPU112が、終了フラグdoTerminateProcessがTRUEであるか否かを判定する。TRUEである(YES)と判定した場合、描画処理を終了する。FALSEである(NO)と判定した場合、ステップS1114に進む。
ステップS1114では、CPU112が、直前描画命令prev_instの輪郭の座標を描画済前景輪郭fg_bordersに追加する。ここで、描画済前景輪郭fg_bordersに追加される情報は、輪郭の画素の座標でもよいし、輪郭の端点の座標でもよい。また、実施例1、2と同様に、前景の描画命令を格納するようにして、ステップS1110の処理では描画領域の輪郭から隣接性を判定するようにしてもよい。
ステップS1108からステップS1114までの処理により、最前面の描画命令の隣接性を判定し、最前面の描画命令が隣接している場合には、画像不正が発生した可能性のある画素を最前面の描画命令で塗りつぶすことができる。
ステップS1002で次の描画命令がないと判定した場合に、処理はステップS1115に進む。ステップS1115では、CPU112が、終了フラグdoTerminateProcessをTRUEに設定し、ステップS1116に進む。
ステップS1116では、CPU112が、直前描画命令prev_instに格納した描画命令を実行する。本ステップの処理が終了するとステップS1108以降の処理に進む。ステップS1113で終了フラグdoTerminateProcessがTRUEと判定し、描画処理を終了する。
本実施例の描画処理フローで図5のグラフィック描画命令を処理することにより、画像不正のないオブジェクト画像を生成することができる。
グラフィック描画命令501についての処理において、ステップS1107で直前描画命令prev_instの値をグラフィック描画命令501に設定する。
イメージ描画命令502についての処理において、まず、直前描画命令prev_instに格納した描画命令(グラフィック描画命令501)を実行する。そして、ステップS1106で当該描画命令(グラフィック描画命令501)を背面の描画命令と特定し、ステップS1107に進む。ステップS1107で直前描画命令prev_instの値をイメージ描画命令502に設定する。
グラフィック描画命令503についての処理において、まず、直前描画命令prev_instに格納した描画命令(イメージ描画命令502)を実行する。そして、ステップS1106で当該描画命令(イメージ描画命令502)が最前面の描画命令と特定し、ステップS1108、S1109、S1110の判定処理に進む。描画済前景輪郭fg_bordersが空であるため、補間処理を行わず、ステップS1113以降の処理に進む。ステップS1114で最前面の描画命令(イメージ描画命令502)の輪郭の座標を描画済前景輪郭fg_bordersに追加する。ステップS1107で直前描画命令prev_instの値をグラフィック描画命令503に設定する。
イメージ描画命令504についての処理は、イメージ描画命令502についての処理と類似である。イメージ描画命令504についての処理において、まず、直前描画命令prev_instに格納した描画命令(グラフィック描画命令503)を実行する。そして、ステップS1106で当該描画命令(グラフィック描画命令503)を背面の描画命令と特定し、ステップS1107に進む。ステップS1107で直前描画命令prev_instの値をイメージ描画命令504に設定する。
グラフィック描画命令505についての処理において、まず、直前描画命令prev_instに格納した描画命令(イメージ描画命令504)を実行する。そして、ステップS1106で当該描画命令(イメージ描画命令504)を最前面の描画命令と特定し、ステップS1108、S1109、S1110の判定処理に進む。イメージ描画命令504の輪郭の一部が、描画済前景輪郭fg_bordersに記憶されているイメージ描画命令502)の輪郭の一部と一致するため、最前面の描画命令が隣接していると判定され、ステップS1111に進む。ステップS1111では、隣接する境界線上の画素について、最前面の描画命令(イメージ描画命令504)の該当する座標の輪郭色で塗りつぶす処理(補間処理)を行う。そして、ステップS1114で最前面の描画命令(イメージ描画命令504)の輪郭の座標を描画済前景輪郭fg_bordersに追加する。ステップS1107で直前描画命令prev_instの値をグラフィック描画命令505に設定する。
イメージ描画命令506についての処理は、イメージ描画命令502、504についての処理と類似である。イメージ描画命令506についての処理において、まず、直前描画命令prev_instに格納した描画命令(グラフィック描画命令505)を実行する。そして、ステップS1106で当該描画命令(グラフィック描画命令505)を背面の描画命令と特定し、ステップS1107に進む。ステップS1107で直前描画命令prev_instの値をイメージ描画命令506に設定する。
グラフィック描画命令507についての処理は、グラフィック描画命令505についての処理と類似である。グラフィック描画命令507についての処理において、直前描画命令prev_instに格納した描画命令(イメージ描画命令506)を実行する。ステップS1111では、隣接する境界線上の画素について、最前面の描画命令(イメージ描画命令506)の該当する座標の輪郭色で塗りつぶす処理(補間処理)を行う。ステップS1114で最前面の描画命令(イメージ描画命令506)の輪郭の座標を描画済前景輪郭fg_bordersに追加する。ステップS1107で直前描画命令prev_instの値をグラフィック描画命令507に設定する。
イメージ描画命令508についての処理は、イメージ描画命令502、504、506についての処理と類似である。イメージ描画命令504についての処理において、まず、直前描画命令prev_instに格納した描画命令(グラフィック描画命令507)を実行する。そして、ステップS1106で当該描画命令(グラフィック描画命令507)を背面の描画命令と特定し、ステップS1107に進む。ステップS1107で直前描画命令prev_instの値をイメージ描画命令508に設定する。
イメージ描画命令508についての処理が終了すると、フローはステップS1102に戻る。そして、ステップS1102で次の描画命令がないと判定し、ステップS1115に進む。ステップS1115で終了フラグdoTerminateProcessをTRUEに設定し、ステップS1116に進む。ステップS1116では、直前描画命令prev_instに格納した描画命令(イメージ描画命令508)を実行し、ステップS1108以降の処理に進む。ステップS1111では、隣接する境界線上の画素について、最前面の描画命令(イメージ描画命令508)の該当する座標の輪郭色で塗りつぶす処理(補間処理)を行う。そして、ステップS1113で終了フラグdoTerminateProcessがTRUEであると判定し、描画処理を終了する。
以上の処理により、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、画像不正が発生した可能性のある画素を最前面の描画命令の色で補間する。それによって、描画領域の境界部分の画素において最前面の描画命令を用いて描画を行うことを確保することができ、ユーザが所望する画像を生成することができる。
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。

Claims (16)

  1. 前景画像を背景画像に重ねる処理を行う画像処理装置であって、
    画像の描画ルールに基づいて、前記前景画像の輪郭の画素において前記前景画像を用いずに前記背景画像を用いた不正描画が行われる可能性があるかどうかを判定する判定手段と、
    前記判定手段によって前記前景画像の輪郭の画素において前記不正描画が行われる可能性があると判定された場合、前記輪郭の画素において前記前景画像を用いた描画をするように制御する制御手段と、
    前記前景画像は複数の前景画像を含み、前記複数の前景画像のうち、互いに隣接する前景画像を検出する検出手段と、
    を有し、
    前記判定手段は、前記互いに隣接する前景画像の描画ルールが、描画領域にわずかでも交差する画素を塗りつぶすルールでない場合に、前記検出手段によって検出された互いに隣接する前景画像の共通輪郭の画素において前記不正描画が行われる可能性があると判定することを特徴とする画像処理装置。
  2. 前記前景画像および背景画像は、元の前景画像および背景画像が複数のバンドに分割されたことで得られるバンド単位の画像であることを特徴とする請求項1に記載の画像処理装置。
  3. 前記制御手段は、前記背景画像の描画を先に行った後に、前記前景画像の描画を行うように描画の順序を変更することにより、前記制御を行うことを特徴とする請求項1または2に記載の画像処理装置。
  4. 前記制御手段は、前記前景画像の描画を行う前に前記前景画像を結合することを特徴とする請求項3に記載の画像処理装置。
  5. 前記制御手段は、前記前景画像と前記背景画像を分離してスプールし、スプールした前記背景画像の描画を先に行って、スプールした前記前景画像の描画を行うことにより、描画の順序を変更することを特徴とする請求項3または4に記載の画像処理装置。
  6. 前記制御手段は、前記背景画像の描画をスキップすることにより、前記制御を行うことを特徴とする請求項1または2に記載の画像処理装置。
  7. 前記制御手段は、前記前景画像のみをスプールし、スプールした前記前景画像の描画を行うことにより、前記背景画像の描画をスキップすることを特徴とする請求項6に記載の画像処理装置。
  8. 前記制御手段は、前記前景画像の描画および前記背景画像の描画を行った後に、前記前景画像の前記輪郭の画素において、前記前景画像を用いて塗りつぶす補間処理を行うことにより、前記制御を行うことを特徴とする請求項1または2に記載の画像処理装置。
  9. 描画領域が重なる画像のうち、描画が最後に行われる画像を前記前景画像と特定する特定手段をさらに有することを特徴とする請求項1から6のいずれかに記載の画像処理装置。
  10. 前景画像を背景画像に重ねる処理を行う画像処理方法であって、
    前記前景画像は複数の前景画像を含み、前記複数の前景画像のうち、互いに隣接する前景画像を検出する検出ステップと、
    描画ルールに基づいて、前記前景画像の輪郭の画素において前記前景画像を用いずに前記背景画像を用いた不正描画が行われる可能性があるかどうかを判定する判定ステップと、
    前記判定ステップによって前記前景画像の輪郭の画素において前記不正描画が行われる可能性があると判定された場合、前記輪郭の画素において前記前景画像を用いた描画をするように制御する制御ステップと、
    を含み、
    前記判定ステップは、前記互いに隣接する前景画像の描画ルールが、描画領域にわずかでも交差する画素を塗りつぶすルールでない場合に、前記検出ステップにおいて検出された互いに隣接する前景画像の共通輪郭の画素において前記不正描画が行われる可能性があると判定することを特徴とする画像処理方法。
  11. オブジェクトの描画領域に少なくとも一部は含まれる画素の色を当該オブジェクトの色に基づいて決める描画ルールが適用される種類の第1のオブジェクトと、前記第1のオブジェクトの前面に位置し、前記第1のオブジェクトの描画領域を包含する描画領域を持つ第2のオブジェクトであって、当該包含する描画領域の端が、前記第1のオブジェクトの描画領域の端が交差する画素と、交差するような第2のオブジェクトとを、順に取得する取得手段と、少なくとも当該取得された第1および第2のオブジェクトに基づいて描画を行う描画手段と、を有する画像処理装置において、
    前記第2のオブジェクトが、前記描画ルールが適用される種類のオブジェクトであるかを判定する判定手段を有し、
    前記描画手段は、前記判定に少なくとも基づいて、前記描画ルールが適用されない種類のオブジェクトであると判定された前記第2のオブジェクトの前記描画領域の端が交差する画素の前記描画による最終的な色を、前記第1のオブジェクトの色に基づかない色に決めることを特徴とする画像処理装置。
  12. 前記取得手段は、前記第1のオブジェクトの直前に別のオブジェクトを取得し、
    前記判定手段は、前記判定の他に、前記第2のオブジェクトの描画領域と、前記別のオブジェクトの描画領域とが隣接するか否かを判定し、
    前記描画手段は、前記判定手段による前記2つの判定に少なくとも基づいて、前記描画ルールが適用されない種類のオブジェクトであると判定され、かつ、前記別のオブジェクトと描画領域が隣接すると判定された前記第2のオブジェクトと、前記別のオブジェクトとの描画領域の境界が交差する画素の前記最終的な色を、前記第1のオブジェクトの色に基づかない色に決めることを特徴とする請求項11に記載の画像処理装置。
  13. 前記描画手段は、前記境界が交差する前記画素の前記最終的な色を、前記別のオブジェクトまたは前記第2のオブジェクトに基づく色に決めることを特徴とする請求項12に記載の画像処理装置。
  14. 前記描画ルールが適用される種類のオブジェクトには、グラフィック属性を持つオブジェクトが含まれ、
    前記描画ルールが適用されない種類のオブジェクトには、イメージ属性を持つオブジェクトが含まれることを特徴とする請求項11から13のいずれかに記載の画像処理装置。
  15. オブジェクトの描画領域に少なくとも一部は含まれる画素の色を当該オブジェクトの色に基づいて決める描画ルールが適用される種類の第1のオブジェクトと、前記第1のオブジェクトの前面に位置し、前記第1のオブジェクトの描画領域を包含する描画領域を持つ第2のオブジェクトであって、当該包含する描画領域の端が、前記第1のオブジェクトの描画領域の端が交差する画素と、交差するような第2のオブジェクトとを、順に取得する取得ステップと、
    前記第2のオブジェクトが、前記描画ルールが適用される種類のオブジェクトであるかを判定する判定ステップと、
    前記取得ステップにおいて取得された第1および第2のオブジェクトに基づいて描画を行う描画ステップと、
    を含み
    前記描画ステップにおいて、前記判定に少なくとも基づいて、前記描画ルールが適用されない種類のオブジェクトであると判定された前記第2のオブジェクトの前記描画領域の端が交差する画素の最終的な色を、前記第1のオブジェクトの色に基づかない色に決めることを特徴とする画像処理方法。
  16. コンピュータに請求項1から9または請求項11から14のいずれかに記載の画像処理装置として機能させるためのプログラム。
JP2013108873A 2013-05-23 2013-05-23 画像処理装置、画像処理方法およびプログラム Expired - Fee Related JP6230268B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013108873A JP6230268B2 (ja) 2013-05-23 2013-05-23 画像処理装置、画像処理方法およびプログラム
US14/273,604 US9122977B2 (en) 2013-05-23 2014-05-09 Image processing apparatus and image processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013108873A JP6230268B2 (ja) 2013-05-23 2013-05-23 画像処理装置、画像処理方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2014229111A JP2014229111A (ja) 2014-12-08
JP6230268B2 true JP6230268B2 (ja) 2017-11-15

Family

ID=51935205

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013108873A Expired - Fee Related JP6230268B2 (ja) 2013-05-23 2013-05-23 画像処理装置、画像処理方法およびプログラム

Country Status (2)

Country Link
US (1) US9122977B2 (ja)
JP (1) JP6230268B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6671188B2 (ja) * 2016-02-17 2020-03-25 キヤノン株式会社 画像形成装置、方法およびプログラム
CN110140149B (zh) * 2017-01-18 2022-04-05 华为技术有限公司 颜色填充方法及终端
CN111586348B (zh) * 2020-04-15 2022-04-12 福建星网视易信息系统有限公司 一种视频背景图像获取方法、存储介质、视频抠像方法和存储设备

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2676116B2 (ja) * 1990-09-18 1997-11-12 大日本スクリーン製造株式会社 画像データ処理方法および装置
JPH04192086A (ja) * 1990-11-27 1992-07-10 Ricoh Co Ltd 領域塗りつぶし方法および電子機器
US5742277A (en) * 1995-10-06 1998-04-21 Silicon Graphics, Inc. Antialiasing of silhouette edges
US5694532A (en) * 1996-01-26 1997-12-02 Silicon Graphics, Inc. Method for selecting a three-dimensional object from a graphical user interface
JP3707523B2 (ja) * 1998-08-31 2005-10-19 セイコーエプソン株式会社 オブジェクト判別装置、オブジェクト判別方法およびオブジェクト判別プログラムを記録した媒体
JP2006254313A (ja) * 2005-03-14 2006-09-21 Fuji Xerox Co Ltd 画像処理装置及び画像処理方法
US8228327B2 (en) * 2008-02-29 2012-07-24 Disney Enterprises, Inc. Non-linear depth rendering of stereoscopic animated images
KR101387902B1 (ko) * 2009-06-10 2014-04-22 한국전자통신연구원 다객체 오디오 신호를 부호화하는 방법 및 부호화 장치, 복호화 방법 및 복호화 장치, 그리고 트랜스코딩 방법 및 트랜스코더

Also Published As

Publication number Publication date
JP2014229111A (ja) 2014-12-08
US9122977B2 (en) 2015-09-01
US20140347681A1 (en) 2014-11-27

Similar Documents

Publication Publication Date Title
JP6029344B2 (ja) 画像処理装置、画像処理方法、プログラム
JP6230268B2 (ja) 画像処理装置、画像処理方法およびプログラム
JP3008943B1 (ja) 画像処理装置および画像処理方法
JP5610923B2 (ja) 画像処理装置、画像処理方法、及びプログラム
JP2009245335A (ja) 画像生成装置および印刷装置
JP2014117861A (ja) 画像形成装置および画像形成装置の制御方法
US9767392B2 (en) Method and system for rendering rectangle drawing objects using one-line raster image data
EP3584761A1 (en) Image forming apparatus capable of changing thickness of character, control method therefor, and storage medium storing control program therefor
JP2002063583A (ja) デジタル画像の画素処理装置及び方法
JP2008201058A (ja) 画像形成装置
CN107203354B (zh) 图像处理设备及其控制方法
JP6904717B2 (ja) 画像処理装置、その制御方法、およびプログラム
JP6357907B2 (ja) 画像処理装置及びプログラム
US20170053196A1 (en) Drawing command processing apparatus, drawing command processing method, and storage medium
JP2008107970A (ja) 画像形成装置
JP6218643B2 (ja) 画像処理装置、画像処理方法及びプログラム
JP6755644B2 (ja) 文字処理装置、文字処理方法、文字処理プログラム
JP2004021886A (ja) 画像処理装置及び画像処理方法
US9305249B2 (en) Image forming apparatus, image forming method, and computer-readable medium for rasterizing scan line using intermediate data
JPH11138920A (ja) 画像処理装置および画像処理装置のデータ処理方法およびコンピュータが読み出し可能なプログラムを格納した記憶媒体
JP2009073083A (ja) 画像形成装置、画像形成方法、および画像形成プログラム
JP6614941B2 (ja) 画像処理装置および画像処理方法
JP2017136727A (ja) 印刷時間予測装置、印刷時間予測方法、およびプログラム
US9036203B2 (en) Print controlling apparatus, image forming apparatus, and method for forming image
JP2014035672A (ja) 画像処理装置及び画像処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160523

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170411

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170418

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170619

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170704

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170904

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: 20170919

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171017

R151 Written notification of patent or utility model registration

Ref document number: 6230268

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees