JP2015195472A - 画像形成装置 - Google Patents
画像形成装置 Download PDFInfo
- Publication number
- JP2015195472A JP2015195472A JP2014071952A JP2014071952A JP2015195472A JP 2015195472 A JP2015195472 A JP 2015195472A JP 2014071952 A JP2014071952 A JP 2014071952A JP 2014071952 A JP2014071952 A JP 2014071952A JP 2015195472 A JP2015195472 A JP 2015195472A
- Authority
- JP
- Japan
- Prior art keywords
- image
- vacnt
- value
- processing
- line
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 claims abstract description 174
- 238000003860 storage Methods 0.000 claims description 10
- 239000000872 buffer Substances 0.000 abstract description 136
- 238000000034 method Methods 0.000 description 126
- 238000010586 diagram Methods 0.000 description 24
- 238000012546 transfer Methods 0.000 description 23
- 238000011946 reduction process Methods 0.000 description 17
- 230000015572 biosynthetic process Effects 0.000 description 11
- 238000012937 correction Methods 0.000 description 9
- 238000012217 deletion Methods 0.000 description 7
- 230000037430 deletion Effects 0.000 description 7
- 238000003780 insertion Methods 0.000 description 6
- 230000037431 insertion Effects 0.000 description 6
- 239000004065 semiconductor Substances 0.000 description 5
- 238000001514 detection method Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000008602 contraction Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 239000011521 glass Substances 0.000 description 2
- 108091008695 photoreceptors Proteins 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 208000032005 Spinocerebellar ataxia with axonal neuropathy type 2 Diseases 0.000 description 1
- 208000033361 autosomal recessive with axonal neuropathy 2 spinocerebellar ataxia Diseases 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
Abstract
【課題】フレームバッファを用いずに、画像のサイズを拡大又は縮小する画像処理を行うことができる画像形成装置を提供する。
【解決手段】CPU51は、受け付けた画像データを複数のエリアに分割する。CPU51は、また、分割された各エリア毎に画素を挿入又は削除する位置を特定するための乱数値を生成する。CPU51は、乱数値で定めた位置へ画素を挿入し、又は、当該位置の画素を削除する画像処理を行う。ラインバッファ53は、分割されたエリアに含まれるライン数を超える数のラインデータが格納できるサイズで構成されており、CPU51による画像処理の際にライン単位で読み出されたラインデータを順次格納する。
【選択図】図3
【解決手段】CPU51は、受け付けた画像データを複数のエリアに分割する。CPU51は、また、分割された各エリア毎に画素を挿入又は削除する位置を特定するための乱数値を生成する。CPU51は、乱数値で定めた位置へ画素を挿入し、又は、当該位置の画素を削除する画像処理を行う。ラインバッファ53は、分割されたエリアに含まれるライン数を超える数のラインデータが格納できるサイズで構成されており、CPU51による画像処理の際にライン単位で読み出されたラインデータを順次格納する。
【選択図】図3
Description
本発明は、静電潜像により画像を形成する画像形成装置に関する。
静電潜像により画像を形成する画像形成装置では、構成部品の取り付け位置のばらつき、又は、形成された画像を定着する際の熱などの影響を受け、転写部材上に形成された画像の画像サイズと本来意図する画像の画像サイズとが異なってしまうという問題がある。
このような問題に対し、特許文献1に開示された画像処理装置では、出力された画像の画像サイズと本来意図する画像サイズとを比較し、比較した結果に基づいて画像の形成過程における変倍率を測定する。そして、入力画像の画像データに対して測定された倍率で補正を行い、補正後の補正画像データに基づいて画像を形成する。その結果、最終的には、本来意図する画像サイズで画像が出力されるというものである。
例えば、画像形成を行った際に、入力画像の画像サイズに対して、出力された画像の画像サイズが副走査方向(感光体の回転方向)に101[%]のサイズとなってしまう画像形成装置があるとする。この場合、入力画像と同じ画像サイズで出力するには、測定された倍率の逆数を積算した画像サイズで画像形成が行われるように画像データを補正する。具体的には、副走査方向に0.990099…(101の逆数=100/101)倍した画像が形成されるようにする。その結果、出力画像の画像サイズは、主走査方向1.010101…×99[%]=100[%]、副走査方向0.990099…×101[%]=100[%]となる。
特許文献1に記載された画像処理装置における入力画像データの倍率変更方法は、副走査方向における所望の画像サイズと、補正処理せずに出力した出力画像の画像サイズとの差分に相当する画素数を算出する。そして、この画素数に基づいて、副走査方向の画像領域を複数のエリアに分割する。
図23は、処理対象の入力画像を模式的に示した図である。図23に示す入力画像は、主走査方向及び副走査方向に配列された画素の集合である。例えば、所望の画像サイズと、補正処理せずに出力した出力画像のサイズとの差分が10画素であったとする。この場合、図23中の点線で示すように、入力画像を副走査方向に10分割する。更に、分割された各エリア(領域)毎に、乱数発生器が生成した乱数値に基づいて、主走査方向の各座標位置(主走査位置)につき1ヶ所ずつランダムな位置を決定する。同一エリア内であっても、副走査位置が異なれば、ランダムな位置は異なる。そして、決定されたランダムな位置において、画像サイズを副走査方向に拡大する場合には画素を挿入し、又、縮小する場合には画素を削除する。画素が挿入されると、それ以降は同エリアにおいて副走査方向に1ライン分遅れた位置の画素が出力される。画素が削除されると、それ以降は同エリアにおいて副走査方向に1ライン分早めた位置の画素が出力される。なお、画素の挿入又は削除に伴って発生する、これらの「遅れ」、「早め」の状態は、エリアが切り替わるとその状態が初期化される。
図24は、あるエリアについて、乱数発生器が生成した乱数値に基づいて決定されたランダムな位置を視覚化して表した模式図である。図24に示すように、エリアの主走査位置を表す座標値を「x」、ラインNo(副走査位置)を表す座標値を「y」とする。図24において、主走査方向と平行する点線は、エリアの境界線(エリア境界)であり、図23で示した点線に相当する。
例えば、入力画像の画像サイズを副走査方向に拡大する場合、決定されたランダムな位置で画素を挿入する。画素が挿入された結果、図25(a)に示すような画像(拡大前の画像)が、図25(b)に示すように、補正処理(拡大処理)により画像サイズが拡大されて出力されることになる。この補正処理は、1つのエリアにおいて、副走査方向に1ライン分画像サイズを拡大する変倍処理である。
例えば、入力画像の画像サイズを副走査方向に拡大する場合、決定されたランダムな位置で画素を挿入する。画素が挿入された結果、図25(a)に示すような画像(拡大前の画像)が、図25(b)に示すように、補正処理(拡大処理)により画像サイズが拡大されて出力されることになる。この補正処理は、1つのエリアにおいて、副走査方向に1ライン分画像サイズを拡大する変倍処理である。
また、画像サイズを副走査方向に縮小する場合、決定されたランダムな位置で画素を削除する。画素が削除された結果、図25(c)に示すような画像(縮小前の画像)が、図25(d)に示すように、補正処理(縮小処理)により画像サイズが縮小されて出力されることになる。この補正処理は、1つのエリアにおいて、副走査方向に1ライン分画像サイズを縮小する変倍処理である。
画像形成装置によっては、画像データを保持するためのフレームバッファを備えるものがある。この場合、フレームバッファに格納された入力画像データに対して補正処理を行うことにより、副走査方向の変倍処理を行う。しかしながら、フレームバッファは高価であり、そのため画像形成装置の製造コストが大幅に増加してしまう、という課題が残る。
本発明は、フレームバッファを用いずに、画像のサイズを拡大又は縮小する画像処理を行うことができる画像形成装置を提供することを、主たる目的とする。
本発明の画像形成装置は、受け付けた画像データを複数のエリアに分割する分割手段と、前記分割された各エリア毎に画素を挿入又は削除する位置を特定するための乱数値を生成する乱数生成手段と、前記乱数値で定めた位置へ画素を挿入し、又は、当該位置の画素を削除する画像処理を行う画像処理手段と、前記画像処理の際に前記画像データを主走査方向に走査してライン単位で読み出したラインデータを順次格納する格納手段と、を備え、前記格納手段は、前記エリアに含まれるライン数を超える数の前記ラインデータを格納できるサイズに構成されることを特徴とする。
本発明によれば、フレームバッファを用いずに、画像のサイズを拡大又は縮小する画像処理(画素の挿入又は削除による副走査方向の変倍処理)を行うことができる。これにより、画像形成装置の製造コストを大幅に低減することができる。
以下、図面を参照しながら実施形態例を説明する。
[第1実施形態例]
図1は、本実施形態に係る画像形成装置の概略縦断面図である。
この画像形成装置110は、原稿を所定の読取り部位まで給送する原稿給送部111、給送された原稿を読取る画像読取り部112、画像データに基づき作像する画像形成部113を含んで構成される。なお、画像形成装置110は、コピーモードとプリンタモードの2つのモードを有する。コピーモードは、画像読取り部112で読み取って得た画像信号(画像データ)を受け付け、受け付けた画像データを印刷するモードである。また、プリンタモードは、後述する外部PC48から出力された画像信号(画像データ)を受け付け、受け付けた画像データを印刷するモードである。
以下、画像形成装置110の基本的な動作について、図1を参照しながら説明する。
図1は、本実施形態に係る画像形成装置の概略縦断面図である。
この画像形成装置110は、原稿を所定の読取り部位まで給送する原稿給送部111、給送された原稿を読取る画像読取り部112、画像データに基づき作像する画像形成部113を含んで構成される。なお、画像形成装置110は、コピーモードとプリンタモードの2つのモードを有する。コピーモードは、画像読取り部112で読み取って得た画像信号(画像データ)を受け付け、受け付けた画像データを印刷するモードである。また、プリンタモードは、後述する外部PC48から出力された画像信号(画像データ)を受け付け、受け付けた画像データを印刷するモードである。
以下、画像形成装置110の基本的な動作について、図1を参照しながら説明する。
コピーモードの場合、原稿給送部111の原稿給紙装置1に積載された原稿は、1枚ずつ、画像読取り部112の原稿台ガラス面2上まで給送される。原稿が給送されると、画像読取り部112のスキャナユニット4に備わるランプ3が点灯し、原稿表面に光を照射すると共に、スキャナユニット4が副走査方向へと移動する。原稿表面からの反射光は、スキャナユニット4に備わるミラー5、ミラー6、7を介して集光部8を通過し、その後、イメージセンサ9に入力される。イメージセンサ9は、反射光を画像信号(画像データ)へ変換し、変換した画像データを画像形成部113の露光制御部10へ出力する。
また、プリンタモードの場合、外部PC48から受け付けた画像データが露光制御部10へと出力される。
また、プリンタモードの場合、外部PC48から受け付けた画像データが露光制御部10へと出力される。
露光制御部10は、受け付けた画像データに応じて、露光制御部10に搭載されたレーザ駆動装置を制御し、レーザ光を発生させる。レーザ光の照射により感光体11上に作られた潜像は、電位センサ100において、感光体11上の電位が所望の値になっているかどうかが監視される。所望の値のときは、現像器13により現像される。
感光体11は、露光制御部10の出力ライン毎に同期するように回転駆動され、簾状のライン走査を繰り返すことにより、画像を形成する。また、潜像タイミングにあわせて、転写部材積載部14又は15から転写部材が搬送され、転写部16に於いて、上記現像されたトナー像が転写部材の表面に転写される。転写されたトナー像は、定着部17で転写部材に定着された後、排出ローラ対18より装置外部に排出される。
転写後の感光体11の表面は、クリーナ25により清掃される。清掃された感光体11の表面は、補助帯電器26で除電され、1次帯電器28により良好な帯電を得られるように調整される。その上で、感光体11上の残留電荷を露光ランプ27により消去させて、1次帯電器28により感光体11の表面を帯電させる。画像形成装置110は、この工程を繰り返して複数枚の画像形成を行う。
感光体11は、露光制御部10の出力ライン毎に同期するように回転駆動され、簾状のライン走査を繰り返すことにより、画像を形成する。また、潜像タイミングにあわせて、転写部材積載部14又は15から転写部材が搬送され、転写部16に於いて、上記現像されたトナー像が転写部材の表面に転写される。転写されたトナー像は、定着部17で転写部材に定着された後、排出ローラ対18より装置外部に排出される。
転写後の感光体11の表面は、クリーナ25により清掃される。清掃された感光体11の表面は、補助帯電器26で除電され、1次帯電器28により良好な帯電を得られるように調整される。その上で、感光体11上の残留電荷を露光ランプ27により消去させて、1次帯電器28により感光体11の表面を帯電させる。画像形成装置110は、この工程を繰り返して複数枚の画像形成を行う。
転写部材の両面に画像を形成する場合は、転写部材の表面に画像が形成された後、定着部17から搬送された転写部材の後端がシート検知部19により検知されたときに、排出ローラ対18の回転を停止する。排出通路21に設けられたフラッパー20は、通路を反転通路22へ切り替える。その後、排出ローラ対18が逆転して、転写部材を反転通路22へ搬送する。転写部材は、反転通路22から反転搬送路入口23を経由して反転搬送路24へ搬送される。転写部材は、反転搬送路24から再び転写部16へ搬送されて、前記した画像形成動作と同様にして、転写部材の裏面に画像が形成される。
図2は、露光制御部10及び感光体11の構成例を示す図である。露光制御部10は、半導体レーザ43と、レーザ駆動装置31、絞り32、回転多面鏡(以下、ポリゴンミラーという。)33、f−θレンズ34、コリメータレンズ35、ビームディテクトセンサ(以下、BDセンサという。)36を含んで構成される。露光制御部10は、また、画像処理部50を有する。露光制御部10は、画像データに従ってパルス幅変調されたレーザ光を主走査方向に走査することにより、感光体11の表面を露光する。
イメージセンサ9又は外部PC48から受け付けた画像データは、画像処理部50に入力される。画像処理部50は、画像データに対して画像形成装置110の作像モードに応じたPWM(パルス幅変調)テーブル変換を行い、レーザ駆動信号としてレーザ駆動装置31に出力する。レーザ駆動装置31は、画像処理部50からレーザ駆動信号を受信し、レーザ駆動信号に基づいて半導体レーザ43を駆動する。
半導体レーザ43の内部には、レーザ光の一部を検出するPD(フォト・ダイオード)センサ(図示せず)が設けられている。画像処理部50は、PDセンサの検出信号を用いてレーザダイオードのオートパワーコントロール制御を行う。半導体レーザ43から発せられたレーザ光は、コリメータレンズ35及び絞り32によりほぼ平行光となり、所定の光径でポリゴンミラー33に入射する。ポリゴンミラー33は、矢印Qで示す方向に等角速度の回転をするように、図示しない駆動装置により駆動される。この回転に伴い、入射したレーザ光は、連続的に角度が変位された偏向ビームとなって反射される。
偏向ビームは、f−θレンズ34により集光する。その際、f−θレンズ34は、偏向ビームの歪曲収差の補正を行う。そのため、偏向ビームは、像担持体としての感光体11上に矢印Pの方向に向けて等速で結合走査される。
BDセンサ36は、ポリゴンミラー33からの反射光を検出する。BDセンサ36が出力する検出信号は、主走査方向の画像形成位置を一定にするために、ポリゴンミラー33の回転と画像データの書き込みを同期させるための同期信号(主走査同期信号)である。
BDセンサ36は、ポリゴンミラー33からの反射光を検出する。BDセンサ36が出力する検出信号は、主走査方向の画像形成位置を一定にするために、ポリゴンミラー33の回転と画像データの書き込みを同期させるための同期信号(主走査同期信号)である。
上記プロセスにより、転写部材の表面に画像が形成される。画像が形成される際、転写されたトナー像を定着部17で定着する際に加えられる熱により、転写部材が伸縮してしまう場合がある。転写部材の伸縮率は、転写部材の材質によってほぼ一定である。そのため、例えば印刷前に転写部材の種類をユーザが指定し、この指定に応じて画像処理部50が伸縮率の逆数の変倍処理を行うことで対処することができる。また、転写部材の種類の指定は、例えば後述するコントロールパネル49を介して行ったり、外部PC48から行ったりすることができる。
図3は、画像処理部50とその周辺の構成例を示すブロック図である。画像処理部50は、CPU(Central Processing Unit)51、画像セレクタ52、ラインバッファ53、乱数バッファA54、乱数バッファB55を含んで構成される。画像処理部50は、また、スキャナユニット4、イメージセンサ9、レーザ駆動装置31、BDセンサ36、外部PC48、コントロールパネル49と接続される。
CPU51は、画像処理部50及び画像形成装置110が有する各構成機器を制御する。画像セレクタ52は、コピーモード又はプリンタモードに応じて、受け付ける画像データを選択する。具体的には、コピーモードの場合では、図3に示すようにイメージセンサ9から出力される画像データCを選択するように動作する。また、プリンタモードの場合では、図3に示すように外部PC48から出力される画像データPを選択するように動作する。
CPU51は、画像処理部50及び画像形成装置110が有する各構成機器を制御する。画像セレクタ52は、コピーモード又はプリンタモードに応じて、受け付ける画像データを選択する。具体的には、コピーモードの場合では、図3に示すようにイメージセンサ9から出力される画像データCを選択するように動作する。また、プリンタモードの場合では、図3に示すように外部PC48から出力される画像データPを選択するように動作する。
外部PC48は、ユーザからのプリント開始指示の受け付けを契機に、画像形成開始信号Pを出力する。外部PC48は、また、ユーザが設定した倍率Pを出力する。この倍率Pは、例えば10[%]縮小して印刷したり、10[%]拡大して印刷したりする場合にユーザが設定する。外部PC48は、CPU51からの画像データ要求信号Pの受け付けを契機に、1ライン分の画像データPの出力を行う。
BDセンサ36は、主走査同期信号を出力する。コントロールパネル49は、ユーザからのコピー開始指示の受け付けを契機に、画像形成開始信号Cを出力する。コントロールパネル49は、また、ユーザが設定した倍率Cを出力する。この倍率Cは、例えば10[%]縮小して印刷したり、10[%]拡大して印刷したりする場合にユーザが設定する。
BDセンサ36は、主走査同期信号を出力する。コントロールパネル49は、ユーザからのコピー開始指示の受け付けを契機に、画像形成開始信号Cを出力する。コントロールパネル49は、また、ユーザが設定した倍率Cを出力する。この倍率Cは、例えば10[%]縮小して印刷したり、10[%]拡大して印刷したりする場合にユーザが設定する。
スキャナユニット4は、CPU51からの画像データ要求信号Cの受け付けを契機に、1ライン分の画像データをイメージセンサ9から出力するために副走査方向へ移動する。スキャナユニット4の副走査方向の移動について、画像形成装置110の解像度が600[dpi]である場合を例に挙げて説明する。解像度600[dpi]の場合の1ラインの長さは、25.4[mm]/600[dpi]により求められる。この場合の1ラインの長さは0.04233[mm]である。スキャナユニット4が副走査方向へ0.04233[mm]移動すれば、解像度600[dpi]の場合における1ライン相当分を移動したことになる。イメージセンサ9は、移動後のスキャン位置でスキャンした結果を画像信号に変換する。変換された画像信号は、画像データCとして出力される。
なお、画像データ要求信号C及び、画像データ要求信号Pは、1ページ分の作像動作中に複数回発生する。例えば、副走査が210[mm]のページ全体を作像する場合は、210[mm]/0.04233[mm]≒4960[回]の要求信号が発生する。発生タイミングについては後述する。
なお、画像データ要求信号C及び、画像データ要求信号Pは、1ページ分の作像動作中に複数回発生する。例えば、副走査が210[mm]のページ全体を作像する場合は、210[mm]/0.04233[mm]≒4960[回]の要求信号が発生する。発生タイミングについては後述する。
乱数バッファA54及び乱数バッファB55は、CPU51が生成した1エリア分の乱数を格納する。2つの乱数バッファの使い分けの詳細は後述する。
ラインバッファ53は、所定のライン分だけ画像データを順次格納する。ラインバッファ53は、格納手段として機能する。本実施形態においては、ラインバッファ53は6ライン(6line)分の容量(格納領域)を有する。ラインバッファ53の各ラインをそれぞれ、ラインバッファL0、L1、L2、L3、L4、L5とする。以下、ラインバッファ53を6ラインとする根拠について説明する。
ラインバッファ53は、所定のライン分だけ画像データを順次格納する。ラインバッファ53は、格納手段として機能する。本実施形態においては、ラインバッファ53は6ライン(6line)分の容量(格納領域)を有する。ラインバッファ53の各ラインをそれぞれ、ラインバッファL0、L1、L2、L3、L4、L5とする。以下、ラインバッファ53を6ラインとする根拠について説明する。
初めに、本実施形態の画像形成装置110が行うバンド処理の概要について説明する。図4は、処理対象である入力画像を模式的に表した図である。図4に示す入力画像は、主走査方向に14画素、副走査方向に20画素が配列されており、1マスが1画素を表している。各マス中に示された文字は、補正処理前の画素それぞれについて、副走査方向の位置を便宜上区別するためのものである。
バンド処理とは、入力画像全体を表す画像データの中から、一回の走査において所定のライン数(バンド処理幅)だけ画像データを読み出し、読み出した画像データに対して画像処理を行う方法である。この方法では、入力画像全体の処理が終了するまで、画像データの読み出しと、読み出した分の画像処理とが繰り返し行われる。
一例として、図4に示す入力画像において、一回の走査で読み出すライン数が4ラインであれば、図5に示すように、走査毎(図5中の走査1から走査5)に4ラインずつの画像データが出力されることになる。入力画像(図4)は、副走査方向に20ラインあるため、4ライン単位の読み出しを計5回行えば、入力画像全体の読み出しは完了する。なお、実際の処理においては、各走査毎に例えば副走査方向の変倍処理のような画像処理が行われる。
バンド処理とは、入力画像全体を表す画像データの中から、一回の走査において所定のライン数(バンド処理幅)だけ画像データを読み出し、読み出した画像データに対して画像処理を行う方法である。この方法では、入力画像全体の処理が終了するまで、画像データの読み出しと、読み出した分の画像処理とが繰り返し行われる。
一例として、図4に示す入力画像において、一回の走査で読み出すライン数が4ラインであれば、図5に示すように、走査毎(図5中の走査1から走査5)に4ラインずつの画像データが出力されることになる。入力画像(図4)は、副走査方向に20ラインあるため、4ライン単位の読み出しを計5回行えば、入力画像全体の読み出しは完了する。なお、実際の処理においては、各走査毎に例えば副走査方向の変倍処理のような画像処理が行われる。
例えば、4ラインずつ読み出すバンド処理においては、入力画像を4ライン分取得した後に4ライン分出力するということを繰り返すため、一般的には、ラインバッファは4ライン分あれば良いことになる。しかしながら、処理において4ライン分のラインバッファだけでは不足する場合がある。一例として、図5中に示す走査2の画像データ出力に対して、変倍処理を行う場合について説明する。
図6は、変倍処理のために必要なラインバッファ数(ライン数)を説明するための図である。図6に示すように、例えば副走査位置Aのラインで画素を挿入する場合には、走査1(図5)の最終ラインである副走査位置Xのラインデータが必要となる。また、副走査位置Dのラインで画素を削除する場合には、走査3(図5)の最初のラインである副走査位置Yのラインデータが必要となる。変倍処理は、拡大するか又は縮小するかのいずれか一方の処理であることから、必要なラインバッファ数は、4+1=5ライン分あれば良いことになる。
さらに、分割された各エリアのエリア境界を含む走査においてバンド処理を行う場合、「バンド処理幅+1」を超える数のラインバッファを必要とする場合がある。以下、この場合について具体的に説明する。
図7は、エリアの副走査方向の長さ(副走査エリア長)が9画素である入力画像の一部を示した図である。図7中の点線は、エリアの境界線を示しており、画素X(マス中の文字がX)と画素1(マス中の文字が1)の間、画素9(マス中の文字が9)と画素1の間、画素9と画素Y(マスの中の文字がY)の間それぞれがエリア境界である。図7を正面から見て、上方のエリアをエリアA、下方のエリアをエリアBとする。以下、エリアA、エリアBに対して、4ラインのバンド処理幅で、画像サイズを縮小する変倍処理を行った場合の例について説明する。
図7は、エリアの副走査方向の長さ(副走査エリア長)が9画素である入力画像の一部を示した図である。図7中の点線は、エリアの境界線を示しており、画素X(マス中の文字がX)と画素1(マス中の文字が1)の間、画素9(マス中の文字が9)と画素1の間、画素9と画素Y(マスの中の文字がY)の間それぞれがエリア境界である。図7を正面から見て、上方のエリアをエリアA、下方のエリアをエリアBとする。以下、エリアA、エリアBに対して、4ラインのバンド処理幅で、画像サイズを縮小する変倍処理を行った場合の例について説明する。
図8は、図7に示すエリアAとエリアBにおいて、画素を削除するランダムな位置が特定された様子を表した図である。図9は、図8に示した位置で画素を削除した結果、つまり、画像サイズを縮小する変倍処理を行った結果を示した図である。図9に示す網線で塗られた位置のマスは、縮小する変倍処理によって画素が削除された位置を示している。図9では、変倍処理によりエリアA、エリアBともに副走査方向に1ライン減算され、その結果、副走査エリア長が9画素から8画素となっている様子が見てとれる。
図10は、図9に示す画像を4ラインのバンド処理幅でバンド処理した場合の出力画像データ(走査1から走査5)と、変倍処理に必要なラインデータ及びラインバッファ数を表した図である。なお、画像形成装置の副走査方向の変倍率が十分小さく、画素の挿入又は削除の頻度がバンド処理幅より小さい場合を例に挙げて説明する。具体的には、例えばバンド処理幅が4ラインの場合であれば、画素の挿入又は削除が4ラインに1回未満の頻度で行われる変倍率である。
画素の挿入が4ラインに1回の頻度で行われる倍率は、4ライン分の画像データが5ライン分に変換されるため、5/4=1.25となる。つまり、変倍率は125[%]である。また、画素の削除が4ラインに1回の頻度で行われる倍率は、4ライン分の画像データが3ライン分に変換されるため、3/4=0.75となる。つまり、変倍率は75[%]である。変倍率が75[%]から125[%]の範囲にあるとして説明する。
なお、既知の画像形成装置において多く使用される変倍率は、99[%]から101[%]の範囲である。また、バンド処理幅が異なる画像形成装置では、上記した倍率範囲が異なる場合がある。しかし、その場合においてもバンド処理幅は最大でも32ライン程度であり、99[%]から101[%]に対して、上記した75[%]から125[%]は十分に大きな範囲となる。
なお、既知の画像形成装置において多く使用される変倍率は、99[%]から101[%]の範囲である。また、バンド処理幅が異なる画像形成装置では、上記した倍率範囲が異なる場合がある。しかし、その場合においてもバンド処理幅は最大でも32ライン程度であり、99[%]から101[%]に対して、上記した75[%]から125[%]は十分に大きな範囲となる。
図10に示すように、走査1、走査2、走査4、走査5では、必要なラインバッファ数は5ライン(5line)である。これとは異なり、走査3では、必要なラインバッファ数が6ライン(6line)であることが見て取れる。走査1から走査5の中で、走査3のみ必要なラインバッファ数が1多くなる理由は、走査3がエリアAとエリアBに跨っており、このラインをバンド処理していることに起因する。通常は、一回の走査中に発生する画素の挿入又は削除の回数は、主走査位置毎に1回である。しかし、エリアを跨いだ走査では、エリアAの処理に用いられる乱数値と、エリアBの処理に用いられる乱数値の組み合わせによっては、画素の挿入又は削除が同じ主走査位置で2回発生する場合がある。
例えば、図10に示す走査3の主走査位置Pにおいては、画素の削除が2回発生している。また、エリアAとエリアBに跨るラインをバンド処理する場合には、エリアAとエリアBの両方の乱数値を生成し、生成した乱数値を保持しなければならない。なお、拡大処理においては、1回の走査で2回以上の画素の追加が発生したとしても、ラインバッファ数は5ラインで問題はない。なぜなら、画素の追加を行う際に4ライン以外のラインデータを必要とするのは、図6に示す副走査位置Aのラインで画素の追加を行う場合のみである。なお、図6に示す副走査位置B、C、Dのラインにおける画素の追加は、それぞれ副走査位置A、B、Cのラインデータに基づき行われる。
このように、エリアを跨る走査において必要なラインバッファ数は4+2=6となり、6ライン分必要になる。また、エリアを跨ぐ走査においては、乱数バッファも跨るエリアの数だけ必要となる。乱数バッファの動作の詳細については後述する。
図11は、画像サイズを縮小又は拡大する処理の処理手順例を示すフローチャートである。初めに、プリンタモード時における縮小処理について説明する。
画像形成装置110、外部PC48から画像形成開始信号Pの受信及び画像データPの受け付けを契機に、作像を開始する。なお、画像データPとして受け付けた入力画像は、主走査方向及び副走査方向に配列された画素の集合である。なお、説明の便宜上、主走査方向の長さを表す主走査方向入力画像サイズin_xが14画素、副走査方向の長さを表す副走査方向入力画像サイズin_yが20画素である場合を例に挙げて説明する。また、バンド処理幅dを4画素(4ライン)、倍率pを90.9090・・・[%]とする。また、ラインバッファ53のライン数Lを6(d+2=4+2=6)、分割エリアの最小副走査幅を5(d+1=5)とする。
画像形成装置110、外部PC48から画像形成開始信号Pの受信及び画像データPの受け付けを契機に、作像を開始する。なお、画像データPとして受け付けた入力画像は、主走査方向及び副走査方向に配列された画素の集合である。なお、説明の便宜上、主走査方向の長さを表す主走査方向入力画像サイズin_xが14画素、副走査方向の長さを表す副走査方向入力画像サイズin_yが20画素である場合を例に挙げて説明する。また、バンド処理幅dを4画素(4ライン)、倍率pを90.9090・・・[%]とする。また、ラインバッファ53のライン数Lを6(d+2=4+2=6)、分割エリアの最小副走査幅を5(d+1=5)とする。
CPU51は、入力画像の画像サイズ(走査方向入力画像サイズin_xの値及び副走査方向入力画像サイズin_yの値)を取得する(S501)。具体的には、主走査方向に14画素、副走査方向に20画素である。
CPU51は、外部PC48から倍率情報(倍率pの値)を取得する(S502)。具体的には、90.9090・・・[%]である。
CPU51は、入力画像を副走査方向に分割し、分割された各エリアの副走査長ayの画素数を演算する(S503)。縮小処理の場合は、各エリア内で副走査方向に1画素削除されることから、式1で求めることができる。
CPU51は、外部PC48から倍率情報(倍率pの値)を取得する(S502)。具体的には、90.9090・・・[%]である。
CPU51は、入力画像を副走査方向に分割し、分割された各エリアの副走査長ayの画素数を演算する(S503)。縮小処理の場合は、各エリア内で副走査方向に1画素削除されることから、式1で求めることができる。
ay−1/ay = p/100・・・(式1)
また、式1を整理すると式2のようになる。
また、式1を整理すると式2のようになる。
ay=100/(100−p)・・・(式2)
縮小処理における副走査長ayは、ay = 100/(100−90.9090…)=11[画素]となる。つまり、11ラインに1回の頻度で画素の削除が行われる。
縮小処理における副走査長ayは、ay = 100/(100−90.9090…)=11[画素]となる。つまり、11ラインに1回の頻度で画素の削除が行われる。
CPU51は、副走査カウンタvcnt及びカウンタvacnt、フラグvaflagそれぞれを初期化する(S504)。副走査カウンタvcntは、出力画像の総出力ライン数をカウントするためのものである。ステップS504の処理により、副走査カウンタvcntの値は0(ゼロ。以下同じ。)に初期化される。カウンタvacntは、各エリアでの出力ライン数をカウントするためのものである。縮小処理の場合のカウンタvacntの最大値vacnt(max)は、vacnt(max)=ay−1−1で表される。これは、カウンタvacntは「0」からカウントが開始されることに対する「−1」と、当初11画素であった副走査長ayが10画素となり、1画素早くエリアが終了することに対する「−1」を反映している。なお、拡大処理におけるカウンタvacntの最大値vacnt(max)は、vacnt(max)=ay−1+1となる。詳細は後述する。フラグvaflagは、出力ラインのそれぞれを画像処理する際に、乱数バッファA54あるいは乱数バッファB55に格納された乱数を使用するかを決定するためのフラグである。フラグvaflagの詳細は後述する。
また、バンド処理幅dが4ラインであることから、一回の走査毎にカウンタvacntの値に4が加算(+4)される。ただし、加算した結果、最大値vacnt(max)の値を超えた場合は、その超えた分について0からカウントし直す。
ここでは、バンド処理により出力された画像データにおいて、カウンタvacntの1ライン目をカウンタvacnt(0)、2ライン目をカウンタvacnt(1)、3ライン目をカウンタvacnt(2)、4ライン目をカウンタvacnt(3)とする。カウンタvacntを初期化すると、カウンタvacnt(0)=0、カウンタvacnt(1)=1、カウンタvacnt(2)=2、カウンタvacnt(3)=3となる。
また、バンド処理により出力された画像データにおいて、フラグvaflagの1ライン目をフラグvaflag(0)、2ライン目をフラグvaflag(1)、3ライン目をフラグvaflag(2)、4ライン目をフラグvaflag(3)とする。フラグvaflagを初期化すると、フラグvaflag(0)=0、フラグvaflag(1)=0、フラグvaflag(2)=0、フラグvaflag(3)=0となる。
ここでは、バンド処理により出力された画像データにおいて、カウンタvacntの1ライン目をカウンタvacnt(0)、2ライン目をカウンタvacnt(1)、3ライン目をカウンタvacnt(2)、4ライン目をカウンタvacnt(3)とする。カウンタvacntを初期化すると、カウンタvacnt(0)=0、カウンタvacnt(1)=1、カウンタvacnt(2)=2、カウンタvacnt(3)=3となる。
また、バンド処理により出力された画像データにおいて、フラグvaflagの1ライン目をフラグvaflag(0)、2ライン目をフラグvaflag(1)、3ライン目をフラグvaflag(2)、4ライン目をフラグvaflag(3)とする。フラグvaflagを初期化すると、フラグvaflag(0)=0、フラグvaflag(1)=0、フラグvaflag(2)=0、フラグvaflag(3)=0となる。
CPU51は、ラインバッファ53を初期化する(S505)。具体的には、ラインバッファL0、L1、L2、L3、L4の全てのバッファに対して、データ0で上書きを行う。
CPU51は、BDセンサ36から主走査同期信号を受け付けたか否かを判別する(S506)。主走査同期信号の受け付けを契機に(S506:yes)、CPU51はエリア更新、つまり、新しいエリアで処理が開始されるか否かを判別する(S507)。具体的には、カウントvacnt(0)からカウントvacnt(3)までのいずれかの値が0であれば、エリア更新したと判別する。エリア更新したと判別した場合(S507:yes)、ステップS508の処理へ進む。また、そうでない場合(S507:no)、ステップS515の処理へ進む。
CPU51は、BDセンサ36から主走査同期信号を受け付けたか否かを判別する(S506)。主走査同期信号の受け付けを契機に(S506:yes)、CPU51はエリア更新、つまり、新しいエリアで処理が開始されるか否かを判別する(S507)。具体的には、カウントvacnt(0)からカウントvacnt(3)までのいずれかの値が0であれば、エリア更新したと判別する。エリア更新したと判別した場合(S507:yes)、ステップS508の処理へ進む。また、そうでない場合(S507:no)、ステップS515の処理へ進む。
CPU51は、画像の出力が1走査目(一回目の走査)であるか否かを判別する(S508)。具体的には、副走査カウンタvcntの値が0であれば、1走査目であると判別する。1走査目であると判別した場合(S508:yes)、ステップS510の処理へ進む。また、そうでない場合(S508:no)、ステップS509の処理へ進む。
CPU51は、倍率pの値に基づいて、縮小処理又は拡大処理のいずれの処理であるかを判別する(S509)。縮小処理であると判別した場合(S509:yes)、ステップS511の処理へ進む。また、そうでない場合(S509:no)、ステップS512の処理へ進む。
CPU51は、倍率pの値に基づいて、縮小処理又は拡大処理のいずれの処理であるかを判別する(S510)。縮小処理であると判別した場合(S510:yes)、ステップS513の処理へ進む。また、そうでない場合(S510:no)、ステップS514の処理へ進む。
CPU51は、倍率pの値に基づいて、縮小処理又は拡大処理のいずれの処理であるかを判別する(S509)。縮小処理であると判別した場合(S509:yes)、ステップS511の処理へ進む。また、そうでない場合(S509:no)、ステップS512の処理へ進む。
CPU51は、倍率pの値に基づいて、縮小処理又は拡大処理のいずれの処理であるかを判別する(S510)。縮小処理であると判別した場合(S510:yes)、ステップS513の処理へ進む。また、そうでない場合(S510:no)、ステップS514の処理へ進む。
CPU51は、ラインバッファ53の更新を行う(S511)。具体的には、CPU51は、ラインバッファL5に格納されている画像データをコピーし、コピーした画像データをラインバッファL0に格納する。また、CPU51は、外部PC48に対して画像データ要求信号Pを5回出力する。そして、画像データ要求信号Pに応答して外部PC48から出力された5ライン分の画像データを、ラインバッファL1、L2、L3、L4、L5の順番で格納する。
CPU51は、ラインバッファ53の更新を行う(S512)。具体的には、CPU51は、ラインバッファL3に格納されている画像データをコピーし、コピーした画像データをラインバッファL0に格納する。また、ラインバッファL4に格納されている画像データをコピーし、コピーした画像データをラインバッファL1に格納する。さらに、ラインバッファL5に格納されている画像データをコピーし、コピーした画像データをラインバッファL2に格納する。そして、外部PC48に対して画像データ要求P信号を3回出力する。CPU51は、画像データ要求信号Pに応答して外部PC48から出力された3ライン分の画像データを、ラインバッファL3、L4、L5の順番で格納させる。
CPU51は、ラインバッファ53の準備を行う(S513)。ステップS513の処理は、一回目の走査における縮小処理を行うため、ラインバッファ53に画像データを格納する処理である。具体的には、CPU51は、外部PC48に対して画像データ要求P信号を6回出力する。そして、画像データ要求信号Pに応答して外部PC48から出力された6ライン分の画像データを、ラインバッファL0、L1、L2、L3、L4、L5の順番で格納する。
CPU51は、ラインバッファの準備を行う(S514)。ステップS514の処理は、一回目の走査における拡大処理を行うため、ラインバッファ53に画像データを格納する処理である。具体的には、CPU51は、ラインバッファL0に格納されている画像データをデータ0で上書きを行い、全てのデータをクリアする。CPU51は、外部PC48に対して画像データ要求P信号を5回出力する。そして、画像データ要求信号Pに応答して外部PC48から出力された5ライン分のデータを、ラインバッファL1、L2、L3、L4、L5の順番で格納する。
CPU51は、ラインバッファ53の更新を行う(S515)。具体的には、CPU51は、ラインバッファL4に格納されている画像データをコピーし、コピーした画像データをラインバッファL0に格納する。また、ラインバッファL5に格納されている画像データをコピーし、コピーした画像データをラインバッファL1に格納する。CPU51は、外部PC48に対して画像データ要求P信号を4回出力する。そして、画像データ要求信号Pに応答して外部PC48から出力された4ライン分の画像データを、ラインバッファL2、L3、L4、L5の順番で格納する。
ここで、ステップS511からステップS515それぞれの処理の前後における、ラインバッファL0、L1、L2、L3、L4、L5それぞれに格納されている画像データについて説明する。図12は、ステップS511からステップS515それぞれの処理の前後の、ラインバッファL0、L1、L2、L3、L4、L5それぞれの格納データを模式的に表した図である。図12では、各ステップの処理前を「更新・準備前」とし、処理後を「更新・準備後」として示している。例えば、図12中に示す「line1」は、入力画像の先頭ラインの画像データである。また、図12中に示す「N」は、1以上の任意の整数である。図12中に示す「0(データ0)」は、入力画像とは無関係に、全てのデータが0であることを示している。なお、図12中の網線で囲まれているラインは、処理の前後で共通して使用される画像データである。例えば、ステップS512の処理では、「lineN+3」、「lineN+4」、「lineN+5」である。
図11に戻り、CPU51は、一回の走査における全ての主走査位置に対する乱数rndを生成する(S516)。本実施形態の画像形成装置110では、生成する乱数値rndの範囲は、分割エリアの副走査位置すべてをとり得るため、「0」から「副走査長ay−1」の範囲となる。具体的な乱数発生手順については、後述するステップS601からステップS612(図14)の処理において説明する。
ステップS517からステップS524の各処理は、一回の走査における画像処理である。
CPU51は、主走査位置xを0に初期化する(S517)。CPU51は、主走査位置xに対応する乱数値rndを、乱数バッファA54又は乱数バッファB55から取得する(S518)。具体的には、フラグvalfagが「0」であれば乱数バッファA54から取得する。また、フラグvaflagが「1」であれば、乱数バッファB55から取得する。
CPU51は、主走査位置xを0に初期化する(S517)。CPU51は、主走査位置xに対応する乱数値rndを、乱数バッファA54又は乱数バッファB55から取得する(S518)。具体的には、フラグvalfagが「0」であれば乱数バッファA54から取得する。また、フラグvaflagが「1」であれば、乱数バッファB55から取得する。
CPU51は、取得した乱数値rndと、カウンタvacnt(0)からvacnt(3)の各値、倍率pの値に基づいて、変倍処理を行う(S519)。具体的な変倍処理順については、後述するステップS701からステップS711(図16)の各処理において説明する。
CPU51は、主走査位置xを更新する(S520)。具体的には、主走査位置xの値に1を加算(+1)する。
CPU51は、主走査位置xの値と、入力画像の主走査方向入力画像サイズin_xの値とを比較して、全ての主走査位置で画像処理が行われたか否かを判別する(S521)。
具体的には、「x≧in_x−1」が満たされたとき、全ての主走査位置で画像処理が行われたと判別する。全ての主走査位置で画像処理が行われたと判別した場合(S521:yes)、ステップS522の処理へ進む。また、そうでない場合(S521:no)、ステップS518の処理へ戻る。
CPU51は、主走査位置xを更新する(S520)。具体的には、主走査位置xの値に1を加算(+1)する。
CPU51は、主走査位置xの値と、入力画像の主走査方向入力画像サイズin_xの値とを比較して、全ての主走査位置で画像処理が行われたか否かを判別する(S521)。
具体的には、「x≧in_x−1」が満たされたとき、全ての主走査位置で画像処理が行われたと判別する。全ての主走査位置で画像処理が行われたと判別した場合(S521:yes)、ステップS522の処理へ進む。また、そうでない場合(S521:no)、ステップS518の処理へ戻る。
CPU51は、カウンタvacnt及びフラグvaflagを更新する(S522)。具体的には、カウンタvacnt(0)からカウンタvacnt(3)それぞれの値に4を加算(+4)する。ただし、前述した通り、縮小処理時のカウンタvacntの最大値vacnt(max)は、vacnt(max)=ay−1−1である。そのため、最大値を超えた場合は、その超えた分を0からカウントし直す。
一例として、ay=11、vacnt(max)=9、vacnt(0)=5、vacnt(1)=6、vacnt(2)=7、vacnt(3)=8である場合の更新について説明する。この場合に、カウンタvacnt(0)からカウンタvacnt(3)を更新すると、以下に示す(a)から(d)のようになる。
(a)vacnt(0)=5+4=9
(b)vacnt(1)=6+4=10、よって、vacnt(1)=0
(c)vacnt(2)=7+4=11、よって、vacnt(2)=1
(d)vacnt(3)=8+4=12、よって、vacnt(3)=2
(b)vacnt(1)=6+4=10、よって、vacnt(1)=0
(c)vacnt(2)=7+4=11、よって、vacnt(2)=1
(d)vacnt(3)=8+4=12、よって、vacnt(3)=2
各走査目毎のカウンタvacnt(0)からカウンタvacnt(3)それぞれの値を図13に示す。図13に示すように、例えばカウンタvacnt(0)の値は、5走査目においては6、6走査目においては0となっている。
また、カウンタvacnt(0)からカウンタvacnt(3)を更新した結果、その値が「0」から「d−1」の範囲に含まれることになった場合には、当該ラインは次の分割エリアに処理に移行したと判別する。この場合には、フラグvaflag(0)からフラグvaflag(3)を反転(更新)する。
具体的には、フラグvaflag=0のときはフラグvaflag=1と反転し、フラグvaflag=1のときはフラグvaflag=0と反転する。
具体的には、フラグvaflag=0のときはフラグvaflag=1と反転し、フラグvaflag=1のときはフラグvaflag=0と反転する。
例えば、上記したカウンタvacnt(0)からカウンタvacnt(3)の更新の際に、フラグvaflag=0であれば、フラグvaflag(0)からフラグvaflag(3)の更新結果は以下に示す(a)から(d)のようになる。
(a)vacnt(0)=9であり、「0」から「d−1」の範囲に含まれない。その結果、フラグvaflag(0)は更新されず、フラグvaflag(0)=0
(b)vacnt(1)=0であり、「0」から「d−1」の範囲に含まれる。その結果、フラグvaflag(1)は更新され、フラグvaflag(0)=1
(c)vacnt(2)=1であり、「0」から「d−1」の範囲に含まれる。その結果、フラグvaflag(2)は更新され、フラグvaflag(2)=1
(d)vacnt(3)=2であり、「0」から「d−1」の範囲に含まれる。その結果、フラグvaflag(3)は更新され、フラグvaflag(3)=1
(b)vacnt(1)=0であり、「0」から「d−1」の範囲に含まれる。その結果、フラグvaflag(1)は更新され、フラグvaflag(0)=1
(c)vacnt(2)=1であり、「0」から「d−1」の範囲に含まれる。その結果、フラグvaflag(2)は更新され、フラグvaflag(2)=1
(d)vacnt(3)=2であり、「0」から「d−1」の範囲に含まれる。その結果、フラグvaflag(3)は更新され、フラグvaflag(3)=1
CPU51は、副走査カウンタvcntを更新する(S523)。具体的には、副走査カウンタvcntの値に4を加算(+4)する。
CPU51は、画像出力が全て終了したか否かを判別する(S524)。出力画像の総ライン数は、副走査方向入力画像サイズin_yの値に倍率pの値を乗算したものである。具体的には、「vcnt≧[in_y×p]([ ]は、中の値を超える最小の整数を表わす記号である。)」が満たされた場合、画像出力が全て終了したと判別する。画像出力が全て終了したと判別した場合(S524:yes)、一連の作像を終了する。また、そうでない場合(S524:no)、ステップS506の処理へ戻り、次走査の画像処理を行う。なお、副走査方向入力画像サイズin_yは1からカウントが開始され、副走査カウンタvcntは0からカウントが開始される。
CPU51は、画像出力が全て終了したか否かを判別する(S524)。出力画像の総ライン数は、副走査方向入力画像サイズin_yの値に倍率pの値を乗算したものである。具体的には、「vcnt≧[in_y×p]([ ]は、中の値を超える最小の整数を表わす記号である。)」が満たされた場合、画像出力が全て終了したと判別する。画像出力が全て終了したと判別した場合(S524:yes)、一連の作像を終了する。また、そうでない場合(S524:no)、ステップS506の処理へ戻り、次走査の画像処理を行う。なお、副走査方向入力画像サイズin_yは1からカウントが開始され、副走査カウンタvcntは0からカウントが開始される。
ここで、ステップS516の処理について具体的に説明する。図14は、ステップS516の処理(乱数値rndを生成する処理)の具体的な処理手順の一例を示すフローチャートである。
CPU51は、主走査カウンタxxを初期化(xx=0)する(S601)。CPU51は、乱数を1つ生成する(S602)。
ここで、乱数値について詳しく説明する。本実施形態では、乱数出力回路の一例として、原始多項式を利用した疑似乱数生成法を使用して乱数値を生成し、生成した乱数値を出力するものについて説明する。図15(a)、(b)は、16次の原始多項式を回路化した乱数出力回路を模式的に示した図である。
乱数出力回路は、16個の2値データの記録素子を縦列接続するとともに、いずれかの記録素子間に3つの論理演算回路を介在させて構成される。複数個の記録素子を、それぞれbit(ビット)15からbit0(図9(a)中では、15、14・・・と示している)と定義する。また、bit14とbit13、bit13とbit12、bit11とbit10の間には、それぞれ論理演算回路の一例であるEXORゲートが介在する。シード値は、乱数値の種となるもので、乱数出力回路の各bitの2値データの集合として定義される。
CPU51は、主走査カウンタxxを初期化(xx=0)する(S601)。CPU51は、乱数を1つ生成する(S602)。
ここで、乱数値について詳しく説明する。本実施形態では、乱数出力回路の一例として、原始多項式を利用した疑似乱数生成法を使用して乱数値を生成し、生成した乱数値を出力するものについて説明する。図15(a)、(b)は、16次の原始多項式を回路化した乱数出力回路を模式的に示した図である。
乱数出力回路は、16個の2値データの記録素子を縦列接続するとともに、いずれかの記録素子間に3つの論理演算回路を介在させて構成される。複数個の記録素子を、それぞれbit(ビット)15からbit0(図9(a)中では、15、14・・・と示している)と定義する。また、bit14とbit13、bit13とbit12、bit11とbit10の間には、それぞれ論理演算回路の一例であるEXORゲートが介在する。シード値は、乱数値の種となるもので、乱数出力回路の各bitの2値データの集合として定義される。
図15(a)において、乱数出力回路のシード値は「1111011011001001」である。ここで、2^nが乱数値の最大値を超える最小の指数nを求める。本実施形態においては、乱数値の最大値が10(ay−1=10)であることから、n=4となる。この指数nの値は、図15(a)に示される乱数出力回路から、何bit分のデータを取得すれば良いかに対応する。本実施形態においては、bit3からbit0までの計4bitを取得する。
例えば、生成される乱数値は、このシード値のbit3からbit0の出力で決定される。図15(a)において、bit3からbit0の値を順に並べると、「1001」となる。これを10進数化することにより、乱数値「9」が生成される。乱数値を再度生成したい場合は、記録素子が保持する2値データをそれぞれ所定方向に隣接する他の記録素子に移行させ、これにより変化したシード値に基づいて次の乱数値を生成する。具体的は、乱数出力回路のシード値を右側にシフトさせる。乱数出力回路のシード値を右側にシフトさせて、乱数値を再度生成するときの具体的な手順は以下の通りである。
(a)bit0の値を一時変数temp(図示省略)に保存する。
(b)bit0の値にbit1の値を代入する。
(c)bit1の値にbit2の値を代入する。
(d)bit2の値にbit3の値を代入する。
(e)bit3の値にbit4の値を代入する。
(f)bit4の値にbit5の値を代入する。
(g)bit5の値にbit6の値を代入する。
(h)bit6の値にbit7の値を代入する。
(i)bit7の値にbit8の値を代入する。
(j)bit8の値にbit9の値を代入する。
(k)bit9の値にbit10の値を代入する。
(l)bit10の値に一時変数tempとbit11のEXOR値を代入する。
(m)bit11の値にbit12の値を代入する。
(n)bit12の値に一時変数tempとbit13のEXOR値を代入する。
(o)bit13の値に一時変数tempとbit14のEXOR値を代入する。
(p)bit14の値にbit15の値を代入する。
(q)bit15の値に一時変数tempの値を代入する。
このように、(a)から(q)まで処理されて、次の乱数値が生成される。
(b)bit0の値にbit1の値を代入する。
(c)bit1の値にbit2の値を代入する。
(d)bit2の値にbit3の値を代入する。
(e)bit3の値にbit4の値を代入する。
(f)bit4の値にbit5の値を代入する。
(g)bit5の値にbit6の値を代入する。
(h)bit6の値にbit7の値を代入する。
(i)bit7の値にbit8の値を代入する。
(j)bit8の値にbit9の値を代入する。
(k)bit9の値にbit10の値を代入する。
(l)bit10の値に一時変数tempとbit11のEXOR値を代入する。
(m)bit11の値にbit12の値を代入する。
(n)bit12の値に一時変数tempとbit13のEXOR値を代入する。
(o)bit13の値に一時変数tempとbit14のEXOR値を代入する。
(p)bit14の値にbit15の値を代入する。
(q)bit15の値に一時変数tempの値を代入する。
このように、(a)から(q)まで処理されて、次の乱数値が生成される。
図15(b)は、シフト後の乱数出力回路のシード値を示す図である。ここで、先ほどと同様に、このシード値のbit3からbit0の出力で決定されるとする。図15(b)において、bit3からbit0の値を順に並べると、「0100」となる。これを10進数化することにより、乱数値「4」が生成される。
図14に戻り、CPU51は、ステップS602の処理で生成された乱数値rndが、決定された範囲を満たすものであるか否かを判別する(S603)。本実施形態においては、生成された乱数値rndが「0」から「10」の範囲内であるか否かが判別される。範囲外であった場合(S603:no)、CPU51は、乱数出力回路のシード値をシフトさせる(S604)。その後、改めて乱数値rndを生成させる。また、そうでない場合(S603:yes)、つまり、生成された乱数値rndが「10」以下であれば、CPU51は、この乱数値rndの格納先を決定するフラグaが「0」又は「1」のいずれであるかを判別する(S605)。フラグaが「0」であると判別した場合(S605:yes)、生成された乱数値rndを乱数バッファA54に格納する(S606)。また、フラグaが「1」であると判別した場合(S606:no)、生成された乱数値rndを乱数バッファB55に格納する(S607)。
CPU51は、主走査カウンタxxを1進める(S608)。具体的には、主走査カウンタxxの値を、xx=xx+1にする。
CPU51は、全ての主走査位置に対応する乱数値の生成が終了したか否かを判別する(S609)。なお、主走査方向入力画像サイズin_xは1からカウントが開始され、主走査カウンタxxは0からカウントが開始される。「主走査位置xx≧ 主走査方向入力画像サイズin_x−1」となったときに、全ての主走査位置に対応する乱数値の生成が終了したと判別する。生成が終了したと判別した場合(S609:yes)、ステップS610の処理へ進む。また、そうでない場合(S609:no)、ステップS602の処理へ戻る。
CPU51は、全ての主走査位置に対応する乱数値の生成が終了したか否かを判別する(S609)。なお、主走査方向入力画像サイズin_xは1からカウントが開始され、主走査カウンタxxは0からカウントが開始される。「主走査位置xx≧ 主走査方向入力画像サイズin_x−1」となったときに、全ての主走査位置に対応する乱数値の生成が終了したと判別する。生成が終了したと判別した場合(S609:yes)、ステップS610の処理へ進む。また、そうでない場合(S609:no)、ステップS602の処理へ戻る。
ステップS610からステップS612までの各処理は、乱数値rndを格納する乱数バッファA54又は乱数バッファB55を切り替えるためのフラグaを反転させる処理である。
CPU51は、フラグaが「0」又は「1」のいずれであるかを判別する(S610)。フラグaが「0」であると判別した場合(S610:yes)、フラグa=1とする(S611)。また、そうでない場合(S610:no)、フラグa=0とする(S612)。
このように、ステップS601からステップS612の各処理により、各主走査位置に対応した乱数値rndの全てが、フラグaの値に応じて乱数バッファA54あるいは乱数バッファB55に格納される。
CPU51は、フラグaが「0」又は「1」のいずれであるかを判別する(S610)。フラグaが「0」であると判別した場合(S610:yes)、フラグa=1とする(S611)。また、そうでない場合(S610:no)、フラグa=0とする(S612)。
このように、ステップS601からステップS612の各処理により、各主走査位置に対応した乱数値rndの全てが、フラグaの値に応じて乱数バッファA54あるいは乱数バッファB55に格納される。
図11に示すステップS519の処理について具体的に説明する。図16は、ステップS519の処理(画像出力処理)の具体的な処理手順の一例を示すフローチャートである。図16に示す処理は、カウンタvacnt(0)、カウンタ vacnt(1)、カウンタ vacnt(2)、カウンタvacnt(3)それぞれに対して行われる。つまり、カウンタvacnt(0)を用いた処理は、出力画像の1ライン目のデータを決定し、カウンタvacnt(1)を用いた処理は、出力画像の2ライン目のデータを決定する。また、カウンタvacnt(2)を用いた処理は3ライン目、カウンタvacnt(3)を用いた処理は4ライン目のデータを決定する。ここでは、代表してカウンタvacnt(0)を例に挙げて説明する。なお、カウンタvacnt(1)、カウンタvacnt(2)、カウンタvacnt(3)に対しても同様に処理される。
CPU51は、倍率pの値に基づいて、縮小処理又は拡大処理のいずれの処理であるかを判別する(S701)。縮小処理であると判別した場合(S701:yes)、ステップS702の処理へ進む。また、そうでない場合(S701:no)、ステップS707の処理へ進む。ここでは、縮小処理であることから(S701:yes)、ステップS702の処理へ進む。
なお、ステップS707からステップS711の各処理は、後述する拡大処理の処理手順である。
なお、ステップS707からステップS711の各処理は、後述する拡大処理の処理手順である。
CPU51は、ステップS518(図11)の処理で取得した、主走査位置xに対応する乱数値rndの値と、カウンタvacnt(0)の値とを比較する(S702)。比較した結果、「rnd<vacnt(0)」である場合(S702:yes)、ステップS703の処理へ進む。また、そうでない場合(S702:no)、ステップS706の処理へ進む。
CPU51は、ステップS518(図11)の処理で取得した、主走査位置xに対応する乱数値rndの値と、カウンタvacnt(0)の値とを比較する(S703)。比較の結果、「rnd=vacnt(0)」である場合(S703:yes)、ステップS704の処理へ進む。また、そうでない場合(S703:no)、ステップS705の処理へ進む。
CPU51は、ステップS518(図11)の処理で取得した、主走査位置xに対応する乱数値rndの値と、カウンタvacnt(0)の値とを比較する(S703)。比較の結果、「rnd=vacnt(0)」である場合(S703:yes)、ステップS704の処理へ進む。また、そうでない場合(S703:no)、ステップS705の処理へ進む。
CPU51は、縮小処理(変倍出力処理)を行う(S704)。ステップ704の処理は、同一走査中の同一主走査位置において画素の削除が1回だけ行われるケースと、2回行われるケースとで処理が異なる。ここでは、バンド処理の4ラインそれぞれに対応する乱数を、乱数rnd(0)、rnd(1)、rnd(2)rnd(3)と定義する。
カウンタvacnt(0)に関する処理では、ラインバッファL1から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL3から、そうでない場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL4から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL5から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL4から主走査位置xに対応するデータを取得し、これを出力する。これらの処理により、エリア内において乱数値rndで特定された位置で1画素削除したことになる。
カウンタvacnt(0)に関する処理では、ラインバッファL1から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL3から、そうでない場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL4から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL5から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL4から主走査位置xに対応するデータを取得し、これを出力する。これらの処理により、エリア内において乱数値rndで特定された位置で1画素削除したことになる。
CPU51は、乱数前出力処理を行う(S705)。ステップ705の処理は、同一走査中の同一主走査位置において、処理を行うライン前に画素の削除が行われたか否かにより処理が異なる。
カウンタvacnt(0)に関する処理では、ラインバッファL0から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL2から、そうでない場合には、ラインバッファL1から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL3から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL2から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL4から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(0)に関する処理では、ラインバッファL0から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL2から、そうでない場合には、ラインバッファL1から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL3から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL2から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL4から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに相当するデータを取得し、これを出力する。
CPU51は、乱数後出力処理を行う(S706)。ステップ706の処理は、同一走査中の同一主走査位置において、処理を行うライン前に画素の削除が行われたか否かにより処理が異なる。
カウンタvacnt(0)に関する処理では、ラインバッファL1から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL3から、そうでない場合には、ラインバッファL2から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL4から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL5から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL4から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(0)に関する処理では、ラインバッファL1から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL3から、そうでない場合には、ラインバッファL2から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL4から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL5から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL4から主走査位置xに相当するデータを取得し、これを出力する。
図17は、本実施形態の縮小処理における一連のフローを整理して表した図である。図17では、入力画像、ラインバッファL0、L1、L2、L3、L4、L5それぞれに格納される画像データ、乱数値(A、B)を模式的に表している。図17は、さらに、出力画像データ、カウンタvacnt(0)からvacnt(3)の値を示した上で、各走査毎(走査1から走査5)に整理したものである。なお、図中の網点の掛けられているラインバッファ(line buf)のデータは、処理中の走査においては使用されないデータである。
次に、プリンタモード時における画像の拡大処理について説明する。基本的な処理手順は縮小処理の場合に準じて行われる。以下、縮小処理の場合の処理手順とは異なる点を中心に説明する。
なお、主走査方向入力画像サイズin_xを14画素、副走査方向入力画像サイズin_yを20画素、バンド処理幅dを4画素(4ライン)、倍率pを111.111111・・・[%]である場合を例に挙げて説明する。また、ラインバッファ53のライン数Lを6(d+2=4+2=6)、分割エリアの最小副走査幅を5(d+1=5)とする。
なお、主走査方向入力画像サイズin_xを14画素、副走査方向入力画像サイズin_yを20画素、バンド処理幅dを4画素(4ライン)、倍率pを111.111111・・・[%]である場合を例に挙げて説明する。また、ラインバッファ53のライン数Lを6(d+2=4+2=6)、分割エリアの最小副走査幅を5(d+1=5)とする。
ステップS502(図11)の処理において、CPU51は、外部PC48から倍率情報(倍率pの値)を取得する。具体的には、111.111111・・・[%]である。
ステップS503(図11)の処理において、CPU51は、入力画像を副走査方向に分割し、分割された各エリアの副走査長ayの画素数を演算する。拡大処理の場合は、各エリア内で副走査方向に1画素挿入されることから、下記の式3で求めることができる。
ステップS503(図11)の処理において、CPU51は、入力画像を副走査方向に分割し、分割された各エリアの副走査長ayの画素数を演算する。拡大処理の場合は、各エリア内で副走査方向に1画素挿入されることから、下記の式3で求めることができる。
ay+1/ay=p/100・・・(式3)
また、式3を整理すると式4のようになる。
また、式3を整理すると式4のようになる。
ay=100/(p−100)・・・(式4)
拡大処理における副走査長ayは、ay=100/(111.111111・・・−100)=9[画素]となる。つまり、9ラインに1回の頻度で画素の挿入が行われる。
拡大処理における副走査長ayは、ay=100/(111.111111・・・−100)=9[画素]となる。つまり、9ラインに1回の頻度で画素の挿入が行われる。
ステップS522(図11)の処理において、CPU51は、カウンタvacnt、フラグvaflagそれぞれを更新する。具体的には、カウンタvacnt(0)からカウンタvacnt(3)それぞれの値に4を加算(+4)する。ただし、拡大処理時のカウンタvacntの最大値vacnt(max)は、vacnt(max)=ay−1+1である。そのため、最大値を超えた場合は、その超えた分を0からカウントし直す。
一例として、ay=9、vacnt(max)=9、vacnt(0)=5、vacnt(1)=6、vacnt(2)=7、vacnt(3)=8である場合の更新について説明する。この場合に、カウンタvacnt(0)からカウンタvacnt(3)を更新すると、以下に示す(a)から(d)のようになる。
一例として、ay=9、vacnt(max)=9、vacnt(0)=5、vacnt(1)=6、vacnt(2)=7、vacnt(3)=8である場合の更新について説明する。この場合に、カウンタvacnt(0)からカウンタvacnt(3)を更新すると、以下に示す(a)から(d)のようになる。
(a)vacnt(0)=5+4=9
(b)vacnt(1)=6+4=10、よって、vacnt(1)=0
(c)vacnt(2)=7+4=11、よって、vacnt(2)=1
(d)vacnt(3)=8+4=12、よって、vacnt(3)=2
(b)vacnt(1)=6+4=10、よって、vacnt(1)=0
(c)vacnt(2)=7+4=11、よって、vacnt(2)=1
(d)vacnt(3)=8+4=12、よって、vacnt(3)=2
また、カウンタvacnt(0)からカウンタvacnt(3)を更新した結果、その値が「0」から「d−1」の範囲に含まれることになった場合には、当該ラインは次の分割エリアに処理に移行したと判別する。この場合には、縮小処理の場合と同様に、フラグvaflag(0)からフラグvaflag(3)を反転(更新)する。
拡大処理における、図11に示すステップS519の処理(画像出力処理)について、図16を参照しながら具体的に説明する。なお、縮小処理の場合と同様に、拡大処理においてもカウンタvacnt(0)、カウンタ vacnt(1)、カウンタ vacnt(2)、カウンタvacnt(3)それぞれに対して処理が行われる。
ステップS701の処理において、CPU51は、倍率pの値に基づいて、縮小処理又は拡大処理のいずれの処理であるかを判別する。ここでは、拡大処理であることから(S701:no)、ステップS707の処理へ進む。以下、ステップS707からステップS711の各処理について説明する。
ステップS701の処理において、CPU51は、倍率pの値に基づいて、縮小処理又は拡大処理のいずれの処理であるかを判別する。ここでは、拡大処理であることから(S701:no)、ステップS707の処理へ進む。以下、ステップS707からステップS711の各処理について説明する。
CPU51は、ステップS518(図11)の処理で取得した、主走査位置xに対応する乱数値rndの値と、カウントvacnt(0)の値とを比較する(S709)。比較した結果、「rnd<vacnt(0)」である場合(S707:yes)、ステップS708の処理へ進む。また、そうでない場合(S707:no)、ステップS711の処理へ進む。
CPU51は、ステップS518(図11)の処理で取得した、主走査位置xに対応する乱数値rndの値とカウンタvacnt(0)の値とを比較する(S710)。比較した結果、「rnd=vacnt(0)」である場合(S708:yes)、ステップS710の処理へ進む。また、そうでない場合(S708:no)、ステップS710の処理へ進む。
CPU51は、ステップS518(図11)の処理で取得した、主走査位置xに対応する乱数値rndの値とカウンタvacnt(0)の値とを比較する(S710)。比較した結果、「rnd=vacnt(0)」である場合(S708:yes)、ステップS710の処理へ進む。また、そうでない場合(S708:no)、ステップS710の処理へ進む。
CPU51は、拡大処理(変倍出力処理)を行う(S709)。ステップ709の処理は、同一走査中の同一主走査位置において画素の挿入が1回だけ行われるケースと、2回行われるケースとで処理が異なる。ここでは、バンド処理の4ラインそれぞれに対応する乱数を、乱数rnd(0)、rnd(1)、rnd(2)rnd(3)と定義する。
カウンタvacnt(0)に関する処理では、ラインバッファL0から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL0から、そうでない場合には、ラインバッファL1から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL1から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに対応するデータを取得し、これを出力する。これらの処理により、エリア内において乱数値rndで特定された位置で1画素挿入したことになる。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL0から、そうでない場合には、ラインバッファL1から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL1から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに対応するデータを取得し、これを出力する。これらの処理により、エリア内において乱数値rndで特定された位置で1画素挿入したことになる。
CPU51は、乱数前出力処理を行う(S710)。ステップ705の処理は、同一走査中の同一主走査位置において、処理を行うライン前に画素の挿入が行われたか否かにより処理が異なる。
カウンタvacnt(0)に関する処理では、ラインバッファL1から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL1から、そうでない場合には、ラインバッファL2から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL3から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL4から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(0)に関する処理では、ラインバッファL1から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL1から、そうでない場合には、ラインバッファL2から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL3から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL4から主走査位置xに相当するデータを取得し、これを出力する。
CPU51は、乱数後出力処理を行う(S711)。ステップ711の処理は、同一走査中の同一主走査位置において、処理を行うライン前に画素の挿入が行われたか否かにより処理が異なる。
カウンタvacnt(0)に関する処理では、ラインバッファL0から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL0から、そうでない場合には、ラインバッファL1から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL1から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL2から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(0)に関する処理では、ラインバッファL0から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(1)に関する処理では、「vacnt(0)=rnd(0)」である場合にはラインバッファL0から、そうでない場合には、ラインバッファL1から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(2)に関する処理では、「vacnt(0)=rnd(0)」又は「vacnt(1)=rnd(1)」である場合には、ラインバッファL1から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL2から主走査位置xに相当するデータを取得し、これを出力する。
カウンタvacnt(3)に関する処理では、「vacnt(0)=rnd(0)」、「vacnt(1)=rnd(1)」、「vacnt(2)=rnd(2)」のいずれかを満たすが否かで処理が異なる。いずれかを満たす場合には、ラインバッファL2から主走査位置xに対応するデータを取得し、これを出力する。また、そうでない場合には、ラインバッファL3から主走査位置xに相当するデータを取得し、これを出力する。
図18は、本実施形態の拡大処理における一連のフローを整理して表した図である。図18では、入力画像(エリアA、B、C)、ラインバッファL0、L1、L2、L3、L4、L5それぞれに格納される画像データ、乱数値(A、B、C)を模式的に表している。図18は、さらに、出力画像データ、カウンタvacnt(0)からvacnt(3)の値を示した上で、各走査毎(走査1から走査6)に整理したものである。
なお、画像形成装置110がコピーモードである場合でも、プリンタモードの場合に準じて、入力画像の縮小処理又は拡大処理が行われる。なお、プリンタモードの場合と異なる点は、信号及び各種データの授受の対象が外部PC48に代えて、コントロールパネル49、スキャナユニット4及びイメージセンサ9になる点である。この場合、プリンタモードにおける画像形成開始信号Pは、コピーモードにおける画像形成開始信号Cとなる。また、プリンタモードにおける倍率Pはコピーモードにおける倍率Cとなる。プリンタモードにおける画像データ要求信号Pは、コピーモードにおける画像データ要求信号Cとなる。プリンタモードにおける画像データPは、コピーモードにおける画像データCとなる。
このように、本実施形態の画像形成装置110では、フレームバッファを用いずに、ラインバッファ53にラインデータを格納して画像のサイズを拡大又は縮小する画像処理を行うことができる。これにより、画像形成装置の製造コストを大幅に低減することができる。
本実施形態の説明においては、分割された各エリアの副走査長ayの値が一定である場合を例に挙げて説明した。これに限らず、副走査長ayの値は各エリアで異なるものであっても良い。その際、副走査長ayの値を用いる演算式においては、処理対象のエリアの副走査長ayの値を用いることになる。また、副走査長ayの値が小数点以下の値を含む場合、例えば演算結果がay=10.5となったときには、ay=10のエリアと、ay=11のエリアとを交互に配置すれば良い。
また、図14に示すステップS602からステップS604の各処理において生成された乱数値rndが、決定された範囲を外れる場合には、この範囲に収まるまで生成フローを繰り返す構成について説明した。この他、そもそも範囲を外れた乱数値rndが生成されないように、bitを決定してしまっても良い。例えば、乱数値rndの範囲を0から6と決定した場合、2^nが乱数値の最大値をこえる最小のnを求めることに代えて、2^nが乱数値の最大値をこえない最大のnを求めても良い。すると、n=3となり、これは3bitの乱数値を生成することを表す。つまり、乱数値rndが生成される範囲は、0から7の範囲になる。こうして生成された乱数値rndは、最大値9より必ず小さな値となるため、ステップS604(図14)を経由することがなくなる。
また、本実施形態の説明においては、バンド処理幅4(d=4)、分割エリアの副走査長9又は11(ay=9、11)の場合を例に挙げて説明した。この場合、2つのエリアを1回の走査で同時に処理する場合があることについては既に説明したとおりである。以下、1回の走査で同時に処理することができる最大エリア数Zと、バンド処理幅d及び分割エリアの副走査長ayとの関係について説明する。
図19は、バンド処理幅d及び分割エリアの副走査長ay、最大エリア数Zの関係を説明するための模式図である。
図19に示す副走査長合計mは、バンド処理幅dの1回の走査において含まれる各エリア全ての副走査長を合計したものである。具体的には、副走査長合計mは、m=ay(0)+ay(1)+…+ay(n−2)+ay(n−1)となる。また、副走査長合計mに含まれるエリアの数をエリア個数kとすると、以下に示す(a)から(c)のようになる。
図19に示す副走査長合計mは、バンド処理幅dの1回の走査において含まれる各エリア全ての副走査長を合計したものである。具体的には、副走査長合計mは、m=ay(0)+ay(1)+…+ay(n−2)+ay(n−1)となる。また、副走査長合計mに含まれるエリアの数をエリア個数kとすると、以下に示す(a)から(c)のようになる。
(a)d−m=0であるとき、Z=k+1
(b)d−m=1であるとき、Z=k+1
(c)d−m=2以上であるとき、Z=k+2
以下、それぞれについて具体的に説明する。
(b)d−m=1であるとき、Z=k+1
(c)d−m=2以上であるとき、Z=k+2
以下、それぞれについて具体的に説明する。
図20(a)、(b)は、「d−m=0」であるときの最大エリア数Zを説明するための図である。図20(a)に示すようなバンド処理幅d、副走査長合計mである場合には、図20(b)に示すように、1回の走査においてエリア0からエリアDまで跨って処理する場合がある。この場合に最大エリア数Zは、Z=k+1となる。その他にも、例えばエリアCからエリアn−1まで跨って処理する場合も、最大エリア数Zは、Z=k+1となる。
図21(a)、(b)は、「d−m=1」であるときの最大エリア数Zを説明するための図である。図21(a)に示すようなバンド処理幅d、副走査長合計mである場合には、図21(b)に示すように、1回の走査においてエリア0からエリアDまで跨って処理する場合がある。この場合に最大エリア数Zは、Z=k+1となる。その他にも、例えばエリアCからエリアn−1まで跨って処理する場合も、最大エリア数Zは、Z=k+1となる。
図22(a)、(b)は、「d−m=2」であるときの最大エリア数Zを説明するための図である。図22(a)に示すようなバンド処理幅d、副走査長合計mである場合には、図22(b)に示すように、1回の走査においてエリアCからエリアDまで跨って処理する場合がある。この場合に最大エリア数Zは、Z=k+2となる。
なお、副走査長ayがエリア毎に異なる値をとる場合は、副走査長合計mは様々な組み合わせパターン(ay(0)、ay(1)、…、ay(n−1))における最大値を用いる必要がある。例えば、副走査長ayの値が、「10、10、11、10、10、11、10、10、11、・・・」などと一定の規則性を持って出現する場合について説明する。
例えば、エリア個数kがk=2であるときの組み合わせは、{ay(0),ay(1)}={10、10}、{10、11}、{11、10}の組み合わせがある。この場合には、{ay(0)、ay(1)}={10、10}が最小となる。
また、例えば、エリア個数kがk=3であるときの組み合わせは、{ay(0)、ay(1)、ay(2)}={10、10、11}、{10、11、10}、{11、10、10}の組み合わせがある。この場合には、結果的にはどれを採用しても同じである。
また、例えば、エリア個数kがk=3であるときの組み合わせは、{ay(0)、ay(1)、ay(2)}={10、10、11}、{10、11、10}、{11、10、10}の組み合わせがある。この場合には、結果的にはどれを採用しても同じである。
このように、一回の走査において同時に処理される最大エリア数(Z)に応じたラインバッファ及び乱数バッファが必要となる。なお、ここでのラインバッファ数には、変倍処理に必要ではないラインバッファの数は含まれない。変倍処理に必要ではないラインバッファとは、変倍処理を行わない場合であってもバンド処理のために必要なラインバッファであり、その数はバンド処理ライン数と同一である。
また、上記した数のラインバッファ全てが使用されるのは、最大数の分割エリアに関する処理を同一走査で行った場合であり、且つ、同一走査内の全てのエリアで画素を削除する処理(縮小処理)が行われる場合である。
なお、拡大処理の場合は、縮小処理とは異なり、拡大処理は画素の複製処理である。そのため、何回画素の追加が行われようともそれに応じて新たに必要なラインデータが増えるわけではない。ただし、走査の先頭ラインに関しては、前回走査の最終ラインが必要であり、その分のバッファとして1ラインが必要となる。
なお、拡大処理の場合は、縮小処理とは異なり、拡大処理は画素の複製処理である。そのため、何回画素の追加が行われようともそれに応じて新たに必要なラインデータが増えるわけではない。ただし、走査の先頭ラインに関しては、前回走査の最終ラインが必要であり、その分のバッファとして1ラインが必要となる。
また、本実施形態の説明においては、同一走査で処理を行うエリア数が2である場合を例に説明した。これに限らず、例えばエリア数が3以上となる場合は、乱数バッファの識別値であるフラグaの値を、0又は1の2値でなく、3値またはそれ以上の値で区別しすることで対応することができる。
また、本実施形態の説明においては、ステップS604の処理のシードシフトを1回として説明した。例えば、生成する乱数値の関連性が発生する懸念がある場合は、乱数取得bit数分だけシフトしても良い。例えば、bit3からbit0が乱数値となる場合は、4回シフトを行う。
上記説明した実施形態は、本発明をより具体的に説明するためのものであり、本発明の範囲が、これらの例に限定されるものではない。
1・・・原稿給紙装置、2・・・原稿台ガラス面、3・・・ランプ、4・・・スキャナユニット、5、6、7・・・ミラー、8・・・集光部、9・・・イメージセンサ部、10・・・露光制御部、11・・・感光体、13・・・現像器、14、15・・・転写部材積載部、16・・・転写部、17・・・定着部、18・・・排紙部、20・・・フラッパー、21・・・排出通路、22・・・反転通路、23・・・反転搬送路入口、24・・・反転搬送路、25・・・クリーナ、26・・・補助帯電器、27・・・露光ランプ、28・・・1次帯電器、31・・・レーザ駆動装置、32・・・絞り、33・・・ポリゴンミラー、34・・・f−θレンズ、35・・・コリメータレンズ、36・・・BDセンサ、43・・・半導体レーザ、48・・・外部PC、49・・・コントロールパネル、50・・・画像処理部、51・・・CPU、52・・・画像セレクタ、53・・・ラインバッファ、54・・・乱数バッファA、55・・・乱数バッファB、100・・・電位センサ、110・・・画像形成装置。
Claims (4)
- 受け付けた画像データを複数のエリアに分割する分割手段と、
前記分割された各エリア毎に画素を挿入又は削除する位置を特定するための乱数値を生成する乱数生成手段と、
前記乱数値で定めた位置へ画素を挿入し、又は、当該位置の画素を削除する画像処理を行う画像処理手段と、
前記画像処理の際に前記画像データを主走査方向に走査してライン単位で読み出したラインデータを順次格納する格納手段と、を備え、
前記格納手段は、前記エリアに含まれるライン数を超える数の前記ラインデータを格納できるサイズに構成されることを特徴とする、
画像形成装置。 - 前記画像データは、画像の主走査方向及び副走査方向に配列された画素の集合であり、
前記エリアに含まれるライン数は、当該エリアにおける副走査方向の画素数であることを特徴とする、
請求項1に記載の画像形成装置。 - 前記格納手段は、一回の前記走査において処理される前記エリア全ての副走査方向の画素数に応じた前記ラインデータを格納できるサイズに構成されることを特徴とする、
請求項2に記載の画像形成装置。 - 前記格納手段は、前記画像処理手段による画像処理が行われる前記エリアに隣接するエリアの前記ラインデータを格納領域の一部に格納することを特徴とする、
請求項1、2又は3に記載の画像形成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014071952A JP2015195472A (ja) | 2014-03-31 | 2014-03-31 | 画像形成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014071952A JP2015195472A (ja) | 2014-03-31 | 2014-03-31 | 画像形成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015195472A true JP2015195472A (ja) | 2015-11-05 |
Family
ID=54434167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014071952A Pending JP2015195472A (ja) | 2014-03-31 | 2014-03-31 | 画像形成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2015195472A (ja) |
-
2014
- 2014-03-31 JP JP2014071952A patent/JP2015195472A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5947529B2 (ja) | 画像形成装置 | |
US5455681A (en) | Low resolution grey level printing method from high resolution binary input file | |
JP4355549B2 (ja) | 画像形成装置および走査位置の修正方法 | |
JP2009027683A (ja) | 画像補正装置、画像形成装置および画像補正方法 | |
JP6230466B2 (ja) | 画像形成装置 | |
JP5749925B2 (ja) | 画像形成装置及び画像形成方法 | |
JP5595119B2 (ja) | 画像印字装置、画像印字方法及びプログラム | |
JP5836684B2 (ja) | 画像形成装置 | |
JP2004351908A (ja) | 画像形成装置およびその主走査倍率補正方法 | |
JP6201557B2 (ja) | 画像形成装置 | |
US9491329B2 (en) | Image forming apparatus | |
JP2015195472A (ja) | 画像形成装置 | |
US10088790B2 (en) | Image forming apparatus and pattern reading apparatus | |
JP4531491B2 (ja) | 画像形成装置及び画像形成方法 | |
JP2006259261A (ja) | 画像形成装置 | |
JP2002244495A (ja) | 画像形成装置 | |
JP6168757B2 (ja) | 画像データ出力装置、画像形成装置、画像データ出力装置の制御方法、及び画像形成装置の制御方法 | |
JP5983652B2 (ja) | 画像形成装置 | |
JP3691732B2 (ja) | 画像処理装置 | |
JP4304621B2 (ja) | 画像処理装置 | |
JP2018126913A (ja) | 画像形成装置 | |
JP5660187B2 (ja) | 画像形成装置、画像形成方法、画像形成プログラム及び記録媒体 | |
JP2007156332A (ja) | 画像形成装置 | |
JPH08174906A (ja) | デジタル複写機 | |
JP2006334852A (ja) | 画像書き込み装置および画像形成装置 |