以下、本発明による画像処理フィルタ統合装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。また、所定の情報が格納され得る格納部等において、当該格納部に情報が記憶される過程は問わないものとする。例えば、記録媒体を介して情報が格納部等で記憶されるようになってもよい。また、通信回線などを介して送信された情報が格納部等で記憶されるようになってもよい。さらに、入力デバイスを介して入力された情報が格納部等で記憶されるようになってもよい。また、本実施の形態において説明する各情報の形式、内容などは、あくまで例示であり、各情報の持つ意味を示すことができれば、形式、内容などは問わない。
(実施の形態1)
本実施の形態において、プログラム中の2以上の画像処理フィルタについて、統合可能であるか否かを判断し、統合可能であれば統合する画像処理フィルタ統合装置について説明する。
図1は、本実施の形態における画像処理フィルタ統合装置1のブロック図である。画像処理フィルタ統合装置1は、プログラム格納部11、画像処理フィルタ格納部12、受付部13、プログラム取得部14、画像処理フィルタ検出部15、画像処理フィルタ統合部16、変更部17を備える。
プログラム格納部11は、プログラムを格納する。プログラムとは、コンピュータプログラムのことであり、ソースコードや、アセンブリコード、バイナリコード、オブジェクトコードなどである。また、プログラムの形態は問わない。また、これらのコードが示すものは、関数や、メソッド、クラスなどであり、その内容は問わない。また、当該プログラムは、通常、プログラムを識別するプログラム識別子と、画像処理フィルタを識別する2以上の画像処理フィルタ識別子を有する。プログラム識別子は、通常、ファイル名であるが、関数名や、メソッド名、クラス名などであってもよい。また、画像処理フィルタ識別子は、通常、関数名であるが、メソッド名や、フィルタ名、プログラム、命令列などであってもよい。
画像処理フィルタ格納部12は、1以上の画像処理フィルタと、当該画像処理フィルタを識別する画像処理フィルタ識別子とを格納する。画像処理フィルタとは、いわゆるデジタル画像に対して何らかの処理を施すものである。当該処理は、例えば、エッジ検出や、平滑化、鮮鋭化などである。画像処理フィルタは、通常、プログラムである。当該プログラムは、例えば、画像中の各画素に対して行う演算を示す演算子や、その際の係数を示すもの、画像に対する処理の手順を示すものなどである。当該係数は、通常、行列の形式である。また、当該係数は、一般的に、要素や、パラメータ、オペレータ、カーネルなどと呼ばれるものである。また、画像処理フィルタは、画像処理フィルタ識別子を有していてもよい。
また、画像処理フィルタ格納部12は、画像処理フィルタに対応する情報として、画像処理フィルタのパターンを示すパターン情報や、他の画像処理フィルタと統合可能であるか否かを示す統合可否情報、画像処理フィルタの属性を示す情報である1以上の属性情報などを有していてもよい。パターン情報は、例えば、正規表現や、命令や制御構文や変数などの組み合わせのパターンなどである。また、統合可否情報は、統合可能であることを示す情報、または統合可能でないことを示す情報である。また、属性情報は、例えば、画像処理フィルタが係数の行列である場合、そのサイズを示すサイズ情報や、画像処理フィルタにより得られる効果を示す効果情報、画像処理フィルタの名称であるフィルタ名などである。サイズ情報は、例えば、画像処理フィルタの縦のサイズ、または横のサイズを示す情報である。サイズ情報は、例えば、画像処理フィルタのサイズが縦3ピクセル、横3ピクセルであることを示す「3×3」や、縦、横ともに5ピクセルであることを示す「5」などである。また、効果情報は、例えば、「エッジ検出」や、「平滑化」、「鮮鋭化」などである。フィルタ名は、例えば、「ラプラシアンフィルタ」や、「メディアンフィルタ」、「ガウシアンフィルタ」などである。
なお、画像処理フィルタは、例えば、ノイズ除去フィルタや、エッジ検出フィルタなどがあるが、その効果や処理内容などは問わない。また、画像処理フィルタのその他の例については、公知であるので、詳細な説明を省略する。また、画像に対して画像処理フィルタを適用する方法や手順なども、公知であるので、詳細な説明を省略する。
なお、画像処理フィルタ識別子、画像処理フィルタを有する情報を、画像処理フィルタ管理情報としてもよい。また、当該画像処理フィルタ管理情報は、パターン情報や、統合可否情報、属性情報などを有していてもよい。
また、画像処理フィルタ格納部12は、1以上の統合可能画像処理フィルタ管理情報を格納してもよい。統合可能画像処理フィルタ管理情報とは、互いに統合可能である2以上の各画像処理フィルタを識別する画像処理フィルタ識別子を有する情報である。また、統合可能画像処理フィルタ管理情報は、互いに統合可能である2以上の各画像処理フィルタを識別する画像処理フィルタを有する情報であってもよい。また、統合可能画像処理フィルタ管理情報は、1以上の統合可能画像処理フィルタ対情報を有していてもよい。統合可能画像処理フィルタ対情報とは、互いに統合可能である2以上の各画像処理フィルタを識別する画像処理フィルタ識別子と、当該画像処理フィルタが統合可能であることを示す情報とを有する情報である。
なお、プログラム格納部11、画像処理フィルタ格納部12は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
受付部13は、1以上のプログラム識別子を有する指示を受け付ける。当該プログラム識別子は、通常、1つであるが、2以上であってもよい。また、当該指示は、通常、当該プログラム識別子で識別されるプログラム中の画像処理フィルタを統合する指示である。また、当該指示は、例えば、当該プログラム識別子で識別されるプログラムをコンパイルする指示や、当該プログラムを実行する指示などであってもよい。また、当該指示は、1以上のプログラム識別子を有するファイルのファイル名を有していてもよい。
例えば、画像処理フィルタ統合装置1が、OS上で動作するアプリケーションなどである場合、当該指示は、例えば、プログラムを示すアイコンの当該装置へのドラッグ&ドロップや、当該装置が有するボタンのクリックなどである。また、例えば、画像処理フィルタ統合装置1が、プログラムが実行されるときに必ず実行されるようなミドルウェアなどである場合、当該指示は、例えば、プログラムを示すアイコンのダブルクリックや、当該アイコンのシングルクリックなどである。なお、プログラム識別子を有する指示の形式は問わない。また、プログラム識別子を有する形態は問わない。
また、受け付けとは、マウスなどのポインティングデバイスや、キーボード、タッチパネルなどの入力デバイスから入力された情報の受け付け、有線もしくは無線の通信回線を介して送信された情報の受信、光ディスクや磁気ディスク、半導体メモリなどの記録媒体から読み出された情報の受け付けなどを含む概念である。
受付部13における指示の入力手段は、マウスなどのポインティングデバイスや、キーボード、メニュー画面によるものなど、何でもよい。受付部13は、ポインティングデバイス等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェアなどで実現され得る。
プログラム取得部14は、受付部13が受け付けた指示が有する1以上のプログラム識別子で識別されるプログラムを、プログラム格納部11から取得する。プログラム取得部14は、通常、受付部13がプログラム識別子を有する指示を受け付けた直後に、当該プログラムを取得する。なお、以下、プログラム取得部14が取得したプログラムを、取得プログラムとする。
画像処理フィルタ検出部15は、通常、画像処理フィルタ格納部12に格納されている1以上の画像処理フィルタ識別子を取得し、当該1以上の画像処理フィルタ識別子に一致する2以上の画像処理フィルタ識別子を、1以上の取得プログラムから検出する。「検出する」とは、具体的には、取得プログラムにおいて、画像処理フィルタ識別子が記述されている箇所を検出することである。また、画像処理フィルタ検出部15は、通常、1以上の取得プログラムのいずれかにおいて連続して定義されている2以上の画像処理フィルタ識別子を検出する。「連続して定義されている」とは、当該画像処理フィルタ識別子が連続していることであり、処理の連続や、記述の連続などを意味する。
「処理の連続」とは、例えば、画像処理フィルタの入出力関係が連続していることである。つまり、例えば、「filter01」の出力を、「filter02」の入力とするような命令が、取得プログラム中にある場合、「filter01」と「filter02」の各々により識別される2つの画像処理フィルタは、入出力関係が連続しているので、処理が連続すると言える。当該命令は、例えば、「connection=connnect(filter01.output,filter02.input)」や、「img_b=filter01(img_a); img_c=filter02(img_b);」などである。
また、「処理の連続」は、例えば、画像処理フィルタの入力が同一であることであってもよい。つまり、例えば、同一の画像を「filter01」と「filter02」の入力とするような命令が、取得プログラム中にある場合、「filter01」と「filter02」の各々により識別される画像処理フィルタは、入力が同一であるので、処理が連続すると言える。当該命令は、例えば、「connection=connnect(filter01.input,filter02.input)」や、「img_b=filter01(img_a); img_c=filter02(img_a);」などである。
また、「記述の連続」とは、例えば、画像処理フィルタの前後関係が連続していることである。つまり、例えば、取得プログラムのn行目に「img_a=filter01(img_a)」、n+1行目に「img_b=filter02(img_b)」がある場合、「filter01」の行と「filter02」の行が前後にあるので、この2つの画像処理フィルタは、記述が連続していると言える。
なお、画像処理フィルタ検出部15は、処理が連続している2以上の画像処理フィルタ識別子を検出することが好適である。
また、画像処理フィルタ検出部15は、例えば、画像処理フィルタ格納部12に格納されている1以上の画像処理フィルタ識別子のうち、統合可否情報により統合可能であることが示される1以上の画像処理フィルタ識別子を取得し、当該1以上の画像処理フィルタ識別子に一致する2以上の画像処理フィルタ識別子を、1以上の取得プログラムから検出してもよい。
また、画像処理フィルタ検出部15は、例えば、画像処理フィルタ格納部12に格納されている1以上の画像処理フィルタ識別子のうち、属性情報が、属性条件を満たす画像処理フィルタ識別子を取得し、当該1以上の画像処理フィルタ識別子に一致する2以上の画像処理フィルタ識別子を、1以上の取得プログラムから検出してもよい。
属性条件とは、予め決められた条件であり、画像処理フィルタの属性を示す条件である。属性条件は、属性情報を有する。また、属性条件は2以上の属性条件を連結する連結情報を有していてもよい。属性条件は、例えば、(1)「サイズ=(3×3)」や、(2)「{サイズ=(3×3)}and{効果=(エッジ検出)}」などである。(1)は、「フィルタのサイズが『3×3』」であることを示す。(2)は、「フィルタのサイズが『3×3』であり、かつ効果が『エッジ検出』」であることを示す。また、属性条件は、通常、画像処理フィルタ検出部15が保持しているが、任意の記憶領域に格納されていてもよい。
また、属性条件は、例えば、画像処理フィルタに対応する属性情報が同一であることであってもよい。この場合、画像処理フィルタ検出部15は、例えば、画像処理フィルタ格納部12に格納されている1以上の画像処理フィルタ識別子のうち、属性情報が同一である2以上の画像処理フィルタ識別子を、当該属性情報ごとに取得する。ここで、属性情報が同一の2以上の画像処理フィルタ識別子を、同一画像処理フィルタ識別子とする。そして、画像処理フィルタ検出部15は、当該同一画像処理フィルタ識別子ごとに、同一画像処理フィルタ識別子が有する2以上の画像処理フィルタ識別子に一致する2以上の画像処理フィルタ識別子を、1以上の取得プログラムから検出する。
また、画像処理フィルタ検出部15は、例えば、画像処理フィルタ格納部12に格納されている一の統合可能画像処理フィルタ管理情報を取得し、当該統合可能画像処理フィルタ管理情報が有する2以上の画像処理フィルタ識別子に一致する2以上の画像処理フィルタ識別子を、1以上の取得プログラムから検出してもよい。また、このとき、画像処理フィルタ検出部15は、2以上の統合可能画像処理フィルタ管理情報を取得し、当該各統合可能画像処理フィルタ管理情報ごとに、画像処理フィルタ識別子を検出してもよい。
また、画像処理フィルタ検出部15は、例えば、同一の画像処理フィルタ識別子を2以上検出してもよいし、異なる画像処理フィルタ識別子を2以上検出してもよい。つまり、前者の場合、画像処理フィルタ検出部15は、例えば、画像処理フィルタ格納部12に格納されている一の画像処理フィルタ識別子を取得し、当該一の画像処理フィルタ識別子に一致する2以上の画像処理フィルタ識別子を、1以上の取得プログラムから検出する。また、後者の場合、画像処理フィルタ検出部15は、例えば、画像処理フィルタ格納部12に格納されている2以上の画像処理フィルタ識別子を取得し、当該2以上の画像処理フィルタ識別子に一致する2以上の画像処理フィルタ識別子を、1以上の取得プログラムから検出する。
なお、画像処理フィルタ検出部15は、1以上の取得プログラムから2以上の画像処理フィルタ識別子を検出できればよく、その方法や手順などは問わない。
画像処理フィルタ統合部16は、画像処理フィルタ検出部15が検出した2以上の画像処理フィルタ識別子で識別される画像処理フィルタを統合する。そして、画像処理フィルタ統合部16は、当該統合した画像処理フィルタである統合画像処理フィルタと、当該統合画像処理フィルタを識別する統合画像処理フィルタ識別子とを生成する。画像処理フィルタ統合部16は、通常、画像処理フィルタ検出部15が検出した2つの画像処理フィルタごとに、統合画像処理フィルタと、当該統合画像処理フィルタ識別子を生成することが好適である。
また、画像処理フィルタ統合部16は、例えば、以下のいずれかの処理を行うことにより、統合画像処理フィルタを生成する。なお、統合画像処理フィルタの生成の方法は、以下のいずれかに限定されるものではない。また、以下において、画像処理フィルタ検出部15が検出した2つの画像処理フィルタを、それぞれ、第一の画像処理フィルタ、第二の画像処理フィルタとする。
(1)第一の画像処理フィルタ、および第二の画像処理フィルタが、処理の手順を示すプログラムである場合:当該2つのプログラムを結合し、1つのプログラムを生成する。
(2)第一の画像処理フィルタ、および第二の画像処理フィルタが、処理の手順を示すプログラムである場合:当該2つのプログラムを呼び出すプログラムを生成する。
なお、上記(1)において、「結合する」、例えば、当該2つのプログラムをコンパイルすることや、当該2つのプログラムを連結することなどを含む。また、当該(1)の処理を行うことにより、画像処理フィルタの数を減らすことや、命令数を減らすこと、処理時間を短くすることができる。
また、上記(2)は、つまりは、当該2つのプログラムを概念上、1つのプログラムとして扱うことである。また、上記(2)において、画像処理フィルタ統合部16は、例えば、当該2つのプログラムを呼び出す命令(当該2つのプログラムを識別するプログラム識別子を有する命令)を有するプログラムを生成する。また、当該(2)の処理を行うことにより、処理時間を短くすることができる。
また、画像処理フィルタ統合部16は、例えば、以下のいずれかの処理を行うことにより、統合画像処理フィルタ識別子を生成する。なお、統合画像処理フィルタ識別子の生成の方法は、以下のいずれかに限定されるものではない。また、以下において、画像処理フィルタ検出部15が検出した2つの画像処理フィルタを識別する画像処理フィルタ識別子を、それぞれ、第一の画像処理フィルタ識別子、第二の画像処理フィルタ識別子とする。
(1)第一の画像処理フィルタ識別子と、第二の画像処理フィルタ識別子とを連結する。
(2)第一の画像処理フィルタ識別子の一部と、第二の画像処理フィルタ識別子の一部とを連結する。
(3)第一画像処理フィルタ識別子と第二画像処理フィルタ識別子との共通部分を抽出する。
(4)任意の単語や文字列を組み合わせる。
上記において、(1)は、例えば、第一画像処理フィルタ識別子の後方に、第二画像処理フィルタ識別子を連結することや、第二画像処理フィルタ識別子の後方に、第一画像処理フィルタ識別子を連結することなどである。また、(3)は、例えば、第一画像処理フィルタ識別子が「Filter01」であり、第二画像処理フィルタ識別子が「Filter02」である場合、「Filter」を抽出する。(4)は、例えば、3つの単語「Filter」、「Rejection」、「Noise」を、文字「_」で連結し、「Filter_Noise_Rejection」を生成する。
変更部17は、画像処理フィルタ検出部15が検出した2以上の画像処理フィルタ識別子を、統合画像処理フィルタを識別する統合画像処理フィルタ識別子で置換する。そして、変更部17は、置換後のプログラムである変更プログラムを取得する。
変更部17は、通常、画像処理フィルタ検出部15が検出した2以上の画像処理フィルタ識別子のうち、取得プログラムにおいて最初に出現する画像処理フィルタ識別子と、統合画像処理フィルタ識別子とを置換する。そして、変更部17は、最初に出現する画像処理フィルタ識別子以外の画像処理フィルタ識別子を、取得プログラムから削除する。
また、変更部17は、通常、画像処理フィルタ検出部15が検出した2以上の画像処理フィルタの入出力関係を維持するように、置換を行う。
例えば、取得プログラムのn行目からn+2行目に、「con1=connect(Input,filter01.input)」、「con2=connnect(filter01.output,filter02.input)」、「con3=connect(filter02.output,Output)」があり、「filter01」と「filter02」とを統合した統合画像処理フィルタを識別する統合画像処理フィルタ識別子が「filter_fusion」である場合、変更部17は、以下のような手順で置換を行う。
(1)n行目の画像処理フィルタ識別子「filter01」を、統合画像処理フィルタ識別子「filter_fusion」に置換する。この結果、n行目は、「con1=connect(Input,filter_fusion.input)」となる。
(2)n+2行目の画像処理フィルタ識別子「filter02」を、統合画像処理フィルタ識別子「filter_fusion」に置換する。この結果、n+2行目は、「con3=connect(filter_fusion.output,Output)」となる。
(3)n+1行目を削除する。
また、例えば、取得プログラムのn行目に「img_b=filter01(img_a)」、n+5行目に「img_c=filter02(img_b)」があり、「filter01」と「filter02」とを統合した統合画像処理フィルタを識別する統合画像処理フィルタ識別子が「filter_fusion」である場合、変更部17は、以下のような手順で置換を行う。
(1)n行目の画像処理フィルタ識別子「filter01」を、統合画像処理フィルタ識別子「filter_fusion」に置換する。この結果、n行目は、「img_b=filter_fusion(img_a)」となる。
(2)n+5行目の出力である「img_c」を取得する。
(3)n行目の出力と、(2)で取得した出力とを置換する。この結果、n行目は、「img_c=filter_fusion(img_a)」となる。
(4)n+5行目を削除する。
なお、プログラム取得部14、画像処理フィルタ検出部15、画像処理フィルタ統合部16、変更部17は、通常、MPUやメモリ等から実現され得る。プログラム取得部14等の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現してもよい。
また、画像処理フィルタ統合装置1は、図示しない判断部を備えていてもよい。判断部は、画像処理フィルタ検出部15が検出した2以上の画像処理フィルタ識別子で識別される画像処理フィルタが統合かのうであるか否かを判断する。なお、当該判断の方法は、画像処理フィルタ検出部15が画像処理フィルタ識別子を検出する際の判断と同様であるので、説明を省略する。また、判断部は、画像処理フィルタ検出部15が検出した画像処理フィルタが統合可能であるか否かを判断できればよく、その方法や手順などは問わない。
また、画像処理フィルタ統合装置1は、図示しない統合可否情報生成部と、蓄積部とを備えていてもよい。
統合可否情報生成部は、前述の判断部が統合可能であるか否かを判断した結果を示す統合可否情報を生成する。統合可否情報生成部は、通常、画像処理フィルタ検出部15が検出した画像処理フィルタ識別子で識別される画像処理フィルタに対応する統合可否情報を生成する。例えば、当該画像処理フィルタについて、判断部が、統合可能であると判断した場合、統合可否情報生成部は、統合可能であることを示す統合可否情報を生成する。また、例えば、当該画像処理フィルタについて、判断部が、統合可能でないと判断した場合、統合可否情報生成部は、統合可能でないことを示す統合可否情報を生成する。なお、判断部が、統合可能でないと判断した場合、統合可否情報生成部は、統合可否情報を生成しなくてもよい。
また、蓄積部は、統合可否情報生成部が生成した統合可否情報を、画像処理フィルタ格納部12に蓄積する。このとき、蓄積部は、通常、統合可否情報生成部が統合可否情報を生成した画像処理フィルタに対応付けて、統合可否情報を蓄積する。
なお、判断部、統合可否情報生成部、蓄積部は、通常、MPUやメモリ等から実現され得る。プログラム取得部14等の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現してもよい。
次に、画像処理フィルタ統合装置1の動作について説明する。なお、所定の情報におけるi番目の情報は、「情報[i]」と記載するものとする。図2は、画像処理フィルタ統合装置1の全体動作を示すフローチャートである。
(ステップS201)受付部13は、指示を受け付けたか否かを判断する。受け付けた場合は、ステップS202に進み、そうでない場合は、S201に戻る。
(ステップS202)受付部13は、ステップS201で受け付けた指示が、プログラム識別子を有するか否かを判断する。有する場合は、ステップS203に進み、そうでない場合は、ステップS201に戻る。
(ステップS203)プログラム取得部14は、ステップS201で受け付けた指示が有する1以上のプログラム識別子で識別されるプログラムを、プログラム格納部11から取得する。ここで、m行のプログラムが取得できたものとする。
(ステップS204)画像処理フィルタ検出部15は、画像処理フィルタ格納部12から、統合可能である画像処理フィルタを識別する画像処理フィルタ識別子を取得する。この処理の詳細は、図3のフローチャートを用いて説明する。
(ステップS205)画像処理フィルタ検出部15は、ステップS203で取得したプログラムから、ステップS204で取得した2以上の画像処理フィルタ識別子を検出する。この処理の詳細は,図4のフローチャートを用いて説明する。
(ステップS206)画像処理フィルタ検出部15は、ステップS205で検出した2以上の画像処理フィルタ識別子で識別される画像処理フィルタのうち、統合可能である2以上の画像処理フィルタを決定する。この処理の詳細は、図5のフローチャートを用いて説明する。
(ステップS207)画像処理フィルタ統合部16は、ステップS206で決定した統合可能である2以上の画像処理フィルタを統合し、統合画像処理フィルタを生成する。この処理の詳細は、図6のフローチャートを用いて説明する。
(ステップS208)変更部17は、ステップS203で取得したプログラムが有する画像処理フィルタ識別子であって、ステップS204で検出した画像処理フィルタ識別子を、ステップS207で生成した統合画像処理フィルタを識別する統合画像処理フィルタ識別子で置換し、置換後のプログラムである変更プログラムを取得する。そして、ステップS201に戻る。
なお、図2のフローチャートにおいて、電源オフや処理終了の割り込みにより処理を終了してもよい。
図3は、図2のフローチャートのステップS204の画像処理フィルタ識別子の取得処理を示すフローチャートである。
(ステップS301)画像処理フィルタ検出部15は、画像処理フィルタ格納部12に格納されている画像処理フィルタ識別子を取得する。ここで、n個の画像処理フィルタ識別子が取得できたものとする。
(ステップS302)画像処理フィルタ検出部15は、変数c1に0をセットする。
(ステップS303)画像処理フィルタ検出部15は、カウンタiに1をセットする。
(ステップS304)画像処理フィルタ検出部15は、画像処理フィルタ[i]に対応する統合可否情報が、統合可能であることを示すか否かを判断する。統合可能であることを示す場合は、ステップS305に進み、そうでない場合は、ステップS308に進む。
(ステップS305)画像処理フィルタ検出部15は、画像処理フィルタ[i]に対応する属性情報が、属性条件を満たすか否かを判断する。満たす場合は、ステップS306に進み、そうでない場合は、ステップS308に進む。
(ステップS306)画像処理フィルタ検出部15は、c1を1インクリメントする。
(ステップS307)画像処理フィルタ検出部15は、インデックス番号を格納するindex1[c1]にiをセットする。
(ステップS308)画像処理フィルタ検出部15は、iがnであるか否かを判断する。nである場合は、上位処理にリターンし、そうでない場合は、ステップS309に進む。
(ステップS309)画像処理フィルタ検出部15は、iを1インクリメントし、ステップS304に戻る。
図4は、図2のフローチャートのステップS205の画像処理フィルタ識別子の検出処理を示すフローチャートである。
(ステップS401)画像処理フィルタ検出部15は、変数c2に0をセットする。
(ステップS402)画像処理フィルタ検出部15は、カウンタiに1をセットする。
(ステップS403)画像処理フィルタ検出部15は、カウンタjに1をセットする。
(ステップS404)画像処理フィルタ検出部15は、変数mにindex1[j]をセットする。
(ステップS405)画像処理フィルタ検出部15は、ステップS203で取得したプログラムのi行目が、画像処理フィルタ識別子[m]に一致するか否かを判断する。一致する場合は、ステップS306に進み、そうでない場合は、ステップS309に進む。
(ステップS406)画像処理フィルタ検出部15は、c2を1インクリメントする。
(ステップS407)画像処理フィルタ検出部15は、インデックス番号を格納するindex2[c2]にmをセットする。
(ステップS408)画像処理フィルタ検出部15は、行番号を格納するline2[c2]にiをセットする。
(ステップS409)画像処理フィルタ検出部15は、jがc1であるか否かを判断する。c1である場合は、ステップS411に進み、そうでない場合は、ステップS410に進む。
(ステップS410)画像処理フィルタ検出部15は、jを1インクリメントし、ステップS404に戻る。
(ステップS411)画像処理フィルタ検出部15は、iがmであるか否かを判断する。mである場合は、上位処理にリターンし、そうでない場合は、ステップS412に進む。
(ステップS412)画像処理フィルタ検出部15は、iを1インクリメントし、ステップS403に戻る。
図5は、図2のフローチャートのステップS206の統合可能な画像処理フィルタの決定処理を示すフローチャートである。
(ステップS501)画像処理フィルタ検出部15は、変数c3に0をセットする。
(ステップS502)画像処理フィルタ検出部15は、カウンタiに1をセットする。
(ステップS503)画像処理フィルタ検出部15は、カウンタjにi+1をセットする。
(ステップS504)画像処理フィルタ検出部15は、変数index21に、インデックス番号が格納されているindex2[i]をセットする。
(ステップS505)画像処理フィルタ検出部15は、変数index22に、インデックス番号が格納されているindex2[j]をセットする。
(ステップS506)画像処理フィルタ検出部15は、画像処理フィルタ[index21]と、画像処理フィルタ[index22]とが連続しているか否かを判断する。連続している場合は、ステップS507に進み、そうでない場合は、ステップS509に進む。
(ステップS507)画像処理フィルタ検出部15は、c3を1インクリメントする。
(ステップS508)画像処理フィルタ検出部15は、統合する画像処理フィルタのペアのインデックス番号を格納するpair[c3]に、index21、index22、line2[i]をセットする。
(ステップS509)画像処理フィルタ検出部15は、jがc2であるか否かを判断する。c2である場合は、ステップS511に進み、そうでない場合は、ステップS510に進む。
(ステップS510)画像処理フィルタ検出部15は、jを1インクリメントし、ステップS504に戻る。
(ステップS511)画像処理フィルタ検出部15は、iがc2−1であるか否かを判断する。c2−1である場合は、上位処理にリターンし、そうでない場合は、ステップS512に進む。
(ステップS512)画像処理フィルタ検出部15は、iを1インクリメントし、ステップS503に戻る。
なお、図5のフローチャートにおいて、統合可能な2以上の画像処理フィルタを決定してもよい。
図6は、図2のフローチャートのステップS207の統合画像処理フィルタの生成処理を示すフローチャートである。
(ステップS601)画像処理フィルタ統合部16は、カウンタiに1をセットする。
(ステップS602)画像処理フィルタ統合部16は、変数index31に、統合する画像処理フィルタのペアのインデックス番号が格納されているpair[i]が有するindex21をセットする。
(ステップS603)画像処理フィルタ統合部16は、変数index32に、統合する画像処理フィルタのペアのインデックス番号が格納されているpair[i]が有するindex22をセットする。
(ステップS604)画像処理フィルタ統合部16は、統合画像処理フィルタ[c3]に、画像処理フィルタ[index31]と、画像処理フィルタ[index32]とを統合したものをセットする。
(ステップS605)画像処理フィルタ統合部16は、統合画像処理フィルタ識別子[c3]に、画像処理フィルタ識別子[index31]と、画像処理フィルタ識別子[index32]とを連結したものをセットする。
(ステップS606)画像処理フィルタ統合部16は、iがc3であるか否かを判断する。c3である場合は、上位処理にリターンし、そうでない場合は、ステップS607に進む。
(ステップS607)画像処理フィルタ統合部16は、iを1インクリメントし、ステップS602に戻る。
(具体例)
次に、画像処理フィルタ統合装置1の動作の具体例について説明する。なお、本具体例において、プログラム格納部11には、図7、および図8に示すプログラムが格納されているものとする。図7のプログラムは、プログラム識別子であるファイル名「program01.c」を有する。また、図8のプログラムは、プログラム識別子であるファイル名「program02.c」を有する。
また、以下の(例1)においては、画像処理フィルタ格納部12には、図9に示す画像処理フィルタ管理情報が格納されているものとする。当該画像処理フィルタ管理情報は、各レコードを一意に特定するためのIDと、画像処理フィルタ識別子(項目名:識別子)と、画像処理フィルタ(項目名:フィルタ)と、統合可否情報とを有する。なお、画像処理フィルタ(項目名:フィルタ)は、当該画像処理フィルタであるプログラムのプログラム識別子である。また、当該プログラムは、画像処理フィルタ格納部12に格納されているものとする。
また、以下の(例2)においては、画像処理フィルタ格納部12には、図9の画像処理フィルタ管理情報に加え、図10に示す統合可能画像処理フィルタ管理情報が格納されているものとする。当該統合可能画像処理フィルタ管理情報は、各レコードを一意に特定するためのIDと、画像処理フィルタ識別子(項目名:識別子)と、当該画像処理フィルタ識別子で識別される画像処理フィルタのうちのいずれか2つが、統合可能であることを示す情報(図中の「○」)を有する。また、図10の各レコードは、図9の各レコードと対応しているものとする。
(例1)
まず、ユーザが、プログラム中の画像処理フィルタによる処理を統合するために、ファイル名が「program01.c」であるプログラムのアイコンを、画像処理フィルタ統合装置1の上にドラッグ&ドロップしたとする。すると、受付部13は、当該プログラムを識別するプログラム識別子「program01.c」を有する指示を受け付ける。
次に、プログラム取得部14は、受付部13が受け付けたプログラム識別子「program01.c」で識別される図7に示すプログラムを、プログラム格納部11から取得する。
次に、画像処理フィルタ検出部15は、図7のプログラムから、図9の画像処理フィルタ管理情報が有する画像処理フィルタ識別子に一致する画像処理フィルタ識別子を検出する。このとき、画像処理フィルタ検出部15は、図9の画像処理フィルタ識別子のうち、画像処理フィルタに対応する統合可否情報が、統合可能であることを示す画像処理フィルタ識別子を検出する。また、画像処理フィルタ検出部15は、当該統合可能である画像処理フィルタを識別する画像処理フィルタ識別子であって、図7のプログラムにおいて連続する画像処理フィルタ識別子を検出する。
図9において、統合可否情報により統合可能であることが示される画像処理フィルタ識別子は、「ID=013」、「ID=014」、「ID=033」、「ID=034」である。画像処理フィルタ検出部15は、これらの画像処理フィルタ識別子を、図7のプログラムから検出し、図7の10行目から12行目までにおいて、図9の「ID=013」、「ID=033」の画像処理フィルタ識別子を、一時的に検出する。
次に、画像処理フィルタ検出部15は、図9の「ID=013」、「ID=033」の画像処理フィルタが、図7のプログラムにおいて連続しているか否かを判断する。図7の11行目において、画像処理フィルタ「EdgeFilter_S」の出力と、画像処理フィルタ「EdgeFilter_H」の入力とを接続する命令が記述されている。従って、画像処理フィルタ検出部15は、図9の「ID=013」と「ID=033」の画像処理フィルタは、図7のプログラムにおいて連続していると判断する。そして、画像処理フィルタ検出部15は、統合可能である画像処理フィルタを識別する画像処理フィルタ識別子として、図7の10行目から12行目までにおいて、図9の「ID=013」、「ID=033」の画像処理フィルタ識別子を検出する。
次に、画像処理フィルタ統合部16は、図9の「ID=013」、「ID=033」の画像処理フィルタを統合し、統合画像処理フィルタと、統合画像処理フィルタ識別子を生成する。ここで、画像処理フィルタ統合部16は、図9の「ID=013」の画像処理フィルタであるプログラムと、「ID=033」の画像処理フィルタであるプログラムとを結合し、統合画像処理フィルタであるプログラムを生成したものとする。また、画像処理フィルタ統合部16は、図9の「ID=013」の画像処理フィルタ識別子と、「ID=033」の画像処理フィルタ識別子との共通部分である「EdgeFilter」を、統合画像処理フィルタ識別子として生成したものとする。
次に、変更部17は、図7の10行目から12行目を、画像処理フィルタ統合部16が生成した統合画像処理フィルタ識別子「EdgeFilter」で変更する。このとき、変更部17は、図7の10行目について、「EdgeFilter_S」を「EdgeFilter」に置換する。また、変更部17は、図7の12行目について、「EdgeFilter_H」を「EdgeFilter」に置換する。そして、変更部17は、図7の11行目を削除する。この結果、変更部17は、図11に示す変更プログラムを取得する。
(例2)
まず、ユーザが、(例1)と同様の操作を行い、プログラム取得部14は、プログラム識別子「program02.c」で識別される図8に示すプログラムを、プログラム格納部11から取得したとする。
次に、画像処理フィルタ検出部15は、図8のプログラムから、図10の統合可能画像処理フィルタ管理情報が有する画像処理フィルタ識別子に一致する画像処理フィルタ識別子を検出する。このとき、画像処理フィルタ検出部15は、図10の画像処理フィルタ識別子のうち、他の画像処理フィルタと統合可能であることが示される画像処理フィルタ識別子を検出する。また、画像処理フィルタ検出部15は、当該統合可能である画像処理フィルタを識別する画像処理フィルタ識別子であって、図8のプログラムにおいて連続する画像処理フィルタ識別子を検出する。
図10において、他の画像処理フィルタと統合可能であることが示される画像処理フィルタ識別子は、「ID=013」、「ID=014」、「ID=015」、「ID=033」、「ID=034」、「ID=035」である。画像処理フィルタ検出部15は、これらの画像処理フィルタ識別子を、図8のプログラムから検出し、図8の11行目、12行目において、図10の「ID=033」の画像処理フィルタ識別子を、一時的に検出する。
次に、画像処理フィルタ検出部15は、図10の「ID=033」の画像処理フィルタ識別子で識別される図9の「ID=033」画像処理フィルタが、図8のプログラムにおいて連続しているか否かを判断する。図8の11行目において、画像処理フィルタ「EdgeFilter_H」の出力である「Img_b」が、図8の12行目において、画像処理フィルタ「EdgeFilter_H」の入力となっている。従って、画像処理フィルタ検出部15は、図9の「ID=033」の画像処理フィルタは、図8のプログラムにおいて連続していると判断する。そして、画像処理フィルタ検出部15は、統合可能である画像処理フィルタを識別する画像処理フィルタ識別子として、図8の11行目、12行目において、図10の「ID=033」の画像処理フィルタ識別子を検出する。
次に、画像処理フィルタ統合部16は、図9の「ID=033」の画像処理フィルタ同士を統合し、統合画像処理フィルタと、統合画像処理フィルタ識別子を生成する。ここで、画像処理フィルタ統合部16は、図9の「ID=033」の画像処理フィルタであるプログラム同士を結合し、統合画像処理フィルタであるプログラムを生成したものとする。また、画像処理フィルタ統合部16は、図9の「ID=033」の画像処理フィルタ識別子の一部分である「EdgeFilter」を、統合画像処理フィルタ識別子として生成したものとする。
次に、変更部17は、図8の11行目、12行目を、画像処理フィルタ統合部16が生成した統合画像処理フィルタ識別子「EdgeFilter」で変更する。このとき、変更部17は、図8の11行目について、「EdgeFilter_H」を「EdgeFilter」に置換する。そして、変更部17は、図8の12行目について、「EdgeFilter_H」の出力である「Img_c」を取得する。そして、変更部17は、図8の11行目について、「Img_b」を取得した「Img_c」で置換する。そして、変更部17は、図8の12行目を削除する。この結果、変更部17は、図12に示す変更プログラムを取得する。
なお、本具体例において、画像処理フィルタ格納部12に、画像処理フィルタ管理情報(統合可否情報)が格納されている例を示したが、画像処理フィルタ格納部12には、画像処理フィルタ管理情報(統合可否情報)は格納されていなくてもよい。
また、本具体例において、画像処理フィルタ格納部12に、図10に示す統合可能画像処理フィルタ管理情報が格納されている例を示したが、統合可能画像処理フィルタ管理情報は、当該形式および内容に限定されるものではない。
以上、本実施の形態による画像処理フィルタ統合装置1によれば、2以上の画像処理フィルタを統合することができる。
また、本実施の形態による画像処理フィルタ統合装置1によれば、統合可否情報により統合可能であることが示される2以上の画像処理フィルタを統合することができる。
また、本実施の形態による画像処理フィルタ統合装置1によれば、属性条件を満たす2以上の画像処理フィルタを統合することができる。
また、本実施の形態による画像処理フィルタ統合装置1によれば、属性情報が同一である2以上の画像処理フィルタを統合することができる。
また、本実施の形態による画像処理フィルタ統合装置1によれば、連続し、かつ属性条件を満たす2以上の画像処理フィルタを統合することができる。
また、本実施の形態による画像処理フィルタ統合装置1によれば、連続する2以上の画像処理フィルタを統合することができる。
また、本実施の形態による画像処理フィルタ統合装置1によれば、統合可能な画像処理フィルタの組み合わせを検出し、当該画像処理フィルタを統合することができる。
また、本実施の形態による画像処理フィルタ統合装置1によれば、一の画像に対して画像処理フィルタを適用する回数を減らすことができる。
また、上記各実施の形態において、一の装置に存在する2以上の通信手段は、物理的に一の媒体で実現されてもよいことは言うまでもない。
また、上記各実施の形態における画像処理フィルタ統合装置は、例えば、スタンドアロンの装置であってもよいし、サーバ・クライアントシステムにおけるサーバ装置であってもよい。後者の場合には、例えば、ASP(Application Service Provider)として画像処理フィルタの統合が行われてもよい。
また、上記各実施の形態において、各処理または各機能は、単一の装置または単一のシステムによって集中処理されることによって実現されてもよいし、あるいは、複数の装置または複数のシステムによって分散処理されることによって実現されてもよい。
また、上記各実施の形態において、各構成要素は専用のハードウェアにより構成されてもよいし、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをCPU等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。
また、上記各実施の形態における画像処理フィルタ統合装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、記録媒体に、プログラムを識別するプログラム識別子と、画像処理フィルタを識別する2以上の画像処理フィルタ識別子を有する1以上のプログラムと、1以上の画像処理フィルタと、当該画像処理フィルタを識別する画像処理フィルタ識別子とが格納されており、コンピュータを、1以上のプログラム識別子を有する指示を受け付ける受付部と、前記指示に含まれる1以上のプログラム識別子で識別されるプログラムを、前記プログラム格納部から取得するプログラム取得部と、統合可能である2以上の画像処理フィルタ識別子を、前記プログラム取得部が取得した1以上のプログラムから検出する画像処理フィルタ検出部と、
前記画像処理フィルタ検出部が検出した2以上の画像処理フィルタ識別子で識別される画像処理フィルタを統合し、統合した画像処理フィルタである統合画像処理フィルタと、当該統合画像処理フィルタを識別する統合画像処理フィルタ識別子とを生成する画像処理フィルタ統合部と、前記画像処理フィルタ検出部が検出した2以上の画像処理フィルタ識別子を、前記統合画像処理フィルタ識別子で置換し、当該置換後のプログラムである変更プログラムを取得する変更部として機能させるためのプログラムである。
なお、上記プログラムにおいて、情報を送信する送信ステップや、情報を受信する受信ステップなどでは、ハードウェアでしか行われない処理、例えば、送信ステップにおけるモデムやインターフェースカードなどで行われる処理は少なくとも含まれない。
また、上記プログラムは、サーバなどからダウンロードされることによって実行されてもよいし、所定の記録媒体(例えば、CD−ROMなどの光ディスクや磁気ディスク、半導体メモリなど)に記録されたプログラムが読み出されることによって実行されてもよい。また、このプログラムは、プログラムプロダクトを構成するプログラムとして用いられてもよい。
また、上記プログラムを実行するコンピュータは、単数であってもよいし、複数であってもよい。つまり、集中処理を行ってもよいし、あるいは分散処理を行ってもよい。
また、図13は、前述のプログラムを実行して、前述の実施の形態の画像処理フィルタ統合装置等を実現するコンピュータシステム9の概観図である。前述の実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムで実現され得る。
図13において、コンピュータシステム9は、CD−ROM(Compact Disk Read Only Memory)ドライブ9011、FD(Flexible Disk)ドライブ9012を含むコンピュータ901と、キーボード902と、マウス903と、モニタ904とを備える。
図14は、コンピュータシステム9のブロック図である。図14において、コンピュータ901は、CD−ROMドライブ9011、FDドライブ9012に加えて、CPU(Central Processing Unit)9013と、ブートアッププログラム等のプログラムを記憶するためのROM(Read−Only Memory)9014と、CPU9013に接続され、アプリケーションプログラムの命令を一時的に記憶するとともに一時記憶空間を提供するためのRAM(Random Access Memory)9015と、アプリケーションプログラム、システムプログラム、及びデータを記憶するためのハードディスク9016と、CD−ROMドライブ9011、FDドライブ9012、CPU9013等を相互に接続するバス9017とを備える。ここでは図示しないが、コンピュータ901は、さらに、LANへの接続を提供するネットワークカードを備えていてもよい。
コンピュータシステム9に、前述の実施の形態の画像処理フィルタ統合装置等の機能を実行させるプログラムは、CD−ROM9101、またはFD9102に記憶されて、CD−ROMドライブ9011またはFDドライブ9012に挿入され、さらにハードディスク9016に転送されてもよい。これに代えて、プログラムは、図示しないネットワークを介してコンピュータ901に送信され、ハードディスク9016に記憶されてもよい。プログラムは実行の際にRAM9015にロードされる。プログラムは、CD−ROM9101、FD9102またはネットワークから直接、ロードされてもよい。
プログラムは、コンピュータ901に、前述の実施の形態の画像処理フィルタ統合装置等の機能を実行させるオペレーティングシステム(OS)、またはサードパーティープログラム等は、必ずしも含まなくてもよい。プログラムは、制御された態様で適切な機能(モジュール)を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいればよい。コンピュータシステム9がどのように動作するかは周知であり、詳細な説明は省略する。
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。