(57)【要約】  ぼかし効果を与える処理の処理時間の減少を図る。画像変換装置（１００）は、対象画素列と平行な画素列のうちの、絞り形状（１０１）と重なる第１の画素列として、ｙ＝７の画素列を抽出する。さらに、画像変換装置（１００）は、絞り形状（１０１）と連続して重なる画素数が第１の画素列以上の第２の画素列として、ｙ＝４の画素列を抽出する。続けて、画像変換装置（１００）は、元画像（ＩＮ）を変換した場合の第１の画素の値を記憶する記憶部を参照して、元画像（ＩＮ）を変換した場合の第２の画素の値を算出する。具体的には、画像変換装置１００は、元画像（ＩＮ）を変換した場合の第１の画素の値と、拡散元画素（ＩＮ［５］［２］）の値と、拡散元画素（ＩＮ［５］［３］）との平均を、元画像（ＩＮ）を変換した場合の第２の画素の値とする。
2014033867.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する、
処理を実行させることを特徴とする画像変換プログラム。
【請求項２】
前記コンピュータに、
前記対象画素列の中から、前記対象画素列に平行に前記いずれかの画素を移動させた移動後の前記いずれかの画素から前記所定範囲の画素群によって形成される領域内に前記第１の画素が含まれるように、前記対象画素列に平行に前記いずれかの画素を移動させた場合の移動後の前記いずれかの画素と重なる画素を特定し、
特定した前記画素の値に基づいて、前記画像を変換した場合の前記第１の画素の値を算出する処理を実行させ、
前記第２の画素の値を算出する処理は、
算出した前記第１の画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項１に記載の画像変換プログラム。
【請求項３】
前記コンピュータに、
前記対象画素列の中から、前記対象画素列に平行に前記いずれかの画素を移動させた移動後の前記いずれかの画素から前記所定範囲の画素群によって形成される領域内に前記第２の画素が含まれるように、前記対象画素列に平行に前記いずれかの画素を移動させた場合の移動後の前記いずれかの画素と重なる画素を特定する処理を実行させ、
前記第２の画素の値を算出する処理は、
前記画像を変換した場合の前記第１の画素の値と特定した前記画素の値とに基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項１または２に記載の画像変換プログラム。
【請求項４】
前記コンピュータに、
前記対象画素列の各々の画素ごとに、前記いずれかの方向に向かって、前記各々の画素から前記第１の画素群の画素数分の画素までの各画素の値に基づいて、前記画像を変換した場合の前記第１の画素列に関する前記各々の画素の値を算出し、
算出した前記第１の画素列に関する前記各々の画素の値のうちの、前記いずれかの画素から前記いずれかの方向の逆方向に向かって、前記第１の画素群の前記いずれかの方向にある端の画素から前記第１の画素までの画素数分先の位置にある画素の値を、前記画像を変換した場合の前記第１の画素の値に設定する処理を実行させ、
前記第２の画素の値を算出する処理は、
設定した前記第１の画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項１〜３のいずれか一つに記載の画像変換プログラム。
【請求項５】
前記コンピュータに、
前記各々の画素ごとに、前記いずれかの方向に向かって、前記各々の画素から前記第１の画素群の画素数分先の位置にある画素の次の画素から、前記各々の画素から前記第２の画素群の画素数分まで、の各画素の値と、算出した前記第１の画素列に関する前記各々の画素の値とに基づいて、前記画像を変換した場合の前記第２の画素列に関する前記各々の画素の値を算出し、
前記第２の画素の値を算出する処理は、
算出した前記第２の画素列に関する前記各々の画素の値のうちの、前記いずれかの画素から前記いずれかの方向の逆方向に向かって、前記第１の画素群の前記いずれかの方向にある端の画素から前記第２の画素までの画素数分先の位置にある画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項４に記載の画像変換プログラム。
【請求項６】
前記コンピュータに、
画素群によって形成される領域の形状と、走査方向とを関連付けて記憶するテーブルを参照して、指定された形状に応じた走査方向を選択し、
前記画像の中から、選択した走査方向に走査して前記対象画素列を取得する処理を実行させ、
前記対象画素列を取得した後、前記第１の画素列と前記第２の画素列とを抽出する処理を実行することを特徴とする請求項１〜５のいずれか一つに記載の画像変換プログラム。
【請求項７】
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する、
処理をコンピュータに実行させる画像変換プログラムを記録したことを特徴とする記録媒体。
【請求項８】
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出する抽出部と、
前記抽出部によって抽出された前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得する取得部と、
前記抽出部によって抽出された前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、前記取得部によって取得された前記画素数分先の位置にある第２の画素を特定する特定部と、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する算出部と、
を有することを特徴とする画像変換装置。
【請求項９】
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出する抽出部と、
前記抽出部によって抽出された前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得する取得部と、
前記抽出部によって抽出された前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、前記取得部によって取得された前記画素数分先の位置にある第２の画素を特定する特定部と、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する算出部と、
を含むコンピュータを有することを特徴とする画像変換装置。
【請求項１０】
コンピュータが、
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する、
処理を実行することを特徴とする画像変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像変換プログラム、記録媒体、画像変換装置、および画像変換方法に関する。
【背景技術】
【０００２】
従来、画像を、ぼかし効果を与えた画像に変換する技術がある。たとえば、入力画像の処理対象画素それぞれにぼかし範囲を計算し、ぼかし効果を与える処理を行う技術がある。また、サイズが異なる複数の移動平均フィルタを用いてフィルタ処理を行い、複数のぼかし画像を生成し、複数のぼかし画像データの互いに対応する各画素に関し、ぼかし画像ごとに重みを与えて、各ぼかし画像データの平均値を合成ぼかし画像とする技術がある。また、入力画像の各画素のＲＧＢ値から露光量を計算処理によって求め、各画素の露光量にぼかし効果を与える処理を行い、ぼかし効果を与えた各画素の露光量をＲＧＢ値に戻す技術がある。（たとえば、下記特許文献１〜３を参照。）
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０６−０３６０２２号公報
【特許文献２】特開２００４−１３３５５１号公報
【特許文献３】特開２００１−２１６５１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来技術において、画像に対してぼかし効果を与える処理の計算量が多くなり、画像の変換処理にかかる処理時間の増加を招くという問題がある。たとえば、ぼかし効果を与える処理は、画像内の画素ごとに画素の値をぼかし範囲となる絞り形状に合わせて均等に分布する処理となるため、計算量が多くなる。【０００５】
本発明は、上述した従来技術による問題点を解消するため、ぼかし効果を与える処理の処理時間の短縮を図る画像変換プログラム、記録媒体、画像変換装置、および画像変換方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、変換対象となる画像の中の対象画素列と平行な画素列のうちの、対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、領域と連続して重なる画素数が第１の画素列以上の第２の画素列とを抽出し、抽出した第１の画素列の中の領域に含まれる第１の画素群のうちの対象画素列の走査方向または走査方向の逆方向のいずれかの方向にある端の画素から第１の画素群に含まれる第１の画素までの画素数を取得し、抽出した第２の画素列の中の領域に含まれる第２の画素群のうちのいずれかの方向にある端の画素からいずれかの方向の逆方向に向かって、取得した画素数分先の位置にある第２の画素を特定し、画像を変換した場合の第１の画素の値を記憶する記憶部を参照して、画像を変換した場合の第２の画素の値を算出する画像変換プログラム、記録媒体、画像変換装置、および画像変換方法が提案される。
【発明の効果】
【０００７】
本発明の一側面によれば、ぼかし効果を与える処理の処理時間の短縮を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１Ａ】図１Ａは、本実施の形態にかかる画像変換装置の動作例を示す説明図（その１）である。
【図１Ｂ】図１Ｂは、本実施の形態にかかる画像変換装置の動作例を示す説明図（その２）である。
【図２】図２は、画像変換装置のハードウェア構成例を示すブロック図である。
【図３】図３は、画像変換装置の機能構成例を示すブロック図である。
【図４】図４は、絞り形状の第１の例と絞り形状テーブルの記憶内容の第１の例を示す説明図である。
【図５】図５は、画像変換処理の動作例を示す説明図（その１）である。
【図６】図６は、画像変換処理の動作例を示す説明図（その２）である。
【図７】図７は、画像変換処理の動作例を示す説明図（その３）である。
【図８】図８は、ｘ軸方向に走査する場合の画像変換処理手順の一例を示すフローチャートである。
【図９】図９は、ｘ軸方向に走査する場合の初期化処理手順の一例を示すフローチャートである。
【図１０】図１０は、ｘ軸方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。
【図１１】図１１は、ｘ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。
【図１２】図１２は、ｘ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。
【図１３】図１３は、ＲＧＢ値変換処理手順の一例を示すフローチャートである。
【図１４】図１４は、絞り形状テーブルを用いない場合の画像変換処理の動作例を示す説明図である。
【図１５】図１５は、絞り形状テーブルを用いない場合の光拡散処理手順の一例を示すフローチャート（その１）である。
【図１６】図１６は、絞り形状テーブルを用いない場合の光拡散処理手順の一例を示すフローチャート（その２）である。
【図１７】図１７は、絞り形状の第２の例と絞り形状テーブルの記憶内容の第２の例を示す説明図である。
【図１８】図１８は、ｙ軸方向に走査する場合の初期化処理手順の一例を示すフローチャートである。
【図１９】図１９は、ｙ軸方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。
【図２０】図２０は、ｙ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。
【図２１】図２１は、ｙ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。
【図２２】図２２は、Ｙ＝−Ｘ方向に走査する場合の画像変換処理の動作例を示す説明図である。
【図２３】図２３は、Ｙ＝−Ｘ方向に走査する場合の初期化処理手順の一例を示すフローチャートである。
【図２４】図２４は、Ｙ＝−Ｘ方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。
【図２５】図２５は、Ｙ＝−Ｘ方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。
【図２６】図２６は、Ｙ＝−Ｘ方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。
【図２７】図２７は、Ｐ取得処理手順の一例を示すフローチャートである。
【図２８】図２８は、Ｘ・Ｙ取得処理手順の一例を示すフローチャートである。
【図２９】図２９は、Ｒｏ取得処理手順の一例を示すフローチャートである。
【図３０】図３０は、絞り形状の第３の例と絞り形状テーブルの記憶内容の第３の例を示す説明図である。
【図３１】図３１は、絞り形状の第４の例と絞り形状テーブルの記憶内容の第４の例を示す説明図である。
【図３２】図３２は、光エネルギ値からＲＧＢ値への変換処理手順の一例を示すフローチャート（その１）である。
【図３３】図３３は、光エネルギ値からＲＧＢ値への変換処理手順の一例を示すフローチャート（その２）である。
【図３４】図３４は、本実施の形態における画像変換処理の結果の一例を示す説明図（その１）である。
【図３５】図３５は、本実施の形態における画像変換処理の結果の一例を示す説明図（その２）である。
【図３６】図３６は、画素ごとの画像変換処理と本実施の形態における画像変換処理との速度比較を示す説明図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、開示の画像変換プログラム、記録媒体、画像変換装置、および画像変換方法の実施の形態を詳細に説明する。
【００１０】
図１Ａは、本実施の形態にかかる画像変換装置の動作例を示す説明図（その１）である。画像変換装置１００は、元画像を受け付けると、元画像にぼかし効果を与える処理を行い、ぼかし画像として変換するコンピュータである。画像変換装置１００は、たとえば、スマートフォンや携帯電話等の携帯端末である。たとえば、画像変換装置１００がユーザにより操作されている状態にて、画像変換装置１００が、ポップアップダイアログを表示する場合を想定する。このとき、ポップアップダイアログ以外の背面をぼかし効果によりぼかすことにより、画像変換装置１００は、ポップアップダイアログに注視させるという、ユーザに対する視覚的効果を与えることができる。
【００１１】
しかし、ぼかし効果を与える処理は、画像内の画素数と絞り形状に含まれる画素数との積に比例しており、処理量が多くなるため、処理時間がかかる。本実施の形態にかかる画像変換装置１００は、ぼかし効果を与える処理の計算量を減らして、処理時間を短縮する。
【００１２】
以下、元画像を、ぼかし効果を与えたぼかし画像に変換する処理を、「画像変換処理」と称する。また、元画像とぼかし画像の大きさは、縦幅Ｈ［画素］、横幅Ｗ［画素］と定義する。また、元画像の符号を、ＩＮとし、ぼかし画像の符号をＯＵＴと定義する。さらに、元画像およびぼかし画像は、直交する２次元座標にあり、水平軸をｘ軸とし、垂直軸をｙ軸とする。元画像のｘ＝Ｘ、ｙ＝Ｙの画素を、ＩＮ［Ｙ］［Ｘ］として示し、変換後となるぼかし画像のｘ＝Ｘ、ｙ＝Ｙの画素を、ＯＵＴ［Ｙ］［Ｘ］として示す。また、ＩＮ［Ｙ］は、元画像のｙ＝Ｙの行の画素列を示し、ＯＵＴ［Ｙ］は、ぼかし画像のｙ＝Ｙの行の画素列を示す。
【００１３】
図１Ａの（Ａ）は、絞り形状１０１を示している。絞り形状１０１は、予めユーザによって指定された絞り形状となる。指定された絞り形状１０１は、拡散元画素から所定範囲の画素群によって形成される領域の形状となる。絞り形状１０１の中央となるｘ＝０、ｙ＝０の画素は、所定範囲の画素群に画素の値を拡散させる拡散元画素となる。画素の値は、ＲＧＢ値でもよいし、ＲＧＢ値を変換した露光量を表す光エネルギ値でもよい。光エネルギ値は、照度と時間をかけ合わせた値となる。
【００１４】
図１Ａでの所定範囲の画素群は、ｙ＝２、−２の行の、−１≦ｘ≦１を満たす画素となり、ｙ＝−１、０、１の行の、−２≦ｘ≦２を満たす画素となる。以上から、絞り形状に含まれる画素群は、２１［画素］となる。画像変換装置１００の画面の画素数が、３２０［画素］×４８０［画素］である場合、画像内の画素数と絞り形状に含まれる画素数との積は、３２０×４８０×２１＝３２２５６００［画素］となる。本実施の形態にかかる画像変換装置１００は、ぼかし処理の計算量の減少を図る。
【００１５】
図１Ａの（Ｂ１）〜図１Ａの（Ｂ３）では、ぼかし形状と重なる画素について、どの画素が影響を与えているかを示した図である。図１Ａの（Ｂ１）〜図１Ａの（Ｂ３）では、画像変換装置１００が、入力画像を水平方向に走査して得られる、光を拡散させる拡散元画素の対象画素列をｙ＝５とした場合について説明する。なお、走査方向は、ｘ軸方向でもよいし、ｙ軸方向でもよいし、ｘ軸方向と、ｙ軸方向とは異なる斜め方向としてもよい。
【００１６】
画像変換装置１００は、対象画素列と平行な画素列のうちの、絞り形状１０１と重なる第１の画素列として、ｙ＝７の画素列を抽出する。さらに、画像変換装置１００は、絞り形状１０１と連続して重なる画素数が第１の画素列以上の第２の画素列として、ｙ＝４の画素列を抽出する。具体的には、第１の画素列が絞り形状１０１と重なる画素数は、３［画素］であり、第２の画素列が絞り形状１０１と重なる画素数は、５［画素］となる。以下、走査方向における画素列が、絞り形状１０１と重なる画素数を「ぶれ量」と呼称する。
【００１７】
図１Ａの（Ｂ１）にて、対象画素列のうち拡散元画素をＩＮ［５］［６］とした場合、画像変換装置１００は、ｙ＝７の画素列のうち、第１の画素として、ＩＮ［７］［５］を選択する。さらに、画像変換装置１００は、ｙ＝４の画素列のうち、第２の画素として、ＩＮ［４］［４］を特定する。第１の画素と第２の画素の位置関係は、絞り形状と重なる領域での相対位置が同一となっている。より詳細には、ｙ＝７が絞り形状１０１と重なる第１の画素群のうち、ＩＮ［７］［５］は、走査方向の逆方向から数えると、０番目に位置する。同様に、ｙ＝４が絞り形状１０１と重なる第２の画素群のうち、ＩＮ［４］［４］は、走査方向の逆方向から数えると、０番目に位置する。領域での相対位置は、走査方向から見てもよい。第１の画素、第２の画素ともに絞り形状１０１に含まれているため、第１の画素、第２の画素は、拡散元画素ＩＮ［５］［６］の影響を受ける。
【００１８】
次に、図１Ａの（Ｂ２）にて、対象画素列のうち拡散元画素をＩＮ［５］［４］とした場合も、第１の画素、第２の画素ともに絞り形状１０１に含まれているため、第１の画素と第２の画素は、拡散元画素ＩＮ［５］［４］の影響を受ける。なお、図示していないが、対象画素列のうち拡散元画素をＩＮ［５］［５］とした場合も、第１の画素、第２の画素ともに絞り形状１０１に含まれているため、第１の画素、第２の画素は、拡散元画素ＩＮ［５］［５］の影響を受ける。
【００１９】
続けて、図１Ａの（Ｂ３）にて、対象画素列のうち拡散元画素をＩＮ［５］［２］とした場合、第２の画素は絞り形状１０１に含まれるため、第２の画素は、拡散元画素ＩＮ［５］［２］の影響を受ける。しかし、第１の画素は、絞り形状１０１に含まれないため、第１の画素は、拡散元画素ＩＮ［５］［２］の影響を受けない。なお、図示していないが、対象画素列のうち拡散元画素をＩＮ［５］［３］とした場合も、第２の画素は絞り形状１０１に含まれるため、第２の画素は、拡散元画素ＩＮ［５］［３］の影響を受ける。しかし、第１の画素は、絞り形状１０１に含まれないため、第１の画素は、拡散元画素ＩＮ［５］［３］の影響を受けない。
【００２０】
以上より、第１の画素は、拡散元画素ＩＮ［５］［４］〜拡散元画素ＩＮ［５］［６］の影響を受けることとなる。また、第２の画素は、拡散元画素ＩＮ［５］［２］〜拡散元画素ＩＮ［５］［６］の影響を受けることとなる。したがって、第１の画素と第２の画素は、影響を与える画素が一部共通していることから、計算結果を再利用することができる。また、影響を受ける画素の数は、ぶれ量と一致する。図１の（Ｂ）にて、計算結果の再利用について説明する。
【００２１】
図１Ｂは、本実施の形態にかかる画像変換装置の動作例を示す説明図（その２）である。図１Ａにて説明したとおり、第１の画素と第２の画素は、影響を与える画素が一部共通している。したがって、画像変換装置１００は、元画像ＩＮを変換した場合の第１の画素の値を記憶する記憶部を参照して、元画像ＩＮを変換した場合の第２の画素の値を算出する。具体的には、画像変換装置１００は、元画像ＩＮを変換した場合の第１の画素の値と、拡散元画素ＩＮ［５］［２］の値と、拡散元画素ＩＮ［５］［３］の値との平均を、元画像ＩＮを変換した場合の第２の画素の値とする。
【００２２】
元画像ＩＮを変換した場合の第１の画素の値を参照しない場合、拡散元画素ＩＮ［５］［２］〜拡散元画素ＩＮ［５］［６］を加算するため、画像変換装置１００は、４回の加算処理を行うことになる。一方、元画像ＩＮを変換した場合の第１の画素の値を参照することにより、画像変換装置１００は、２回の加算処理で済む。以降、図２〜図３６を用いて、画像変換装置１００の動作について詳細に説明する。
【００２３】
（画像変換装置１００のハードウェア）
図２は、画像変換装置のハードウェア構成例を示すブロック図である。図２において、スマートフォンなどの携帯端末を想定する画像変換装置１００は、ＣＰＵ２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６を有する。画像変換装置１００は、さらに、ディスプレイ２０７と、Ｉ／Ｆ２０８と、タッチパネル２０９を有する。各部は、それぞれバス２１０で接続されている。
【００２４】
ここで、ＣＰＵ２０１は、画像変換装置１００の全体の制御を司る制御装置である。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している不揮発性メモリである。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される揮発性メモリである。フラッシュＲＯＭ２０４は、書き換え可能な不揮発性メモリであり、たとえば、読出し速度が高速なＮＯＲ型フラッシュメモリである。フラッシュＲＯＭ２０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、画像変換装置１００は、Ｉ／Ｆ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。また、本実施の形態にかかる画像変換プログラムは、ＯＳから呼ばれるシステムコールとして、フラッシュＲＯＭ２０４内に存在していてもよい。
【００２５】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵ２０１の制御にしたがってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する制御装置である。フラッシュＲＯＭ２０６は、書き換え可能な不揮発性メモリであり、たとえば、データの保存、運搬を主に目的とした、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、画像変換装置１００を使用するユーザがＩ／Ｆ２０８を通して取得した画像データ、映像データなどや、また本実施の形態にかかる画像変換プログラムを記憶してもよい。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２６】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ２０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２７】
Ｉ／Ｆ２０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１１に接続され、ネットワーク２１１を介して他の装置に接続される。そして、Ｉ／Ｆ２０８は、ネットワーク２１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。タッチパネル２０９は、ユーザからの接触により、データの入力を行う装置である。
【００２８】
（画像変換装置１００の機能）
次に、画像変換装置１００の機能について説明する。図３は、画像変換装置の機能構成例を示すブロック図である。画像変換装置１００は、選択部３０１と、対象画素列取得部３０２と、抽出部３０３と、画素数取得部３０４と、第２の画素特定部３０５と、拡散元画素特定部３０６と、算出部３０７と、を含む。制御部となる選択部３０１〜算出部３０７は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、選択部３０１〜算出部３０７の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などである。または、Ｉ／Ｆ２０８を経由して他のＣＰＵが実行することにより、選択部３０１〜算出部３０７の機能を実現してもよい。
【００２９】
また、画像変換装置１００は、絞り形状テーブル３１０と、一時記憶領域３１１にアクセス可能である。絞り形状テーブル３１０は、いずれかの画素から所定範囲の画素群によって形成される領域の形状と、走査方向とを関連付けて記憶する記憶領域である。一時記憶領域３１１は、元画像ＩＮを変換した画像ＯＵＴの画素の値を一時的に記憶する記憶領域である。絞り形状テーブル３１０と、一時記憶領域３１１は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６といった記憶装置に格納されている。
【００３０】
選択部３０１は、絞り形状テーブル３１０を参照して、指定された絞り形状に応じた走査方向を選択する。絞り形状は、たとえば、ユーザにより指定される。または、開発者によって絞り形状が指定されていてもよい。絞り形状は、たとえば、６角形、ハート型、星型、など、どのような形状であってもよい。たとえば、選択部３０１は、ユーザにより指定された絞り形状が６角形の絞り形状であれば、絞り形状テーブル３１０に記憶されている走査方向としてｘ軸方向を選択する。なお、選択されたデータは、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３１】
対象画素列取得部３０２は、元画像ＩＮの中から、選択部３０１によって選択された走査方向に走査して対象画素列を取得する。たとえば、選択部３０１が走査方向としてｘ軸方向を選択したとする。このとき、対象画素列取得部３０２は、元画像ＩＮの中から、ｘ軸方向に走査して対象画素列として、ｙ＝５の画素列を選択する。対象画素列取得部３０２は、繰り返し対象画素列を取得してもよい。たとえば、対象画素列取得部３０２は、ｙ＝０の画素列から、ｙ＝Ｈ−１の画素列までを対象画素列として取得してもよい。
【００３２】
抽出部３０３は、変換対象となる画像の中の対象画素列と平行な画素列のうちの、対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、領域と連続して重なる画素数が第１の画素列以上の第２の画素列とを抽出する。いずれかの画素は、画素の値の拡散元画素となる。図１の例では、拡散元画素を、ＩＮ［ｙ＝５］［ｘ＝６］とする。たとえば、抽出部３０３は、ｙ＝５の画素列と平行な画素列のうちの、絞り形状１０１と重なる第１の画素列としてｙ＝７の画素列と、絞り形状１０１と重なる画素数が第１の画素列以上の第２の画素列として、ｙ＝４の画素列とを抽出する。
【００３３】
画素数取得部３０４は、抽出部３０３によって抽出された第１の画素列の中の領域に含まれる第１の画素群のうちの対象画素列の走査方向または走査方向の逆方向のいずれかの方向にある端の画素から第１の画素群に含まれる第１の画素までの画素数を取得する。たとえば、選択部３０１が走査方向としてｘ軸方向を選択したとする。図１Ａの例とすると、第１の画素群は、ＩＮ［ｙ＝７］［ｘ＝５］〜ＩＮ［ｙ＝７］［ｘ＝７］となる。また、第２の画素群は、ＩＮ［ｙ＝４］［ｘ＝４］〜ＩＮ［ｙ＝４］［ｘ＝８］となる。第１の画素は、第１の画素群のいずれであってもよい。また、第１の画素を、ＩＮ［ｙ＝７］［ｘ＝５］として説明する。
【００３４】
また、いずれかの方向は、走査方向がｘ軸方向であればｘ軸の正の方向でもよいし、ｘ軸の負の方向でもよい。たとえば、画素数取得部３０４は、第１の画素群のうちのｘ軸の負の方向にある端の画素ＩＮ［ｙ＝７］［ｘ＝５］から、第１の画素ＩＮ［ｙ＝７］［ｘ＝５］までの画素数０を取得する。なお、取得された画素数は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３５】
第２の画素特定部３０５は、第２の画素列の中の領域に含まれる第２の画素群のうちのいずれかの方向にある端の画素からいずれかの方向の逆方向に向かって、画素数取得部３０４に取得した画素数分先の位置にある第２の画素を特定する。たとえば、第２の画素特定部３０５は、第２の画素群のうちのｘ軸の負の方向にある端の画素ＩＮ［ｙ＝４］［ｘ＝４］から、ｘ軸の正の方向に向かって、画素数０分の位置にある第２の画素ＩＮ［ｙ＝４］［ｘ＝４］を特定する。なお、特定された第２の画素のｘ座標の位置、ｙ座標の位置は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３６】
拡散元画素特定部３０６は、対象画素列の中から、対象画素列に平行にいずれかの画素を移動させた場合の移動後のいずれかの画素と重なる画素を特定する。いずれかの画素を移動させる際、拡散元画素特定部３０６は、対象画素列に平行にいずれかの画素を移動させた移動後のいずれかの画素から所定範囲の画素群によって形成される領域内に第１の画素が含まれるように、いずれかの画素を移動させる。たとえば、拡散元画素特定部３０６は、対象画素列となるｙ＝５の中から、絞り形状１０１に第１の画素ＩＮ［ｙ＝４］［ｘ＝４］が含まれるように拡散元画素を移動させる。そして、拡散元画素特定部３０６は、いずれかの画素と重なった画素ＩＮ［５］［４］〜画素ＩＮ［５］［６］を特定する。
【００３７】
また、拡散元画素特定部３０６は、対象画素列の中から、対象画素列に平行にいずれかの画素を移動させた場合の移動後のいずれかの画素と重なる画素を特定する。いずれかの画素を移動させる際、拡散元画素特定部３０６は、対象画素列に平行にいずれかの画素を移動させた移動後のいずれかの画素から所定範囲の画素群によって形成される領域内に第２の画素が含まれるように、いずれかの画素を移動させる。なお、特定された画素のｘ座標の位置、ｙ座標の位置は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３８】
算出部３０７は、画像を変換した場合の第１の画素の値を記憶する一時記憶領域３１１を参照して、元画像ＩＮを変換した場合の第２の画素の値を算出する。たとえば、拡散元画素特定部３０６は、第１の画素が含まれるようにいずれかの画素を移動させた際に特定された画素群と、第１の画素が含まれるようにいずれかの画素を移動させた際に特定された画素群とが一致したとする。この場合、算出部３０７は、一時記憶領域３１１に記憶された第１の画素の値を、元画像ＩＮを変換した場合の第２の画素の値に設定する。
【００３９】
また、算出部３０７は、拡散元画素特定部３０６によって特定された画素の値に基づいて、元画像ＩＮを変換した場合の第１の画素の値を算出してもよい。たとえば、算出部３０７は、拡散元画素ＩＮ［５］［４］〜拡散元画素ＩＮ［５］［６］の値を加算して、元画像ＩＮを変換した第１の画素ＯＵＴ［７］［５］の値を算出する。
【００４０】
また、算出部３０７は、算出部３０７によって算出された第１の画素の値に基づいて、画像を変換した場合の第２の画素の値を算出してもよい。また、算出部３０７は、元画像ＩＮを変換した場合の第１の画素の値と特定した画素の値とに基づいて、画像を変換した場合の第２の画素の値を算出してもよい。たとえば、算出部３０７は、第１の画素ＯＵＴ［７］［５］の値と、拡散元画素ＩＮ［５］［２］の値と、拡散元画素ＩＮ［５］［３］の値と、を加算して、第２の画素ＯＵＴ［４］［４］の値を算出する。
【００４１】
また、算出部３０７は、対象画素列の各々の画素ごとに、いずれかの方向に向かって、各々の画素から第１の画素群の画素数分の画素までの各画素の値に基づいて、画像を変換した場合の第１の画素列に関する各々の画素の値を算出する。たとえば、算出部３０７は、ｙ＝５となる対象画素列の各々の画素ごとに、ｘ軸方向の負の方向に向かって、各々の画素から、第１の画素群の画素数となる３個分の画素の値を加算して、画像を変換した場合の第１の画素列に関する各々の画素の値を算出する。
【００４２】
より詳細に記述すると、たとえば、算出部３０７は、ＩＮ［ｙ＝５］［ｘ＝０］〜ＩＮ［ｙ＝５］［ｘ＝２］の値の加算結果を、一時記憶領域３１１として、ＴＭＰ［ｘ＝２］の値とする。以下、さらに、算出部３０７は、ＩＮ［ｙ＝５］［ｘ＝１］〜ＩＮ［ｙ＝５］［ｘ＝３］の値の加算結果を、ＴＭＰ［ｘ＝３］の値とする。算出部３０７は、このような計算を、ＴＭＰ［ｘ＝Ｗ−１＋Ｓ］まで行う。ここで、Ｓは、ぶれ量の最大値とする。算出した結果は、一時記憶領域３１１に格納する。
【００４３】
算出部３０７は、算出した第１の画素列に関する各々の画素の値のうちの、いずれかの画素からいずれかの方向の逆方向に向かって、第１の画素群のいずれかの方向にある端の画素から第１の画素までの画素数分先の位置にある画素の値を第１の画素の値に設定する。
【００４４】
第１の画素群がＩＮ［ｙ＝５］［ｘ＝５］〜ＩＮ［ｙ＝５］［ｘ＝７］であり、いずれかの方向がｘ軸の負の方向であり、第１の画素がＩＮ［ｙ＝５］［ｘ＝５］であるとする。この場合、第１の画素群のいずれかの方向にある端の画素から第１の画素までの画素数は、０となる。このとき、算出部３０７は、ＴＭＰ［ｘ＝０］〜ＴＭＰ［ｘ＝Ｗ−１＋Ｓ］のうちの、いずれかの画素からＩＮ［ｙ＝５］［ｘ＝６］からｘ軸の正の方向に向かって、画素数０の位置にある画素ＴＭＰ［ｘ＝６］の値を元画像を変換した第１の画素の値に設定する。
【００４５】
また、算出部３０７は、各々の画素ごとに、次の記載する情報に基づいて、画像を変換した場合の第２の画素列に関する各々の画素の値を算出してもよい。基づく情報は、いずれかの方向に向かって、各々の画素から第１の画素群の画素数分先の位置にある画素の次の画素から、各々の画素から第２の画素群の画素数分まで、の各画素の値と、算出した第１の画素列に関する各々の画素の値となる。
【００４６】
さらに、算出部３０７は、算出した第２の画素列に関する各々の画素の値のうちの、元画像を変換した場合の第２の画素の値を算出する。基づく情報は、いずれかの画素からいずれかの方向の逆方向に向かって、第１の画素群のいずれかの方向にある端の画素から第２の画素までの画素数分先の位置にある画素の値となる。算出した画素の値は、一時記憶領域３１１に格納される。次に、図４〜図１６を用いて、ｘ軸方向に走査する場合の画像変換処理について説明する。
【００４７】
（ｘ軸方向に走査する例）
図４は、絞り形状の第１の例と絞り形状テーブルの記憶内容の第１の例を示す説明図である。図４の（Ａ）では、ｘｙ平面上での絞り形状４００を示している。図４に示すように、絞り形状４００は、６角形となっている。図４の（Ａ）内のｗは、ぶれ量を図示している。図４の（Ｂ）には、ｘ方向に走査する場合の、絞り形状４００の具体的な数値が記されている。たとえば、ｙ＝４の行は、ｘ＝０から始まってｗ＝１画素続いている。また、ｙ＝３の行は、ｘ＝−１から始まってｗ＝３画素続いている。続けて、ｙ＝２の行は、ｘ＝−３から始まってｗ＝７画素続いている。
【００４８】
図４の（Ｃ）は、絞り形状４００の具体的数値を絞り形状テーブルに格納した場合の記憶内容の一例を示している。図４の（Ｃ）に示す絞り形状テーブル３１０は、レコード４０１−１〜レコード４０１−９を記憶している。また、絞り形状テーブル３１０は、走査方向としてｘ軸方向を関連付けて記憶している。絞り形状テーブル３１０は、ｘ、ｙ、ｗという３つのフィールドを含む。ｘフィールドには、絞り形状４００の該当のｙ行におけるぶれ開始位置となる左端の画素のｘ行における位置が格納される。ｙフィールドには、該当のｙ行における画素の位置が格納される。ｗフィールドには、ぶれ量となる該当のｙ行における左端から右端までの画素数が格納される。また、絞り形状テーブル３１０は、ｗの小さい順に格納されている。
【００４９】
たとえば、レコード４０１−１は、ｙ＝４の行について、ｘ＝０から始まって１画素続いていることを示している。次に、図５〜図７を用いて、画像変換処理の動作例を説明する。
【００５０】
図５は、画像変換処理の動作例を示す説明図（その１）である。図５では、元画像のある画素が、変換後の画素群のうちのどの画素に影響を与えているかを説明した図である。たとえば、図５の例では、ＩＮ［０］〜ＩＮ［Ｈ−１］のうちの、処理対象行となるＩＮ［Ｙ］の各画素が影響を与える画素について説明する。
【００５１】
ＩＮ［Ｙ］［Ｘ］は、ＯＵＴ［Ｙ＋４］［Ｘ］に影響を与える。同様に、ＩＮ［Ｙ］［Ｘ＋１］は、ＯＵＴ［Ｙ＋４］［Ｘ＋１］に影響を与え、ＩＮ［Ｙ］［Ｘ＋２］は、ＯＵＴ［Ｙ＋４］［Ｘ＋２］に影響を与える。このように、ＯＵＴ［Ｙ＋４］は、ＩＮ［Ｙ］そのものを追加すればよい。ＯＵＴ［Ｙ−４］も同様に、ＩＮ［Ｙ］そのものを追加すればよい。また、図５に示す「±」は、符号のみが異なる２つの値を省略して記載する記号である。また、「＋＝」は、右辺と左辺の加算を行い、加算結果を右辺に格納する演算子である。
【００５２】
また、ＩＮ［Ｙ］［Ｘ］は、ＯＵＴ［Ｙ＋３］［Ｘ−１］、ＯＵＴ［Ｙ＋３］［Ｘ］、ＯＵＴ［Ｙ＋３］［Ｘ＋１］という３つの画素に影響を与える。同様に、ＩＮ［Ｙ］［Ｘ−１］は、ＯＵＴ［Ｙ＋３］［Ｘ−２］、ＯＵＴ［Ｙ＋３］［Ｘ−１］、ＯＵＴ［Ｙ＋３］［Ｘ］という３つの画素に影響を与える。同様に、ＩＮ［Ｙ］［Ｘ＋１］は、ＯＵＴ［Ｙ＋３］［Ｘ］、ＯＵＴ［Ｙ＋３］［Ｘ＋１］、ＯＵＴ［Ｙ＋３］［Ｘ＋２］という３つの画素に影響を与える。
【００５３】
このように、ＯＵＴ［Ｙ＋３］［Ｘ］は、ＩＮ［Ｙ］［Ｘ−１］、ＩＮ［Ｙ］［Ｘ］、ＩＮ［Ｙ］［Ｘ＋１］、という３つの画素から影響を受ける。０からＷ−１内の間の値をとるｉを用いて一般化すると、画素ＯＵＴ［Ｙ＋３］［ｉ］は、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］、という３つの画素から影響を受ける。したがって、ＯＵＴ［Ｙ＋３］は、ぶれ量が３であり、ＩＮ［Ｙ］の幅３の移動平均を追加すればよい。移動平均の生成方法については、図６にて後述する。同様に、ＯＵＴ［Ｙ−３］も、ＩＮ［Ｙ］の幅３の移動平均を追加すればよい。同様に、ＯＵＴ［Ｙ±２］、ＯＵＴ［Ｙ±１］、ＯＵＴ［Ｙ］は、ＩＮ［Ｙ］の幅７の移動平均を追加すればよい。
【００５４】
図６は、画像変換処理の動作例を示す説明図（その２）である。図６では、ＩＮ［Ｙ］を処理対象として、一時記憶領域３１１となるＴＭＰに処理結果を格納する際の移動平均の生成方法を示している。
【００５５】
図６の（Ａ）では、幅１の移動平均を示している。幅１の移動平均は、元データと同一となる。たとえば、０からＷ−１内の間の値をとるｉを用いると、ＴＭＰ［ｉ］は、ＩＮ［Ｙ］［ｉ］の値が格納されている。次に、図６の（Ｂ）では、幅２の移動平均を示している。画像変換装置１００は、幅１の移動平均を格納したＴＭＰに、元画像の対象の行内にある次の画素の値を追加して、幅２の移動平均を生成する。たとえば、画像変換装置１００は、幅１の移動平均を格納したＴＭＰ［ｉ＋１］に、ＩＮ［Ｙ］［ｉ］の値を追加する。続けて、図６の（Ｃ）では、幅３の移動平均を示している。たとえば、画像変換装置１００は、幅２の移動平均を格納したＴＭＰ［ｉ＋２］に、ＩＮ［Ｙ］［ｉ］の値を追加する。
【００５６】
結果、ＴＭＰ［ｉ＋２］は、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］、ＩＮ［Ｙ］［ｉ＋２］という３つの画素の平均値となる。同様に、ＴＭＰ［ｉ＋１］は、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］という３つの画素の平均値となり、ＴＭＰ［ｉ］は、ＩＮ［Ｙ］［ｉ−２］、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］という３つの画素の平均値となる。
【００５７】
同様に、画像変換装置１００は、幅４、幅５、幅６、幅７の移動平均を生成する。このように、幅の大きい移動平均は、幅の小さい移動平均を用いて求めることができる。また、幅の小さい移動平均を用いて幅の大きい移動平均を求めた時の計算量は、画素の値を順に追加していった時の計算量より少なくすることができる。たとえば、幅７の移動平均は、既に幅３の移動平均を生成していれば、４回の計算で済む。
【００５８】
以上より、図６で説明した移動平均について、ＴＭＰ［ｉ］は、ＩＮ［Ｙ］［ｉ−２］、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］という３つの画素の平均値となる。このように、図６で求めたＴＭＰ［ｉ］は、ｘ座標が同一の画素の値と、ｘ軸の負の方向にある隣の画素と、さらに隣の画素との平均値となっている。図６で説明した移動平均では、移動平均の処理を単純化するために、移動平均の幅が大きくなる都度、ｘ軸の正の方向にある隣の画素を次々に追加している。ｘ軸の正の方向にある隣の画素を次々に追加する処理は、正の方向にある隣の画素を追加し、次は負の方向にある隣の画素を追加し、という処理に比べて、処理内容が単純となる。
【００５９】
しかし、図５では、画素ＯＵＴ［Ｙ＋３］［ｉ］は、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］、という、ｘ座標が同一の画素の値と、同一の画素のｘ軸方向の両隣の画素の移動平均を追加するということを説明している。このように、画素ＯＵＴ［Ｙ＋３］［ｉ］に影響を与える画素とＴＭＰ［ｉ］に影響を与える画素が図５と図６でずれている。辻褄を合わせるため、画像変換装置１００は、ＴＭＰを画素ＯＵＴ［Ｙ＋３］に追加する場合、ＴＭＰをずらして追加する。ＴＭＰの追加の動作例を、図７にて説明する。
【００６０】
図７は、画像変換処理の動作例を示す説明図（その３）である。図７では、幅３の移動平均ＴＭＰを追加する際の例を示す。画像変換装置１００は、絞り形状テーブル３１０の幅３となるレコード４０１−３を参照して、ＴＭＰの各画素の値を、ＯＵＴ［Ｙ＋３］に追加する。このとき、画像変換装置１００は、ＴＭＰを、レコード４０１−３のｘフィールドの値となる−１画素分オフセットして、ＯＵＴ［Ｙ＋３］に追加する。たとえば、画像変換装置１００は、ＯＵＴ［Ｙ＋３］［ｉ］に、ＴＭＰ［ｉ＋１］の値を追加する。図６の説明より、ＴＭＰ［ｉ＋１］は、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］という３つの画素の平均値であったため、図５にて説明した移動平均を追加することができたことになる。
【００６１】
続けて、画像変換装置１００は、ＴＭＰの各画素の値を、ＯＵＴ［Ｙ−３］にも追加する。このように、画像変換装置１００は、ある幅の移動平均を追加する行が複数ある場合、ある幅の移動平均の結果を複数の行に追加することになるため、画素ごとに影響を与える画素を追加していく方法より計算量を少なくすることできる。次に、図８〜図１３を用いて、図５〜図７にて説明した動作を行うフローチャートについて説明する。
【００６２】
図８は、ｘ軸方向に走査する場合の画像変換処理手順の一例を示すフローチャートである。画像変換処理は、元画像をぼかし画像に変換する処理である。始めに、画像変換装置１００は、絞り形状テーブル３１０を参照して、指定された絞り形状に応じた走査方向を選択する（ステップＳ８０１）。続けて、画像変換装置１００は、初期化処理を実行する（ステップＳ８０２）。初期化処理は、走査方向に応じて処理内容の一部が変化する。ｘ軸方向に走査する場合の初期化処理の詳細については、図９にて説明する。
【００６３】
次に、画像変換装置１００は、１走査線に対する、光エネルギ値変換処理を実行する（ステップＳ８０３）。光エネルギ値変換処理は、走査方向によって処理内容が異なる。ｘ軸方向に走査する場合の光エネルギ値変換処理の詳細については、図１０にて説明する。
【００６４】
次に、画像変換装置１００は、１走査線に対する、光拡散処理を実行する（ステップＳ８０４）。光拡散処理は、走査方向によって処理内容が異なる。ｘ軸方向に走査する場合の光拡散処理の詳細については、図１１、図１２にて説明する。
【００６５】
続けて、画像変換装置１００は、全ての走査線に対して処理したか否かを判断する（ステップＳ８０５）。ステップＳ８０５の具体的な処理は、走査方向によって異なる。具体的な処理内容は、それぞれ図１２、図２１、図２６にて説明する。まだ処理していない走査線がある場合（ステップＳ８０５：Ｎｏ）、画像変換装置１００は、ステップＳ８０３の処理に移行する。全ての走査線に対して処理した場合（ステップＳ８０５：Ｙｅｓ）、画像変換装置１００は、ＲＧＢ値変換処理を実行する（ステップＳ８０６）。ＲＧＢ値変換処理については、図１３にて説明する。
【００６６】
ステップＳ８０６の実行終了後、画像変換装置１００は、画像変換処理を終了する。画像変換処理を実行することにより、画像変換装置１００は、元画像からぼかし画像を変換することができる。
【００６７】
図９は、ｘ軸方向に走査する場合の初期化処理手順の一例を示すフローチャートである。ｘ軸方向に走査する場合の初期化処理は、ｘ軸方向に走査する場合に、画像変換処理で用いる変数、配列、構造体を初期化する処理である。
【００６８】
なお、図９に示すフローチャートで用いる元画像は、グレースケールでもよいし、ＲＧＢ３つの数値を持つ構造体でもよい。元画像がＲＧＢ３つの数値を持つ場合、画像変換装置１００は、元画像となるＩＮやぼかし画像となるＯＵＴへの処理、後述する光エネルギ値ＥＮＧや一時記憶領域ＬＩＮＥ１、ＬＩＮＥ２への処理をＲＧＢ合わせて三回行ってもよい。
【００６９】
始めに、画像変換装置１００は、元画像の各画素をＩＮ［Ｈ］［Ｗ］という二次元配列に格納する（ステップＳ９０１）。次に、画像変換装置１００は、ぼかし画像の各画素を格納する二次元配列として、ＯＵＴ［Ｈ］［Ｗ］を確保する（ステップＳ９０２）。続けて、画像変換装置１００は、絞り形状テーブル３１０の各レコードの値を、ＴＢＬ［Ｓ］という構造体の配列に格納する（ステップＳ９０３）。Ｓは、絞り形状テーブル３１０のレコード数が格納された定数である。
【００７０】
具体的に、構造体ＴＢＬは、ｘ、ｙ、ｗという３つの要素を持つ。また、画像変換装置１００は、Ｗ＋ＴＢＬ［Ｓ−１］．ｗの値をＷ２という変数に格納する（ステップＳ９０４）。絞り形状テーブル３１０には、ｗの小さい順に格納されているため、任意の整数Ｎ（Ｎ＜Ｓ）に対し常にＴＢＬ［Ｎ−１］．ｗ≦ＴＢＬ［Ｎ］．ｗが成り立つ。したがって、ＴＢＬ［Ｓ−１］．ｗは、ｗの最大値となる。
【００７１】
次に、画像変換装置１００は、光エネルギ値を記憶する二次元配列ＥＮＧ［Ｈ］［Ｗ］を０で初期化する（ステップＳ９０５）。同様に、画像変換装置１００は、各画素に光エネルギ値が追加された回数を示す二次元配列ＣＮＴ［Ｈ］［Ｗ］を０で初期化する（ステップＳ９０６）。続けて、画像変換装置１００は、最初に処理する画素列として、Ｙに０を格納する（ステップＳ９０７）。ステップＳ９０７の実行終了後、画像変換装置１００は、ｘ軸方向に走査する場合の初期化処理を終了する。ｘ軸方向に走査する場合の初期化処理を実行することにより、画像変換装置１００は、画像変換処理で用いる変数、配列、構造体を初期化できる。
【００７２】
図１０は、ｘ軸方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。ｘ軸方向に走査する場合の光エネルギ値変換処理は、ｘ軸方向に走査する場合に、１走査線分となる一行分の画素の値について、ＲＧＢ値から光エネルギ値に変換する処理である。
【００７３】
始めに、画像変換装置１００は、Ｘを０に初期化する（ステップＳ１００１）。次に、画像変換装置１００は、ＩＮ［Ｙ］［Ｘ］の光エネルギ値を算出し、光エネルギ値を変数ｅに格納する（ステップＳ１００２）。具体的な光エネルギ値の算出式として、たとえば、画像変換装置１００は、下記（１）式を用いて、ＲＧＢ値から光エネルギ値を算出する。
【００７４】
光エネルギ値＝ｅｘｐ（ＩＮ［Ｙ］［Ｘ］／ｋ−ｂ）  …（１）
【００７５】
ただし、ｋとｂは定数である。たとえば、ｋ＝４０、ｂ＝−４．５となる。ｅｘｐは、自然体数の底を引数でべき乗した値を返す関数である。光エネルギ値は何度も利用するため、大きさがＷとなるＬＩＮＥ１と、大きさがＷ２となるＬＩＮＥ２という配列を確保する。具体的に、画像変換装置１００は、ｅの値を一時記憶領域となるＬＩＮＥ１［Ｘ］とＬＩＮＥ２［Ｘ］に格納する（ステップＳ１００３）。ＬＩＮＥ１［Ｘ］とＬＩＮＥ２［Ｘ］には、幅１の移動平均が格納されたことになる。以降の処理にて、ＬＩＮＥ２は、幅２、幅３、…、の移動平均を格納していくことになり、ＬＩＮＥ１は、幅１の移動平均を持ち続けることになる。
【００７６】
続けて、画像変換装置１００は、大きさＷ２の配列ＬＣＮＴのＬＣＮＴ［Ｘ］に１を格納する（ステップＳ１００４）。ＬＣＮＴは、ＬＩＮＥ２の各要素が何回足されたかを示す変数である。次に、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１００５）。続けて、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１００６）。ＸがＷより小さい場合（ステップＳ１００６：Ｙｅｓ）、画像変換装置１００は、ステップＳ１００２の処理に移行する。ＸがＷ以上である場合（ステップＳ１００６：Ｎｏ）、ＬＩＮＥ２とＬＣＮＴはＷより大きなＷ２の大きさを持つため、画像変換装置１００は、ＬＩＮＥ２［Ｘ］に０を格納する（ステップＳ１００７）。さらに、画像変換装置１００は、ＬＣＮＴ［Ｘ］に０を格納する（ステップＳ１００８）。
【００７７】
次に、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１００９）。続けて、画像変換装置１００は、ＸがＷ２より小さいか否かを判断する（ステップＳ１０１０）。ＸがＷ２より小さい場合（ステップＳ１０１０：Ｙｅｓ）、画像変換装置１００は、ステップＳ１００７の処理に移行する。ＸがＷ２以上である場合（ステップＳ１０１０：Ｎｏ）、画像変換装置１００は、ｘ軸方向に走査する場合の光エネルギ値変換処理を終了する。ｘ軸方向に走査する場合の光エネルギ値変換処理を実行することにより、画像変換装置１００は、１走査線分となる一行分の画素の光エネルギ値を得ることができる。
【００７８】
図１１は、ｘ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。ｘ軸方向に走査する場合の光拡散処理は、ｘ軸方向に走査する場合に、１走査線分となる一行分の各画素の光エネルギ値を拡散していく処理である。具体的に、図１１に示すフローチャートでは、移動平均を求めることにより、一行分の各画素の光エネルギ値をｘ軸方向に拡散する処理であり、図１１に示すフローチャートでは、各画素の光エネルギ値をｙ軸方向に拡散する処理である。
【００７９】
画像変換装置１００は、移動平均の幅を示すＺに１を格納する（ステップＳ１１０１）。次に、画像変換装置１００は、絞り形状テーブル３１０の処理中のレコードのインデックスを示すＩに０を格納する（ステップＳ１１０２）。Ｉを指定することにより、画像変換装置１００は、元画像ＩＮから第１の画素列を抽出することになる。ステップＳ１１０２の実行後、または後述する図１２のステップＳ１２１１：Ｙｅｓとなった後、画像変換装置１００は、Ｘに０を格納する（ステップＳ１１０３）。次に、画像変換装置１００は、ＬＩＮＥ２に、追加する画素のオフセット値を示すＪにＺの値を格納する（ステップＳ１１０４）。
【００８０】
まずぶれ量が増加したかを確認するため、画像変換装置１００は、ＪがＴＢＬ［Ｉ］．ｗより小さいか否かを判断する（ステップＳ１１０５）。ＪがＴＢＬ［Ｉ］．ｗより小さい場合（ステップＳ１１０５：Ｙｅｓ）、画像変換装置１００は、Ｊの値をインクリメントする（ステップＳ１１０６）。Ｊの値が更新されたことにより、画像変換装置１００は、Ｘ＋Ｊで指定されるＩＮ［Ｙ］［Ｘ＋Ｊ］を、第１の画素や第２の画素に影響を与える拡散元画素として特定している。したがって、画像変換装置１００は、ＬＩＮＥ２［Ｘ＋Ｊ］とＬＩＮＥ１［Ｘ］との加算結果を、ＬＩＮＥ２［Ｘ＋Ｊ］に格納する（ステップＳ１１０７）。続けて、画像変換装置１００は、ＬＣＮＴ［Ｘ＋Ｊ］の値をインクリメントする（ステップＳ１１０８）。次に、画像変換装置１００は、ステップＳ１１０５の処理に移行する。
【００８１】
ＪがＴＢＬ［Ｉ］．ｗ以上である場合（ステップＳ１１０５：Ｎｏ）、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１１０９）。次に、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１１１０）。ＸがＷより小さい場合（ステップＳ１１１０：Ｙｅｓ）、画像変換装置１００は、ステップＳ１１０４の処理に移行する。ＸがＷ以上である場合（ステップＳ１１１０：Ｎｏ）、画像変換装置１００は、ＺにＴＢＬ［Ｉ］．ｗの値を格納する（ステップＳ１１１１）。続けて、画像変換装置１００は、図１２に示すステップＳ１２０１の処理に移行する。
【００８２】
図１２は、ｘ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。ＬＩＮＥ２を縦方向にどれだけオフセットして加算するかは  ＴＢＬ［Ｉ］．ｙ  にて示されるため、画像変換装置１００は、加算すべき行を示すＹ２に、ＹとＴＢＬ［Ｉ］．ｙとの加算結果を格納する（ステップＳ１２０１）。次に、画像変換装置１００は、Ｙ２が０未満であるか、またはＹ２がＨ以上であるか否かを判断する（ステップＳ１２０２）。ステップＳ１２０２の処理は、Ｙ２が画面内にあるかを確認する処理となる。また、図１２のステップＳ１２０２で用いた「｜｜」は、論理和を算出する演算子である。
【００８３】
Ｙ２が０以上であり、かつＹ２がＨ未満である場合（ステップＳ１２０２：Ｎｏ）、画像変換装置１００は、Ｘに０を格納する（ステップＳ１２０３）。次に、画像変換装置１００は、参照する画素のｘ座標の位置を示すＸ２に、ＸとＴＢＬ［Ｉ］．ｘの加算結果を格納する（ステップＳ１２０４）。ＴＢＬ［Ｉ］．ｘは、ぶれ開始位置となる左端の画素のｘ行における位置が格納されているため、画像変換装置１００は、左端の画素からの画素数を取得することになる。続けて、画像変換装置１００は、Ｘ２が０より小さいか、またはＸ２がＷ２以上であるか否かを判断する（ステップＳ１２０５）。ステップＳ１２０５の処理は、Ｘ２が画面内にあるかを確認する処理となる。
【００８４】
Ｘ２が０以上であり、かつＸ２がＷ２未満である場合（ステップＳ１２０５：Ｎｏ）、画像変換装置１００は、ＥＮＧ［Ｙ２］［Ｘ］とＬＩＮＥ２［Ｘ２］の加算結果を、ＥＮＧ［Ｙ２］［Ｘ］に格納する（ステップＳ１２０６）。さらに、画像変換装置１００は、ＣＮＴ［Ｙ２］［Ｘ］とＬＣＮＴ［Ｘ２］の加算結果を、ＣＮＴ［Ｙ２］［Ｘ］に格納する（ステップＳ１２０７）。
【００８５】
ステップＳ１２０７の処理後か、Ｙ２が０未満であるかまたはＹ２がＨ以上である場合か（ステップＳ１２０２：Ｙｅｓ）、Ｘ２が０より小さいかまたはＸ２がＷ２以上である場合（ステップＳ１２０５：Ｙｅｓ）、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１２０８）。続けて、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１２０９）。ＸがＷより小さい場合（ステップＳ１２０９：Ｙｅｓ）、画像変換装置１００は、ステップＳ１２０４の処理に移行する。
【００８６】
ＸがＷ以上である場合（ステップＳ１２０９：Ｎｏ）、画像変換装置１００は、Ｉの値をインクリメントする（ステップＳ１２１０）。Ｉの値をインクリメントすることにより、画像変換装置１００は、元画像ＩＮから、絞り形状と連続して重なる画素数が第１の画素列以上の第２の画素列を抽出することになる。次に、画像変換装置１００は、ＩがＳより小さいか否かを判断する（ステップＳ１２１１）。ＩがＳより小さい場合（ステップＳ１２１１：Ｙｅｓ）、画像変換装置１００は、図１１のステップＳ１１０３に移行する。ＩがＳ以上である場合（ステップＳ１２１１：Ｎｏ）、画像変換装置１００は、Ｙの値をインクリメントする（ステップＳ１２１２）。ステップＳ１２１２の処理後、画像変換装置１００は、ｘ軸方向に走査する場合の光拡散処理を終了する。
【００８７】
ｘ軸方向に走査する場合の光拡散処理の終了後、画像変換装置１００は、ステップＳ８０５の処理となる、ＹがＨ未満であるか否かを判断することにより、「全ての走査線に対して処理したか」を判断する。ＹがＨ未満であれば、まだ処理していない走査線があることになり、画像変換装置１００は、ステップＳ８０５：Ｎｏの処理を実行する。また、ＹがＨ以上であれば、全ての走査線に対して処理したことになり、ステップＳ８０５：Ｙｅｓの処理を実行する。
【００８８】
ｘ軸方向に走査する場合の光拡散処理を実行することにより、画像変換装置１００は、１走査線分となる一行分の各画素の光エネルギ値を、ｘ方向とｙ方向に拡散させることができる。
【００８９】
図１３は、ＲＧＢ値変換処理手順の一例を示すフローチャートである。ＲＧＢ値変換処理は、光エネルギ値からＲＧＢ値に変換する処理である。なお、ＲＧＢ値変換処理に至った段階にて、光エネルギ値ＥＮＧと、ＥＮＧの各要素が何回足された値かを示す情報ＣＮＴとが完成されている。
【００９０】
始めに、画像変換装置１００は、Ｙに０を格納する（ステップＳ１３０１）。次に、画像変換装置１００は、Ｘに０を格納する（ステップＳ１３０２）。次に、画像変換装置１００は、ＥＮＧ［Ｙ］［Ｘ］をＣＮＴ［Ｙ］［Ｘ］で除算した除算結果を、ｅに格納する（ステップＳ１３０３）。ステップＳ１３０３の処理により、追加された光エネルギ値の平均を求めることができる。続けて、画像変換装置１００は、ｅのＲＧＢ値をＯＵＴ［Ｙ］［Ｘ］に格納する（ステップＳ１３０４）。具体的なＲＧＢ値の算出式として、たとえば、画像変換装置１００は、下記（２）式を用いて、光エネルギ値からＲＧＢ値を算出する。
【００９１】
ＲＧＢ値＝ｋ（ｂ＋ｌｏｇ（ｅ））  …（２）
【００９２】
ただし、ｋとｂは、（１）式と同一の定数である。ｌｏｇは、引数の自然対数を返す関数である。次に、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１３０５）。続けて、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１３０６）。ＸがＷより小さい場合（ステップＳ１３０６：Ｙｅｓ）、画像変換装置１００は、ステップＳ１３０３の処理に移行する。ＸがＷ以上である場合（ステップＳ１３０６：Ｎｏ）、画像変換装置１００は、Ｙの値をインクリメントする（ステップＳ１３０７）。次に、画像変換装置１００は、ＹがＨより小さい否かを判断する（ステップＳ１３０８）。ＹがＨより小さい場合（ステップＳ１３０８：Ｙｅｓ）、画像変換装置１００は、ステップＳ１３０２の処理に移行する。ＹがＨ以上である場合（ステップＳ１３０８：Ｎｏ）、画像変換装置１００は、ＲＧＢ値変換処理を終了する。ＲＧＢ値変換処理を実行することにより、画像変換装置１００は、ぼかし画像を得ることができる。
【００９３】
以上、図４〜図１３では、絞り形状テーブル３１０を用いて画像変換処理を行う例について説明している。画像変換装置１００は、絞り形状テーブル３１０を用いずに画像変換処理を実行することもできる。以下、図１４〜図１６を用いて、絞り形状テーブル３１０を用いない場合の画像変換処理について説明する。
【００９４】
図１４は、絞り形状テーブルを用いない場合の画像変換処理の動作例を示す説明図である。図１４の（Ａ）では、絞り形状１４００が６角形となる場合の例を示している。ぶれ量ｗは、ＸとＹとの関係によって求められる。絞り形状１４００の一辺をＳとする。したがって、ｗの最大値は、（√３）・Ｓとなる。ここで、（√ｘ）は、ｘの正の平方根を示す。また、斜辺１４０１のｘとｙの関係式は、ｙ＝−（√３）／３ｘ＋Ｓとなり、斜辺１４０２のｘとｙの関係式は、ｙ＝（√３）／３ｘ＋Ｓとなる。ＹがＳ／２以上である場合、ｘは、−（√３）（Ｓ−ｙ）となる。また、ｙが０より大きくＳ／２未満の場合、ｘは、（√３）／２・Ｓとなる。
【００９５】
図１４の（Ｂ）では、ぶれ量を格納する一時記憶領域ＬＩＮＥ１の内容を示している。ｄ＝（√３）・（Ｓ−ｙ）とすると、ｗは、２ｄ＋１＝１−２ｘの大きさとなる。ＬＩＮＥ１［０］には、ｘ＝−ｄにて示す画素の値が格納される。
【００９６】
次に、絞り形状テーブル３１０を用いない場合の画像変換処理のフローチャートについて説明する。絞り形状テーブル３１０を用いない場合の画像変換処理は、図８〜図１０、図１２で示したフローチャートの部分は同一となるため、説明を省略する。したがって、図１５、図１６を用いて、絞り形状テーブル３１０を用いない場合の光拡散処理のフローチャートについて説明する。
【００９７】
図１５は、絞り形状テーブルを用いない場合の光拡散処理手順の一例を示すフローチャート（その１）である。図１５に示すステップＳ１５１０〜ステップＳ１５１３は、図１１に示したステップＳ１１０６〜ステップＳ１１０９と同一の処理であるため、説明を省略する。
【００９８】
始めに、画像変換装置１００は、移動平均の幅を示すＺに１を格納する（ステップＳ１５０１）。次に、画像変換装置１００は、絞り形状内の処理する対象行を示す変数Ｉに２Ｓの算出結果を格納する（ステップＳ１５０２）。Ｉが偶数となる場合、処理行がＳ／２行より上であり、Ｉが奇数である場合、処理行が（Ｓ＋１）／２行以下を示すものとする。
【００９９】
ステップＳ１５０２の処理が終了した場合、または図１６にて後述するステップＳ１６１１の処理が終了した場合、画像変換装置１００は、Ｉが奇数か否かを判断する（ステップＳ１５０３）。Ｉが偶数である場合（ステップＳ１５０３：Ｎｏ）、画像変換装置１００は、今の行と影響を与える行の相対位置を示す変数ｙにＩ／２の算出結果を格納する（ステップＳ１５０４）。次に、画像変換装置１００は、ｙがＳ／２以下か否かを判断する（ステップＳ１５０５）。ｙがＳ／２以下である場合（ステップＳ１５０５：Ｙｅｓ）、画像変換装置１００は、ぶれ開始位置を示すｘに−（√３）（Ｓ−ｙ）の算出結果を格納する（ステップＳ１５０６）。続けて、画像変換装置１００は、ぶれ量となるｗに、１−２ｘの算出結果を格納する（ステップＳ１５０７）。
【０１００】
次に、画像変換装置１００は、ＪにＺの値を格納する（ステップＳ１５０８）。続けて、画像変換装置１００は、Ｊがｗより小さいか否かを判断する（ステップＳ１５０９）。Ｊがｗより小さい場合（ステップＳ１５０９：Ｙｅｓ）、画像変換装置１００は、ステップＳ１５１０の処理に移行する。Ｊがｗ以上である場合（ステップＳ１５０９：Ｎｏ）、画像変換装置１００は、ステップＳ１５１３の処理に移行する。
【０１０１】
ステップＳ１５１３の処理終了後、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１５１４）。ＸがＷより小さい場合（ステップＳ１５１４：Ｙｅｓ）、画像変換装置１００は、ステップＳ１５０８の処理に移行する。ＸがＷ以上である場合（ステップＳ１５１４：Ｎｏ）、画像変換装置１００は、Ｚにｗの値を格納する（ステップＳ１５１５）。Ｉが奇数である場合（ステップＳ１５０３：Ｙｅｓ）、画像変換装置１００は、ｙに−ｙの値を格納する（ステップＳ１５１６）。
【０１０２】
ステップＳ１５１５、またはステップＳ１５１６の終了後か、ｙがＳ／２以下でない場合（ステップＳ１５０５：Ｎｏ）、画像変換装置１００は、図１６に示すステップＳ１６０１の処理に移行する。
【０１０３】
図１６は、絞り形状テーブルを用いない場合の光拡散処理手順の一例を示すフローチャート（その２）である。図１６に示す各ステップのうちの、ステップＳ１６０１、ステップＳ１６０４、ステップＳ１６１０、ステップＳ１６１１が、図１２で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理から置き換わっている。他のステップについては図１２で説明した処理と同一であるため、説明を省略する。
【０１０４】
始めに、画像変換装置１００は、Ｙ２にＹとｙの加算結果を格納する（ステップＳ１６０１）。ステップＳ１６０３の処理終了後、画像変換装置１００は、Ｘ２にＸとｘの加算結果を格納する（ステップＳ１６０４）。ステップＳ１６０９：Ｎｏとなった場合、画像変換装置１００は、Ｉの値をデクリメントする（ステップＳ１６１０）。続けて、画像変換装置１００は、Ｉが０以上であるか否かを判断する（ステップＳ１６１１）。Ｉが０以上である場合（ステップＳ１６１１：Ｙｅｓ）、画像変換装置１００は、図１５に示したステップＳ１５０３の処理に移行する。Ｉが０未満である場合（ステップＳ１６１１：Ｎｏ）、画像変換装置１００は、ステップＳ１６１２の処理に移行する。
【０１０５】
（ｙ軸方向に走査する例）
以上、図４〜図１６では、ｘ軸方向に走査する場合の画像生成処理について説明した。画像変換装置１００は、ｙ軸方向に走査して、画像変換処理を行ってもよい。以下、図１７〜図２１を用いて、ｙ軸方向に走査する場合の画像変換処理について説明する。
【０１０６】
図１７は、絞り形状の第２の例と絞り形状テーブルの記憶内容の第２の例を示す説明図である。図１７の（Ａ）では、ｘｙ平面上での絞り形状１７００を示している。図１７に示すように、絞り形状１７００は、ハート型の形状をしている。絞り形状１７００は、ｘ軸方向に走査すると、複数の領域に分かれることになる。図１７の（Ｂ）では、絞り形状１７００を、ｘ軸方向に走査する場合の絞り形状テーブル３１０＿ｘの記憶内容の例を示している。絞り形状テーブル３１０＿ｘは、レコード１７０１−１〜レコード１７０１−１１を記憶している。また、絞り形状テーブル３１０＿ｘは、走査方向としてｘ軸方向を関連付けて記憶している。ｘ軸方向に走査する場合、ｙ＝３における走査線と、ｙ＝４における走査線が、複数の部分に分かれることになる。このように走査線が複数に分かれても、図８〜図１３にて示したフローチャートで実行することができる。
【０１０７】
また、図１７の（Ｃ）では、絞り形状１７００を、ｙ軸方向に走査する場合の絞り形状テーブル３１０＿ｙの記憶内容の例を示している。絞り形状テーブル３１０＿ｙは、レコード１７０２−１〜レコード１７０２−９を記憶している。また、絞り形状テーブル３１０＿ｙは、走査方向としてｙ軸方向を関連付けて記憶している。ｙ軸方向に走査する場合、走査線が複数の部分に分かれることがなくなる。したがって、絞り形状テーブル３１０＿ｙのレコード数は、絞り形状テーブル３１０＿ｘより少なくなる。レコード数が少ないと、ループの回数が少なくなるため、処理量を減少することができる。
【０１０８】
次に、ｙ軸方向に走査する場合の画像変換処理のフローチャートについて説明する。ｙ軸方向に走査する場合の画像変換処理は、図１３で示したＲＧＢ値変換処理のフローチャートの部分は同一となるため、説明を省略する。以下、図１８〜図２１において、ｙ軸方向に走査する場合の、初期化処理、光エネルギ値変換処理、光拡散処理について説明する。
【０１０９】
図１８は、ｙ軸方向に走査する場合の初期化処理手順の一例を示すフローチャートである。ｙ軸方向に走査する場合の初期化処理は、ｙ軸方向に走査する場合に、画像変換処理で用いる変数、配列、構造体を初期化する処理である。また、図１８で示すステップＳ１８０４、ステップＳ１８０７が、図９で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理から置き換わっている。他のステップについては図９で説明した処理と同一であるため、説明を省略する。
【０１１０】
ステップＳ１８０３の処理終了後、画像変換装置１００は、ＨとＴＢＬ［Ｓ−１］．ｗの加算結果を、Ｈ２という変数に格納する（ステップＳ１８０４）。また、ステップＳ１８０６の処理終了後、画像変換装置１００は、最初に処理する画素列として、Ｘに０を格納する（ステップＳ１８０７）。
【０１１１】
図１９は、ｙ軸方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。ｙ軸方向に走査する場合の光エネルギ値変換処理は、ｙ軸方向に走査する場合に、１走査線分となる一列分の画素の値について、ＲＧＢ値から光エネルギ値に変換する処理である。また、図１９で示す各ステップのうち、ステップＳ１９０１、ステップＳ１９０３〜ステップＳ１９１０は、図１０で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理の「Ｘ」が「Ｙ」に置き換わっている。さらに、ステップＳ１９０６は、ステップＳ１００６の「Ｗ」が「Ｈ」に置き換わっている。さらに、ステップＳ１９１０は、ステップＳ１０１０の「Ｗ２」が「Ｈ２」に置き換わっている。前述以外の変更点はないため、各ステップの説明を省略する。
【０１１２】
図２０は、ｙ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。ｙ軸方向に走査する場合の光拡散処理は、ｙ軸方向に走査する場合に、１走査線分となる一列分の各画素の光エネルギ値を拡散していく処理である。また、図２０で示す各ステップのうち、ステップＳ２００３、ステップＳ２００７〜ステップＳ２０１０は、図１１で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理の「Ｘ」が「Ｙ」に置き換わっている。さらに、ステップＳ２０１０は、ステップＳ１１１０の「Ｗ」が「Ｈ」に置き換わっている。前述以外の変更点はないため、各ステップの説明を省略する。
【０１１３】
図２１は、ｙ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。図２１で示す各ステップのうち、ステップＳ２１０３、ステップＳ２１０８、ステップＳ２１０９、ステップＳ２１１２は、図１２で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理の「Ｘ」が「Ｙ」に置き換わっている。さらに、ステップＳ２１０９は、ステップＳ１２０９の「Ｗ」が「Ｈ」に置き換わっている。さらに、ステップＳ２１０１、ステップＳ２１０２、ステップＳ２１０４、ステップＳ２１０５について、図１２で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理から変更しているため、説明を行う。ステップＳ２１０６、ステップＳ２１０７については、ステップＳ１２０６、ステップＳ１２０７と同一の処理であるため、説明を省略する。
【０１１４】
始めに、画像変換装置１００は、Ｘ２に、ＸとＴＢＬ［Ｉ］．ｘの加算結果を格納する（ステップＳ２１０１）。次に、画像変換装置１００は、Ｘ２が０未満であるか、またはＸ２がＷ以上であるか否かを判断する（ステップＳ２１０２）。Ｘ２が０以上であり、かつＸ２がＷ未満である場合（ステップＳ２１０２：Ｎｏ）、画像変換装置１００は、ステップＳ２１０３の処理に移行する。Ｘ２が０未満であるかまたはＸ２がＷ以上である場合（ステップＳ２１０２：Ｙｅｓ）、画像変換装置１００は、ステップＳ２１０８の処理に移行する。
【０１１５】
ステップＳ２１０３の実行終了後、画像変換装置１００は、Ｙ２に、ＹとＴＢＬ［Ｉ］．ｙの加算結果を格納する（ステップＳ２１０４）。続けて、画像変換装置１００は、ＸＹ２が０より小さいか、またはＹ２がＨ２以上であるか否かを判断する（ステップＳ２１０５）。Ｙ２が０以上であり、かつＹ２がＨ２未満である場合（ステップＳ２１０５：Ｎｏ）、画像変換装置１００は、ステップＳ２１０６の処理に移行する。また、Ｙ２が０より小さいかまたはＹ２がＨ２以上である場合（ステップＳ２１０５：Ｙｅｓ）、ステップＳ２１０８の処理に移行する。
【０１１６】
また、ｙ軸方向に走査する場合の光拡散処理の終了後、画像変換装置１００は、ステップＳ８０５の処理となる、ＸがＷ未満であるか否かを判断することにより、「全ての走査線に対して処理したか」を判断する。ＸがＷ未満であれば、まだ処理していない走査線があることになり、画像変換装置１００は、ステップＳ８０５：Ｎｏの処理を実行する。また、ＸがＷ以上であれば、全ての走査線に対して処理したことになり、ステップＳ８０５：Ｙｅｓの処理を実行する。
【０１１７】
（斜め方向に走査する例）
以上、図１７〜図２１では、ｙ軸方向に走査する場合の画像生成処理について説明した。画像変換装置１００は、ｘ軸やｙ軸方向とは斜めの走査を行って、画像変換処理を行ってもよい。以下、図２２〜図２９を用いて、斜め方向の一例として、Ｙ＝−Ｘ方向に走査する場合の画像変換処理について説明する。なお、図２２〜図２９での説明では、説明の簡略化のため、Ｈ＞Ｗであることを前提とする。
【０１１８】
図２２は、Ｙ＝−Ｘ方向に走査する場合の画像変換処理の動作例を示す説明図である。図２２の（Ａ）は、横方向および縦方向よりＹ＝−Ｘ方向に走査した方がよい絞り形状２２００を示している。図２２には図示していないが、絞り形状２２００を記憶している絞り形状テーブル３１０は、走査方向としてＹ＝−Ｘ方向を関連付けて記憶している。図２２の（Ｂ）は、斜め方向に走査する場合の変数が示す位置を示している。Ｐは、現在の走査方向の画素列に含まれる画素数を示す。Ｑは、画素列内の対象となる画素の画素数を示す。Ｒは、画素列のインデックスを示している。
【０１１９】
図２２の（Ｃ）は、元画像ＩＮが、Ｗ＝４、Ｈ＝６とした場合の、各画素のＲとＱの値を示している。たとえば、ＩＮ［４］［１］は、Ｒ＝６であり、Ｑ＝１となる。また、画素列Ｒ＝６となる画素は、ＩＮ［５］［０］、ＩＮ［４］［１］、ＩＮ［３］［２］、ＩＮ［２］［３］の４つであるから、Ｐは４となる。
【０１２０】
図２２の（Ｄ）は、Ｒと、加算すべき画素列のインデックスを示すＲ２と、オフセットＲｏの位置を示している。また、図２２の（Ｅ）は、元画像ＩＮが、Ｗ＝４、Ｈ＝６とした場合の、Ｒ、Ｒ２、Ｒｏの関係を示している。Ｒ＝３、Ｒ２＝４である場合、Ｒｏは、−１となる。
【０１２１】
次に、Ｙ＝−Ｘ方向に走査する場合の画像変換処理のフローチャートについて説明する。Ｙ＝−Ｘ方向に走査する場合の画像変換処理は、図１３で示したＲＧＢ値変換処理のフローチャートの部分は同一となるため、説明を省略する。以下、図２３〜図２６において、Ｙ＝−Ｘ方向に走査する場合の、初期化処理、光エネルギ値変換処理、光拡散処理について説明する。
【０１２２】
図２３は、Ｙ＝−Ｘ方向に走査する場合の初期化処理手順の一例を示すフローチャートである。Ｙ＝−Ｘ方向に走査する場合の初期化処理は、Ｙ＝−Ｘ方向に走査する場合に、画像変換処理で用いる変数、配列、構造体を初期化する処理である。また、図２３で示すステップＳ２３０７が、図９で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理から置き換わっている。他のステップについては図９で説明した処理と同一であるため、説明を省略する。ステップＳ２３０６の処理終了後、画像変換装置１００は、Ｒに０を格納する（ステップＳ２３０７）。
【０１２３】
図２４は、Ｙ＝−Ｘ方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。Ｙ＝−Ｘ方向に走査する場合の光エネルギ値変換処理は、Ｙ＝−Ｘ方向に走査する場合に、１走査線分となる画素群の各画素の値について、ＲＧＢ値から光エネルギ値に変換する処理である。また、図２４で示す各ステップのうち、ステップＳ２４０５〜ステップＳ２４１２は、図１０のステップＳ１００３〜ステップＳ１０１０のうちの、ステップ番号の下２けたが２小さい番号の処理の「Ｘ」が「Ｑ」に置き換わっている。さらに、ステップＳ２４０８は、ステップＳ１００６の「Ｗ」が「Ｐ」に置き換わっている。
【０１２４】
始めに、画像変換装置１００は、Ｒを引数としてＰ取得処理を実行する（ステップＳ２４０１）。Ｐ取得処理の詳細は、図２７にて後述する。次に、画像変換装置１００は、Ｑに０を格納する（ステップＳ２４０２）。続けて、画像変換装置１００は、Ｒ、Ｑを引数として、Ｘ・Ｙ取得処理を実行する（ステップＳ２４０３）。
【０１２５】
図２５は、Ｙ＝−Ｘ方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。Ｙ＝−Ｘ方向に走査する場合の光拡散処理は、Ｙ＝−Ｘ方向に走査する場合に、１走査線分となる画素群の各画素の光エネルギ値を拡散していく処理である。また、また、図２５で示す各ステップのうち、ステップＳ２５０３、ステップＳ２５０７〜ステップＳ２５１０は、図１１で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理の「Ｘ」が「Ｑ」に置き換わっている。さらに、ステップＳ２５１０は、ステップＳ１１１０の「Ｗ」が「Ｐ」に置き換わっている。前述以外の変更点はないため、各ステップの説明を省略する。
【０１２６】
図２６は、Ｙ＝−Ｘ方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。図２６で示す各ステップのうち、ステップＳ２６１０、ステップＳ２６１１は、図１２で説明したステップＳ１２０８、ステップＳ１２０９の処理の「Ｘ」が「Ｑ」に置き換わっている。さらに、ステップＳ２６１４は、ステップＳ１２１２の「Ｙ」が「Ｒ」に置き換わっている。ステップＳ２６０７〜ステップＳ２６０９、ステップＳ２６１３の処理は、図１２で示したステップＳ１２０５〜ステップＳ１２０７、ステップＳ１２１１の処理と同一であるため、説明を省略する。以下、ステップＳ２６０１〜ステップＳ２６０６について、説明を行う。
【０１２７】
ステップＳ２５１１の実行終了後、画像変換装置１００は、ＲとＴＢＬ［Ｉ］．ｙとの加算結果をＲ２に格納する（ステップＳ２６０１）。次に、画像変換装置１００は、Ｒ、Ｒ２を引数としてＲｏ取得処理を実行する（ステップＳ２６０２）。Ｒｏ取得処理の詳細は、図２９にて説明する。続けて、画像変換装置１００は、Ｑに０を格納する（ステップＳ２６０３）。次に、画像変換装置１００は、ＱとＴＢＬ［Ｉ］．ｘとＲｏとの加算結果を、Ｑ２に格納する（ステップＳ２６０４）。続けて、画像変換装置１００は、Ｒ２、Ｑ２を引数としてＸ・Ｙ取得処理を実行する（ステップＳ２６０５）。Ｒ２、Ｑ２を引数としてＸ・Ｙ取得処理を実行することにより、画像変換装置１００は、Ｘ２、Ｙ２を取得できる。
【０１２８】
次に、画像変換装置１００は、Ｙ２が０より小さいか、またはＹ２がＨ以上か否かを判断する（ステップＳ２６０６）。Ｙ２が０以上であり、かつＹ２がＨ未満である場合（ステップＳ２６０６：Ｎｏ）、画像変換装置１００は、ステップＳ２６０７の処理に移行する。Ｙ２が０より小さいか、またはＹ２がＨ以上である場合（ステップＳ２６０６：Ｙｅｓ）、画像変換装置１００は、ステップＳ２６１０の処理に移行する。
【０１２９】
また、Ｙ＝−Ｘ方向に走査する場合の光拡散処理の終了後、画像変換装置１００は、ステップＳ８０５の処理となる、ＲがＨとＷの加算結果未満であるか否かを判断することにより、「全ての走査線に対して処理したか」を判断する。ＲがＨとＷの加算結果未満であれば、まだ処理していない走査線があることになり、画像変換装置１００は、ステップＳ８０５：Ｎｏの処理を実行する。また、ＲがＨとＷの加算結果以上であれば、全ての走査線に対して処理したことになり、ステップＳ８０５：Ｙｅｓの処理を実行する。
【０１３０】
図２７は、Ｐ取得処理手順の一例を示すフローチャートである。Ｐ取得処理は、Ｒを引数として、Ｐの値を出力する処理である。画像変換装置１００は、ＲがＷより小さいか否かを判断する（ステップＳ２７０１）。ＲがＷより小さい場合（ステップＳ２７０１：Ｙｅｓ）、画像変換装置１００は、ＰにＲの値を格納する（ステップＳ２７０２）。ＲがＷ以上である場合（ステップＳ２７０１：Ｎｏ）、続けて、画像変換装置１００は、ＲがＨより大きいか否かを判断する（ステップＳ２７０３）。ＲがＨ以下である場合（ステップＳ２７０３：Ｎｏ）、画像変換装置１００は、ＰにＷの値を格納する（ステップＳ２７０４）。ＲがＨより大きい場合（ステップＳ２７０３：Ｙｅｓ）、画像変換装置１００は、Ｐに、ＷとＨの加算結果に、Ｒを引いた結果を格納する（ステップＳ２７０５）。
【０１３１】
ステップＳ２７０２の処理か、ステップＳ２７０４の処理か、ステップＳ２７０５の処理かのいずれかを実行した後、画像変換装置１００は、Ｐ取得処理を終了する。Ｐ取得処理を実行することにより、画像変換装置１００は、Ｐの値を取得することができる。
【０１３２】
図２８は、Ｘ・Ｙ取得処理手順の一例を示すフローチャートである。Ｘ・Ｙ取得処理は、Ｒ、Ｑを引数として、Ｘ、Ｙの値を出力する処理である。画像変換装置１００は、ＲがＨ以下か否かを判断する（ステップＳ２８０１）。ＲがＨ以下である場合（ステップＳ２８０１：Ｙｅｓ）、画像変換装置１００は、ＸにＱの値を格納する（ステップＳ２８０２）。続けて、画像変換装置１００は、ＲからＱを引いた結果をＹに格納する（ステップＳ２８０３）。
【０１３３】
ＲがＨより大きい場合（ステップＳ２８０１：Ｎｏ）、画像変換装置１００は、Ｑ＋Ｒの加算結果から、Ｈを引いた減算結果を、Ｘに格納する（ステップＳ２８０４）。続けて、画像変換装置１００は、ＨからＱを引いた減算結果をＹに格納する（ステップＳ２８０５）。ステップＳ２８０３の処理か、ステップＳ２８０５の処理かを実行した後、画像変換装置１００は、Ｘ・Ｙ取得処理を終了する。Ｘ・Ｙ取得処理を実行することにより、画像変換装置１００は、ＸとＹの値を取得することができる。
【０１３４】
図２９は、Ｒｏ取得処理手順の一例を示すフローチャートである。Ｒｏ取得処理は、Ｒ、Ｒ２を引数として、Ｒｏの値を出力する処理である。画像変換装置１００は、ＲがＨ以下か否かを判断する（ステップＳ２９０１）。ＲがＨ以下である場合（ステップＳ２９０１：Ｙｅｓ）、続けて、画像変換装置１００は、Ｒ２がＨ以下か否かを判断する（ステップＳ２９０２）。Ｒ２がＨ以下である場合（ステップＳ２９０２：Ｙｅｓ）、画像変換装置１００は、ＲからＲ２を引いた減算結果をＲｏに格納する（ステップＳ２９０３）。
【０１３５】
ＲがＨ以下でない場合（ステップＳ２９０１：Ｎｏ）、続けて、画像変換装置１００は、Ｒ２がＨ以下か否かを判断する（ステップＳ２９０４）。Ｒ２がＨより大きい場合（ステップＳ２９０４：Ｎｏ）、画像変換装置１００は、Ｒ２からＲを引いた減算結果をＲｏに格納する（ステップＳ２９０５）。
【０１３６】
Ｒ２がＨ以下でない場合（ステップＳ２９０２：Ｎｏ）、またはＲ２がＨ以下である場合（ステップＳ２９０４：Ｙｅｓ）、画像変換装置１００は、Ｒ２とＲの加算結果から、２・Ｈを引いた減算結果をＲｏに格納する（ステップＳ２９０６）。ステップＳ２９０３か、ステップＳ２９０５か、ステップＳ２９０６かの処理を実行した後、画像変換装置１００は、Ｒｏ取得処理を終了する。Ｒｏ取得処理を実行することにより、画像変換装置１００は、Ｒｏの値を取得することができる。
【０１３７】
（同一の画素列を複数回走査する例）
図４〜図２９では、同一の画素列を複数回走査することがなかったが、同一の画素列を複数回走査してもよい。同一の画素列を複数回走査することにより、移動平均以外の拡散を実現することができる。同一の画素列を複数回走査する例について、図３０、図３１を用いて説明する。
【０１３８】
図３０は、絞り形状の第３の例と絞り形状テーブルの記憶内容の第３の例を示す説明図である。図３０の（Ａ）は、四角錐状に光が拡散する場合の拡散係数を示している。中央の部分は拡散量が大きく、外側に行くにつれ、拡散量が小さくなる。図３０の（Ｂ）は、四角錐状に拡散する場合の絞り形状テーブル３１０＿ｐの記憶内容の一例を示す。絞り形状テーブル３１０＿ｐは、レコード３００１−１〜レコード３００１−９を記憶している。
【０１３９】
図３１は、絞り形状の第４の例と絞り形状テーブルの記憶内容の第４の例を示す説明図である。図３１の（Ａ）は、ガウシアンブラーを行う際の光が拡散する様子を示している。図３１の（Ｂ）は、ガウシアンブラーを行う際の拡散係数を示している。図３１の（Ｃ）は、ガウシアンブラーを行う際の絞り形状テーブル３１０＿ｇの記憶内容の一例を示す。絞り形状テーブル３１０＿ｇは、レコード３１０１−１〜レコード３１０１−１５を記憶している。絞り形状テーブル３１０＿ｇは、ｘ、ｙ、ｗフィールドの他に、何倍で加算するという情報を格納するｎフィールドを有する。
【０１４０】
ｎフィールドの具体的な使用方法として、画像変換装置１００は、図１１のステップＳ１１０８の処理を、「ＣＮＴ［Ｙ２］［Ｘ］＋＝ＬＣＮＴ［Ｘ＋Ｊ］＊ＴＢＬ［Ｉ］．ｎ」に置き換えて実行する。さらに、画像変換装置１００は、図１２のステップＳ１２０６の処理を、「ＥＮＧ［Ｙ２］［Ｘ］＋＝ＬＩＮＥ２［Ｘ］＊ＴＢＬ［Ｉ］．ｎ」に置き換えて実行する。ｎフィールドを有することで、何度も同じフィールドを加算することがなくなるため、処理量を減らすことができる。
【０１４１】
（光エネルギ値とＲＧＢ値の変換）
続けて、光エネルギ値とＲＧＢ値の変換の処理について説明する。ステップＳ１００２で示したＲＧＢ値から光エネルギ値の変換処理と、ステップＳ１３０４で示した光エネルギ値からＲＧＢ値の変換処理は浮動小数点演算であるため、浮動小数点演算は整数演算と比べるとＣＰＵ負荷が高くなり、処理速度が遅くなる。したがって、ＲＧＢ値から光エネルギ値の変換処理と、光エネルギ値からＲＧＢ値の変換処理とについて、整数演算で行う方法について説明する。また、（１）式、（２）式について、ｋ＝４０、ｂ＝−４．５を用いて説明する。
【０１４２】
ＲＧＢ値から光エネルギ値の変換処理については、ＩＮ［Ｙ］［Ｘ］が０〜２５５の２５６通りであるため、変換テーブルを参照することで、高速に処理することができる。具体的には、画像変換装置１００は、ｅｘｐ（ｎ／４０＋４．５）について、ｎを０から２５５まで設定した際の出力値を、ｅｘｐｔｂｌ［ｎ＝２５６］に格納しておく。たとえば、ｘｐｔｂｌ＝［９０，９２，９５，９７，…，５２８３９］となる。そして、画像変換装置１００は、ＲＧＢ値から光エネルギ値を変換する際に、ｅｘｐｔｂｌ［ＩＮ［Ｙ］［Ｘ］］の値を取得する。
【０１４３】
ＲＧＢ値から光エネルギ値の変換処理については、（２）式のｅが大きくなるため、変換テーブルを用意することが現実的ではなくなる。この問題は、整数型のｎビット目が２のｎ乗を示していることを利用することにより、小さなテーブルと簡単な演算で解決できる。整数Ｅの最上位の非零ビット数をｎとし、ｎ−１，ｎ−２，ｎ−３…ビットの状態をａ，ｂ，ｃ，…とした場合、光エネルギ値Ｅの値は、下記（３）式で表現できる。
【０１４４】
Ｅ＝２＾ｎ＋ａ・２＾（ｎ−１）＋ｂ・２＾（ｎ−２）＋ｃ・２＾（ｎ−３）＋…  …（３）
【０１４５】
また、（３）式は、下記（４）式のように変形できる。
【０１４６】
Ｅ＝２＾ｎ（１＋ａ／２＋ｂ／４＋ｃ／８＋…）  …（４）
【０１４７】
これにより、ｌｏｇＥの値は、下記（５）式のように変形できる。
【０１４８】
ｌｏｇＥ＝ｎ・ｌｏｇ２＋ｌｏｇ（１＋ａ／２＋ｂ／４＋ｃ／８＋…）  …（５）
【０１４９】
ここで、ｌｏｇ２は定数であるため第一項は簡単な掛け算で計算できる。一方、第二項は、ａ，ｂ，ｃ，…の個数を決定することで分解能が定まり、テーブル参照で求めることができる。ｌｏｇ２は０．６９３と１以下であるため、そのままでは整数型で計算することは難しい。そこで、画像変換装置１００は、適当な値としてＭ倍して保持し、後で割る処理を行う。同様に、画像変換装置１００は、（ｌｏｇ（１＋ａ／２＋ｂ／４＋…））のテーブルも同じ倍率で作りまとめて割る処理を行う。ｌｏｇＥの演算ができたら、輝度Ｄは簡単に求めることができる。次に、図３２にて、前述したアルゴリズムに従ったフローチャートを示す。図３２にて示すフローチャートでは、ｋ＝４０，ｂ＝−４．５，Ｍ＝４とし、ｌｏｇテーブルの大きさを３２として説明する。
【０１５０】
図３２は、光エネルギ値からＲＧＢ値への変換処理手順の一例を示すフローチャート（その１）である。光エネルギ値からＲＧＢ値への変換処理は、光エネルギ値からＲＧＢ値を出力する処理である。光エネルギ値からＲＧＢ値への変換処理を実行する前に、画像変換装置１００は、ｌｏｇ（１＋ｎ／３２）＊４０＊４について、ｎを０から３１まで設定した際の出力値をｌｏｇｔｂｌ［ｎ＝３２］に格納しておく。変換処理の１番目として、画像変換装置１００は、まず光エネルギ値Ｅを（１＋ｅ／３２）・２＾ｍという形式に表現しなおす処理を行う。
【０１５１】
始めに、画像変換装置１００は、乗数ｍに０を格納する（ステップＳ３２０１）。さらに、画像変換装置１００は、２＾ｍを示す変数ｋに１を格納する（ステップＳ３２０２）。続けて、画像変換装置１００は、Ｅがｋ以上か否かを判断する（ステップＳ３２０３）。Ｅがｋ未満である場合（ステップＳ３２０３：Ｎｏ）、画像変換装置１００は、ｍの値をインクリメントする（ステップＳ３２０４）。さらに、画像変換装置１００は、ｋを１ビット左シフトした結果をｋに格納する（ステップＳ３２０５）。なお、図３２のステップＳ３２０５で示した“＜＜＝”は、右辺分のビット数で左辺を左シフトした値を、左辺に代入する演算子である。ステップＳ３２０５の処理終了後、画像変換装置１００は、ステップＳ３２０３の処理に移行する。
【０１５２】
Ｅがｋ以上である場合（ステップＳ３２０３：Ｙｅｓ）、２＾ｍがＥより大きいため、画像変換装置１００は、ｍの値をデクリメントする（ステップＳ３２０６）。ステップＳ３２０６まで処理を実行することによりｍが得られた。引き続き、図３３にて、ｅを求める。
【０１５３】
図３３は、光エネルギ値からＲＧＢ値への変換処理手順の一例を示すフローチャート（その２）である。画像変換装置１００は、ｅにＥの値を格納する（ステップＳ３３０１）。次に、ステップＳ３３０２〜ステップＳ３３０５の処理は、ｅのｍ−１ビットから下５ビットで表現される整数を取り出す処理である。
【０１５４】
ステップＳ３３０１の実行終了後、画像変換装置１００は、ｍが５未満であるか否かを判断する（ステップＳ３３０２）。ステップＳ３３０２の処理は、ｅが二進数でいう６桁以上の数かどうかを判定する処理となる。なお、ｍは０，１，２，…と数えているため桁数はｍ＋１で表現される。
【０１５５】
ｍが５以上である場合（ステップＳ３３０２：Ｎｏ）、画像変換装置１００は、ｍ−５ビット分ｅを右シフトした値を、ｅに格納する（ステップＳ３３０３）。ステップＳ３３０３の処理により、ｅのｍ−１ビット目が５桁目になる。また、図３３のステップＳ３３０３で示した“＞＞＝”は、右辺分のビット数で左辺を右シフトした値を、左辺に代入する演算子である。また、ｍが５未満である場合（ステップＳ３３０２：Ｙｅｓ）、画像変換装置１００は、５−ｍ分ｅを左シフトした値を、ｅに格納する（ステップＳ３３０４）。ステップＳ３３０３、またはステップＳ３３０４の処理により、ｅの最上位ビットが６桁目、ビット数でいうと５ビット目に存在する。
【０１５６】
ステップＳ３３０３、またはステップＳ３３０４の処理実行後、最上位ビットを消去して下位５ビットを残すため、画像変換装置１００は、ｅと０ｘ１ｆとの論理積の結果をｅに格納する（ステップＳ３３０５）。なお、図３３のステップＳ３３０５で示した“＆＝”は、右辺と左辺の論理積を左辺に代入する演算子である。
【０１５７】
ステップＳ３３０５までの処理により、Ｅ≒（１＋ｅ／３２）・２＾ｍとした時のｅとｍが得られた。このＥは、ｅｘｐ（Ｄ／４０＋４．５）であるため、Ｄ＝４０ｌｏｇＥ−１８０と表現できる。このｌｏｇＥを先程のＥ＝（１＋ｅ／３２）・２＾ｍを用いて整理するとＤは下記（６）式のように変形できる。
【０１５８】
Ｄ＝４０ｍｌｏｇ２＋４０ｌｏｇ（１＋ｅ／３２）−１８０＝（ｍ＊４０＊４＊ｌｏｇ２＋４０＊４＊ｌｏｇ（１＋ｅ／３２））／４−１８０  …（６）
【０１５９】
（６）式のうち、４０＊４＊ｌｏｇ２は、おおよそ１１１であり、４０＊４＊ｌｏｇ（１＋ｅ／３２）の値はテーブルｌｏｇｔｂｌに格納されている。したがって、画像変換装置１００は、（ｍ＊１１１＋ｌｏｇｔｂｌ［ｅ］）／４−１８０を計算し、計算結果を輝度ｄに格納する（ステップＳ３３０６）。
【０１６０】
続けて、画像変換装置１００は、輝度ｄが０〜２５５の範囲のため、ステップＳ３３０７〜ステップＳ３３１０で範囲内に収まっているか確認する。具体的には、画像変換装置１００は、ｄが０未満か否かを判断する（ステップＳ３３０７）。ｄが０未満である場合（ステップＳ３３０７：Ｙｅｓ）、画像変換装置１００は、ｄに０を格納する（ステップＳ３３０８）。ｄが０以上である場合（ステップＳ３３０７：Ｎｏ）、画像変換装置１００は、ｄが２５５より大きいか否かを判断する（ステップＳ３３０９）。
【０１６１】
ｄが２５５より大きい場合（ステップＳ３３０９：Ｙｅｓ）、画像変換装置１００は、ｄに２５５を格納する（ステップＳ３３１０）。ｄが２５５以下である場合（ステップＳ３３０９：Ｎｏ）か、ステップＳ３３０８の処理が終了した場合か、ステップＳ３３１０の処理が終了した場合、画像変換装置１００は、光エネルギ値からＲＧＢ値への変換処理を終了する。図３２、図３３で示したフローチャートを実行することにより、画像変換装置１００は、（２）式よりも高速に変換処理を行える。
【０１６２】
図３４は、本実施の形態における画像変換処理の結果の一例を示す説明図（その１）である。図３４では、絞り形状を６角形とした場合の、元画像３４０１＿ＩＮ、元画像３４０２＿ＩＮと、ぼかし画像３４０１＿ＯＵＴ、ぼかし画像３４０２＿ＯＵＴを表示している。元画像３４０１＿ＩＮ、元画像３４０２＿ＩＮにて白い箇所が、ぼかし画像３４０１＿ＯＵＴ、ぼかし画像３４０２＿ＯＵＴでは白い領域が６角形状に分散している。
【０１６３】
図３５は、本実施の形態における画像変換処理の結果の一例を示す説明図（その２）である。図３５では、元画像３５０１＿ＩＮと、ぼかし画像３５０１＿５＿ＯＵＴ〜ぼかし画像３５０１＿４１＿ＯＵＴを表示している。ぼかし画像３５０１＿ｘ＿ＯＵＴの“ｘ”は、絞り形状の大きさを示している。具体的に、図３５には、ｘ＝５、９、１３、１７、２１、２５、２９、３３、３７、４１を表示している。元画像３５０１＿ＩＮにて白い箇所が、絞り形状の大きさが大きくなるほど、ぼかし画像上での６角形が大きくなる。
【０１６４】
図３６は、画素ごとの画像変換処理と本実施の形態における画像変換処理との速度比較を示す説明図である。図３６では、３２２［画素］×４８２［画素］を元画像とし、絞り形状を６角形にして、ぼかし画像に変換した場合の処理時間を表示している。
【０１６５】
画素ごとの画像変換処理は、計算結果を再利用せずにぼかし画像を変換する処理である。図３６上の、画素ごとの画像変換処理の処理時間を示すグラフ３６０１は、絞り形状の大きさが大きくなるほど、処理時間が大きくなる。たとえば、絞り形状の大きさが２０［画素］である場合、画素ごとの画像変換処理の処理時間は、１２００［ｍｓｅｃ］となる。本実施の形態における画像変換処理の処理結果を示すグラフ３６０２は、絞り形状の大きさが大きくなっても、処理時間が短いままに抑えることができる。たとえば、絞り形状の大きさが２０［画素］である場合、本実施の形態における画像変換処理の処理時間は、約５０［ｍｓｅｃ］となる。
【０１６６】
以上説明したように、画像変換装置１００によれば、絞り形状と重なる第１の画素列中の第１の画素の変換結果を用いて、絞り形状と重なる領域での相対位置が第１の画素と一致する第２の画素列中の第２の画素を変換する。これにより、影響を与える画素が第１の画素と第２の画素とで共通しているため、画像変換装置１００は、たとえば、第１の画素の変換結果をそのまま再利用して画像変換時の計算量を減らすことができる。
【０１６７】
また、画像変換装置１００によれば、対象画素列のうちの、第１の画素が含まれるように絞り形状を移動させた際にいずれかの画素と重なる画素の値に基づいて算出した、元画像を変換した場合の第１の画素の値を用いて、変換後の第２の画素の値を算出してもよい。これにより、画像変換装置１００は、再利用可能な第１の画素の変換結果を算出して、第２の画素の値の算出時に、第１の画素の変換結果を再利用することができるため、画像変換時の計算量を減らすことができる。
【０１６８】
また、画像変換装置１００によれば、元画像を変換した場合の第１の画素の値と、第２の画素が含まれるように絞り形状を移動させた際にいずれかの画素と重なる画素の値とに基づいて、変換後の第２の画素の値を算出してもよい。これにより、画像変換装置１００は、第２の画素に影響を与える画素群が、第１の画素に影響を与える画素に全て含まれている場合、第１の画素の変換結果を再利用して画像変換時の計算量を減らすことができる。
【０１６９】
また、画像変換装置１００によれば、対象画素列の各々の画素ごとに、走査方向または走査方向の逆方向のいずれかの方向に向かって、各々の画素から第１の画素群の画素数分先の画素までの各画素の値に基づき、変換後の各々の画素の値を算出する。続けて、画像変換装置１００は、変換後の各々の画素の値のうちの、拡散元画素からいずれかの方向の逆方向に向かって、第１の画素群のいずれかの方向にある端の画素から第１の画素までの画素数分先の位置にある画素の値を、第１の画素の値に設定してもよい。これにより、画像変換装置１００は、行ごとにまとめて移動平均を算出していくため、連続した領域にアクセスすることになり、処理の高速化を図ることができる。連続した領域にアクセスできる場合、たとえば、キャッシュラインに存在している可能性が高くなるため、画像変換処理の高速化を図ることができる。
【０１７０】
また、画像変換装置１００によれば、対象画素列の各々の画素ごとに、第１の画素群の画素数を用いて算出した変換後の各々の画素の値に基づき、各々の画素から第２の画素群の画素数分先の画素までの各画素の値に基づく変換後の各々の画素の値を算出してもよい。これにより、画像変換装置１００は、一度算出した移動平均を再利用できるため、計算量を削減することができる。
【０１７１】
また、画像変換装置１００によれば、ユーザが指定した形状に応じた走査方向に応じて、画像変換処理を行ってもよい。たとえば、ユーザが指定した形状がｙ軸に対して走査する方がｘ軸に対して走査する方より絞り形状テーブル３１０のレコード数が少なくなる場合、画像変換装置１００は、走査方向としてｙ軸方向を選択することにより、計算量を少なくすることができる。また、ｘ軸に対して走査する場合と、ｙ軸に対して走査する場合とで、絞り形状テーブル３１０のレコード数が同一となる可能性もある。この場合、画像変換装置１００は、連続した領域に処理が可能なｘ軸方向を走査方向として選択することにより、画像変換処理の高速化を図ることができる。
【０１７２】
また、本実施の形態にかかる画像変換処理は、計算量が少なくなるために、スマートフォンや携帯電話といった、ＣＰＵの処理能力が非力な携帯端末が実行しても、ユーザにストレスを与えない短い時間で画像変換処理を完了することができる。また、本実施の形態にかかる画像変換処理は、パーソナル・コンピュータで実行されてもよい。たとえば、写真画像の加工を行う場合、背景と前景を切り分けることが可能な他のアプリケーションにより、背景と前景を切り分けておき、背景に対して本実施の形態にかかる画像変換処理を実行してもよい。これにより、ユーザは、カメラで撮影したようなきれいなぼかし画像を短時間で得ることができる。
【０１７３】
なお、本実施の形態で説明した画像変換方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本画像変換プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本画像変換プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１７４】
１００  画像変換装置
１０１  絞り形状
３０１  選択部
３０２  対象画素列取得部
３０３  抽出部
３０４  画素数取得部
３０５  画素特定部
３０６  拡散元画素特定部
３０７  算出部
３１０  絞り形状テーブル
３１１  一時記憶領域
【図１Ａ】
2014033867.tif 000003
【図１Ｂ】
2014033867.tif 000004
【図２】
2014033867.tif 000005
【図３】
2014033867.tif 000006
【図４】
2014033867.tif 000007
【図５】
2014033867.tif 000008
【図６】
2014033867.tif 000009
【図７】
2014033867.tif 000010
【図８】
2014033867.tif 000011
【図９】
2014033867.tif 000012
【図１０】
2014033867.tif 000013
【図１１】
2014033867.tif 000014
【図１２】
2014033867.tif 000015
【図１３】
2014033867.tif 000016
【図１４】
2014033867.tif 000017
【図１５】
2014033867.tif 000018
【図１６】
2014033867.tif 000019
【図１７】
2014033867.tif 000020
【図１８】
2014033867.tif 000021
【図１９】
2014033867.tif 000022
【図２０】
2014033867.tif 000023
【図２１】
2014033867.tif 000024
【図２２】
2014033867.tif 000025
【図２３】
2014033867.tif 000026
【図２４】
2014033867.tif 000027
【図２５】
2014033867.tif 000028
【図２６】
2014033867.tif 000029
【図２７】
2014033867.tif 000030
【図２８】
2014033867.tif 000031
【図２９】
2014033867.tif 000032
【図３０】
2014033867.tif 000033
【図３１】
2014033867.tif 000034
【図３２】
2014033867.tif 000035
【図３３】
2014033867.tif 000036
【図３４】
2014033867.tif 000037
【図３５】
2014033867.tif 000038
【図３６】
2014033867.tif 000039
【手続補正書】
【提出日】平成27年2月13日(2015.2.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する、
処理を実行させることを特徴とする画像変換プログラム。
【請求項２】
前記コンピュータに、
前記対象画素列の中から、前記対象画素列に平行に前記いずれかの画素を移動させた移動後の前記いずれかの画素から前記所定範囲の画素群によって形成される領域内に前記第１の画素が含まれるように、前記対象画素列に平行に前記いずれかの画素を移動させた場合の移動後の前記いずれかの画素と重なる画素を特定し、
特定した前記画素の値に基づいて、前記画像を変換した場合の前記第１の画素の値を算出する処理を実行させ、
前記第２の画素の値を算出する処理は、
算出した前記第１の画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項１に記載の画像変換プログラム。
【請求項３】
前記コンピュータに、
前記対象画素列の中から、前記対象画素列に平行に前記いずれかの画素を移動させた移動後の前記いずれかの画素から前記所定範囲の画素群によって形成される領域内に前記第２の画素が含まれるように、前記対象画素列に平行に前記いずれかの画素を移動させた場合の移動後の前記いずれかの画素と重なる画素を特定する処理を実行させ、
前記第２の画素の値を算出する処理は、
前記画像を変換した場合の前記第１の画素の値と特定した前記画素の値とに基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項１または２に記載の画像変換プログラム。
【請求項４】
前記コンピュータに、
前記対象画素列の各々の画素ごとに、前記いずれかの方向に向かって、前記各々の画素から前記第１の画素群の画素数分の画素までの各画素の値に基づいて、前記画像を変換した場合の前記第１の画素列に関する前記各々の画素の値を算出し、
算出した前記第１の画素列に関する前記各々の画素の値のうちの、前記いずれかの画素から前記いずれかの方向の逆方向に向かって、前記第１の画素群の前記いずれかの方向にある端の画素から前記第１の画素までの画素数分先の位置にある画素の値を、前記画像を変換した場合の前記第１の画素の値に設定する処理を実行させ、
前記第２の画素の値を算出する処理は、
設定した前記第１の画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項１〜３のいずれか一つに記載の画像変換プログラム。
【請求項５】
前記コンピュータに、
前記各々の画素ごとに、前記いずれかの方向に向かって、前記各々の画素から前記第１の画素群の画素数分先の位置にある画素の次の画素から、前記各々の画素から前記第２の画素群の画素数分まで、の各画素の値と、算出した前記第１の画素列に関する前記各々の画素の値とに基づいて、前記画像を変換した場合の前記第２の画素列に関する前記各々の画素の値を算出し、
前記第２の画素の値を算出する処理は、
算出した前記第２の画素列に関する前記各々の画素の値のうちの、前記いずれかの画素から前記いずれかの方向の逆方向に向かって、前記第１の画素群の前記いずれかの方向にある端の画素から前記第２の画素までの画素数分先の位置にある画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項４に記載の画像変換プログラム。
【請求項６】
前記コンピュータに、
画素群によって形成される領域の形状と、走査方向とを関連付けて記憶するテーブルを参照して、指定された形状に応じた走査方向を選択し、
前記画像の中から、選択した走査方向に走査して前記対象画素列を取得する処理を実行させ、
前記対象画素列を取得した後、前記第１の画素列と前記第２の画素列とを抽出する処理を実行することを特徴とする請求項１〜５のいずれか一つに記載の画像変換プログラム。
【請求項７】
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出する抽出部と、
前記抽出部によって抽出された前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得する取得部と、
前記抽出部によって抽出された前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、前記取得部によって取得された前記画素数分先の位置にある第２の画素を特定する特定部と、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する算出部と、
を有することを特徴とする画像変換装置。
【請求項８】
コンピュータが、
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する、
処理を実行することを特徴とする画像変換方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像変換プログラム、画像変換装置、および画像変換方法に関する。
【背景技術】
【０００２】
従来、画像を、ぼかし効果を与えた画像に変換する技術がある。たとえば、入力画像の処理対象画素それぞれにぼかし範囲を計算し、ぼかし効果を与える処理を行う技術がある。また、サイズが異なる複数の移動平均フィルタを用いてフィルタ処理を行い、複数のぼかし画像を生成し、複数のぼかし画像データの互いに対応する各画素に関し、ぼかし画像ごとに重みを与えて、各ぼかし画像データの平均値を合成ぼかし画像とする技術がある。また、入力画像の各画素のＲＧＢ値から露光量を計算処理によって求め、各画素の露光量にぼかし効果を与える処理を行い、ぼかし効果を与えた各画素の露光量をＲＧＢ値に戻す技術がある。（たとえば、下記特許文献１〜３を参照。）
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０６−０３６０２２号公報
【特許文献２】特開２００４−１３３５５１号公報
【特許文献３】特開２００１−２１６５１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来技術において、画像に対してぼかし効果を与える処理の計算量が多くなり、画像の変換処理にかかる処理時間の増加を招くという問題がある。たとえば、ぼかし効果を与える処理は、画像内の画素ごとに画素の値をぼかし範囲となる絞り形状に合わせて均等に分布する処理となるため、計算量が多くなる。
【０００５】
本発明は、上述した従来技術による問題点を解消するため、ぼかし効果を与える処理の処理時間の短縮を図る画像変換プログラム、画像変換装置、および画像変換方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、変換対象となる画像の中の対象画素列と平行な画素列のうちの、対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、領域と連続して重なる画素数が第１の画素列以上の第２の画素列とを抽出し、抽出した第１の画素列の中の領域に含まれる第１の画素群のうちの対象画素列の走査方向または走査方向の逆方向のいずれかの方向にある端の画素から第１の画素群に含まれる第１の画素までの画素数を取得し、抽出した第２の画素列の中の領域に含まれる第２の画素群のうちのいずれかの方向にある端の画素からいずれかの方向の逆方向に向かって、取得した画素数分先の位置にある第２の画素を特定し、画像を変換した場合の第１の画素の値を記憶する記憶部を参照して、画像を変換した場合の第２の画素の値を算出する画像変換プログラム、画像変換装置、および画像変換方法が提案される。
【発明の効果】
【０００７】
本発明の一側面によれば、ぼかし効果を与える処理の処理時間の短縮を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１Ａ】図１Ａは、本実施の形態にかかる画像変換装置の動作例を示す説明図（その１）である。
【図１Ｂ】図１Ｂは、本実施の形態にかかる画像変換装置の動作例を示す説明図（その２）である。
【図２】図２は、画像変換装置のハードウェア構成例を示すブロック図である。
【図３】図３は、画像変換装置の機能構成例を示すブロック図である。
【図４】図４は、絞り形状の第１の例と絞り形状テーブルの記憶内容の第１の例を示す説明図である。
【図５】図５は、画像変換処理の動作例を示す説明図（その１）である。
【図６】図６は、画像変換処理の動作例を示す説明図（その２）である。
【図７】図７は、画像変換処理の動作例を示す説明図（その３）である。
【図８】図８は、ｘ軸方向に走査する場合の画像変換処理手順の一例を示すフローチャートである。
【図９】図９は、ｘ軸方向に走査する場合の初期化処理手順の一例を示すフローチャートである。
【図１０】図１０は、ｘ軸方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。
【図１１】図１１は、ｘ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。
【図１２】図１２は、ｘ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。
【図１３】図１３は、ＲＧＢ値変換処理手順の一例を示すフローチャートである。
【図１４】図１４は、絞り形状テーブルを用いない場合の画像変換処理の動作例を示す説明図である。
【図１５】図１５は、絞り形状テーブルを用いない場合の光拡散処理手順の一例を示すフローチャート（その１）である。
【図１６】図１６は、絞り形状テーブルを用いない場合の光拡散処理手順の一例を示すフローチャート（その２）である。
【図１７】図１７は、絞り形状の第２の例と絞り形状テーブルの記憶内容の第２の例を示す説明図である。
【図１８】図１８は、ｙ軸方向に走査する場合の初期化処理手順の一例を示すフローチャートである。
【図１９】図１９は、ｙ軸方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。
【図２０】図２０は、ｙ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。
【図２１】図２１は、ｙ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。
【図２２】図２２は、Ｙ＝−Ｘ方向に走査する場合の画像変換処理の動作例を示す説明図である。
【図２３】図２３は、Ｙ＝−Ｘ方向に走査する場合の初期化処理手順の一例を示すフローチャートである。
【図２４】図２４は、Ｙ＝−Ｘ方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。
【図２５】図２５は、Ｙ＝−Ｘ方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。
【図２６】図２６は、Ｙ＝−Ｘ方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。
【図２７】図２７は、Ｐ取得処理手順の一例を示すフローチャートである。
【図２８】図２８は、Ｘ・Ｙ取得処理手順の一例を示すフローチャートである。
【図２９】図２９は、Ｒｏ取得処理手順の一例を示すフローチャートである。
【図３０】図３０は、絞り形状の第３の例と絞り形状テーブルの記憶内容の第３の例を示す説明図である。
【図３１】図３１は、絞り形状の第４の例と絞り形状テーブルの記憶内容の第４の例を示す説明図である。
【図３２】図３２は、光エネルギ値からＲＧＢ値への変換処理手順の一例を示すフローチャート（その１）である。
【図３３】図３３は、光エネルギ値からＲＧＢ値への変換処理手順の一例を示すフローチャート（その２）である。
【図３４】図３４は、本実施の形態における画像変換処理の結果の一例を示す説明図（その１）である。
【図３５】図３５は、本実施の形態における画像変換処理の結果の一例を示す説明図（その２）である。
【図３６】図３６は、画素ごとの画像変換処理と本実施の形態における画像変換処理との速度比較を示す説明図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、開示の画像変換プログラム、画像変換装置、および画像変換方法の実施の形態を詳細に説明する。
【００１０】
図１Ａは、本実施の形態にかかる画像変換装置の動作例を示す説明図（その１）である。画像変換装置１００は、元画像を受け付けると、元画像にぼかし効果を与える処理を行い、ぼかし画像として変換するコンピュータである。画像変換装置１００は、たとえば、スマートフォンや携帯電話等の携帯端末である。たとえば、画像変換装置１００がユーザにより操作されている状態にて、画像変換装置１００が、ポップアップダイアログを表示する場合を想定する。このとき、ポップアップダイアログ以外の背面をぼかし効果によりぼかすことにより、画像変換装置１００は、ポップアップダイアログに注視させるという、ユーザに対する視覚的効果を与えることができる。
【００１１】
しかし、ぼかし効果を与える処理は、画像内の画素数と絞り形状に含まれる画素数との積に比例しており、処理量が多くなるため、処理時間がかかる。本実施の形態にかかる画像変換装置１００は、ぼかし効果を与える処理の計算量を減らして、処理時間を短縮する。
【００１２】
以下、元画像を、ぼかし効果を与えたぼかし画像に変換する処理を、「画像変換処理」と称する。また、元画像とぼかし画像の大きさは、縦幅Ｈ［画素］、横幅Ｗ［画素］と定義する。また、元画像の符号を、ＩＮとし、ぼかし画像の符号をＯＵＴと定義する。さらに、元画像およびぼかし画像は、直交する２次元座標にあり、水平軸をｘ軸とし、垂直軸をｙ軸とする。元画像のｘ＝Ｘ、ｙ＝Ｙの画素を、ＩＮ［Ｙ］［Ｘ］として示し、変換後となるぼかし画像のｘ＝Ｘ、ｙ＝Ｙの画素を、ＯＵＴ［Ｙ］［Ｘ］として示す。また、ＩＮ［Ｙ］は、元画像のｙ＝Ｙの行の画素列を示し、ＯＵＴ［Ｙ］は、ぼかし画像のｙ＝Ｙの行の画素列を示す。
【００１３】
図１Ａの（Ａ）は、絞り形状１０１を示している。絞り形状１０１は、予めユーザによって指定された絞り形状となる。指定された絞り形状１０１は、拡散元画素から所定範囲の画素群によって形成される領域の形状となる。絞り形状１０１の中央となるｘ＝０、ｙ＝０の画素は、所定範囲の画素群に画素の値を拡散させる拡散元画素となる。画素の値は、ＲＧＢ値でもよいし、ＲＧＢ値を変換した露光量を表す光エネルギ値でもよい。光エネルギ値は、照度と時間をかけ合わせた値となる。
【００１４】
図１Ａでの所定範囲の画素群は、ｙ＝２、−２の行の、−１≦ｘ≦１を満たす画素となり、ｙ＝−１、０、１の行の、−２≦ｘ≦２を満たす画素となる。以上から、絞り形状に含まれる画素群は、２１［画素］となる。画像変換装置１００の画面の画素数が、３２０［画素］×４８０［画素］である場合、画像内の画素数と絞り形状に含まれる画素数との積は、３２０×４８０×２１＝３２２５６００［画素］となる。本実施の形態にかかる画像変換装置１００は、ぼかし処理の計算量の減少を図る。
【００１５】
図１Ａの（Ｂ１）〜図１Ａの（Ｂ３）では、ぼかし形状と重なる画素について、どの画素が影響を与えているかを示した図である。図１Ａの（Ｂ１）〜図１Ａの（Ｂ３）では、画像変換装置１００が、入力画像を水平方向に走査して得られる、光を拡散させる拡散元画素の対象画素列をｙ＝５とした場合について説明する。なお、走査方向は、ｘ軸方向でもよいし、ｙ軸方向でもよいし、ｘ軸方向と、ｙ軸方向とは異なる斜め方向としてもよい。
【００１６】
画像変換装置１００は、対象画素列と平行な画素列のうちの、絞り形状１０１と重なる第１の画素列として、ｙ＝７の画素列を抽出する。さらに、画像変換装置１００は、絞り形状１０１と連続して重なる画素数が第１の画素列以上の第２の画素列として、ｙ＝４の画素列を抽出する。具体的には、第１の画素列が絞り形状１０１と重なる画素数は、３［画素］であり、第２の画素列が絞り形状１０１と重なる画素数は、５［画素］となる。以下、走査方向における画素列が、絞り形状１０１と重なる画素数を「ぶれ量」と呼称する。
【００１７】
図１Ａの（Ｂ１）にて、対象画素列のうち拡散元画素をＩＮ［５］［６］とした場合、画像変換装置１００は、ｙ＝７の画素列のうち、第１の画素として、ＩＮ［７］［５］を選択する。さらに、画像変換装置１００は、ｙ＝４の画素列のうち、第２の画素として、ＩＮ［４］［４］を特定する。第１の画素と第２の画素の位置関係は、絞り形状と重なる領域での相対位置が同一となっている。より詳細には、ｙ＝７が絞り形状１０１と重なる第１の画素群のうち、ＩＮ［７］［５］は、走査方向の逆方向から数えると、０番目に位置する。同様に、ｙ＝４が絞り形状１０１と重なる第２の画素群のうち、ＩＮ［４］［４］は、走査方向の逆方向から数えると、０番目に位置する。領域での相対位置は、走査方向から見てもよい。第１の画素、第２の画素ともに絞り形状１０１に含まれているため、第１の画素、第２の画素は、拡散元画素ＩＮ［５］［６］の影響を受ける。
【００１８】
次に、図１Ａの（Ｂ２）にて、対象画素列のうち拡散元画素をＩＮ［５］［４］とした場合も、第１の画素、第２の画素ともに絞り形状１０１に含まれているため、第１の画素と第２の画素は、拡散元画素ＩＮ［５］［４］の影響を受ける。なお、図示していないが、対象画素列のうち拡散元画素をＩＮ［５］［５］とした場合も、第１の画素、第２の画素ともに絞り形状１０１に含まれているため、第１の画素、第２の画素は、拡散元画素ＩＮ［５］［５］の影響を受ける。
【００１９】
続けて、図１Ａの（Ｂ３）にて、対象画素列のうち拡散元画素をＩＮ［５］［２］とした場合、第２の画素は絞り形状１０１に含まれるため、第２の画素は、拡散元画素ＩＮ［５］［２］の影響を受ける。しかし、第１の画素は、絞り形状１０１に含まれないため、第１の画素は、拡散元画素ＩＮ［５］［２］の影響を受けない。なお、図示していないが、対象画素列のうち拡散元画素をＩＮ［５］［３］とした場合も、第２の画素は絞り形状１０１に含まれるため、第２の画素は、拡散元画素ＩＮ［５］［３］の影響を受ける。しかし、第１の画素は、絞り形状１０１に含まれないため、第１の画素は、拡散元画素ＩＮ［５］［３］の影響を受けない。
【００２０】
以上より、第１の画素は、拡散元画素ＩＮ［５］［４］〜拡散元画素ＩＮ［５］［６］の影響を受けることとなる。また、第２の画素は、拡散元画素ＩＮ［５］［２］〜拡散元画素ＩＮ［５］［６］の影響を受けることとなる。したがって、第１の画素と第２の画素は、影響を与える画素が一部共通していることから、計算結果を再利用することができる。また、影響を受ける画素の数は、ぶれ量と一致する。図１の（Ｂ）にて、計算結果の再利用について説明する。
【００２１】
図１Ｂは、本実施の形態にかかる画像変換装置の動作例を示す説明図（その２）である。図１Ａにて説明したとおり、第１の画素と第２の画素は、影響を与える画素が一部共通している。したがって、画像変換装置１００は、元画像ＩＮを変換した場合の第１の画素の値を記憶する記憶部を参照して、元画像ＩＮを変換した場合の第２の画素の値を算出する。具体的には、画像変換装置１００は、元画像ＩＮを変換した場合の第１の画素の値と、拡散元画素ＩＮ［５］［２］の値と、拡散元画素ＩＮ［５］［３］の値との平均を、元画像ＩＮを変換した場合の第２の画素の値とする。
【００２２】
元画像ＩＮを変換した場合の第１の画素の値を参照しない場合、拡散元画素ＩＮ［５］［２］〜拡散元画素ＩＮ［５］［６］を加算するため、画像変換装置１００は、４回の加算処理を行うことになる。一方、元画像ＩＮを変換した場合の第１の画素の値を参照することにより、画像変換装置１００は、２回の加算処理で済む。以降、図２〜図３６を用いて、画像変換装置１００の動作について詳細に説明する。
【００２３】
（画像変換装置１００のハードウェア）
図２は、画像変換装置のハードウェア構成例を示すブロック図である。図２において、スマートフォンなどの携帯端末を想定する画像変換装置１００は、ＣＰＵ２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６を有する。画像変換装置１００は、さらに、ディスプレイ２０７と、Ｉ／Ｆ２０８と、タッチパネル２０９を有する。各部は、それぞれバス２１０で接続されている。
【００２４】
ここで、ＣＰＵ２０１は、画像変換装置１００の全体の制御を司る制御装置である。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している不揮発性メモリである。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される揮発性メモリである。フラッシュＲＯＭ２０４は、書き換え可能な不揮発性メモリであり、たとえば、読出し速度が高速なＮＯＲ型フラッシュメモリである。フラッシュＲＯＭ２０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、画像変換装置１００は、Ｉ／Ｆ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。また、本実施の形態にかかる画像変換プログラムは、ＯＳから呼ばれるシステムコールとして、フラッシュＲＯＭ２０４内に存在していてもよい。
【００２５】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵ２０１の制御にしたがってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する制御装置である。フラッシュＲＯＭ２０６は、書き換え可能な不揮発性メモリであり、たとえば、データの保存、運搬を主に目的とした、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、画像変換装置１００を使用するユーザがＩ／Ｆ２０８を通して取得した画像データ、映像データなどや、また本実施の形態にかかる画像変換プログラムを記憶してもよい。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２６】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ２０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２７】
Ｉ／Ｆ２０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１１に接続され、ネットワーク２１１を介して他の装置に接続される。そして、Ｉ／Ｆ２０８は、ネットワーク２１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。タッチパネル２０９は、ユーザからの接触により、データの入力を行う装置である。
【００２８】
（画像変換装置１００の機能）
次に、画像変換装置１００の機能について説明する。図３は、画像変換装置の機能構成例を示すブロック図である。画像変換装置１００は、選択部３０１と、対象画素列取得部３０２と、抽出部３０３と、画素数取得部３０４と、第２の画素特定部３０５と、拡散元画素特定部３０６と、算出部３０７と、を含む。制御部となる選択部３０１〜算出部３０７は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、選択部３０１〜算出部３０７の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などである。または、Ｉ／Ｆ２０８を経由して他のＣＰＵが実行することにより、選択部３０１〜算出部３０７の機能を実現してもよい。
【００２９】
また、画像変換装置１００は、絞り形状テーブル３１０と、一時記憶領域３１１にアクセス可能である。絞り形状テーブル３１０は、いずれかの画素から所定範囲の画素群によって形成される領域の形状と、走査方向とを関連付けて記憶する記憶領域である。一時記憶領域３１１は、元画像ＩＮを変換した画像ＯＵＴの画素の値を一時的に記憶する記憶領域である。絞り形状テーブル３１０と、一時記憶領域３１１は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６といった記憶装置に格納されている。
【００３０】
選択部３０１は、絞り形状テーブル３１０を参照して、指定された絞り形状に応じた走査方向を選択する。絞り形状は、たとえば、ユーザにより指定される。または、開発者によって絞り形状が指定されていてもよい。絞り形状は、たとえば、６角形、ハート型、星型、など、どのような形状であってもよい。たとえば、選択部３０１は、ユーザにより指定された絞り形状が６角形の絞り形状であれば、絞り形状テーブル３１０に記憶されている走査方向としてｘ軸方向を選択する。なお、選択されたデータは、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３１】
対象画素列取得部３０２は、元画像ＩＮの中から、選択部３０１によって選択された走査方向に走査して対象画素列を取得する。たとえば、選択部３０１が走査方向としてｘ軸方向を選択したとする。このとき、対象画素列取得部３０２は、元画像ＩＮの中から、ｘ軸方向に走査して対象画素列として、ｙ＝５の画素列を選択する。対象画素列取得部３０２は、繰り返し対象画素列を取得してもよい。たとえば、対象画素列取得部３０２は、ｙ＝０の画素列から、ｙ＝Ｈ−１の画素列までを対象画素列として取得してもよい。
【００３２】
抽出部３０３は、変換対象となる画像の中の対象画素列と平行な画素列のうちの、対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、領域と連続して重なる画素数が第１の画素列以上の第２の画素列とを抽出する。いずれかの画素は、画素の値の拡散元画素となる。図１の例では、拡散元画素を、ＩＮ［ｙ＝５］［ｘ＝６］とする。たとえば、抽出部３０３は、ｙ＝５の画素列と平行な画素列のうちの、絞り形状１０１と重なる第１の画素列としてｙ＝７の画素列と、絞り形状１０１と重なる画素数が第１の画素列以上の第２の画素列として、ｙ＝４の画素列とを抽出する。
【００３３】
画素数取得部３０４は、抽出部３０３によって抽出された第１の画素列の中の領域に含まれる第１の画素群のうちの対象画素列の走査方向または走査方向の逆方向のいずれかの方向にある端の画素から第１の画素群に含まれる第１の画素までの画素数を取得する。たとえば、選択部３０１が走査方向としてｘ軸方向を選択したとする。図１Ａの例とすると、第１の画素群は、ＩＮ［ｙ＝７］［ｘ＝５］〜ＩＮ［ｙ＝７］［ｘ＝７］となる。また、第２の画素群は、ＩＮ［ｙ＝４］［ｘ＝４］〜ＩＮ［ｙ＝４］［ｘ＝８］となる。第１の画素は、第１の画素群のいずれであってもよい。また、第１の画素を、ＩＮ［ｙ＝７］［ｘ＝５］として説明する。
【００３４】
また、いずれかの方向は、走査方向がｘ軸方向であればｘ軸の正の方向でもよいし、ｘ軸の負の方向でもよい。たとえば、画素数取得部３０４は、第１の画素群のうちのｘ軸の負の方向にある端の画素ＩＮ［ｙ＝７］［ｘ＝５］から、第１の画素ＩＮ［ｙ＝７］［ｘ＝５］までの画素数０を取得する。なお、取得された画素数は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３５】
第２の画素特定部３０５は、第２の画素列の中の領域に含まれる第２の画素群のうちのいずれかの方向にある端の画素からいずれかの方向の逆方向に向かって、画素数取得部３０４に取得した画素数分先の位置にある第２の画素を特定する。たとえば、第２の画素特定部３０５は、第２の画素群のうちのｘ軸の負の方向にある端の画素ＩＮ［ｙ＝４］［ｘ＝４］から、ｘ軸の正の方向に向かって、画素数０分の位置にある第２の画素ＩＮ［ｙ＝４］［ｘ＝４］を特定する。なお、特定された第２の画素のｘ座標の位置、ｙ座標の位置は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３６】
拡散元画素特定部３０６は、対象画素列の中から、対象画素列に平行にいずれかの画素を移動させた場合の移動後のいずれかの画素と重なる画素を特定する。いずれかの画素を移動させる際、拡散元画素特定部３０６は、対象画素列に平行にいずれかの画素を移動させた移動後のいずれかの画素から所定範囲の画素群によって形成される領域内に第１の画素が含まれるように、いずれかの画素を移動させる。たとえば、拡散元画素特定部３０６は、対象画素列となるｙ＝５の中から、絞り形状１０１に第１の画素ＩＮ［ｙ＝４］［ｘ＝４］が含まれるように拡散元画素を移動させる。そして、拡散元画素特定部３０６は、いずれかの画素と重なった画素ＩＮ［５］［４］〜画素ＩＮ［５］［６］を特定する。
【００３７】
また、拡散元画素特定部３０６は、対象画素列の中から、対象画素列に平行にいずれかの画素を移動させた場合の移動後のいずれかの画素と重なる画素を特定する。いずれかの画素を移動させる際、拡散元画素特定部３０６は、対象画素列に平行にいずれかの画素を移動させた移動後のいずれかの画素から所定範囲の画素群によって形成される領域内に第２の画素が含まれるように、いずれかの画素を移動させる。なお、特定された画素のｘ座標の位置、ｙ座標の位置は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３８】
算出部３０７は、画像を変換した場合の第１の画素の値を記憶する一時記憶領域３１１を参照して、元画像ＩＮを変換した場合の第２の画素の値を算出する。たとえば、拡散元画素特定部３０６は、第１の画素が含まれるようにいずれかの画素を移動させた際に特定された画素群と、第１の画素が含まれるようにいずれかの画素を移動させた際に特定された画素群とが一致したとする。この場合、算出部３０７は、一時記憶領域３１１に記憶された第１の画素の値を、元画像ＩＮを変換した場合の第２の画素の値に設定する。
【００３９】
また、算出部３０７は、拡散元画素特定部３０６によって特定された画素の値に基づいて、元画像ＩＮを変換した場合の第１の画素の値を算出してもよい。たとえば、算出部３０７は、拡散元画素ＩＮ［５］［４］〜拡散元画素ＩＮ［５］［６］の値を加算して、元画像ＩＮを変換した第１の画素ＯＵＴ［７］［５］の値を算出する。
【００４０】
また、算出部３０７は、算出部３０７によって算出された第１の画素の値に基づいて、画像を変換した場合の第２の画素の値を算出してもよい。また、算出部３０７は、元画像ＩＮを変換した場合の第１の画素の値と特定した画素の値とに基づいて、画像を変換した場合の第２の画素の値を算出してもよい。たとえば、算出部３０７は、第１の画素ＯＵＴ［７］［５］の値と、拡散元画素ＩＮ［５］［２］の値と、拡散元画素ＩＮ［５］［３］の値と、を加算して、第２の画素ＯＵＴ［４］［４］の値を算出する。
【００４１】
また、算出部３０７は、対象画素列の各々の画素ごとに、いずれかの方向に向かって、各々の画素から第１の画素群の画素数分の画素までの各画素の値に基づいて、画像を変換した場合の第１の画素列に関する各々の画素の値を算出する。たとえば、算出部３０７は、ｙ＝５となる対象画素列の各々の画素ごとに、ｘ軸方向の負の方向に向かって、各々の画素から、第１の画素群の画素数となる３個分の画素の値を加算して、画像を変換した場合の第１の画素列に関する各々の画素の値を算出する。
【００４２】
より詳細に記述すると、たとえば、算出部３０７は、ＩＮ［ｙ＝５］［ｘ＝０］〜ＩＮ［ｙ＝５］［ｘ＝２］の値の加算結果を、一時記憶領域３１１として、ＴＭＰ［ｘ＝２］の値とする。以下、さらに、算出部３０７は、ＩＮ［ｙ＝５］［ｘ＝１］〜ＩＮ［ｙ＝５］［ｘ＝３］の値の加算結果を、ＴＭＰ［ｘ＝３］の値とする。算出部３０７は、このような計算を、ＴＭＰ［ｘ＝Ｗ−１＋Ｓ］まで行う。ここで、Ｓは、ぶれ量の最大値とする。算出した結果は、一時記憶領域３１１に格納する。
【００４３】
算出部３０７は、算出した第１の画素列に関する各々の画素の値のうちの、いずれかの画素からいずれかの方向の逆方向に向かって、第１の画素群のいずれかの方向にある端の画素から第１の画素までの画素数分先の位置にある画素の値を第１の画素の値に設定する。
【００４４】
第１の画素群がＩＮ［ｙ＝５］［ｘ＝５］〜ＩＮ［ｙ＝５］［ｘ＝７］であり、いずれかの方向がｘ軸の負の方向であり、第１の画素がＩＮ［ｙ＝５］［ｘ＝５］であるとする。この場合、第１の画素群のいずれかの方向にある端の画素から第１の画素までの画素数は、０となる。このとき、算出部３０７は、ＴＭＰ［ｘ＝０］〜ＴＭＰ［ｘ＝Ｗ−１＋Ｓ］のうちの、いずれかの画素からＩＮ［ｙ＝５］［ｘ＝６］からｘ軸の正の方向に向かって、画素数０の位置にある画素ＴＭＰ［ｘ＝６］の値を元画像を変換した第１の画素の値に設定する。
【００４５】
また、算出部３０７は、各々の画素ごとに、次の記載する情報に基づいて、画像を変換した場合の第２の画素列に関する各々の画素の値を算出してもよい。基づく情報は、いずれかの方向に向かって、各々の画素から第１の画素群の画素数分先の位置にある画素の次の画素から、各々の画素から第２の画素群の画素数分まで、の各画素の値と、算出した第１の画素列に関する各々の画素の値となる。
【００４６】
さらに、算出部３０７は、算出した第２の画素列に関する各々の画素の値のうちの、元画像を変換した場合の第２の画素の値を算出する。基づく情報は、いずれかの画素からいずれかの方向の逆方向に向かって、第１の画素群のいずれかの方向にある端の画素から第２の画素までの画素数分先の位置にある画素の値となる。算出した画素の値は、一時記憶領域３１１に格納される。次に、図４〜図１６を用いて、ｘ軸方向に走査する場合の画像変換処理について説明する。
【００４７】
（ｘ軸方向に走査する例）
図４は、絞り形状の第１の例と絞り形状テーブルの記憶内容の第１の例を示す説明図である。図４の（Ａ）では、ｘｙ平面上での絞り形状４００を示している。図４に示すように、絞り形状４００は、６角形となっている。図４の（Ａ）内のｗは、ぶれ量を図示している。図４の（Ｂ）には、ｘ方向に走査する場合の、絞り形状４００の具体的な数値が記されている。たとえば、ｙ＝４の行は、ｘ＝０から始まってｗ＝１画素続いている。また、ｙ＝３の行は、ｘ＝−１から始まってｗ＝３画素続いている。続けて、ｙ＝２の行は、ｘ＝−３から始まってｗ＝７画素続いている。
【００４８】
図４の（Ｃ）は、絞り形状４００の具体的数値を絞り形状テーブルに格納した場合の記憶内容の一例を示している。図４の（Ｃ）に示す絞り形状テーブル３１０は、レコード４０１−１〜レコード４０１−９を記憶している。また、絞り形状テーブル３１０は、走査方向としてｘ軸方向を関連付けて記憶している。絞り形状テーブル３１０は、ｘ、ｙ、ｗという３つのフィールドを含む。ｘフィールドには、絞り形状４００の該当のｙ行におけるぶれ開始位置となる左端の画素のｘ行における位置が格納される。ｙフィールドには、該当のｙ行における画素の位置が格納される。ｗフィールドには、ぶれ量となる該当のｙ行における左端から右端までの画素数が格納される。また、絞り形状テーブル３１０は、ｗの小さい順に格納されている。
【００４９】
たとえば、レコード４０１−１は、ｙ＝４の行について、ｘ＝０から始まって１画素続いていることを示している。次に、図５〜図７を用いて、画像変換処理の動作例を説明する。
【００５０】
図５は、画像変換処理の動作例を示す説明図（その１）である。図５では、元画像のある画素が、変換後の画素群のうちのどの画素に影響を与えているかを説明した図である。たとえば、図５の例では、ＩＮ［０］〜ＩＮ［Ｈ−１］のうちの、処理対象行となるＩＮ［Ｙ］の各画素が影響を与える画素について説明する。
【００５１】
ＩＮ［Ｙ］［Ｘ］は、ＯＵＴ［Ｙ＋４］［Ｘ］に影響を与える。同様に、ＩＮ［Ｙ］［Ｘ＋１］は、ＯＵＴ［Ｙ＋４］［Ｘ＋１］に影響を与え、ＩＮ［Ｙ］［Ｘ＋２］は、ＯＵＴ［Ｙ＋４］［Ｘ＋２］に影響を与える。このように、ＯＵＴ［Ｙ＋４］は、ＩＮ［Ｙ］そのものを追加すればよい。ＯＵＴ［Ｙ−４］も同様に、ＩＮ［Ｙ］そのものを追加すればよい。また、図５に示す「±」は、符号のみが異なる２つの値を省略して記載する記号である。また、「＋＝」は、右辺と左辺の加算を行い、加算結果を右辺に格納する演算子である。
【００５２】
また、ＩＮ［Ｙ］［Ｘ］は、ＯＵＴ［Ｙ＋３］［Ｘ−１］、ＯＵＴ［Ｙ＋３］［Ｘ］、ＯＵＴ［Ｙ＋３］［Ｘ＋１］という３つの画素に影響を与える。同様に、ＩＮ［Ｙ］［Ｘ−１］は、ＯＵＴ［Ｙ＋３］［Ｘ−２］、ＯＵＴ［Ｙ＋３］［Ｘ−１］、ＯＵＴ［Ｙ＋３］［Ｘ］という３つの画素に影響を与える。同様に、ＩＮ［Ｙ］［Ｘ＋１］は、ＯＵＴ［Ｙ＋３］［Ｘ］、ＯＵＴ［Ｙ＋３］［Ｘ＋１］、ＯＵＴ［Ｙ＋３］［Ｘ＋２］という３つの画素に影響を与える。
【００５３】
このように、ＯＵＴ［Ｙ＋３］［Ｘ］は、ＩＮ［Ｙ］［Ｘ−１］、ＩＮ［Ｙ］［Ｘ］、ＩＮ［Ｙ］［Ｘ＋１］、という３つの画素から影響を受ける。０からＷ−１内の間の値をとるｉを用いて一般化すると、画素ＯＵＴ［Ｙ＋３］［ｉ］は、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］、という３つの画素から影響を受ける。したがって、ＯＵＴ［Ｙ＋３］は、ぶれ量が３であり、ＩＮ［Ｙ］の幅３の移動平均を追加すればよい。移動平均の生成方法については、図６にて後述する。同様に、ＯＵＴ［Ｙ−３］も、ＩＮ［Ｙ］の幅３の移動平均を追加すればよい。同様に、ＯＵＴ［Ｙ±２］、ＯＵＴ［Ｙ±１］、ＯＵＴ［Ｙ］は、ＩＮ［Ｙ］の幅７の移動平均を追加すればよい。
【００５４】
図６は、画像変換処理の動作例を示す説明図（その２）である。図６では、ＩＮ［Ｙ］を処理対象として、一時記憶領域３１１となるＴＭＰに処理結果を格納する際の移動平均の生成方法を示している。
【００５５】
図６の（Ａ）では、幅１の移動平均を示している。幅１の移動平均は、元データと同一となる。たとえば、０からＷ−１内の間の値をとるｉを用いると、ＴＭＰ［ｉ］は、ＩＮ［Ｙ］［ｉ］の値が格納されている。次に、図６の（Ｂ）では、幅２の移動平均を示している。画像変換装置１００は、幅１の移動平均を格納したＴＭＰに、元画像の対象の行内にある次の画素の値を追加して、幅２の移動平均を生成する。たとえば、画像変換装置１００は、幅１の移動平均を格納したＴＭＰ［ｉ＋１］に、ＩＮ［Ｙ］［ｉ］の値を追加する。続けて、図６の（Ｃ）では、幅３の移動平均を示している。たとえば、画像変換装置１００は、幅２の移動平均を格納したＴＭＰ［ｉ＋２］に、ＩＮ［Ｙ］［ｉ］の値を追加する。
【００５６】
結果、ＴＭＰ［ｉ＋２］は、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］、ＩＮ［Ｙ］［ｉ＋２］という３つの画素の平均値となる。同様に、ＴＭＰ［ｉ＋１］は、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］という３つの画素の平均値となり、ＴＭＰ［ｉ］は、ＩＮ［Ｙ］［ｉ−２］、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］という３つの画素の平均値となる。
【００５７】
同様に、画像変換装置１００は、幅４、幅５、幅６、幅７の移動平均を生成する。このように、幅の大きい移動平均は、幅の小さい移動平均を用いて求めることができる。また、幅の小さい移動平均を用いて幅の大きい移動平均を求めた時の計算量は、画素の値を順に追加していった時の計算量より少なくすることができる。たとえば、幅７の移動平均は、既に幅３の移動平均を生成していれば、４回の計算で済む。
【００５８】
以上より、図６で説明した移動平均について、ＴＭＰ［ｉ］は、ＩＮ［Ｙ］［ｉ−２］、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］という３つの画素の平均値となる。このように、図６で求めたＴＭＰ［ｉ］は、ｘ座標が同一の画素の値と、ｘ軸の負の方向にある隣の画素と、さらに隣の画素との平均値となっている。図６で説明した移動平均では、移動平均の処理を単純化するために、移動平均の幅が大きくなる都度、ｘ軸の正の方向にある隣の画素を次々に追加している。ｘ軸の正の方向にある隣の画素を次々に追加する処理は、正の方向にある隣の画素を追加し、次は負の方向にある隣の画素を追加し、という処理に比べて、処理内容が単純となる。
【００５９】
しかし、図５では、画素ＯＵＴ［Ｙ＋３］［ｉ］は、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］、という、ｘ座標が同一の画素の値と、同一の画素のｘ軸方向の両隣の画素の移動平均を追加するということを説明している。このように、画素ＯＵＴ［Ｙ＋３］［ｉ］に影響を与える画素とＴＭＰ［ｉ］に影響を与える画素が図５と図６でずれている。辻褄を合わせるため、画像変換装置１００は、ＴＭＰを画素ＯＵＴ［Ｙ＋３］に追加する場合、ＴＭＰをずらして追加する。ＴＭＰの追加の動作例を、図７にて説明する。
【００６０】
図７は、画像変換処理の動作例を示す説明図（その３）である。図７では、幅３の移動平均ＴＭＰを追加する際の例を示す。画像変換装置１００は、絞り形状テーブル３１０の幅３となるレコード４０１−３を参照して、ＴＭＰの各画素の値を、ＯＵＴ［Ｙ＋３］に追加する。このとき、画像変換装置１００は、ＴＭＰを、レコード４０１−３のｘフィールドの値となる−１画素分オフセットして、ＯＵＴ［Ｙ＋３］に追加する。たとえば、画像変換装置１００は、ＯＵＴ［Ｙ＋３］［ｉ］に、ＴＭＰ［ｉ＋１］の値を追加する。図６の説明より、ＴＭＰ［ｉ＋１］は、ＩＮ［Ｙ］［ｉ−１］、ＩＮ［Ｙ］［ｉ］、ＩＮ［Ｙ］［ｉ＋１］という３つの画素の平均値であったため、図５にて説明した移動平均を追加することができたことになる。
【００６１】
続けて、画像変換装置１００は、ＴＭＰの各画素の値を、ＯＵＴ［Ｙ−３］にも追加する。このように、画像変換装置１００は、ある幅の移動平均を追加する行が複数ある場合、ある幅の移動平均の結果を複数の行に追加することになるため、画素ごとに影響を与える画素を追加していく方法より計算量を少なくすることできる。次に、図８〜図１３を用いて、図５〜図７にて説明した動作を行うフローチャートについて説明する。
【００６２】
図８は、ｘ軸方向に走査する場合の画像変換処理手順の一例を示すフローチャートである。画像変換処理は、元画像をぼかし画像に変換する処理である。始めに、画像変換装置１００は、絞り形状テーブル３１０を参照して、指定された絞り形状に応じた走査方向を選択する（ステップＳ８０１）。続けて、画像変換装置１００は、初期化処理を実行する（ステップＳ８０２）。初期化処理は、走査方向に応じて処理内容の一部が変化する。ｘ軸方向に走査する場合の初期化処理の詳細については、図９にて説明する。
【００６３】
次に、画像変換装置１００は、１走査線に対する、光エネルギ値変換処理を実行する（ステップＳ８０３）。光エネルギ値変換処理は、走査方向によって処理内容が異なる。ｘ軸方向に走査する場合の光エネルギ値変換処理の詳細については、図１０にて説明する。
【００６４】
次に、画像変換装置１００は、１走査線に対する、光拡散処理を実行する（ステップＳ８０４）。光拡散処理は、走査方向によって処理内容が異なる。ｘ軸方向に走査する場合の光拡散処理の詳細については、図１１、図１２にて説明する。
【００６５】
続けて、画像変換装置１００は、全ての走査線に対して処理したか否かを判断する（ステップＳ８０５）。ステップＳ８０５の具体的な処理は、走査方向によって異なる。具体的な処理内容は、それぞれ図１２、図２１、図２６にて説明する。まだ処理していない走査線がある場合（ステップＳ８０５：Ｎｏ）、画像変換装置１００は、ステップＳ８０３の処理に移行する。全ての走査線に対して処理した場合（ステップＳ８０５：Ｙｅｓ）、画像変換装置１００は、ＲＧＢ値変換処理を実行する（ステップＳ８０６）。ＲＧＢ値変換処理については、図１３にて説明する。
【００６６】
ステップＳ８０６の実行終了後、画像変換装置１００は、画像変換処理を終了する。画像変換処理を実行することにより、画像変換装置１００は、元画像からぼかし画像を変換することができる。
【００６７】
図９は、ｘ軸方向に走査する場合の初期化処理手順の一例を示すフローチャートである。ｘ軸方向に走査する場合の初期化処理は、ｘ軸方向に走査する場合に、画像変換処理で用いる変数、配列、構造体を初期化する処理である。
【００６８】
なお、図９に示すフローチャートで用いる元画像は、グレースケールでもよいし、ＲＧＢ３つの数値を持つ構造体でもよい。元画像がＲＧＢ３つの数値を持つ場合、画像変換装置１００は、元画像となるＩＮやぼかし画像となるＯＵＴへの処理、後述する光エネルギ値ＥＮＧや一時記憶領域ＬＩＮＥ１、ＬＩＮＥ２への処理をＲＧＢ合わせて三回行ってもよい。
【００６９】
始めに、画像変換装置１００は、元画像の各画素をＩＮ［Ｈ］［Ｗ］という二次元配列に格納する（ステップＳ９０１）。次に、画像変換装置１００は、ぼかし画像の各画素を格納する二次元配列として、ＯＵＴ［Ｈ］［Ｗ］を確保する（ステップＳ９０２）。続けて、画像変換装置１００は、絞り形状テーブル３１０の各レコードの値を、ＴＢＬ［Ｓ］という構造体の配列に格納する（ステップＳ９０３）。Ｓは、絞り形状テーブル３１０のレコード数が格納された定数である。
【００７０】
具体的に、構造体ＴＢＬは、ｘ、ｙ、ｗという３つの要素を持つ。また、画像変換装置１００は、Ｗ＋ＴＢＬ［Ｓ−１］．ｗの値をＷ２という変数に格納する（ステップＳ９０４）。絞り形状テーブル３１０には、ｗの小さい順に格納されているため、任意の整数Ｎ（Ｎ＜Ｓ）に対し常にＴＢＬ［Ｎ−１］．ｗ≦ＴＢＬ［Ｎ］．ｗが成り立つ。したがって、ＴＢＬ［Ｓ−１］．ｗは、ｗの最大値となる。
【００７１】
次に、画像変換装置１００は、光エネルギ値を記憶する二次元配列ＥＮＧ［Ｈ］［Ｗ］を０で初期化する（ステップＳ９０５）。同様に、画像変換装置１００は、各画素に光エネルギ値が追加された回数を示す二次元配列ＣＮＴ［Ｈ］［Ｗ］を０で初期化する（ステップＳ９０６）。続けて、画像変換装置１００は、最初に処理する画素列として、Ｙに０を格納する（ステップＳ９０７）。ステップＳ９０７の実行終了後、画像変換装置１００は、ｘ軸方向に走査する場合の初期化処理を終了する。ｘ軸方向に走査する場合の初期化処理を実行することにより、画像変換装置１００は、画像変換処理で用いる変数、配列、構造体を初期化できる。
【００７２】
図１０は、ｘ軸方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。ｘ軸方向に走査する場合の光エネルギ値変換処理は、ｘ軸方向に走査する場合に、１走査線分となる一行分の画素の値について、ＲＧＢ値から光エネルギ値に変換する処理である。
【００７３】
始めに、画像変換装置１００は、Ｘを０に初期化する（ステップＳ１００１）。次に、画像変換装置１００は、ＩＮ［Ｙ］［Ｘ］の光エネルギ値を算出し、光エネルギ値を変数ｅに格納する（ステップＳ１００２）。具体的な光エネルギ値の算出式として、たとえば、画像変換装置１００は、下記（１）式を用いて、ＲＧＢ値から光エネルギ値を算出する。
【００７４】
光エネルギ値＝ｅｘｐ（ＩＮ［Ｙ］［Ｘ］／ｋ−ｂ）  …（１）
【００７５】
ただし、ｋとｂは定数である。たとえば、ｋ＝４０、ｂ＝−４．５となる。ｅｘｐは、自然体数の底を引数でべき乗した値を返す関数である。光エネルギ値は何度も利用するため、大きさがＷとなるＬＩＮＥ１と、大きさがＷ２となるＬＩＮＥ２という配列を確保する。具体的に、画像変換装置１００は、ｅの値を一時記憶領域となるＬＩＮＥ１［Ｘ］とＬＩＮＥ２［Ｘ］に格納する（ステップＳ１００３）。ＬＩＮＥ１［Ｘ］とＬＩＮＥ２［Ｘ］には、幅１の移動平均が格納されたことになる。以降の処理にて、ＬＩＮＥ２は、幅２、幅３、…、の移動平均を格納していくことになり、ＬＩＮＥ１は、幅１の移動平均を持ち続けることになる。
【００７６】
続けて、画像変換装置１００は、大きさＷ２の配列ＬＣＮＴのＬＣＮＴ［Ｘ］に１を格納する（ステップＳ１００４）。ＬＣＮＴは、ＬＩＮＥ２の各要素が何回足されたかを示す変数である。次に、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１００５）。続けて、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１００６）。ＸがＷより小さい場合（ステップＳ１００６：Ｙｅｓ）、画像変換装置１００は、ステップＳ１００２の処理に移行する。ＸがＷ以上である場合（ステップＳ１００６：Ｎｏ）、ＬＩＮＥ２とＬＣＮＴはＷより大きなＷ２の大きさを持つため、画像変換装置１００は、ＬＩＮＥ２［Ｘ］に０を格納する（ステップＳ１００７）。さらに、画像変換装置１００は、ＬＣＮＴ［Ｘ］に０を格納する（ステップＳ１００８）。
【００７７】
次に、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１００９）。続けて、画像変換装置１００は、ＸがＷ２より小さいか否かを判断する（ステップＳ１０１０）。ＸがＷ２より小さい場合（ステップＳ１０１０：Ｙｅｓ）、画像変換装置１００は、ステップＳ１００７の処理に移行する。ＸがＷ２以上である場合（ステップＳ１０１０：Ｎｏ）、画像変換装置１００は、ｘ軸方向に走査する場合の光エネルギ値変換処理を終了する。ｘ軸方向に走査する場合の光エネルギ値変換処理を実行することにより、画像変換装置１００は、１走査線分となる一行分の画素の光エネルギ値を得ることができる。
【００７８】
図１１は、ｘ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。ｘ軸方向に走査する場合の光拡散処理は、ｘ軸方向に走査する場合に、１走査線分となる一行分の各画素の光エネルギ値を拡散していく処理である。具体的に、図１１に示すフローチャートでは、移動平均を求めることにより、一行分の各画素の光エネルギ値をｘ軸方向に拡散する処理であり、図１１に示すフローチャートでは、各画素の光エネルギ値をｙ軸方向に拡散する処理である。
【００７９】
画像変換装置１００は、移動平均の幅を示すＺに１を格納する（ステップＳ１１０１）。次に、画像変換装置１００は、絞り形状テーブル３１０の処理中のレコードのインデックスを示すＩに０を格納する（ステップＳ１１０２）。Ｉを指定することにより、画像変換装置１００は、元画像ＩＮから第１の画素列を抽出することになる。ステップＳ１１０２の実行後、または後述する図１２のステップＳ１２１１：Ｙｅｓとなった後、画像変換装置１００は、Ｘに０を格納する（ステップＳ１１０３）。次に、画像変換装置１００は、ＬＩＮＥ２に、追加する画素のオフセット値を示すＪにＺの値を格納する（ステップＳ１１０４）。
【００８０】
まずぶれ量が増加したかを確認するため、画像変換装置１００は、ＪがＴＢＬ［Ｉ］．ｗより小さいか否かを判断する（ステップＳ１１０５）。ＪがＴＢＬ［Ｉ］．ｗより小さい場合（ステップＳ１１０５：Ｙｅｓ）、画像変換装置１００は、Ｊの値をインクリメントする（ステップＳ１１０６）。Ｊの値が更新されたことにより、画像変換装置１００は、Ｘ＋Ｊで指定されるＩＮ［Ｙ］［Ｘ＋Ｊ］を、第１の画素や第２の画素に影響を与える拡散元画素として特定している。したがって、画像変換装置１００は、ＬＩＮＥ２［Ｘ＋Ｊ］とＬＩＮＥ１［Ｘ］との加算結果を、ＬＩＮＥ２［Ｘ＋Ｊ］に格納する（ステップＳ１１０７）。続けて、画像変換装置１００は、ＬＣＮＴ［Ｘ＋Ｊ］の値をインクリメントする（ステップＳ１１０８）。次に、画像変換装置１００は、ステップＳ１１０５の処理に移行する。
【００８１】
ＪがＴＢＬ［Ｉ］．ｗ以上である場合（ステップＳ１１０５：Ｎｏ）、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１１０９）。次に、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１１１０）。ＸがＷより小さい場合（ステップＳ１１１０：Ｙｅｓ）、画像変換装置１００は、ステップＳ１１０４の処理に移行する。ＸがＷ以上である場合（ステップＳ１１１０：Ｎｏ）、画像変換装置１００は、ＺにＴＢＬ［Ｉ］．ｗの値を格納する（ステップＳ１１１１）。続けて、画像変換装置１００は、図１２に示すステップＳ１２０１の処理に移行する。
【００８２】
図１２は、ｘ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。ＬＩＮＥ２を縦方向にどれだけオフセットして加算するかは  ＴＢＬ［Ｉ］．ｙ  にて示されるため、画像変換装置１００は、加算すべき行を示すＹ２に、ＹとＴＢＬ［Ｉ］．ｙとの加算結果を格納する（ステップＳ１２０１）。次に、画像変換装置１００は、Ｙ２が０未満であるか、またはＹ２がＨ以上であるか否かを判断する（ステップＳ１２０２）。ステップＳ１２０２の処理は、Ｙ２が画面内にあるかを確認する処理となる。また、図１２のステップＳ１２０２で用いた「｜｜」は、論理和を算出する演算子である。
【００８３】
Ｙ２が０以上であり、かつＹ２がＨ未満である場合（ステップＳ１２０２：Ｎｏ）、画像変換装置１００は、Ｘに０を格納する（ステップＳ１２０３）。次に、画像変換装置１００は、参照する画素のｘ座標の位置を示すＸ２に、ＸとＴＢＬ［Ｉ］．ｘの加算結果を格納する（ステップＳ１２０４）。ＴＢＬ［Ｉ］．ｘは、ぶれ開始位置となる左端の画素のｘ行における位置が格納されているため、画像変換装置１００は、左端の画素からの画素数を取得することになる。続けて、画像変換装置１００は、Ｘ２が０より小さいか、またはＸ２がＷ２以上であるか否かを判断する（ステップＳ１２０５）。ステップＳ１２０５の処理は、Ｘ２が画面内にあるかを確認する処理となる。
【００８４】
Ｘ２が０以上であり、かつＸ２がＷ２未満である場合（ステップＳ１２０５：Ｎｏ）、画像変換装置１００は、ＥＮＧ［Ｙ２］［Ｘ］とＬＩＮＥ２［Ｘ２］の加算結果を、ＥＮＧ［Ｙ２］［Ｘ］に格納する（ステップＳ１２０６）。さらに、画像変換装置１００は、ＣＮＴ［Ｙ２］［Ｘ］とＬＣＮＴ［Ｘ２］の加算結果を、ＣＮＴ［Ｙ２］［Ｘ］に格納する（ステップＳ１２０７）。
【００８５】
ステップＳ１２０７の処理後か、Ｙ２が０未満であるかまたはＹ２がＨ以上である場合か（ステップＳ１２０２：Ｙｅｓ）、Ｘ２が０より小さいかまたはＸ２がＷ２以上である場合（ステップＳ１２０５：Ｙｅｓ）、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１２０８）。続けて、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１２０９）。ＸがＷより小さい場合（ステップＳ１２０９：Ｙｅｓ）、画像変換装置１００は、ステップＳ１２０４の処理に移行する。
【００８６】
ＸがＷ以上である場合（ステップＳ１２０９：Ｎｏ）、画像変換装置１００は、Ｉの値をインクリメントする（ステップＳ１２１０）。Ｉの値をインクリメントすることにより、画像変換装置１００は、元画像ＩＮから、絞り形状と連続して重なる画素数が第１の画素列以上の第２の画素列を抽出することになる。次に、画像変換装置１００は、ＩがＳより小さいか否かを判断する（ステップＳ１２１１）。ＩがＳより小さい場合（ステップＳ１２１１：Ｙｅｓ）、画像変換装置１００は、図１１のステップＳ１１０３に移行する。ＩがＳ以上である場合（ステップＳ１２１１：Ｎｏ）、画像変換装置１００は、Ｙの値をインクリメントする（ステップＳ１２１２）。ステップＳ１２１２の処理後、画像変換装置１００は、ｘ軸方向に走査する場合の光拡散処理を終了する。
【００８７】
ｘ軸方向に走査する場合の光拡散処理の終了後、画像変換装置１００は、ステップＳ８０５の処理となる、ＹがＨ未満であるか否かを判断することにより、「全ての走査線に対して処理したか」を判断する。ＹがＨ未満であれば、まだ処理していない走査線があることになり、画像変換装置１００は、ステップＳ８０５：Ｎｏの処理を実行する。また、ＹがＨ以上であれば、全ての走査線に対して処理したことになり、ステップＳ８０５：Ｙｅｓの処理を実行する。
【００８８】
ｘ軸方向に走査する場合の光拡散処理を実行することにより、画像変換装置１００は、１走査線分となる一行分の各画素の光エネルギ値を、ｘ方向とｙ方向に拡散させることができる。
【００８９】
図１３は、ＲＧＢ値変換処理手順の一例を示すフローチャートである。ＲＧＢ値変換処理は、光エネルギ値からＲＧＢ値に変換する処理である。なお、ＲＧＢ値変換処理に至った段階にて、光エネルギ値ＥＮＧと、ＥＮＧの各要素が何回足された値かを示す情報ＣＮＴとが完成されている。
【００９０】
始めに、画像変換装置１００は、Ｙに０を格納する（ステップＳ１３０１）。次に、画像変換装置１００は、Ｘに０を格納する（ステップＳ１３０２）。次に、画像変換装置１００は、ＥＮＧ［Ｙ］［Ｘ］をＣＮＴ［Ｙ］［Ｘ］で除算した除算結果を、ｅに格納する（ステップＳ１３０３）。ステップＳ１３０３の処理により、追加された光エネルギ値の平均を求めることができる。続けて、画像変換装置１００は、ｅのＲＧＢ値をＯＵＴ［Ｙ］［Ｘ］に格納する（ステップＳ１３０４）。具体的なＲＧＢ値の算出式として、たとえば、画像変換装置１００は、下記（２）式を用いて、光エネルギ値からＲＧＢ値を算出する。
【００９１】
ＲＧＢ値＝ｋ（ｂ＋ｌｏｇ（ｅ））  …（２）
【００９２】
ただし、ｋとｂは、（１）式と同一の定数である。ｌｏｇは、引数の自然対数を返す関数である。次に、画像変換装置１００は、Ｘの値をインクリメントする（ステップＳ１３０５）。続けて、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１３０６）。ＸがＷより小さい場合（ステップＳ１３０６：Ｙｅｓ）、画像変換装置１００は、ステップＳ１３０３の処理に移行する。ＸがＷ以上である場合（ステップＳ１３０６：Ｎｏ）、画像変換装置１００は、Ｙの値をインクリメントする（ステップＳ１３０７）。次に、画像変換装置１００は、ＹがＨより小さい否かを判断する（ステップＳ１３０８）。ＹがＨより小さい場合（ステップＳ１３０８：Ｙｅｓ）、画像変換装置１００は、ステップＳ１３０２の処理に移行する。ＹがＨ以上である場合（ステップＳ１３０８：Ｎｏ）、画像変換装置１００は、ＲＧＢ値変換処理を終了する。ＲＧＢ値変換処理を実行することにより、画像変換装置１００は、ぼかし画像を得ることができる。
【００９３】
以上、図４〜図１３では、絞り形状テーブル３１０を用いて画像変換処理を行う例について説明している。画像変換装置１００は、絞り形状テーブル３１０を用いずに画像変換処理を実行することもできる。以下、図１４〜図１６を用いて、絞り形状テーブル３１０を用いない場合の画像変換処理について説明する。
【００９４】
図１４は、絞り形状テーブルを用いない場合の画像変換処理の動作例を示す説明図である。図１４の（Ａ）では、絞り形状１４００が６角形となる場合の例を示している。ぶれ量ｗは、ＸとＹとの関係によって求められる。絞り形状１４００の一辺をＳとする。したがって、ｗの最大値は、（√３）・Ｓとなる。ここで、（√ｘ）は、ｘの正の平方根を示す。また、斜辺１４０１のｘとｙの関係式は、ｙ＝−（√３）／３ｘ＋Ｓとなり、斜辺１４０２のｘとｙの関係式は、ｙ＝（√３）／３ｘ＋Ｓとなる。ＹがＳ／２以上である場合、ｘは、−（√３）（Ｓ−ｙ）となる。また、ｙが０より大きくＳ／２未満の場合、ｘは、（√３）／２・Ｓとなる。
【００９５】
図１４の（Ｂ）では、ぶれ量を格納する一時記憶領域ＬＩＮＥ１の内容を示している。ｄ＝（√３）・（Ｓ−ｙ）とすると、ｗは、２ｄ＋１＝１−２ｘの大きさとなる。ＬＩＮＥ１［０］には、ｘ＝−ｄにて示す画素の値が格納される。
【００９６】
次に、絞り形状テーブル３１０を用いない場合の画像変換処理のフローチャートについて説明する。絞り形状テーブル３１０を用いない場合の画像変換処理は、図８〜図１０、図１２で示したフローチャートの部分は同一となるため、説明を省略する。したがって、図１５、図１６を用いて、絞り形状テーブル３１０を用いない場合の光拡散処理のフローチャートについて説明する。
【００９７】
図１５は、絞り形状テーブルを用いない場合の光拡散処理手順の一例を示すフローチャート（その１）である。図１５に示すステップＳ１５１０〜ステップＳ１５１３は、図１１に示したステップＳ１１０６〜ステップＳ１１０９と同一の処理であるため、説明を省略する。
【００９８】
始めに、画像変換装置１００は、移動平均の幅を示すＺに１を格納する（ステップＳ１５０１）。次に、画像変換装置１００は、絞り形状内の処理する対象行を示す変数Ｉに２Ｓの算出結果を格納する（ステップＳ１５０２）。Ｉが偶数となる場合、処理行がＳ／２行より上であり、Ｉが奇数である場合、処理行が（Ｓ＋１）／２行以下を示すものとする。
【００９９】
ステップＳ１５０２の処理が終了した場合、または図１６にて後述するステップＳ１６１１の処理が終了した場合、画像変換装置１００は、Ｉが奇数か否かを判断する（ステップＳ１５０３）。Ｉが偶数である場合（ステップＳ１５０３：Ｎｏ）、画像変換装置１００は、今の行と影響を与える行の相対位置を示す変数ｙにＩ／２の算出結果を格納する（ステップＳ１５０４）。次に、画像変換装置１００は、ｙがＳ／２以下か否かを判断する（ステップＳ１５０５）。ｙがＳ／２以下である場合（ステップＳ１５０５：Ｙｅｓ）、画像変換装置１００は、ぶれ開始位置を示すｘに−（√３）（Ｓ−ｙ）の算出結果を格納する（ステップＳ１５０６）。続けて、画像変換装置１００は、ぶれ量となるｗに、１−２ｘの算出結果を格納する（ステップＳ１５０７）。
【０１００】
次に、画像変換装置１００は、ＪにＺの値を格納する（ステップＳ１５０８）。続けて、画像変換装置１００は、Ｊがｗより小さいか否かを判断する（ステップＳ１５０９）。Ｊがｗより小さい場合（ステップＳ１５０９：Ｙｅｓ）、画像変換装置１００は、ステップＳ１５１０の処理に移行する。Ｊがｗ以上である場合（ステップＳ１５０９：Ｎｏ）、画像変換装置１００は、ステップＳ１５１３の処理に移行する。
【０１０１】
ステップＳ１５１３の処理終了後、画像変換装置１００は、ＸがＷより小さいか否かを判断する（ステップＳ１５１４）。ＸがＷより小さい場合（ステップＳ１５１４：Ｙｅｓ）、画像変換装置１００は、ステップＳ１５０８の処理に移行する。ＸがＷ以上である場合（ステップＳ１５１４：Ｎｏ）、画像変換装置１００は、Ｚにｗの値を格納する（ステップＳ１５１５）。Ｉが奇数である場合（ステップＳ１５０３：Ｙｅｓ）、画像変換装置１００は、ｙに−ｙの値を格納する（ステップＳ１５１６）。
【０１０２】
ステップＳ１５１５、またはステップＳ１５１６の終了後か、ｙがＳ／２以下でない場合（ステップＳ１５０５：Ｎｏ）、画像変換装置１００は、図１６に示すステップＳ１６０１の処理に移行する。
【０１０３】
図１６は、絞り形状テーブルを用いない場合の光拡散処理手順の一例を示すフローチャート（その２）である。図１６に示す各ステップのうちの、ステップＳ１６０１、ステップＳ１６０４、ステップＳ１６１０、ステップＳ１６１１が、図１２で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理から置き換わっている。他のステップについては図１２で説明した処理と同一であるため、説明を省略する。
【０１０４】
始めに、画像変換装置１００は、Ｙ２にＹとｙの加算結果を格納する（ステップＳ１６０１）。ステップＳ１６０３の処理終了後、画像変換装置１００は、Ｘ２にＸとｘの加算結果を格納する（ステップＳ１６０４）。ステップＳ１６０９：Ｎｏとなった場合、画像変換装置１００は、Ｉの値をデクリメントする（ステップＳ１６１０）。続けて、画像変換装置１００は、Ｉが０以上であるか否かを判断する（ステップＳ１６１１）。Ｉが０以上である場合（ステップＳ１６１１：Ｙｅｓ）、画像変換装置１００は、図１５に示したステップＳ１５０３の処理に移行する。Ｉが０未満である場合（ステップＳ１６１１：Ｎｏ）、画像変換装置１００は、ステップＳ１６１２の処理に移行する。
【０１０５】
（ｙ軸方向に走査する例）
以上、図４〜図１６では、ｘ軸方向に走査する場合の画像生成処理について説明した。画像変換装置１００は、ｙ軸方向に走査して、画像変換処理を行ってもよい。以下、図１７〜図２１を用いて、ｙ軸方向に走査する場合の画像変換処理について説明する。
【０１０６】
図１７は、絞り形状の第２の例と絞り形状テーブルの記憶内容の第２の例を示す説明図である。図１７の（Ａ）では、ｘｙ平面上での絞り形状１７００を示している。図１７に示すように、絞り形状１７００は、ハート型の形状をしている。絞り形状１７００は、ｘ軸方向に走査すると、複数の領域に分かれることになる。図１７の（Ｂ）では、絞り形状１７００を、ｘ軸方向に走査する場合の絞り形状テーブル３１０＿ｘの記憶内容の例を示している。絞り形状テーブル３１０＿ｘは、レコード１７０１−１〜レコード１７０１−１１を記憶している。また、絞り形状テーブル３１０＿ｘは、走査方向としてｘ軸方向を関連付けて記憶している。ｘ軸方向に走査する場合、ｙ＝３における走査線と、ｙ＝４における走査線が、複数の部分に分かれることになる。このように走査線が複数に分かれても、図８〜図１３にて示したフローチャートで実行することができる。
【０１０７】
また、図１７の（Ｃ）では、絞り形状１７００を、ｙ軸方向に走査する場合の絞り形状テーブル３１０＿ｙの記憶内容の例を示している。絞り形状テーブル３１０＿ｙは、レコード１７０２−１〜レコード１７０２−９を記憶している。また、絞り形状テーブル３１０＿ｙは、走査方向としてｙ軸方向を関連付けて記憶している。ｙ軸方向に走査する場合、走査線が複数の部分に分かれることがなくなる。したがって、絞り形状テーブル３１０＿ｙのレコード数は、絞り形状テーブル３１０＿ｘより少なくなる。レコード数が少ないと、ループの回数が少なくなるため、処理量を減少することができる。
【０１０８】
次に、ｙ軸方向に走査する場合の画像変換処理のフローチャートについて説明する。ｙ軸方向に走査する場合の画像変換処理は、図１３で示したＲＧＢ値変換処理のフローチャートの部分は同一となるため、説明を省略する。以下、図１８〜図２１において、ｙ軸方向に走査する場合の、初期化処理、光エネルギ値変換処理、光拡散処理について説明する。
【０１０９】
図１８は、ｙ軸方向に走査する場合の初期化処理手順の一例を示すフローチャートである。ｙ軸方向に走査する場合の初期化処理は、ｙ軸方向に走査する場合に、画像変換処理で用いる変数、配列、構造体を初期化する処理である。また、図１８で示すステップＳ１８０４、ステップＳ１８０７が、図９で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理から置き換わっている。他のステップについては図９で説明した処理と同一であるため、説明を省略する。
【０１１０】
ステップＳ１８０３の処理終了後、画像変換装置１００は、ＨとＴＢＬ［Ｓ−１］．ｗの加算結果を、Ｈ２という変数に格納する（ステップＳ１８０４）。また、ステップＳ１８０６の処理終了後、画像変換装置１００は、最初に処理する画素列として、Ｘに０を格納する（ステップＳ１８０７）。
【０１１１】
図１９は、ｙ軸方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。ｙ軸方向に走査する場合の光エネルギ値変換処理は、ｙ軸方向に走査する場合に、１走査線分となる一列分の画素の値について、ＲＧＢ値から光エネルギ値に変換する処理である。また、図１９で示す各ステップのうち、ステップＳ１９０１、ステップＳ１９０３〜ステップＳ１９１０は、図１０で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理の「Ｘ」が「Ｙ」に置き換わっている。さらに、ステップＳ１９０６は、ステップＳ１００６の「Ｗ」が「Ｈ」に置き換わっている。さらに、ステップＳ１９１０は、ステップＳ１０１０の「Ｗ２」が「Ｈ２」に置き換わっている。前述以外の変更点はないため、各ステップの説明を省略する。
【０１１２】
図２０は、ｙ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。ｙ軸方向に走査する場合の光拡散処理は、ｙ軸方向に走査する場合に、１走査線分となる一列分の各画素の光エネルギ値を拡散していく処理である。また、図２０で示す各ステップのうち、ステップＳ２００３、ステップＳ２００７〜ステップＳ２０１０は、図１１で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理の「Ｘ」が「Ｙ」に置き換わっている。さらに、ステップＳ２０１０は、ステップＳ１１１０の「Ｗ」が「Ｈ」に置き換わっている。前述以外の変更点はないため、各ステップの説明を省略する。
【０１１３】
図２１は、ｙ軸方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。図２１で示す各ステップのうち、ステップＳ２１０３、ステップＳ２１０８、ステップＳ２１０９、ステップＳ２１１２は、図１２で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理の「Ｘ」が「Ｙ」に置き換わっている。さらに、ステップＳ２１０９は、ステップＳ１２０９の「Ｗ」が「Ｈ」に置き換わっている。さらに、ステップＳ２１０１、ステップＳ２１０２、ステップＳ２１０４、ステップＳ２１０５について、図１２で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理から変更しているため、説明を行う。ステップＳ２１０６、ステップＳ２１０７については、ステップＳ１２０６、ステップＳ１２０７と同一の処理であるため、説明を省略する。
【０１１４】
始めに、画像変換装置１００は、Ｘ２に、ＸとＴＢＬ［Ｉ］．ｘの加算結果を格納する（ステップＳ２１０１）。次に、画像変換装置１００は、Ｘ２が０未満であるか、またはＸ２がＷ以上であるか否かを判断する（ステップＳ２１０２）。Ｘ２が０以上であり、かつＸ２がＷ未満である場合（ステップＳ２１０２：Ｎｏ）、画像変換装置１００は、ステップＳ２１０３の処理に移行する。Ｘ２が０未満であるかまたはＸ２がＷ以上である場合（ステップＳ２１０２：Ｙｅｓ）、画像変換装置１００は、ステップＳ２１０８の処理に移行する。
【０１１５】
ステップＳ２１０３の実行終了後、画像変換装置１００は、Ｙ２に、ＹとＴＢＬ［Ｉ］．ｙの加算結果を格納する（ステップＳ２１０４）。続けて、画像変換装置１００は、ＸＹ２が０より小さいか、またはＹ２がＨ２以上であるか否かを判断する（ステップＳ２１０５）。Ｙ２が０以上であり、かつＹ２がＨ２未満である場合（ステップＳ２１０５：Ｎｏ）、画像変換装置１００は、ステップＳ２１０６の処理に移行する。また、Ｙ２が０より小さいかまたはＹ２がＨ２以上である場合（ステップＳ２１０５：Ｙｅｓ）、ステップＳ２１０８の処理に移行する。
【０１１６】
また、ｙ軸方向に走査する場合の光拡散処理の終了後、画像変換装置１００は、ステップＳ８０５の処理となる、ＸがＷ未満であるか否かを判断することにより、「全ての走査線に対して処理したか」を判断する。ＸがＷ未満であれば、まだ処理していない走査線があることになり、画像変換装置１００は、ステップＳ８０５：Ｎｏの処理を実行する。また、ＸがＷ以上であれば、全ての走査線に対して処理したことになり、ステップＳ８０５：Ｙｅｓの処理を実行する。
【０１１７】
（斜め方向に走査する例）
以上、図１７〜図２１では、ｙ軸方向に走査する場合の画像生成処理について説明した。画像変換装置１００は、ｘ軸やｙ軸方向とは斜めの走査を行って、画像変換処理を行ってもよい。以下、図２２〜図２９を用いて、斜め方向の一例として、Ｙ＝−Ｘ方向に走査する場合の画像変換処理について説明する。なお、図２２〜図２９での説明では、説明の簡略化のため、Ｈ＞Ｗであることを前提とする。
【０１１８】
図２２は、Ｙ＝−Ｘ方向に走査する場合の画像変換処理の動作例を示す説明図である。図２２の（Ａ）は、横方向および縦方向よりＹ＝−Ｘ方向に走査した方がよい絞り形状２２００を示している。図２２には図示していないが、絞り形状２２００を記憶している絞り形状テーブル３１０は、走査方向としてＹ＝−Ｘ方向を関連付けて記憶している。図２２の（Ｂ）は、斜め方向に走査する場合の変数が示す位置を示している。Ｐは、現在の走査方向の画素列に含まれる画素数を示す。Ｑは、画素列内の対象となる画素の画素数を示す。Ｒは、画素列のインデックスを示している。
【０１１９】
図２２の（Ｃ）は、元画像ＩＮが、Ｗ＝４、Ｈ＝６とした場合の、各画素のＲとＱの値を示している。たとえば、ＩＮ［４］［１］は、Ｒ＝６であり、Ｑ＝１となる。また、画素列Ｒ＝６となる画素は、ＩＮ［５］［０］、ＩＮ［４］［１］、ＩＮ［３］［２］、ＩＮ［２］［３］の４つであるから、Ｐは４となる。
【０１２０】
図２２の（Ｄ）は、Ｒと、加算すべき画素列のインデックスを示すＲ２と、オフセットＲｏの位置を示している。また、図２２の（Ｅ）は、元画像ＩＮが、Ｗ＝４、Ｈ＝６とした場合の、Ｒ、Ｒ２、Ｒｏの関係を示している。Ｒ＝３、Ｒ２＝４である場合、Ｒｏは、−１となる。
【０１２１】
次に、Ｙ＝−Ｘ方向に走査する場合の画像変換処理のフローチャートについて説明する。Ｙ＝−Ｘ方向に走査する場合の画像変換処理は、図１３で示したＲＧＢ値変換処理のフローチャートの部分は同一となるため、説明を省略する。以下、図２３〜図２６において、Ｙ＝−Ｘ方向に走査する場合の、初期化処理、光エネルギ値変換処理、光拡散処理について説明する。
【０１２２】
図２３は、Ｙ＝−Ｘ方向に走査する場合の初期化処理手順の一例を示すフローチャートである。Ｙ＝−Ｘ方向に走査する場合の初期化処理は、Ｙ＝−Ｘ方向に走査する場合に、画像変換処理で用いる変数、配列、構造体を初期化する処理である。また、図２３で示すステップＳ２３０７が、図９で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理から置き換わっている。他のステップについては図９で説明した処理と同一であるため、説明を省略する。ステップＳ２３０６の処理終了後、画像変換装置１００は、Ｒに０を格納する（ステップＳ２３０７）。
【０１２３】
図２４は、Ｙ＝−Ｘ方向に走査する場合の光エネルギ値変換処理手順の一例を示すフローチャートである。Ｙ＝−Ｘ方向に走査する場合の光エネルギ値変換処理は、Ｙ＝−Ｘ方向に走査する場合に、１走査線分となる画素群の各画素の値について、ＲＧＢ値から光エネルギ値に変換する処理である。また、図２４で示す各ステップのうち、ステップＳ２４０５〜ステップＳ２４１２は、図１０のステップＳ１００３〜ステップＳ１０１０のうちの、ステップ番号の下２けたが２小さい番号の処理の「Ｘ」が「Ｑ」に置き換わっている。さらに、ステップＳ２４０８は、ステップＳ１００６の「Ｗ」が「Ｐ」に置き換わっている。
【０１２４】
始めに、画像変換装置１００は、Ｒを引数としてＰ取得処理を実行する（ステップＳ２４０１）。Ｐ取得処理の詳細は、図２７にて後述する。次に、画像変換装置１００は、Ｑに０を格納する（ステップＳ２４０２）。続けて、画像変換装置１００は、Ｒ、Ｑを引数として、Ｘ・Ｙ取得処理を実行する（ステップＳ２４０３）。
【０１２５】
図２５は、Ｙ＝−Ｘ方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その１）である。Ｙ＝−Ｘ方向に走査する場合の光拡散処理は、Ｙ＝−Ｘ方向に走査する場合に、１走査線分となる画素群の各画素の光エネルギ値を拡散していく処理である。また、また、図２５で示す各ステップのうち、ステップＳ２５０３、ステップＳ２５０７〜ステップＳ２５１０は、図１１で説明した各ステップのうちの、ステップ番号の下２けたが同一番号の処理の「Ｘ」が「Ｑ」に置き換わっている。さらに、ステップＳ２５１０は、ステップＳ１１１０の「Ｗ」が「Ｐ」に置き換わっている。前述以外の変更点はないため、各ステップの説明を省略する。
【０１２６】
図２６は、Ｙ＝−Ｘ方向に走査する場合の光拡散処理手順の一例を示すフローチャート（その２）である。図２６で示す各ステップのうち、ステップＳ２６１０、ステップＳ２６１１は、図１２で説明したステップＳ１２０８、ステップＳ１２０９の処理の「Ｘ」が「Ｑ」に置き換わっている。さらに、ステップＳ２６１４は、ステップＳ１２１２の「Ｙ」が「Ｒ」に置き換わっている。ステップＳ２６０７〜ステップＳ２６０９、ステップＳ２６１３の処理は、図１２で示したステップＳ１２０５〜ステップＳ１２０７、ステップＳ１２１１の処理と同一であるため、説明を省略する。以下、ステップＳ２６０１〜ステップＳ２６０６について、説明を行う。
【０１２７】
ステップＳ２５１１の実行終了後、画像変換装置１００は、ＲとＴＢＬ［Ｉ］．ｙとの加算結果をＲ２に格納する（ステップＳ２６０１）。次に、画像変換装置１００は、Ｒ、Ｒ２を引数としてＲｏ取得処理を実行する（ステップＳ２６０２）。Ｒｏ取得処理の詳細は、図２９にて説明する。続けて、画像変換装置１００は、Ｑに０を格納する（ステップＳ２６０３）。次に、画像変換装置１００は、ＱとＴＢＬ［Ｉ］．ｘとＲｏとの加算結果を、Ｑ２に格納する（ステップＳ２６０４）。続けて、画像変換装置１００は、Ｒ２、Ｑ２を引数としてＸ・Ｙ取得処理を実行する（ステップＳ２６０５）。Ｒ２、Ｑ２を引数としてＸ・Ｙ取得処理を実行することにより、画像変換装置１００は、Ｘ２、Ｙ２を取得できる。
【０１２８】
次に、画像変換装置１００は、Ｙ２が０より小さいか、またはＹ２がＨ以上か否かを判断する（ステップＳ２６０６）。Ｙ２が０以上であり、かつＹ２がＨ未満である場合（ステップＳ２６０６：Ｎｏ）、画像変換装置１００は、ステップＳ２６０７の処理に移行する。Ｙ２が０より小さいか、またはＹ２がＨ以上である場合（ステップＳ２６０６：Ｙｅｓ）、画像変換装置１００は、ステップＳ２６１０の処理に移行する。
【０１２９】
また、Ｙ＝−Ｘ方向に走査する場合の光拡散処理の終了後、画像変換装置１００は、ステップＳ８０５の処理となる、ＲがＨとＷの加算結果未満であるか否かを判断することにより、「全ての走査線に対して処理したか」を判断する。ＲがＨとＷの加算結果未満であれば、まだ処理していない走査線があることになり、画像変換装置１００は、ステップＳ８０５：Ｎｏの処理を実行する。また、ＲがＨとＷの加算結果以上であれば、全ての走査線に対して処理したことになり、ステップＳ８０５：Ｙｅｓの処理を実行する。
【０１３０】
図２７は、Ｐ取得処理手順の一例を示すフローチャートである。Ｐ取得処理は、Ｒを引数として、Ｐの値を出力する処理である。画像変換装置１００は、ＲがＷより小さいか否かを判断する（ステップＳ２７０１）。ＲがＷより小さい場合（ステップＳ２７０１：Ｙｅｓ）、画像変換装置１００は、ＰにＲの値を格納する（ステップＳ２７０２）。ＲがＷ以上である場合（ステップＳ２７０１：Ｎｏ）、続けて、画像変換装置１００は、ＲがＨより大きいか否かを判断する（ステップＳ２７０３）。ＲがＨ以下である場合（ステップＳ２７０３：Ｎｏ）、画像変換装置１００は、ＰにＷの値を格納する（ステップＳ２７０４）。ＲがＨより大きい場合（ステップＳ２７０３：Ｙｅｓ）、画像変換装置１００は、Ｐに、ＷとＨの加算結果に、Ｒを引いた結果を格納する（ステップＳ２７０５）。
【０１３１】
ステップＳ２７０２の処理か、ステップＳ２７０４の処理か、ステップＳ２７０５の処理かのいずれかを実行した後、画像変換装置１００は、Ｐ取得処理を終了する。Ｐ取得処理を実行することにより、画像変換装置１００は、Ｐの値を取得することができる。
【０１３２】
図２８は、Ｘ・Ｙ取得処理手順の一例を示すフローチャートである。Ｘ・Ｙ取得処理は、Ｒ、Ｑを引数として、Ｘ、Ｙの値を出力する処理である。画像変換装置１００は、ＲがＨ以下か否かを判断する（ステップＳ２８０１）。ＲがＨ以下である場合（ステップＳ２８０１：Ｙｅｓ）、画像変換装置１００は、ＸにＱの値を格納する（ステップＳ２８０２）。続けて、画像変換装置１００は、ＲからＱを引いた結果をＹに格納する（ステップＳ２８０３）。
【０１３３】
ＲがＨより大きい場合（ステップＳ２８０１：Ｎｏ）、画像変換装置１００は、Ｑ＋Ｒの加算結果から、Ｈを引いた減算結果を、Ｘに格納する（ステップＳ２８０４）。続けて、画像変換装置１００は、ＨからＱを引いた減算結果をＹに格納する（ステップＳ２８０５）。ステップＳ２８０３の処理か、ステップＳ２８０５の処理かを実行した後、画像変換装置１００は、Ｘ・Ｙ取得処理を終了する。Ｘ・Ｙ取得処理を実行することにより、画像変換装置１００は、ＸとＹの値を取得することができる。
【０１３４】
図２９は、Ｒｏ取得処理手順の一例を示すフローチャートである。Ｒｏ取得処理は、Ｒ、Ｒ２を引数として、Ｒｏの値を出力する処理である。画像変換装置１００は、ＲがＨ以下か否かを判断する（ステップＳ２９０１）。ＲがＨ以下である場合（ステップＳ２９０１：Ｙｅｓ）、続けて、画像変換装置１００は、Ｒ２がＨ以下か否かを判断する（ステップＳ２９０２）。Ｒ２がＨ以下である場合（ステップＳ２９０２：Ｙｅｓ）、画像変換装置１００は、ＲからＲ２を引いた減算結果をＲｏに格納する（ステップＳ２９０３）。
【０１３５】
ＲがＨ以下でない場合（ステップＳ２９０１：Ｎｏ）、続けて、画像変換装置１００は、Ｒ２がＨ以下か否かを判断する（ステップＳ２９０４）。Ｒ２がＨより大きい場合（ステップＳ２９０４：Ｎｏ）、画像変換装置１００は、Ｒ２からＲを引いた減算結果をＲｏに格納する（ステップＳ２９０５）。
【０１３６】
Ｒ２がＨ以下でない場合（ステップＳ２９０２：Ｎｏ）、またはＲ２がＨ以下である場合（ステップＳ２９０４：Ｙｅｓ）、画像変換装置１００は、Ｒ２とＲの加算結果から、２・Ｈを引いた減算結果をＲｏに格納する（ステップＳ２９０６）。ステップＳ２９０３か、ステップＳ２９０５か、ステップＳ２９０６かの処理を実行した後、画像変換装置１００は、Ｒｏ取得処理を終了する。Ｒｏ取得処理を実行することにより、画像変換装置１００は、Ｒｏの値を取得することができる。
【０１３７】
（同一の画素列を複数回走査する例）
図４〜図２９では、同一の画素列を複数回走査することがなかったが、同一の画素列を複数回走査してもよい。同一の画素列を複数回走査することにより、移動平均以外の拡散を実現することができる。同一の画素列を複数回走査する例について、図３０、図３１を用いて説明する。
【０１３８】
図３０は、絞り形状の第３の例と絞り形状テーブルの記憶内容の第３の例を示す説明図である。図３０の（Ａ）は、四角錐状に光が拡散する場合の拡散係数を示している。中央の部分は拡散量が大きく、外側に行くにつれ、拡散量が小さくなる。図３０の（Ｂ）は、四角錐状に拡散する場合の絞り形状テーブル３１０＿ｐの記憶内容の一例を示す。絞り形状テーブル３１０＿ｐは、レコード３００１−１〜レコード３００１−９を記憶している。
【０１３９】
図３１は、絞り形状の第４の例と絞り形状テーブルの記憶内容の第４の例を示す説明図である。図３１の（Ａ）は、ガウシアンブラーを行う際の光が拡散する様子を示している。図３１の（Ｂ）は、ガウシアンブラーを行う際の拡散係数を示している。図３１の（Ｃ）は、ガウシアンブラーを行う際の絞り形状テーブル３１０＿ｇの記憶内容の一例を示す。絞り形状テーブル３１０＿ｇは、レコード３１０１−１〜レコード３１０１−１５を記憶している。絞り形状テーブル３１０＿ｇは、ｘ、ｙ、ｗフィールドの他に、何倍で加算するという情報を格納するｎフィールドを有する。
【０１４０】
ｎフィールドの具体的な使用方法として、画像変換装置１００は、図１１のステップＳ１１０８の処理を、「ＣＮＴ［Ｙ２］［Ｘ］＋＝ＬＣＮＴ［Ｘ＋Ｊ］＊ＴＢＬ［Ｉ］．ｎ」に置き換えて実行する。さらに、画像変換装置１００は、図１２のステップＳ１２０６の処理を、「ＥＮＧ［Ｙ２］［Ｘ］＋＝ＬＩＮＥ２［Ｘ］＊ＴＢＬ［Ｉ］．ｎ」に置き換えて実行する。ｎフィールドを有することで、何度も同じフィールドを加算することがなくなるため、処理量を減らすことができる。
【０１４１】
（光エネルギ値とＲＧＢ値の変換）
続けて、光エネルギ値とＲＧＢ値の変換の処理について説明する。ステップＳ１００２で示したＲＧＢ値から光エネルギ値の変換処理と、ステップＳ１３０４で示した光エネルギ値からＲＧＢ値の変換処理は浮動小数点演算であるため、浮動小数点演算は整数演算と比べるとＣＰＵ負荷が高くなり、処理速度が遅くなる。したがって、ＲＧＢ値から光エネルギ値の変換処理と、光エネルギ値からＲＧＢ値の変換処理とについて、整数演算で行う方法について説明する。また、（１）式、（２）式について、ｋ＝４０、ｂ＝−４．５を用いて説明する。
【０１４２】
ＲＧＢ値から光エネルギ値の変換処理については、ＩＮ［Ｙ］［Ｘ］が０〜２５５の２５６通りであるため、変換テーブルを参照することで、高速に処理することができる。具体的には、画像変換装置１００は、ｅｘｐ（ｎ／４０＋４．５）について、ｎを０から２５５まで設定した際の出力値を、ｅｘｐｔｂｌ［ｎ＝２５６］に格納しておく。たとえば、ｘｐｔｂｌ＝［９０，９２，９５，９７，…，５２８３９］となる。そして、画像変換装置１００は、ＲＧＢ値から光エネルギ値を変換する際に、ｅｘｐｔｂｌ［ＩＮ［Ｙ］［Ｘ］］の値を取得する。
【０１４３】
ＲＧＢ値から光エネルギ値の変換処理については、（２）式のｅが大きくなるため、変換テーブルを用意することが現実的ではなくなる。この問題は、整数型のｎビット目が２のｎ乗を示していることを利用することにより、小さなテーブルと簡単な演算で解決できる。整数Ｅの最上位の非零ビット数をｎとし、ｎ−１，ｎ−２，ｎ−３…ビットの状態をａ，ｂ，ｃ，…とした場合、光エネルギ値Ｅの値は、下記（３）式で表現できる。
【０１４４】
Ｅ＝２＾ｎ＋ａ・２＾（ｎ−１）＋ｂ・２＾（ｎ−２）＋ｃ・２＾（ｎ−３）＋…  …（３）
【０１４５】
また、（３）式は、下記（４）式のように変形できる。
【０１４６】
Ｅ＝２＾ｎ（１＋ａ／２＋ｂ／４＋ｃ／８＋…）  …（４）
【０１４７】
これにより、ｌｏｇＥの値は、下記（５）式のように変形できる。
【０１４８】
ｌｏｇＥ＝ｎ・ｌｏｇ２＋ｌｏｇ（１＋ａ／２＋ｂ／４＋ｃ／８＋…）  …（５）
【０１４９】
ここで、ｌｏｇ２は定数であるため第一項は簡単な掛け算で計算できる。一方、第二項は、ａ，ｂ，ｃ，…の個数を決定することで分解能が定まり、テーブル参照で求めることができる。ｌｏｇ２は０．６９３と１以下であるため、そのままでは整数型で計算することは難しい。そこで、画像変換装置１００は、適当な値としてＭ倍して保持し、後で割る処理を行う。同様に、画像変換装置１００は、（ｌｏｇ（１＋ａ／２＋ｂ／４＋…））のテーブルも同じ倍率で作りまとめて割る処理を行う。ｌｏｇＥの演算ができたら、輝度Ｄは簡単に求めることができる。次に、図３２にて、前述したアルゴリズムに従ったフローチャートを示す。図３２にて示すフローチャートでは、ｋ＝４０，ｂ＝−４．５，Ｍ＝４とし、ｌｏｇテーブルの大きさを３２として説明する。
【０１５０】
図３２は、光エネルギ値からＲＧＢ値への変換処理手順の一例を示すフローチャート（その１）である。光エネルギ値からＲＧＢ値への変換処理は、光エネルギ値からＲＧＢ値を出力する処理である。光エネルギ値からＲＧＢ値への変換処理を実行する前に、画像変換装置１００は、ｌｏｇ（１＋ｎ／３２）＊４０＊４について、ｎを０から３１まで設定した際の出力値をｌｏｇｔｂｌ［ｎ＝３２］に格納しておく。変換処理の１番目として、画像変換装置１００は、まず光エネルギ値Ｅを（１＋ｅ／３２）・２＾ｍという形式に表現しなおす処理を行う。
【０１５１】
始めに、画像変換装置１００は、乗数ｍに０を格納する（ステップＳ３２０１）。さらに、画像変換装置１００は、２＾ｍを示す変数ｋに１を格納する（ステップＳ３２０２）。続けて、画像変換装置１００は、Ｅがｋ以上か否かを判断する（ステップＳ３２０３）。Ｅがｋ未満である場合（ステップＳ３２０３：Ｎｏ）、画像変換装置１００は、ｍの値をインクリメントする（ステップＳ３２０４）。さらに、画像変換装置１００は、ｋを１ビット左シフトした結果をｋに格納する（ステップＳ３２０５）。なお、図３２のステップＳ３２０５で示した"＜＜＝"は、右辺分のビット数で左辺を左シフトした値を、左辺に代入する演算子である。ステップＳ３２０５の処理終了後、画像変換装置１００は、ステップＳ３２０３の処理に移行する。
【０１５２】
Ｅがｋ以上である場合（ステップＳ３２０３：Ｙｅｓ）、２＾ｍがＥより大きいため、画像変換装置１００は、ｍの値をデクリメントする（ステップＳ３２０６）。ステップＳ３２０６まで処理を実行することによりｍが得られた。引き続き、図３３にて、ｅを求める。
【０１５３】
図３３は、光エネルギ値からＲＧＢ値への変換処理手順の一例を示すフローチャート（その２）である。画像変換装置１００は、ｅにＥの値を格納する（ステップＳ３３０１）。次に、ステップＳ３３０２〜ステップＳ３３０５の処理は、ｅのｍ−１ビットから下５ビットで表現される整数を取り出す処理である。
【０１５４】
ステップＳ３３０１の実行終了後、画像変換装置１００は、ｍが５未満であるか否かを判断する（ステップＳ３３０２）。ステップＳ３３０２の処理は、ｅが二進数でいう６桁以上の数かどうかを判定する処理となる。なお、ｍは０，１，２，…と数えているため桁数はｍ＋１で表現される。
【０１５５】
ｍが５以上である場合（ステップＳ３３０２：Ｎｏ）、画像変換装置１００は、ｍ−５ビット分ｅを右シフトした値を、ｅに格納する（ステップＳ３３０３）。ステップＳ３３０３の処理により、ｅのｍ−１ビット目が５桁目になる。また、図３３のステップＳ３３０３で示した"＞＞＝"は、右辺分のビット数で左辺を右シフトした値を、左辺に代入する演算子である。また、ｍが５未満である場合（ステップＳ３３０２：Ｙｅｓ）、画像変換装置１００は、５−ｍ分ｅを左シフトした値を、ｅに格納する（ステップＳ３３０４）。ステップＳ３３０３、またはステップＳ３３０４の処理により、ｅの最上位ビットが６桁目、ビット数でいうと５ビット目に存在する。
【０１５６】
ステップＳ３３０３、またはステップＳ３３０４の処理実行後、最上位ビットを消去して下位５ビットを残すため、画像変換装置１００は、ｅと０ｘ１ｆとの論理積の結果をｅに格納する（ステップＳ３３０５）。なお、図３３のステップＳ３３０５で示した"＆＝"は、右辺と左辺の論理積を左辺に代入する演算子である。
【０１５７】
ステップＳ３３０５までの処理により、Ｅ≒（１＋ｅ／３２）・２＾ｍとした時のｅとｍが得られた。このＥは、ｅｘｐ（Ｄ／４０＋４．５）であるため、Ｄ＝４０ｌｏｇＥ−１８０と表現できる。このｌｏｇＥを先程のＥ＝（１＋ｅ／３２）・２＾ｍを用いて整理するとＤは下記（６）式のように変形できる。
【０１５８】
Ｄ＝４０ｍｌｏｇ２＋４０ｌｏｇ（１＋ｅ／３２）−１８０＝（ｍ＊４０＊４＊ｌｏｇ２＋４０＊４＊ｌｏｇ（１＋ｅ／３２））／４−１８０  …（６）
【０１５９】
（６）式のうち、４０＊４＊ｌｏｇ２は、おおよそ１１１であり、４０＊４＊ｌｏｇ（１＋ｅ／３２）の値はテーブルｌｏｇｔｂｌに格納されている。したがって、画像変換装置１００は、（ｍ＊１１１＋ｌｏｇｔｂｌ［ｅ］）／４−１８０を計算し、計算結果を輝度ｄに格納する（ステップＳ３３０６）。
【０１６０】
続けて、画像変換装置１００は、輝度ｄが０〜２５５の範囲のため、ステップＳ３３０７〜ステップＳ３３１０で範囲内に収まっているか確認する。具体的には、画像変換装置１００は、ｄが０未満か否かを判断する（ステップＳ３３０７）。ｄが０未満である場合（ステップＳ３３０７：Ｙｅｓ）、画像変換装置１００は、ｄに０を格納する（ステップＳ３３０８）。ｄが０以上である場合（ステップＳ３３０７：Ｎｏ）、画像変換装置１００は、ｄが２５５より大きいか否かを判断する（ステップＳ３３０９）。
【０１６１】
ｄが２５５より大きい場合（ステップＳ３３０９：Ｙｅｓ）、画像変換装置１００は、ｄに２５５を格納する（ステップＳ３３１０）。ｄが２５５以下である場合（ステップＳ３３０９：Ｎｏ）か、ステップＳ３３０８の処理が終了した場合か、ステップＳ３３１０の処理が終了した場合、画像変換装置１００は、光エネルギ値からＲＧＢ値への変換処理を終了する。図３２、図３３で示したフローチャートを実行することにより、画像変換装置１００は、（２）式よりも高速に変換処理を行える。
【０１６２】
図３４は、本実施の形態における画像変換処理の結果の一例を示す説明図（その１）である。図３４では、絞り形状を６角形とした場合の、元画像３４０１＿ＩＮ、元画像３４０２＿ＩＮと、ぼかし画像３４０１＿ＯＵＴ、ぼかし画像３４０２＿ＯＵＴを表示している。元画像３４０１＿ＩＮ、元画像３４０２＿ＩＮにて白い箇所が、ぼかし画像３４０１＿ＯＵＴ、ぼかし画像３４０２＿ＯＵＴでは白い領域が６角形状に分散している。
【０１６３】
図３５は、本実施の形態における画像変換処理の結果の一例を示す説明図（その２）である。図３５では、元画像３５０１＿ＩＮと、ぼかし画像３５０１＿５＿ＯＵＴ〜ぼかし画像３５０１＿４１＿ＯＵＴを表示している。ぼかし画像３５０１＿ｘ＿ＯＵＴの"ｘ"は、絞り形状の大きさを示している。具体的に、図３５には、ｘ＝５、９、１３、１７、２１、２５、２９、３３、３７、４１を表示している。元画像３５０１＿ＩＮにて白い箇所が、絞り形状の大きさが大きくなるほど、ぼかし画像上での６角形が大きくなる。
【０１６４】
図３６は、画素ごとの画像変換処理と本実施の形態における画像変換処理との速度比較を示す説明図である。図３６では、３２２［画素］×４８２［画素］を元画像とし、絞り形状を６角形にして、ぼかし画像に変換した場合の処理時間を表示している。
【０１６５】
画素ごとの画像変換処理は、計算結果を再利用せずにぼかし画像を変換する処理である。図３６上の、画素ごとの画像変換処理の処理時間を示すグラフ３６０１は、絞り形状の大きさが大きくなるほど、処理時間が大きくなる。たとえば、絞り形状の大きさが２０［画素］である場合、画素ごとの画像変換処理の処理時間は、１２００［ｍｓｅｃ］となる。本実施の形態における画像変換処理の処理結果を示すグラフ３６０２は、絞り形状の大きさが大きくなっても、処理時間が短いままに抑えることができる。たとえば、絞り形状の大きさが２０［画素］である場合、本実施の形態における画像変換処理の処理時間は、約５０［ｍｓｅｃ］となる。
【０１６６】
以上説明したように、画像変換装置１００によれば、絞り形状と重なる第１の画素列中の第１の画素の変換結果を用いて、絞り形状と重なる領域での相対位置が第１の画素と一致する第２の画素列中の第２の画素を変換する。これにより、影響を与える画素が第１の画素と第２の画素とで共通しているため、画像変換装置１００は、たとえば、第１の画素の変換結果をそのまま再利用して画像変換時の計算量を減らすことができる。
【０１６７】
また、画像変換装置１００によれば、対象画素列のうちの、第１の画素が含まれるように絞り形状を移動させた際にいずれかの画素と重なる画素の値に基づいて算出した、元画像を変換した場合の第１の画素の値を用いて、変換後の第２の画素の値を算出してもよい。これにより、画像変換装置１００は、再利用可能な第１の画素の変換結果を算出して、第２の画素の値の算出時に、第１の画素の変換結果を再利用することができるため、画像変換時の計算量を減らすことができる。
【０１６８】
また、画像変換装置１００によれば、元画像を変換した場合の第１の画素の値と、第２の画素が含まれるように絞り形状を移動させた際にいずれかの画素と重なる画素の値とに基づいて、変換後の第２の画素の値を算出してもよい。これにより、画像変換装置１００は、第２の画素に影響を与える画素群が、第１の画素に影響を与える画素に全て含まれている場合、第１の画素の変換結果を再利用して画像変換時の計算量を減らすことができる。
【０１６９】
また、画像変換装置１００によれば、対象画素列の各々の画素ごとに、走査方向または走査方向の逆方向のいずれかの方向に向かって、各々の画素から第１の画素群の画素数分先の画素までの各画素の値に基づき、変換後の各々の画素の値を算出する。続けて、画像変換装置１００は、変換後の各々の画素の値のうちの、拡散元画素からいずれかの方向の逆方向に向かって、第１の画素群のいずれかの方向にある端の画素から第１の画素までの画素数分先の位置にある画素の値を、第１の画素の値に設定してもよい。これにより、画像変換装置１００は、行ごとにまとめて移動平均を算出していくため、連続した領域にアクセスすることになり、処理の高速化を図ることができる。連続した領域にアクセスできる場合、たとえば、キャッシュラインに存在している可能性が高くなるため、画像変換処理の高速化を図ることができる。
【０１７０】
また、画像変換装置１００によれば、対象画素列の各々の画素ごとに、第１の画素群の画素数を用いて算出した変換後の各々の画素の値に基づき、各々の画素から第２の画素群の画素数分先の画素までの各画素の値に基づく変換後の各々の画素の値を算出してもよい。これにより、画像変換装置１００は、一度算出した移動平均を再利用できるため、計算量を削減することができる。
【０１７１】
また、画像変換装置１００によれば、ユーザが指定した形状に応じた走査方向に応じて、画像変換処理を行ってもよい。たとえば、ユーザが指定した形状がｙ軸に対して走査する方がｘ軸に対して走査する方より絞り形状テーブル３１０のレコード数が少なくなる場合、画像変換装置１００は、走査方向としてｙ軸方向を選択することにより、計算量を少なくすることができる。また、ｘ軸に対して走査する場合と、ｙ軸に対して走査する場合とで、絞り形状テーブル３１０のレコード数が同一となる可能性もある。この場合、画像変換装置１００は、連続した領域に処理が可能なｘ軸方向を走査方向として選択することにより、画像変換処理の高速化を図ることができる。
【０１７２】
また、本実施の形態にかかる画像変換処理は、計算量が少なくなるために、スマートフォンや携帯電話といった、ＣＰＵの処理能力が非力な携帯端末が実行しても、ユーザにストレスを与えない短い時間で画像変換処理を完了することができる。また、本実施の形態にかかる画像変換処理は、パーソナル・コンピュータで実行されてもよい。たとえば、写真画像の加工を行う場合、背景と前景を切り分けることが可能な他のアプリケーションにより、背景と前景を切り分けておき、背景に対して本実施の形態にかかる画像変換処理を実行してもよい。これにより、ユーザは、カメラで撮影したようなきれいなぼかし画像を短時間で得ることができる。
【０１７３】
なお、本実施の形態で説明した画像変換方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本画像変換プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本画像変換プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１７４】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１７５】
（付記１）コンピュータに、
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する、
処理を実行させることを特徴とする画像変換プログラム。
【０１７６】
（付記２）前記コンピュータに、
前記対象画素列の中から、前記対象画素列に平行に前記いずれかの画素を移動させた移動後の前記いずれかの画素から前記所定範囲の画素群によって形成される領域内に前記第１の画素が含まれるように、前記対象画素列に平行に前記いずれかの画素を移動させた場合の移動後の前記いずれかの画素と重なる画素を特定し、
特定した前記画素の値に基づいて、前記画像を変換した場合の前記第１の画素の値を算出する処理を実行させ、
前記第２の画素の値を算出する処理は、
算出した前記第１の画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする付記１に記載の画像変換プログラム。
【０１７７】
（付記３）前記コンピュータに、
前記対象画素列の中から、前記対象画素列に平行に前記いずれかの画素を移動させた移動後の前記いずれかの画素から前記所定範囲の画素群によって形成される領域内に前記第２の画素が含まれるように、前記対象画素列に平行に前記いずれかの画素を移動させた場合の移動後の前記いずれかの画素と重なる画素を特定する処理を実行させ、
前記第２の画素の値を算出する処理は、
前記画像を変換した場合の前記第１の画素の値と特定した前記画素の値とに基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする付記１または２に記載の画像変換プログラム。
【０１７８】
（付記４）前記コンピュータに、
前記対象画素列の各々の画素ごとに、前記いずれかの方向に向かって、前記各々の画素から前記第１の画素群の画素数分の画素までの各画素の値に基づいて、前記画像を変換した場合の前記第１の画素列に関する前記各々の画素の値を算出し、
算出した前記第１の画素列に関する前記各々の画素の値のうちの、前記いずれかの画素から前記いずれかの方向の逆方向に向かって、前記第１の画素群の前記いずれかの方向にある端の画素から前記第１の画素までの画素数分先の位置にある画素の値を、前記画像を変換した場合の前記第１の画素の値に設定する処理を実行させ、
前記第２の画素の値を算出する処理は、
設定した前記第１の画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする付記１〜３のいずれか一つに記載の画像変換プログラム。
【０１７９】
（付記５）前記コンピュータに、
前記各々の画素ごとに、前記いずれかの方向に向かって、前記各々の画素から前記第１の画素群の画素数分先の位置にある画素の次の画素から、前記各々の画素から前記第２の画素群の画素数分まで、の各画素の値と、算出した前記第１の画素列に関する前記各々の画素の値とに基づいて、前記画像を変換した場合の前記第２の画素列に関する前記各々の画素の値を算出し、
前記第２の画素の値を算出する処理は、
算出した前記第２の画素列に関する前記各々の画素の値のうちの、前記いずれかの画素から前記いずれかの方向の逆方向に向かって、前記第１の画素群の前記いずれかの方向にある端の画素から前記第２の画素までの画素数分先の位置にある画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする付記４に記載の画像変換プログラム。
【０１８０】
（付記６）前記コンピュータに、
画素群によって形成される領域の形状と、走査方向とを関連付けて記憶するテーブルを参照して、指定された形状に応じた走査方向を選択し、
前記画像の中から、選択した走査方向に走査して前記対象画素列を取得する処理を実行させ、
前記対象画素列を取得した後、前記第１の画素列と前記第２の画素列とを抽出する処理を実行することを特徴とする付記１〜５のいずれか一つに記載の画像変換プログラム。
【０１８１】
（付記７）変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する、
処理をコンピュータに実行させる画像変換プログラムを記録したことを特徴とする記録媒体。
【０１８２】
（付記８）変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出する抽出部と、
前記抽出部によって抽出された前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得する取得部と、
前記抽出部によって抽出された前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、前記取得部によって取得された前記画素数分先の位置にある第２の画素を特定する特定部と、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する算出部と、
を有することを特徴とする画像変換装置。
【０１８３】
（付記９）変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出する抽出部と、
前記抽出部によって抽出された前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得する取得部と、
前記抽出部によって抽出された前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、前記取得部によって取得された前記画素数分先の位置にある第２の画素を特定する特定部と、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する算出部と、
を含むコンピュータを有することを特徴とする画像変換装置。
【０１８４】
（付記１０）コンピュータが、
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する、
処理を実行することを特徴とする画像変換方法。
【符号の説明】
【０１８５】
１００  画像変換装置
１０１  絞り形状
３０１  選択部
３０２  対象画素列取得部
３０３  抽出部
３０４  画素数取得部
３０５  画素特定部
３０６  拡散元画素特定部
３０７  算出部
３１０  絞り形状テーブル
３１１  一時記憶領域
【手続補正書】
【提出日】平成28年1月18日(2016.1.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する第１の記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出し、
算出した前記第２の画素の値を前記第１の記憶部に格納し、
画素群によって形成される領域の形状と走査方向とを関連付けて記憶する第２の記憶部と、前記第２の画素の値が格納された前記第１の記憶部とに基づいて、前記画像を変換した変換後の画像を生成する、
処理を実行させることを特徴とする画像変換プログラム。
【請求項２】
前記コンピュータに、
前記対象画素列の中から、前記対象画素列に平行に前記いずれかの画素を移動させた移動後の前記いずれかの画素から前記所定範囲の画素群によって形成される領域内に前記第１の画素が含まれるように、前記対象画素列に平行に前記いずれかの画素を移動させた場合の移動後の前記いずれかの画素と重なる画素を特定し、
特定した前記画素の値に基づいて、前記画像を変換した場合の前記第１の画素の値を算出する処理を実行させ、
前記第２の画素の値を算出する処理は、
算出した前記第１の画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項１に記載の画像変換プログラム。
【請求項３】
前記コンピュータに、
前記対象画素列の中から、前記対象画素列に平行に前記いずれかの画素を移動させた移動後の前記いずれかの画素から前記所定範囲の画素群によって形成される領域内に前記第２の画素が含まれるように、前記対象画素列に平行に前記いずれかの画素を移動させた場合の移動後の前記いずれかの画素と重なる画素を特定する処理を実行させ、
前記第２の画素の値を算出する処理は、
前記画像を変換した場合の前記第１の画素の値と特定した前記画素の値とに基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項１または２に記載の画像変換プログラム。
【請求項４】
前記コンピュータに、
前記対象画素列の各々の画素ごとに、前記いずれかの方向に向かって、前記各々の画素から前記第１の画素群の画素数分の画素までの各画素の値に基づいて、前記画像を変換した場合の前記第１の画素列に関する前記各々の画素の値を算出し、
算出した前記第１の画素列に関する前記各々の画素の値のうちの、前記いずれかの画素から前記いずれかの方向の逆方向に向かって、前記第１の画素群の前記いずれかの方向にある端の画素から前記第１の画素までの画素数分先の位置にある画素の値を、前記画像を変換した場合の前記第１の画素の値に設定する処理を実行させ、
前記第２の画素の値を算出する処理は、
設定した前記第１の画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項１〜３のいずれか一つに記載の画像変換プログラム。
【請求項５】
前記コンピュータに、
前記各々の画素ごとに、前記いずれかの方向に向かって、前記各々の画素から前記第１の画素群の画素数分先の位置にある画素の次の画素から、前記各々の画素から前記第２の画素群の画素数分まで、の各画素の値と、算出した前記第１の画素列に関する前記各々の画素の値とに基づいて、前記画像を変換した場合の前記第２の画素列に関する前記各々の画素の値を算出し、
前記第２の画素の値を算出する処理は、
算出した前記第２の画素列に関する前記各々の画素の値のうちの、前記いずれかの画素から前記いずれかの方向の逆方向に向かって、前記第１の画素群の前記いずれかの方向にある端の画素から前記第２の画素までの画素数分先の位置にある画素の値に基づいて、前記画像を変換した場合の前記第２の画素の値を算出することを特徴とする請求項４に記載の画像変換プログラム。
【請求項６】
前記コンピュータに、
前記第２の記憶部を参照して、指定された形状に応じた走査方向を選択し、
前記画像の中から、選択した走査方向に走査して前記対象画素列を取得する処理を実行させ、
前記対象画素列を取得した後、前記第１の画素列と前記第２の画素列とを抽出する処理を実行することを特徴とする請求項１〜５のいずれか一つに記載の画像変換プログラム。
【請求項７】
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出する抽出部と、
前記抽出部によって抽出された前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得する取得部と、
前記抽出部によって抽出された前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、前記取得部によって取得された前記画素数分先の位置にある第２の画素を特定する特定部と、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出する算出部と、
前記算出部によって算出された前記第２の画素の値を前記第１の記憶部に格納する格納部と、
画素群によって形成される領域の形状と走査方向とを関連付けて記憶する第２の記憶部と、前記格納部によって前記第２の画素の値が格納された前記第１の記憶部とに基づいて、前記画像を変換した変換後の画像を生成する生成部と、
を有することを特徴とする画像変換装置。
【請求項８】
コンピュータが、
変換対象となる画像の中の対象画素列と平行な画素列のうちの、前記対象画素列のいずれかの画素から所定範囲の画素群によって形成される領域と重なる第１の画素列と、前記領域と連続して重なる画素数が前記第１の画素列以上の第２の画素列とを抽出し、
抽出した前記第１の画素列の中の前記領域に含まれる第１の画素群のうちの前記対象画素列の走査方向または前記走査方向の逆方向のいずれかの方向にある端の画素から前記第１の画素群に含まれる第１の画素までの画素数を取得し、
抽出した前記第２の画素列の中の前記領域に含まれる第２の画素群のうちの前記いずれかの方向にある端の画素から前記いずれかの方向の逆方向に向かって、取得した前記画素数分先の位置にある第２の画素を特定し、
前記画像を変換した場合の前記第１の画素の値を記憶する記憶部を参照して、前記画像を変換した場合の前記第２の画素の値を算出し、
算出した前記第２の画素の値を前記第１の記憶部に格納し、
画素群によって形成される領域の形状と走査方向とを関連付けて記憶する第２の記憶部と、前記第２の画素の値が格納された前記第１の記憶部とに基づいて、前記画像を変換した変換後の画像を生成する、
処理を実行することを特徴とする画像変換方法。
【国際調査報告】
2014033867.tif 000040
2014033867.tif 000041
2014033867.tif 000042
2014033867.tif 000043