====================================================================== -- FastDT100 -- 距離変換を用いた画像フィルタ(距離変換 及び モルフォロジー演算) デモソフト Ver.1.00 2000/ 3/20 ====================================================================== このプログラムは白黒2値画像を入力として、距離変換及びモルフォロジー 演算を行うことができます。 ===== 環 境 ===== 開発環境 -------- VisualC++6.0 & VisualStudio & Windows95 必要環境 -------- VisualC のインストールされた Windows. 動作確認済環境 -------------- Windows95(VisualC++6.0 インストール済), Windows98(VisualC++6.0 インストール済) ======== 使用方法 ======== インストール ------------ FastDT***.lzh を適当な場所に解凍して下さい。 実行ファイル 及び サンプル画像のはいった 距離変換デモ という ディレクトリが解凍されます。 実行方法 ------------------ 解凍されたディレクトリ内の FastDT***.exe を実行して下さい。 説明 ---- このプログラムは大きくわけて3種類の処理を行います。 《距離変換》 《距離変換を用いたモルフォロジー演算》 《フィルタ画像を用いたモルフォロジー演算》 の3種類です。 以下でそれぞれの操作方法を説明します。 またその他の操作方法及び使用上の注意点をその後に説明します。 ///////////////////////////////////////////////////////////// ●《距離変換》 入力画像に対して各画素から最も近い白画素までの距離を計算し、 その結果を濃淡画像として表示します。 ただし距離値15以上は全て黒色で表現するため、出力される濃淡 画像は16色画像となります。 手順1:入力画像を選択します。 「入出力管理」メニューからサンプル取りこみメニューを 実行するか、「入力画像取りこみ」を選択して、直接ファ イルを選択して下さい。 手順2:距離変換を実行します。 「距離変換」メニューを選択するとダイアログが開きます ので、そこで細かい処理の設定を行って下さい。 ・アルゴリズム 3種類選択可能で、それぞれ処理速度が異なります。 ・距離関数 Euclid距離、CityBlock距離、Chessboard距離の中から どれか選択して下さい。 ・処理時間計測の有無 処理時間計測有りにすると演算過程は描画しません。 ///////////////////////////////////////////////////////////// ●《距離変換を用いたモルフォロジー演算》 手順1:入力画像を選択します。 「入出力管理」メニューから「入力画像サンプル」メニュー を実行するか、「入力画像取りこみ」を選択して直接ファイ ルを選択して下さい。 手順2:モルフォロジー演算を実行します。 「モルフォロジー演算」−「距離変換を用いた……」を選 択するとダイアログが開きますので、そこで細かい処理の 設定を行って下さい。 ・処理種別 どのモルフォロジー演算を行うかを選択します。 Dilation,Erosion,Opening,Closing が選択可能です。 ・フィルタ形状 円、ダイヤモンド型、正方形、三角形が選択可能です。 ・フィルタサイズ フィルタの大きさを表す数値です。 円の場合は半径、ダイヤモンド型の場合は中心から頂点 までの長さ、正方形は中心から辺までの長さ、三角形の 場合は底辺中心から底辺端点までの長さとなります。 ・処理時間計測の有無 処理時間計測有りにすると演算過程は描画しません。 手順3:演算終了後続けて別の処理を行う場合は、 先の演算結果が次の演算の入力となります。 ///////////////////////////////////////////////////////////// ●《フィルタ画像を用いたモルフォロジー演算》 手順1:入力画像を選択します。 「入出力管理」メニューからサンプル取りこみメニューを 実行するか、「入力画像取りこみ」を選択して、直接ファ イルを選択して下さい。 手順2:フィルタ画像を選択します。 「モルフォロジー演算」−「フィルタ画像取りこみ」を 実行し、直接ファイルを指定して下さい。 なおフィルタ原点は画像の中心とします。 フィルタが入力画像に重ねて描画されますが、 入力画像データ自体には影響はありません。 手順3:モルフォロジー演算を実行します。 「モルフォロジー演算」−「フィルタ画像を用いた…」を 選択して開くダイアログで、細かい処理の設定を行って下 さい。 ・フィルタ画像ファイル名 先に選択されたフィルタ画像ファイル名を表示します。 ここでは編集できません。 ・処理種別 どのモルフォロジー演算を行うかを選択します。 Dilation,Erosion,Opening,Closing が選択可能です。 ・アルゴリズム モルフォロジー演算を計算するアルゴリズムを選択しま す。選べるのは2種類です。 ・処理時間計測の有無 処理時間計測有りにすると演算過程は描画しません。 手順4:演算終了後続けて別の処理を行う場合は、 先の演算結果が次の演算の入力となります。 ///////////////////////////////////////////////////////////// ●《その他》 ・入力画像の別ウインドウ表示 メインのウインドウとは別にひとつ子ウインドウを開きます。 ただしモルフォロジー演算を行うとその出力を即座に次の入力と して認識してしまうため、入力と結果を見比べたい場合は、演算 前に子ウインドウを開いて下さい。 ・画像保存 演算結果を名前を付けて保存します。XPM形式です。 ただし距離変換の結果を保存すると単なる16色濃淡画像になる為 距離変換出力としての意味合いはなくなります。 ・画面クリア ウインドウ内の表示をクリアします。 マウスの右クリックでも同様の効果があります。 ・三角形フィルタの編集 動かせるのは底辺端点以外の頂点ひとつのみです。 マウスで頂点をドラッグして形状を編集して下さい。 ///////////////////////////////////////////////////////////// ●《注意点、現在の仕様》 まだまだ改良の必要のあるソフトウェアのため、 現在は以下のような制約が発生しています。ご了承下さい。 ・入出力ファイルは実行ファイルと同じディレクトリ内のもののみ 利用可能です。 ・画像形式はXPM形式のみ対応しています。 他の形式からXPMへの変換は別のソフトウェアで行って下さい。 UNIXの場合はXVが使えますが、Windowsの場合はXPMに対応してい るソフトウェアは極めて少ないのが現状です……。 ・距離変換を用いたモルフォロジー演算及び、1次元分解距離変換 によるフィルタ画像を用いたモルフォロジー演算の場合、入力画 像の端の方に白画素があると正しく結果が演算できないことがあ ります。 ・フィルタ画像は全て画像の中心をフィルタ原点として扱います。 ・フィルタ画像を用いたモルフォロジー演算を1次元分解距離変換 アルゴリズムを利用する場合には、仕様可能なフィルタ画像に制 限が発生します。 ひとつは「各列に必ずひとつは白画素があること」。 つまりフィルタ画像は画像幅を目一杯利用したものであること。 もうひとつは「各列に白画素の領域がひとかたまりのみであるこ と」。つまりV字型のようなフィルタ画像は利用できません。 入出力データの書式 ------------------ XPM形式の画像ファイルです。 XPMは以下のようなテキスト形式で記述されています。 次の例は「◆型フィルタ(05x05).xpm」です。 /* XPM */ static char *morphology[] = { /* width height num_colors chars_per_pixel */ " 5 5 2 1", ". c #000000", "# c #ffffff", "..#..", ".###.", "#####", ".###.", "..#..", }; 本ソフトウェアで入力画像及びフィルタ画像として扱える画像は 白(ffffff)黒(000000)の2値画像でかつ、 ひとつの色がひとつの文字で定義されているものに限定します。 画像を保存する場合の形式もこれに準じます。 ただし距離変換結果を保存した場合のみ16色画像となります。 サンプルデータ -------------- 入力画像サンプルとしては次のものを準備しました。 sample160.xpm sample320.xpm sample640.xpm sample1280.xpm square.xpm sample*** の画像は私(櫻井)が自分で作成したもので、 様々な画像特徴をあわせもつものにしたつもりです。 *** 部分の数字は画像の横幅を表しています。 画像の縦幅は横幅の3/4になっています。 画像内容は全て同様のものを拡大縮小したものです。 画像の白黒比率は約 2:5 となっています。 square.xpm は単なる長方形を前景図形としてもつ画像です。 モルフォロジー演算や距離変換の結果が、フィルタ形状や 距離関数によって違いがわかりやすい例として採用しました。 フィルタ画像としては円形フィルタ、ダイヤモンド型フィルタ、 正方形フィルタのサイズ別のものを準備しました。 それぞれファイル名に●、◆、■が記述されています。 またファイル名 ●フィルタ(*x*).xpm の * はフィルタ画像のサイズを表しています。 ●フィルタ(25x25).xpm ならば、縦横25画素の円形フィルタということになります。 ==================== アルゴリズムについて ==================== 本ソフトウェアで使用しているアルゴリズムのうち、 説明を必要とするものは次のものであると思われます。 ・O(n^2)の距離変換アルゴリズム(UDTアルゴリズム) ・距離変換(UDT)を用いたモルフォロジー演算 ・1次元分解距離変換による フィルタ画像を用いたモルフォロジー演算 O(n^3)の距離変換アルゴリズムはUDTアルゴリズムの前身となる もので、アルゴリズムの大枠自体は全く同じです。 O(n^4)の距離変換、フィルタ画像を用いたモルフォロジー演算の 単純法は、それぞれ定義通りに演算を行う方法です。 ちなみに単純法によるモルフォロジー演算の時間計算量は、 フィルタ画像サイズを r×r としてO(n^2r^2)です。 肝心の3つのアルゴリズムについては、 別途、PS形式のファイルを用意してありますので、 そちらを御覧下さい。 またこれらアルゴリズムについての参考文献は以下です。 ・Tomio Hirata,"A unified linear-time algorithm for computing distance maps," Information Processing Letters 58(1996), pp.129-133. ・加藤敏洋, 平田富夫, 斉藤豊文, 吉瀬謙二,"ユークリッド距離変換 アルゴリズムの効率化," 電子情報通信学会論文誌, Vol.J78-DII, No.12(1995),pp.1750-1757. ・櫻井敦史, 平田富夫,"効率の良いモルフォロジー演算が可能な フィルタ形状について," 電子情報通信学会技術研究報告, COMP99-56(1999),pp.1-8. ======== 利用条件 ========  このプログラムは櫻井敦史が製作しました。プログラムの著作権を主張しま すが、以下の条件でご利用いただけます。 1)無料・無保証です。バグはないようにしたつもりですが、 一切の責任は負えません。各自の責任においてご使用下さい。 2)再配布は自由に行って下さい。 改造したものの配布は、製作者までご相談下さい。 3)商用利用の際は、事前に製作者までご相談下さい。 バグ等お気づきの点が御座いましたら下記までご連絡下さい。 連絡先 e-mail sakurai@hirata.nuee.nagoya-u.ac.jp 最新版配布場所 http://www.hirata.nuee.nagoya-u.ac.jp/~sakurai/AD/AD.html