(57)【特許請求の範囲】
【請求項１】
マルチコアプロセッサで画像に対して並列にフィルタリング処理を行う画像フィルタリング方法であって、
前記画像の次元及び前記フィルタリング処理の予め決められた隣域範囲に基づいて、前記フィルタリング処理の複数の計算方向を決定する計算方向決定ステップと、
複数のスレッドのそれぞれのスレッドがそれぞれ前記画像における１行の画素に対して、当該行の各画素を対象画素として、対象画素と当該対象画素の当該計算方向における画素であって対象画素の前記隣域範囲内に位置する各隣域画素との間で予め決められたフィルタリング計算を行い、前記フィルタリング計算の結果をそれぞれ累積加算する方法で当該対象画素と各隣域画素のフィルタリング結果として記憶する処理を、決定された複数の計算方向における計算方向毎にそれぞれ行う各方向フィルタリング計算ステップと、
前記各方向フィルタリング計算ステップによって、決定されたすべての計算方向に対して取得したフィルタリング結果を前記画像の画素毎に累積加算することにより、前記画像の画像フィルタリング結果を取得する画像フィルタリング結果取得ステップと、
を含むことを特徴とする画像フィルタリング方法。
【請求項２】
前記各方向フィルタリング計算ステップにおいて、複数のスレッドのそれぞれのスレッドが互いに並列にフィルタリング計算を行うことを特徴とする請求項１に記載の画像フィルタリング方法。
【請求項３】
前記各方向フィルタリング計算ステップにおいて、それぞれのスレッドがそれぞれ前記画像における１行の画素に対して、当該行の最初画素から当該行の最終画素まで順次対象画素として、対象画素と当該対象画素の当該計算方向における各隣域画素との間で前記フィルタリング計算を行い、前記フィルタリング計算の結果をそれぞれ累積加算する方法で当該対象画素と各隣域画素のフィルタリング結果として記憶することを特徴とする請求項１に記載の画像フィルタリング方法。
【請求項４】
前記計算方向決定ステップで前記画像における画素配列方向に対して傾斜した計算方向が決定された場合、前記各方向フィルタリング計算ステップにおいて、当該傾斜した計算方向に応じて処理を行う際に、それぞれのスレッドが計算する各行画素の画素数が同じあることを特徴とする請求項１に記載の画像フィルタリング方法。
【請求項５】
二次元画像に対してフィルタリング処理を行い且つフィルタリング処理の隣域範囲の半径が１の場合、
前記計算方向決定ステップにおいて、決定された計算方向の数が４であり、
前記画像フィルタリング結果取得ステップにおいて、前記各方向フィルタリング計算ステップによって、決定された４つの計算方向に対して取得したフィルタリング結果を前記画像の画素毎に累積加算することにより、前記画像の画像フィルタリング結果を取得することを特徴とする請求項１〜４のいずれかに記載の画像フィルタリング方法。
【請求項６】
三次元画像に対してフィルタリング処理を行い且つフィルタリング処理の隣域範囲の半径が１の場合、
前記計算方向決定ステップにおいて、決定された計算方向の数が１３であり、
前記画像フィルタリング結果取得ステップにおいて、前記各方向フィルタリング計算ステップによって、決定された１３の計算方向に対して取得したフィルタリング結果を前記画像の画素毎に累積加算することにより、前記画像の画像フィルタリング結果を取得することを特徴とする請求項１〜４のいずれかに記載の画像フィルタリング方法。
【請求項７】
三次元画像に対してフィルタリング処理を行い且つフィルタリング処理の隣域範囲の半径がｒの場合、複数の計算方向が前記計算方向決定ステップによって決定された後、
（１）前記三次元画像を構成する複数の二次元画像のうち最初の２ｒ＋１個の二次元画像をグローバルメモリから前記マルチコアプロセッサの共有メモリに読み込み、当該２ｒ＋１個の二次元画像に対して前記各方向フィルタリング計算ステップと前記画像フィルタリング結果取得ステップを行い、
（２）読み込んだ２ｒ＋１個の二次元画像のうち前のｒ＋１個の二次元画像の各画素のフィルタリング結果を共有メモリからグローバルメモリに書き込み、
（３）前記三次元画像を構成する複数の二次元画像のうち後続のｒ＋１個の二次元画像をグローバルメモリから共有メモリに読み込み、当該後続のｒ＋１個の二次元画像と（２）において前記共有メモリからグローバルメモリに書き込まれなかったｒ個の二次元画像からなる２ｒ＋１個の二次元画像に対して、前記各方向フィルタリング計算ステップと前記画像フィルタリング結果取得ステップを行い、
（４）前記三次元画像を構成するすべての二次元画像の画像フィルタリング結果を共有メモリからグローバルメモリに書き込むまで処理（２）と処理（３）を繰り返し、グローバルメモリに書き込んだ前記すべての二次元画像の画像フィルタリング結果を前記三次元画像の画像フィルタリング結果とすることを特徴とする請求項１〜４のいずれかに記載の画像フィルタリング方法。
【請求項８】
Ｘ線によってスキャン対象物をスキャンし、前記スキャン対象物のＣＴ画像を出力するＣＴシステムであって、
Ｘ線によってスキャン対象物をスキャンし、前記スキャン対象物の投影画像を取得するＣＴスキャナーと、
マルチコアプロセッサを有し、前記投影画像に基づいてＣＴ画像を再構成し、ＣＴ画像を再構成するために前記マルチコアプロセッサを利用して画像に対して並列に行われるフィルタリング処理において、画像の次元及び前記フィルタリング処理の予め決められた隣域範囲に基づいて、前記フィルタリング処理の複数の計算方向を決定し、決定された複数の計算方向における計算方向毎に、複数のスレッドのそれぞれのスレッドがそれぞれ前記画像における１行の画素に対して、当該行の各画素を対象画素として、対象画素と当該対象画素の当該計算方向における画素であって対象画素の前記隣域範囲内に位置する各隣域画素との間で予め決められたフィルタリング計算を行い、前記フィルタリング計算の結果をそれぞれ累積加算する方法で当該対象画素と各隣域画素のフィルタリング結果として記憶し、決定されたすべての計算方向に対して取得したフィルタリング結果を前記画像の画素毎に累積加算することにより、前記画像の画像フィルタリング結果を取得するＣＴ画像再構成装置と、
前記ＣＴ画像再構成装置により再構成されたＣＴ画像を出力するＣＴ画像出力装置と、を有することを特徴とするＣＴシステム。
【請求項９】
前記ＣＴ画像再構成装置が有する前記マルチコアプロセッサはＧＰＵ、即ち画像処理装置であることを特徴とする請求項８に記載のＣＴシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像フィルタリング方法及びＣＴシステムに関し、特に並列計算を用いた画像フィルタリング方法及びＣＴシステムに関する。
【背景技術】
【０００２】
画像フィルタリング、即ち画像における不必要なノイズの除去は画像前処理において不可欠な操作である。フィルタは画像処理において最も重要な構成要素の一つであり、画像変換、画像補正及び画像復元のいずれにおいても大変重要である。異なるフィルタを選択することで異なる処理効果を得ることができる。例えば、ローパスフィルタは平滑画像に用いられ、ハイパスフィルタはエッジ抽出などに用いられる。情報技術の発展に伴い、処理しなければならないデータ量が大幅に増えており、これにより画像フィルタリングの処理スピードに対しさらに高い要求が求められている。
【０００３】
フィルタは、直接画像処理に用いられる外に、一部の反復計算の正則化制約条件とすることもできる。例えば、コンピュータトモグラフィー（ＣＴ）は医学画像分野に幅広く応用されている。コンピュータトモグラフィー（ＣＴ）は、コンピュータ技術を利用して被測定物体の断層スキャン画像を再構成して三次元断層画像を取得するスキャン方法である。当該スキャン方法は、単一軸面の放射線によって被測定物体を貫通し、放射線に対する被測定物体の各部分の吸収と透過率の相違に基づいて、コンピュータにより透過放射線を収集し、三次元によって画像を再構成する。解析的再構成と反復再構成はＣＴ画像再構成の二つの基本的な方法であり、そのうち、反復再構成は画像品質の安定を保証する前提で放射線量を大幅に低減することができ、今後の技術発展の方向性としての低放射線量ＣＴに適合する。低放射線量ＣＴ画像の反復再構成では、反復計算の度にフィルタリング正則化計算を行わなければならない。医療画像データ量が大きいため、フィルタリングの速度はＣＴ画像再構成の速度に直接影響を与える。したがって、大規模画像フィルタリング処理に対して速度を上げることが必要となっている。
【０００４】
他方、近年、画像プロセッサ（ＧＰＵ）を代表とするマルチコアプロセッサの高性能数値演算能力が迅速に発展を遂げている。ＮＶＩＤＩＡ社が２００７年に正式に発表したＣＵＤＡ（Ｃｏｍｐｕｔｅｒ  Ｕｎｉｆｉｅｄ  Ｄｅｖｉｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ、コンピュータユニファイドデバイスアーキテクチャ）は、類似Ｃ言語（従来のＣ言語をサポートする上で、一部の機能を拡張）を使用することで開発の作業がより簡単になっている。ＧＰＵは図形処理に限らず、汎用数値計算にも応用され、特にパラレル度が高く数値演算量が大きい演算に適する。
【０００５】
したがって、近年には、ＧＰＵを代表とするマルチコアプロセッサの並列計算を利用して大規模画像のフィルタリング処理を加速させている。従来の並列処理方法においては、画像における各画素点のフィルタリング計算を基本計算ユニットとしてそれぞれのスレッドに完成させている。しかし、このような方法は重複計算が大量に発生し、計算量と計算時間の無駄な増加が発生してしまい、さらには、グローバルメモリへの重複アクセスが大量に発生し、グローバルメモリへのアクセス回数とアクセス時間の無駄な増加が発生してしまう。したがって、従来の技術は並列計算によって画像フィルタリング処理を実現する際に画像フィルタリング速度が低いという技術課題が存在する。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、従来の技術における上述の技術課題を鑑みてなされたものであり、並列計算によって高速の大規模画像フィルタリング処理を実現する際に、従来の並列計算における重複計算を減らして計算量を減少させることで、画像フィルタリングの並列計算速度を大幅に高めることができる、画像プロセッサ（ＧＰＵ）を代表とするマルチコアプロセッサに基づく画像フィルタリング方法及びＣＴシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の目的を達するために、本発明は画像フィルタリング方法を提供し、マルチコアプロセッサで画像に対して並列にフィルタリング処理を行う画像フィルタリング方法であって、前記画像の次元及び前記フィルタリング処理の予め決められた隣域範囲に基づいて、前記フィルタリング処理の複数の計算方向を決定する計算方向決定ステップと、複数のスレッドのそれぞれのスレッドがそれぞれ前記画像における１行の画素に対して、当該行の各画素を対象画素として、対象画素と当該対象画素の当該計算方向における画素であって対象画素の前記隣域範囲内に位置する各隣域画素との間で予め決められたフィルタリング計算を行い、前記フィルタリング計算の結果をそれぞれ累積加算する方法で当該対象画素と各隣域画素のフィルタリング結果として記憶する処理を、決定された複数の計算方向における計算方向毎にそれぞれ行う各方向フィルタリング計算ステップと、前記各方向フィルタリング計算ステップによって、決定されたすべての計算方向に対して取得したフィルタリング結果を前記画像の画素毎に累積加算することにより、前記画像の画像フィルタリング結果を取得する画像フィルタリング結果取得ステップと、を含むことを特徴とする。
【０００８】
本発明による画像フィルタリング方法は、並列計算を用いた画像フィルタリング処理において、従来の並列計算における重複計算を減らして計算量を減少させることで、画像フィルタリングの並列計算速度を大幅に高めるとともに画像フィルタリング処理の速度と実用性を向上させることができる。
【０００９】
本発明による画像フィルタリング方法は、前記各方向フィルタリング計算ステップにおいて、複数のスレッドのそれぞれのスレッドが互いに並列にフィルタリング計算を行ってもよい。
【００１０】
ここで、複数のスレッドのそれぞれのスレッドが互いに並列にフィルタリング計算を行うことにより、画像フィルタリング処理の速度をさらに高めることができる。
【００１１】
本発明による画像フィルタリング方法は、前記各方向フィルタリング計算ステップにおいて、それぞれのスレッドがそれぞれ前記画像における１行の画素に対して、当該行の最初画素から当該行の最終画素まで順次対象画素として、対象画素と当該対象画素の当該計算方向における各隣域画素との間で前記フィルタリング計算を行い、前記フィルタリング計算の結果をそれぞれ累積加算する方法で当該対象画素と各隣域画素のフィルタリング結果として記憶してもよい。
【００１２】
ここで、各計算方向に対するフィルタリング計算において、それぞれのスレッドは１行の画素における最初画素から最終画素まで順次対象画素とする。これにより、当該行の各画素間において互いにフィルタリング計算結果を十分に利用して、画像フィルタリングの並列計算速度を大幅に高めることができる。
【００１３】
本発明による画像フィルタリング方法は、前記計算方向決定ステップで前記画像における画素配列方向に対して傾斜した計算方向が決定された場合、前記各方向フィルタリング計算ステップにおいて、当該傾斜した計算方向に応じて処理を行う際に、それぞれのスレッドが計算する各行画素の画素数が同じあってもよい。
【００１４】
ここで、傾斜した計算方向に応じてフィルタリング計算を行う際に、それぞれのスレッドが計算した各行画素を合理的に設定して各行画素の画素数を等しくすることで、それぞれのスレッドの間で計算量を最大限に均等化し、且つそれぞれのスレッドの並列計算に有利であり、これにより画像フィルタリングの並列計算速度を高めることができる。
【００１５】
本発明による画像フィルタリング方法は、二次元画像に対してフィルタリング処理を行い且つフィルタリング処理の隣域範囲の半径が１の場合、前記計算方向決定ステップにおいて、決定された計算方向の数が４であり、前記画像フィルタリング結果取得ステップにおいて、前記各方向フィルタリング計算ステップによって、決定された４つの計算方向に対して取得したフィルタリング結果を前記画像の画素毎に累積加算することにより、前記画像の画像フィルタリング結果を取得してもよい。
【００１６】
これにより、マルチコアプロセッサで二次元画像に対して並列にフィルタリング処理を行うことで、従来の並列計算における重複計算を減らして計算量を減少させることができ、これにより二次元画像フィルタリングの並列計算速度を大幅に高めるとともに二次元画像フィルタリング処理の速度と実用性を向上させることができる。
【００１７】
本発明による画像フィルタリング方法は、三次元画像に対してフィルタリング処理を行い且つフィルタリング処理の隣域範囲の半径が１の場合、前記計算方向決定ステップにおいて、決定された計算方向の数が１３であり、前記画像フィルタリング結果取得ステップにおいて、前記各方向フィルタリング計算ステップによって、決定された１３の計算方向に対して取得したフィルタリング結果を前記画像の画素毎に累積加算することにより、前記画像の画像フィルタリング結果を取得してもよい。
【００１８】
これにより、マルチコアプロセッサで三次元画像に対して並列にフィルタリング処理を行うことで、従来の並列計算における重複計算を減らして計算量を減少させることができ、これにより三次元画像フィルタリングの並列計算速度を大幅に高めるとともに三次元画像フィルタリング処理の速度と実用性を向上させることができる。
【００１９】
本発明による画像フィルタリング方法は、三次元画像に対してフィルタリング処理を行い且つフィルタリング処理の隣域範囲の半径がｒの場合、複数の計算方向が前記計算方向決定ステップによって決定された後、（１）前記三次元画像を構成する複数の二次元画像のうち最初の２ｒ＋１個の二次元画像をグローバルメモリから前記マルチコアプロセッサの共有メモリに読み込み、当該２ｒ＋１個の二次元画像に対して前記各方向フィルタリング計算ステップと前記画像フィルタリング結果取得ステップを行い、（２）読み込んだ２ｒ＋１個の二次元画像のうち前のｒ＋１個の二次元画像の各画素のフィルタリング結果を共有メモリからグローバルメモリに書き込み、（３）前記三次元画像を構成する複数の二次元画像のうち後続のｒ＋１個の二次元画像をグローバルメモリから共有メモリに読み込み、当該後続のｒ＋１個の二次元画像と（２）において前記共有メモリからグローバルメモリに書き込まれなかったｒ個の二次元画像からなる２ｒ＋１個の二次元画像に対して、前記各方向フィルタリング計算ステップと前記画像フィルタリング結果取得ステップを行い、（４）前記三次元画像を構成するすべての二次元画像の画像フィルタリング結果を共有メモリからグローバルメモリに書き込むまで処理（２）と処理（３）を繰り返し、グローバルメモリに書き込んだ前記すべての二次元画像の画像フィルタリング結果を前記三次元画像の画像フィルタリング結果としてもよい。
【００２０】
一般的に、グローバルメモリはキャッシュを有さず、読み書きが遅いが、マルチコアプロセッサの共有メモリはキャッシュの利点を有し、読み書きが速い。上述の処理により、共有メモリのキャッシュメカニズムを十分に利用して、グローバルメモリへのアクセス回数を減らしてプロセッサメモリへのアクセス時間を大幅に減少させることで、画像フィルタリング処理の速度と実用性を向上させる。
【００２１】
上述の目的を実現するために、本発明はさらにＣＴシステムを提供し、Ｘ線によってスキャン対象物をスキャンし、前記スキャン対象物のＣＴ画像を出力するＣＴシステムであって、Ｘ線によってスキャン対象物をスキャンし、前記スキャン対象物の投影画像を取得するＣＴスキャナーと、マルチコアプロセッサを有し、前記投影画像に基づいてＣＴ画像を再構成し、ＣＴ画像を再構成するために前記マルチコアプロセッサを利用して画像に対して並列に行われるフィルタリング処理において、画像の次元及び前記フィルタリング処理の予め決められた隣域範囲に基づいて、前記フィルタリング処理の複数の計算方向を決定し、決定された複数の計算方向における計算方向毎に、複数のスレッドのそれぞれのスレッドがそれぞれ前記画像における１行の画素に対して、当該行の各画素を対象画素として、対象画素と当該対象画素の当該計算方向における画素であって対象画素の前記隣域範囲内に位置する各隣域画素との間で予め決められたフィルタリング計算を行い、前記フィルタリング計算の結果をそれぞれ累積加算する方法で当該対象画素と各隣域画素のフィルタリング結果として記憶し、決定されたすべての計算方向に対して取得したフィルタリング結果を前記画像の画素毎に累積加算することにより、前記画像の画像フィルタリング結果を取得するＣＴ画像再構成装置と、前記ＣＴ画像再構成装置により再構成されたＣＴ画像を出力するＣＴ画像出力装置と、を有することを特徴とする。
【００２２】
本発明によるＣＴシステムは、ＣＴ画像再構成に並列計算を用いた画像フィルタリング処理において、従来の並列計算における重複計算を減らして計算量を減少させることで、画像フィルタリングの並列計算速度を大幅に高めるとともに、画像フィルタリング処理の速度を高めて画像フィルタリングをより効率よくＣＴシステムを代表とする医療画像処理などの大規模データ計算に応用することができる。
【００２３】
本発明によるＣＴシステムは、前記ＣＴ画像再構成装置が有する前記マルチコアプロセッサがＧＰＵ、即ち画像処理装置であってもよい。
【００２４】
近年、画像処理装置（ＧＰＵ）の高性能数値演算能力が迅速に発展を遂げており、特にパラレル度が高く数値演算量が大きい演算に適する。ＧＰＵを用いてＣＴ画像再構成におけるフィルタリング処理を並列に実現することで、画像フィルタリング処理の速度を最大限に高めることができる。
【００２５】
本発明は上述の画像フィルタリング方法及びＣＴシステムに限定されず、その他の方法によって実現することもできる。例えば、上述の画像フィルタリング方法を含むＣＴ画像再構成方法、ＣＴ画像生成方法などによって本発明の目的を実現することもできる。また、ソフトモジュールまたはハードウェアアーキテクチャーの画像フィルタリング装置またはＣＴ画像再構成装置に基づいて、上述の画像フィルタリング方法の各ステップに対応する処理を行うことによって本発明の目的を実現することもできる。
【図面の簡単な説明】
【００２６】
【図１】本発明の画像フィルタリング方法を示すフローチャートである。
【図２Ａ】本発明における二次元と三次元画像フィルタリングの計算方向の略図である。
【図２Ｂ】本発明における二次元と三次元画像フィルタリングの計算方向の略図である。
【図３Ａ】本発明の各計算方向におけるスレッドのタスク割り当て略図である。
【図３Ｂ】本発明の各計算方向におけるスレッドのタスク割り当て略図である。
【図３Ｃ】本発明の各計算方向におけるスレッドのタスク割り当て略図である。
【図３Ｄ】本発明の各計算方向におけるスレッドのタスク割り当て略図である。
【図３Ｅ】本発明の各計算方向におけるスレッドのタスク割り当て略図である。
【図４】本発明の三次元画像の一つのスレッドブロックに対する並列処理フローチャートである。
【図５Ａ】本発明の三次元画像フィルタリングのメモリ管理略図である。
【図５Ｂ】本発明の三次元画像フィルタリングのメモリ管理略図である。
【図６】本発明のＣＴシステムのシステム構成図である。
【発明を実施するための形態】
【００２７】
本発明について理解しやすくするために、先ず画像フィルタリング処理について全体的に説明する。
【００２８】
画像のフィルタリング方法は多いが、主に周波数領域法と空間領域法の二種類に分けることができる。そのうち、空間フィルタリング法は直接的フィルタリング方法の一つであり、画像処理時に直接画像のグレースケールに対して演算を行う。本発明は空間フィルタリングに対する並列計算方法に係わる。画像フィルタリングは計算位置画素（中心画素、対象画素）の画素値とその隣域内の各画素値を用いてフィルタリング式によって計算を行い、最終的に当該計算位置画素のフィルタリング結果を取得する。ここで、隣域とは本分野の技術用語であり、フィルタリングコアとも称し、計算位置画素（中心画素、対象画素）のフィルタリングに寄与する（影響を与える）領域を指し、例えば、半径ｒを有する隣域範囲であってよい。そのうち、計算位置画素（中心画素、対象画素）の隣域範囲内に位置する画素を隣域画素と称する。
【００２９】
画像フィルタリング処理において、異なるフィルタのフィルタリング式は異なる。例えば、ＣＴ画像の反復演算において、正則化計算は隣域画素と計算位置画素の画素値を減算し、その後、差分値を用いて後続演算を行う。後で行う説明では、隣域画素と計算位置画素の画素値を減算するという演算を基本演算として、並列処理方法について例を挙げて紹介するが、本発明は同様にその他のフィルタリングコアに応用することができ、減算法に限定されない。
【００３０】
フィルタリング計算とは、隣域内各画素の中心画素に対する影響の総和を求める計算である。隣域内各画素の影響の大きさは重み値で制御することができる。通常の画像フィルタリングでは、計算位置画素に対する隣域画素の影響重みは、主に中心画素に対する各隣域画素の位置、或いは両者間の距離によって決められる。一般的に言うと、画素ｂに対する隣域内画素ａの影響は、画素ａに対する画素ｂの影響と同じであるべきである。従来の並列画像フィルタリング処理においては、画像における各画素点のフィルタリング計算を基本計算ユニットとしてそれぞれのスレッドに完成させる。この際、画素ａが計算位置画素（中心画素）になる場合、画像フィルタリング結果における、画素ａに対する画素ｂの影響を計算する。その後、画素ｂが計算位置画素（中心画素）になる場合、また画像フィルタリング結果における、画素ｂに対する画素ａの影響を計算する。上述のように、画素ｂに対する画素ａの影響と画素ａに対する画素ｂの影響は一般的に同じであり、したがって従来の並列画像フィルタリング処理においては重複計算が大量に行われて、演算量と演算時間の無駄な増加が発生してしまう。
【００３１】
他方、マルチコアプロセッサを用いた並列計算においては、それぞれのスレッドが自身のタスクを処理し、それぞれのスレッドが並列に計算を行ってよい。すべてのスレッドは一連のスレッドブロックに分けられ、１つのスレッドブロック内のスレッドはこれらのスレッドブロックの共有メモリにアクセスすることができ、共有メモリ内にキャッシュがあり、読み書きは速いが、メモリの大きさには限りがある。したがって、通常の並列計算においては、共有メモリの読み書きが速いという利点を利用するために、１つのスレッドブロックが先ず一部の入力データをグローバルメモリ（例えばビデオメモリ）から共有メモリ内に読み込み、その後共有メモリで計算を行い、最後に再び結果を共有メモリからグローバルメモリにコピーする。従来の並列画像フィルタリング処理においては、画像における各画素点のフィルタリング計算を基本計算ユニットとしてそれぞれのスレッドに完成させる。この際、例えば三次元画像におけるある１枚の画像（例えば、１枚目の画像）内の画素を処理するときに、２枚目の画像内の隣域画素を利用してフィルタリング計算を行う必要あり、そのためグローバルメモリから当該２枚目の画像を読み取る必要がある。その後、２枚目の画像内の画素を処理するときにもグローバルメモリから当該２枚目の画像を読み取る必要がある。その後、３枚目の画像内の画素を処理するときにも、２枚目の画像内の隣域画素を利用してフィルタリング計算を行う必要があり、そのため再びグローバルメモリから当該２枚目の画像を読み取る必要がある。即ち、隣域半径ｒが１の場合、２枚目の画像は３回読み取られなければならない。したがって、従来の並列画像フィルタリング処理においては、グローバルメモリに対して重複アクセスが大量に行われて、アクセス回数とアクセス時間の無駄な増加が発生してしまう。
【００３２】
上述の現状に対して、本発明は、ＧＰＵを代表とするマルチコアプロセッサを用いて画像に対して並列にフィルタリング処理を行う。図１は本発明の画像フィルタリング方法を示すフローチャートである。図１に示すように、本発明の画像フィルタリング方法は計算方向決定ステップＳ１、各方向フィルタリング計算ステップＳ２及び画像フィルタリング結果取得ステップＳ３を含む。
【００３３】
計算方向決定ステップＳ１では、画像の次元及びフィルタリング処理の予め決められた隣域範囲に基づいて、フィルタリング処理の複数の計算方向を決定する。ここで、計算方向は対象画素に対して互いに対称となる少なくとも二つの隣域画素を連結してなる方向である。フィルタリング計算において、隣域内の画素はいずれも中心画素（対象画素）の中心に対して対称となっており、例えば、右上画素（ｘ＋１、ｙ＋１）と左下画素（ｘ−１、ｙ−１）は中心画素（ｘ、ｙ）に対して対称となり、右上画素と左上画素はいずれも中心画素を通る斜め４５度の直線上に位置し、このような一本の直線は一つの計算方向と称する。隣域内の画素は画像次元及び隣域大きさの相異によって幾つかの異なる計算方向に分けられる。図２Ａ、図２Ｂは本発明における二次元と三次元画像フィルタリングの計算方向の略図である。図２Ａに示すように、二次元画像としては、隣域半径が１（即ち、隣域範囲が３*３画素である）の場合、隣域画素が合計８個であり、矢印が示すように、合計Ａ、Ｂ、Ｃ、Ｄの四つの計算方向がある。図２Ｂに示すように、三次元画像としては、隣域半径が１（即ち、隣域範囲が３*３*３画素である）の場合、隣域画素が合計２６個であり、矢印が示すように、合計１３の計算方向がある。
【００３４】
各方向フィルタリング計算ステップＳ２では、決定された複数の計算方向における計算方向毎に、複数のスレッドのそれぞれのスレッドがそれぞれ画像における１行の画素に対して、当該行の各画素を対象画素として、対象画素と当該対象画素の当該計算方向における各隣域画素との間で予め決められたフィルタリング計算を行い、フィルタリング計算の結果をそれぞれ累積加算する方法で当該対象画素と各隣域画素のフィルタリング結果として記憶する処理を行う。ここで、フィルタリング計算は減算法に基づいて演算することを例にして説明し、その式は例えば下式に示す通りで、当該フィルタリング計算はＣＴ画像反復再構成の正則化項の計算に用いられる。
【００３５】
【数１】
0006259531.tif 000002
【００３６】
式１において、ｘ、ｙ、ｚは画像におけるフィルタリング点（画素）の座標値である。μはフィルタリング前の画素グレースケール値である。μ′はフィルタリング後の画素グレースケール値である。ｍｘ、ｍｙ、ｍｚはｘ、ｙ、ｚ方向におけるフィルタリングコアの隣域の半径の大きさであり、フィルタリング計算に用いられる隣域の大きさは２*ｍ＋１であり、隣域の中心点はフィルタリングしようとする点（画素）である。ｍｚ＝０のとき、三次元フィルタリングは二次元フィルタリングになる。また、Ｎｒ，ｓ，ｔはフィルタリング隣域範囲内の各点の重み値であり、φはフィルタリング関数である。当該関数は通常一定の対称性を有する。
【００３７】
画像フィルタリング結果取得ステップＳ３では、各方向フィルタリング計算ステップＳ２によって、決定されたすべての計算方向に対して取得したフィルタリング結果を画像の画素毎に累積加算することにより、画像の画像フィルタリング結果を取得する。
【００３８】
以下、本発明の画像フィルタリング方法の幾つかの具体例について詳しく説明する。
【００３９】
先ず、二次元画像に対してフィルタリング処理を行う例について説明する。上述のように、二次元画像に対してフィルタリング処理を行い、フィルタリング処理の隣域範囲の半径ｒが１の場合、計算方向決定ステップＳ１で決定された計算方向の数は４である。
【００４０】
その後、入力画像（二次元画像）をＧＰＵのグローバルメモリに読み込み、グローバルメモリ内の出力画像をゼロに初期化する。続いてタスク割り当てが行われる。図３Ａ〜図３Ｄは本発明の二次元画像に対して各計算方向におけるスレッドのタスク割り当て略図である。ここで、二次元画像の大きさをＸ*Ｙ（例えば５１２*５１２）だとすると、入力画像はＸＹ平面上において幾つかの矩形領域に分けられ、それぞれの矩形領域に対応する二次元画像は一つのスレッドブロックによって処理される。一つのスレッドブロックに３２個のスレッドが含まれているとすると、元の画像はＸＹ平面上において大きさが３２*３２である２５６個の矩形領域に分けられ、それぞれのスレッドブロックは一つの矩形領域に対応する画像（大きさが３２*３２である）を処理し、矩形領域の大きさはＧＰＵのプロセッサの数に応じて調整されて並列の効率を保証する。それぞれのスレッドブロックは並列に実行される。上述の四つの計算方向において、そのうち一つの計算方向におけるすべてのフィルタリング計算を並列に処理し、メモリの読み書きはいずれも共有メモリ内で行われる。それぞれのスレッドは画像の当該計算方向における１行を計算し、当該行において隣域の大きさの範囲内にある二つの画素点を順次読み取り、フィルタリング式によって計算し、計算結果を出力画像に対応する二つの画素点の結果に累積加算する。
【００４１】
図３Ａに示すように、図３Ａで示す方向（即ち、図２ＡにおけるＡ方向）の計算において、１つのスレッドブロックにおけるそれぞれのスレッドは、矢印直線が示すように、ｙ方向における１列を並列計算し、スレッド１は第１列を計算し、スレッド２は第２列を計算し、スレッド３２は第３２列を処理して二次元画像のＡ方向の計算を完成させる。そのうち、それぞれのスレッドはそれぞれ画像における１行の画素（ここではｙ方向の１列）に対して、例えば、当該行の最初画素から当該行の最終画素まで順次対象画素として、対象画素と当該対象画素の当該計算方向（Ａ方向）における各隣域画素との間でフィルタリング計算を行い、フィルタリング計算の結果をそれぞれ累積加算する方法で当該対象画素と各隣域画素のフィルタリング結果として記憶する。例えば、下記の式によってフィルタリング後の画素グレースケール値μ′を計算することができる。
【００４２】
【数２】
0006259531.tif 000003
【００４３】
図３Ｂに示すように、図３Ｂで示す方向（即ち、図２ＡにおけるＢ方向）の計算において、それぞれのスレッドはｘ方向における１行を並列計算し、並列方法はＡ方向に似ている。例えば、下記の式によってフィルタリング後の画素グレースケール値μ′を計算することができる。
【００４４】
【数３】
0006259531.tif 000004
【００４５】
図３Ｃに示すように、図３Ｃで示す方向（即ち、図２ＡにおけるＣ方向）の計算において、それぞれのスレッドは矢印直線が示すように、勾配が４５度の方向における１本の直線上のフィルタリングを並列計算する。スレッド１は点（３２、１）から点（１、３２）までの連結線上の各点を計算する。スレッド２は点（３２、２）から点（２、３２）までの連結線上の各点、及び点（１、２）から点（２、１）までの連結線上の各点を計算する。Ａ方向、Ｂ方向と異なる点は、矩形画像が原因で、スレッド２の処理する二つの直線線分が不連続であるが、実は第２の直線線分を当該矩形範囲における第１の直線線分の延伸であると見なすことができる。即ち、計算方向決定ステップＳ１において、画像における画素配列方向（ここではＡ方向、Ｂ方向）に対して傾斜した計算方向が決定された場合、各方向フィルタリング計算ステップＳ２において、当該傾斜する計算方向（例えばＣ方向）に応じて処理する際に、それぞれのスレッドが計算する各行の画素の画素数が同じになるようにする。例えば、下記の式によってフィルタリング後の画素グレースケール値μ′を計算することができる。
【００４６】
【数４】
0006259531.tif 000005
【００４７】
図３Ｄに示すように、図３Ｄで示す方向（即ち、図２ＡにおけるＤ方向）の計算はＣ方向に似ており、それぞれのスレッドは勾配が１３５度の方向における１本の直線上のフィルタリングを並列計算する。例えば、下記の式によってフィルタリング後の画素グレースケール値μ′を計算することができる。
【００４８】
【数５】
0006259531.tif 000006
【００４９】
上記のＡ方向からＤ方向までの計算において、スレッドブロックにおけるそれぞれのスレッドは互いに並列にフィルタリング計算を行うことが好ましい。例えば、複数のスレッドの間で、それぞれのスレッドは同時に各自で計算する各行の画素のうち最初画素から始めて順番が同じである画素（例えば、第ｎ個画素）を対象画素とする。このようにして、各行の画素の数が同じである場合、それぞれのスレッドが互いに並列にフィルタリング計算を行うことを実現できる。
【００５０】
上記の計算を通じて、各方向フィルタリング計算ステップＳ２により上記の四つの計算方向におけるフィルタリング結果を計算する。その後、画像フィルタリング結果取得ステップＳ３において、上記の四つの計算方向に対して取得したフィルタリング結果を二次元画像の画素毎に累積加算し、これにより二次元画像の画像フィルタリング結果を取得する。最後に、すべてのスレッドブロックのすべての画像フィルタリング結果を共有メモリからグローバルメモリに書き込んで、二次元画像の画像フィルタリング結果とする。ここで、それぞれのスレッドブロックはいずれも上記方法によって二次元画像データにおける１つの矩形領域を処理し、すべての画像データが処理完了するまでそれぞれのスレッドブロックは並列に実行する。
【００５１】
続いて、三次元画像に対してフィルタリング処理を行う例について説明する。上述のように、三次元画像に対してフィルタリング処理を行い、フィルタリング処理の隣域範囲の半径ｒが１の場合、計算方向決定ステップＳ１で決定された計算方向の数は１３である。ここで、引き続き図３Ａ〜図３Ｄを参照し、さらに図３Ｅ、図４、図５Ａ、図５Ｂを追加して説明する。ここで、三次元画像の大きさがＸ*Ｙ*Ｚ（例えば５１２*５１２*５１２）であるとし、Ｚ個のＸ*Ｙの二次元画像と見なすことができる。
【００５２】
その後、入力画像（三次元画像）をＧＰＵのグローバルメモリに読み込み、グローバルメモリ内の出力画像がゼロに初期化される。続いてタスク割り当てが行われる。入力画像はＸＹ平面上で幾つかの矩形領域に分けられ、それぞれの矩形領域に対応する三次元画像体は一つのスレッドブロックによって処理される。一つのスレッドブロックに３２個のスレッドが含まれているとすると、元の画像はＸＹ平面上で大きさが３２*３２である２５６個の矩形領域に分けられ、それぞれのスレッドブロックは一つの矩形領域に対応する画像体（大きさが３２*３２*Ｚである）を処理する。二次元画像のときと同様に、矩形領域の大きさはＧＰＵのプロセッサの数に基づいて調整されて並列の効率を保証する。それぞれのスレッドブロックは並列に実行される。
【００５３】
図４は本発明の三次元画像の一つのスレッドブロックに対する並列処理フローチャートである。図５Ａ、図５Ｂは本発明の三次元画像フィルタリングのメモリ管理略図である。図５Ａ、図５Ｂにおいて、下付きのＵは三次元画像を構成する複数の二次元画像のうち上の一枚の画像の貢献を表し、Ｍは中間の一枚の画像の貢献を表し、Ｌは下の一枚の画像の貢献を表し、Ｕ＋Ｍ＋Ｌとして出力する。図４、図５Ａ、図５Ｂに示すように、ステップＳ３１では、三次元画像を構成する複数の二次元画像のうち最初の２ｒ＋１個の二次元画像をグローバルメモリからマルチコアプロセッサの共有メモリ（共有ストレージ）に読み込み、当該２ｒ＋１個の二次元画像に対して各方向フィルタリング計算ステップＳ２と画像フィルタリング結果取得ステップＳ３を実行する。ここでｒが１であるため、処理しようとする画像体の最初の３枚の画像（１枚目〜３枚目）をグローバルメモリから共有メモリにコピーする。この部分の画像は当該スレッドブロックの処理しようとする入力画像であり、同じ大きさを有する出力画像を共有メモリに一つ配分し、初期値はゼロである。ステップＳ３２では、上記の１３の計算方向において、そのうち一つの計算方向におけるすべてのフィルタリング計算を並列処理し、メモリの読み書きはいずれも共有メモリ内で行われる。それぞれのスレッドは画像の当該計算方向における１行を計算し、当該行において隣域の大きさの範囲内にある二つの画素点を順次読み取り、フィルタリング式によって計算し、計算結果を出力画像の対応する二つの画素点の結果に累積加算する。
【００５４】
なお上記の１３の計算方向のうち、二次元計算方向における計算は上記二次元画像時と同じであり、例えば、図３Ａに示すＡ方向の計算において、スレッド１の具体的な操作は、先ず１列目の前の二つの画素、即ち、ｘ座標が１と２の二つの画素を読み取り、二点の画素値を減算し、上記のフィルタリング式に代入して、N0,1,0 φ(μ1,1,1-μ1,2,1)を計算して、その結果をμ’1,1,1に累積加算し、N0,-1,0 φ(μ1,2,1-μ1,1,1)を計算して、その結果をμ’1,2,1に累積加算し、その後ｘ座標が３である点を読み込んで、μ1,2,1とμ1,3,1を減算し、N0,1,0 φ(μ1,2,1-μ1,3,1)を計算して、その結果をμ’1,2,1に累積加算し、N0,-1,0 φ(μ1,3,1-μ1,2,1)を計算して、その結果をμ’1,3,1に累積加算する。列全体の計算が完了するまで同様なことを実行する。その他の二次元方向における計算については説明を省略する。
【００５５】
三次元計算方向における並列方法については、二次元計算方向における並列方法から同様なことを実行して取得することができ、考え方は同じであり、計算の直線方向が二次元から三次元に変わるだけである。ここで、三次元方向における一つの計算方向を例にして説明する。図３Ｅは本発明の三次元画像に対して一つの三次元計算方向（Ｚ方向）におけるスレッドのタスク割り当て略図である。図３Ｅに示すように、それぞれのスレッドは矢印直線で示す１行を計算し、例えば、当該行の最初画素から当該行の最終画素まで順次対象画素として、対象画素と当該対象画素のＺ方向における各隣域画素との間でフィルタリング計算（例えば、画素値の減算）を行い、フィルタリング計算の結果をそれぞれ累積加算する方法で当該対象画素と各隣域画素のフィルタリング結果として記憶する。
【００５６】
ステップＳ３３では、すべての計算方向における計算が完了したかどうかを判断する。判断の結果が未完了（いいえ）の場合は、ステップＳ３２に戻る。判断の結果が完了（はい）の場合は、即ち上述の１３の計算方向における計算がすべて完了した後、共有メモリ内の２ｒ＋１（ここでは３）枚の画像間の互いに対するフィルタリング貢献の計算が完了する。そのうち、前のｒ＋１枚（ここでは１枚目と２枚目）のフィルタリング計算はすでにすべて完了し、残りのｒ枚（ここでは３枚目）の画像は引き続きｒ枚の画像に対する４枚目の画像の貢献を計算する必要があるため、３枚目の画像のフィルタリング計算はまだ未完了である。このとき、ステップＳ３４では、読み込んだ２ｒ＋１個（３枚）の二次元画像のうち前のｒ＋１個（１枚目と２枚目）の二次元画像の各画素のフィルタリング結果（１Ｍ＋Ｌ、２Ｕ＋Ｍ＋Ｌ）を共有メモリからグローバルメモリに書き込み、３枚目の画像の中間結果（３Ｕ＋Ｍ）は後続の計算のために引き続き共有メモリに保持されている。
【００５７】
続いて、ステップＳ３５では、三次元画像を構成する複数の二次元画像のうち後続のｒ＋１個（ここでは４枚目と５枚目）の二次元画像をグローバルメモリから共有メモリに読み込み、当該２枚の画像の出力画像をゼロに初期化する。その後、当該後続のｒ＋１個の二次元画像とその前の共有メモリからグローバルメモリに書き込まれなかったｒ個の二次元画像とからなる２ｒ＋１個（ここでは３枚目〜５枚目）の二次元画像に対して、各方向フィルタリング計算ステップＳ２と画像フィルタリング結果取得ステップＳ３を実行する。具体的にはステップＳ３２〜Ｓ３４と同じであり、ここでは再び説明しない。ステップＳ３６では、三次元画像体に対してすべての処理が完了したかどうかを判断する。判断の結果が未完了（いいえ）の場合は、ステップＳ３２に戻って、ｚ枚の二次元画像処理が完了するまで上述の処理を繰り返し、即ち、三次元画像を構成するすべての二次元画像の画像フィルタリング結果を共有メモリからグローバルメモリに書き込む。
【００５８】
ここで、それぞれのスレッドブロックはいずれも上述の方法にしたがって三次元画像データにおける一つの三次元画像体を処理し、すべての画像データが処理完了するまでそれぞれのスレッドブロックは並列に実行し、最後に、計算を完了し、グローバルメモリに書き込んだすべての画像フィルタリング結果を三次元画像の画像フィルタリング結果とする。
【００５９】
続いて、図６を参照して本発明のＣＴシステムについて説明する。図６は本発明のＣＴシステムのシステム構成図である。図６に示すように、ＣＴシステムはＸ線によってスキャン対象物をスキャンし、スキャン対象物のＣＴ画像を出力し、ＣＴスキャナー、ＣＴ画像再構成装置及びＣＴ画像出力装置を有する。
【００６０】
ＣＴスキャナーはＸ線によってスキャン対象物をスキャンし、スキャン対象物の投影画像を取得する。具体的には、単一軸面の放射線によってスキャン対象物を貫通し、Ｘ線に対するスキャン対象物の吸収と透過率の相違に基づいて、スキャン対象物の投影画像を取得する。
【００６１】
ＣＴ画像再構成装置はマルチコアプロセッサを有し、投影画像に基づいてＣＴ画像を再構成する。ＣＴ画像再構成装置は、ＣＴ画像を再構成するために、前記マルチコアプロセッサを利用して画像に対して上述のような方法で並列にフィルタリング処理を行う。そのうち、ＣＴ画像再構成装置の有するマルチコアプロセッサはＧＰＵであってよい。
【００６２】
ＣＴ画像出力装置はＣＴ画像再構成装置により再構成されたＣＴ画像を出力する。ここで、ＣＴ画像出力装置は、例えばＣＴ画像表示装置であり、液晶ディスプレー或いはタッチパネルなどの表示装置によって実現し、ＣＴ画像再構成装置により再構成されたＣＴ画像を出力する。また、ＣＴ画像出力装置はプリンタ装置などであってもよく、ＣＴ画像再構成装置により再構成されたＣＴ画像をプリントする。もちろん、ＣＴ画像出力装置は、ＣＴ画像を出力さえできればよく、汎用のＩ／Ｏインターフェースであってもよい。
【００６３】
本発明の上述の実施形態によると、それぞれの画素点のフィルタリング計算を幾つかの部分に分解して、すべての部分が完了するまですべてのスレッドが毎回そのうちの一部を同時に完了させ、累積加算して最終結果を取得する。即ち、本発明は画像フィルタリング計算を計算方向にしたがって分解し、すべての計算方向が完了するまで毎回すべてのスレッドが画像におけるすべての画素の一つの計算方向における計算を共同で並列に完了させる。上述したように、画素ｂに対する隣域内画素ａの影響と画素ａに対する画素ｂの影響は同じであるべきである。この点を利用して、方向にしたがって計算し、画素ａとｂの計算結果が画素ａのフィルタリングにも、画素ｂのフィルタリングにも用いられるため、従来の並列方法における重複計算を防止する。
【００６４】
また、本発明の上述の実施形態によると、グローバルメモリに対して読み書きアクセスの重複がない。計算におけるすべての読み書きはいずれも共有メモリ内で行われ、キャッシュを十分に利用する。本発明の方法のグローバルメモリに対するアクセスは入力画像データを一回だけ読み込み、出力画像データを一回だけ書き出すが、従来の並列方法においては、それぞれのスレッドが一つの点のすべてのフィルタリング計算を処理し、１枚目の画像を処理する際に２枚目の画像が必要となり、３枚目の画像を処理する際にも２枚目の画像が必要となり、２枚目の画像が三回も読み取られなければならない。従って、本発明ではグローバルメモリからの画像読み取り回数が大幅に減少し、処理速度が大幅に向上する。
【００６５】
上述の実施形態において、隣域画素と対象画素の画素値を減算する演算を基本的な演算として画像フィルタリング計算について説明したが、本発明が使用できる画像フィルタリング計算はこれに限定されず、互いに隣域画素である画素ｂに対する画素ａの影響と画素ａに対する画素ｂの影響とが同じであるこの原則を満たす画像フィルタリング計算であれば、本発明の画像フィルタリング方法はすべて適用可能である。本発明は主に並列処理方法に関するもので、具体的な画像フィルタリング計算に関するものではない。
【００６６】
上述の実施形態において、ＧＰＵ処理装置をマルチコアプロセッサの例としたが、本発明はこれに限定されるものではなく、並列にマルチスレッド処理が可能なマルチコアプロセッサであれば、いずれも本発明を実現するために用いることが可能である。
【図１】
0006259531.tif 000007
【図２Ａ】
0006259531.tif 000008
【図２Ｂ】
0006259531.tif 000009
【図３Ａ】
0006259531.tif 000010
【図３Ｂ】
0006259531.tif 000011
【図３Ｃ】
0006259531.tif 000012
【図３Ｄ】
0006259531.tif 000013
【図３Ｅ】
0006259531.tif 000014
【図４】
0006259531.tif 000015
【図５Ａ】
0006259531.tif 000016
【図５Ｂ】
0006259531.tif 000017
【図６】
0006259531.tif 000018