従来より、パーソナルコンピュータ(以下、単に「PC」と称す)等において、作成した画像の縮小を行う場合には、近傍画素の補間によって縮小を行う方法として、バイ・リニア法、バイ・キュービック法、平均画素法などが用いられている。また、画像の拡大を行う場合には、バイ・リニア法、バイ・キュービック法などが用いられる。(特許文献1参照)。
ここで、縮小画像を生成する一般的なバイ・リニア法について、図5を用いて説明する。図5は、従来のバイ・リニア法について説明する図である。図5においては、小さな四角形の集合体にて模式的に画像を表現しており、小さな四角形のそれぞれがピクセル格子に相当している。ピクセル格子の各頂点(格子点)は、画素が配置される位置である。
図5中、左方には、13×9画素で構成された入力画像(元画像)が表示されている。入力画像においては、各格子点のそれぞれにおける画素を黒丸で表示している。9行13列に配置された各画素のそれぞれには、左上端を原点とし、横軸をX軸、縦軸をY軸とするXY座標が付与されている。具体的には、画像左上端の画素(ピクセル)の座標が(0,0)とされ、右下端の画素に最終座標(12,8)が付与されている。また、図5に示した入力画像は、13×9画素を備えているので、X軸方向におけるピクセル格子間の数(ピクセル格子間の数を表す画素数)は、13画素から1画素を減算した12となる。Y軸方向におけるピクセル格子間の数も同様に、9画素から1画素を減算した8となる。このX軸,Y軸方向の画素数またはピクセル格子間の数が、X軸方向およびY軸方向の長さに相当する値となる。
ここで、例えば、縮小率が0.6倍で指定されると、生成される縮小画像(出力画像)は、X軸方向に7.8画素、Y軸方向に5.4画素の大きさとなる。ピクセル格子間の数で表せば、生成される縮小画像は、7.2×4.8の大きさとなる。しかし、デジタル画像においては、画素数は整数値である必要があるので、小数点以下の値を切り捨て又は切り上げて整数化を行う。この整数化により、ここでは、8×5画素で構成される縮小画像が生成されている。
図5においては、右上方に生成される縮小画像を示した。図5に示す縮小画像は、8×5画素で構成されているので、X軸方向におけるピクセル格子間の数は7となり、Y軸方向におけるピクセル格子間の数は4となる。また、各画素には、入力画像と同様に画像左上端の画素の座標を(0,0)として、(0,0)〜(7,4)の座標がそれぞれ付与されている。
縮小画像の画素数が決定されると、その決定された画素数分(8×5画素)の画素値を生成する。縮小画像の各画素の画素値の生成に際しては、まず、縮小画像の各画素に対応する入力画像上の座標(参照点)を決定する。言い換えれば、縮小画像の各画素の座標(x,y)に対応する入力画像上の参照点の座標(X,Y)を決定する。
参照点の座標の決定においては、以下に示す2つの方法が広く知られている。図5においては、第1の方法にて参照点を入力画像上に設定する方法を縮小画像の下方左側に示し、第2の方法にて参照点を入力画像上に設定する方法を縮小画像の下方右側に示す。この縮小画像下方の入力画像上において表示された実線の白丸が、設定された参照点を示している。
第1の方法は、縮小画像の原点の画素に対応する参照点の座標を(0,0)とすると共に、縮小率の逆数を参照点の間隔として、入力画像の原点からその間隔ずつ進行した位置を、参照点の座標とする方法である。これによれば、各参照点の座標は、縮小画像の各画素の座標に、縮小率の逆数を乗算することによって求められる。縮小画像を縮小率の逆数倍すると、入力画像の大きさとなるからである。尚、ここでの縮小率は、上記の指定された縮小率0.6ではなく、実際に縮小画像を生成する際に用いられた画素数の比である。
この第1の方法によれば、図5に示すように、縮小画像の第1行目に配列される画素に対応する参照点は、入力画像の第1行目に設定され、縮小画像の第1列目に配列される画素に対応する参照点は、入力画像の第1列目に設定される。
具体的には、図5においては、X軸方向において13画素を8画素にする縮小が行われているので、X軸方向の縮小率は、8/13であり、その逆数は13/8、即ち、1.625である。従って、8画素を13画素分に配分して配置するには、入力画像の画素間隔(ピクセル格子間)の1.625倍ずつに参照点を配置すれば良いこととなるので、X軸方向に座標を1.625ずつ進めた位置に参照点のX座標が規定される。つまり、縮小画像の画素p(0,0)に対応する入力画像上の参照点の座標を(0,0)とすると、例えば、縮小画像の画素P(1,0)に対応する入力画像上の参照点の座標は、(1.625,0)、縮小画像の画素p(2,0)〜(7,0)に対応する入力画像上の参照点の座標は、(1.625×n,0)となる(尚、nは縮小画像における画素のx座標の値2〜7である)。
同様に、Y軸方向において9画素を5画素にする縮小が行われているので、Y軸方向の縮小率は、5/9であり、その逆数は9/5、即ち、1.8である。従って、Y軸方向に座標を1.8ずつ進めた位置に参照点のY座標が規定される。このため、例えば、縮小画像の画素p(0,1)〜(0,4)に対応する入力画像上の参照点の座標は、(0,1.8×n)となる(尚、nは縮小画像における画素のy座標の値1〜4である)。これにより、縮小画像の各画素に対応する入力画像上の各参照点のそれぞれのXY座標が規定される。
第2の方法は、縮小画像のY軸に沿った両辺上の画素に対応する参照点は、入力画像のY軸に沿った両辺上に設定するとしたものであり、縮小画像のX軸方向両端の画素を除いた残りの画素に対応する参照点を、入力画像においてそのX軸に沿って均等に割り付ける方法である。このため、画素数ではなく、ピクセル格子間の数によって算出した縮小率の逆数を用いて、参照点は、入力画像上に割り付けられる。尚、図5に示した例においては、縮小画像のX軸に沿った両辺上の画素に対応する参照点についても、入力画像のX軸に沿った両辺上に設定するとしている。従って、この第2の方法によれば、縮小画像の第1行目に配列される画素に対応する参照点は、入力画像の第1行目に設定され、縮小画像の第1列目に配列される画素に対応する参照点は、入力画像の第1列目に設定される。その上、縮小画像の最終行に配列される画素に対応する参照点は、入力画像の最終行に設定され、縮小画像の最終列に配列される画素に対応する参照点は、入力画像の最終列に設定される。
具体的には、図5に示すように、8×5画素の縮小画像においては、X軸方向の8画素の内、両端の2画素に対応する参照点は、入力画像上のY軸に沿った両辺上に配置され、残りの6画素に対応する参照点が、入力画像のX軸方向に均等に割り付けられる。ピクセル格子間の数によって算出される縮小率は、入力画像のピクセル格子間の数が12、縮小画像のピクセル格子間の数が7であるので、12/7となり、その逆数は7/12、即ち、約1.714となる。従って、入力画像のピクセル格子間の1.714倍の間隔で参照点を設定することにより、6つの画素に対応する6つの参照点がX軸方向に略均等の間隔で配置されることとなる。これにより、縮小画像の画素p(0,0)に対応する入力画像上の参照点の座標は(0,0)、縮小画像の画素p(7,0)に対応する入力画像上の参照点の座標は(12,0)となり、縮小画像の画素p(1,0)〜(6,0)に対応する入力画像上の参照点の座標は、(1.714×n,0)となる(尚、nは縮小画像における画素のx座標の値1〜6である)。
同様に、Y軸方向においてピクセル格子間隔8を4にする縮小が行われているので、縮小率は、4/8であり、その逆数は8/4、即ち、2.0である。従って、Y軸方向に座標を2.0ずつ進めた位置に参照点のY座標が規定される。このため、例えば、縮小画像の画素p(0,1)〜(0,4)に対応する入力画像上の参照点の座標は、(0,2.0×n)となる(尚、nは縮小画像における画素のy座標の値1〜4である)。これにより、縮小画像の各画素に対応する入力画像上の各参照点のそれぞれのXY座標が規定される。
縮小画像の画素に対応する参照点を決定した後は、参照点周辺の周辺画素に対する重みを算出する。この重みは、参照点とその参照点周辺の周辺画素との距離に応じた値である。バイ・リニア法では、周辺画素の画素値を単純に平均して参照点の画素とするのではなく、参照点と周辺画素との位置関係を加味して、参照点に近い画素程、より大きく参照点の画素値に寄与する割合が大きくなるように、重み付けがなされるのである。
図5における拡大図Aには、バイ・リニア法における重み付けの概念を示した。縮小画像の画素p(x,y)に対応する入力画像上の参照点P(X,Y)は、入力画像本来の画素の座標には無く、本来の画素によって形成される格子内に位置している。そして、参照点が属するピクセル格子を形成する画素であって、参照点に近接する4つの画素が周辺画素となる。このため、参照点のXY座標の小数点以下の値を切り捨てることにより、周辺画素の内の最も座標の小さいもの(基準周辺画素)が求められ、該基準周辺画素の座標をP(i,j)とすれば、P(i+1,j)、P(i,j+1)、P(i+1,j+1)の4点が周辺画素として抽出される。尚、参照点P(X,Y)が、入力画像の格子点に存在する場合には、周辺画素には、その格子点上の画素が含まれる。
参照点と各周辺画素との位置関係、言い換えれば、参照点がどれほど周辺画素に近いかは、各周辺画素の座標と参照点との座標で形成されるエリアa1,a2,a3,a4の面積で表すことができる。参照点P(X,Y)が、周辺画素であるP(i,j)に近づくほど、エリアa1の面積は縮小し、逆にエリアa4の面積は増大する。つまり、各エリアa1,a2,a3,a4それぞれの面積割合を、周辺画素P(i+1,j+1)、P(i,j+1)、P(i+1,j)、P(i,j)それぞれの重みとすることができる。
この重みは、拡大図Aからも解るように、2の要素で構成されており、第1要素と第2要素との乗算によって算出される。第1要素は、参照点から各周辺画素までのX軸方向の距離であるtまたは1−tである。距離tは、参照点のX座標から、そのX座標を整数化(小数点以下の切り捨て)した値を減算して求められる。また、重みの第2要素は、参照点から各周辺画素までのY軸方向の距離であるsまたは1−sである。距離sは、参照点のY座標から、そのY座標を整数化(小数点以下の切り捨て)した値を減算して求められる。例えば、拡大図Aに示した参照点Pの座標(X,Y)は、(6.5,5.4)であるので、6.5から6を減算した値0.5が距離tとして算出される。同様に、5.4から5を減算した値0.4が距離sとして求められる。
尚、図5においては、このように算出される重みの第1要素である距離tのそれぞれを、X軸方向に配列された参照点に対応つけて中央部に表示した入力画像の上辺側に示している。また、重みの第2要素である距離sのそれぞれをY軸方向に配列された参照点に対応つけて中央部に表示した入力画像の左辺側に示している。
ピクセル格子間隔は1であるので、算出された各距離を乗算して算出される各エリアa1〜a4の面積は、そのまま、各エリアa1〜a4の面積割合となる。故に、P(i,j)に対する重みは距離1−t×距離1−s、P(i+1,j)に対する重みは距離t×距離1−s、P(i,j+1)に対する重みは距離1−t×距離s、P(i+1,j+1)に対する重みは距離t×距離sとなる。
そして、算出された各重みで周辺画素の画素値に重み付けした後、それらの平均値を算出することで、目的とする参照点の画素値、即ち、縮小画像の画素の画素値を得る。従って、縮小画像の各画素p(x,y)の画素値を求める演算式は、(1)式のようになる。
尚、縮小画像の各画素p(x,y)をp(0,0)〜p(m−1,n−1)、対応する参照点の基準周辺画素をP(i
0,j
0)〜P(i
m−1,j
n−1)、各画素p(0,0)〜p(m−1,n−1)を求めるための重みの第1要素である距離tをt
0〜t
m−1,第2要素である距離sをs
0〜s
n−1とすれば、(1)式におけるxは、0〜m−1の整数値であり、yは0〜n−1の整数値である。また、(1)式において周辺画素の座標にて示される項には、その周辺画素の画素値が代入される。
特開2001−43357号公報
しかしながら、画像を構成する画素は膨大な数であるため、各画素を補間演算にて生成するには多大な時間が必要となるという問題点があった。また、かかる補間演算においては、上記のように、補間演算に関与する各画素に重みづけを行うため、その重みを算出する処理が更に処理時間を増大(処理速度を低下)させる一因となるという問題点があった。ここで、重みの第1要素である距離t及び距離1−tは、縮小画像を形成する画素が該縮小画像において同じ列にあれば、行が変わっても同じ値となるため、縮小画像1行目の画素値の演算において算出した各距離t及び距離1−tの少なくとも一方を記憶し、2行目以降の画素値の演算には、記憶された距離tや距離1−t用いる手法が提案されている。これによれば、2行目以降においては距離tや距離1−tの算出を省略することができるので、画像処理全体にかかる時間を短縮することができる。しかし、距離tや距離1−tの算出を省略した場合であっても、画像データの演算には、未だ膨大な多大な処理時間が必要となるという問題点があった。
本発明は、上記問題点を解決するためになされたものであり、縮小画像および拡大画像の生成速度を向上させることのできる画像処理プログラムおよび画像処理装置を提供することを目的としている。
この目的を達成するために、請求項1記載の画像処理プログラムは、画像の一辺とその一辺に交差する他辺とが異なる画素数で構成された元画像の画像データを取得するデータ取得ステップと、元画像に対し倍率を変更した生成画像の各画素の画素値の生成に際し前記データ取得ステップにて取得した画像データの画素値の内、画素生成に関与する元画像の画素値に重み付けする重み付けステップと、その重み付けステップにて重み付けされた画素値に基づいて生成画像の各画素の画素値を生成する画像データ生成ステップとを備えたものであり、更に、前記画像データ生成ステップは、生成画像の各画素に対応する元画像上の各参照点を、元画像の一辺に沿った方向においては、生成画像の倍率に基づいて設定される間隔とし、前記一辺に交差する他辺に沿った方向においては、前記一辺に沿った参照点間隔と同じ間隔とする位置に設定する参照点設定ステップと、その参照点設定ステップにて設定された参照点周辺の周辺画素の画素値を抽出する画素値抽出ステップとを有し、その画素値抽出ステップにて抽出された画素値の補間演算にて生成画像の画素値を生成するものであり、前記重み付けステップは、前記参照点設定ステップにより設定される参照点と、その参照点に対し元画像の一辺に沿った方向に位置する周辺画素との距離に基づいて、周辺画素の画素値に対する重みの第1要素を算出する第1要素算出ステップと、その第1要素算出ステップにより算出された前記第1要素を、前記参照点の一辺方向における位置を示す位置情報に対応して記憶する第1要素記憶ステップと、前記参照点とその参照点に対し元画像の他辺に沿った方向に位置する周辺画素との距離に基づいた重みの第2要素として、前記第1要素記憶ステップにて記憶された第1要素の内、前記参照点の他辺方向における位置を示す位置情報によって抽出されるものを用い、その抽出された第2要素と、前記第1要素記憶ステップにて記憶された第1要素の内の前記参照点の一辺方向における位置を示す位置情報によって抽出される第1要素とを用いて重みを算出する重み算出ステップとを備えている。
請求項2記載の画像処理プログラムは、請求項1記載の画像処理プログラムにおいて、前記画像データ生成ステップは、生成画像の一辺方向に沿って列状に配置される画素列毎に各画素の画素値を生成するものであり、前記第1要素算出ステップは、前記画素列の第1行目の画素値が前記画像データ生成ステップにて生成される際に第1要素を算出すると共に、その算出された第1要素を前記第1要素記憶ステップにて記憶するものであり、前記重み算出ステップは、前記画像データ生成ステップにて第1行目以外の異なる画素列の画素値を生成する場合には、前記第1要素記憶ステップにて記憶された第1要素を用いて重みを算出するものである。
請求項3記載の画像処理プログラムは、請求項1又は2に記載の画像処理プログラムにおいて、前記画像データ生成ステップ及び前記重み付けステップは、元画像の長辺を前記一辺として処理を行うものであり、前記参照点設定ステップは、元画像の長辺の長さを示す画素数と、生成画像の対応する長辺の長さを示す画素数とから前記倍率を算出する長辺基準倍率算出ステップを有し、その長辺基準倍率算出ステップにて算出される倍率に基づいた間隔で参照点を設定するものである。
請求項4記載の画像処理プログラムは、請求項3記載の画像処理プログラムにおいて、生成画像の長辺方向に配置する画素数は整数値とされており、前記画像データ生成ステップは、元画像の短辺の長さを示す画素数に対し、前記長辺基準倍率算出ステップにて算出された倍率に基づいて、生成画像における短辺の長さを示す画素数を算出する短辺画素数算出ステップと、その短辺画素数算出ステップにて算出された値において小数点以下の値を切り捨てて画素数を整数化する整数化ステップとを備え、生成画像の短辺方向に配置する画素数をその整数化ステップにて得られた画素数として、生成画像の各画素の画素値を生成するものである。
請求項5記載の画像処理プログラムは、請求項1から4のいずれかに記載の画像処理プログラムにおいて、前記画像データ取得ステップは、元画像の画像データの各画素値をラスタ形式で取得するものであり、前記参照点設定ステップは、前記元画像の短辺が画像に対するラスタ走査の主走査方向に沿った辺である場合には、少なくとも生成画像における短辺方向第1行目の画素を仮想的に長辺方向の生成画素数となるまで増やして、各画素に対応する参照点を設定するものであり、前記第1要素算出ステップは、短辺方向に設定された参照点のそれぞれに対応する第1要素を算出するものであり、前記画像データ生成ステップは、生成画像の短辺方向に沿って列状に配置される画素列毎に、順次、各画素の画素値を生成するものである。
請求項6記載の画像処理プログラムは、請求項1から5のいずれかに記載の画像処理プログラムにおいて、前記画像データ生成ステップは、縮小画像の画素値を生成するものである。
請求項7記載の画像処理装置は、画像の一辺とその一辺に交差する他辺とが異なる画素数で構成された元画像の画像データを取得するデータ取得手段と、元画像に対し倍率を変更した生成画像の各画素の画素値の生成に際し前記データ取得手段にて取得した画像データの画素値の内、画素生成に関与する元画像の画素値に重み付けする重み付け手段と、その重み付け手段にて重み付けされた画素値に基づいて生成画像の各画素の画素値を生成する画像データ生成手段とを備えたものであり、更に、前記画像データ生成手段は、生成画像の各画素に対応する元画像上の各参照点を、元画像の一辺に沿った方向においては、生成画像の倍率に基づいて設定される間隔とし、前記一辺に交差する他辺に沿った方向においては、前記一辺に沿った参照点間隔と同じ間隔とする位置に設定する参照点設定手段と、その参照点設定手段にて設定された参照点周辺の周辺画素の画素値を抽出する画素値抽出手段とを有し、その画素値抽出手段にて抽出された画素値の補間演算にて生成画像の画素値を生成するものであり、前記重み付け手段は、前記参照点設定手段により設定される参照点と、その参照点に対し元画像の一辺に沿った方向に位置する周辺画素との距離に基づいて、周辺画素の画素値に対する重みの第1要素を算出する第1要素算出手段と、その第1要素算出手段により算出された前記第1要素を、前記参照点の一辺方向における位置を示す位置情報に対応して記憶する第1要素記憶手段と、前記参照点とその参照点に対し元画像の他辺に沿った方向に位置する周辺画素との距離に基づいた重みの第2要素として、前記第1要素記憶手段に記憶された第1要素の内、前記参照点の他辺方向における位置を示す位置情報によって抽出されるものを用い、その抽出された第2要素と、前記第1要素記憶手段に記憶された第1要素の内の前記参照点の一辺方向における位置を示す位置情報によって抽出される第1要素とを用いて重みを算出する重み算出手段とを備えている。
請求項8記載の画像処理装置は、請求項7記載の画像処理装置において、前記画像データ生成手段は、生成画像の一辺方向に沿って列状に配置される画素列毎に各画素の画素値を生成するものであり、前記第1要素算出手段は、前記画素列の第1行目の画素値が前記画像データ生成手段にて生成される際に第1要素を算出すると共に、その算出された第1要素を前記第1要素記憶手段に記憶するものであり、前記重み算出手段は、前記画像データ生成手段にて第1行目以外の異なる画素列の画素値を生成する場合には、前記第1要素記憶手段に記憶された第1要素を用いて重みを算出するものである。
請求項9記載の画像処理装置は、請求項7又は8に記載の画像処理装置において、前記画像データ生成手段及び前記重み付け手段は、元画像の長辺を前記一辺として処理を行うものであり、前記参照点設定手段は、元画像の長辺の長さを示す画素数と、生成画像の対応する長辺の長さを示す画素数とから前記倍率を算出する長辺基準倍率算出手段を有し、その長辺基準倍率算出手段にて算出される倍率に基づいた間隔で参照点を設定するものである。
請求項10記載の画像処理装置は、請求項9記載の画像処理装置において、生成画像の長辺方向に配置する画素数は整数値とされており、前記画像データ生成手段は、元画像の短辺の長さを示す画素数に対し、前記長辺基準倍率算出手段にて算出された倍率に基づいて、生成画像における短辺の長さを示す画素数を算出する短辺画素数算出手段と、その短辺画素数算出手段にて算出された値において小数点以下の値を切り捨てて画素数を整数化する整数化手段とを備え、生成画像の短辺方向に配置する画素数をその整数化手段にて得られた画素数として、生成画像の各画素の画素値を生成するものである。
請求項11記載の画像処理装置は、請求項7から10のいずれかに記載の画像処理装置において、前記画像データ取得手段は、元画像の画像データの各画素値をラスタ形式で取得するものであり、前記参照点設定手段は、前記元画像の短辺が画像に対するラスタ走査の主走査方向に沿った辺である場合には、少なくとも生成画像における短辺方向第1行目の画素を仮想的に長辺方向の生成画素数となるまで増やして、各画素に対応する参照点を設定するものであり、前記第1要素算出手段は、短辺方向に設定された参照点のそれぞれに対応する第1要素を算出するものであり、前記画像データ生成手段は、生成画像の短辺方向に沿って列状に配置される画素列毎に、順次、各画素の画素値を生成するものである。
請求項12記載の画像処理装置は、請求項7から11のいずれかに記載の画像処理装置において、前記画像データ生成手段は、縮小画像の画素値を生成するものである。
請求項1記載の画像処理プログラムによれば、データ取得ステップにより画像データが取得される。画像データ生成ステップにおける参照点設定ステップにより、元画像に対し倍率を変更した生成画像の各画素に対応する元画像上の各参照点は、元画像の一辺に沿った方向においては、生成画像の倍率に基づいて設定される間隔とし、一辺に交差する他辺に沿った方向においては、前記一辺に沿った参照点間隔と同じ間隔とする位置に設定される。そして、データ取得ステップにて取得した画像データの画素値の内、設定された参照点周辺の周辺画素の画素値が画素値抽出ステップにて抽出され、画像データ生成ステップにより、その抽出された画素値の補間演算にて生成画像の画素値が生成される。
補間演算がなされる画素値に対しては、重み付けステップにより重み付けが行われる。この重み付けステップによる重み付けにおいては、第1要素算出ステップにより、参照点設定ステップにより設定される参照点と、その参照点に対し元画像の一辺に沿った方向に位置する周辺画素との距離に基づいて、重みの第1要素が算出され、算出された第1要素は、第1要素記憶ステップにより、参照点の一辺方向における位置を示す位置情報に対応して記憶される。また、参照点とその参照点に対し元画像の他辺に沿った方向に位置する周辺画素との距離に基づいた重みの第2要素には、第1要素記憶ステップにて記憶された第1要素の内、参照点の他辺方向における位置を示す位置情報によって抽出されるものが用いられる。そして、その抽出された第2要素と、第1要素記憶ステップにて記憶された第1要素の内の参照点の一辺方向における位置を示す位置情報によって抽出される第1要素とを用いて、重み算出ステップにより、重みが算出される。
よって、算出された第1要素を第2要素として用いることができ、第2要素の算出を省略することができるので、その第2要素の算出に要する時間分、処理時間を削減して、画像処理全体にかかる処理時間を短縮することができるという効果がある。
本プログラムでは、一辺方向と他辺方向とにおいて同じ間隔で参照点を設定するので、結果的に、生成画像および元画像を、一辺を基準の長さとする正方形に仮想化することができる。このため、元画像の一辺方向において端部からn番目に配列される参照点と、他辺方向において一辺側の端部からn番目に配列される参照点とは、端部から参照点までの距離が同じになる。ここで、第1要素は、元画像の一辺に沿った方向の距離に基づいており、第2要素は、元画像の他辺に沿った方向の距離に基づいているので、参照点の他辺方向における位置を示す位置情報によって抽出される第1要素を第2要素に用いても、的確な重みを算出することができるという効果がある。
尚、位置情報としては、例えば、画像の左上端を原点とした場合における原点から参照点までの距離、座標、原点からの参照点の数などが例示される。
また、元画像の一辺に沿った方向に並ぶ参照点のそれぞれは、元画像の他辺に沿った方向の距離が同じであるので、それらの参照点に対応する画素値の算出に際しては、同じ第2要素を用いて重みを算出することができる。同様に、元画像の他辺に沿った方向に並ぶ参照点のそれぞれは、元画像の一辺に沿った距離が同じであるので、同じ第1要素を用いて重みを算出することができる。このため、算出された第1要素を第1要素記憶ステップにて記憶することにより、一度算出した第1要素を用いて重みを算出できる。故に、重みの算出の度に、第1要素および第2要素を算出する必要が無く、その算出回数を抑制して、生成画像を生成するに要する処理時間を削減することができるという効果がある。
請求項2記載の画像処理プログラムによれば、請求項1記載の画像処理プログラムの奏する効果に加え、画像データ生成ステップにより、生成画像の一辺方向に沿って列状に配置される画素列毎に各画素の画素値が生成される。そして、生成画像の画素列の第1行目の画素値が画像データ生成ステップにて生成される際に、第1要素算出ステップにより第1要素が算出される。算出された第1要素は、第1要素記憶ステップにて記憶される。また、画像データ生成ステップにて第1行目以外の異なる画素列の画素値を生成する場合には、重み算出ステップによる重みの算出は、第1要素記憶ステップにて記憶された第1要素を用いて実行される。よって、画像データ生成ステップによる画素値生成の初期段階から、その画素値の生成に必要な重みの算出に、記憶された第1要素を用いることができ、第1要素の算出回数を、最低限必要な回数とすることができるという効果がある。つまり、本プログラムによれば、一行目の画素値を生成する際に、各画素に対する重みの第1要素を1度算出するだけでよいので、重みを算出する処理を効率的に実行することができるという効果がある。
請求項3記載の画像処理プログラムによれば、請求項1又は2に記載の画像処理プログラムの奏する効果に加え、長辺基準倍率算出ステップにより、元画像の長辺の長さを示す画素数と、生成画像の対応する長辺の長さを示す画素数とから倍率が算出され、その長辺基準倍率算出ステップにて算出された倍率に基づいた間隔で、参照点設定ステップにより参照点が設定される。そして、画像データ生成ステップ及び重み付けステップにより、元画像の長辺を一辺として処理が行われる。このため、画像データ生成ステップにより、元画像の長辺を一辺として生成画像の各画素値が生成される。また、重み付けステップにより、元画像の長辺を一辺として重みの算出が実行される。長辺方向に設定される参照点の数は、短辺方向に設定される参照点の数よりも多いので、重み付けステップにおける第1要素算出ステップにて算出される重みの第1要素は、長辺方向に設定される参照点に対応して算出する方が、短辺方向に設定される参照点に対応して算出するよりも、多く、第1要素を算出することができる。よって、第1要素算出ステップにて算出される重みの第1要素にて、第2要素を網羅することができるという効果がある。つまり、第1要素記憶ステップにて記憶された第1要素を、その位置情報に基づいて、第2要素として抽出する場合に、対応する第1要素がないといった事態を回避することができ、第2要素の全てを記憶されている第1要素で補うことができるという効果がある。
請求項4記載の画像処理プログラムによれば、請求項3記載の画像処理プログラムの奏する効果に加え、生成画像の長辺方向に配置する画素数は整数値とされており、元画像の短辺の長さを示す画素数に対し、長辺基準倍率算出ステップにて算出された倍率に基づいて、生成画像における短辺の長さを示す画素数が、短辺画素数算出ステップによって算出される。そして、整数化ステップにより、短辺画素数算出ステップにて算出された値において小数点以下の値が切り捨ててられ、画素数が整数化される。生成画像の短辺方向に配置する画素数は、その整数化ステップにて得られた画素数とされ、画像データ生成ステップにより、生成画像の各画素の画素値が生成される。よって、元画像の範囲内に参照点を設定することができ、参照点が元画像の範囲内に設定不能となることを回避できるという効果がある。
つまり、長辺基準倍率算出ステップにて算出された倍率と、端数を含む画素数の値との演算すると、元画像の短辺に存在する画素数となる。このため、短辺画素数算出ステップにて算出された値に対し、小数点以下の値を切り上げて生成画像の短辺の画素数とすると、上記倍率との演算結果にて求められる画素数は、当然、本来の元画像の短辺の画素数を超えてしまう。本プログラムでは、上記倍率に基づいた間隔で、参照点設定ステップにより参照点が設定されるため、上記の小数点以下の値を切り上げた値を生成画像の短辺の画素数とし、その画素数を、上記の倍率に基づいて得られる間隔で配置しようとすれば、参照点は、元画像の短辺には収まりきらない。
一方で、小数点以下の値を切り捨てて生成画像の短辺の画素数とすると、その画素数に上記の倍率で演算して求められる画素数は、元画像の短辺の画素数を超えることはない。従って、生成画像の画素に対応する参照点を、上記倍率に基づいた間隔で、短辺方向に設定しても、その参照点は、必ず、元画像の範囲内に設定されることとなり、参照点が元画像上において設定不能となることを回避できるという効果がある。
請求項5記載の画像処理プログラムによれば、請求項1から4のいずれかに記載の画像処理プログラムの奏する効果に加え、画像データ取得ステップにより、元画像の画像データの各画素値は、ラスタ形式で取得される。そして、元画像の短辺が画像に対するラスタ走査の主走査方向に沿った辺である場合には、参照点設定ステップにおいて、少なくとも生成画像における短辺方向第1行目の画素を仮想的に長辺方向の生成画素数となるまで増やして、各画素に対応する参照点が設定される。そして、第1要素算出ステップにて、短辺方向に設定された参照点のそれぞれに対応する第1要素が算出され、画像データ生成ステップにより、生成画像の短辺方向に沿って列状に配置される画素列毎に、順次、各画素の画素値が生成される。
一般に、多くの画像処理プログラムにおいては、左上端となる画素から右側方向へ向かって(画像に配列された画素の行方向に沿って)順次処理を実行し、その行の最終画素に到達すると、次の行の左端の画素から再び右側方向に向かって順次処理を行ういわゆるラスタ走査で、画素値を生成、処理することが多い。従って、本プログラムにおいて、元画像の画像データの各画素値を、ラスタ形式(ラスタ走査に応じた順)で取得することにより、このラスタ走査に従った処理形態で、各画素値をスムーズに生成することができるという効果がある。また、本プログラムを、従来の画像処理のプログラムに搭載する(組み込む)ことを容易とすることができ、既存プログラムとの互換性を保つことができるという効果がある。故に、本プログラムを、汎用性の高いプログラムとすることができる。
また、本プログラムにおいては、元画像の短辺が画像に対するラスタ走査の主走査方向(画像に配列された画素の行方向)に沿った辺である場合には、参照点設定ステップにおいて、少なくとも生成画像における短辺方向第1行目の画素を仮想的に長辺方向の生成画素数となるまで増やして、各画素に対応する参照点を設定するので、第1要素算出ステップおよび画像データ生成ステップにおいて、ラスタ走査の方向に従って画像処理を行いつつ、長辺を基準とする第1要素の算出や画素値生成を実行することができ、長辺を基準として第1要素、画素値を算出する上記した利点を享受することができるという効果がある。
請求項6記載の画像処理プログラムによれば、請求項1から5のいずれかに記載の画像処理プログラムの奏する効果に加え、画像データ生成ステップは、縮小画像の画素値を生成するものであるので、縮小画像を迅速に生成することができるという効果がある。
請求項7記載の画像処理装置によれば、データ取得手段により画像データが取得される。画像データ生成手段における参照点設定手段により、元画像に対し倍率を変更した生成画像の各画素に対応する元画像上の各参照点は、元画像の一辺に沿った方向においては、生成画像の倍率に基づいて設定される間隔とし、一辺に交差する他辺に沿った方向においては、前記一辺に沿った参照点間隔と同じ間隔とする位置に設定される。そして、データ取得手段にて取得した画像データの画素値の内、設定された参照点周辺の周辺画素の画素値が画素値抽出手段にて抽出され、画像データ生成手段により、その抽出された画素値の補間演算にて生成画像の画素値が生成される。
補間演算がなされる画素値に対しては、重み付け手段により重み付けが行われる。この重み付け手段による重み付けにおいては、第1要素算出手段により、参照点設定手段により設定される参照点と、その参照点に対し元画像の一辺に沿った方向に位置する周辺画素との距離に基づいて、重みの第1要素が算出され、算出された第1要素は、第1要素記憶手段において、参照点の一辺方向における位置を示す位置情報に対応して記憶される。また、参照点とその参照点に対し元画像の他辺に沿った方向に位置する周辺画素との距離に基づいた重みの第2要素には、第1要素記憶手段に記憶された第1要素の内、参照点の他辺方向における位置を示す位置情報によって抽出されるものが用いられる。そして、その抽出された第2要素と、第1要素記憶手段にて記憶された第1要素の内の参照点の一辺方向における位置を示す位置情報によって抽出される第1要素とを用いて、重み算出手段により、重みが算出される。
よって、算出された第1要素を第2要素として用いることができ、第2要素の算出を省略することができるので、その第2要素の算出に要する時間分、処理時間を削減して、画像処理全体にかかる処理時間を短縮することができるという効果がある。
本装置では、一辺方向と他辺方向とにおいて同じ間隔で参照点を設定するので、結果的に、生成画像および元画像を、一辺を基準の長さとする正方形に仮想化することができる。このため、元画像の一辺方向において端部からn番目に配列される参照点と、他辺方向において一辺側の端部からn番目に配列される参照点とは、端部から参照点までの距離が同じになる。ここで、第1要素は、元画像の一辺に沿った方向の距離に基づいており、第2要素は、元画像の他辺に沿った方向の距離に基づいているので、参照点の他辺方向における位置を示す位置情報によって抽出される第1要素を第2要素に用いても、的確な重みを算出することができるという効果がある。
尚、位置情報としては、例えば、画像の頂点を原点とした場合における原点から参照点までの距離、座標、原点からの参照点の数などが例示される。
また、元画像の一辺に沿った方向に並ぶ参照点のそれぞれは、元画像の他辺に沿った方向の距離が同じであるので、それらの参照点に対応する画素値の算出に際しては、同じ第2要素を用いて重みを算出することができる。同様に、元画像の他辺に沿った方向に並ぶ参照点のそれぞれは、元画像の一辺に沿った距離が同じであるので、同じ第1要素を用いて重みを算出することができる。このため、算出された第1要素を第1要素記憶手段に記憶することにより、一度算出した第1要素を用いて重みを算出できる。故に、重みの算出の度に、第1要素および第2要素を算出する必要が無く、その算出回数を抑制して、生成画像を生成するに要する処理時間を削減することができるという効果がある。
請求項8記載の画像処理装置によれば、請求項7記載の画像処理装置の奏する効果に加え、画像データ生成手段により、生成画像の一辺方向に沿って列状に配置される画素列毎に各画素の画素値が生成される。そして、生成画像の画素列の第1行目の画素値が画像データ生成手段にて生成される際に、第1要素算出手段により第1要素が算出される。算出された第1要素は、第1要素記憶手段に記憶される。また、画像データ生成手段にて第1行目以外の異なる画素列の画素値を生成する場合には、重み算出手段による重みの算出は、第1要素記憶手段に記憶された第1要素を用いて実行される。よって、画像データ生成手段による画素値生成の初期段階から、その画素値の生成に必要な重みの算出に、記憶された第1要素を用いることができ、第1要素の算出回数を、最低限必要な回数とすることができるという効果がある。つまり、本装置によれば、一行目の画素値を生成する際に、各画素に対する重みの第1要素を1度算出するだけでよいので、重みを算出する処理を効率的に実行することができるという効果がある。
請求項9記載の画像処理装置によれば、請求項7又は8に記載の画像処理装置の奏する効果に加え、長辺基準倍率算出手段により、元画像の長辺の長さを示す画素数と、生成画像の対応する長辺の長さを示す画素数とから倍率が算出され、その長辺基準倍率算出手段にて算出された倍率に基づいた間隔で、参照点設定手段により参照点が設定される。そして、画像データ生成手段及び重み付け手段により、元画像の長辺を一辺として処理が行われる。このため、画像データ生成手段により、元画像の長辺を一辺として生成画像の各画素値が生成される。また、重み付け手段により、元画像の長辺を一辺として重みの算出が実行される。長辺方向に設定される参照点の数は、短辺方向に設定される参照点の数よりも多いので、重み付け手段における第1要素算出手段にて算出される重みの第1要素は、長辺方向に設定される参照点に対応して算出する方が、短辺方向に設定される参照点に対応して算出するよりも、多く、第1要素を算出することができる。よって、第1要素算出手段にて算出される重みの第1要素にて、第2要素を網羅することができるという効果がある。つまり、第1要素記憶手段に記憶された第1要素を、その位置情報に基づいて、第2要素として抽出する場合に、対応する第1要素がないといった事態を回避することができ、第2要素の全てを、記憶されている第1要素で補うことができるという効果がある。
請求項10記載の画像処理装置によれば、請求項9記載の画像処理装置の奏する効果に加え、生成画像の長辺方向に配置する画素数は整数値とされており、元画像の短辺の長さを示す画素数に対し、長辺基準倍率算出手段にて算出された倍率に基づいて、生成画像における短辺の長さを示す画素数が、短辺画素数算出手段によって算出される。そして、整数化手段により、短辺画素数算出手段にて算出された値において小数点以下の値が切り捨ててられ、画素数が整数化される。生成画像の短辺方向に配置する画素数は、その整数化手段にて得られた画素数とされ、画像データ生成手段により、生成画像の各画素の画素値が生成される。よって、元画像の範囲内に参照点を設定することができ、参照点が元画像の範囲内に設定不能となることを回避できるという効果がある。
つまり、長辺基準倍率算出手段にて算出された倍率と、端数を含む画素数の値との演算すると、元画像の短辺に存在する画素数となる。このため、短辺画素数算出手段にて算出された値に対し、小数点以下の値を切り上げて生成画像の短辺の画素数とすると、上記倍率との演算結果にて求められる画素数は、当然、本来の元画像の短辺の画素数を超えてしまう。本装置では、上記倍率に基づいた間隔で、参照点設定手段により参照点が設定されるため、上記の小数点以下の値を切り上げた値を生成画像の短辺の画素数とし、その画素数を、上記の倍率に基づいて得られる間隔で配置しようとすれば、参照点は、元画像の短辺には収まりきらない。
一方で、小数点以下の値を切り捨てて生成画像の短辺の画素数とすると、その画素数に上記の倍率で演算して求められる画素数は、元画像の短辺の画素数を超えることはない。従って、生成画像の画素に対応する参照点を、上記倍率に基づいた間隔で、短辺方向に設定しても、その参照点は、必ず、元画像の範囲内に設定されることとなり、参照点が元画像上において設定不能となることを回避できるという効果がある。
請求項11記載の画像処理装置によれば、請求項7から10のいずれかに記載の画像処理装置の奏する効果に加え、画像データ取得手段により、元画像の画像データの各画素値は、ラスタ形式で取得される。そして、元画像の短辺が画像に対するラスタ走査の主走査方向に沿った辺である場合には、参照点設定手段において、少なくとも生成画像における短辺方向第1行目の画素を仮想的に長辺方向の生成画素数となるまで増やして、各画素に対応する参照点が設定される。そして、第1要素算出手段にて、短辺方向に設定された参照点のそれぞれに対応する第1要素が算出され、画像データ生成手段により、生成画像の短辺方向に沿って列状に配置される画素列毎に、順次、各画素の画素値が生成される。
一般に、多くの画像処理装置においては、左上端となる画素から右側方向へ向かって(画像に配列された画素の行方向に沿って)順次処理を実行し、その行の最終画素に到達すると、次の行の左端の画素から再び右側方向に向かって順次処理を行ういわゆるラスタ走査で、画素値を生成、処理することが多い。従って、本装置において、元画像の画像データの各画素値を、ラスタ形式(ラスタ走査に応じた順)で取得することにより、このラスタ走査に従った処理形態で、各画素値をスムーズに生成することができるという効果がある。また、本装置を、従来の画像処理装置に組み込むや互換することを容易とすることができ、既存装置との互換性を保つことができるという効果がある。故に、本装置を、汎用性の高い装置とすることができる。
また、本装置においては、元画像の短辺が画像に対するラスタ走査の主走査方向(画像に配列された画素の行方向)に沿った辺である場合には、参照点設定手段において、少なくとも生成画像における短辺方向第1行目の画素を仮想的に長辺方向の生成画素数となるまで増やして、各画素に対応する参照点を設定するので、第1要素算出手段および画像データ生成手段において、ラスタ走査の方向に従って画像処理を行いつつ、長辺を基準とする第1要素の算出や画素値生成を実行することができ、長辺を基準として第1要素、画素値を算出する上記した利点を享受することができるという効果がある。
請求項12記載の画像処理装置によれば、請求項7から11のいずれかに記載の画像処理装置の奏する効果に加え、画像データ生成手段は、縮小画像の画素値を生成するものであるので、縮小画像を迅速に生成することができるという効果がある。
以下、本発明の好ましい実施例について、添付図面を参照して説明する。尚、本実施形態の画像処理プログラムの構成は、図5を基に、既に背景技術で説明したバイ・リニア法を主体としつつ、その改良を行ったものであるので、同一の部分には同一の番号を付し、その説明は省略する。
図1は、本発明の一実施形態におけるプリンタ1の電気的な構成を示したブロック図である。このプリンタ1は、パーソナルコンピュータ(以下「PC」と称する)2や、デジタルカメラ21や、外部メディア20から入力された画像データを、指定された縮小率で縮小して出力することができるように構成されている。
プリンタ1は、CPU11と、ROM12と、RAM13と、印刷ヘッドなどから構成され、印刷媒体(例えば、紙媒体など)への印刷(出力)を行う印刷部15と、出力画像サイズや縮小率などの入力値をユーザが入力可能なユーザ操作部(例えば、テンキーなど)を有する操作パネル16とを備えている。
また、プリンタ1は、ケーブル5を介してPC2と接続可能なインターフェイス(以下「I/F」と称する)17と、ケーブル6を介してデジタルカメラ21と接続可能なI/F18と、イメージデータを記憶する外部メディア20(例えば、SDメモリカード、メモリスティックなど)を着脱自在に装着可能な外部メディアスロット19とを備えている。
よって、プリンタ1は、PC20に記憶されている画像データをケーブル5及びI/F17を介して入力することが可能であると共に、デジタルカメラ21によって撮影された画像データをケーブル6及びI/F18を介して入力することが可能である。さらに、外部メディアスロット19に装着された外部メディア20から、その外部メディア20に記憶されている画像データを入力することが可能である。
CPU11は、プリンタ1全体を制御する演算処理装置(演算装置)であり、ROM12には、このCPU11により実行される各種の制御プログラムや、その実行の際に参照される固定値データが格納されている。なお、ROM12には、後述する図3のフローチャートに示すプログラムを備えた画像縮小プログラム12aが、制御プログラムの一部として記憶されている。画像縮小プログラム12aは、バイ・リニア法のアルゴリズムを基本とすると共に、その一部を改良して設計されている。
また、RAM13は、CPU11で実行される制御プログラムに必要な各種レジスタ群などが設定されたワーキングエリアや、処理中のデータを一時的に格納するテンポラリエリア等を有しランダムにアクセスできる書き換え可能なメモリである。
このRAM13は、入力画像メモリ13aと、出力画像メモリ13bと、入力画像サイズメモリ13cと、出力画像サイズメモリ13dと、縮小率メモリ13eと、縮小重みメモリ13fとを備えている。入力画像メモリ13aは、PC2、デジタルカメラ21、及び外部メディア20から、それぞれ、I/F17、I/F18、及び外部メディアスロット19を介してプリンタ1へ入力された入力画像の画像データであって、生成される縮小画像の元画像となる画像データを記憶するものである。
入力画像の画像データ(以下、「入力画像データ」と称す)は、ラスタデータであって入力画像を形成する各画素の画素値(RGB値)で構成されている。本実施形態において、入力画像は、その左上端を原点とすると共に、画像上において原点から右側に向かう方向をX軸、原点から下方へ向かう方向をY軸とし、画像を構成するM×Nの各画素のそれぞれを2次元配列で表現するべく、画像の左上隅に配置される画素の座標を(0,0)、画像の右下隅に配置される画素の座標を(M−1,N−1)として、各々の画素それぞれに座標が付与されている。また、入力画像は、矩形状の画像であり、該入力画像の一辺とその一辺に直交する他辺(隣り合う辺)とが、異なる画素数で構成されている。
一般に、画像に対する逐次処理は、原点の画素から開始され、順次、上から下に向かってX軸方向に走査して(M−1,N−1)まで実行するラスタ走査の方式に従って実行される。本実施形態では、入力画像データは、上記したようにラスタデータの形式とされており、各画素値がラスタ走査の順番に羅列された態様で、この入力画像メモリ13aに記憶されている。
尚、ラスタデータは、色のついた点(ドット)の羅列として表現したデータであり、本実施形態では、かかるラスタデータがラスタ走査の順に従って配置された状態をラスタ形式と称す。
出力画像メモリ13bは、画像縮小プログラム12aに従い、入力画像メモリ13aに記憶されている入力画像データを縮小することによって生成された縮小画像(出力画像)の画像データ(以下「出力画像データ」と称す)を記憶するものである。本実施形態においては、出力画像についても入力画像と同様に、その左上端を原点とすると共に、画像上において原点から右側に向かう方向をX軸、原点から下方へ向かう方向をY軸とし、画像を構成するm×nの各画素のそれぞれを2次元配列で表現するべく、画像の左上隅に配置される画素の座標を(0,0)、画像の右下隅に配置される画素の座標を(m−1,n−1)として、各々の画素にそれぞれ座標が付与されている。
また、この出力画像メモリ13bには、出力画像データが、入力画像データと同様のラスタ形式で、即ち、出力画像を形成する各画素の画素値(RGB値)が、ラスタ走査の順に従って記憶されている。故に、出力画像メモリ13bに記憶されている画像データ(画素値)を、先頭から順に取り出すことにより、原点の画素から、順次、上から下に向かってX軸方向に走査して、(M−1,N−1)に至る順に画素値が出力されて出力画像を形成することができる。
印刷に際しては、出力画像メモリ13bに記憶される各画素値は、RGB値からCMYK値に変換されて、印刷部15へ出力される。尚、入力画像データ及び出力画像データは、RGB値で構成されているものに限られるものでなく、例えば、CMYK値で構成されたものであっても良い。
入力画像データから縮小画像データ(出力画像データ)を作成した後に、ユーザが、拡大画像の作成を所望することがある。ここで、縮小画像データに対して拡大処理を行うと、拡大画像の画質が低下してしまうので、縮小画像データに対して再編集(拡大等)を行う場合には、入力画像データを用いて要求に応じた画像データを生成する。このため、作成された出力画像データは、入力画像メモリ13aとは別に設けられた出力画像メモリ13bに記憶されるようになっており、入力画像データは、そのままの状態で、入力画像メモリ13aに保持される。
入力画像サイズメモリ13cは、入力画像の大きさ(画像サイズ)を示すサイズデータを記憶するメモリである。上記したように、入力画像メモリ13aに記憶される入力画像データは、一群の画素値の羅列で形成されているものである。従って、かかる画像データそのものから画像の大きさを判断することはできない。通常、外部から入力される入力画像データには、そのサイズを示すサイズデータが付加されており、かかるサイズデータは、この入力画像サイズメモリ13cに書き込まれて記憶される。本実施形態では、このサイズデータは、画像のX軸方向の画素数Mと、画像のY軸方向の画素数Nである。CPU11は、この入力画像サイズメモリ13cに記憶されるサイズデータにて、画像のX軸方向およびY軸方向に配列させる画素数を把握することができる。また、X軸方向の画素数と、Y軸方向との画素数が既知となることにより、入力画像メモリ13aに記憶された各画素値を有する画素の画像上の位置(座標)を把握することができる。
出力画像サイズメモリ13dは、出力画像の大きさ(画像サイズ)を示すサイズデータを記憶するメモリである。入力画像サイズメモリ13cに記憶されるサイズデータと同様に、出力画像のX軸方向の画素数mと、画像のY軸方向の画素数nとがサイズデータとして記憶されている。出力画像メモリ13bに記憶される出力画像データは、この出力画像サイズメモリ13cに記憶される画素数に従って配置され、出力画像が形成される。
縮小率メモリ13eは、生成する出力画像(縮小画像)の縮小率として入力された値を記憶するメモリである。縮小率は、ユーザによる操作パネル16の操作によって入力され、この縮小率メモリ13eに書き込まれる。本実施形態においては、縮小率は、1%毎に設定可能とされており、生成可能な出力画像の縮小レンジ(縮小範囲)は、0%〜100%の範囲であって、0%および100%を含まない範囲、即ち元の画像の1%以上99%以下とされている。操作者の所定の入力操作により縮小率が入力(指定)されると、入力された値がこの縮小率メモリ13eに記憶される。
尚、本実施形態において縮小率とは、生成される画像の大きさが元の画像に対して占める比率を示しており、例えば縮小率75%であれば、生成される出力画像の大きさは、入力画像の75%となる。同様に、縮小率50%であれば、生成される出力画像の大きさは、入力画像の画像の50%となり、縮小率25%であれば、入力画像の25%の大きさの画像となる。
CPU11は、出力画像の生成に際して、まず、その大きさを規定する必要がある。出力画像の大きさは、画像の長辺を基準に規定されるようになっており、CPU11により、この縮小率メモリ13eに記憶される縮小率が、入力画像の長辺の画素数(サイズデータ)に乗算されて求められる。ここで、指定された縮小率によっては、出力画像の画素数に小数点以下の端数が生じてしまうので、四捨五入によって整数化が行われ、出力画像の長辺の大きさ(サイズデータ、画素数m)が決定される。かかる場合には、出力画像は、厳密には、ユーザが入力した縮小率で形成される大きさとは異なる大きさに(若干大きく、または小さく)形成されることとなる。
一方、出力画像の短辺の大きさは、求められた画素数mと入力画像の対応する長辺の画素数Mとの比率m/Mを、入力画像の対応する短辺の画素数Nに乗算されて求められる。本実施形態においては、かかる演算によって生じた小数点以下の端数を切り捨てて整数化を行うように構成されており、得られた整数値が、出力画像の短辺の大きさ(画素数n)とされる。
また、ユーザによる操作パネル16の操作によって入力される値が、出力画像のサイズ(出力画像の辺の画素数)である場合には、出力画像と入力画像との大きさとの比率から縮小率が算出されて、この縮小率メモリ13eに記憶される。ここで、算出される縮小率は、出力画像および入力画像の長辺の画素数の比率で求められる。例えば、出力画像の長辺の画素数がm、対応する入力画像の長辺の画素数がMであると、縮小率は、m/Mとなる。かかる場合には、出力画像の長辺の大きさは整数値である。出力画像短辺の大きさ(画素数n)は、上記した縮小率が指定された場合と同様に求められる。
縮小重みメモリ13fは、(1)式に示した出力画像の画素値生成の補間演算に用いられる重みを算出するための重みの第1要素を記憶するメモリである。出力画像の各画素の画素値は、入力画像の対応する位置(参照点)の画素値として補間演算によって求められるので、この縮小重みメモリ13fは、X軸方向の参照点の数、m個分のメモリ(P0メモリ13f0〜Pm−1メモリ13fm−1)で構成されている。出力画像の各画素p(x,y)に対応する入力画像上の参照点P(X,Y)を、出力画像の画素の座標(0,0)〜(m−1,n−1)のそれぞれに対応させて参照点P00〜Pm−1n−1とすると(Pの添え字は、入力画像の対応する画素の座標を示す。また、理解を容易とするために、添え字に用いるm−1にm’、n−1にn’を適宜代用して表示する)、P0メモリ13f0には、参照点P00の画素値を算出するべく求められた第1要素が、P1メモリ13f1には、参照点P10の画素値を算出するための第1要素が、・・・、Pm−1メモリ13fm−1には、参照点Pm’0の画素値を算出するための第1要素が、それぞれ記憶されている。
バイ・リニア法を基本とする画像縮小プログラム12aでは、従来のバイ・リニア法と同様に、補間演算に際して各周辺画素に付与される重みには、参照点とその参照点周辺の周辺画素との距離に応じた値を用いている(図5における拡大図A参照)。また、上記したように、この重みは、参照点から各周辺画素までのX軸方向の距離であるtまたは1−t(第1要素)と、参照点から各周辺画素までのY軸方向の距離であるsまたは1−sと(第2要素)との乗算、即ち、(距離t又は距離1−t)×(距離s又は距離1−s)で求められる値である((1)式参照)。
本実施形態では、CPU11によって、出力画像の1行分の画素の各対応する参照点の座標から、それぞれ1度だけ第1要素が算出され、その算出された各第1要素が、対応するP0メモリ13f0〜Pm−1メモリ13fm−1に記憶される。
m×nの画素で形成される出力画像は、行方向にm個の画素が、列方向にn個の画素が配列されたものであり、同じ列に属する各画素のx座標は同じとなり、同じ行に属する各画素のy座標は同じとなる。従って、出力画像の1の列の各画素に対応する入力画像上の各参照点の座標は、X座標が同じとなる。このため、X座標の同じ一群の参照点については、参照点と周辺画素とのX軸方向の距離は等しくなるので、同じ第1要素(1の第1要素)を用いることができる。尚、本実施形態においては、入力画像のX軸上(Y座標=0)に配置される参照点をY軸方向における0番目の参照点とし、以降、Y軸方向に沿って1番目、2番目、・・・n−1番目とする。同様に、入力画像のY軸上(X座標=0)に配置される参照点をX軸方向における0番目の参照点とし、以降、X軸方向に沿って1番目、2番目、・・・m−1番目とする。
故に、画像縮小プログラム12aにおいて、P0メモリ13f0に記憶される第1要素は、参照点P00〜P0n’(X座標0を基点としてX軸方向に0番目に位置する各参照点)の画素値を算出するために用いられ、P1メモリ13f1に記憶される第1要素は、参照点P10〜P1n’(X座標0を基点としてX軸方向に1番目に位置する各参照点)の画素値を算出するために用いられ、・・・、Pm−1メモリ13fm−1に記憶される第1要素は、参照点Pm’0〜Pm−1n−1(X座標0を基点としてX軸方向にm−1番目に位置する各参照点)の画素値を算出するために用いられる。言い換えれば、各参照点に対応する第1要素は、X軸方向の参照点の位置に対応する縮小重みメモリ13fに記憶される。
更に、本実施形態においては、図2において後述するが、画像縮小プログラム12aは、重みの第2要素の算出は行わずに、縮小重みメモリ13fに記憶される重みの第1要素を、重みの第2要素に用いて、各参照点の画素値を算出するように構成されている。
つまり、本実施形態では、入力画像上の参照点は、その間隔がX軸方向においてもY軸方向においても等しくなるように設定される。従って、X座標0の位置からX軸方向にa番目に位置する参照点Pまでの距離と、Y座標0からY軸方向にa番目に位置する参照点Pまでの距離とを等しくすることができる。故に、X軸方向におけるa番目の参照点に対応する第1要素は、Y軸方向においてa番目の参照点の画素値を算出する場合の重みの第2要素とすることができるのである。例えば、P1メモリ13f1に記憶される第1要素は、X座標0を基点としてX軸方向に1番目に位置する参照点P10に対応する第1要素である。Y座標0を基点としてY軸方向に1番目に位置する参照点は、参照点P01〜Pm’1であるので、P1メモリ13f1に記憶される第1要素は、参照点P01〜Pm’1の各画素値を算出する際の重みの第2要素とすることができる。
図2は、本実施形態の画像縮小プログラム12aにて実行される縮小画像(出力画像)生成の概要を模式的に示した図である。図2においては、小さな四角形の集合体にて模式的に画像を表現しており、小さな四角形のそれぞれがピクセル格子に相当している。ピクセル格子の各頂点(格子点)は、画素が配置される位置である。
図2中、左方には、13×9画素で構成された入力画像が表示されている。入力画像においては、各格子点のそれぞれにおける画素を黒丸で表示している。9行13列に配置された各画素のそれぞれには、(0,0)〜(12,8)の各座標が付与されており、X軸方向におけるピクセル格子間の数は12であり、Y軸方向におけるピクセル格子間の数は8である。
出力画像の生成に際しては、まず、生成する出力画像の大きさが、指定された縮小率に基づいて決定される。図2においては、ユーザによって操作パネル16から縮小率60%が指定され、縮小率メモリ13eに0.6が記憶された場合を例として示している。従って、入力画像のX軸方向の画素数13に縮小率0.6を乗算して得られた7.8画素を、四捨五入にした8画素が出力画像X軸方向の画素数となる。そして、かかる長辺の画素数の比である8/13を、入力画像のY軸方向の画素数9に乗算して得られる画素数5.53を、小数点以下を切り捨てて整数化することにより、Y軸方向の画素数5が求められる。従って、8×5画素の大きさを有する出力画像が形成されることとなる。
図2の上方には、この出力画像を表示している。太線の実線で囲まれた長方形の部分が、実際の出力画像に相当している。出力画像の各格子点における黒丸は、各画素を示しており、5行8列に配置された各画素のそれぞれには、(0,0)〜(7,4)の各座標が付与されている。また、出力画像におけるX軸方向におけるピクセル格子間の数は7であり、Y軸方向におけるピクセル格子間の数は4である。尚、破線部分のピクセル格子は、後述する仮想化された領域を示している。
出力画像の大きさが決定されると、次に、出力画像の各画素に対応する入力画像上の参照点が設定される。上記したように、出力画像の各画素の画素値は、入力画像の対応する位置(参照点)の画素値として求められるからである。尚、入力画像上における参照点の設定は、実際に描画を行って実行されるのではなく演算によって参照点の座標を求めることによって行われるが、説明を容易とするために、入力画像上に参照点を表示して説明する。
ここで、本実施形態においては、次の2の条件を満たすように参照点を設定する。1つ目の条件は、参照点の間隔をX軸方向とY軸方向とで等しくすることである。2つ目の条件は、参照点の間隔を、入力画像の長辺に沿って配列される参照点の間隔で規定することである。これにより、参照点を頂点として結ぶ格子は、正方形となる。また、入力画像と出力画像との両者は、図2に示したように、あたかも正方形であるかのように取り扱われる。
ここで、参照点の設定においては、背景技術において説明した2の方法が採用し得るので、出力画像の下方左側には、入力画像に対し第1の方法によって参照点を設定した状態を、出力画像下方右側には、入力画像に対し第2の方法によって参照点を設定した状態を示す。この出力画像下方の入力画像の表示において、太線で囲まれた長方形の部分が、実際の入力画像に相当している。太線で囲まれた長方形に連接された破線の表示部分は、仮想化された領域を示している。また、入力画像上に表示された実線の白丸は、設定された参照点を示しており、入力画像の上辺側には、用いられる(算出された)重みの第1要素tのそれぞれをX軸方向に配列された参照点に対応つけて示し、入力画像の左辺側には、用いられる重みの第2要素のそれぞれをY軸方向に配列された参照点に対応つけて示している。破線領域に表示された破線の丸は、仮想上の画素を示している。
参照点設定の第1の方法は、出力画像の第1行目に配列される画素に対応する参照点を、入力画像の第1行目に設定すると共に、出力画像の第1列目に配列される画素に対応する参照点を、入力画像の第1列目に設定する方法である。ここで、本実施形態は、参照点の間隔を、入力画像の長辺に沿って配列される参照点の間隔で規定するものである。図2においては、X軸方向が長辺であるので、X軸に配列される画素数の比率8/13の逆数によって、参照点の間隔が求められる。
従って、出力画像の第1列目に配列される画素に対応する参照点を入力画像の第1列目に設定するとすれば、第2列目以降の各参照点のX軸方向の位置は、13/8(1.625)ずつX軸方向に進行した位置となる。同様に、出力画像の第1行目に配列される画素に対応する参照点を入力画像の第1行目に設定するとすれば、Y軸方向における第2行目以降の参照点の位置は、13/8(1.625)ずつY軸方向に進行した位置となる。
参照点設定の第2の方法は、出力画像のY軸に沿った両辺上の画素に対応する参照点は、入力画像のY軸に沿った両辺上に設定するとしたものであり、X軸方向両端の画素を除いた残りの画素に対応する参照点を、X軸に沿って均等に割り付ける方法である。図2においては、X軸方向が長辺であるので、X軸に配列されるピクセル格子間の数の比率7/12の逆数によって、参照点の間隔が求められる。
従って、出力画像の第1列目に配列される画素に対応する参照点を入力画像の第1列目に設定するとすれば、第2列目以降の各参照点のX軸方向の位置は、12/7(1.714)ずつX軸方向に進行した位置となる。同様に、出力画像の第1行目に配列される画素に対応する参照点を入力画像の第1行目に設定するとすれば、Y軸方向における第2行目以降の参照点の位置は、12/7(1.714)ずつY軸方向に進行した位置となる。
このように本実施形態の手法で参照点を設定した場合には、X軸方向においてもY軸方向においても8画素を13画素分の長さに配置したことと同義となり、結果として、出力画像を8×8画素、入力画像を13×13画素の正方形に仮想化したこととなる。
これによれば、入力画像上の各参照点について、X座標0を基点としてX軸方向にa番目に位置する参照点までの距離と、Y座標0を基点としてY軸方向にa番目に位置する参照点までの距離とは等しくなる。言い換えれば、X座標0を基点としてX軸方向にa番目に位置する参照点のX座標と、Y座標0を基点としてY軸方向にa番目に位置する参照点のY座標とは等しくなる。その結果、Y座標0を基点としてY軸方向にa番目に位置する参照点とその周辺画素とのY軸方向における距離は、X座標0を基点としてX軸方向にa番目に位置する参照点とその周辺画素とのX軸方向における距離に等しくすることができるので、図2下方の2の入力画像の上辺側および左辺側に示すように、X軸方向におけるa番目の参照点に対応する第1要素と、Y軸方向におけるa番目の参照点に対応する第2要素とを等しくすることができるのである。
尚、本実施形態においては、第1の方法にて参照点の設定を行うように構成されている。
次に、図3のフローチャートを参照して、上記のように構成されたプリンタ1で実行される縮小処理について説明する。図3は、本実施形態の画像縮小プログラム12aに基づいてCPU11により実行される縮小処理のフローチャートである。
この縮小処理は、ユーザにより、入力画像の縮小が指定(縮小率の入力)されることにより起動され、入力画像サイズメモリ13cに記憶されるサイズデータ(画素数M,N)を読み出し(S1)、縮小率メモリ13eに記憶される縮小率Rを読み出す(S2)。この縮小率Rは、ユーザにより、操作パネル16から入力された値であり、入力されたタイミングで、本縮小処理に先立って、縮小率メモリ13eに記憶される。また、PC2などからプリンタ1に入力された入力画像データは、その入力されたタイミングで、入力画像メモリ13aに書き込まれて記憶されている。尚、このインターフェース17,18または外部メディアスロット19を介して入力された入力画像データをCPU11が入力画像メモリ13aに書込む処理が、請求項に記載のデータ取得ステップに相当する。
そして、出力画像のサイズデータ(画素数m,n)を算出する(S3)。この出力画像のサイズデータは、上記したように出力画像のX軸方向の画素数mと、Y軸方向の画素数nとであり、X軸が長辺であれば、画素数mは、入力画像のX軸方向の画素数Mに縮小率Rを乗算した値を整数化(四捨五入)して求められる。また、画素数nは、画素数mとMとの比(m/M)を入力画像のY軸方向の画素数Nに乗算した値を整数化(小数点以下切り捨て)して求められる。一方、Y軸が長辺であれば、画素数nは、入力画像のY軸方向の画素数Nに縮小率Rを乗算した値を整数化(四捨五入)して求められ、画素数mは、画素数nとNとの比(n/N)を入力画像のX軸方向の画素数Mに乗算した値を整数化(小数点以下切り捨て)して求められる。つまり、本実施形態では、長辺を基準に出力画像の大きさを決定する。また、短辺については、小数点以下の値を切り捨てて画素数を整数化する。このため、長辺の比率で規定される係数cで参照点を設定しても、短辺側においてもはみ出すことなく参照点を入力画像上に設定することができる。その後、求めた出力画像のサイズデータ(画素数m,n)を出力画像サイズメモリ13cに記憶する(S4)。
次いで、出力画像サイズメモリ13cに記憶した画素数nが画素数m以下であるかを確認し(S5)、その結果、画素数nが画素数m以下であれば(S5:Yes)、出力画像(及び入力画像)は、X軸方向を長辺とする画像であるので、画素数mを基準として、出力画像の各画素に対応する入力画像の座標(参照点)を算出する係数Cを求める(S6)。この係数Cは、図2において説明した参照点の間隔であり、入力画像のX軸方向の画素数Mを出力画像の画素数mで除して算出される。つまり、係数Cは、縮小率m/Mの逆数となっている。
一方、画素数nが画素数mを超えていれば(S5:No)、出力画像(及び入力画像)は、Y軸方向を長辺とする画像であるので、画素数nを基準として、出力画像の各画素に対応する入力画像の座標(参照点)を算出する係数Cが、入力画像のY軸方向の画素数Nを出力画像の画素数nで除して算出される(S7)。つまり、縮小率n/Nの逆数が求められる。
S6またはS7の処理の後は、x=0、y=0として(S8)、出力画像の各画素p(x,y)に対応する入力画像上の参照点の座標P(X,Y)を算出する(S9)。参照点のX座標は、入力画像の各画素のx座標に係数Cを乗算して求められ、参照点のY座標は、入力画像の各画素のy座標に係数Cを乗算して求められる。つまり、同じ係数Cが入力画像各画素のx座標とy座標とに乗算されるので、各参照点を入力画像上においてX軸方向にもY軸方向にも同じ間隔で配置する座標が、それぞれの参照点に付与される。
続いて、y=0であるかを確認し(S10)、y=0であれば(S10:Yes)、縮小処理の起動直後のS9の処理が実行されたタイミングであり、出力画像の第1行目に配列される画素に対応する参照点(参照点P00〜P0m’)の処理が実行される状態にあるので、重みの第1要素を算出する(S11)。ここで、重みの第1要素は、距離tおよび距離1−tであるが、参照点P00〜P0m’に対応する距離tを距離t0〜距離tm−1とすると、各参照点に対応する距離tx(x=0〜m−1)は、参照点PのX座標値を整数化(小数点以下切り捨て)した値をそのX座標値から減算して(tx=X−int(X))求められる。また、求められたtxを1から減算して、各参照点に対応する距離1−txが算出される。
次いで、算出したtxおよび1−txを、xによって指定されるPxメモリに書き込む(S12)。これにより、参照点P00に対応する第1要素である距離t0および1−t0は、縮小重みメモリ13fのP0メモリ13f0に書き込まれる。同様に、参照点P10〜Pm’0に対応する第1要素である距離t1〜tm−1および1−t1〜1−tm−1は、縮小重みメモリ13fのP1メモリ13f1〜Pm−1メモリ13m−1の対応するメモリに書き込まれる。
その後、xがm−1以下(x≦m−1)であるかを確認し(S13)、ここで、xがm−1以下であれば(S13:Yes)、対応する画素p(x,y)の画素値を算出するために、参照点P(X,Y)のX座標の小数点以下の値を切り捨てて整数化した値をi、Y座標の小数点以下の値を切り捨てて整数化した値をjとして、参照点P(X,Y)の基準周辺画素P(i,j)を決定すると共に、P(i+1,j+1)、P(i,j+1)、P(i+1,j)を求め、参照点P(X,Y)の4つの周辺画素を選定する(S14)。参照点P(X,Y)が、入力画像の格子点に存在する場合には、周辺画素には、参照点と同位置のその格子点上の画素が含まれる。
そして、yの値に対応する縮小重みメモリ13fに記憶されるtxをsy、1−txを1−syとして読み出してから(S15)、xの値に対応する縮小重みメモリ13fに記憶されるtxと、1−txとを読み出す(S16)。yの値に対応する縮小重みメモリ13fとは、P0メモリ13f0〜Pmメモリ13fmの内、yの値で指定されるメモリであり、例えば、yの値が0である場合には、P0メモリ13f0が指定され、yの値が1であればP1メモリ13f1が指定される。同様に、xの値に対応する縮小重みメモリ13fとは、P0メモリ13f0〜Pmメモリ13fmの内、xの値で指定されるメモリであり、例えば、xの値が0である場合には、P0メモリ13f0が指定され、xの値が1であればP1メモリ13f1が指定される。
ここで、yの値は、出力画像のy座標の値であると共に、入力画像の参照点のY軸方向における位置を示す値番目に対応している。つまり、参照点のY軸方向における位置を示す情報にて、縮小重みメモリ13fに記憶される重みの第1要素が第2要素として抽出されることとなる。
そして、読み出したtx、1−txを重みの第1要素、sy、1−syを重みの第2要素とすると共に、S14の処理で選定した周辺画素の画素値を(1)式に示したバイ・リニア法で補間演算して、p(x,y)の画素値を算出する(S17)。その後、算出したp(x,y)の画素値を出力画像メモリ13bに書込んでから(S18)、xがm−1未満であるか(x<m−1)を確認し(S19)、xがm−1以上であれば(S19:No)、その行において算出するべき全ての画素値の算出が完了したので、y=0であるかを確認し(S20)、ここで、y=0であれば(S20:Yes)、xがn−1未満であるか(x<n−1)を確認する(S21)。
本実施形態においては、画像の長辺を基準に参照点の設定を行う事としているので、画像のY軸が長辺である場合には、X軸方向において本来の画素数であるm個分の第1要素の算出が完了しても、X軸の画素数を仮想的にn個として、画素数nに対応する重みの第1要素を算出する必要がある。S20の処理においてy=0である場合には、第1要素を算出するタイミングであるため、かかる第1要素の算出を終了しても良いか否かを判断するために、xがn−1未満であるかを確認するのである。つまり、Y軸が長辺であれば、Y軸方向の画素数nはX軸方向の画素数mよりも大きい(m<n)ので、xの値がm−1であると、x<n−1となるからである。従って、xがn−1以上であれば(S21:No)、長辺はX軸(m≧n)であり、その行において算出するべき全ての画素値の算出は完了しているので、Y軸方向において最終の画素に到達しているかを調べるために、yがn−1未満であるか(y<n−1)を確認する(S22)。その結果、yがn−1以上であれば(S22:No)、出力画像の最終行nの最後の画素まで、画素値の算出が終了しているので、この縮小処理を終了する。
一方、S10の処理で確認した結果、y=0でなければ(S10:No)、各参照点に対応する各第1要素の算出は終了しているので、その処理をS14の処理に移行する。これにより、第1要素を算出するS11,S12の処理は、スキップされる。各参照点に対応する第1要素は、同じX座標を有する参照点毎に、1度算出すれば良い。故に、y=0、即ち、出力画像の先頭行の各画素の画素値を算出する期間において、各参照点に対応する各第1要素を1度算出した後は、y=0でないことを条件に、S11〜S13の処理を回避するように構成しているのである。
また、S13の処理で確認した結果、xがm−1を超えていれば(S13:No)、出力画像においてy座標の値がyである行のm個の画素の画素値は、全て算出されているので、その処理をS20の処理に移行する。S13の処理は、第1要素を算出する場合(y=0)のみ経由する処理である。従って、このS13の処理において、xがm−1を超える値となるのは、第1要素を算出する場合(y=0)であり、また、出力画像(入寮画像)のX軸がY軸よりも短いことが条件となる。つまり、長辺に対応する画素数分の第1要素を生成するので、m<nであれば、第1要素は、n個分生成しなくてはならない。第2要素は、Y軸方向の画素数分、n個必要となるからである。故に、S13の処理でNoに分岐した場合は、更に、第1要素を算出するべく、その処理をS20の処理に移行するのである。
加えて、S19の処理で確認した結果、xがm−1未満であれば(S19:Yes)、xがX軸方向の最終画素を示すまで、その行における画素に対する画素値を算出するために、また、y=0である場合には第1要素の算出をる引き続き実行するためにも、その処理をS23の処理に移行して、xに1加算してから(S23)、その処理をS9の処理に移行する。これにより、xがm−1に達するまで、繰り返して、S9〜S19の処理が実行されて、その行における全画素に対する画素値の算出が(y=0である場合には第1要素の算出についても)実行される。
更に、S20で確認した結果、y=0でなければ(S20:No)、xがn−1未満である確認をする必要がない。y=0である場合には、m<nであれば、第1要素を算出するためにS11及びS12の処理を実行する必要があるが、y=0でなければ、第1要素は必要分算出済であるので、対応する画素値の算出を行うだけでよく、S11及びS12の処理を実行する必要がない。従って、y=0でなければ(S20:No)、xがn−1未満であるかの確認をする必要がないので、S21の処理をスキップして、その処理をS22の処理に移行する。
また、S21の処理は、y=0である場合にのみ実行されるものである。故に、このS21の処理で確認した結果、xがn−1未満であれば(S21:Yes)、第1要素は、出力画像のX軸方向の画素数mに対応する分まで算出が終了しているが、長辺はY軸方向であってm<nである。したがって、更に、n−1に達するまで、対応する第1要素を算出する必要がある。故に、その処理をS23の処理に移行して、xに1加算してから、その処理をS9の処理に移行する。尚、このように、出力画像のY軸方向の画素数nに対応する分の第1要素を算出する場合には、縮小重みメモリ13fは、そのn個分のメモリP0メモリ13f0〜Pn―1メモリ13fn−1で構成される。
更に、S22の処理で確認した結果、yがn−1未満であれば(S22:Yes)、1の行においてX軸方向最後の画素まで画素値または対応する第1要素の算出が終了した状態であるが、処理された行は出力画像の最終行nではないので、その処理をS24の処理に移行して、yの値に1加算すると共にx=0として、出力画像における次行の先頭画素を指定してから(S24)、その処理をS9の処理に移行する。これにより、出力画像の最終行の最終画素(p(m−1,n−1))に到達するまで、繰り返して、S9〜S24の処理が実行され、出力画像の各画素に対応する画素値が算出される。
以上説明したように、プリンタ2に搭載された画像縮小プログラム12aによる縮小処理では、重みの第1要素を、重みの第2要素として用いることができるので、重みの第2要素の算出を省略することができ、その結果、出力画像を生成する処理速度を向上させることができる。
次に、図4を参照して、第2実施形態について説明する。上記した第1実施形態は、出力画像の生成を画像縮小プログラム12a、即ちソフトウェアによって行うように構成された。これに代えて、第2実施形態においては、出力画像(縮小画像)を生成する処理を、ハード回路によって実現するように構成されている。このため、第2実施形態おいては、プリンタ1には画像縮小プログラム12aは搭載されておらず、画像縮小プログラム12aに代えて、縮小画像を生成するハード回路が備えられている。尚、第1実施形態と同じ部分には同じ符号を付してその説明を省略する。
図4は、プリンタ1の内部に搭載された、画像の縮小処理を実行する画像縮小回路200の構成を示すブロック図である。図4に示すように、画像縮小回路200は、データ入力部201、画像長辺算出部202、縮小重み計算部203、縦横同一重み記憶部204、データ縮小部205、データ出力部206を備えている。
データ入力部201は、PC2から送出された入力画像データ及び入力画像のサイズデータと、プリンタ1の操作パネル16から入力された出力画像のサイズデータとを、画像縮小回路内に入力するものであり、PC2から送出された入力画像データを記憶するための入力画像メモリ201aと、入力画像および出力画像のサイズデータを記憶するデータサイズメモリ201bとを備えている。尚、第2実施形態においては、操作パネル16からは縮小率ではなく、出力画像のサイズデータ(出力画像のX軸方向およびY軸方向それぞれの画素数m,n)が入力されるようになっている。
PC2からプリンタ1へは、入力画像データはラスタデータの態様で、ラスタ走査の順に従って入力され、入力画像メモリ201aには、メモリの先頭側から後方へ向かって順に、入力画像データを構成する各ラスタデータ(各画素値)が、ラスタ走査の順で配置されるように記憶される。
このデータ入力部201への、入力画像データおよびサイズデータの入力が終了すると、データ入力部201から画像長辺算出部202に、データサイズメモリ201bに記憶されたサイズデータが出力される。また、入力画像メモリ201aに記憶される画像データは、データ入力部201からデータ縮小部205へ出力される。
画像長辺算出部202は、データ入力部201から入力されたサイズデータに基づいて、画像の長辺がX軸であるかY軸であるかを判断するものである。データ入力部201からの出力画像のサイズデータは、X軸方向の画素数mとY軸方向の画素数nとであるので、画像長辺算出部202においては、mとnとを比較して、画像の長辺が判断される。そして、出力画像のサイズデータの内、長辺と判断された方の画素数は、縮小重み計算部203に出力される。また、対応する入力画像の長辺のサイズデータについても、縮小重み計算部203に出力される。
縮小重み計算部203は、画像長辺算出部202から入力されたサイズデータに基づき、補間演算に用いる重みの第1要素を算出するものである。縮小重み計算部203は、画像長辺算出部202からの入力画像および出力画像の長辺の画素数から、その両者の比(M/m又はN/n)を算出する。第1実施形態で述べたように、算出された比は、出力画像の各画素に対応する参照点の間隔を規定するものであり、出力画像の画素の座標(x,y)に乗算することにより、参照点の座標が決定される。そして、その参照点のX座標を整数化(切り捨て)した値を、参照点のX座標から減算することにより、重みの第1要素が算出される。この第1要素の算出は、長辺の画素数分、実行される。つまり、出力画像の画素p(0,0)からp(0,m−1)またはp(0,n−1)に至るまで実行される。算出された第1要素は、順次、縦横同一重み記憶部204に出力される。また、算出された入力画像長辺の画素数と出力画像長辺の画素数との比は、データ縮小部205に出力される。
縦横同一重み記憶部204は、縮小重み計算部203からの重みの第1要素を記憶するメモリであり、入力された順番に対応つけて、入力された第1要素を記憶するものである。縮小重み計算部203は、出力画像の画素p(0,0)からp(0,m−1)またはp(0,n−1)に向かって、順次、第1要素を算出するので、縮小重み計算部203から縦横同一重み記憶部204への第1要素の入力順は、入力画像上の参照点の順番(位置)に対応することとなる。故に、縦横同一重み記憶部204においては、第1要素は、入力画像上の参照点の順番に対応して記憶されることとなる。縮小重み計算部203に記憶された第1要素は、データ縮小部205の要求に応答して、データ縮小部205に出力される。
データ縮小部205は、データ入力部201から入力される入力画像データと、縮小重み計算部203から入力される入力画像長辺の画素数と出力画像長辺の画素数との比と、縦横同一重み記憶部204に記憶される第1要素とから、出力画像の各画素(入力画像上の各参照点)の画素値を、バイ・リニア法の補間演算によって算出するものである。ここで、補間演算に用いられる周辺画素の抽出は、第1実施形態と同様に実行される。また、第1実施形態と同様に、参照点の画素値生成の補間演算に用いられる第1要素には、その参照点のX軸方向の順番に対応して縦横同一重み記憶部204に記憶されるものが用いられ、第2要素には、その参照点のY軸方向の順番と同じ順番で縦横同一重み記憶部204に記憶される第1要素が用いられる。これにより、入力画像に対し縮小処理が実行され、入力画像が縮小された出力画像データが生成される。生成された出力画像データは、データ出力部206を介して、画像縮小回路200から出力される。
このように、第2実施形態における画像縮小回路200によれば、入力画像データの縮小をハード回路によって実現することができる。このため、CPUによって同様の縮小処理を実行するよりも高速に処理を実行することができる。
以上上記各実施形態に基づき本発明を説明したが、本発明は上記各実施形態に何ら限定されるものでなく、本発明の趣旨を逸脱しない範囲内で種々の改良変形が可能であることは容易に推察できるものである。
例えば、上記各実施形態では、画像縮小プログラム12aまたは画像縮小回路200は、いずれもプリンタ1に搭載された。これに代えて、画像縮小プログラム12aまたは画像縮小回路200をPC2に搭載し、プリンタ1ではなく、PC2において縮小された画像データを生成するようにしてもよい。
また、上記実施形態における画像縮小プログラム12aは、画像処理プログラムの1実施形態として、入力画像上の参照点の間隔をX軸方向とY軸方向とで等しくすると共に、重みの第1要素を重みの第2要素としても用いて縮小画像を生成するものとした。同様に、画像縮小回路200は、出力画像として、縮小画像を形成するものとして構成された。しかし、本発明は、縮小画像の生成に限って適用されるものではなく、例えば、入力画像を拡大した拡大画像を生成する場合に適用しても良い。具体的には、拡大画像である出力画像の各画素に対応する入力画像上の参照点の間隔を、X軸方向及びY軸方向の両方で同じ間隔とするとともに、その間隔を拡大倍率の逆数にて規定する構成とする。これにより、X座標0からa番目に位置する参照点とY座標0からa番目に位置する参照点との距離を等しくして、各参照点にて形成される格子を正方形とすることができる。故に、縮小画像を形成した場合と同様に、第1要素を第2要素として用いることができる。
加えて、上記各実施形態では、縮小画像を形成する補間演算のアルゴリズムには、バイ・リニア法を用いたが、これに代えて、補間演算にて画素値を生成する他のアルゴリズム、例えば、バイ・キュービック法のアルゴズムを用いても良い。