(57)【要約】【課題】画像処理のための特定の関数に対応する複数の画像処理部をプログラムによって指定して動作させることによって、画像処理の高速化を図る。【解決手段】フレームメモリ２１…は、処理されるべき画像データを格納する。並列メモリ１２１…は、フレームメモリ２１…に格納された画像データの全部又は一部を受け取って、画像処理用のDMAC１１１…又は処理ユニット１３Ａ…のいずれかに送る。処理ユニット１３Ａ…は、画像処理のための関数に対応した機能を有している。処理ユニット１３Ａ…は、ＣＰＵ３からの指令に従って、並列メモリ１２１…又はフレームメモリ２１…から、画像データの全部又は一部を受け取り、さらに、画像データの全部又は一部に対して、画像処理のための関数に従った処理を行う。【選択図】図１
2014160516.tif 000002
【特許請求の範囲】
【請求項１】
コプロセッサと、フレームメモリと、ＣＰＵとを備えており、
前記フレームメモリは、処理されるべき画像データを格納する構成となっており、
前記コプロセッサは、複数の画像処理部と複数の並列メモリとを備えており、
前記並列メモリは、前記フレームメモリに格納された前記画像データの全部又は一部を受け取って前記画像処理部のいずれかに送る構成となっており、
前記複数の画像処理部は、いずれも、画像処理のための関数に対応した機能を有しており、
かつ、前記複数の画像処理部は、前記ＣＰＵからの指令に従って、
前記並列メモリ又は前記フレームメモリから、前記画像データの全部又は一部を受け取り、さらに、
前記画像データの全部又は一部に対して、前記画像処理のための関数に従った処理を行う構成となっている
画像処理装置。
【請求項２】
前記コプロセッサは、再構成可能なプログラマブル・ロジック・デバイスによって構成されている
請求項１に記載の画像処理装置。
【請求項３】
前記複数の並列メモリは、デュアルポート・メモリである
請求項１又は２に記載の画像処理装置。
【請求項４】
前記画像処理部は、ダイレクト・メモリ・アクセス・コントローラと、処理ユニットとを備えており、
前記ダイレクト・メモリ・アクセス・コントローラは、前記並列メモリの動作を制御する構成となっており、
前記処理ユニットは、前記画像処理のための関数に従った処理を行う構成となっている
請求項１〜３のいずれか１項に記載の画像処理装置。
【請求項５】
前記コプロセッサを複数個備えている
請求項１〜４のいずれか１項に記載の画像処理装置。
【請求項６】
前記複数のコプロセッサは、共通のコプロセッサ・バスに接続されている
請求項５に記載の画像処理装置。
【請求項７】
前記コプロセッサは、ディスクリプタをさらに備えており、
前記ＣＰＵは、前記コプロセッサへの命令を前記ディスクリプタに書き込む構成となっており、
前記コプロセッサは、前記ディスクリプタに書かれている命令を読み取り、前記複数の画像処理部による処理を実行する構成となっている
請求項１〜６のいずれか１項に記載の画像処理装置。
【請求項８】
前記複数の画像処理部は、前記ＣＰＵからの指令に従って、独立して並列に動作する構成となっている
請求項１〜７のいずれか１項に記載の画像処理装置。
【請求項９】
以下のステップを備える画像処理方法：
（１）フレームメモリが、処理されるべき画像データを格納するステップ；
（２）並列メモリが、前記フレームメモリに格納された前記画像データの全部又は一部を受け取るステップ；
（３）前記複数の画像処理部が、ＣＰＵからの指令に従って、前記並列メモリ又は前記フレームメモリから、前記画像データの全部又は一部を受け取るステップ；
（４）前記複数の画像処理部が、前記ＣＰＵからの指令に従って、前記画像データの全部又は一部に対して、画像処理のための関数に従った処理をそれぞれ行うステップ。
【請求項１０】
前記並列メモリとして、デュアルポート・メモリが用いられており、
さらに、複数の画像処理部は、前記ＣＰＵからの指令に従って、前記並列メモリをバッファとしたパイプライン処理を行うものである
請求項９に記載の画像処理方法。
【請求項１１】
前記複数の画像処理部は、前記ＣＰＵからの指令に従って、独立して並列に動作する構成となっており、
さらに、前記複数の画像処理部は、前記ＣＰＵからの指令に従って、タスクレベルでの並列処理を行うものである
請求項９又は１０に記載の画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像の高速処理に適した装置及び方法に関するものである。
【背景技術】
【０００２】
従来のマシンビジョン及びロボットビジョンの多くにおいては、人間の視覚特性を元に定められたビデオフレームレート（24〜60fps）を上限としたフレームレートが用いられてきた。それに対し、ビデオフレームレートを大幅に超える、1000fpsオーダーの高フレームレートカメラを用いたリアルタイムビジョン（以下、高速ビジョンと呼ぶ）の研究が行われている。
【０００３】
例えば、高速ビジョンを用いることで、安定した視覚フィードバック制御が可能となることから、高速ビジョンは、高速な動作が必要なロボットの制御に応用されている（下記非特許文献１〜５）。
【０００４】
また、高速ビジョンは、速い動きを計測できることから、生体観察（下記非特許文献６及び７）や、モーションキャプチャ（下記非特許文献８）、流体計測（下記非特許文献９）などにも応用されている。
【０００５】
このほか、トラッキング（下記非特許文献１０及び１１）、三次元計測（下記非特許文献１２及び１３）、画像合成（下記非特許文献１４及び１５）、オプティカルフロー推定（下記非特許文献１６）など、一般的な画像処理の性能向上に高速ビジョンを利用した研究もある。
【０００６】
このような高いフレームレートの動画像をリアルタイムに扱うには、高い演算性能が必要となる。近年のコンピュータの飛躍的な性能向上により、PCを用いたシステムでも、ある程度までの性能を出すことはできるが、PCは安定性や信頼性に欠けるという問題がある。したがって、実用的な高速ビジョンを実現するためには、組み込みシステムを用いることが望ましいと考えられる。組み込みシステムを用いることで、ハードウェア構成を使用目的に合わせて最適化でき、システムの小型化にもつながる。
【０００７】
一方、通常の組み込みシステムで用いられるCPUは、PCのそれに比べて非力なため、コプロセッサによる画像処理のアクセラレーションが必須となる。これまでに開発された高速ビジョンシステムは、SIMD型の超並列プロセッサを採用したり（下記非特許文献１０）、ハードウェア構成を書き換えることができるLSIであるFPGA(Field Programmable Gate Array)に専用回路を実装したり（下記非特許文献１７及び１８）して、演算の高速化を図っている。
【０００８】
SIMD型の超並列プロセッサは、多くの画素に対して均一に処理を行う場合において、きわめて高い性能が実現できる（下記非特許文献１９〜２２）。しかし、画像の一部に対して処理を行う場合には、必ずしもすべての処理要素（PE）を有効に活用できない。高速ビジョンを用いた多くのアプリケーションでは、画像全体に対する処理よりも、トラッキングなどの局所領域に対する処理を高速に行う必要があり、小領域の計算が中心となるため、この問題は深刻である。
【０００９】
また、多くの場合、PE間のデータ転送は隣接PEとの間のみ可能となっており、拡大・縮小や回転などの幾何変換を効率よく実装することが難しい。したがって、実装できるアルゴリズムが制限されてしまう。
【００１０】
このほか、イメージセンサの撮像面上で演算処理を行うfocal plane processorも、高フレームレート処理に向いているといえるが、回路面積に対する制約から、多くは特定の処理に特化して作られている。汎用の演算を行うものも開発されている（下記非特許文献２３〜２６）が、上のSIMD型の超並列プロセッサと同様の問題を抱えている。
【００１１】
またDSPを画像処理に利用することも考えられる。近年ではVLIW（Very Long Instruction Word）やマルチコアなどの並列処理技術を採用したDSPが登場しており、高速処理が可能となっている（下記非特許文献２７及び２８）。しかし、VLIWを用いたアーキテクチャにおいては、アルゴリズムの並列化が主にコンパイラによって自動的に行われるため、命令の実行に要する時間があらかじめ予測できかったり、あるいは、予期しない理由によって実行速度が低下したりすることがある。
【００１２】
それに対し、ASICやFPGAはアルゴリズムが持つ並列性をそのままハードウェアに実装できるので、並列化の効率が高く、処理を最適化しやすい。特にハードウェア構成を書き換え可能なLSIであるFPGAは、プロトタイプや少量生産に向いている。一方、FPGAを用いたシステムは、アルゴリズムを変更しようとする毎にHDL(Hardware Description Language)による回路設計が必要となり、開発コストが高いという問題がある。
【００１３】
それに対し、FPGAのリコンフィギャラビリティ（reconfigurability）を用いて、汎用CPUのインストラクションセットをカスタマイズすることができるシステムも提案されている（下記非特許文献２９）。このシステムでは、CPUの持つソフトウェア開発の容易性とFPGAのリコンフィギャラビリティが両立されており、ユーザーの回路設計の負担を必要最低限にできる。しかし、このシステムでは、CPUはあらかじめ用意されたものしか利用できず、商用の開発ツールやミドルウェア、ソフトウェア資産などを最大限に活用することができない。
【００１４】
本発明者らの知見によれば、割り込みやマルチタスクなどによる性能低下を考えると、CPUとFPGAは極力分離し、FPGAが自律的に動作するほうが望ましい。また、画像処理に必要とされる並列処理や並列データアクセス、高速データ転送の仕組みがあらかじめ用意されていることが望ましい。
【先行技術文献】
【非特許文献】
【００１５】
【非特許文献１】[1] A. Namiki, Y. Nakabo, I. Ishii, and M. Ishikawa, "1ms sensory-motor fusion system," IEEE Transactions on Mechatoronics, Vol. 5, No. 3, pp. 244-252, 2000.
【非特許文献２】[2] Y. Nakamura, K. Kishi, and H. Kawakami, "Heartbeat synchronization for robotic cardiac surgery," Proc. IEEE International Conference on Robotics and Automation, pp. 2014-2019, 2001.
【非特許文献３】[3] R. Ginhoux, J. Gangloff, M. de Mathelin, L. Soler, M. Sanchez, and J. Marescaux, "Beating heart tracking in robotic surgery using 500 Hz visual servoing, model predictive control and an adaptive observer," Proc. IEEE International Conference on Robotics and Automation, pp. 274-279, 2004.
【非特許文献４】[4] T. Senoo, A. Namiki, and M. Ishikawa, "High-speed batting using a multijointed manipulator," Proc. IEEE International Conference on Robotics and Automation, pp. 1191-1196, 2004.
【非特許文献５】[5] N. Furukawa, A. Namiki, T. Senoo, and M. Ishikawa, "Dynamic regrasping using a high-speed multifingered hand and a high-speed vision system,"Proc. IEEE International Conference on Robotics and Automation, pp. 181-187, 2006.
【非特許文献６】[6] H. Oku, N. Ogawa, K. Hashimoto, and M. Ishikawa, "Two-dimensional tracking of a motile microorganism allowing high-resolution observation with various imaging techniques," Review of Scientific Instruments, Vol. 76, No. 3, 034301, 2005.
【非特許文献７】[7] I. Ishii, Y. Nie, K. Yamamoto, K. Orito, and H. Matsuda, "Real-time and long-time quantification of behavior of laboratory mice scratching," Proc. IEEE International Conference on Automation Science and Engineering, pp. 628-633, 2007.
【非特許文献８】[8] K. Yamane, T. Kuroda, and Y. Nakamura, "High-precision and high-speed motion capture combining heterogeneous cameras," Proc. IEEE/RSJ International Conference on Intelligent Robots and Systems, pp. 279-286, 2004.
【非特許文献９】[9] Y. Watanabe, T. Komuro, and M. Ishikawa, "A high-speed vision system for moment-based analysis of numerous objects," Proc. IEEE International Conference on Image Processing, pp. V177-180, 2007.
【非特許文献１０】[10] Y. Nakabo, M. Ishikawa, H. Toyoda, and S. Mizuno, "1ms column parallel vision system and its application of high speed target tracking," Proc. IEEE International Conference on Robotics and Automation, pp. 650-655, 2000.
【非特許文献１１】[11] U. Muehlmann, M. Ribo, P. Lang, and A. Pinz, "A new high speed CMOS camera for real-time tracking applications," Proc. IEEE International Conference on Robotics and Automation, pp. 5195-5200, 2004.
【非特許文献１２】[12] Y. Watanabe, T. Komuro, and M. Ishikawa, "955-fps real-time shape measurement of a moving/deforming object using high-speed vision for numerous-point analysis," Proc. IEEE International Conference on Robotics and Automation, pp. 3192-3197, 2007.
【非特許文献１３】[13] I. Ishii, K. Yamamoto, K. Doi, and T. Tsuji, "High-speed 3D image acquisition using coded structured light projection," Proc. IEEE/RSJ International Conference on Intelligent Robots and Systems, pp. 925-930, 2007.
【非特許文献１４】[14] X. Liu and A. Gamal, "Synthesis of high dynamic range motion blur free image from multiple captures," IEEE Transactions on Circuits and Systems I: Fundamental Theory and Applications, vol. 50, No. 4, pp. 530-539, 2003.
【非特許文献１５】[15] T. Komuro, Y. Watanabe, M. Ishikawa, and T. Narabu, "High-S/N imaging of a moving object using a high-frame-rate camera," IEEE International Conference on Image Processing, pp. 517-520, 2008.
【非特許文献１６】[16] S. Lim, J. Apostolopoulos, and A. Gamal, "Optical flow estimation using temporally oversampled video," IEEE Transactions on Image Processing, vol. 14, No. 8, pp. 1074-1087, 2005.
【非特許文献１７】[17] I. Ishii, K. Kato, S. Kurozumi, H. Nagai, A. Numata, and K. Tajima, "Development of a mega-pixel and milli-second vision system using intelligent pixel selection," Proc. IEEE Technical Exhibition Based Conference on Robotics and Automation, pp. 9-10, 2004.
【非特許文献１８】[18] K. Shimizu and S. Hirai, "CMOS+FPGA vision system for visual feedback of mechanical systems," Proc. IEEE International Conference on Robotics and Automation, pp. 2060-2065, 2006.
【非特許文献１９】[19] W. Raab, N. Bruels, U. Hachmann, J. Harnisch, U. Ramacher, C. Sauer, and A. Techmer, "A 100-GOPS programmable processor for vehicle vision systems," IEEE Design & Test of Computers, vol. 20, No. 1, pp. 8-15, 2003.
【非特許文献２０】[20] H. Noda, M. Nakajima, K. Dosaka, K. Nakata, M. Higashida, O. Yamamoto, K. Mizumoto, T. Tanizaki, T. Gyohten, Y. Okuno, H. Kondo, Y. Shimazu, K. Arimoto, K. Saito, and T. Shimizu, "The design and implementation of the massively parallel processor based on the matrix architecture," Proc. IEEE Journal of Solid-State Circuits, vol. 42, No. 1, pp. 183-192, 2007.
【非特許文献２１】[21] A. Abbo, R. Kleihorst, V. Choudhary, L. Sevat, P. Wielage, S. Mouy, B. Vermeulen, and M. Heijligers, "Xetal-II: A 107 GOPS, 600 mW massively parallel processor for video scene analysis," IEEE Journal of Solid-State Circuits, vol. 43, No. 1, pp. 192-201, 2008.
【非特許文献２２】[22] S. Kyo, S. Okazaki, and T. Arai, "An integrated memory array processor architecture for embedded image recognition systems," Proc. International Symposium on Computer Architecture, pp. 134-145, 2005.
【非特許文献２３】[23] J. Eklund, C. Svensson, and A. A° stro¨m, "VLSI implementation of a focal plane image processor - a realization of the near-sensor image processing concept," IEEE Transactions on Very Large Scale Integrat. (VLSI) Systems, vol. 4, no. 3, pp. 322-335, 1996.
【非特許文献２４】[24] T. Komuro, S. Kagami, and M. Ishikawa, "A dynamically reconfigurable SIMD processor for a vision chip," IEEE Journal of Solid-State Circuits, Vol. 39, No. 1, pp. 265-268, 2004.
【非特許文献２５】[25] P. Dudek and P. Hicks, "A general-purpose processor-per-pixel analog SIMD vision chip," IEEE Transactions on Circuits and Systems I: Regular Papers, vol. 52, No. 1, pp. 13-20, 2005.
【非特許文献２６】[26] W. Miao, Q. Lin, W. Zhang, and N. Wu, "A programmable SIMD vision chip for real-time vision applications," IEEE Journal of Solid-State Circuits, vol. 43, pp. 1470-1479 , 2008.
【非特許文献２７】[27] J. Tanabe, Y. Taniguchi, T. Miyamori, Y. Miyamoto, H. Takeda, M. Tarui, H. Nakayama, N. Takeda, K. Maeda, and M. Matsui, "Visconti: multi-VLIW image recognition processor based on configurable processor," Proc. IEEE Custom Integrated Circuits Conference, pp. 185-188, 2003.
【非特許文献２８】[28] B. Khailany, T. Williams, J. Lin, E. Long, M. Rygh, D. Tovey, and W. Dally, "A programmable 512 GOPS stream processor for signal, image, and video processing," IEEE Journal of Solid-State Circuits, vol. 43, pp. 202-213, 2008.
【非特許文献２９】[29] M. Wirthlin, B. Hutchings, and K. Gilson, "The nano processor: a low resource reconfigurable processor," Proc. IEEE Workshop on FPGAs for Custom Computing Machines, pp. 23-30, 1994.
【非特許文献３０】[30] J. Farrugia, P. Horain, E. Guehenneux, and Y. Alusse, "GPUCV: a framework for image processing acceleration with graphics processors," Proc. IEEE International Conference on Multimedia and Expo, pp. 585-588, 2006.
【発明の概要】
【発明が解決しようとする課題】
【００１６】
本発明は、以上の現状に鑑みてなされたものである。本発明の主な目的は、画像処理のための特定の関数に対応する複数の画像処理部をプログラムによって指定して動作させることによって、画像処理の高速化を図ることである。
【課題を解決するための手段】
【００１７】
前記した課題を解決する手段は、以下の項目のように記載できる。
【００１８】
（項目１）
コプロセッサと、フレームメモリと、ＣＰＵとを備えており、
前記フレームメモリは、処理されるべき画像データを格納する構成となっており、
前記コプロセッサは、複数の画像処理部と複数の並列メモリとを備えており、
前記並列メモリは、前記フレームメモリに格納された前記画像データの全部又は一部を受け取って前記画像処理部のいずれかに送る構成となっており、
前記複数の画像処理部は、いずれも、画像処理のための関数に対応した機能を有しており、
かつ、前記複数の画像処理部は、前記ＣＰＵからの指令に従って、
前記並列メモリ又は前記フレームメモリから、前記画像データの全部又は一部を受け取り、さらに、
前記画像データの全部又は一部に対して、前記画像処理のための関数に従った処理を行う構成となっている
画像処理装置。
【００１９】
画像処理部は、画像処理に用いられる特定の関数に対応する。画像処理を行う場合、処理に必要な関数の実行を、専用の画像処理部で行うことにより、処理を高速化できる。さらに、プログラムにおいては、ＣＰＵを介して、特定の関数あるいは画像処理部を指定して処理を実行させることができる。
【００２０】
（項目２）
前記コプロセッサは、再構成可能なプログラマブル・ロジック・デバイスによって構成されている
項目１に記載の画像処理装置。
【００２１】
再構成可能なプログラマブル・ロジック・デバイスは、通常、FPGA又はFPLAと呼ばれる集積回路である。このようなデバイスをコプロセッサとして用いることにより、画像処理部の機能を、ユーザの必要に応じて書き換えることができる。例えば、不足する関数に対応する画像処理部を追加したり、あるいは、必要な関数に対応する画像処理部を追加することができる。
【００２２】
（項目３）
前記複数の並列メモリは、デュアルポート・メモリである
項目１又は２に記載の画像処理装置。
【００２３】
デュアルポート・メモリを用いることにより、メモリへの読み込みと書き込みとを独立に行うことができる。このため、処理を一層高速化することができる。
【００２４】
また、デュアルポート・メモリを用いることにより、前記ＣＰＵの指令に従って、並列メモリをバッファとしたパイプライン処理を行うことができる。
【００２５】
（項目４）
前記画像処理部は、ダイレクト・メモリ・アクセス・コントローラと、処理ユニットとを備えており、
前記ダイレクト・メモリ・アクセス・コントローラは、前記並列メモリの動作を制御する構成となっており、
前記処理ユニットは、前記画像処理のための関数に従った処理を行う構成となっている
項目１〜３のいずれか１項に記載の画像処理装置。
【００２６】
（項目５）
前記コプロセッサを複数個備えている
項目１〜４のいずれか１項に記載の画像処理装置。
【００２７】
（項目６）
前記複数のコプロセッサは、共通のコプロセッサ・バスに接続されている
項目５に記載の画像処理装置。
【００２８】
（項目７）
前記コプロセッサは、ディスクリプタをさらに備えており、
前記ＣＰＵは、前記コプロセッサへの命令を前記ディスクリプタに書き込む構成となっており、
前記コプロセッサは、前記ディスクリプタに書かれている命令を読み取り、前記複数の画像処理部による処理を実行する構成となっている
項目１〜６のいずれか１項に記載の画像処理装置。
【００２９】
ディスクリプタを用いることにより、ＣＰＵは、コプロセッサに対して、一度に複数の処理を指示することができる。このため、コプロセッサの動作完了時におけるＣＰＵへの割り込み回数を減らすことができるという利点がある。
【００３０】
（項目８）
前記複数の画像処理部は、前記ＣＰＵからの指令に従って、独立して並列に動作する構成となっている
項目１〜７のいずれか１項に記載の画像処理装置。
【００３１】
複数の画像処理部を並列動作可能とすることにより、ＣＰＵからの指令に従って、タスクレベルでの並列処理が可能となる。また、ディスクリプタに、処理ユニットや待ちユニットでの処理手順を書き込むことで、タスクレベルでの並列処理を効率的に行うことができる。
【００３２】
（項目９）
以下のステップを備える画像処理方法：
（１）フレームメモリが、処理されるべき画像データを格納するステップ；
（２）並列メモリが、前記フレームメモリに格納された前記画像データの全部又は一部を受け取るステップ；
（３）前記複数の画像処理部が、ＣＰＵからの指令に従って、前記並列メモリ又は前記フレームメモリから、前記画像データの全部又は一部を受け取るステップ；
（４）前記複数の画像処理部が、前記ＣＰＵからの指令に従って、前記画像データの全部又は一部に対して、画像処理のための関数に従った処理をそれぞれ行うステップ。
【００３３】
（項目１０）
前記並列メモリとして、デュアルポート・メモリが用いられており、
さらに、複数の画像処理部は、前記ＣＰＵからの指令に従って、前記並列メモリをバッファとしたパイプライン処理を行うものである
項目９に記載の画像処理方法。
【００３４】
並列メモリをバッファとしたパイプライン処理を行うことにより、画像処理をさらに高速化することが可能になる。
【００３５】
（項目１１）
前記複数の画像処理部は、前記ＣＰＵからの指令に従って、独立して並列に動作する構成となっており、
さらに、前記複数の画像処理部は、前記ＣＰＵからの指令に従って、タスクレベルでの並列処理を行うものである
項目９又は１０に記載の画像処理方法。
【００３６】
タスクレベルでの並列処理を行うことにより、画像処理の高速化を図ることができる。
【発明の効果】
【００３７】
本発明によれば、高速な画像処理が実現可能であり、しかも、プログラム作成上の負担が過大にならない画像処理装置及び方法を提供することが可能になる。
【図面の簡単な説明】
【００３８】
【図１】本発明の一実施形態に係る画像処理装置の概略的なブロック図である。
【図２】図１の装置を用いた画像処理方法の概略を示すフローチャートである。
【図３】図１の装置における概略的なハードウエア構成図である。
【発明を実施するための形態】
【００３９】
本発明の一実施形態に係る画像処理装置を、添付の図面を参照しながら説明する。この画像処理装置は、主な要素として、Ｐ個のコプロセッサ１１、１２、…、１Ｐと、Ｐ個のフレームメモリ２１、２２、…、２Ｐと、ＣＰＵ３とを備えている。さらに、この装置は、メインメモリ４と、Ｉ／Ｏインタフェース５と、カメラインタフェース６と、ビデオインタフェース７と、ＣＰＵバス８と、インターコプロセッサバス９とを備えている。
【００４０】
各フレームメモリ２１…は、処理されるべき画像データを格納する構成となっている。具体的には、この実施形態では、カメラインタフェース６又はビデオインタフェース７から取り込まれた画像データを格納する構成となっている。図示されているように、各フレームメモリ２１…は、各コプロセッサ１１…に対応して設けられている。
【００４１】
コプロセッサ１１…は、いずれも、複数のダイレクト・メモリ・アクセス・コントローラ（DMAC）１１１、１１２、…、１１Ｎと、複数の並列メモリ１２１、１２２、…、１２Ｍと、複数の処理ユニット１３Ａ、１３Ｂ、…、１３Ｘとを備えている。なお、各コプロセッサの基本的な内部構成は、この実施形態においては同様なので、コプロセッサ１１の内部構成についてのみ詳しく説明する。
【００４２】
この実施形態では、DMAC１１１…と処理ユニット１３Ａ…とにより、本発明における複数の画像処理部が構成されている。なお、DMACと処理ユニットとは１対１で対応するものではない。この明細書においては、処理ユニットが複数あることをもって、画像処理部が複数あることとする。ただし、DMAC１１１…が画像処理機能を受け持っている場合は、DMACが複数あることをもって、画像処理部が複数あると把握することも可能である。
【００４３】
DMAC１１１…は、並列メモリ１２１…の動作を制御する構成となっている。ただし、この実施形態では、さらに、DMAC１１１が、処理ユニット１３Ａ…と分担して、画像処理の機能を実行するようになっている。
【００４４】
処理ユニット１３Ａ…は、画像処理のための関数に対応した構成となっている。
【００４５】
並列メモリ１２１…は、フレームメモリ２１に格納された画像データの全部又は一部を受け取り、DMACを介していずれかの処理ユニット１３Ａ…に送る構成となっている。
【００４６】
また、本実施形態の並列メモリ１２１…としては、デュアルポート・メモリが用いられている。
【００４７】
本実施形態における複数のDMAC１１１…及び処理ユニット部１３Ａ…は、いずれも、画像処理のための関数に対応した機能を有している。ただし、この機能を処理ユニット１３Ａ…のみが受け持つ構成も可能である。
【００４８】
DMAC１１１…及び処理ユニット部１３Ａ…は、ＣＰＵ３からの指令に従って、並列メモリ１２１…又はフレームメモリ２１から、画像データの全部又は一部を受け取る構成となっている。さらに、DMAC１１１…及び処理ユニット部１３Ａ…は、画像データの全部又は一部に対して、画像処理のための関数に従った処理を行う構成となっている。
【００４９】
本実施形態のコプロセッサ１１…は、再構成可能なプログラマブル・ロジック・デバイス、すなわち、いわゆるFPGAによって構成されている。したがって、コプロセッサ１１…における並列メモリ１２１…の数と容量、並びに、DMAC１１１…及び処理ユニット１３Ａ…の数と機能は、コプロセッサ１１…の書き換えによって変更可能である。
【００５０】
Ｉ／Ｏインタフェース５は、外部機器（図示せず）との間での入出力動作を制御する部分である。
【００５１】
カメラインタフェース６は、カメラ（図示せず）から画像を取り込むための機能を有している。
【００５２】
ビデオインタフェース７は、ビデオ（図示せず）から画像を取り込むための機能を有している。
【００５３】
ＣＰＵバス８は、ＣＰＵ３と各コプロセッサ１１…との間におけるデータ転送を行うためのバスである。
【００５４】
インターコプロセッサバス９は、各コプロセッサ１１…どうしの間におけるデータ転送を行うためのバスである。
【００５５】
各コプロセッサ１１…は、ディスクリプタ１４１をさらに備えている。ディスクリプタ１４１は、画像処理やダイレクトメモリアクセス（ＤＭＡ）の内容を、CPU３からの指令に従って書き込むためのレジスタアレイである。つまり、本実施形態のCPU３は、コプロセッサ１１…への命令をディスクリプタ１４１に書き込む構成となっている。
【００５６】
コプロセッサ１１…は、ディスクリプタ１４１に書かれている命令を読み取り、DMAC１１１…及び処理ユニット１３Ａ…による処理（すなわち複数の画像処理部による処理）を実行する構成となっている。
【００５７】
（画像処理方法）
つぎに、本実施形態の画像処理装置を用いた画像処理方法を、図２を参照しながら、以下に説明する。
【００５８】
（図２のステップＳ−１）
まず、CPU３からの指示により、処理対象となる画像を、カメラインタフェース６又はビデオインタフェース７から取り込む。
【００５９】
（図２のステップＳ−２）
ついで、当該画像を処理するコプロセッサ１１…に対応するフレームメモリ２１…が、当該画像又はその一部を格納する。この処理も、CPU３からの指示により行われる。
【００６０】
一方、CPU３は、各コプロセッサ１１…へのコマンドを、それぞれのディスクリプタ１４１に書き込む。
【００６１】
具体的には、CPU３は、各ディスクリプタ１４１に以下の情報（コマンド）を書き込む。
・使用する処理ユニット；
・使用する並列メモリ（入力用及び出力用）；
・処理のためのパラメータ；
・どの処理ユニットでの処理が完了してから、処理を開始するか(すなわち待ちユニット)。
【００６２】
（図２のステップＳ−３）
ついで、各コプロセッサ１１…は、ディスクリプタ１４１に書き込まれたコマンドを読み取る。
【００６３】
すなわち、各コプロセッサ１１…は、ディスクリプタ１４１に書かれているコマンドを読み、処理を各画像処理部（DMAC及び処理ユニット）に割り当てる。それぞれのDMAC及び処理ユニットは独立して並列に動作する。たとえば、総和計算を行いながら座標変換を行う、といった事も可能である。
【００６４】
ディスクリプタ方式を使うと、コプロセッサに一度に複数の処理を指示できるため、コプロセッサの動作完了時におけるCPUへの割り込みの回数を減らす事ができる。
【００６５】
（図２のステップＳ−４及びステップＳ−５）
ついで、画像処理部が、フレームメモリ２１…又は並列メモリ１２１…から画像の全部又は一部を受け取って処理する。この処理を以下に詳しく述べる。
【００６６】
ディスクリプタに書かれている処理を振り分けるモジュール（このモジュールは例えばディスクリプタ内に構築できる）は、以下のように動作する。なお、ここでの説明においては、処理ユニットはDMAC（画像処理機能を持つ場合）を含む。
１）次のディスクリプタを読む。
２）ディスクリプタが空だったら、処理を停止する。
３）使用しようとする処理ユニットと、待ちユニットの全てが使用可能となるまで待つ。
４）処理ユニットに、処理を振り分ける。
５）前記の１）へ戻る。
【００６７】
ここで、本実施形態においては、待ちユニットを指定しない場合、ディスクリプタに書かれた処理の内容はそれぞれの処理ユニットにすぐに送られる。待ちユニットを指定した場合、指示したユニットが空くまで(処理が完了するまで)、処理の振り分けは行われない。同じユニットを使う処理を並べた場合は、前の処理が完了してから次の処理が行われる。
【００６８】
本実施形態のアーキテクチャでは、アルゴリズムの実装を、通常のCPUのプログラミング環境のみを用いて行うことができる。コプロセッサ１１…内に、基本的な画像処理を行う処理ユニット１３Ａ…あるいはDMAC１１１…があらかじめ用意されており、それらを組み合わせて用いることで、さまざまなアルゴリズムを実装できる。本実施形態では、アルゴリズムを変更しようとする毎に回路設計を行う必要がないため、ユーザーの負担が軽減される。また、本実施形態では、処理ユニット１３Ａ…あるいはDMAC１１１…によって特定の関数を高速に実行できるので、画像処理を高速に行うことができる。
【００６９】
なお、本実施形態では、プログラム中で用意されたAPI(Application Programming Interface)をコールすることで、ディスクリプタに命令を書き込むことができる。
【００７０】
例えば、コプロセッサ１１を使って、処理ユニット１３Ａと処理ユニット１３Ｂの両方が完了してから処理ユニット１３Ａで処理を行う場合には、以下のようにする。なお、以下の例において、UNIT_A1、UNIT_A2のような添え字は、同じ機能を持つ処理モジュールであることを示している。
【００７１】
2014160516.tif 000003
【００７２】
ここで、関数proc_Xは、以下のフォーマットを取る。関数名は、処理の種類を表す。cpは使用するコプロセッサ、unitは使用する処理ユニット、wunitは待ちユニットを示す。このほか、使用するメモリやアドレス、画像サイズ、演算のパラメータなども引数で指定する。
【００７３】
2014160516.tif 000004
【００７４】
sync()を呼ぶと、指定した処理ユニットが空くまで、ファームウェアは待ちに入る。sync()の引数には、使用するコプロセッサcp及び待ちユニットwunitを取る。
【００７５】
2014160516.tif 000005
【００７６】
前記したように、予め準備した関数だけでは不十分な場合、コプロセッサ１１…を構成するFPGA内の論理回路を書き換えることによって、必要な関数を準備することができる。この際には回路設計が必要となってしまうが、コプロセッサ全体ではなく、ユニット単位で変更できるため、回路設計の負担は必要最低限となる。
【００７７】
さらに、FPGAを書き換えた場合でもプロセッサの基本構成は変わらないため、ソフトウェアの互換性を極力保つことができる。例えば、同一機能のユニットは同じ関数名、ユニット名で呼び出せるようにすることで、既存コードの変更を必要最低限にすることができる。
【００７８】
処理ユニット１３Ａ…は、処理毎に専用回路で実装されており、演算の同時実行やパイプラインによる並列化がなされている。加えて、並列メモリ１２１…から複数のデータを同時に読み出すことにより、1クロックに1画素以上の処理を行わせることができる。これらはタスク内での並列処理とみなすことができる。
【００７９】
すなわち、本実施形態においては、並列に動作する複数の画像処理部を用いて、CPUからの指令（つまりプログラム）に従って、タスクレベルでの並列処理を行うことができる。
【００８０】
一方、処理をタスクレベルで並列化するには、以下の方法がある。
１）同一コプロセッサ内で、複数のユニットを同時に使用する。
２）複数のコプロセッサを同時に使う。
【００８１】
同一コプロセッサ内で複数のユニットを同時に使用する場合、複数のユニットが同じメモリへの同時入力、または同時出力を行うことはできない（実行時エラーになる）。これは、FPGAの内部メモリにはアービトレーション機能が無いためである。ただし、メモリにアービトレーション機能が実装されていれば、同時アクセスが可能となる。例えば、並列メモリであるINTRAM1を入力として総和計算をしている間、スケール変換の入力としてINTRAM1を使う事はできないが、他の並列メモリであるINTRAM2を入力とする事は可能である。
【００８２】
また、総和計算のための処理ユニットが二つある場合において、一方の処理ユニットでINTRAM1を入力としている場合、他方の処理ユニットでINTRAM1を入力とする事もできない。
【００８３】
他方、PBSRAM（後述）、フレームメモリなどのように、FPGAの外部にあるメモリに関しては、一般的に、アービトレーション機能が実装されているので、同時にアクセスする事ができる。
【００８４】
アルゴリズムを実装する際に、並列化のために処理を分割する方法としては、
・一枚の画像を分割して、それぞれを別ユニットで実行させる方法、
・テンプレートマッチングなどのように同じ処理を複数回行う場合に、それらを別ユニットで実行させる方法、
・タスクレベルで処理をパイプライン化する方法
などがある。
【００８５】
一般に同一の処理を複数のユニットに振り分ける場合、リソースの競合の観点から、別々のコプロセッサに割り当てるのがよい。一方、タスク間の依存関係が強い場合は、転送コストを考えると同一コプロセッサ内で割り当てるのがよい。
【００８６】
ここで、本実施形態のように、並列メモリ１２１…をデュアルポートRAMで構成した場合は、読み込みと書き込みを独立に行うことができる。したがって、処理の出力先が次の処理の入力元になっている場合であっても、後ろの処理が前の処理を追い越さないことが保証できる場合は、処理がすべて完了する前に次の処理を開始できる。
【００８７】
これにより、前の処理が完了し、結果をすべてメモリに書き込むまで次の処理が実行できない場合に比べて、より短いステージでパイプラインを構成することができるため、処理の高速化に貢献できる。つまり、本実施形態では、並列メモリとしてデュアルポート・メモリを用いることによって、CPUの指令（つまりプログラム）に従って、メモリをバッファとしたパイプライン処理を行うことができ、処理を高速化することが可能になる。
【００８８】
処理のパイプライン化の具体例は後述する（後述の表４）。
【００８９】
（実施例）
上に述べたアーキテクチャに基づいて、本発明者らは、以下に示す評価用のシステムを開発した。システムのデザインと性能評価の結果を示す。
【００９０】
開発したシステムのブロック図を図３に示す。このシステムは２枚のサブボードが載った１枚のメインボードに実装されている。
【００９１】
メインボードにはFPGA、メモリ、I/Oポートなどが搭載されており、サブボードは、CPUボードとカメラインターフェースボードである。前記した実施形態の要素と実施例のハードウエアとの対応を以下に示す。
・FPGA：コプロセッサ
・DDR2DIMM：フレームメモリ
・DIO、USB、RS-232C、Ethernet（登録商標）：I/Oインタフェース
・DDR-SDRAM：メインメモリ
・EXT.BUS：拡張バス。なお、この拡張バスを介して各FPGAはCPUバスに接続されている。したがって、機能上は、この拡張バスは、コプロセッサ間のバスとCPUバスとを兼ねていることになる。
【００９２】
なお、図３中のPBSRAMは、図１には示していないが、各FPGA用の外部メモリである。
【００９３】
この実施例では、開発コストを抑えるため、CPUボードは市販のCPU基板ESPT-Giga（商品名）を利用し、拡張バスを通じてメインボード内のFPGAと接続している。ESPT-Gigaは、CPUにRenesas SH7763 (SH-4A, 266MHz)、メモリには64MBのDDR-SDRAMを搭載し、入出力として、10/100/1000BASE Ethernet（登録商標）、USB1.1、RS232Cを備えている。
【００９４】
ここで、ESPT-Gigaは、ウェブサーバー機能を内蔵することが可能であり、PCからブラウザを通してシステムを操作したり、処理結果を表示することができる。これにより、LANによる遠隔管理が可能となり、多数のシステムを一台のPCで管理することができるようになっている。
【００９５】
本実施例では、FPGAとして、Altera製のEP2S60F1020C5を２個搭載している。図３中でPBSRAMとあるのは、FPGAのコンフィギュレーションデータを格納するためのフラッシュメモリ（8MBytes）であり、これは、各FPGAに搭載されている。
【００９６】
FPGAはそれぞれフレームメモリ（DRAM）を持っており、カメラからの入力画像は自動的にFPGA1のフレームメモリに溜められる。カメラインタフェースはFPGA1に接続されている。個別のカメラ用の物理インタフェースは、メインボード上に取り付けられるカメラインタフェース基板に実装されて使用される。本実施例の実装では、カメラ用のインタフェースは、Basler製のA504k（モノクロ）/kc（カラー）と、Microtron製のEosens MC1362（モノクロ）/1363（カラー）に対応している。これらのカメラは、最大で1280×1024画素の画像を、500fpsでリアルタイム出力することができる。また、これらのカメラでは、画像の行数を減らすことでフレームレートを上げることが可能となっており、たとえば1280×512画素であれば1000fpsで出力できる。
【００９７】
前記したA504k/kcおよびMC1362/1363は、Camera Link規格を独自拡張したインタフェースを採用しており、２本のCamera Link ケーブルでボードと接続される。これらのカメラは、通常のCamera Linkインタフェースのカメラと、物理層での互換性があるので、FPGA1の回路を変更することにより、他のカメラにも対応できる。さらに、本実施例では、カメラインタフェース基板を交換することで、IEEE1394やGigabit Ethernet（登録商標）などの他のカメラインターフェースにも対応できるようになっている。
【００９８】
また、FPGA1には、アナログVGAポートが接続されており、フレームメモリに蓄えられた画像をSXGAサイズ（1280×1024)でディスプレイに出力できるようになっている。
【００９９】
なお、本実施例の画像処理装置では、フレームメモリとは別に、各FPGAが、小容量のSRAMを持っている。本実施例では、このSRAMを、後述の座標変換処理における入力元として利用できる。
【０１００】
さらに、本実施例では、ESPT-Gigaでの外部入出力機能とは別に、32ビットのデジタルI/O（DIO）を用意しており、ロボット制御など高いリアルタイム性が要求される用途に利用できる。
【０１０１】
本実施例における各モジュール間での動作速度は以下の通りである。
・FPGA-DRAM間：3200MB/s (200MHz, 128bit)；
・FPGA-SRAM間：1333MB/s (166.6MHz, 64bit)；
・FPGA-CPU間：133MB/s (66.67MHz, 16bit)；
・FPGA-FPGA間：2133MB/s (133.33MHz, 128bit)。
【０１０２】
以上述べた本実施例のボードのスペックを下記表１にまとめた。
【０１０３】
【表１】
2014160516.tif 000006
【０１０４】
本実施例では、二つのFPGAのそれぞれに、前記の実施形態で説明したコプロセッサが実装されている。各コプロセッサは、以下のユニットを持つ。
・二つの並列メモリ(64kbytes) (PAR1, PAR4)；
・四つの並列メモリ(16kbytes) (PAR2, PAR3, PAR5, PAR6)；
・二つのDMA制御ユニット(DMA1, DMA2)；
・九つの処理ユニット（後述の表２及び表３参照）；
・命令ディスクリプタ。
【０１０５】
本実施例のコプロセッサでは、1画素を16bitとして処理する。カメラから送られてくる画像は一般に8bitであることが多いが、演算の途中過程において、それ以上の精度が必要になることもあるため、16bitを標準とした。たとえば8bit画像同士を加算あるいは減算した場合の結果は9bitである。フィルタ処理など多くの画素を重み付きで足し合わせる場合には、それ以上のビット数が必要となる。
【０１０６】
カラー画像の処理は、RGBそれぞれを3枚の独立したグレースケール画像として扱う。画像の処理ユニットで計算を行う時、16bitの入力データの扱いと出力データの扱いをそれぞれ以下のように指定する事ができる。
・入力データを、
１）0x0000〜0xffffとして解釈(符号無し)；
２）-0x8000〜0x7fffとして解釈(符号付き)。
・演算結果を、
１）0x0000〜0xffffで表現；
２）-0x8000〜0x7fffで表現；
３）絶対値をとって、0x0000〜0xffffで表現。
・演算結果が16bitに収まらない場合は最大値か最小値のいずれかで飽和させる。
・二値化を行う場合、結果yがTl≦y≦Thの場合は１、それ以外は０とする。ここで、Tl及びThは、適宜に設定される閾値の上限及び下限を示す。
【０１０７】
画像処理の係数パラメータは、16bit長または12bit長の符号付固定小数点とし、小数点の位置は各パラメータ共通で指定する。
【０１０８】
並列メモリは、一つにつき同時に128bit(8pixel)のデータの読み書きができる。また、この並列メモリは、デュアルポートRAMで構成されており、読み込みと書き込みを独立に行うことができる。
【０１０９】
DMA制御ユニット（DMAC）は、各メモリ間のデータの転送を行う。本実施例では、CPUとのデータ転送は、各FPGAにおいて、特定のDMAC（例えばDMA2とする）でのみ可能である。また、他方のFPGAにデータを転送できるのは、各FPGAにおいて、他の特定のDMAC（例えばDMA1とする）のみである。各メモリ間でのデータ転送は、128bit単位で行われるが、外部メモリとの間でデータ転送をするときは、外部メモリの動作速度に制限される。
【０１１０】
データの転送範囲としては、
・（一行あたり転送バイト数）×（行数）の設定；
・ソース及びディスティネーションそれぞれの転送開始アドレスと一行あたりのアドレス増分
を指定する。これによって大画面の画像の一部切り出し、埋め込みが可能である。
【０１１１】
本実施例のDMA制御ユニット（DMAC）には、オプションで以下のデータ操作回路（すなわち画像処理機能）を備えることができる。
【０１１２】
シフト回路
この回路は、16バイト毎にデータを左にバイト単位でシフトした結果を出力するものである。データのsrcアドレスについては、16の倍数でなければならないという制限があるが、シフト回路を使うと、任意のアドレスのデータをsrcとすることができる。
【０１１３】
間引き回路
この回路は、16バイト毎にデータ入力を受け付け、8→1(出力データ量1/8倍), 4→1(出力データ量1/4倍), 2→1(出力データ量1/2倍)のいずれかの間引きを行ったデータを出力する。この機能とDMA転送のアドレス増分の指定とにより、画像の縮小を行うことができる。
【０１１４】
変換回路
この回路では、16バイト毎にデータを入力する。そして、8ビット（モノクロ）→16ビット(出力データ量は2倍)、8ビット（ベイヤー）→16ビット（R成分、G成分、B成分のいずれか）、16ビット→8ビット(出力データ量は1/2倍)のいずれかの変換を行うことができる。カメラから送られてくるデータは1画素が8ビットで構成されており、これをコプロセッサで処理するためには、1画素16ビットに変換する必要がある。カラーカメラの場合、ベイヤー変換を行い、RGBのいずれかの成分のみを出力する処理を行う。
【０１１５】
表２に、各コプロセッサに実装されている演算ユニット（すなわち処理ユニット）を示す。
【０１１６】
【表２】
2014160516.tif 000007
【０１１７】
この表における記号の意味は以下の通りである・
・SCALE：画素値を線形にスケーリングする処理；
・ARITH：二つの画像間で加減算、乗算を行う処理；
・3x3CONV：オペレータのカーネルサイズが3×3のコンボリューションフィルタ；
・SUM：指定した範囲で画素値の総和を計算する処理；
・AFFINE：画像を平面アフィン変換で変形する処理。
【０１１８】
ここで、AFFINEは、入力をSRAMから受け取ることができる。SCALE、ARITH、SUMは、１クロックに８画素、3x3CONVは１クロックに４画素、同時に処理を行うことができる。AFFINEは1クロックに1画素だけ処理を行う。
【０１１９】
本実施例では、画像処理のための処理ユニットとして、一般的によく用いられる画像処理アルゴリズムを実現するのに必要最低限と思われる基本機能を搭載した。他に、処理ユニットに実装することが有用な機能としては、「ルックアップ・テーブル（LUT）を用いた非線形のスケール変換」、「ルックアップ・テーブル（LUT）を用いた非線形の座標変換」及び「論理演算」などが挙げられる。
【０１２０】
本実施例のディスクリプタは、それぞれ256Word(1Word=2bytes)まで命令を積むことができる。一つの命令は、パラメータの数により1〜3Wordで構成される。ここで、一つの命令は、前記したproc_X()関数の一つに対応し、一つのDMA制御ユニットまたは画像処理ユニットを用いて、指定した範囲の画像データに対する処理を指示することができる。なお、何もしないという命令も用意されており、これはsync()関数に対応する。
【０１２１】
（動作周波数、回路規模などのスペック）
本実施例で用いたFPGAは、200MHzで動作し、使用リソースはFPGA1が88%、FPGA2が81%である。
【０１２２】
表３に、本実施例のシステムが持つ基本機能を用いた処理と、基本機能を組み合わせた処理の計算時間を示す。比較のため、OpenCVを用いて同等の処理をPCに実装した場合の計算時間も示す。使用したPCは、CPUがIntel E6300 (1.86GHz×2)、RAMが3GBで、Visual Studio 2005とOpenCV 1.0を用いて実装し、Windows（登録商標） XP上で計測した。表中のEvalSysは、開発した評価システムを用いた場合の処理時間、OpenCVはPCとOpenCVを用いた場合の処理時間を示す。
【０１２３】
【表３】
2014160516.tif 000008
【０１２４】
本実施例において、入力元・出力先はFPGA内部の並列メモリとし、画像の大きさは256×32とした。
【０１２５】
一方、PCでの計測は、同じ処理を100000回繰り返し行い、実行時間の平均を用いた。実装はOpenCVのライブラリを用いて行い、画像は符号付き16ビットとした。ただし、ベイヤー変換およびアフィン変換については、OpenCVの関数が符号付き16ビットに対応していなかったので、符号なし8ビットで実装した。係数は、関数の仕様に合わせてfloatまたはdoubleを用いた。Copy、Bayer Conversion、Shrinkの三つの関数については、カメラから取り込まれた画像に対して最初に行うことが想定されるため、入力元をフレームメモリとし、PCでの計測は直前の処理におけるキャッシュの影響を排除するようにした。また、Bayer ConversionとShrinkは入力と出力で画像サイズが異なるが、出力の画像サイズを基準に算出した。
【０１２６】
重心計算は、まず入力画像から前フレームの結果から推定される対象が存在する領域を切り出し、固定あるいは適応的に定められたしきい値で二値化する。次に、以下の式を用いて重心の計算を行う。
【０１２７】
2014160516.tif 000009
【０１２８】
(x,y)座標値での重みIx及びIyはそれぞれあらかじめ並列メモリに入れておき、二値化した入力画像をARITHにより重み付けし、SUMによる総和計算でモーメントm10及びm01を計算する。モーメントm00は重み付けなしで総和計算により求める。
【０１２９】
これらの処理は、表４に示すような形で、タスクレベルでパイプライン化し、並列に実行する。並列メモリはデュアルポートになっているため、処理の出力先が次の処理の入力元になっている場合、処理がすべて完了する前に次の処理を開始できる。なお、本実施例における前記の処理はすべてコプロセッサ1のみで行った。
【０１３０】
【表４】
2014160516.tif 000010
【０１３１】
これらの結果から、本実施例によれば、平均的にはPCを数倍上回る性能が得られていることがわかった。しかし、今回PCと比較したのは、他の一般的な手法と比較する際の基準となるからであり、PCベースのシステムを用いない理由は、安定性や信頼性を確保するためである。実際、PCを用いたシステムではディレイやフレーム落ちが頻繁に観測されており、高速ビジョンのアプリケーションにおいて支障をきたすことになる。
【０１３２】
また、PCを用いた場合でも、マルチメディア命令やGPUの利用により高速化が可能であり、この場合、開発したシステムより高い演算性能を実現することができる。たとえば、GPUを用いた枠組みの一つであるGPUCV（非特許文献３０）では、いくつかの画像処理においてPCの1.7〜18倍の処理性能が報告されている。しかし、これらはPCのプラットフォームを前提にしており、やはり上記の問題を抱えることになる。
【０１３３】
開発したボードは12V,5Aの電源で動作し、実効的な消費電力は４２W程度であった。FPGAの消費電力は比較的高いため、DSPなどを利用する場合に比べると消費電力は高くなるが、本実施形態では、組込みシステムを用いることにより、安定性と信頼性を確保できるという利点がある。
【０１３４】
本実施例では、高速ビジョンシステムのアーキテクチャとして、組み込みマイクロプロセッサとFPGAを組み合わせることによって、ハードウェアのリコンフィギャラビリティとアルゴリズム実装の容易性を両立できるという利点がある。
【０１３５】
半導体の集積化が指数的に進む中、並列処理を活かしたプロセッシングアーキテクチャは今後よりいっそう重要になってくる。その際に、汎用的なアーキテクチャでは、並列度を最大限に活かすことは難しい。FPGAによる再構成可能な専用回路と、CPUの容易なプログラミング環境を組み合わせることで、高い画像処理性能を発揮しつつ、ある程度の汎用性を持たせることができる。
【０１３６】
再構成可能なプログラマブル・ロジック・デバイスは、通常、FPGAと呼ばれる集積回路である。FPGAを用いることにより、画像処理部の機能を、ユーザの必要に応じて書き換えることができる。例えば、不足する関数に対応する画像処理部を追加したり、あるいは、必要な関数に対応する画像処理部を追加することができる。
【０１３７】
本実施例では、並列メモリとしてデュアルポート・メモリを用いることにより、メモリへの読み込みと書き込みとを独立に行うことができる。このため、処理を一層高速化することができる。
【０１３８】
また、ディスクリプタを用いることにより、CPUは、コプロセッサに対して、一度に複数の処理を指示することができる。このため、コプロセッサの動作完了時におけるCPUへの割り込み回数を減らすことができるという利点がある。
【０１３９】
画像処理部は、画像処理に用いられる特定の関数に対応する。画像処理を行う場合、処理に必要な関数の実行を、専用の画像処理部で行うことにより、処理を高速化できる。さらに、プログラムにおいては、特定の関数あるいは画像処理部を指定して処理を実行させることができる。
【０１４０】
なお、前記した実施形態及び実施例の構成は、本発明の例示に過ぎず、本発明の内容を制限する趣旨のものではない。
【符号の説明】
【０１４１】
１１、１２、…、１Ｐ  コプロセッサ
１１１、１１２、…、１１Ｎ  DMAC（画像処理部）
１２１、１２２、…、１２Ｍ  並列メモリ
１３Ａ、１３Ｂ、…、１３Ｘ  処理ユニット（画像処理部）
１４１  ディスクリプタ
１２１  並列メモリ
２１、２２、…、２Ｐ  フレームメモリ
３  ＣＰＵ
４  メインメモリ
５  I/Oインタフェース
６  カメラインタフェース
７  ビデオインタフェース
８  CPUバス
９  インターコプロセッサバス
【図１】
2014160516.tif 000011
【図２】
2014160516.tif 000012
【図３】
2014160516.tif 000013
【手続補正書】
【提出日】平成26年6月19日(2014.6.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コプロセッサと、フレームメモリと、ＣＰＵとを備えており、
前記フレームメモリは、処理されるべき画像データを格納する構成となっており、
前記コプロセッサは、画像処理用の複数の処理ユニットと複数の並列メモリとを備えており、
前記並列メモリは、前記フレームメモリに格納された前記画像データの全部又は一部を受け取る構成となっており、
かつ、前記並列メモリは、読み込みと書き込みとを独立に実行可能なデュアルポート・メモリとなっており、
前記複数の処理ユニットは、いずれも、画像処理のための関数に対応した機能を有しており、
かつ、前記複数の処理ユニットは、前記並列メモリをバッファとしたパイプライン処理を含む並列処理を行う構成となっており、
さらに、前記複数の処理ユニットは、
前記並列メモリから、前記並列メモリ中の前記画像データの全部又は一部を、画像ブロックとして受け取る処理と、
受け取った前記画像ブロックのうちのｎ画素ごとに順次特定して、前記ｎ画素に対して前記画像処理のための関数に従った処理とを行い、
ついで、前記ｎ画素に対する処理の結果としてのｍ画素（ｎ＝ｍであってもよい）をいずれかの前記並列メモリに書き込む構成となっており、
さらに、前記複数の処理ユニットは、前記パイプラインの前段における処理ユニットにおいて処理された結果としての前記ｍ画素を、前段の処理ユニットにおける前記画像ブロックへの処理が完了する前に、前記ｍ画素の単位で前記並列メモリから順次取り出して処理を行い、その結果をいずれかの並列メモリに書き込む構成となっており、
前記コプロセッサは、ディスクリプタと処理振り分けモジュールとをさらに備えており、
前記ＣＰＵは、使用する処理ユニットと、待ちユニットと、使用する並列メモリと、並列メモリにおけるアドレスと、処理のパラメータとに関する情報を前記ディスクリプタに書き込む構成となっており、
前記処理振り分けモジュールは、前記ディスクリプタの内容を読み取り、前記処理ユニットに処理を割り当てることによって、前記パイプライン処理を実行する構成となっている
画像処理装置。
【請求項２】
前記複数の処理ユニットは、前記ｎ画素を、受け取った前記画像ブロックのうちの、画素の配列方向におけるｎ画素（ここでｎは１≦ｎ＜Ｗであり、Ｗは画像ブロックの幅方向における全ピクセル数）ごとに順次特定する構成となっている
請求項１に記載の画像処理装置。
【請求項３】
前記コプロセッサは、再構成可能なプログラマブル・ロジック・デバイスによって構成されている
請求項１又は２に記載の画像処理装置。
【請求項４】
以下のステップを備える画像処理方法：
（１）フレームメモリが、処理されるべき画像データを格納するステップ；
（２）ＣＰＵが、画像処理用の処理ユニットを有するコプロセッサへの命令をディスクリプタに書き込むステップ；
（３）前記コプロセッサ内の処理振り分けモジュールが、ディスクリプタの内容を読み取り、処理ユニットに処理を割り当てるステップ、ここで、前記ディスクリプタは、使用する処理ユニットと、待ちユニットと、使用する並列メモリと、並列メモリにおけるアドレスと、処理のパラメータとに関する情報を備えている；
（４）読み込みと書き込みとを独立に実行可能なデュアルポート・メモリである並列メモリが、前記フレームメモリに格納された前記画像データの全部又は一部を受け取るステップ；
（５）前記並列メモリをバッファとしたパイプライン処理を含む並列処理を行う複数の処理ユニットが、前記並列メモリから、前記並列メモリ中の前記画像データの全部又は一部を、画像ブロックとして受け取るステップ；
（６）前記複数の処理ユニットが、受け取った前記画像ブロックのうちのｎ画素ごとに順次特定して、前記ｎ画素に対して画像処理のための関数に従った処理をそれぞれ行い、ついで、前記ｎ画素に対する処理の結果としてのｍ画素（ｎ＝ｍであってもよい）をいずれかの前記並列メモリに書き込むステップ、ここで、前記処理ユニットは、前記パイプラインの前段における処理ユニットにおいて処理された結果としての前記ｍ画素を、前段の処理ユニットにおける前記画像ブロックへの処理が完了する前に、前記ｍ画素の単位で前記並列メモリから順次取り出して処理を行い、その結果をいずれかの並列メモリに書き込む構成となっている。