JP3962029B2 - 画像データの縮小装置及び方法 - Google Patents
画像データの縮小装置及び方法 Download PDFInfo
- Publication number
- JP3962029B2 JP3962029B2 JP2004096463A JP2004096463A JP3962029B2 JP 3962029 B2 JP3962029 B2 JP 3962029B2 JP 2004096463 A JP2004096463 A JP 2004096463A JP 2004096463 A JP2004096463 A JP 2004096463A JP 3962029 B2 JP3962029 B2 JP 3962029B2
- Authority
- JP
- Japan
- Prior art keywords
- pixel
- pixels
- input
- image data
- magnification
- 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
Links
- 238000000034 method Methods 0.000 title claims description 169
- 230000009467 reduction Effects 0.000 title claims description 122
- 238000012545 processing Methods 0.000 claims description 128
- 239000000872 buffer Substances 0.000 claims description 117
- 238000005070 sampling Methods 0.000 claims description 75
- 238000004364 calculation method Methods 0.000 claims description 64
- 238000012935 Averaging Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 description 104
- 238000010586 diagram Methods 0.000 description 56
- 238000003860 storage Methods 0.000 description 19
- 230000000694 effects Effects 0.000 description 14
- 238000011946 reduction process Methods 0.000 description 9
- 102100026190 Class E basic helix-loop-helix protein 41 Human genes 0.000 description 7
- 101000765033 Homo sapiens Class E basic helix-loop-helix protein 41 Proteins 0.000 description 7
- 238000007792 addition Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000012952 Resampling Methods 0.000 description 3
- 230000008602 contraction Effects 0.000 description 3
- 230000010365 information processing Effects 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 238000004220 aggregation Methods 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 2
- 238000009833 condensation Methods 0.000 description 2
- 230000005494 condensation Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 230000000593 degrading effect Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
Images
Landscapes
- Image Processing (AREA)
- Studio Circuits (AREA)
- Editing Of Facsimile Originals (AREA)
- Controls And Circuits For Display Device (AREA)
Description
一方、1.5倍とか2.5倍というように、いずれかの方向に整数倍にならない倍率で拡大/縮小を行う場合には、コピーをして数を増やす画素と、コピーをしない画素を適当に混在させる。
そこで、出力画像中のコピーによって増加した画素の画素値が互いに滑らかに変化するように、周辺の複数の画素を参照しながら適当な演算処理を行う。この方法は、リサンプリング処理と呼ばれ、各画素の画素値の計算には一次補間法や最近傍法等が採用される。
上記のようにして、入力する画像データをX軸方向やY軸方向に任意の実数倍率、即ち整数倍でない倍率で拡大/縮小処理しようとするときには、一次補間法や最近傍法による画素値の計算が行われる。このとき、予め画素値を求めるべき出力画素の周辺に存在する入力画素の画素値を、計算に利用できるように、準備しておかなければならない。従って、画像データをほぼ1ページ分あるいは画素値の参照に必要な分だけ読み取って、バッファメモリに予め格納し、その後再び同じ画像データを順に受け入れて処理をする必要がある。これでは、画像データをそのまま逐次処理をして出力を得るというわけにはいかない。
従って、従来の技術には、各種のシステムにおいてメモリを効率的に使用するという目的に反し、また処理時間も長くなるという問題があった。
〈構成1〉
入力画像データを形成する複数の入力画素を所定の倍率で複数の出力画素に縮小して出力画像データを生成する画像データの縮小方法において、前記入力画像データを小領域に分割し、小領域に含まれる入力画素と小領域の境界上の入力画素とを区別して認識し、前記小領域内の入力画素値と認識された境界上の入力画素値とに基づいて小領域内の入力画素値を演算して出力画素値を求める画像データの縮小方法であって、前記小領域内の入力画素をサンプリングするサンプリング領域を指定し、サンプリング領域内の画素値を演算することにより出力画素値を求めることを特徴とする画像データの縮小方法。
入力画像データを形成する複数の入力画素を所定の倍率で複数の出力画素に縮小して出力画像を生成する画像データの縮小装置において、前記入力画像を複数の入力画素を含む小領域に区分し、隣接する小領域間を仕切る境界線上に位置する入力画素を検知して該入力画素を含むいずれかの小領域を一定条件に基づいて決定する境界線画素判定手段と、前記各小領域に含まれる複数の入力画素の各画素値に基づいて出力画素の画素値を演算する画素値演算手段と、を有する画像データの縮小装置であって、前記画素値演算手段は、前記小領域にサンプリング領域を設定し、該サンプリング領域内の入力画素に基づいて前記出力画素の画素値を演算することを特徴とする画像データの縮小装置。
入力画像を、主走査方向に平行な境界と副走査方向に平行な境界により小領域に等分割し、各領域中に含まれる画素の画素値を平均して出力画素の画素値を求めることにより、入力画像を縮小した出力画像を得るものにおいて、入力画像を構成する画素の画素値を主走査方向にみて1ライン分受け入れて保持する入力画像バッファと、前記入力画像バッファに受け入れた各画素の画素値を主走査方向に順に累積していき、副走査方向に平行な境界の手前で、この境界に最も近い境界画素を検出したときまでに求められた、同一小領域内の画素値の合計を、小領域単位で保持する途中結果バッファと、副走査方向に1ライン分ずつ入力画像を処理していき、主走査方向に平行な境界の手前で、この境界に最も近い境界画素を検出したときまでに求められた各小領域内の画素値の合計を、途中結果バッファから読みだして、各小領域に含まれる画素数で割って、小領域毎の画素値の平均値を求め、その平均値を出力画像の画素の画素値とする制御部とを備えた画像データの縮小装置であって、前記入力画像を分割した小領域に含まれる画素のうちの一部をサンプリングして、それらの画素値を集計するために、サンプリングの間隔を設定して保持するパラメータ保持部を設け、途中結果バッファは、前記パラメータ保持部を参照して、サンプリング間隔ごとに画素値を集計して保持することを特徴とする画像データの縮小装置。
構成3において、入力画像を分割した小領域に含まれる画素を、主走査方向に連続した任意の数の画素を含む複数のサンプリング領域で区分し、そのサンプリング領域毎に画素値を集計するために、サンプリング合計カウンタを設け、前記制御部は、サンプリング領域ごとに集計された画素値とそのサンプリング領域に含まれる画素数により、サンプリング領域における画素値の平均値を求め、前記途中結果バッファは、サンプリング領域における画素値の平均値を累積した、同一小領域内の画素値の合計を、小領域単位で保持することを特徴とする画像データの縮小装置。
〈具体例1〉
図1は、具体例1による拡大/縮小処理部の動作説明図である。
図の(a)は本発明の方法に使用する拡大/縮小テーブルを示し、(b)は入力画像データと出力画像データとを示している。
例えば入力画像データ3のX方向には(x2/x1)倍、Y方向には(y2/y1)倍に画像を拡大するとき、図の(b)に示すように、各画素をそれぞれX方向とY方向に所定の回数コピーする。画素値はそのままでコピーする。コピーする画素数は入力画像の画素の位置によって異なる。こうして、整数倍でない倍率の拡大を実現する。ここで、こうした拡大/縮小処理を効率良く実行するために、各画素毎の該当する方向の倍率を示す拡大/縮小テーブルを用意する。
画像データは通常ビットストリームとして扱われ、1画素分ずつX軸方向(主走査方向)に処理し、その処理をY軸方向(副走査方向)に繰り返す。以上のような拡大/縮小テーブルを新たに設けたのは、入力画像データ3をこのように走査方向にシリアルに受け入れて、そのまま順に拡大/縮小処理することを可能にするためである。
図の装置は、外部記憶装置5に記憶された入力画像データを受け入れて、この画像データを拡大処理あるいは縮小処理するための装置である。拡大/縮小装置6には、現ラインバッファ7、拡大/縮小テーブル8、拡大/縮小処理部9及び出力画像フレームバッファ11が設けられている。現ラインバッファ7は、外部記憶装置5から走査方向に入力した画像データを1ラインずつ格納し保持するためのメモリである。拡大/縮小テーブル8には、図1(a)に示したX方向の倍率テーブル1XやY方向の倍率テーブル1Y等が格納されている。拡大/縮小処理部9は、拡大/縮小テーブル8を参照しながら図1(b)に示したような拡大/縮小処理を行う部分である。拡大/縮小処理後の画像データは、出力画像フレームバッファ11に格納される。出力画像フレームバッファ11には図示しない外部装置が接続され、そこに拡大/縮小された画像データが転送される。
図3に、整数倍率の拡大法説明図を示す。
図に示すように、例えばオリジナルの画素2が存在する場合、X方向に2倍、Y方向に2倍の拡大を行おうとすれば、図の(b)に示すようになる。また、X方向に3倍、Y方向に3倍の拡大を行おうとすれば(c)に示すようになり、X方向に4倍、Y方向に4倍の拡大を行おうとすれば(d)に示すようになる。もちろん、X方向とY方向の倍率を自由に変更しても同様の結果となる。整数倍ではすべての入力画素にこれと同一の処理を施す。
この例では、X方向とY方向と、それぞれ任意の実数倍率で画像データを拡大するために、画素毎にそのコピー倍率を変えている。例えば、図に示す(1)の画素は出力画像データ4において、X方向に3倍、Y方向に2倍になるようにコピーされている。また、(2)の画素は、X方向に2倍、Y方向に2倍となるようコピーされている。更に(5)の画素は、X方向に3倍、Y方向に3倍となるようにコピーされている。こうした組合せによって、全体として例えば1.2倍とか2.3倍といった拡大処理が可能となる。縮小処理としては、例えば出力画像データ4から入力画像データ3の方向への縮小が考えられる。このような場合には、1個の出力画素を得るたびに、続く画素をX方向に何個、Y方向に何個間引くかといった処理となる。
まず、ステップS1において、拡大/縮小テーブルの作成を行う。これは拡大/縮小倍率を元に、予め経験的に得られたデータに従ってテーブルの作成を行う処理である。なお、このようなテーブルの内容は、各拡大/縮小倍率毎に予め用意されていてもよいし、その都度計算して作成されるようにしてもよい。また、オペレータが任意の適当な手段で作成し、情報処理装置のメモリ等に格納するようにしてもよい。
ステップS2〜ステップS9の処理を入力が画像データのライン数分繰り返すことによって、入力画像データ全ての画素についての拡大/縮小処理を終了する。
以上のように、任意の方向に任意の拡大/縮小倍率が設定されている場合に、その方向毎に各画素の拡大/縮小倍率を表示したテーブルを用意すると、入力する画像データを走査方向にシリアルに受け入れながら、順番に拡大/縮小処理を行うことが可能になる。即ち、演算処理の前に、予め入力画像データを1ページ分バッファメモリに格納しておくといった処理を必要とせず、限られたメモリ資源を有効に活用することができる。しかも、画像処理中にはテーブル参照だけで拡大/縮小処理を行うことが可能だから、処理の高速化が実現する。
上記の具体例1では、各入力画素に割り振る整数倍率を拡大/縮小テーブルの形で保持することから、倍率や入力画像サイズによってはテーブルのデータ量が比較的大きくなる。この具体例2では、テーブルのデータ量を縮小する方法を提供する。
図6に、モジュロ演算を用いる画像拡大/縮小装置のブロック図を示す。
図の装置は、図2に示した具体例1の装置の拡大/縮小装置6の部分に、倍率演算部13を設けた点を特徴とする。この倍率演算部13には、拡大/縮小テーブル8とモジュロ演算部10が設けられる。なお、この拡大/縮小テーブル8の内容は具体例1の場合と異なり、十分に縮小された内容となる。
(a)は、例えば図1に示したX方向の倍率テーブル1X、あるいはY方向の倍率テーブル1Yを示す。インデックス(Index)は、列番号または行番号のいずれかを示す。図の(a)の倍率テーブル1Xは、例えば横方向に整数倍(ここでは4倍)の拡大を行うことを示している。しかしながら、このテーブルでは、全ての画素の倍率が4であるから、画素数分の同一内容の倍率表示データがメモリに格納されることになり、実質的に極めて冗長である。(b)には、1.5倍の倍率にしたときのテーブルの内容を示す。この場合、各画素の倍率は1,2,1,2,…というように1と2を交互に繰り返す内容となる。このような規則性のあるデータを全てメモリに保持しておくことも冗長であり、資源の有効利用を妨げる。
以上のようにして、図8(b)に示すような少量のテーブルデータで、全ての拡大/縮小処理が可能となる。
この動作は、既に図5を用いて説明した具体例1の場合と類似している。まずステップS1において、拡大/縮小テーブルの作成を行う。そのテーブルの構成は、図8を用いて説明した通りのものである。次に、ステップS2において、1ライン分のデータを読み込み、ステップS3において、図8の(a)に示したようなモジュロ演算を実行する。そして、その結果をインデックスとし、拡大/縮小テーブルを参照する。この処理はステップS3では縦方向について行い、ステップS4では横方向について行う。そして、ステップS5において、テーブルで指示された通りドットコピーを行い、ステップS6では横方向倍率分コピーが終了したかどうかを判断し、ステップS7では入力画像ライン幅分コピーを終了したかを判断する。そして、ステップS8で、縦方向倍率分コピーしたかを判断し、1ライン分の処理が終了するとステップS9に移り、全ての入力ライン数分処理したかどうかの判断がされる。こうして、それぞれのループを処理し、全ての入力画像データについて拡大/縮小処理を行う。
この例では、入力画像データの全ての画素について、それぞれ例えばX方向に何倍、Y方向に何倍といった表示をテーブルデータとして保持しなくても、各画素を拡大/縮小方向に見て、その入力画像データ中の各画素の位置と拡大/縮小倍率との間に規則的な対応関係が存在する場合、演算処理によって拡大/縮小テーブルを生成して参照することができる。従って、予めメモリに保存しておくべき拡大/縮小テーブルのサイズを十分少なくし、記憶容量の削減を図ることができる。
図10に、具体例3による拡大/縮小装置のブロック図を示す。
この装置は、これまでの具体例の、拡大/縮小装置6の部分に、前ラインバッファ7Aと現ラインバッファ7Bの2ライン分のバッファを設ける。そしてさらに、これから説明する一次補間処理を行うための、一次補間拡大/縮小処理部16を設ける。
図11の入力画像データ3を拡大処理したものを出力画像データ4とする。拡大処理をすると、入力画素の各画素の間隔と出力画素の各画素の間隔とは、必ずしも一致しない。また、画像中の対応する画素の位置も正確には一致しないことがある。この場合に、出力画像データ4の各画素の画素値は、出力画像の画質を劣化させないために、次のようにして演算処理をして変換する。
例えば、図12に示すように、×印の点に出力画素が存在したとする。このとき、×点の上辺からの距離をq、左辺からの距離をpとする。pとqはいずれも0と1の間の小数で表す。このとき、×印の点の画素の出力値は図13(a)に示す式で表される。ここで、(b)に示すように、出力画素Fの出力画像上の座標と、入力画素Aの入力画像上の座標と、画像の拡大図をそれぞれ設定すると、p,q及び各座標値や拡大率との関係は(c)式に示すようになる。
このような処理をしようとすれば、予め処理対象となる画素の周辺の入力画像データを全てバッファメモリに格納した上で、出力画像データの画素値を演算処理する必要がある。
この具体例では、例えば具体例1を実施して、入力画像データ3をX軸方向に4倍、Y軸方向に3倍に拡大している。このとき、各画素数を増加させて得られた出力画像データ4の4×3画素のブロック(図中太い黒線の枠で囲んだマトリクス)中で、例えば右下端の画素が正方格子上の画素であると定義する。この画素を図では黒く塗りつぶしてある。
ここには、上記の定義に従って実際に各画素に画素値を与えた場合の演算処理結果を数値で示した。入力画像は、格子点の画素の画素値が例えば“0”、“100”、“50”及び“200”という値とする。これを縦3倍横4倍に拡大すると、それぞれの画素値は対応するブロックの右下隅にコピーされる。そして、例えば画素値が“200”の画素を含むブロックについて、残りの11個の画素に具体的に一次補間により計算した値を書き込んだ。図の下側には一例として、P=2,Q=2の場合の画素値計算例を図示した。このようにして画素値を計算することによって、画質を低下させずに拡大処理を行うことができる。
このフローチャートにおいて、ステップS1〜ステップS4は、図5を用いて説明した具体例1の処理と同様である。即ち、拡大/縮小テーブルを作成し、ラインデータを読み込み、その後拡大/縮小テーブルを参照する。そして、具体例3では、ステップS5において、上記の通り説明した一次補間処理を行う。この処理をブロック中の全ての画素について行い、更に走査方向に順に、全てのブロックついて実行する。その他の処理は具体例1と同様である。なお、ブロックの右下隅に入力画素の画素値をコピーしたが、これはシリアルに入力したバッファメモリ中の2ライン分の画像データだけを利用して演算処理できるようにするためである。
なお、こうした効果を得る画素の位置は、各ブロックの4つの角部であればよい。
この具体例によれば、入力画像全体をバッファメモリに読み込んでからでなければ実現が不可能であった一次補間による拡大/縮小処理を、2ライン分のデータをバッファメモリに保持するだけで実行可能になった。これによって、高画質の拡大/縮小処理をバッファメモリの使用量を十分に少なくして実現できる。
図17は、具体例4の原理説明図である。
ここでは、入力画像データ3の正方格子の座標を出力画像データ4上の座標に変換し、出力画像データ4を対応する正方格子によって作られる領域で分割する。この領域のことを、以下近傍エリアと呼ぶ。この図では、入力画像データ3の破線で囲んだ4つの画素(丸印)によって正方格子を定義したとき、これに対応する近傍エリアを、出力画像データ4の中に実線の四角で書き込んだ。この四角で囲んだ領域を近傍エリアと呼ぶが、ここには図に示すように例えば9個の出力画素(四角印)が含まれる。これらの画素の画素値を入力画像データ3の4個の画素の画素値から上記の一次補間法によって求める。こうすれば、近傍エリアに含まれる各画素の画素値を入力画像データの4つの隣合った画素の画素値のみで求めることができる。従って、バッファメモリへは具体例3と同様に2ライン分程度のデータを格納すればよい。しかも、その演算処理は後で説明するように、これまでよりも更に容易になる。
この装置の拡大/縮小装置6の部分には、処理対象となるデータを格納するために、ラインバッファ7Aと7Bとを設ける。そして、各ラインバッファ中の演算処理対象となる画素値を指定するために、前行ポインタ19Aと現行ポインタ19Bとが設けられる。更に、先に説明した近傍エリアを指定するための近傍エリアテーブル18が設けられ、一次補間拡大/縮小処理部16において、近傍エリア内の各画素の画素値を演算処理する。
近傍エリアテーブルは、具体例1で説明した拡大/縮小テーブルと同様に、縦方向の演算処理をするためのものと、横方向の演算処理をするためのものと、それぞれ1個ずつ存在する。縦方向のためのテーブルを近傍エリア縦テーブル、横方向のためのテーブルを近傍エリア横テーブルと呼ぶ。この(a)に示す例では、3×3画素の入力画像を5×5画素に拡大している。近傍エリアは、図の出力画像中の破線の格子に示すように設定した。例えば出力画像の左上隅の近傍エリアには1個の画素が存在し、右下隅の近傍エリアには2×2個の画素が存在する。このように、各近傍エリア中の出力画素数を表示するために縦テーブル、横テーブルを設ける。なお、このテーブルの内容は、一般的には図の(b)に示すような式によって求めることができる。なお、図(b)中のAという記号は入力画像の縦方向の画素数あるいは横方向の画素数を示す。また、Bという記号は出力画像の横方向あるいは縦方向の画素数を示す。Xという記号は、最初から何番目の近傍エリアかを示すパラメータである。
上記のように、装置には拡大/縮小処理の演算処理中2ライン分の画像データが格納される。ラインバッファ7Aと7Bとは、それぞれ交互に新たな1ライン分の入力データを受け入れて格納する。前行ポインタ19Aと現行ポインタ19Bは、どちらのラインバッファが先にデータを格納されたものかを示すためのものである。従って、初期値はいずれもラインバッファ7Aを示している。前行ポインタ19Aと現行ポインタ19Bとが指すべきバッファは、例えば図の(b)に示すような演算で求めることができる。これは、先に説明したようなモジュロ演算による。これで、入力画像のどのラインがどのラインバッファに格納されるか明確になる。
以上の構成により、この図に示すように、例えばラインバッファ17Aに直前に処理した行が格納され、ラインバッファ17Bに現在処理中の行が格納された状態で処理を進める。ラインバッファ17Bの処理が終了したときには、ラインバッファ17Aに次の新たな1ライン分のデータを格納する。従って、現行ポインタ19Bは、今度はラインバッファ17Aを指し、前行ポインタ19Aがラインバッファ17Bを指すことになる。
上記近傍エリアを、例えば画素値A,B,C,Dの画素によって構成するとすれば、その近傍エリア中に含まれる実線の四角印の出力画素の画素値Fは、この図の中に示すような演算処理によって求められる。この演算処理そのものは一次補間の処理で説明した式と全く同様である。なお、格子の間隔を横方向にα、縦方向にβとした。また、対象となる画素の上辺からの距離をq、左辺からの距離をpとした。ただし、α,βは、画像の拡大率をX方向、Y方向それぞれmx,myとしたときα=1/mx,β=1/myとすることができる。
具体例4では、まず既に説明したような横テーブルと縦テーブルの作成をステップS1において行う。そして、ステップS2において、各ラインバッファの初期化を行う。その後、ステップS3においてラインデータを読み込み、ステップS4において上記の図22に示した出力画素値計算を実行する。ステップS5では、近傍エリアの横サイズ分を処理したかどうかを判断し、ステップS6では、入力画像幅分の処理を終了したかを判断する。ステップS6までで1ライン分の処理が終了するとステップS7において近傍エリアの縦サイズ分が終了したかどうかの判断をし、これが終了すると、ステップS8に進み、バッファを更新する。更に、次のラインに移り、ステップS9で入力画像ライン数分が終了したかどうかの判断をして処理を終える。
図24は、具体例4の計算内容説明図である。
この図を用いて効果を説明する。
以上のようにして、近傍エリア内に含まれた9個の画素の画素値は全てこの図に示すように4個の画素値から計算される。これにより、入力画像を2ライン分だけ保持して、順番にその内容を入れ替えながら処理をすれば、全ての出力画素の画素値を一次補間法によって順に計算処理することが可能になり、使用するメモリ量を十分に減少させることができる。
上記の場合には、各出力画素即ち近傍エリア内に含まれる出力画素について、それぞれ7回の足し算と10回の掛け算を行うことになる。ところが、これらの位置の規則的な関係を考慮すると、更に演算処理を簡略化することができる。
図25に、具体例5の装置のブロック図を示す。
この装置は、ラインバッファ31A,31Bに画素を格納し、具体例4と同様の演算処理を行う一方、更に演算処理を簡略化する。その目的のために、一次補間拡大/縮小処理部40をここに示すような構成とした。ここにはパラメータ計算装置41、左端画素値記憶装置42、加算器43、ΔYメモリ44、ΔX1メモリ45、加算器46、ΔΔXメモリ47、現画素メモリ48及び加算器49が設けられている。近傍エリアテーブル32の出力は、パラメータ計算装置41に入力する。一次補間拡大/縮小処理部40の出力は出力画像フレームバッファ34に格納するように構成されている。
この具体例5では、ドット間の相関関係を用いて計算を簡略化する。即ち、この図に示すように、例えば近傍エリアの中に先に説明した通りの9個の画素が含められているとする。この場合に、これらの画素の横方向の間隔はΔX1、縦方向の間隔はΔYというように表示できる。このように、各画素の間隔が規則的に一定であることから、左端即ち図に示すD1の出力画素の画素値とΔX1やΔY1を求めておくことによって、順次その右側あるいは下側の画素の画素値を換算処理することが可能になる。即ち、隣合う画素の画素値の差はΔX1、ΔY、ΔΔX等によって求めることが可能になる。この具体例では、その原理を利用して各画素値の演算処理を簡単にした。
この図には、この具体例5を用いて行う各画素値の計算式を示した。
図のように、左端の画素B1の画素値を計算すれば、右方向あるいは縦方向に並んだ各画素の画素値を遥かに簡単な式により演算処理することが可能になる。
図のステップS1において、まず近傍エリア左上端の画素値を計算する。その計算方法は、既に図27を用いて示した。次に、ステップS2において、ΔX1の計算を行う。更に、ステップS3において、ΔYの計算を行う。次にステップS4において、ΔΔXの計算を行う。その後ステップS5において、出力画素値の設定を行い、ステップS6において、出力画素値を更新する。ステップS7では、近傍エリアの横サイズ分処理が終了したかを判断し、ステップS6,S7のループを繰り返す。次に、近傍エリアのすぐ下の行を処理する場合ステップS8に移り、ΔX1を更新し、ステップS9において、左端の画素値を更新する。その後、ステップS10において、近傍エリアの縦サイズ分の処理が終了したかどうかを判断し、終了していない場合には、ステップS5〜ステップS9の処理を繰り返す。これによって、図27に示す計算処理が完了する。
以上の処理によって、左端の画素について、7回の足し算と10回の掛け算を実行するが、その他の画素については、それ以下の数回の足し算によってその画素値を求めることができる。これによって、一次補間処理の向上を図ることができる。
図29は、具体例6の装置のブロック図である。
以下の具体例は画像縮小処理に適するものである。
以下の具体例では、図に示す入力画像51を主走査方向に平行な境界51Hと副走査方向に平行な境界51Vとによって小領域51Zに等分割する。そして、これらの各小領域51Z中に含まれる画素の画素値を平均して、出力画素の画素値を求める。この場合に、全ての画素の画素値を実際の処理をする装置側のバッファに保持しようとすると大きなメモリを必要とする。そこで、この図29に示すような構成とする。
入力画像51の全ての画素の画素値は外部記憶装置52に格納されている。これらを処理するために、入力画像バッファ53、途中結果バッファ54、制御装置55、フレームバッファ57が設けられている。
図30に示した破線の格子点には、それぞれ入力画像の画素が存在するものとする。ここで、このような入力画像を、図の右側に四角印を並べて示すような画素配列の出力画像に縮小する場合を考える。このとき、各出力画素A毎に、対応する入力画像上の座標を求める。その位置は図の格子中に四角印で表示した。この出力画素Aの画素値は、その周辺に存在する入力画像の画素の画素値を平均して求める。
即ち、入力画素が丁度境界上に存在する場合には、例えば図33に示すようなルールを設定する。図33に示すように、境界51Lあるいは51Hの真上に存在する画素はいずれも、例えば左側あるいは上側の領域に含まれる画素のグループに属するものと定義する。
この図により、縦方向の境界画素71と横方向の境界画素72とを定義する。境界51Lと51Hによって囲まれた小領域には、図に示すような白丸と黒丸で表現される入力画素が含まれる。このとき、主走査方向に平行な境界51Hに最も近い1列の画素を横方向の境界画素72と定義する。また、副走査方向に平行な境界51Lに最も近い画素を縦方向の境界画素71と定義する。図29に示した装置は、これらの境界画素を他の画素と区別して認識し、境界画素を認識したとき、所定の集計処理や平均化処理を実行する。これによって、比較的小容量の途中結果バッファ54(図29)や入力画像バッファ53(図29)を利用して、領域毎に入力画素のグループに対する画素値の平均値を求める。
上記のような領域設定とグループ化を行うと、例えばこの図に示すように、枠73によって入力画素がそれぞれグループ化され、これらの平均値をとるために縦方向の境界画素71や横方向の境界画素72が読み込まれる。
上記のような境界画素を判定しようとする場合には、この図に示すような境界画素の判定基準が必要となる。図に示すように、入力画像51を横方向の境界51Hと縦方向の境界51Lとによって、それぞれグループの領域51Zという単位に等分割する。このとき、横方向の境界画素の判別関数をborder・x(X)とし、縦方向の境界画素判別関数をborder・y(Y)とする。border・x(X)は、図の(b)に示すように、dst・xとsrc・xとXの関数である。dst・xは出力画像の主走査方向の幅である。また、src・xは入力画像の主走査方向の幅である。Xは、入力画像を主走査方向に見た場合の着目する画素の順位である。入力画素の間隔を“1”とすれば、全ての小領域の幅はsrc・x/dst・xとなる。こうした条件で、左から数えてX番目の入力画素が境界画素になるための条件は、X番目とX+1番目の入力画素の間に領域の境界が来ることである。領域の境界は、src・x/dst・xの間隔で並んでいるから、X番目の入力画素が境界画素になるための条件は次の(1)式の通りになる。
X<((src・x*n)/dst・x)≦X+1 …(1)
X<((src・x*m)/dst・x)≦X+1 …(2)
この(2)式において、まず両辺にdst・x/src・xを掛ける。dst・x/src・xは正なので不等号の向きは変わらない。
(dst・x*X)/src・x<m≦
(dst・x*(X+1))/src・x …(3)
ここで、mは整数なので両辺にガウス記号をつけてもこの関係は変わらないから次の(4)式の関係が成り立つ。
[(dst・x*X)/src・x]<m≦[(dst・x*(X+1))/src・x] …(4)
つまり、[(dst・x*X)/src・x]<[(dst・x*(X+1))/src・x]が、Xが境界画素になるための条件である。
以上のことから、border・x(X)の定義は次のようになる。
border・x(X)=1:[(dst・x*X)/src・x]<[(dst・x*(X+1))/src・x] …(5)
border・x(X)=0:[(dst・x*X)/src・x]≧[(dst・x*(X+1))/src・x] …(6)
border・y(Y)=1:[(dst・y*Y)/src・y]<[(dst・y*(Y+1))/src・y] …(7)
border・y(Y)=0:[(dst・y*Y)/src・y]≧[(dst・y*(Y+1))/src・y] …(8)
この図面を用いて、途中結果バッファ54の構成とこの具体例で実行される画素値の合計処理について説明する。
例えば、図に示すように、入力画像を構成する画素74が主走査方向に連続して、図29に示す入力画像バッファ53に格納されたものとする。これを順番に図に示した左端から処理する。最初の画素の画素値は図29に示した横方向の合計カウンタHTに格納する。次の画素の画素値はその合計カウンタHTに加算する。そして、次々に各画素の画素値を横方向の合計カウンタHTに累積して格納していくが、丁度そのグループの境界画素を検出すると、そこでレジスタ54Aへ画素値を転記して加算を終了する。境界画素の検出はborder・xの値から判断する。
主走査方向に見る処理は図37に示すようにして進められる。そして、1ライン分の処理が終了すると、次の1ライン分の処理が進められる。この副走査方向の処理がこの図に示すように行われる。
副走査方向の処理を実行する場合、その処理開始前に必ずborder・yの値を参照する。border・yの値が“0”の場合には、図37で示した1ライン分の集計処理が実行される。途中結果バッファ54の各レジスタの内容は、1ライン毎に加算され累積される。ここで、border・yの値が“1”となったラインを処理することを考える。このラインは領域の最後に配置された画素値群であるから、領域毎にその画素値の集計を行うと、途中結果バッファを構成する各レジスタの保持する値は、このライン上にある全ての小領域のそれぞれ画素値の合計値である。これとは別に、図29に示したパラメータ保持部60の横方向のドット数xnumと、縦方向のドット数ynumとをカウントしているため、各領域を構成する画素数が計算できる。従って、各領域の画素値の合計を各領域に含まれる画素数で割ることによって、平均値を求めることができる。これがフレームバッファ57に格納されて出力画素の画素値となる。
ステップS1〜ステップS4は初期化の処理である。ステップS1では、入力画素縦カウンタIYと出力画素縦カウンタOYとを“0”にセットする。これによって、1ライン目からの読み出しを可能にする。ステップS2では、横方向の合計カウンタHTを“0”にする。これは画素値の中間的な集計結果を保存するためのものである。最初は1番左の画素を指定する。ステップS3では、縦方向のドット数ynumを“1”にし、横方向のドット数xnumを“1”にする。これによって、領域内の画素数を主走査方向と副走査方向に向かってカウント開始する。ステップS4では、途中結果バッファ54をクリアする。これで全ての小領域画素値集計結果に対応するレジスタがクリアされる。
一方、ステップS13において、border・yの値が“1”になった場合には、ステップS14の割り算処理に進む。
割り算処理においては、まずステップS1において、横方向のドット数xnumに初期値“1”を代入する。また、入力画素横カウンタIXに初期値“0”を代入する。更に、ステップS2において、出力画素横カウンタOXに初期値“0”を代入する。
これらによって、1ライン分の最初の画素から処理を開始する準備を行う。
以上の例によれば、入力画像を構成する画素を1ライン分ずつ保持し、主走査方向に見たときの小領域の境界画素を検出しながら、画素値の集計値を求めて途中結果バッファに格納し、副走査方向に見たときの境界画素を検出して、各小領域の画素値の集計値を領域に含まれる画素数で割ることによって、各領域における画素値の平均値を求める。このようにしたので、入力画像を構成する画素値を保持するためのメモリが、1ライン分の入力画像バッファと比較的小容量の途中結果バッファのみとなり、使用メモリ量を少なくすることができる。
図41に、具体例7の装置のブロック図を示す。
この装置は、具体例6の装置に対しパラメータ保持部60にサンプリングの間隔Aを保持するためのレジスタを設けたものである。そして、これによって、各小領域の全ての画素値を加算して平均するのでなく、一部サンプリングした画素の画素値を平均する。
図に示すように、入力画像1は、副走査方向に平行な境界51Vと主走査方向に平行な境界51Hによって小領域に等分割されている。この小領域には多数の画素が含まれるが、図に示すように黒丸の画素74Aと白丸の画素74Bとを設定し、黒丸の画素74Aのみをサンプリングする。領域に含まれる画素の両端の画素間隔を図に示すように主走査方向Dx、副走査方向Dyとした。そして、サンプリング間隔をAとした。ここでは、実際には主走査方向も副走査方向もAの間隔で1個おきに画素がサンプリングされる。
図の左側に示すものが元の入力画像であって、右側に示すものがサンプリングされた入力画素の集まりを示す。この図に示すように、サンプリング間隔を縦横同じに設定すると、サンプリングされた入力画素の集まりが元の入力画像と相似形の画像となる。
この処理は、大部分図39に示す具体例6の動作フローチャートと同様である。図44の具体例では、ステップS5とステップS8とステップS9を新たに追加している。他の部分は図39と同様の処理であるため、重複する説明を省略する。まず図44のステップS5ではAの値を求める。即ち、ここでサンプリングの間隔を読み込む。画素1個おきでサンプリングを行う場合には、このAの値は既に説明したように“2”となる。更に、ステップS7で入力画素を読み込んだ直後、ステップS8でIYをAで割った余りと0を比較することで、サンプリング行であるかどうかの判断をする。
ここで、予めいくつかのパラメータを設定する。
(1)具体例1と同様に、平均は出力画素に対応する入力画素のグループ毎に求める。ただし、具体例1と異なり、グループ内全ての入力画素の合計を求めるわけではない。
(2)一定の間隔Aで、合計を取る入力画素をサンプリングする。A=1の場合は全ての入力画素をサンプリングすることになる。サンプリングの間隔Aは縦横一定である。これは、サンプリング後の画像が、元の画像と相似になるようにしたいためである。
(1)合計できる入力画素の最大数をNとする。Nは合計の計算の精度と、入力画素の階調数によって求まる。例えば、画素値が256階調(この場合、画素値の最大数は255)で、16ビットで合計を求める場合、16ビットで表現できる最大数は65535なので、全ての画素が255である場合を考えるとN*255≦65535を満たす必要がある。つまり、N=257となる。
(2)グループ中の横方向の画素の数をDx、縦方向の画素の数をDyとする。Aの間隔でサンプリングする場合、サンプリングする画素数はグループ中には横方向にDx/A、縦方向にDy/Aである。そして、サンプリング数はNを超えてはいけないので、間隔Aは、次のような式を満たす必要がある。
(Dx/A)*(Dy/A)≦N …(9)
ただし、Aは整数である。
A′の値は、(Dx/A′)*(Dy/A′)=Nを解くことで、次のようになる。
A′=sqrt((Dx*Dy)/N) …(10)
A=[A′]+1 (A′が整数でない場合) …(11)
A=A′ (A′が整数のとき) …(12)
ただし、[A′]はガウス記号でA′を超えない最大の整数の意味であり、sqrtは平方根の意味である。
しかし、Aの計算の際に、Dx,Dyの最大値を用いることで、全てのグループで問題無く使用できるAの値を得ることができる。
Dx,Dyの最大値は、入力画像のサイズsrc・x,src・yから、次の式で求めることができる。
Dx:src・x/dst・xを切り上げたもの
Dy:src・y/dst・yを切り上げたもの
以上のように、一定の間隔Aでサンプリングを行えば、小領域に含まれる画素数が多い場合に、これらのうちの任意の数の画素に絞って合計を行うことができる。これにより、途中結果バッファに合計を求めて保持する場合に、その合計値が必要以上に大きくならず、バッファのメモリ容量を十分に小さく抑えることができる。
図45に、具体例8の装置のブロック図を示す。
この具体例では、具体例7の装置に対しサンプリングの間隔Aと共にサンプリング合計カウンタSTを記憶する領域を加える。他の部分は具体例7と同様の構成である。
上記の処理では、サンプリングを行うことによって途中結果バッファのレジスタがオーバーフローすることなく、画素値を合計しその平均を求めることができる。なお、この場合、サンプリングされない入力画素は無視されていた。この具体例でサンプリングされない画素についても平均をとるようにし、画質の向上を図る。この平均をとる範囲を定義するために、サンプリング領域という概念を導入する。サンプリング領域は、サンプリング対象になるラインについて、サンプリングの対象となっている入力画素から、すぐ右の隣のサンプリング対象となっている入力画素を含むいくつかの入力画素から構成される。これは幅がAで、高さが1ライン分の入力画像上の領域となる。図46に示す黒丸の画素は、サンプリング対象となるラインの画素である。そして、ここでは隣合う2個ずつの画素をサンプリング領域80に設定する。こうして、図の左側に示すような元の入力画像に対し画素を平均化することによって、図の右側に示すような、元の入力画像と相似形の入力画素の集まりができる。
例えば、この図に示すように、境界51Hと51Vとによって設定された1つの小領域に多数の画素が存在する場合、Aライン毎にサンプリングが行われるとする。このとき、最初のラインの黒丸の画素74Aとその右隣の画素47Bとは同一のサンプリング領域80に含まれる。この同一のサンプリング領域80に含まれる画素の画素値は図45に示すサンプリング合計カウンタSTでその都度加算され平均化され、その後図45に示す横方向の合計カウンタHTに累積される。このように、その都度サンプリング領域に含まれる画素値を平均化した上で、途中結果バッファ54にその画素値を累積するようにすれば、実質的にサンプリング数が多くても合計値がオーバーフローするおそれがない。
このフローチャートは、図39を用いて説明した具体例6のフローチャートと、ステップS5〜ステップS8の部分のみが異なる。まず、ステップS1〜ステップS4までで初期化処理が行われるが、ステップS5で、1ライン分の各画素の処理に移ったとき、図45に示したサンプリング合計カウンタSTに入力画素バッファのIX番目の要素を足す。次のステップS6で、IX+1番目、即ちその隣の画素とサンプリング数との比較を行う。サンプリング数よりも小さい場合には、サンプリング領域内部である。従って、このステップS6で、サンプリング合計カウンタSTに同一のサンプリング領域に含まれる画素の画素値全てを加算する処理を繰り返す。全ての加算処理が終えるとステップS6からステップS7に進み、ここではサンプリング合計カウンタSTをサンプリング数で割ることによって、サンプリング領域内の画素値の平均を求める。次に、これを横方向の合計カウンタHTに加算する。こうして、サンプリング領域内の画素値の平均をHTに加算した上で、ステップS8でサンプリング合計カウンタSTの初期化を行い、次の処理へ進む。
このようなステップS5〜ステップS8の処理をこれまでの具体例に含めることによって、サンプリング領域内の平均値算出が可能になる。
図48のステップS1では、この具体例8特有の初期化処理が行われる。その内容は、この図に示すように、ステップS31〜ステップS34については、図44のステップ1〜ステップS4のこれまでの初期化処理と全く同様である。また、ステップS35では、図44の具体例7の処理と同様に、サンプリング間隔Aの値を求める。そして、ステップS36では、サンプリング合計カウンタSTの初期化を行う。こうして、合計処理のための準備が終了する。
この具体例8によれば、小領域に含まれる画素数が多く、これらの画素値を合計した場合に、途中結果バッファの各レジスタが桁数の面でオーバーフローするような場合に、元の画像の画質を損なうことなく平均化処理が可能になる。即ち、サンプリング領域については予め平均化を行った後、途中結果バッファにその平均値を加算するような累積方法をとるため、途中結果バッファがオーバーフローしない。
なお、上記の例では、主走査方向についてのみサンプリング領域を設定する例を示したが、副走査方向についても同様のサンプリング領域を設定して、オーバーフローを防止することが可能である。
これまで説明した例では、例えば画像を拡大する場合、各行及び各列単位に画素を何回コピーするかという整数倍率を計算する必要があった。こうして計算した結果をもとに、まず、拡大/縮小テーブルを用意し、その後、このテーブルを参照しながら拡大/縮小処理を行う。こうすれば、テーブルの参照だけで画素ごとの拡大/縮小倍率を得られることから、画像拡大/縮小処理の高速化が図られる。しかしながら、拡大前後の画像サイズによっては、拡大/縮小テーブルのデータ量が大きくなり、メモリ効率を低下させる場合もある。この具体例では、拡大/縮小倍率の演算を高速に簡単に行えるようにして、これまでとは逆に、拡大/縮小テーブルを不要にして、メモリエリアを節約する。
この具体例では、以下、行とかラインとかいう用語を用いて説明を行うが、これは主走査方向を示す。列方向即ち、副走査方向についても同様の処理ができることはいうまでもない。
図の1番左に示す(1)が原画像であって、白または黒で塗り潰した部分は1ライン分の画素群である。図の真ん中に示した(2)は、(1)の画像を縦方向に丁度1.75倍した状態を示す。もし、各ラインが実数倍即ち1.75倍という倍率で縦方向にそのまま拡大できるならば、この(2)に示すような結果になる。
MUL(n)=[n*mul]−[(n−1)*mul]
但し、mul=(出力画像のサイズ)/(入力画像のサイズ)である。
また、式の中で使用した各記号の意味は次の通りである。
[]:ガウス記号(内部の実数を超えない整数)
n:行番号(n=1から始まるものとする)
例えば、ここでDEC=0.3の場合を考える。最初の1ライン目は小数部分が0.3である。2ライン目は小数部分が0.6になる。3番目は小数部分が0.9になる。そして、4番目は小数部分が0.2となり、1だけ繰り上がるから1ライン増やすことになる。ここで、1ライン目、2ライン目、3ライン目の小数部分は必ずDECより大きい。そして、繰り上がりが生じるときの小数部分は0.2となっている。このとき、初めて小数部分がDECより小さくなる。このアルゴリズムをまとめると次のようになる。
BASE=[mul]
DEC =mul−BASE
各行毎の倍率は以下のように求める。
DEC*nの小数部≧DECの場合、倍率はBASE
DEC*nの小数部<DECの場合、倍率はBASE+1
以上のようなアルゴリズムは実数乗算が1回、実数比較(実数減算)が1回、実数から小数部分のみを取り出す処理(実数減算)が1回必要となるが、既に説明した処理に比べて演算回数が減少している。
前処理として、以下の値を計算しておく。
BASE=[mul]
DEC =(mul−BASE)*232+1
DECは32ビット幅の整数レジスタで保持する。
上記BASEは整数部分、DECは小数部分である。+1としたのは、さらに下位の小数部分が存在する場合に、切り上げ処理をするためである。
DEC2=DEC*n
計算結果のDEC2は32ビット幅の整数レジスタで保持する。
DEC,DEC2の大小比較により、整数倍率を決定する。
DEC2≧DECの場合、倍率はBASE
DEC2<DECの場合、倍率はBASE+1
この装置は、外部記憶装置91と最近傍法拡大/縮小装置92を備える。この最近傍法拡大/縮小装置92には、倍率計算部93、最近傍法拡大/縮小処理部94及びラインバッファ95が設けられている。また、この装置の出力は、出力画像フレームバッファ96に取り出されるよう構成されている。
この倍率計算部93は、乗算部103,104、比較/選択部105,106及び倍率計算器107を備えている。倍率計算器107には、レジスタDECX1,DECX2,BASEX1,BASEX2,DECY1,DECY2,BASEY1,BASEY2が設けられている。乗算部103は、X座標101を受け入れて所定の整数乗算を行う計算部である。乗算部104は、Y座標102を受け入れて所定の整数乗算を行う計算部である。
まず、ステップS1において、最初に指定された実数倍率に従って倍率計算部93内部のレジスタの設定を行う。レジスタ設定については後で詳細に説明する。次に、ステップS2において、外部記憶装置91からラインバッファ95へ入力画像1ライン分を読み込む。ステップS3において、読み込んだラインデータのY座標に対応する整数倍率を倍率計算部93によって計算する。ステップS4では、ラインバッファ中の処理対象画像データのX座標に対応する整数倍率を倍率計算部93により計算する。
以上の処理によって、出力画像フレームバッファには、入力画像データの上から下、左から右に向かって順に各画素の複製が出力されていく。
図の黒丸印で示した画素は出力画像の画素である。また、図の格子で仕切った各領域は入力画素の1画素に対応する。X軸方向、Y軸方向共に整数倍率でないため、入力画素1画素分の領域は、それぞれ異なる画素数の出力画素に対応している。
なお、以下のレジスタ設定動作と倍率計算方法については、X方向の説明のみを行う。Y方向については同様なので説明を省略する。
まず、図53に示すレジスタDECX1,DECX2,BASEX1,BASEX2の幅をNビットとする。また、指定された実数倍の倍率をmulで表す。具体例として、レジスタ幅を32ビット(N=32)、拡大倍率2.5倍(mul=2.5)について説明する。
DECX1 = DEC*2N+1
= 0.5*232+1
= 2,147,483,649
図57には、X方向倍率計算のフローチャートを示した。
ここでは、具体例としてN=32、mul=2.5、X座標は2(X=2)の場合について説明する。図53に示した乗算部103は、図52に示す最近傍法拡大/縮小処理部94によって指定されたX座標とレジスタDECX1の内容とを掛け合わせ、レジスタDECX2に設定する(ステップS21)。次のステップS22では、判断処理(ステップS23)の結果により、ステップS24あるいはステップS25を実行する。
以上のようにすれば、座標値に応じた整数倍率の計算が整数乗算と比較/選択のみにより実現する。
この具体例によれば、最近傍法による画像データの実数倍率の拡大/縮小をする場合に、各行/各列に割り振る整数倍率の計算を、レジスタ幅の限界を利用して高速化できる。これによって、拡大/縮小テーブルを予め全て用意する必要がなくなる。従って、拡大/縮小テーブルを保持するためのメモリが不用になり、コンピュータのメモリ使用効率が向上する。また、最近傍法による画像データの実数倍率の拡大/縮小処理を、少ないメモリ容量で高速に実行することを可能にする。
画像の拡大をした場合に、コピーした画素の画素値を決定する方法として、最近傍法と一次補間法とがある。具体例4等で説明した一次補間法では、周囲4画素の画素値と各画素までの距離を用いて、尤もらしい画素値を求める。これにより、拡大処理を行った際のジャギを目立たなくし、画質を向上させる。この方法では、例えば具体例4を説明する図19に示した近傍エリアテーブルを利用する。ここにも、具体例9で用いたアルゴリズムを採用することができる。
図58の左側には入力画像を示し、右側には出力画像を示した。
図に示すように、入力画素で作られる格子を出力画像にマッピングすると、入力画素で作られる格子で囲まれた領域が近傍エリアとなる。一次補間処理は、この近傍エリアと呼ばれる領域を単位に行う。この近傍エリアに含まれる出力画素の数は以下の式で得られる。
A=1のとき MUL(n)=B
A≠1のとき MUL(0)=1
MUL(n)=[n*mul]−[(n−1)*mul]
(n>0)
但し、mul=(B−1)/(A−1)である。
具体例4の図19においても同様の趣旨の説明をした。
A:入力画像のサイズ
B:出力画像のサイズ
n:=近傍エリアの番号(n=0から始まるものとする)
MUL(X):X番目の近傍エリアの画素数
[]:ガウス記号(内部の実数を超えない最大の整数)
具体例4の図19においても同様の趣旨の説明をした。
図59(a)において、最近傍法では、まずステップS31で、X方向の倍率計算を行う。そして、ステップS32において、1画素分画素を複製し、ステップS33において、X方向の倍率分画素の複製が終了したかを判断する。これによって、X方向の倍率分画素を複製する。更に、その複製が終了すると、ステップS34において、入力画像ライン幅分の画素複製が終了したかどうかを判断する。これによって、ライン幅方向の画素複製を実行する。こうしてX方向及びY方向の画素複製が終了する。
上記倍率計算とMULXの計算は、同一の演算をしている。
(2)整数倍率を計算する式に条件判定を入れ、画素の位置が上端または左端の場合には整数倍率を“1”にするようにする。
しかしながら、上記(1)の方式は処理が複雑になり、プログラムサイズが大きくなる欠点がある。(2)の方式は条件判定が1つ増えるため、プログラムの実行速度が落ちてしまう。この具体例10では、プログラムサイズもあまり大きくならず、実行速度も落ちない方法を紹介する。これは次の考え方で実現できる。
(2)MULXは近傍エリアを走査するループの先頭で、“1”に初期化する。
(3)拡大率の計算のタイミングをループの先頭ではなく、後方で行うように変更する。
なお、これは横方向についてのみ説明したが、縦方向についても全く同様である。
この装置は、外部記憶装置111、一次補間拡大/縮小装置112及び出力画像フレームバッファ119から構成される。一次補間拡大/縮小装置112は、倍率計算部113、一次補間拡大/縮小処理部114、前行ポインタ115、現行ポインタ116、ラインバッファ117、ラインバッファ118により構成される。
この倍率計算部113は、具体例9の場合と同様、X座標121、Y座標122を受け入れて、X方向倍率124及びY方向倍率125を出力する回路である。倍率計算部113の中には、乗算部126,127、比較/選択部128,129及び倍率計算部123が設けられている。具体例9の場合と異なるのは、比較/選択部128の出力側にMULX131が設けられ、比較/選択部129の出力側にMULY132が設けられた点である。
まず、ステップS1において、倍率計算部のレジスタ設定を実行する。この各レジスタに格納される値は、後で詳しく説明するが、レジスタMULX及びMULYに、それぞれ“1”を入れておくことが重要である。次に、ステップS2において、外部記憶装置から現行ポインタ116が指し示すラインバッファ117あるいは118にデータを読み込む。
次に、ステップS9において、Y方向の倍率を計算し、MULYに格納する。ステップS10は、バッファポインタを入れ替えることによって更新する。そして、ステップS11において、ステップS2〜ステップS10までの処理を入力画像のライン数分繰り返す制御を行う。
ここでも、具体例9の場合と同様に、図61に示した倍率計算部113の各レジスタのビット幅をNビットとする。入力画像の幅Aと出力画像の幅Bから実数倍率mulを求める(ステップS11)。次に、求めた実数倍率mulを整数部と小数部とに分離する(ステップS12)。BASEは整数部、DECは小数部である。
mul=(6−1)/(3−1)
=2.5
更に、DECX1は、次の式で求められる。
DECX1=DEC*2N+1
=0.5*232+1
=2,147,483,649
DECX2≧DECX1の場合、倍率はBASEX1
DECX2<DECX1の場合、倍率はBASEX2
以上の計算を近傍エリアごとに行えば、図19で示した近傍エリアテーブルを保持しておく必要が無い。
以上の例によれば、一次補間法による画像データの実数倍率の拡大/縮小において、拡大倍率を保持するレジスタを利用し、具体例9で説明したアルゴリズムを併用して、近傍エリアテーブル保持によるメモリ効率の低下を解消した。なお、一次補間法による画像データの実数倍率の拡大/縮小をこれにより、高速でかつ省メモリにより実現できる。
印字しようとするイメージが印字可能な領域をはみ出る場合、イメージを印字領域の大きさに合わせて切り取る必要がある。この切り取る作業をクリッピングと呼ぶ。
図64には、クリッピングが必要な例説明図を示す。
この例では、イメージを最近傍法で5倍に拡大して印字している。図の黒塗り部分135が最近傍法で5倍に拡大されたイメージである。そのドット構成を下側に示す。丸印は各画素である。
この装置は、外部記憶装置141、最近傍法拡大/縮小装置142及び出力画像フレームバッファ143から構成される。また、最近傍法拡大/縮小装置142は、倍率計算部144、クリッピング計算装置145、最近傍法拡大/縮小装置146及びラインバッファ147から構成される。
まず、ステップS1において、上端、左端の拡大倍率をクリッピング計算装置145を用いて計算する。次にステップS2で、倍率計算部で用いるレジスタを初期化する。この場合、レジスタMULX及びMULYは、ステップS1で求めた値を設定する。次に、ステップS3において、外部記憶装置から1ライン分のデータを読み込み、ラインバッファに格納する。
図のステップS11〜ステップS14までの処理は、具体例9の処理と同一である。即ち、実数倍率mulの整数部をBASEに、小数部分をDECに設定する。そして、レジスタBASEX1にはBASEを、レジスタBASEX2にはBASE+1を設定する。その後、レジスタDECX1には、DEC*2N+1を設定し、MULXに、クリッピング計算装置を用いて計算した左端の画素の拡大率を設定する。
以上の例によれば、最近傍法による画像データの実数倍の拡大/縮小において、クリッピングが必要な場合においても、先頭の倍率計算を行うレジスタにその倍率を予め計算し、設定するようにしたので、実数倍率の拡大/縮小を高速かつ省メモリで実現することが可能になる。もちろん、一次補間による様々な拡大/縮小処理において、クリッピングに対処することが可能になる。
4 出力画像データ
1X,1Y 拡大/縮小テーブル
Claims (4)
- 入力画像データを形成する複数の入力画素を所定の倍率で複数の出力画素に縮小して出力画像データを生成する画像データの縮小方法において、
前記入力画像データを小領域に分割し、小領域に含まれる入力画素と小領域の境界上の入力画素とを区別して認識し、前記小領域内の入力画素値と認識された境界上の入力画素値とに基づいて小領域内の入力画素値を演算して出力画素値を求める画像データの縮小方法であって、
前記小領域内の入力画素をサンプリングするサンプリング領域を指定し、サンプリング領域内の画素値を演算することにより出力画素値を求めることを特徴とする画像データの縮小方法。 - 入力画像データを形成する複数の入力画素を所定の倍率で複数の出力画素に縮小して出力画像を生成する画像データの縮小装置において、
前記入力画像を複数の入力画素を含む小領域に区分し、隣接する小領域間を仕切る境界線上に位置する入力画素を検知して該入力画素を含むいずれかの小領域を一定条件に基づいて決定する境界線画素判定手段と、
前記各小領域に含まれる複数の入力画素の各画素値に基づいて出力画素の画素値を演算する画素値演算手段と、
を有する画像データの縮小装置であって、
前記画素値演算手段は、前記小領域にサンプリング領域を設定し、該サンプリング領域内の入力画素に基づいて前記出力画素の画素値を演算することを特徴とする画像データの縮小装置。 - 入力画像を、主走査方向に平行な境界と副走査方向に平行な境界により小領域に等分割し、各領域中に含まれる画素の画素値を平均して出力画素の画素値を求めることにより、入力画像を縮小した出力画像を得るものにおいて、
入力画像を構成する画素の画素値を主走査方向にみて1ライン分受け入れて保持する入力画像バッファと、
前記入力画像バッファに受け入れた各画素の画素値を主走査方向に順に累積していき、副走査方向に平行な境界の手前で、この境界に最も近い境界画素を検出したときまでに求められた、同一小領域内の画素値の合計を、小領域単位で保持する途中結果バッファと、
副走査方向に1ライン分ずつ入力画像を処理していき、主走査方向に平行な境界の手前で、この境界に最も近い境界画素を検出したときまでに求められた各小領域内の画素値の合計を、途中結果バッファから読みだして、各小領域に含まれる画素数で割って、小領域毎の画素値の平均値を求め、その平均値を出力画像の画素の画素値とする制御部とを備えた画像データの縮小装置であって、
前記入力画像を分割した小領域に含まれる画素のうちの一部をサンプリングして、それらの画素値を集計するために、サンプリングの間隔を設定して保持するパラメータ保持部を設け、
途中結果バッファは、
前記パラメータ保持部を参照して、サンプリング間隔ごとに画素値を集計して保持することを特徴とする画像データの縮小装置。 - 請求項3に記載の縮小装置において、
入力画像を分割した小領域に含まれる画素を、主走査方向に連続した任意の数の画素を含む複数のサンプリング領域で区分し、そのサンプリング領域毎に画素値を集計するために、サンプリング合計カウンタを設け、
前記制御部は、
サンプリング領域ごとに集計された画素値とそのサンプリング領域に含まれる画素数により、サンプリング領域における画素値の平均値を求め、
前記途中結果バッファは、
サンプリング領域における画素値の平均値を累積した、同一小領域内の画素値の合計を、小領域単位で保持することを特徴とする画像データの縮小装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004096463A JP3962029B2 (ja) | 1996-10-30 | 2004-03-29 | 画像データの縮小装置及び方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP30384496 | 1996-10-30 | ||
JP35878696 | 1996-12-27 | ||
JP2004096463A JP3962029B2 (ja) | 1996-10-30 | 2004-03-29 | 画像データの縮小装置及び方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP27809197A Division JP3865165B2 (ja) | 1996-10-30 | 1997-09-24 | 画像データの拡大/縮小方法 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007062458A Division JP4069300B2 (ja) | 1996-10-30 | 2007-03-12 | 画像データの拡大装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004288198A JP2004288198A (ja) | 2004-10-14 |
JP3962029B2 true JP3962029B2 (ja) | 2007-08-22 |
Family
ID=33303581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004096463A Expired - Fee Related JP3962029B2 (ja) | 1996-10-30 | 2004-03-29 | 画像データの縮小装置及び方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3962029B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101375662B1 (ko) | 2007-08-06 | 2014-03-18 | 삼성전자주식회사 | 이미지 데이터 압축 방법 및 장치 |
CN115239561B (zh) * | 2022-07-25 | 2023-04-18 | 广东保伦电子股份有限公司 | 一种图像缩小下防止图像剪切现象的处理方法及处理终端 |
CN116863861B (zh) * | 2023-09-05 | 2023-11-24 | 欣瑞华微电子(上海)有限公司 | 基于非显性点判断的图像处理方法、设备及可读存储介质 |
-
2004
- 2004-03-29 JP JP2004096463A patent/JP3962029B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004288198A (ja) | 2004-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3865165B2 (ja) | 画像データの拡大/縮小方法 | |
EP0336776B1 (en) | Image magnification | |
US7043091B2 (en) | Method and apparatus for increasing spatial resolution of an image | |
JPH05334427A (ja) | 画像の拡大縮小方法 | |
JP2009049562A (ja) | 画像処理装置、方法およびプログラム | |
JP4947351B2 (ja) | 画像処理装置、及び、プログラム | |
JP3962029B2 (ja) | 画像データの縮小装置及び方法 | |
JP2001028051A (ja) | 画像処理装置、画像処理方法、及び画像処理プログラム記録媒体 | |
JP4069300B2 (ja) | 画像データの拡大装置 | |
US8902474B2 (en) | Image processing apparatus, control method of the same, and program | |
JP2885999B2 (ja) | 画像処理装置及びその方法 | |
JP4156194B2 (ja) | 第1の解像度のラスタのデジタルデータを第2の解像度のデジタルデータに変換する方法 | |
JP2000187726A (ja) | デ―タ補間方法および装置及び記憶媒体 | |
JP4265363B2 (ja) | 画像処理装置 | |
JP4517288B2 (ja) | 画像処理装置、画像処理方法及びそのプログラム | |
JP2780405B2 (ja) | デジタル画像処理装置 | |
JP3760634B2 (ja) | 画像処理装置、画像処理方法および記録媒体 | |
JP2009122841A (ja) | 画像一覧イメージ構築装置、記録媒体及び画像形成装置 | |
JP4517287B2 (ja) | 画像処理装置、画像処理方法及びそのプログラム | |
JP2906717B2 (ja) | 画像変倍方法 | |
JP2641392B2 (ja) | デジタルハーフトーンスクリーン生成方法および装置 | |
JP3517982B2 (ja) | 図形描画装置 | |
JPH0668247A (ja) | ディジタル画像データ変倍方法および装置 | |
JPH05236257A (ja) | デジタル画像処理装置 | |
JP2857260B2 (ja) | 矩形領域の判定方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20061220 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070109 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070308 |
|
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: 20070417 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070517 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100525 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110525 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120525 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130525 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140525 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |