以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図1には、本実施形態に係る印刷システム10が示されている。印刷システム10は、クライアント端末12、中間データ生成・処理装置14、RIP(Raster Image Processor)16及びプリンタ18を含んでいる。クライアント端末12は通信線20を介して中間データ生成・処理装置14に接続され、中間データ生成・処理装置14は通信線22を介してRIP16に接続され、RIP16は通信線24を介してプリンタ18に接続されている。中間データ生成・処理装置14は本発明に係る画像処理装置の一例である。
なお、図1では、中間データ生成・処理装置14及びRIP16を独立した装置として示しているが、中間データ生成・処理装置14及びRIP16は、例えばプリンタコントローラとしてプリンタ18に組み込んでもよい。また、中間データ生成・処理装置14及びRIP16は、クライアント端末12及びプリンタ18と別体のサーバに組み込んでもよい。更に、中間データ生成・処理装置14をクライアント端末12に組み込み、RIP16をプリンタ18に組み込んでもよい。
印刷システム10では、印刷システム10のプリンタ18に対し、利用者がクライアント端末12からオンラインで印刷を指示可能とされている。クライアント端末12はパーソナル・コンピュータ(Personal Computer)、或いは携帯型の電子機器(例えばタブレット端末やスマートフォン等の情報処理機能を備えた電子機器)等を含んでいる。
クライアント端末12には、任意のOS(Operating System)及び原稿作成に利用可能なアプリケーション・プログラムがインストールされている。本実施形態において、利用者はクライアント端末12を操作して所望のアプリケーション・プログラムを起動し、原稿作成のための種々の操作を行うことで印刷対象の原稿を作成する。この原稿は文字原稿であってもよいし、写真や図表等の絵柄を含む原稿であってもよいし、文字と絵柄が混在している原稿であってもよい。
印刷対象の原稿の作成が完了すると、利用者は、作成した印刷対象の原稿の印刷を指示する操作を行う。利用者によってこの操作が行われると、印刷対象の原稿をページ記述言語(PDL:Page Description Language)で記述した予め設定された解像度(一例としては1200dpi)の印刷データ(以下、PDLデータという)が、クライアント端末12から通信線20を介して印刷システム10の中間データ生成・処理装置14へ送信される。
中間データ生成・処理装置14は、中間データ生成部26、前処理部28及び解像度変換部30を含んでいる。中間データ生成部26は、クライアント端末12から受信したPDLデータを解釈し、PDLデータが表す原稿の各頁を、各頁に含まれる画像要素に分解し、分解した個々の画像要素毎に、個々の画像要素の属性に応じたフォーマットの中間データを生成する。なお、中間データの詳細については後述する。
前処理部28は、中間データ生成部26で生成された中間データに対し解像度変換部30によって解像度変換処理が行われる場合に、この解像度変換処理に先立って解像度変換前処理を行う。解像度変換前処理についても後述する。
解像度変換部30は、中間データ生成部26で生成された中間データの解像度(この中間データの解像度はクライアント端末12から受信したPDLデータの解像度に等しい)が、プリンタ18による画像印刷における解像度(一例としては600dpi)と相違している場合に、中間データの解像度がプリンタ18による画像印刷における解像度に一致するように中間データを加工する。中間データ生成・処理装置14で生成され、必要に応じて解像度変換前処理及び解像度変換処理を経た中間データは、通信線22を介してRIP16へ送信される。
RIP16は、記憶部32、RIP処理部34及びハーフトーン処理部36を含んでいる。記憶部32は中間データ生成・処理装置14から受信した中間データを記憶する。RIP処理部34は、中間データを記憶部32から取り出して解釈し、ページ単位で各色成分(例えばC,M,Y,K)毎のラスタイメージデータ(ビットマップ形式の印刷用画像データ)へ展開するRIP処理を行う。ハーフトーン処理部36は、RIP処理部34によるRIP処理によって生成されたビットマップ形式の印刷用画像データに対し、スクリーン処理、多次元ルックアップテーブルを用いた色変換等の画像処理を行う。ハーフトーン処理部36による画像処理を経た印刷用画像データは通信線24を介してプリンタ18へ送信される。
プリンタ18は、RIP16から受信した印刷用画像データに基づき記録用紙に印刷対象の原稿の画像を印刷する。プリンタ18としては、例えば、電子写真プロセスによりフルカラーのトナー像を形成し、記録用紙に転写することで、記録用紙にカラー画像を印刷する構成を採用することができる。但し、これに限定されるものではなく、例えば感熱式や熱転写式、インクジェット式、或いはその他の印刷方式で普通紙や感熱紙上に画像を印刷する各種の構成を採用可能である。
次に図2を参照し、中間データ生成・処理装置14として機能することが可能なコンピュータ40について説明する。コンピュータ40は、CPU42、メモリ44、記憶部46、入力部48、表示部50、媒体読み書き装置(R/W)52、通信インタフェース(I/F)部54を備えている。CPU42、メモリ44、記憶部46、入力部48、表示部50、R/W52及び通信I/F部54はバス56を介して互いに接続されている。R/W52は、記録媒体58に書き込まれている情報の読み出し及び記録媒体58への情報の書き込みを行う。
記憶部46はHDD(Hard Disk Drive)やフラッシュメモリ等によって実現できる。記憶部46には中間データ生成プログラム60及び中間データ処理プログラム62が記憶されている。中間データ生成プログラム60及び中間データ処理プログラム62は、中間データ生成プログラム60及び中間データ処理プログラム62が書き込まれた記録媒体58がR/W52にセットされ、R/W52が記録媒体58の中間データ生成プログラム60及び中間データ処理プログラム62の読み出しを行うことで、記憶部46へ記憶される。
CPU42は、中間データ生成プログラム60及び中間データ処理プログラム62を記憶部46から読み出してメモリ44に展開し、中間データ生成プログラム60及び中間データ処理プログラム62を順次実行する。CPU42は、中間データ生成プログラム60を実行することで、中間データ生成部26として機能する。また、中間データ処理プログラム62は前処理モジュール64及び解像度変換モジュール66を含んでいる。CPU42は、前処理モジュール64を実行することで前処理部28として機能する。またCPU42は、解像度変換モジュール66を実行することで解像度変換部30として機能する。これにより、中間データ処理プログラム62を実行したコンピュータ40が、本発明に係る画像処理装置として機能する。なお、中間データ処理プログラム62は本発明に係る画像処理プログラムの一例である。
次に、本実施形態の作用の説明に先立ち、まず、画像データに対して解像度を低下させる解像度変換処理を行った場合に、画像中に存在する細線や微小なドット等が画像から消失してしまう現象について説明する。
図11(A)には元画像の一例を示す。この元画像は12画素×12画素のサイズで、x方向に延びる12本の画素列のうち0,1,5,10,11行目の画素列と、y方向に延びる12本の画素列のうち0,1,6,10,11列目の画素列が、それぞれ全画素が印刷有りの画素列になっている。従って、元画像を印刷した場合、x方向に延びる5行目の画素列と、y方向に延びる6列目の画素列は、それぞれ1画素幅の細線として印刷される。
この元画像の解像度を1/2に低下させる場合を考える。まず元画像のy方向に延びる12本の画素列を1列おきに間引いたとすると、図11(B)に示す画像が得られる。次に、図11(B)に示す画像のうちx方向に延びる6本の画素列から、1画素おきに画素を間引いたとすると、図11(C)に示す画像が得られる。そして、間引かれて残った画素のx方向y方向それぞれの間隔を詰めることで、図11(D)に示すように、元画像の解像度を1/2に低下させた解像度変換後の画像が得られる。
図11(D)を図11(A)と比較しても明らかなように、解像度変換後の画像では、元画像上に存在していたx方向に延びる1画素幅の細線(x方向に延びる12本の画素列のうち5行目の画素列)が消失している。図11の例では、元画像上に存在していたy方向に延びる1画素幅の細線(y方向に延びる12本の画素列のうち6列目の画素列)については、解像度変換後の画像でも保存されているが、この細線も元画像上での位置によっては解像度変換後の画像から消失する。
また、図12(A)には元画像の他の例を示す。この元画像は12画素×12画素のサイズで、x方向に延びる12本の画素列のうち0,1,10,11行目の画素列と、y方向に延びる12本の画素列のうち0,1,10,11列目の画素列が、それぞれ全画素が印刷有りの画素列になっている。また、x方向に6番目でy方向に5番目の画素は、周囲が印刷無しの画素に囲まれた印刷有りの画素(1画素サイズの微小なドット)となっている。
この元画像の解像度を1/2に低下させる場合を考える。まず元画像のy方向に延びる12本の画素列を1列おきに間引いたとすると、図12(B)に示す画像が得られる。次に、図12(B)に示す画像のうちx方向に延びる6本の画素列から、1画素おきに画素を間引いたとすると、図12(C)に示す画像が得られる。そして、間引かれて残った画素のx方向y方向それぞれの間隔を詰めることで、図12(D)に示すように、元画像の解像度を1/2に低下させた解像度変換後の画像が得られる。
図12(D)を図12(A)と比較しても明らかなように、解像度変換後の画像では、元画像上のx方向に6番目でy方向に5番目の位置に存在していた、1画素サイズの微小なドットが消失している。
ここで、上記の解像度変換に伴う細線や微小なドット等の消失を抑制する画像処理を、ビットマップ形式の画像データに対して行う場合、例えば、本実施形態に係る印刷システム10では、RIP16のRIP処理部34で生成されたビットマップ形式の印刷用画像データに対して上記の画像処理を行うことになる。
しかしながら、ビットマップ形式の画像データはデータ量が大きく、特にRIP処理部34ではビットマップ形式の画像データが各色成分(C,M,Y,K)毎に生成される。このため、ビットマップ形式の画像データに対して細線や微小なドット等の消失を抑制するための画像処理を行おうとすると、処理負荷の高い画像処理を各色成分毎に4回繰り返す必要があるので処理負荷が著しく大きくなる。特に、このような画像処理をソフトウェアで実行させる場合、例えばバイトデータのビット操作演算が必要になることから、CPUに多大な処理負荷を与えてしまう。このため、解像度変換に伴う細線や微小なドット等の消失を抑制するための画像処理が処理のボトルネックとなることで、プリンタ18における印刷速度の低下を招く、という懸念が生ずる。
このため、本実施形態では、中間データ生成部26で生成される中間データが、ビットマップ形式の画像データよりもデータ量が小さいことに着目し、中間データ生成部26で生成された中間データに対し、中間データ生成・処理装置14の前処理部28が、解像度変換に伴う細線や微小なドット等の消失を抑制する処理(解像度変換前処理)を行っている。
次に、中間データ生成部26で生成される中間データのフォーマットを説明する。前述したように、中間データ生成部26は、クライアント端末12から受信したPDLデータを解釈し、PDLデータが表す原稿の各頁を、各頁に含まれる画像要素に分解する。そして、分解した個々の画像要素毎に、個々の画像要素の属性に応じたフォーマットの中間データを生成する。
1つの画像要素に対応する中間データは、対応する画像要素に含まれる印刷対象の画素を表す画素特定情報(本実施形態では"Shape"という)と、対応する画像要素に含まれる印刷対象の画素の色を表す色情報(本実施形態では"Color"という)と、対応する画像要素の描画領域の範囲を表す描画領域情報(本実施形態では"Bounding Box"という)と、を含んでいる。
上記の三種類の情報のうち、画像要素の属性に応じてフォーマットが相違する情報は画素特定情報(Shape)であり、画像要素の属性がテキストを含む第1の属性群に含まれる場合、画素特定情報(Shape)として、ランレングス(Run Length)の考え方で画素列を表す画素列情報(本実施形態では"RunMask"という)が用いられ、画像要素の属性が多階調のカラー画像を含む第2の属性群に含まれる場合、画素特定情報(Shape)として、ビットマップ形式の情報(本実施形態では"RasterMask"という)が用いられる。なお、画素特定情報(Shape)としてRasterMaskデータが用いられる画像要素(属性が第2の属性群に含まれる画像要素)は、主に、PDLデータ上でもビットマップ形式で表現された画像要素である。RunMaskデータは本発明における第1情報の一例、RasterMaskデータは本発明における第2情報の一例である。
RunMaskデータは、対応する画像要素の走査線数と同数のScanlineRunデータを含んでおり、図3(A)に示すように、1つのScanlineRunデータは、対応する走査線における画素列(Run)の数を表すpairデータを含んでいる。また、1つのScanlineRunデータは、pairデータ>0の場合、xlデータとxrデータの組(このxlデータとxrデータの組を画素列(Run)データともいう)を、pairデータの数(対応する走査線における画素列(Run)の数)と同数個含んでいる。個々のxlデータとxrデータの組は互いに異なる画素列(Run)に対応しており、xlデータは対応する画素列(Run)の始点画素のx座標(0起算)を表し、xrデータは対応する画素列(Run)の終点画素の次の画素のx座標(0起算)を表している。
一例として、図3(B)に示すように、走査線上に、始点画素のx座標=2、終点画素のx座標=2、長さ=1の画素列と、始点画素のx座標=7、終点画素のx座標=7、長さ=1の画素列と、が存在している場合、当該走査線に対応するScanlineRunデータは、pairデータ=2、xlデータとxrデータの組が2個で、1組目がxlデータ=2、xrデータ=3で、2組目がxlデータ=7、xrデータ=8になる。
また、図3(B)に示すように、走査線上に、始点画素のx座標=2、終点画素のx座標=2、長さ=1の画素列と、始点画素のx座標=7、終点画素のx座標=7、長さ=1の画素列と、始点画素のx座標=12、終点画素のx座標=13、長さ=2の画素列と、が存在している場合、当該走査線に対応するScanlineRunデータは、pairデータ=3、xlデータとxrデータの組が3個で、1組目がxlデータ=2、xrデータ=3で、2組目がxlデータ=7、xrデータ=8で、3組目がxlデータ=12、xrデータ=14になる。
一方、RasterMaskデータは、次の表1に示すデータを含んでいる。
上記の表1に示したデータのうち、Widthデータ、Heightデータ及びnextLineデータの関係を図4に示す。なお、nextLineデータは、32の倍数でかつnextLine≧Widthとなるように設定される。Widthデータが指し示す画像要素の右端とnextLineデータが指し示す画像要素の右端との間はダミー領域である。
また、Bounding Boxデータは、一例として図5に示すように、対応する画像要素を取り囲むことができる最小の矩形領域の左上の頂点の座標(lx,ly)のデータと右下の頂点の座標(gx,gy)のデータを含む。
次に、上述したフォーマットの中間データに対して前処理部28が行う解像度変換前処理について、図6を参照して説明する。なお、図6に示す解像度変換前処理は、1頁分の中間データに対する処理であり、クライアント端末12から受信したPDLデータが複数頁分のデータを含んでいる場合、中間データ生成部26で生成される中間データも複数頁分のデータを含んでいるので、前処理部28では、図6に示す解像度変換前処理が頁数分繰り返し実行される。
解像度変換前処理のステップ100において、前処理部28は、解像度変換部30で中間データに対する解像度変換処理が行われるか否か判定する。ステップ100の判定は、例えば、中間データの解像度(すなわちPDLデータの解像度)が、プリンタ18による画像印刷における解像度と相違しているかを判定することで実現できる。中間データの解像度が、プリンタ18による画像印刷における解像度と一致している等の場合には、ステップ100の判定が否定されて解像度変換前処理を終了する。
中間データの解像度が、プリンタ18による画像印刷における解像度と相違している等の場合には、ステップ100の判定が肯定されてステップ102へ移行する。ステップ102において、前処理部28は、解像度変換部30で行われる中間データに対する解像度変換処理における変換倍率を規定する変数nを取得する。本実施形態において、解像度変換部30は、中間データの解像度がプリンタ18による画像印刷における解像度と相違している場合、両者に一致するように中間データの解像度を1/n倍にする解像度変換処理を行う。従って、変数nは、解像度変換部30による解像度変換処理における変換倍率(1/n)の逆数で、n≧2の整数であり、中間データの解像度(PDLデータの解像度)をプリンタ18による画像印刷における解像度で除算することで算出できる。
なお、本実施形態では、解像度変換部30による解像度変換処理の実施の有無、及び、解像度変換処理における変換倍率(1/n)が、中間データの解像度(PDLデータの解像度)とプリンタ18による画像印刷における解像度との関係によって切り替わる態様を説明している。しかしながら、本発明は、例えば中間データの解像度(PDLデータの解像度)が1200dpi固定で、プリンタ18による画像印刷における解像度が600dpi固定、解像度変換部30が変換倍率1/2(変数n=2)の解像度変換処理を毎回行う、等のように、解像度変換処理が一定の変換倍率で毎回実施される態様にも適用可能であることは言うまでもない。この場合は、ステップ100,102に代えて、予め設定された領域に固定的に記憶された変数nを読み出す処理を行えばよい。
次のステップ104において、前処理部28は、1頁分の中間データ(処理対象の頁の中間データ)の中から、処理対象の頁に含まれる1つの画像要素の情報を取得する。先に説明したように、1つの画像要素の情報は、画素特定情報(Shapeデータ)、色情報(Colorデータ)及び描画領域情報(Bounding Boxデータ)を含んでいる。ステップ106において、前処理部28は、ステップ104で取得した単一の画像要素の情報の中からShapeデータを抽出する。
先に説明したように、Shapeデータは、対応する画像要素の属性に応じてフォーマットが相違しており、対応する画像要素の属性がテキストを含む第1の属性群に含まれる場合はRunMaskデータが用いられ、画像要素の属性が多階調のカラー画像を含む第2の属性群に含まれる場合はRasterMaskデータが用いられる。次のステップ108において、前処理部28は、ステップ106で抽出したShapeデータがRunMaskデータか否かを判定する。
ShapeデータがRunMaskデータであった場合には、ステップ108の判定が肯定されてステップ110へ移行し、ステップ110以降でRunMaskデータに対し、解像度変換に伴う細線や微小なドット等の消失を抑制する処理を行う。
すなわち、ステップ110において、前処理部28は、RunMaskデータに含まれる個々のScanlineRunデータ(が対応する個々の走査線)を識別するための変数sに、初期値として0を設定する。ステップ112において、前処理部28は、s%n≠0(但しs%nはs÷nの剰余)か否か判定する。ステップ112の判定が否定された場合、変数sは変数nの整数倍であるので、s番目の走査線(以下、走査線sと称する)上の各画素は、解像度変換部30による変換倍率1/nの解像度変換処理を経ても保存されると判断できる。このため、ステップ112の判定が否定された場合はステップ116へ移行する。
一方、ステップ112の判定が肯定された場合は、変数sは変数nの整数倍ではないので、走査線s(上の各画素)は、解像度変換部30による変換倍率1/nの解像度変換処理によって消失する(間引かれる)と判断できる。このため、ステップ112の判定が肯定された場合はステップ114へ移行し、ステップ114において、前処理部28は、走査線s−(s%n)上の各画素と走査線s上の各画素との論理和(OR)を演算し、走査線s−(s%n)のScanlineRunデータを、論理和演算によって得られた画素列を表すScanlineRunデータへ更新する。なお、s−(s%n)は変数nの整数倍になるので、走査線s−(s%n)は解像度変換処理を経ても保存される。これにより、解像度変換処理によって消失する(間引かれる)走査線s上の各画素の情報が、解像度変換処理を経ても保存される走査線s−(s%n)上の各画素の情報に重畳される。
上記処理を数式で表すと次の(1)式になる。
s%n≠0の場合、
走査線s−(s%n)のScanlineRunデータ←
(走査線s−(s%n)上の各画素)OR(走査線s上の各画素) …(1)
また、n=2の場合は、次の(2)式のように簡略化できる。
sが奇数の場合、
走査線s−1のScanlineRunデータ←
(走査線s−1上の各画素)OR(走査線s上の各画素) …(2)
次のステップ116において、前処理部28は、走査線s上の個々の画素列を識別するための変数iに、初期値として0を設定する。ステップ118において、前処理部28は、走査線sのScanlineRunデータからi番目の画素列の始点画素を表すxlデータを取得する。ステップ120において、前処理部28は、xl%n≠0(但しxl%nはxl÷nの剰余)か否か判定する。ステップ120の判定が否定された場合、xlデータの値は変数nの整数倍であるので、走査線s上のxl番目の画素(i番目の画素列の始点画素)は、解像度変換部30による変換倍率1/nの解像度変換処理を経ても保存されると判断できる。このため、ステップ120の判定が否定された場合は、i番目のxlデータの値を変更することなくステップ124へ移行する。
一方、ステップ120の判定が肯定された場合は、xlデータの値は変数nの整数倍ではないので、走査線s上のxl番目の画素(i番目の画素列の始点画素)は、解像度変換部30による変換倍率1/nの解像度変換処理によって消失する(間引かれる)と判断できる。このため、ステップ120の判定が肯定された場合はステップ122へ移行し、ステップ122において、前処理部28は、走査線sのScanlineRunデータのi番目のxlデータの値をxl−(xl%n)へ更新する。なお、xl−(xl%n)は変数nの整数倍になるので、走査線s上のxl−(xl%n)番目の画素は解像度変換処理を経ても保存される。これにより、解像度変換処理によって消失する(間引かれる)走査線s上のi番目の画素列の始点画素の情報が、解像度変換処理を経ても保存される走査線s上のxl−(xl%n)番目の画素の情報に重畳される。
上記処理を数式で表すと次の(3)式になる。
xl%n≠0の場合、
走査線sのi番目の画素列の始点画素xl←xl−xl%n …(3)
また、n=2の場合は、次の(4)式のように簡略化できる。
xlが奇数の場合、
走査線sのi番目の画素列の始点画素xl←xl−1 …(4)
次のステップ124において、前処理部28は、走査線sのScanlineRunデータからi番目の画素列の終点画素の次の画素を表すxrデータを取得する。ステップ126において、前処理部28は、xr%n≠0(但しxr%nはxr÷nの剰余)か否か判定する。ステップ126の判定が否定された場合、xrデータの値は変数nの整数倍であるので、走査線s上のxr番目の画素(i番目の画素列の終点画素の次の画素)は、解像度変換部30による変換倍率1/nの解像度変換処理を経ても保存されると判断できる。このため、ステップ126の判定が否定された場合は、i番目のxrデータの値を変更することなくステップ130へ移行する。
一方、ステップ126の判定が肯定された場合は、xrデータの値は変数nの整数倍ではないので、走査線s上のxr番目の画素(i番目の画素列の終点画素の次の画素)は、解像度変換部30による変換倍率1/nの解像度変換処理によって消失する(間引かれる)と判断できる。このため、ステップ126の判定が肯定された場合はステップ128へ移行し、ステップ128において、前処理部28は、走査線sのScanlineRunデータのi番目のxrデータの値をxr−(n−xr%n)へ更新する。なお、xr−(n−xr%n)は変数nの整数倍になるので、走査線s上のxr−(n−xr%n)番目の画素は解像度変換処理を経ても保存される。これにより、解像度変換処理によって消失する(間引かれる)走査線s上のi番目の画素列の終点画素の次の画素の情報が、解像度変換処理を経ても保存される走査線s上のxr−(n−xr%n)番目の画素の情報に重畳される。
上記処理を数式で表すと次の(5)式になる。
xr%n≠0の場合、
走査線sのi番目の画素列の終点画素の次の画素xr←xr+n−xr%n …(5)
また、n=2の場合は、次の(6)式のように簡略化できる。
xrが奇数の場合、
走査線sのi番目の画素列の終点画素の次の画素xr←xr+1 …(6)
次のステップ130において、前処理部28は、変数iの値が走査線sのScanlineRunデータに含まれるpairデータの値に達したか否かを判定することで、走査線s上の全ての画素列(Run)のデータを処理したか否か判定する。ステップ130の判定が否定された場合はステップ132へ移行し、ステップ132において、前処理部28は、変数iを1だけインクリメントした後にステップ118へ戻る。これにより、走査線sの全ての画素列(Run)のデータに対してステップ118乃至ステップ130が繰り返された後に、ステップ130の判定が肯定される。
上述したステップ118乃至ステップ130の画素列(Run)データに対する処理について、図7を参照し、処理結果の一例を挙げて更に説明する。なお、図7は、一例として、解像度変換部30による解像度変換処理における変換倍率が1/2(変数n=2)の場合を示している。
図7の1番目に「変換前」として示す画素列は、始点画素及び終点画素のx座標=0、長さ=1の画素列で、画素列(Run)データはxl=0、xr=1となる。この画素列(Run)データに対してステップ118乃至ステップ130の処理を行うと、xlは奇数ではないので(4)式の更新は行われず、xrは奇数であるので(6)式に従って1が加算される。従って、図7の1番目に「変換後」として示すように、処理後の画素列は始点画素のx座標=0、終点画素のx座標=1、長さ=2となり、処理後の画素列(Run)データはxl=0、xr=2となる。処理後のxl,xrは共にn(=2)の整数倍であるので、解像度変換部30による解像度変換処理を経ても、処理後の画素列(Run)データxl,xrが指し示す画素の消失は生じない。
図7の2番目に「変換前」として示す画素列は、始点画素のx座標=0、終点画素のx座標=1、長さ=2の画素列で、画素列(Run)データはxl=0、xr=2となる。この画素列(Run)データに対してステップ118乃至ステップ130の処理を行うと、xlは奇数ではないので(4)式の更新は行われず、xrも奇数ではないので(6)式の更新は行われない。従って、図7の2番目に「変換後」として示すように、処理後の画素列は処理前の画素列と同じであり、処理後の画素列(Run)データも処理前と同じである。処理後のxl,xrは共にn(=2)の整数倍であるので、解像度変換部30による解像度変換処理を経ても、処理後の画素列(Run)データxl,xrが指し示す画素の消失は生じない。
図7の3番目に「変換前」として示す画素列は、始点画素のx座標=0、終点画素のx座標=2、長さ=3の画素列で、画素列(Run)データはxl=0、xr=3となる。この画素列(Run)データに対してステップ118乃至ステップ130の処理を行うと、xlは奇数ではないので(4)式の更新は行われず、xrは奇数であるので(6)式に従って1が加算される。従って、図7の3番目に「変換後」として示すように、処理後の画素列は始点画素のx座標=0、終点画素のx座標=3、長さ=4となり、処理後の画素列(Run)データはxl=0、xr=4となる。処理後のxl,xrは共にn(=2)の整数倍であるので、解像度変換部30による解像度変換処理を経ても、処理後の画素列(Run)データxl,xrが指し示す画素の消失は生じない。
図7の4番目に「変換前」として示す画素列は、始点画素及び終点画素のx座標=1、長さ=1の画素列で、画素列(Run)データはxl=1、xr=2となる。この画素列(Run)データに対してステップ118乃至ステップ130の処理を行うと、xlは奇数であるので(4)式に従って1が減算され、xrは奇数でないので(6)式の更新は行われない。従って、図7の4番目に「変換後」として示すように、処理後の画素列は始点画素のx座標=0、終点画素のx座標=1、長さ=2となり、処理後の画素列(Run)データはxl=0、xr=2となる。処理後のxl,xrは共にn(=2)の整数倍であるので、解像度変換部30による解像度変換処理を経ても、処理後の画素列(Run)データxl,xrが指し示す画素の消失は生じない。
図7の5番目に「変換前」として示す画素列は、始点画素のx座標=1、終点画素のx座標=2、長さ=2の画素列で、画素列(Run)データはxl=1、xr=3となる。この画素列(Run)データに対してステップ118乃至ステップ132の処理を行うと、xlは奇数であるので(4)式に従って1が減算され、xrも奇数であるので(6)式に従って1が加算される。従って、図7の5番目に「変換後」として示すように、処理後の画素列は始点画素のx座標=0、終点画素のx座標=3、長さ=4となり、処理後の画素列(Run)データはxl=0、xr=4となる。処理後のxl,xrは共にn(=2)の整数倍であるので、解像度変換部30による解像度変換処理を経ても、処理後の画素列(Run)データxl,xrが指し示す画素の消失は生じない。
図7の6番目に「変換前」として示す画素列は、始点画素のx座標=1、終点画素のx座標=3、長さ=3の画素列で、画素列(Run)データはxl=1、xr=4となる。この画素列(Run)データに対してステップ118乃至ステップ132の処理を行うと、xlは奇数であるので(4)式に従って1が減算され、xrは奇数ではないので(6)式の更新は行われない。従って、図7の6番目に「変換後」として示すように、処理後の画素列は始点画素のx座標=0、終点画素のx座標=3、長さ=4となり、処理後の画素列(Run)データはxl=0、xr=4となる。処理後のxl,xrは共にn(=2)の整数倍であるので、解像度変換部30による解像度変換処理を経ても、処理後の画素列(Run)データxl,xrが指し示す画素の消失は生じない。
ステップ130の判定が肯定されるとステップ134へ移行し、ステップ134において、前処理部28は、ステップ118乃至ステップ132の処理を経た走査線sの全ての画素列(Run)のデータの中に、i番目のxr=i+1番目のxl(但しi=0〜pair−1)を満たす画素列(Run)のデータの対が含まれているか否かを探索する。該当する画素列(Run)データの対が含まれていなければ次のステップ136へ移行する。一方、該当する画素列(Run)データの対を発見した場合は、i番目の画素列(Run)データのxrデータにi+1番目の画素列(Run)データのxrデータを設定し、i+1番目の画素列(Run)データを消去し、pairデータを1だけデクリメントすることで、i番目の画素列(Run)データとi+1番目の画素列(Run)データを結合する。
上述したステップ134における画素列(Run)データの結合について、図8を参照し、処理結果の一例を挙げて更に説明する。なお、図8についても、解像度変換部30による解像度変換処理における変換倍率が1/2(変数n=2)の場合を示している。図8に「変換前」として示す画素列は、始点画素及び終点画素のx座標=0、長さ=1の画素列1と、始点画素及び終点画素のx座標=2、長さ=1の画素列2であり、ScanlineRunデータは、pair=2、画素列(Run)データがxl1=0、xr1=1、xl2=2、xr=3となる。
画素列1の画素列(Run)データに対してステップ118乃至ステップ130の処理を行うと、xlは奇数ではないので(4)式の更新は行われず、xrは奇数であるので(6)式に従って1が加算される。従って、図8に「変換後」として示すように、処理後の画素列1は始点画素のx座標=0、終点画素のx座標=1、長さ=2となり、処理後の画素列1の画素列(Run)データはxl1=0、xr1=2となる。また、画素列2の画素列(Run)データに対してステップ118乃至ステップ132の処理を行うと、xlは奇数ではないので(4)式の更新は行われず、xrは奇数であるので(6)式に従って1が加算される。従って、図8に「変換後」として示すように、処理後の画素列2は始点画素のx座標=2、終点画素のx座標=3、長さ=2となり、処理後の画素列2の画素列(Run)データはxl2=2、xr2=4となる。
ここで、画素列1のxr1=2と画素列2のxl2=2は、ステップ134の条件「i番目のxr=i+1番目のxl」を満たすので、ステップ134の画素列(Run)データの結合が行われ、画素列1のxrに画素列2のxrが設定され、画素列2の画素列(Run)データが消去され、pairデータが1だけデクリメントされる。これにより、図8に「結合処理」と表記して示すように、ScanlineRunデータは、pair=1、画素列(Run)データがxl1=0、xr1=4となる。なお、結合処理後のxl1,xr1は共にn(=2)の整数倍であるので、解像度変換部30による解像度変換処理を経ても、処理後の画素列(Run)データxl,xrが指し示す画素の消失は生じない。
次のステップ136において、前処理部28は、走査線sが処理対象の画像要素の最後の走査線か否か判定する。ステップ136の判定が否定された場合はステップ138へ移行し、ステップ138において、前処理部28は、変数sを1だけインクリメントした後にステップ112に戻る。これにより、処理対象の画像要素の全ての走査線に対し、ステップ112乃至ステップ138が繰り返される。そして、ステップ136の判定が肯定されるとステップ142へ移行する。
上述したRunMaskデータに対する処理について、処理結果の一例を挙げて更に説明する。なお、以下で説明する図9,10についても、一例として解像度変換部30による解像度変換処理における変換倍率が1/2(変数n=2)の場合を示している。
図9(A)には元の画像要素の一例を示す。この画像要素は、図11(A)に示す元画像と同じであり、12画素×12画素のサイズで、x方向に延びる12本の画素列のうち0,1,5,10,11行目の画素列と、y方向に延びる12本の画素列のうち0,1,6,10,11列目の画素列が、それぞれ全画素が印刷有りの画素列になっている。従って、元の画像要素を印刷した場合、x方向に延びる5行目の画素列と、y方向に延びる6列目の画素列は、それぞれ1画素幅の細線として印刷される。
図9(B)及び(C)は説明の都合上、ステップ112,114の処理(便宜的に「y方向の前処理」と称する)を画像要素全体に行った後に、ステップ118乃至ステップ130の処理(便宜的に「x方向の前処理」と称する)を画像要素全体に行った場合の処理結果を示す。
y方向の前処理では、n=2の場合、前出の(2)式に示すように、sが奇数の場合に、走査線s−1上の各画素と走査線s上の各画素との論理和(OR)が演算され、走査線s−1のScanlineRunデータが、論理和演算によって得られた画素列を表すScanlineRunデータへ更新される。従って、図9(A)に示す元の画像要素全体に対してy方向の前処理を行ったとすると、図9(B)に示すように、x方向に延びる5行目の画素列の幅が、4行目の画素列を加えた2画素分の幅に拡大される。
また、x方向の前処理では、n=2の場合、前出の(4)式に示すように、xlが奇数の場合にxlが1だけ減算され、前出の(6)式に示すように、xrが奇数の場合にxrに1が加算される。従って、図9(B)に示す画像要素全体に対してx方向の前処理を行ったとすると、図9(C)に示すように、y方向に延びる6列目の画素列の幅が、7列目の画素列を加えた2画素分の幅に拡大される。
そして、図9(C)に示すy方向の前処理及びx方向の前処理を経た画像要素に対し、変換倍率が1/2の解像度変換処理を行ったとすると、図9(D)に示すように、元の画像要素の解像度を1/2に低下させた解像度変換後の画像要素が得られる。図9(D)を図9(A)と比較しても明らかなように、元の画像要素上の5行目の画素列に存在していたx方向に延びる1画素幅の細線は、解像度変換後の画像要素では2行目の画素列に1画素幅の細線として保存される。また、元の画像要素上の6列目の画素列に存在していたy方向に延びる1画素幅の細線は、解像度変換後の画像要素では3列目の画素列に1画素幅の細線として保存される。
また、図10(A)には元の画像要素の他の例を示す。この画像要素は、図12(A)に示す元画像と同じであり、12画素×12画素のサイズで、x方向に延びる12本の画素列のうち0,1,10,11行目の画素列と、y方向に延びる12本の画素列のうち0,1,10,11列目の画素列が、それぞれ全画素が印刷有りの画素列になっている。また、x方向に6番目でy方向に5番目の画素は、周囲が印刷無しの画素に囲まれた印刷有りの画素(1画素サイズの微小なドット)となっている。
図10(B)及び(C)についても説明の都合上、y方向の前処理を画像要素全体に行った後に、x方向の前処理を画像要素全体に行った場合の処理結果を示す。y方向の前処理では、n=2の場合、前出の(2)式に示すように、sが奇数の場合に、走査線s−1上の各画素と走査線s上の各画素との論理和(OR)が演算され、走査線s−1のScanlineRunデータが、論理和演算によって得られた画素列を表すScanlineRunデータへ更新される。従って、図10(A)に示す画像要素全体に対してy方向の前処理を行ったとすると、図10(B)に示すように、x方向に6番目でy方向に5番目の画素の微小なドットは、x方向に6番目でy方向に4番目の画素が加わり、y方向の幅が2画素分の幅に拡大される。
また、x方向の前処理では、n=2の場合、前出の(4)式に示すように、xlが奇数の場合にxlが1だけ減算され、前出の(6)式に示すように、xrが奇数の場合にxrに1が加算される。従って、図10(B)に示す画像要素全体に対してx方向の前処理を行ったとすると、図10(C)に示すように、x方向に6番目でy方向に4,5番目の画素の微小なドットは、x方向に7番目でy方向に4,5番目の画素が加わり、x方向の幅も2画素分の幅に拡大されることになる。
そして、図10(C)に示すy方向の前処理及びx方向の前処理を経た画像要素に対し、変換倍率が1/2の解像度変換処理を行ったとすると、図10(D)に示すように、元の画像要素の解像度を1/2に低下させた解像度変換後の画像要素が得られる。図10(D)を図10(A)と比較しても明らかなように、元の画像要素上に存在していたx方向に6番目でy方向に5番目の画素の微小なドットは、解像度変換後の画像要素ではx方向に3番目でy方向に2番目の画素の微小なドットとして保存される。
また、ステップ106で抽出したShapeデータがRasterMaskデータであった場合には、ステップ108の判定が否定されてステップ140へ移行し、ステップ140において、前処理部28は、RasterMaskデータを変数nに応じて更新する処理を行う。RasterMaskデータの更新の具体的な処理は次の表2に示す。
表2から明らかなように、RasterMaskデータに対する主な処理は、対応する画像要素の幅及び高さの画素数を変数nの整数倍に揃える処理であり、RunMaskデータに対する処理のように、解像度変換処理で間引かれる画素の情報を解像度変換処理で間引かれない画素の情報に重畳する前処理は行わない。ShapeデータとしてRasterMaskデータが用いられる画像要素(属性が第2の属性群に含まれる画像要素)は、PDLデータ上でもビットマップ形式で表現される、多階調のカラー画像(例えば自然画像)の画像要素であることが多い。このような画像要素に対して上記のような前処理を行うと、画像が不自然に変化して画質が低下したと感じられることが多いため、前処理を行わないこととしている。
また、上記のように、画像要素の幅及び高さの画素数を変数nの整数倍に揃える処理を行うことで、RasterMaskデータに対応する画像要素が、幅及び高さの少なくとも一方の画素数が変数n未満の小サイズの画像要素である場合に、解像度変換処理に伴って前記画像要素が消滅してしまうことが抑制される。
また、変数n=2の場合には、表2に示したWidth及びHeightに対する処理は「奇数の場合は1を加算して偶数にする」処理に簡略化され、nextLineに対する処理は「変更なし」になる(Widthに1を加算してもnextLineを超えることはないため)。
次のステップ142において、前処理部28は、処理対象の画像要素のBounding Boxデータを変数nに応じて更新する。Bounding Boxデータの更新は、Bounding Boxデータが規定する矩形領域(図5参照)の幅及び高さの画素数を変数nの整数倍に揃える処理であり、具体的には、矩形領域の左上の頂点の座標(lx,ly)と右下の頂点の座標(gx,gy)のうち、gx,gyを以下の(7)式に従って更新する。
(gx−lx)%n≠0ならgx←gx+(n−(gx−lx)%n)
(gy−ly)%n≠0ならgy←gy+(n−(gy−ly)%n) …(7)
次のステップ144において、前処理部28は、処理対象の画像要素が処理対象の頁の最後の画像要素か否か判定する。ステップ144の判定が否定された場合はステップ104に戻り、新たな画像要素を処理対象としてステップ104以降の処理を繰り返す。そして、ステップ144の判定が肯定されると解像度変換前処理を終了する。
前処理部28による上述した解像度変換前処理を経た中間データは解像度変換部30に入力され、解像度変換部30は、解像度変換前処理を経た中間データに対し、変換倍率が1/nの解像度変換処理を行う。これにより、解像度変換処理後の中間データのうち、ShapeデータとしてRunMaskデータが用いられた画像要素については、細線や微小なドット等が保存される。
このように、上記では、ランレングス(Run Length)の考え方で画素列(画像要素)を表す中間データであるRunMaskデータに対し、解像度変換処理で間引かれる画素の情報を解像度変換処理で間引かれない画素の情報に重畳する前処理を行うことで、解像度変換に伴う細線や微小なドット等の消失を抑制しているので、ビットマップ形式の画像データを処理対象とする場合よりも処理対象のデータのデータ量が小さくなる。
また、1つの画像要素の情報に含まれるShapeデータ、Colorデータ及びBounding Boxデータのうち、Colorデータは処理対象としていないので、処理対象のデータのデータ量が更に小さくなる。
また、ビットマップ形式の画像データでは個々の画像要素の属性といった情報が失われているので、ビットマップ形式の画像データを処理対象とする場合は、画像要素の属性毎に処理を切り替えることは困難である。これに対し、上記では中間データを処理対象としているので、画像要素の属性毎に適切な処理に切り替えることが可能になる。
なお、上記の実施形態で説明した中間データのフォーマットは単なる一例であり、本発明は、ランレングス(Run Length)の考え方で画素列(画像要素)を表す中間データであれば適用可能である。
また、上記では、画素列情報の一例として、画素列の始点画素を指し示すxlデータと、画素列の終点画素の次の画素を指し示すxrデータを含む画素列(Run)データを説明したが、これに限定されるものではない。画素列情報は、画素列の始点画素を指し示すデータと、画素列の終点画素を指し示すデータを含む情報であってもよいし、画素列の始点画素を指し示すデータと、画素列の長さを表すデータを含む情報であってもよいし、画素列の終点画素を指し示すデータと、画素列の長さを表すデータを含む情報であってもよい。また、画素列情報は、画素列中の基準位置(一例としては画素列の中央)を指し示すデータと、基準位置から画素列の始点画素及び終点画素までの長さを表すデータを含む情報であってもよい。
また、上記では解像度を1/nに低下させる解像度変換処理を行う態様を説明したが、解像度変換における変換倍率は1/nに限定されるものではなく、m/n(但し、mは1<m<nの整数)であってもよい。変換倍率がm/nの場合、解像度変換ではx方向またはy方向に並ぶn個の画素のうちのm個の画素が間引かれることになる。ここで、n個の画素のうちの何番目の画素を間引くことでm個の画素を間引くのかを予め定めて情報として記憶しておき、解像度変換部30が前記情報を参照して間引く画素を決定するように構成すれば、前処理部28も前記情報を参照することで、解像度変換処理で間引かれる画素と解像度変換処理で間引かれない画素とを弁別できる。従って、解像度変換における変換倍率がm/nであっても本発明に係る前処理を実現可能である。また、変数n,mの組み合わせが複数存在している場合にも、変数n,mの各組み合わせ毎に前記情報を記憶しておけば対応可能である。
更に、上記では解像度変換におけるx方向とy方向の変換倍率は等しい場合を説明したが、上記の実施形態で説明した解像度変換前処理では、x方向とy方向とで別々に前処理を行うので、x方向とy方向の変換倍率が相違している場合にも適用可能である。
また、上記では解像度変換における変換倍率が、中間データ(PDLデータ)の解像度とプリンタ18による画像印刷における解像度に応じて定まる態様を説明したが、これに限定されるものではない。例えば記録用紙への原稿の印刷サイズ等が別に指定される場合には、解像度変換における変換倍率は印刷サイズ等に応じて変化するので、指定された印刷サイズ等も取得し、取得した印刷サイズ等も勘案して解像度変換における変換倍率を判断するようにしてもよい。
また、上記では本発明に係る画像処理プログラムの一例である中間データ処理プログラム62がコンピュータ40の記憶部46に予め記憶(インストール)されている態様を説明したが、本発明に係る画像処理プログラムは、CD−ROMやDVD−ROM、USB等のインタフェースを介して電子機器と接続可能なフラッシュメモリ等の記録媒体に記録されている形態で提供することも可能である。