(57)【要約】      （修正有）【課題】勾配値を用いた画像拡大において、原画像を記憶するメモリから取得するデータを削減する。【解決手段】原画像および原画像を拡大した拡大画像を記憶する第１のメモリと、処理部とを備える。処理部は拡大画像内の補間画素のエッジ方向の決定に用いられる第１の勾配値と第２の勾配値を算出する演算部と、記憶する第２のメモリとを含む。演算部は、第１の複数の画素のうち補間画素より上側に位置する複数の画素それぞれの画素値から第１の値を算出し、第２の複数の画素の画素値から第２の値を算出する。演算部は、第２の複数の画素のうち補間画素より上側に位置する複数の画素それぞれの画素値から第２の値を算出し、第２の複数の画素の画素値から第４の値を算出する。演算部は、第１の値に第３の値を加算して第１の勾配値を算出し、第２の値に第４の値を加算して第２の勾配値を算出し、エッジ方向を決定し、補間画素の画素値を算出する。【選択図】図１７
2018088098.tif 000002
【特許請求の範囲】
【請求項１】
原画像および前記原画像を拡大した拡大画像を記憶する第１のメモリと、
処理部と、
を備え、
前記処理部は、
前記拡大画像内の補間画素のエッジ方向の決定に用いられる第１の勾配値を第１の複数の画素それぞれの画素値から算出し、前記エッジ方向の決定に用いられる第２の勾配値を前記原画像の第２の複数の画素それぞれの画素値から算出する演算部と、
前記第１の勾配値と前記第２の勾配値とを記憶する第２のメモリと、
を含み、
前記演算部は、
前記第１のメモリから所定のデータ単位で前記原画像を読み出し、
前記第１の複数の画素のうち前記補間画素より上側に位置する第３の複数の画素が読み出されると、前記第３の複数の画素それぞれの画素値から第１の値を算出し、
前記第２の複数の画素のうち前記補間画素より上側に位置する第４の複数の画素が読み出されると、前記第４の複数の画素それぞれの画素値から第２の値を算出し、
前記第１の値および前記第２の値の算出後、前記第１のメモリから前記所定のデータ単位で前記補間画素より下側に位置する前記原画像の複数の画素を読み出し、
前記第１の複数の画素のうち前記補間画素より下側に位置する第５の複数の画素が読み出されると、前記第５の複数の画素それぞれの画素値から第３の値を算出し、
前記第２の複数の画素のうち前記補間画素より下側に位置する第６の複数の画素が読み出されると、前記第６の複数の画素それぞれの画素値から第４の値を算出し、
前記第１の値に前記第３の値を加算して前記第１の勾配値を算出し、
前記第２の値に前記第４の値を加算して前記第２の勾配値を算出し、
前記第１の勾配値と前記第２の勾配値に基づいて、前記エッジ方向を決定し、
前記エッジ方向に基づいて、前記補間画素の画素値を算出する
ことを特徴とする情報処理装置。
【請求項２】
前記第２のメモリは、今までに読み出された前記原画像の一部である部分画像を記憶し、
前記演算部は、前記原画像から前記所定のデータ単位で読み出したデータを、前記部分画像に追加し、
次に前記第１のメモリから前記所定のデータ単位で前記原画像を読み出す前に、前記部分画像に含まれるデータを古い順に前記所定のデータ単位で削除することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記演算部は、前記第1の値、前記第２の値、前記第３の値、および前記第４の値を用いて、他の複数の補間画素のエッジ方向の決定に用いられる複数の勾配値を算出することを特徴とする請求項１または２記載の情報処理装置。
【請求項４】
原画像および前記原画像を拡大した拡大画像を記憶する第１のメモリと、処理部と、を備え、前記処理部は、前記拡大画像内の補間画素のエッジ方向の決定に用いられる第１の勾配値を第１の複数の画素それぞれの画素値から算出し、前記エッジ方向の決定に用いられる第２の勾配値を前記原画像の第２の複数の画素それぞれの画素値から算出する演算部と、前記第１の勾配値と前記第２の勾配値とを記憶する第２のメモリと、を含む情報処理装置が
前記第１のメモリから所定のデータ単位で前記原画像を読み出し、
前記第１の複数の画素のうち前記補間画素より上側に位置する第３の複数の画素が読み出されると、前記第３の複数の画素それぞれの画素値から第１の値を算出し、
前記第２の複数の画素のうち前記補間画素より上側に位置する第４の複数の画素が読み出されると、前記第４の複数の画素それぞれの画素値から第２の値を算出し、
前記第１の値および前記第２の値の算出後、前記第１のメモリから前記所定のデータ単位で前記補間画素より下側に位置する前記原画像の複数の画素を読み出し、
前記第１の複数の画素のうち前記補間画素より下側に位置する第５の複数の画素が読み出されると、前記第５の複数の画素それぞれの画素値から第３の値を算出し、
前記第２の複数の画素のうち前記補間画素より下側に位置する第６の複数の画素が読み出されると、前記第６の複数の画素それぞれの画素値から第４の値を算出し、
前記第１の値に前記第３の値を加算して前記第１の勾配値を算出し、
前記第２の値に前記第４の値を加算して前記第２の勾配値を算出し、
前記第１の勾配値と前記第２の勾配値に基づいて、前記エッジ方向を決定し、
前記エッジ方向に基づいて、前記補間画素の画素値を算出する
処理を備える情報処理方法。
【請求項５】
原画像および前記原画像を拡大した拡大画像を記憶する第１のメモリと、処理部と、を備え、前記処理部は、前記拡大画像内の補間画素エッジ方向の決定に用いられる第１の勾配値を第１の複数の画素それぞれの画素値から算出し、前記エッジ方向の決定に用いられる第２の勾配値を前記原画像の第２の複数の画素それぞれの画素値から算出する演算部と、前記第１の勾配値と前記第２の勾配値とを記憶する第２のメモリと、を含むコンピュータに
前記第１のメモリから所定のデータ単位で前記原画像を読み出し、
前記第１の複数の画素のうち前記補間画素より上側に位置する第３の複数の画素が読み出されると、前記第３の複数の画素それぞれの画素値から第１の値を算出し、
前記第２の複数の画素のうち前記補間画素より上側に位置する第４の複数の画素が読み出されると、前記第４の複数の画素それぞれの画素値から第２の値を算出し、
前記第１の値および前記第２の値の算出後、前記第１のメモリから前記所定のデータ単位で前記補間画素より下側に位置する前記原画像の複数の画素を読み出し、  前記第１の複数の画素のうち前記補間画素より下側に位置する第５の複数の画素が読み出されると、前記第５の複数の画素それぞれの画素値から第３の値を算出し、
前記第２の複数の画素のうち前記補間画素より下側に位置する第６の複数の画素が読み出されると、前記第６の複数の画素それぞれの画素値から第４の値を算出し、
前記第１の値に前記第３の値を加算して前記第１の勾配値を算出し、
前記第２の値に前記第４の値を加算して前記第２の勾配値を算出し、
前記第１の勾配値と前記第２の勾配値に基づいて、前記エッジ方向を決定し、
前記エッジ方向に基づいて、前記補間画素の画素値を算出する
する処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、およびプログラム
【背景技術】
【０００２】
画像を拡大し、拡大画像を生成するアルゴリズムとして、Fast Curvature based Interpolation（ＦＣＢＩ）、bicube補間、およびNew Edge-Directed Interpolation（ＮＥＤＩ）等が知られている。
【０００３】
ＦＣＢＩは、入力した画像を大きくする画像拡大を行うアルゴリズムであり、画像のエッジ方向を考慮して補間を行うため、エッジが潰れない画像拡大を行なうことが出来る。
【０００４】
拡大画像の生成処理では、高速に処理を行うためCentral Processing Unit（ＣＰＵ）の代わりにGraphics Processing Unit（ＧＰＵ）が用いられる場合がある。
【０００５】
ぼやけが大きくなったり孤立点が生成されたりすること無く、良好な拡大画像を生成できる画像拡大装置が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−３９６７２号公報
【特許文献２】特開２００７−６５０３９号公報
【特許文献３】特開平８−２５１４００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＧＰＵは、階層的なメモリ構造を有する。例えば、ＧＰＵは、アクセス速度が遅いグローバルメモリと、グローバルメモリよりアクセス速度が速いシェアードメモリおよびレジスタと、を有する。
【０００８】
ＧＰＵがＦＣＢＩを用いて拡大画像を生成する場合、拡大画像の補間画素の画素値の算出に際して、エッジの方向に決定に用いられる勾配値の算出のために、拡大対象の画像が記憶されたグローバルメモリから多くのデータを取得するため、拡大画像の生成に時間がかかるという問題がある。
【０００９】
本発明は、勾配値を用いた画像拡大処理において、原画像を記憶するメモリから取得するデータを削減することを目的とする。
【課題を解決するための手段】
【００１０】
実施の形態に係る情報処理装置は、原画像および前記原画像を拡大した拡大画像を記憶する第１のメモリと、処理部と、を備える。
【００１１】
前記処理部は、前記拡大画像内の補間画素のエッジ方向の決定に用いられる第１の勾配値を第１の複数の画素それぞれの画素値から算出し、前記エッジ方向の決定に用いられる第２の勾配値を前記原画像の第２の複数の画素それぞれの画素値から算出する演算部と、前記第１の勾配値と前記第２の勾配値とを記憶する第２のメモリと、を含む。
【００１２】
前記演算部は、前記第１のメモリから所定のデータ単位で前記原画像を読み出し、前記第１の複数の画素のうち前記補間画素より上側に位置する第３の複数の画素が読み出されると、前記第３の複数の画素それぞれの画素値から第１の値を算出する。
【００１３】
前記演算部は、前記第２の複数の画素のうち前記補間画素より上側に位置する第４の複数の画素が読み出されると、前記第４の複数の画素それぞれの画素値から第２の値を算出する。
【００１４】
前記演算部は、前記第１の値および前記第２の値の算出後、前記第１のメモリから前記所定のデータ単位で前記補間画素より下側に位置する前記原画像の複数の画素を読み出す。
【００１５】
前記演算部は、前記第１の複数の画素のうち前記補間画素より下側に位置する第５の複数の画素が読み出されると、前記第５の複数の画素それぞれの画素値から第３の値を算出する。
【００１６】
前記演算部は、前記第２の複数の画素のうち前記補間画素より下側に位置する第６の複数の画素が読み出されると、前記第６の複数の画素それぞれの画素値から第４の値を算出する。
【００１７】
前記演算部は、前記第１の値に前記第３の値を加算して前記第１の勾配値を算出し、前記第２の値に前記第４の値を加算して前記第２の勾配値を算出する。
【００１８】
前記演算部は、前記第１の勾配値と前記第２の勾配値に基づいて、前記エッジ方向を決定し、前記エッジ方向に基づいて、前記補間画素の画素値を算出する。
【発明の効果】
【００１９】
実施の形態に係る情報処理装置によれば、勾配値を用いた画像拡大処理において、原画像を記憶するメモリから取得するデータを削減することができる。
【図面の簡単な説明】
【００２０】
【図１】実施の形態に係るＧＰＵの構成図である。
【図２】従来の勾配値算出方法を用いたＦＣＢＩの処理のフローチャートである。
【図３】グローバルメモリに記憶される原画像と拡大画像を示す図である。
【図４】従来の勾配値算出方法を用いたＦＣＢＩの処理を示す図である。
【図５】従来の勾配値算出方法を用いたＦＣＢＩの処理を示す図である。
【図６】従来の勾配値算出方法を用いたＦＣＢＩの処理を示す図である。
【図７】従来の勾配値算出方法を用いたＦＣＢＩの処理を示す図である。
【図８】従来の勾配値算出方法を用いたＦＣＢＩの処理を示す図である。
【図９】従来の勾配値算出方法を用いたＦＣＢＩの処理を示す図である。
【図１０】従来の勾配値算出方法を用いたＦＣＢＩの処理を示す図である。
【図１１】画素ｆの勾配値の算出に用いられる画素を示す図である。
【図１２】シェアードメモリに記憶されるデータの例を示す図である。
【図１３】実施の形態に係る勾配値の算出方法を示す図である。
【図１４】シェアードメモリに記憶されるデータの詳細を示す図である。
【図１５】実施の形態に係る勾配値算出方法のパイプライン方式を示す図である。
【図１６】実施の形態に係る勾配値算出方法のパイプライン方式を示す図である。
【図１７】実施の形態に係る勾配値算出方法を用いたＦＣＢＩのフローチャートである。
【図１８】部分補間画素の補間処理の詳細なフローチャートである。
【図１９】時刻と各メモリ内のデータを示す図である。
【図２０】情報処理装置（コンピュータ）の構成図である。
【発明を実施するための形態】
【００２１】
以下、図面を参照しながら実施の形態について説明する。
図１は、実施の形態に係るＧＰＵの構成図である。
【００２２】
実施の形態のＧＰＵ１０１は、チップ２０１およびグローバルメモリ４０１を備える。ＧＰＵ１０１は、例えば、サーバやパーソナルコンピュータ等のコンピュータに具備される。ＧＰＵ１０１は、例えば、コンピュータのCentral Processing Unit（ＣＰＵ）からデータや指示が入力され、当該データに対して処理を行い、処理結果を出力する。ＧＰＵ１０１は、情報処理装置の一例である。
【００２３】
チップ２０１は、演算器３０１−ｉ（ｉ＝１〜３）を備える。尚、演算器３０１−ｉの数は一例であり、これに限られるものでない。チップ２０１は、例えば、Large Scale Integration（ＬＳＩ）である。
【００２４】
演算器３０１−ｉは、画像処理や演算処理等の各種処理を実行し、グローバルメモリ４０１とバスにより接続し、グローバルメモリ４０１に記憶されているデータを読み書き可能である。演算器３０１−ｉは、例えば、Streaming Multiprocessor（ＳＭ）である。演算器３０１−ｉは、シェアードメモリ３１１−ｉ、レジスタ３２１−ｉ、コア３３１−ｉ−ｊ（ｊ＝１〜６）を備える。
【００２５】
シェアードメモリ３１１−ｉは、データを記憶する記憶装置である。シェアードメモリ３１１−ｉのアクセス速度は、グローバルメモリ４０１のアクセス速度より速く、レジスタ３２１−ｉのアクセス速度より遅い。また、シェアードメモリ３１１−ｉの記憶容量は、グローバルメモリ４０１の記憶容量より小さい。
【００２６】
レジスタ３２１−ｉは、データを記憶する記憶装置である。レジスタ３２１−ｉのアクセス速度は、シェアードメモリ３１１−ｉのアクセス速度より速い。
コア３３１−ｉ−ｊは、画像処理や演算処理等の各種処理を実行する演算装置である。
【００２７】
グローバルメモリ４０１は、データを記憶する記憶装置である。グローバルメモリ４０１は、例えば、Dynamic Random Access Memory（ＤＲＡＭ）である。グローバルメモリ４０１は、演算器３０１−ｉの外にあり（オフチップ）、演算器３０１−ｉとバスにより接続している。グローバルメモリ４０１の容量は、シェアードメモリおよびレジスタそれぞれの容量より大きい。また、グローバルメモリ４０１のアクセス速度は、シェアードメモリおよびレジスタそれぞれのアクセス速度より遅い。
【００２８】
ここで、従来の勾配値算出方法を用いたＦＣＢＩの処理を説明する。
図２は、従来の勾配値算出方法を用いたＦＣＢＩの処理のフローチャートである。
図３は、グローバルメモリに記憶される原画像と拡大画像を示す図である。
図４〜９は、従来の勾配値算出方法を用いたＦＣＢＩの処理を示す図である。
【００２９】
ここでは、演算器３０１−１がＦＣＢＩの処理を行うとする。また、グローバルメモリ４０１は、拡大対象の画像（原画像）orgと原画像orgを拡大した拡大画像enlを記憶する（図３）。原画像orgのサイズは、縦Ｎ画素、横Ｍ画素であるとする（以下の実施の形態でも同様）。また、拡大画像enlのサイズは、縦２Ｎ画素、横２Ｍ画素であるとする（以下の実施の形態でも同様）。図３では、原画像のサイズは４×４画素、拡大画像enlのサイズは８×８画素である。また、初期状態では、拡大画像enlの各画素（要素）の画素値は、空白である。
【００３０】
原画像orgおよび拡大画像enlの最上段の行を０行目とする。また、原画像orgおよび拡大画像enlの左端の列を０列目とする。
【００３１】
ステップＳ５０１において、コア３３１−１−ｊは、原画像orgの各画素を縦横１画素空けながらから拡大画像enlへコピーする。
【００３２】
図４に示すように、原画像orgの０行目の０〜３列の画素をそれぞれ画素Ａ〜Ｄと表記する。原画像orgの１行目の０〜３列の画素をそれぞれ画素Ｅ〜Ｆと表記する。原画像orgの２行目の０〜３列の画素をそれぞれ画素Ｉ〜Ｌと表記する。原画像orgの３行目の０〜３列の画素をそれぞれ画素Ｍ〜Ｐと表記する。また、画素Ａ〜Ｐの画素値をそれぞれＡ〜Ｐとする。
【００３３】
ステップＳ５０１の処理により、図４に示すように、原画像orgの座標（i,j）（i=0〜3,j=0〜3）の画素は、拡大画像の座標（2i,2j）の画素となる。
【００３４】
ステップＳ５０２は、ステップＳ５０６に対応するループの始端であり、拡大画像enlの座標（i,j）が共に奇数である画素のうち未選択の画素が１つ選択される。選択された画素は、選択画素と表記する。
【００３５】
ステップＳ５０３において、コア３３１−１−ｊは、拡大画像enlの選択画素に対して左斜め（左上右下方向）の８要素（画素）をグローバルメモリ４０１から読み出し、読み出した８要素から勾配値dir0を計算する。コア３３１−１−ｊは、勾配値dir0をレジスタ３３１−１に記憶する。選択画素の座標を(x,y)とすると、左斜め（左上右下方向）の８画素の座標は、(x-1,y-3),(x+1,y-1),(x+3,y+1),(x-1,y-1),(x+1,y+1),(x-3,y-1),(x-1,y+1),(x+1,y+3)となる。勾配値dir0は、(x-1,y-1)と(x+1,y+1)の画素値をそれぞれ−３倍した値と(x-1,y-3),(x+1,y-1),(x+3,y+1),(x-3,y-1),(x-1,y+1),(x+1,y+3)の画素値を合計した値である。
【００３６】
ステップＳ５０４において、コア３３１−１−ｊは、拡大画像enlの選択画素に対して右斜め（右上左下方向）の８要素（画素）をグローバルメモリ４０１から読み出し、読み出した８要素から勾配値dir1を計算する。コア３３１−１−ｊは、勾配値dir1をレジスタ３３１−１に記憶する。選択画素の座標を(x,y)とすると、右斜め（右上左下方向）の８画素の座標は、(x-3,y+1),(x-1,y-1),(x+1,y-3),(x-1,y+1),(x+1,y-1),(x-1,y+3),(x+1,y+1),(x+3,y-1)となる。勾配値dir1は、(x-1,y+1),(x+1,y-1)の画素値をそれぞれ−３倍した値と(x-3,y+1),(x-1,y-1),(x+1,y-3), (x-1,y+3),(x+1,y+1),(x+3,y-1)の画素値を合計した値である。
【００３７】
図５に示すように、拡大画像enlの１行目の１，３，５，７列の画素をそれぞれ画素a〜dと表記する。拡大画像enlの３行目の１，３，５，７列の画素をそれぞれ画素e〜hと表記する。拡大画像enlの５行目の１，３，５，７列の画素をそれぞれ画素i〜lと表記する。拡大画像enlの7行目の１，３，５，７列の画素をそれぞれ画素ｍ〜ｐと表記する。また、画素ａ〜ｐの画素値はそれぞれａ〜ｐとする。
【００３８】
例えば、画素ｆの勾配値dir0は、画素ｆの左斜め（左上右下方向）の画素Ｂ，Ｅ，Ｆ，Ｇ，Ｊ，Ｋ，Ｌ，Ｏを用いて計算される。画素ｆの勾配値dir0は、dir0=Ｂ＋Ｇ＋Ｌ−３Ｆ−３Ｋ＋Ｅ＋Ｏである。
【００３９】
また、画素ｆの勾配値dir1は、画素ｆの左斜め（右上左下方向）の画素、Ｆ，Ｇ，Ｈ，Ｉ，Ｊ，Ｋ，Ｎを用いて計算される。画素ｆの勾配値dir1は、dir1=Ｉ＋Ｆ＋Ｃ−３J−３Ｇ＋Ｎ＋Ｋ＋Ｈである。
【００４０】
ステップＳ５０５において、コア３３１−１−ｊは、dir0の絶対値とdir1の絶対値を比較し、比較結果に基づいてエッジ方向を決定する。コア３３１−１−ｊは、|dir0|>|dir1|の場合、エッジ方向をdir0方向（左上右下方向）とする。コア３３１−１−ｊは、|dir1|>|dir0|の場合、エッジ方向をdir1方向（右上左下方向）とする。コア３３１−１−ｊは、決定したエッジ方向に基づいて、選択画素の画素値を算出する。コア３３１−１−ｊは、算出した選択画素の画素値をグローバルメモリ４０１内の拡大画像enlに記憶する。
【００４１】
図６に示すように、|dir0|>|dir1|の場合、エッジ方向はdir0方向（左上右下方向）となり、選択画素ｆの画素値は、選択画素ｆの左上の画素Ｆと右下の画素Ｋの画素値の平均であり、ｆ＝（Ｆ＋Ｋ）／２となる。
【００４２】
図７に示すように、|dir1|>|dir0|の場合、エッジ方向はdir1方向（右上左下方向）となり、選択画素ｆの画素値は、選択画素ｆの右上の画素Ｇと左下の画素Ｊの画素値の平均であり、ｆ＝（Ｇ＋Ｊ）／２となる。
【００４３】
ステップＳ５０６において、拡大画像enlの座標（i,j）が共に奇数である画素が全て選択済みの場合、制御はステップＳ５０７に進む。拡大画像enlの座標（i,j）が共に奇数である画素のうち未選択の画素がある場合、制御はステップＳ５０２に戻る。
【００４４】
ステップＳ５０７において、ステップＳ５１１に対応するループの始端であり、拡大画像enlのまだ画素値が決まっていない画素（座標（i,j）の一方が奇数、他方が偶数の画素）のうち１つが選択される。選択された画素は、選択画素と表記する。
【００４５】
ステップＳ５０８において、コア３３１−１−ｊは、拡大画像enlの選択画素に対して横方向の８要素（画素）をグローバルメモリ４０１から読み出し、読み出した８要素から横方向の勾配値dir2を計算する。選択画素の座標が（x,y）とすると、横方向の８画素の座標は、(x-2,y-1),(x,y-1),(x+2,y-1),(x-1,y),(x+1,y),(x-2,y+1),(x,y+1),(x+2,y+1)となる。横方向の勾配値dir2は、(x-1,y)と(x+1,y)の画素値をそれぞれ−３倍した値と(x-2,y-1),(x,y-1),(x+2,y-1),(x-2,y+1),(x,y+1),(x+2,y+1)の画素値を合計した値である。
【００４６】
ステップＳ５０９において、コア３３１−１−ｊは、拡大画像enlの選択画素に対して縦方向の８要素（画素）をグローバルメモリ４０１から読み出し、読み出した８要素から縦方向の勾配値dir3を計算する。選択画素の座標が（x,y）とすると、縦方向の８画素の座標は、(x-1,y-2),(x-1,y),(x-1,y+2),(x,y-1),(x,y+1),(x+1,y-2),(x+1,y),(x+1,y+2)となる。縦方向の勾配値dir3は、(x,y-1)と(x,y+1)の画素値をそれぞれ−３倍した値と(x-1,y-2),(x-1,y),(x-1,y+2), (x+1,y-2),(x+1,y),(x+1,y+2) の画素値を合計した値である。
【００４７】
図８に示すように、座標（3,2）の画素Ｙの画素値を算出する場合を説明する。
画素Ｙの横方向の勾配値dir2は、画素Ｙの横方向の画素ａ，ｂ，ｃ，Ｆ，Ｇ，ｅ，ｆ，ｇを用いて計算される。画素Ｙの横方向の勾配値dir2は、dir2=ａ＋ｂ＋ｃ−３Ｆ−３Ｇ＋ｅ＋ｆ＋ｇである。
【００４８】
画素Ｙの縦方向の勾配値dir3は、画素Ｙの縦方向の画素Ｂ，Ｆ，Ｊ，ｂ，ｆ，Ｃ，Ｇ，Ｋを用いて計算される。画素Ｙの縦方向の勾配値dir3は、dir3=Ｂ＋Ｆ＋Ｊ−３ｂ−３ｆ＋Ｃ＋Ｇ＋Ｋである。
【００４９】
ステップＳ５１０において、コア３３１−１−ｊは、dir２の絶対値とdir３の絶対値を比較し、比較結果に基づいてエッジ方向を決定する。コア３３１−１−ｊは、|dir2|>|dir3|の場合、エッジ方向をdir2方向（横方向）とする。コア３３１−１−ｊは、|dir3|>|dir2|の場合、エッジ方向をdir3方向（縦方向）とする。コア３３１−１−ｊは、決定したエッジ方向に基づいて、選択画素の画素値を算出する。コア３３１−１−ｊは、算出した選択画素の画素値をグローバルメモリ４０１内の拡大画像enlに記憶する。
【００５０】
図９に示すように、|dir2|>|dir3|の場合、エッジ方向はdir2方向（横方向）となり、選択画素Ｙの画素値は選択画素Ｙの左隣の画素Ｆと右隣の画素Ｇの画素値の平均であり、Ｙ＝（Ｆ＋Ｇ）／２となる。
【００５１】
図１０に示すように、|dir3|>|dir2|の場合、エッジ方向はdir3方向（縦方向）となり、選択画素Ｙの画素値は選択画素Ｙの上隣の画素bと下隣の画素fの画素値の平均であり、Ｙ＝（b＋f）／２となる。
【００５２】
図１１は、画素ｆの勾配値の算出に用いられる画素を示す図である。
上述のように、画素ｆの勾配値dir0は、画素Ｂ，Ｅ，Ｆ，Ｇ，Ｊ，Ｋ，Ｌ，Ｏを用いて計算される。また、画素ｆの勾配値dir1は、画素、Ｆ，Ｇ，Ｈ，Ｉ，Ｊ，Ｋ，Ｎを用いて計算される。
【００５３】
ＦＣＢＩでは、コア３３１−１−ｊは、１つの画素を補間するために８×２個の画素の画素値を取得する。図１１において、画素ｆの勾配値の算出のために取得される画素のうち４画素（画素Ｆ，Ｇ，Ｊ，Ｋ）は共通であるため、少なくとも、１画素あたり１２画素の画素値を取得しなければならない。
【００５４】
ＦＣＢＩでは、拡大画像の画素数が原画像の４倍になるため、３×（Ｎ×Ｍ）個の空き画素の画素値を算出しなければならない。従来の勾配値算出方法を用いたＦＣＢＩでは、３×（Ｎ×Ｍ）×１２個の画素値をグローバルメモリから読み出す必要がある。そのため、拡大画像の生成に時間がかかる。
【００５５】
実施の形態に係る勾配値算出方法を用いたＦＣＢＩでは、１２画素による勾配値算出方法を全く同じ値が計算可能な５画素からなるカーネルに変形して1処理当りの不必要なアクセス量を削減する。また、実施の形態に係る勾配値算出方法を用いたＦＣＢＩでは、仮想的に整合性が取れるように実データのみを保持し、パイプライン方式で画素を補間する。これにより、グローバルメモリのアクセス回数を最小限必要な（ＮｘＭ）要素の読み出しと （２Ｎｘ２Ｍ）要素の書き込みに抑える事が可能となる。
【００５６】
図１２は、シェアードメモリに記憶されるデータを示す図である。
実施の形態の勾配値算出方法では、シェアードメモリ３１１−１は、実データとしては、原画像のデータと、拡大画像において斜め方向の原画像の画素から補間される画素のデータの二つのみ保持する。これにより実質保持しなければならないデータ量を削減できる。しかし、これだけでは巨大な画像が入力された場合、容量の小さいシェアードメモリから溢れてしまうため、下記に述べるように、原画像のデータと斜め方向の原画像の画素から補間される画素のデータのうち、演算に必要なデータ（部分原画像org_s、部分補間画素itp_s）のみをシェアードメモリ３１１−１に記憶する。原画像のデータと斜め方向の原画像の画素から補間される画素のデータに対応する拡大画像を図１２の右側の仮想空間に示す。
【００５７】
図１３は、実施の形態に係る勾配値の算出方法を示す図である。
拡大画像の補間画素ａ〜ｐの左斜め方向の勾配値dir0のそれぞれa’〜p’とし、右斜め方向の勾配値dir1のそれぞれa’’〜p’’と表記する。実施の形態において、a’〜p’を要素とする左斜め方向の勾配値dir0の行列とa’’〜p’’を要素とする右斜め方向の勾配値dir1の行列を求める。各補間画素のエッジ方向は、dir0とdir1の各補間画素の勾配値の絶対値を比較することで算出できる。
【００５８】
例えば、拡大画像における画素ｆの２方向の勾配値dir0,dir1を算出する場合を考える。
画素ｆの左斜め方向の勾配値dir0を計算するときの８個の値と、画素ｆの右斜め方向の勾配値dir1を計算するときの８個の値をそれぞれ４個ずつに分割する。
【００５９】
左斜め方向の勾配値dir0を計算するときの８個の値は、Ｂ，Ｅ，Ｆ，ＧとＪ、Ｋ、Ｌ、Ｏに分割される。右斜め方向の勾配値dir1を計算するときの８個の値は、Ｃ，Ｆ，Ｇ，ＨとＩ，Ｊ，Ｋ，Ｎに分割される。すなわち、４つのグループに分割される。
【００６０】
上述のように画素fの左斜め方向の勾配値dir0（=f’）は、dir0=Ｂ＋Ｇ＋Ｌ−３Ｆ−３Ｋ＋Ｅ＋Ｏである。画素ｆの左斜め方向の勾配値dir0は、拡大画像において画素fより上に位置する画素Ｂ，Ｅ，Ｆ，Ｇから計算される値（dir0_1=−３Ｆ＋Ｂ＋Ｅ＋Ｇ）と、画素fより下に位置する画素Ｊ，Ｋ，Ｌ，Ｏから計算される値（dir0_0=−３Ｋ＋Ｊ＋Ｌ＋Ｏ）との合計で算出される。
【００６１】
また、画素fの右斜め方向の勾配値dir1（=f’’）は、dir1=Ｉ＋Ｆ＋Ｃ−３J−３Ｇ＋Ｎ＋Ｋ＋Ｈである。画素ｆの右斜め方向の勾配値dir1は、拡大画像において画素fより上に位置する画素Ｃ，Ｆ，Ｇ，Ｈから計算される値（dir1_1=−３Ｇ＋Ｃ＋Ｆ＋Ｈ）と、画素fより下に位置する画素Ｉ，Ｊ，Ｋ，Ｎから計算される値（dir1_0=−３Ｊ＋Ｉ＋Ｋ＋Ｎ）との合計で算出される。
【００６２】
計４つの分割したカーネルから共通部分を取り出すと、５つの要素によってdir0とdir1の値を計算する小さなカーネルにまとめることができる。
【００６３】
実施の形態において、カーネルを用いて、部分原画像の画素ｚ（i,j）に対応する拡大画像の画素の左上の画素の左斜め方向の勾配値の一部dir0_0を-3(i,j)+(i-1,j)+(i+1,j)+(i,j+1)により算出する。尚、i,jは、部分原画像org_sにおける座標の値である。
【００６４】
実施の形態において、カーネルを用いて、部分原画像の画素ｚ（i,j）に対応する拡大画像の画素の右下の画素の左斜め方向の勾配値の一部dir0_1を-3(i,j)+(i-1,j)+(i+1,j)+(i,j-1)により算出する。
【００６５】
実施の形態において、カーネルを用いて、部分原画像の画素ｚ（i,j）に対応する拡大画像の画素の右上の画素の右斜め方向の勾配値の一部dir1_0を-3(i,j)+(i-1,j)+(i+1,j)+(i,j+1)により算出する。尚、上記のように、dir0_0=dir1_0となるので、実際にはdir1_0を再度計算する必要は無い。
【００６６】
実施の形態において、カーネルを用いて、部分原画像の画素ｚ（i,j）に対応する拡大画像の画素の左下の画素の右斜め方向の勾配値の一部dir1_1を-3(i,j)+(i-1,j)+(i+1,j)+(i,j-1)により算出する。尚、上記のように、dir0_1=dir1_1となるので、実際にはdir1_1を再度計算する必要は無い。
【００６７】
ある補間画素の左斜め方向の勾配値dir0は、当該補間画素のdir0_0とdir0_1を合計することで算出される。ある補間画素の右斜め方向の勾配値dir1は、当該補間画素のdir1_0とdir1_1を合計することで算出される。
【００６８】
例えば、仮想空間に示す拡大画像において、画素ｆは画素Ｋの左上に位置する。また、画素Ｋの座標は、部分原画像において（2,2）である。よって、画素ｆの左斜め方向の勾配値の一部dir0_0は、−３Ｋ＋Ｊ＋Ｌ＋Ｏで算出される。
【００６９】
また、仮想空間に示す拡大画像において、画素ｆは画素Ｆの右下に位置する。また、画素Ｆの座標は、部分原画像において（1,1）である。よって、画素ｆの左斜め方向の勾配値の一部dir0_1は、−３Ｆ＋Ｂ＋Ｅ＋Ｇで算出される。
dir1_1とdir0_1を合計することで画素ｆの左斜め方向の勾配値dir0が算出される。
【００７０】
図１４は、シェアードメモリに記憶されるデータの詳細を示す図である。
シェアードメモリ３１１−１は、部分原画像org_s、部分補間画素itp_s、部分勾配データdir0_s、部分勾配データdir1_sを記憶する。
【００７１】
部分原画像org_sは、原画像orgの一部のデータである。詳細には、部分原画像org_sは、原画像orgの４行分の画像である。
【００７２】
部分補間画素itp_sは、拡大画像enlの座標(i,j)が共に奇数である画素の一部である。部分補間画素itp_sは、拡大画像enlの３行分の座標(i,j)が共に奇数である画素を含む。
【００７３】
部分勾配データdir0_sは、部分補間画素itp_sの画素の２行分の画素に対応する左斜め方向の勾配値dir0または左斜め方向の勾配値dir0の計算途中の値を含むデータである。部分勾配データdir0_sは、２行Ｍ列の要素を含む。また、部分勾配データdir0_sの最上行の行を０行目、左端の列を０列目とする。
【００７４】
部分勾配データdir1_sは、部分補間画素itp_sの画素の２行分の画素に対応する右斜め方向の勾配値dir1または右斜め方向の勾配値dir0の計算途中の値を含むデータである。部分勾配データdir1_sは、２行Ｍ列の要素を含む。また、部分勾配データdir1_sの最上行の行を０行目、左端の列を０列目とする。
【００７５】
図１５は、実施の形態に係る勾配値算出方法のパイプライン方式を示す図である。
拡大画像の補間画素ａ〜ｐの左斜め方向の勾配値dir0のそれぞれa’〜p’とし、右斜め方向の勾配値dir1のそれぞれa’’〜p’’と表記する。以下、a’〜p’を要素とする左斜め方向の勾配値dir0の行列とa’’〜p’’を要素とする右斜め方向の勾配値dir1の行列の各要素の値を求める。尚、a’〜p’とa’’〜p’’の初期値は０である。
【００７６】
実施の形態では、部分原画像org_sの各列に対して１つのスレッドを割り当てる。スレッドＴi（ｉ＝０〜３）は、時刻t=xにおいて、部分原画像org_sの座標(i,x)である中心画素と当該中心画素の上下左右に隣接する４つの画素の計５画素を用いて、拡大画像において中心画素に対応する画素の左上の補間画素の左斜め方向の勾配値の一部dir0_0とを算出する。また、スレッドＴi（ｉ＝０〜３）は、時刻t=xにおいて、拡大画像において中心画素に対応する画素の右上の補間画素の右斜め方向の勾配値の一部dir1_0を算出する。また、スレッドＴi（ｉ＝０〜３）は、時刻t=xにおいて、拡大画像において中心画素に対応する画素の右下の補間画素の左斜め方向の勾配値の一部dir0_1を算出する。また、スレッドＴi（ｉ＝０〜３）は、時刻t=xにおいて、拡大画像において中心画素に対応する画素の左下の補間画素の右斜め方向の勾配値の一部dir1_1を算出する。尚、部分原画像org_sの外の画素値は０とする。
【００７７】
ここでは、スレッドＴ１とＴ２に注目して説明する。
時刻ｔ＝０において、スレッドＴ１は、画素Ａ〜Ｃ，Ｆを読み出し、画素ｂの勾配値dir0の一部（dir0_1）と画素ａの勾配値dir1の一部（dir1_1）を算出し、それぞれb’とa’’に加算する。尚、dir0_1=dir1_1=−３Ｂ＋０＋Ａ＋Ｃである。
【００７８】
時刻ｔ＝０において、スレッドＴ２は、画素Ｂ〜Ｄ，Ｇを読み出し、画素cの勾配値dir0の一部（dir0_1）と画素bの勾配値dir1の一部（dir1_1）を算出し、それぞれc’とb’’に加算する。尚、dir0_1=dir1_1=−３Ｃ＋０＋Ｂ＋Ｄである。
【００７９】
時刻ｔ＝１において、スレッドＴ１は、画素Ｂ、Ｅ〜Ｇ，Ｊを読み出し、画素aの勾配値dir0の一部（dir0_0）、画素ｆの勾配値dir0の一部（dir0_1）、画素bの勾配値dir1の一部（dir1_0）、および画素ｅの勾配値dir1の一部（dir1_1）を算出し、それぞれa’,f’, b’’,e’’に加算する。尚、dir0_0=dir1_0=−３Ｆ＋Ｅ＋Ｇ＋Ｊであり、dir0_1=dir1_1=−３Ｆ＋Ｂ＋Ｅ＋Ｇである。
【００８０】
時刻ｔ＝１において、スレッドＴ２は、画素Ｃ，Ｆ〜Ｈ、Ｋを読み出し、画素bの勾配値dir0の一部（dir0_0）、画素ｇの勾配値dir1の一部（dir0_1）、画素ｃの勾配値dir1の一部（dir1_0）、画素ｆの勾配値dir1の一部（dir1_1）を算出し、それぞれb’,g’，c’’,f’’に加算する。尚、dir0_0=dir1_0=−３Ｇ＋Ｆ＋Ｈ＋Ｋであり、dir0_1=dir1_1=−３Ｇ＋Ｃ＋Ｆ＋Ｈである。
【００８１】
この時点で、画素ｂの２つの方向の勾配値b’とb’’が算出され、画素ｂのエッジ方向と画素値が計算可能となる。また、スレッドＴ０，Ｔ３による計算により、画素a,c,dそれぞれの２つの方向の勾配値a’とa’’、c’とc’’、d’とd’’も算出され、画素a,c,dそれぞれのエッジ方向と画素値が計算可能となる。
【００８２】
時刻ｔ＝2において、スレッドＴ１は、画素Ｆ、Ｉ〜Ｋ，Ｎを読み出し、画素eの勾配値dir0の一部（dir0_0）、画素ｊの勾配値dir0の一部（dir0_1）、画素fの勾配値dir1の一部（dir1_0）、および画素ｉの勾配値dir1の一部（dir1_1）を算出し、それぞれe’,j’，f’’,i’’に加算する。尚、dir0_0=dir1_0=−３Ｊ＋Ｉ＋Ｋ＋Ｎであり、dir0_1=dir1_1=−３Ｊ＋Ｆ＋Ｉ＋Ｋである。
【００８３】
時刻ｔ＝2において、スレッドＴ２は、画素Ｇ，Ｊ〜Ｌ、Ｏを読み出し、画素fの勾配値dir0の一部（dir0_0）、画素ｋの勾配値dir0の一部（dir0_1）、画素gの勾配値dir1の一部（dir1_0）、および画素ｊの勾配値dir1の一部（dir1_1）を算出し、それぞれf’,k’，g’’,j’’に加算する。尚、dir0_0=dir1_0=−３Ｋ＋Ｊ＋Ｌ＋Ｏであり、dir0_1=dir1_1=−３Ｋ＋Ｇ＋Ｊ＋Ｌである。
【００８４】
この時点で、画素ｆの２つの方向の勾配値f’とf’’が算出され、画素fのエッジ方向と画素値が計算可能となる。また、スレッドＴ０，Ｔ３による計算により、画素e,g,h それぞれの２つの方向の勾配値e’とe’’、g’とg’’、h’とh’’が算出され、画素e,g,hそれぞれのエッジ方向と画素値が計算可能となる。
【００８５】
図１６は、実施の形態に係る勾配値算出方法のパイプライン方式を示す図である。
図１６では、図１５において画素値が未算出の空き画素の計算をパイプライン方式に組み込んだ場合の処理を示す。
【００８６】
時刻ｔ＝０において、スレッドＴ１は、画素Ａ〜Ｃ，Ｆを読み出し、時刻ｔ＝１において、スレッドＴ１は、画素Ｂ、Ｅ〜Ｇ，Ｊを読み出す。時刻ｔ＝１において、画素ａ〜ｄの値が算出可能となる。さらに時刻ｔ＝１．５において、拡大画像の０行目の画素値が未算出の画素（空き画素）、すなわち１，３，５，７列目の画素それぞれの横方向と縦方向の勾配値が求められ、エッジ方向が決定され、空き画素の画素値が算出される。空き画素の画素値は、レジスタ３２１−１に記憶される。
【００８７】
時刻ｔ＝２において、スレッドＴ１は、画素Ｆ、Ｉ〜Ｋ，Ｎを読み出す。時刻ｔ＝２において、画素e〜hの値が算出可能となる。さらに時刻ｔ＝２．５において、拡大画像の１行目と２行目の画素値が未算出の画素（空き画素）、すなわち拡大画像の１行目の０，２，４，６列目と２行目の１，３，５，７列目の画素それぞれの横方向と縦方向の勾配値が求められ、エッジ方向が決定され、空き画素の画素値が算出される。空き画素の画素値は、レジスタ３２１−１に記憶される。
【００８８】
図１７は、実施の形態に係る勾配値算出方法を用いたＦＣＢＩのフローチャートである。
【００８９】
ここでは、演算器３０１−１がＦＣＢＩの処理を行うとする。また、グローバルメモリ４０１は、拡大対象の画像（原画像）orgと原画像orgを拡大した拡大画像enlを記憶する（図３）。原画像orgのサイズは、縦Ｎ画素、横Ｍ画素であるとする。また、拡大画像enlのサイズは、縦２Ｎ画素、横２Ｍ画素であるとする。図３では、原画像のサイズは４×４画素、拡大画像enlのサイズは８×８画素である。また、初期状態では、拡大画像enlの各画素（要素）の画素値は、空白である。
【００９０】
原画像orgおよび拡大画像enlの最上行の行を０行目とする。また、原画像orgおよび拡大画像enlの左端の列を０列目とする。
【００９１】
ステップＳ６０１において、コア３３１−１−ｊは、グローバルメモリ４０１内のorgの０行目と１行目の要素をシェアードメモリ３１１−１内の部分原画像org_sの０行目と１行目へコピーする。
【００９２】
ステップＳ６０２において、コア３３１−１−ｊは、ステップＳ６０９に対応するループの始端であり、変数iの初期値は２とし、ループが実行されるごとにiは１ずつ増加され、i=N+2となるまでループは実行される。
【００９３】
ステップＳ６０３において、iがN未満である場合、制御はステップＳ６０４に進み、iがN以上である場合、制御はステップＳ６０５に進む。
【００９４】
ステップＳ６０４において、コア３３１−１−ｊは、グローバルメモリ４０１内のorgのi行目の要素をシェアードメモリ３１１−１内の部分原画像org_sの最下行へコピーする。尚、部分原画像org_sの最下行（４行目）以外の行（例えば、３行目）の要素が空である場合は、要素が空である最下行（４行目）以外の行にorgのi行目の要素はコピーされる。
【００９５】
ステップＳ６０５において、コア３３１−１−ｊは、部分原画像org_sの要素から、enlの2i-3行目分の部分補間画素itp_sを補間する（部分補間画素の補間処理）。
【００９６】
ここで、ステップＳ６０５の詳細な処理について説明する。
図１８は、部分補間画素の補間処理の詳細なフローチャートである。
図１８は、ステップＳ６０５に相当する。
【００９７】
ステップＳ７０１において、コア３３１−１−ｊは、変数j=0〜M-1それぞれに対する処理を並列に開始する。
【００９８】
ステップＳ７０２において、コア３３１−１−ｊは、部分原画像org_sのj列2行目の要素、j-1列2行目の要素、j+1列2行目の要素、およびj列3行目の要素をシェアードメモリ３１１−１から読み出す。コア３３１−１−ｊは、部分原画像org_sのj列2行目の要素を-3倍した値、j-1列2行目の要素の値、j+1列2行目の要素の値、およびj列3行目の要素の値を足し合わせて、シェアードメモリ３１１−１内の部分勾配データdir0_sのj-1列0行目と部分勾配データdir1_sのj列0行目に加算する。
【００９９】
ステップＳ７０３において、コア３３１−１−ｊは、部分原画像org_sのj列2行目の要素、j-1列2行目の要素、j+1列2行目の要素、およびj列1行目の要素をシェアードメモリ３１１−１から読み出す。コア３３１−１−ｊは、部分原画像org_sのj列2行目の要素を-3倍した値、j-1列2行目の要素の値、j+1列2行目の要素の値、およびj列1行目の要素の値を足し合わせて、シェアードメモリ３１１−１内の部分勾配データdir0_sのj列1行目と部分勾配データdir1_sのj-1列0行目に加算する。
【０１００】
ステップＳ７０４において、コア３３１−１−ｊは、部分勾配データdir0_sのｊ列０行の要素の絶対値と部分勾配データdir1_sのｊ列０行の要素の絶対値とを比較し、どちらが大きいか判定する。部分勾配データdir0_sのｊ列０行の値の絶対値が部分勾配データdir1_sのｊ列０行の値の絶対値より小さい場合、制御はステップＳ７０６に進む。部分勾配データdir0_sのｊ列０行の値の絶対値が部分勾配データdir1_sのｊ列０行の値の絶対値以上の場合、制御はステップＳ７０５に進む。
【０１０１】
ステップＳ７０５において、コア３３１−１−ｊは、部分原画像org_sのj列3行の要素とj+1列2行の要素の平均を算出し、該平均をシェアードメモリ３１１−１内の部分補間画素itp_sのj列2行へ書き込む。
【０１０２】
ステップＳ７０６において、コア３３１−１−ｊは、部分原画像org_sのj列２行の要素とj+1列３行の要素の平均を算出し、該平均をシェアードメモリ３１１−１内の部分補間画素itp_sのj列2行へ書き込む。
【０１０３】
ステップＳ７０７において、変数j=0〜M-1の全ての処理が終了したら、部分補間画素の補間処理は終了し、制御はステップＳ６０６に戻る。
【０１０４】
図１７に戻り説明を続ける。
ステップＳ６０６において、コア３３１−１−ｊは、部分原画像org_sと部分補間画素itp_sの要素からenlの2i-5行目と2i-4行目の残った要素を補間する。すなわち、コア３３１−１−ｊは、enlの2i-5行目と2i-4行目の画素値が未算出の画素の画素値を算出する。ステップＳ６０６の処理は、ステップＳ５０８〜Ｓ５１０の処理と同様に、未算出の画素の横方向の勾配値dir2と縦方向の勾配値dir3を算出し、勾配値dir2の絶対値と勾配値dir3の絶対値とを比較して、エッジ方向を決定し、決定したエッジ方向に基づいて、画素値を計算する。尚、勾配値や画素値の計算に必要な原画像orgと画素値が算出済みの補間画素の画素値は、部分原画像org_sと部分補間画素itp_sにあるため、コア３３１−１−ｊは、シェアードドメモリ３１１−１から計算に必要な画素値を読み出す。
【０１０５】
ステップＳ６０７において、コア３３１−１−ｊは、グローバルメモリ４０１−１内のenlの2i-5行目と2i-4行目へ、enlの2i-5行目と2i-4行目の補間画素に該当する要素をシェアードメモリ３１１−１およびレジスタ３２１−１から読み出してコピーする。
【０１０６】
ステップＳ６０８において、コア３３１−１−ｊは、部分原画像org_s,部分補間画素itp_s,部分勾配データdir0_s,および部分勾配データdir1_sの各行の要素を１行上へシフトする。すなわち、部分原画像org_s,部分補間画素itp_s,部分勾配データdir0_s,部分勾配データdir1_sの０行目の要素は削除され、１行目の要素が０行目の要素となる。同様に、２行目の要素が１行目の要素となり、３行目の要素が２行目の要素となり、４行目の要素が３行目の要素となる。尚、部分原画像org_s,部分補間画素itp_s,部分勾配データdir0_s,および部分勾配データdir1_sに要素が空の行がある場合は、要素が空の行があるデータに対してシフトは行わない。これにより、シェアードメモリ３１１−１に記憶されるデータのサイズを削減し、シェアードメモリ３１１−１に記憶されるデータのサイズがシェアードメモリ３１１−１の容量より大きくなることを防ぐ。
【０１０７】
ステップＳ６０９において、iがN+2より大きければ処理は終了し、iがN+2以下であれば、制御はステップＳ６０２に戻る。
【０１０８】
図１９は、時刻と各メモリ内のデータを示す図である。
図１９の原画像orgは、図４で説明した原画像orgの３行目以降も続いている画像である。原画像orgの４行目の０〜３列の画素をそれぞれ画素Ｑ〜Ｔと表記する。原画像orgの５行目の０〜３列の画素をそれぞれ画素Ｕ〜Ｘと表記する。
【０１０９】
理解を容易にするため、シェアードメモリ３１１−１の仮想空間に拡大画像におけるorg_gと部分補間画素itp_sの各要素を示す。
【０１１０】
時刻Ｔ＝０において、グローバルメモリ４０１内の原画像orgの１行目と２行目の要素がシェアードメモリ３１１−１内の部分原画像org_sの１行目と２行目にコピーされる（ステップＳ６０１）。
【０１１１】
時刻Ｔ＝１において、グローバルメモリ４０１内の原画像orgの３行目の要素がシェアードメモリ３１１−１内の部分原画像org_sの３行目にコピーされる（ステップＳ６０４）。そして、部分補間画素itp_sの１行目の要素が算出され、部分補間画素itp_sの１行目に記憶される（ステップＳ６０５）。さらに、拡大画像enlの０行目の画素値が未算出の画素の画素値が算出される（ステップＳ６０６）。すなわち、拡大画像enlの０行目の１，３，５，７列目の画素が算出される。拡大画像enlの０行目の１，３，５，７列目の画素を画素１〜４と表記する。拡大画像enlの０行目の要素である画素Ａ〜Ｄと画素１〜４がグローバルメモリ４０１の拡大画像enlの０行目にコピーされる（ステップＳ６０７）。
【０１１２】
時刻Ｔ＝２において、グローバルメモリ４０１内の原画像orgの４行目の要素がシェアードメモリ３１１−１内の部分原画像org_sの４行目にコピーされる（ステップＳ６０４）。そして、部分補間画素itp_sの２行目の要素が算出され、部分補間画素itp_sの２行目に記憶される（ステップＳ６０５）。さらに、拡大画像enlの１行目と２行目の画素値が未算出の画素の画素値が算出される（ステップＳ６０６）。すなわち、拡大画像enlの１行目の０，２，４，６列目と２行目の１，３，５，７列目の画素が算出される。拡大画像enlの１行目の０，２，４，６列目の画素を画素５〜８と表記する。拡大画像enlの２行目の１，３，５，７列目の画素を画素９〜１２と表記する。拡大画像enlの１行目の要素である画素ａ〜ｄ、画素５〜８がグローバルメモリ４０１の拡大画像enlの１行目にコピーされ、拡大画像enlの２行目の要素である画素Ｅ〜Ｈ、画素９〜１２がグローバルメモリ４０１の拡大画像enlの２行目にコピーされる（ステップＳ６０７）。部分原画像org_sの各行は１行上にシフトされる（ステップＳ６０８）。
【０１１３】
時刻Ｔ＝３において、グローバルメモリ４０１内の原画像orgの５行目の要素がシェアードメモリ３１１−１内の部分原画像org_sの４行目にコピーされる（ステップＳ６０４）。そして、部分補間画素itp_sの３行目の要素が算出され、部分補間画素itp_sの３行目に記憶される（ステップＳ６０５）。さらに、拡大画像enlの３行目と４行目の画素値が未算出の画素の画素値が算出される（ステップＳ６０６）。すなわち、拡大画像enlの３行目の０，２，４，６列目と４行目の１，３，５，７列目の画素が算出される。拡大画像enlの３行目の０，２，４，６列目の画素を画素１３〜１６と表記する。拡大画像enlの４行目の１，３，５，７列目の画素を画素１７〜２０と表記する。拡大画像enlの３行目の要素である画素ｅ〜ｈ、画素１３〜１６がグローバルメモリ４０１の拡大画像enlの３行目にコピーされ、拡大画像enlの４行目の要素である画素Ｉ〜Ｌ、画素１７〜２０がグローバルメモリ４０１の拡大画像enlの４行目にコピーされる（ステップＳ６０７）。
【０１１４】
実施の形態に係るＧＰＵによれば、グローバルメモリから読み出すデータ量を削減することで、グローバルメモリへのアクセス回数を減らし、ＦＣＢＩの処理を高速にすることが出来る。
【０１１５】
また、実施の形態に係る勾配値算出方法は、Iterative Curvature Based Interpolation（ＩＣＢＩ）にも適用可能である。
【０１１６】
図２０は、情報処理装置（コンピュータ）の構成図である。
実施の形態のＧＰＵ１０１は、例えば、図２０に示すような情報処理装置（コンピュータ）１に搭載される。
【０１１７】
情報処理装置１は、ＣＰＵ２、メモリ３、入力装置４、出力装置５、記憶部６、記録媒体駆動部７、ネットワーク接続装置８、及びＧＰＵ１０１を備え、それらはバス９により互いに接続されている。
【０１１８】
ＣＰＵ２は、情報処理装置１全体を制御する中央処理装置である。
メモリ３は、プログラム実行の際に、記憶部６（あるいは可搬記録媒体１０）に記憶されているプログラムあるいはデータを一時的に格納するRead Only Memory(ＲＯＭ)やRandom Access Memory(ＲＡＭ)等のメモリである。
【０１１９】
入力装置４は、ユーザ又はオペレータからの指示や情報の入力、情報処理装置１で用いられるデータの取得等に用いられる。入力装置４は、例えば、キーボード、マウス、タッチパネル、カメラ、またはセンサ等である。
【０１２０】
出力装置５は、ユーザ又はオペレータへの問い合わせや処理結果を出力したり、ＣＰＵ２による制御により動作する装置である。出力装置５は、例えば、ディスプレイ装置、またはプリンタ等である。
【０１２１】
記憶部６は、例えば、磁気ディスク装置、光ディスク装置、テープ装置等である。情報処理装置１は、記憶部６に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【０１２２】
記録媒体駆動部７は、可搬記録媒体１０を駆動し、その記録内容にアクセスする。可搬記録媒体としては、メモリカード、フレキシブルディスク、Compact Disk Read Only Memory(ＣＤ−ＲＯＭ)、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。ユーザは、この可搬記録媒体１０に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【０１２３】
ネットワーク接続装置８は、Local Area Network（ＬＡＮ）やWide Area Network（ＷＡＮ）等の任意の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インターフェースである。ネットワーク接続装置８は、通信ネットワークを介して接続された装置へデータの送信または通信ネットワークを介して接続された装置からデータを受信する。
【０１２４】
ＧＰＵ１０１は、上述の勾配値算出方法を用いたＦＣＢＩの処理を行う。またＧＰＵ１０１は、ディスプレイ装置である出力装置５への表示処理などを行う。また、ＧＰＵ１０１は、メモリ３を利用してプログラムを実行することにより、上述した各種処理を実行してもよい。この場合、可搬記録媒体１０等から読み出されたプログラムコード自体が実施の形態の機能を実現する。
【０１２５】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）
原画像および前記原画像を拡大した拡大画像を記憶する第１のメモリと、
処理部と、
を備え、
前記処理部は、
前記拡大画像内の補間画素のエッジ方向の決定に用いられる第１の勾配値を第１の複数の画素それぞれの画素値から算出し、前記エッジ方向の決定に用いられる第２の勾配値を前記原画像の第２の複数の画素それぞれの画素値から算出する演算部と、
前記第１の勾配値と前記第２の勾配値とを記憶する第２のメモリと、
を含み、
前記演算部は、
前記第１のメモリから所定のデータ単位で前記原画像を読み出し、
前記第１の複数の画素のうち前記補間画素より上側に位置する第３の複数の画素が読み出されると、前記第３の複数の画素それぞれの画素値から第１の値を算出し、
前記第２の複数の画素のうち前記補間画素より上側に位置する第４の複数の画素が読み出されると、前記第４の複数の画素それぞれの画素値から第２の値を算出し、
前記第１の値および前記第２の値の算出後、前記第１のメモリから前記所定のデータ単位で前記補間画素より下側に位置する前記原画像の複数の画素を読み出し、
前記第１の複数の画素のうち前記補間画素より下側に位置する第５の複数の画素が読み出されると、前記第５の複数の画素それぞれの画素値から第３の値を算出し、
前記第２の複数の画素のうち前記補間画素より下側に位置する第６の複数の画素が読み出されると、前記第６の複数の画素それぞれの画素値から第４の値を算出し、
前記第１の値に前記第３の値を加算して前記第１の勾配値を算出し、
前記第２の値に前記第４の値を加算して前記第２の勾配値を算出し、
前記第１の勾配値と前記第２の勾配値に基づいて、前記エッジ方向を決定し、
前記エッジ方向に基づいて、前記補間画素の画素値を算出する
ことを特徴とする情報処理装置。
（付記２）
前記第２のメモリは、今までに読み出された前記原画像の一部である部分画像を記憶し、
前記演算部は、前記原画像から前記所定のデータ単位で読み出したデータを、前記部分画像に追加し、
次に前記第１のメモリから前記所定のデータ単位で前記原画像を読み出す前に、前記部分画像に含まれるデータを古い順に前記所定のデータ単位で削除することを特徴とする付記１記載の情報処理装置。
（付記３）
前記演算部は、前記第1の値、前記第２の値、前記第３の値、および前記第４の値を用いて、他の複数の補間画素のエッジ方向の決定に用いられる複数の勾配値を算出することを特徴とする付記１または２記載の情報処理装置。
（付記４）
原画像および前記原画像を拡大した拡大画像を記憶する第１のメモリと、処理部と、を備え、前記処理部は、前記拡大画像内の補間画素のエッジ方向の決定に用いられる第１の勾配値を第１の複数の画素それぞれの画素値から算出し、前記エッジ方向の決定に用いられる第２の勾配値を前記原画像の第２の複数の画素それぞれの画素値から算出する演算部と、前記第１の勾配値と前記第２の勾配値とを記憶する第２のメモリと、を含む情報処理装置が
前記第１のメモリから所定のデータ単位で前記原画像を読み出し、
前記第１の複数の画素のうち前記補間画素より上側に位置する第３の複数の画素が読み出されると、前記第３の複数の画素それぞれの画素値から第１の値を算出し、
前記第２の複数の画素のうち前記補間画素より上側に位置する第４の複数の画素が読み出されると、前記第４の複数の画素それぞれの画素値から第２の値を算出し、
前記第１の値および前記第２の値の算出後、前記第１のメモリから前記所定のデータ単位で前記補間画素より下側に位置する前記原画像の複数の画素を読み出し、
前記第１の複数の画素のうち前記補間画素より下側に位置する第５の複数の画素が読み出されると、前記第５の複数の画素それぞれの画素値から第３の値を算出し、
前記第２の複数の画素のうち前記補間画素より下側に位置する第６の複数の画素が読み出されると、前記第６の複数の画素それぞれの画素値から第４の値を算出し、
前記第１の値に前記第３の値を加算して前記第１の勾配値を算出し、
前記第２の値に前記第４の値を加算して前記第２の勾配値を算出し、
前記第１の勾配値と前記第２の勾配値に基づいて、前記エッジ方向を決定し、
前記エッジ方向に基づいて、前記補間画素の画素値を算出する
処理を備える情報処理方法。
（付記５）
前記第２のメモリは、今までに読み出された前記原画像の一部である部分画像を記憶し、
前記原画像を読み出す処理は、前記読み出したデータを前記部分画像に追加し、
次に前記第１のメモリから前記所定のデータ単位で前記原画像を読み出す前に、前記部分画像に含まれるデータを古い順に前記所定のデータ単位で削除する処理をさらに備えることを特徴とする付記４記載の情報処理方法。
（付記６）
前記第1の値、前記第２の値、前記第３の値、および前記第４の値を用いて、他の複数の補間画素のエッジ方向の決定に用いられる複数の勾配値を算出する処理をさらに備える付記４または５記載の情報処理方法。
（付記７）
原画像および前記原画像を拡大した拡大画像を記憶する第１のメモリと、処理部と、を備え、前記処理部は、前記拡大画像内の補間画素のエッジ方向の決定に用いられる第１の勾配値を第１の複数の画素それぞれの画素値から算出し、前記エッジ方向の決定に用いられる第２の勾配値を前記原画像の第２の複数の画素それぞれの画素値から算出する演算部と、前記第１の勾配値と前記第２の勾配値とを記憶する第２のメモリと、を含むコンピュータに
前記第１のメモリから所定のデータ単位で前記原画像を読み出し、
前記第１の複数の画素のうち前記補間画素より上側に位置する第３の複数の画素が読み出されると、前記第３の複数の画素それぞれの画素値から第１の値を算出し、
前記第２の複数の画素のうち前記補間画素より上側に位置する第４の複数の画素が読み出されると、前記第４の複数の画素それぞれの画素値から第２の値を算出し、
前記第１の値および前記第２の値の算出後、前記第１のメモリから前記所定のデータ単位で前記補間画素より下側に位置する前記原画像の複数の画素を読み出し、
前記第１の複数の画素のうち前記補間画素より下側に位置する第５の複数の画素が読み出されると、前記第５の複数の画素それぞれの画素値から第３の値を算出し、
前記第２の複数の画素のうち前記補間画素より下側に位置する第６の複数の画素が読み出されると、前記第６の複数の画素それぞれの画素値から第４の値を算出し、
前記第１の値に前記第３の値を加算して前記第１の勾配値を算出し、
前記第２の値に前記第４の値を加算して前記第２の勾配値を算出し、
前記第１の勾配値と前記第２の勾配値に基づいて、前記エッジ方向を決定し、
前記エッジ方向に基づいて、前記補間画素の画素値を算出する
する処理を実行させるプログラム。
（付記８）
前記第２のメモリは、今までに読み出された前記原画像の一部である部分画像を記憶し、
前記原画像を読み出す処理は、前記読み出したデータを前記部分画像に追加し、
次に前記第１のメモリから前記所定のデータ単位で前記原画像を読み出す前に、前記部分画像に含まれるデータを古い順に前記所定のデータ単位で削除する処理をさらに備えることを特徴とする付記７記載のプログラム。
（付記９）
前記第1の値、前記第２の値、前記第３の値、および前記第４の値を用いて、他の複数の補間画素のエッジ方向の決定に用いられる複数の勾配値を算出する処理をさらに備える付記７または８記載のプログラム。
【符号の説明】
【０１２６】
１０１    ＧＰＵ
２０１    チップ
３０１    演算器
３１１    シェアードメモリ
３２１    レジスタ
３３１    コア
４０１    グローバルメモリ
【図１】
2018088098.tif 000003
【図２】
2018088098.tif 000004
【図３】
2018088098.tif 000005
【図４】
2018088098.tif 000006
【図５】
2018088098.tif 000007
【図６】
2018088098.tif 000008
【図７】
2018088098.tif 000009
【図８】
2018088098.tif 000010
【図９】
2018088098.tif 000011
【図１０】
2018088098.tif 000012
【図１１】
2018088098.tif 000013
【図１２】
2018088098.tif 000014
【図１３】
2018088098.tif 000015
【図１４】
2018088098.tif 000016
【図１５】
2018088098.tif 000017
【図１６】
2018088098.tif 000018
【図１７】
2018088098.tif 000019
【図１８】
2018088098.tif 000020
【図１９】
2018088098.tif 000021
【図２０】
2018088098.tif 000022