Getting Started with IDL IDL Version 8.1 June 2011 Edition 目次 第 1 章 ......................................................................................................................... 1 はじめに ....................................................................................................................... 1 トレーニングデータについて .................................................................................... 4 マニュアルについて .................................................................................................. 4 その他リソース ......................................................................................................... 5 Exelis VIS 株式会社へのお問い合わせ...................................................................... 6 第 2 章 ......................................................................................................................... 7 IDL の基本 ................................................................................................................... 7 IDL ワークベンチの概要 ........................................................................................... 8 ワークベンチの補助機能 ......................................................................................... 10 環境設定 .................................................................................................................. 12 IDL のグラフィックシステムについて .................................................................... 12 第 3 章 ....................................................................................................................... 15 クイックスタート ....................................................................................................... 15 第 4 章 ....................................................................................................................... 21 ファイル操作 .............................................................................................................. 21 ファイルパスの指定方法 ......................................................................................... 22 標準ファイルタイプ ................................................................................................ 22 ASCII データおよびバイナリデータの操作............................................................. 25 第 5 章 ....................................................................................................................... 29 IDL の表示機能 .......................................................................................................... 29 2 次元プロットを作成する ...................................................................................... 30 新しいグラフィックスによるプロット .................................................................... 32 サーフェスとコンタ ................................................................................................ 33 サーフェスを表示する ............................................................................................. 33 新しいグラフィックスによるサーフェスの表示 ...................................................... 34 コンタを表示する .................................................................................................... 36 新しいグラフィックスによるコンタの表示 ............................................................. 38 画像の操作 .............................................................................................................. 41 IDL と画像 .............................................................................................................. 41 画像を表示する ....................................................................................................... 41 第 6 章 ....................................................................................................................... 51 マッピング.................................................................................................................. 51 IDL とマッピング ................................................................................................... 52 シンプルなマップのプロット .................................................................................. 52 部分的なプロット .................................................................................................... 53 地図上への画像のワーピング .................................................................................. 54 地図にベクトルデータを表示 .................................................................................. 55 第 7 章 ....................................................................................................................... 59 IDL でのプログラミング ............................................................................................ 59 IDL でのプログラミングについて .......................................................................... 60 IDL のプログラミングタイプ ................................................................................. 61 簡単な IDL プログラムの実行 ................................................................................. 65 IDL プログラムのコンパイルと実行 ....................................................................... 67 ブレークポイントとデバッグ .................................................................................. 68 Appendix A: ............................................................................................................... 71 PostScript での画像の書き出し .............................................................................. 71 Appendix B: ............................................................................................................... 74 FITS について ......................................................................................................... 74 第 1 章 はじめに Interactive Data Language(IDL) はデータ解析、可視化、クロスプラットフォーム対応アプリ ケーションの開発に適したソフトウェアです。 IDL は、飛躍的な柔軟性を持つ多数の数学的解 析機能とグラフィック表示機能を備えた強力な配列指向型言語です。 対話型解析 IDL は、Java、FORTRAN、または C の コマンドを数百行実行するのと同じ操作 を柔軟性やパフォーマンスを損なうこと なく数行で行なうことができます。 従来 の言語では数日あるいは数週間を要して いたプログラム作成を、数時間で行うこと ができます。 IDL コマンドを対話的に使 用しながらデータを調べ、IDL プログラム を記述することによって完全なアプリケ ーションを作成することができます。 1 データ解析と信号処理 IDL は、シンプルな ASCII 形式から HDF、CDF、 および NetCDF などの構造化されたデータ形式、 さらに JPEG2000 のような最新の画像形式まで さまざまなファイル形式のデータを読み込むこ とができます。 不規則サンプルデータから規則 グリッドデータを求めることができます。また、 従来のフィルタリングと変換演算から予測解析 などの統計手法の技術まで、IDL 信号処理ルーチ ンを使用して、信号を抽出および解析を行います。 IDL のパワフルなグラフィカル可視化ツー ルを使用すれば、2 次元または 3 次元画像で解析結果を表示することができます。 画像処理と表示 IDL では、コマンドを 1 つ入力すれば、一 般的に使用されているほとんどの画像ファ イルを読み込むことができます。 画像デー タを IDL にインポートして、 ノイズの除去、 異常部分の摘出、および実データの特質抽出 などの様々な画像処理を行うことができま す。 出版できる品質の完全注釈付き画像を 作成することができます。 データと地図を結合する データから地図情報を抽出するために、サンプルデー タを地図上に重ね合わせます。 地図投影図法と座標を 変更して地理的な情報をデータと融合して解析を行う ことが可能です。 2 迅速なアプリケーション開発 IDL ワークベンチのパワフルなコ ード開発ツールとデバッグツールを 使用すると、IDL 言語で短時間に複 雑なアプリケーションを作成するこ とができます。 コードを他の IDL ユーザーに配布、または自由に利用 可能な IDL バーチャルマシンに対 応したコンパイル・バージョンを提 供することもできます。 ユーザーインターフェースのツールキット IDL ユーザーインターフェースツー ルキットを使用すると、IDL のグラ フィカルユーザーインターフェース を短時間に開発することができます。 IDL の組み込みウィジットを使用す れば、簡単なインターフェースは数行 のコードで作成でき、iTools のフレ ームワークを使用すれば、他の言語で 同じようなインターフェースを作成 する時間よりはるかに短い時間で複 雑な対話型アプリケーションを作成 することができます。 3 トレーニングデータについて 本手順書で使用されるデータは全てインストールフォルダのサンプルデータを使用しています。 サンプルデータへのアクセスは以下の IDL デフォルトインストールフォルダパスを参考にして ください。 Windows C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data LINUX /usr/local/itt/idl/idlxx/examples/data MAC /Applications/itt/idl/idlxx/examples/data マニュアルについて このマニュアルは、基本的な IDL の概念とテクニックを「実践的に」学ぶことができるように 作成されています。 Getting Started with IDL では 多数の一般的に使用される IDL アプリケ ーションを明示して、それぞれのセクションで基本的な IDL の概念を紹介し、一般的に使用さ れる IDL コマンドをいくつか取り上げています。 各章はチュートリアルのように使用することができ、特定の IDL 機能について説明します。 ほ とんどのコマンドは前のコマンドを引き継いでいるので、各章を順番にさっと目を通すことをお 勧めします。 各章では、IDL の最も基本的なことに関して説明しています。 例題コードに関する注記 各章に書かれている全てを読む必要はありません。 courier フォントタイプで表記されてい る IDL コマンドを、IDL コマンドライン(「IDL>」プロンプト)に入力し、結果を確認する だけで良いのです。 特に明示されていない限り、表示されている各行はすべて IDL コマンド です(各コマンドを入力後、リターンキーを押してください)。 特定コマンドに関する詳細は、説明を読むか、ワークベンチでヘルプ→ヘルプ目次を選択して IDL オンラインヘルプシステムを参照してください。 4 ヒント 行の最後にあるドル記号($) は IDL の継続文字です。 複数行にわたる長い IDL コマンド を入力することができます。 その他リソース このマニュアルには、IDL がデータ解析、可視化、およびクロスプラットフォームの開発タス クを高速化することができるさまざまな方法を提供する例題が用意されています。 以下は、IDL に関して継続して学習するのに役に立つその他リソースです。 IDL ドキュメント IDL ドキュメントセットは、IDL と一緒にハイパーテキスト形式でインストールされます。 ド キュメントを表示するには、IDL> プロンプトに「?」を入力するか、 IDL ワークベンチのヘ ルプメニューからヘルプ目次を選択してください。 IDL のオンラインヘルプシステム全体にはハイパーリンクとインデックスが付けられており、 パワフルな全文検索機能があります。 オンラインヘルプシステムの使用に関する詳細は、10 ペ ージの「ワークベンチの補助機能」と IDL オンラインヘルプシステムの IDL Help を参照して ください。 IDL ニュースグループ IDL ニュースグループは IDL ユーザーのためのフォーラムで、IDL の問題や解決策について 討論することができます。以下の URL にアクセスし、閲覧したり討論に参加したりすることが できます。 http://groups.google.com/group/comp.lang.idl-pvwave IDL ユーザコミュニティ IDL ユーザコミュニティは当社ホームページ上に設けられており、ユーザー同士が問題の討議 や意見の交換が行えます。また、Code Library ではユーザーが作成したプログラムなどが公開 されています。 http://www.exelisvis.com/language/en-US/UserCommunity/CodeLibrar y.aspx 5 Exelis VIS 株式会社へのお問い合わせ Exelis VIS 株式会社では、IDL 及びその他の製品に関する技術サポート、お客様の IDL 使用 事例などの情報を提供しています。 お問い合わせ先 住所 Exelis VIS 株式会社 〒101-0064 東京都千代田区猿楽町 2-7-17 織本ビル 3 階 E-mail [email protected] ホームページ http://www.exelisvis.com テクニカル・サポート [email protected] 6 第 2 章 IDLの基本 この章では IDL ワークベンチと IDL グラフィックスについて説明します。 IDL ワークベンチの概要 .............................................................................................................. 8 ワークベンチの補助機能 ............................................................................................................. 10 環境設定 ...................................................................................................................................... 12 ダイレクトグラフィックス ......................................................................................................... 13 iTools ........................................................................................................................................... 13 新しいグラフィックシステム ...................................................................................................... 13 7 IDL ワークベンチの概要 IDL 8.1 はワークベンチと呼ばれるグラフィカルなインターフェースを搭載しています。このイ ンターフェースは IDL7.0 から IDL の開発環境(IDLDE)として搭載されており、高度なコード 管理、開発、およびデバッグツールを提供します。ワークベンチには Eclipse フレームワーク を使用しており、Eclipse はすべてのプラットフォームでネイティブアプリケーションとして表 示される拡張クロスプラットフォーム環境です。そういったことから、ワークベンチは全てのプ ラットフォームで同じ外観、及び操作性を提供しています。 IDL ワークベンチを構成する Eclipse 機能はフロントエンドに過ぎません。 データの解析と表 示に使用される IDL のパワフルな演算エンジンは変わらずにそのまま使用されています。 メニューバー ツールバー ツールバー プロジェクト・ プロジェク エクスプローラ ト・エクスプ ローラ エディタ 変数 アウトライン コンソール コマンド履歴 カレントディレクトリ 以下のセクションでは IDL ワークベンチコンポーネントについて説明します。 8 ワークベンチビュー メニューバー 機能 ファイルを開く、編集、コンパイル、IDL プログラムを実行な ど、その他ワークベンチの機能を操作します。 ツールバー メニューバーと同様の機能をグラフィカルなアイコンで提供 します。 プロジェクト・エクスプローラ ファイルシステム上の IDL のプログラム、データ、サポート ファイルディレクトリを表示しています。ファイル名をダブル クリックすることでファイルを開きます。 アウトライン ファイル内のプログラムのリストを表示します。プログラムを ダブルクリックし、エディタにソースを表示し、アウトライン を確認してください。 エディタ IDL プログラムを編集し、デバックするウィンドウです。各構 文が色分けされています。 変数 コンソールで入力された、または IDL のデバッグ時にストッ プされた際に使用されている変数値をリスト表示しています。 コンソール コマンドプロンプト機能: 「IDL>」の行にステートメントを入力することで、インタラ クティブに変数や動作の確認を行うことができます。 また、IDL アプリケーションのコンパイル、実行などのコマン ドもここから実行することができます。 コマンドプロンプト上で、カーソルキーの上向き矢印を押下す ることで、入力したコマンドの履歴を表示し、選択した履歴を そのまま実行することが可能です。 IDL ではコマンドの入力時に、大文字・小文字は区別しておら ず、IDL 内では全て大文字として認識し、実行されます。 コンソール機能: コマンドプロンプトで実行した内容のログが出力されます。コ ンパイル情報やアプリケーションの実行時のエラー確認を行 うことができます。 コマンド履歴 過去に入力したコマンドを確認することができます。また、こ のリストからコンソールへドラッグ&ドロップまたはダブル クリックすることで IDL ステートメントをそのまま実行する ことが可能です。 カレントディレクトリ 作業ディレクトリの指定を行います。隣にあるフォルダマーク をクリックすることで作業ディレクトリを変更することが可 能です。 9 ワークベンチの補助機能 IDL ワークベンチには、以下のユーザー補助機能があります。 • ホバーヘルプ • コンテンツアシスト • コンテキスト・センシティブ・ヘルプ • オンラインヘルプシステム ホバーヘルプ IDL ルーチンや変数の名前にマウスカーソルを置くと、ポップアップウィンドウ内にホバーヘ ルプが、表示されます。 ルーチンに対しては、ホバーヘルプは構文ドキュメントを表示します。 変数に対しては、ホバーヘルプは変数の現在の値を表示します( 変数が定義されているルーチン の実行が停止されている場合)。 コンテンツアシスト IDL ルーチン名全体やその名前の一部にマウスカーソルを置いて、Ctrl-Space を押すと、コン テンツアシスタントがポップアップウィンドウに表示されます。 コンテンツアシストウィンド ウでは、選択した文字列の文字ではじまるルーチン名のリストが表示されます。 コンテンツアシストウィンドウで項目を強調表示すると、そのルーチンの構文が表示されます。 項目を選択するとカーソルの場所にそれが挿入されます。 コンテキスト・センシティブ・ヘルプ IDL ワークベンチのインターフェースにおいて不明な箇所があった場合は、操作している場面 10 に応じたヘルプを呼び出すことができます。 デフォルトでは、これはヘルプ画面に、使用して いるビュー/ エディタ/ ダイアログに関する特定の情報と、さらに関連項目のリンクを表示しま す。 その状況に合ったヘルプを使用するには、分からないインターフェース部分をクリックして、ヘ ルプ→ ダイナミック・ヘルプを選択するか、F1 (Windows)、Shift+F1 (Linux と Solaris)、ま たは Help (Macintosh) を押します。 あるいは IDL ワークベンチのほとんどのダイアログの左 下隅にある? アイコンをクリックしてその状況に合ったヘルプを表示することもできます。 オンラインヘルプシステム 一般情報、プログラミング参照ガイド、チュートリアルなどに関する詳細情報は、IDL オンラ インヘルプシステムを参照してください。 オンラインヘルプシステムでは、ドキュメントの参 照、検索、ブックマーク、印刷を行なうことができます。 ヒント IDL オンラインヘルプシステムの使用に関する詳細は、IDL オンラインヘルプシステムの Using IDL Help を参照してください。 ヘルプビューかヘルプブラウザを使用してワークベンチヘルプシステムとやり取りすることが できます。 ビューとブラウザはそれぞれの操作で同じ情報を提供します。 ヘルプビュー ワークベンチ内のヘルプは、ヘルプビューに表示されます。ヘルプ→ ヘルプ目次を選択して、 メインメニューからビューを開きます。 ビューが開いて、関連項目や検索ページがそれぞれ表 示されます。 デフォルトでは、? の後に検索条件を IDL コマンドラインに入力すると、ヘル プビューにヘルプ項目を表示させることもできます。 詳しくは、IDL オンラインヘルプシステ ムの Help View Interface を参照してください。 ヘルプブラウザ もう1つの ブラウザアプリケーションでは、ヘルプブラウザにヘルプビューと同じ内容が表示 されます。 ヘルプ→ ヘルプ目次を選択してメインメニューからウィンドウを開きます。 ウィ ンドウが開いて最初に、製品マニュアルの目次が表示されます。リンクのいずれかをクリックす るとマニュアルのナビゲーションツリーが展開されます。 プラットフォームによっては、ヘル プブラウザをスタンドアロンアプリケーションか Web ブラウザのどちらかにすることができ ますが、それ以外のプラットフォームのヘルプブラウザは常に Web ブラウザになります。 詳 しくは、IDL オンラインヘルプシステムの Help Browser Interface を参照してください。 11 環境設定 IDL ワークベンチ( 例えば、エディ タの設定、構文の色、コードテンプ レート) に適用する環境設定は、設定 ダイアログで制御します。 IDL ワー クベンチの環境設定に関する詳細は、 IDL オンラインヘルプシステムの IDL Preferences を参照してくださ い。 設定ダイアログを表示するには、 IDL ワークベンチのウィンドウメニ ューから設定を選択してください。 IDL ワークベンチ環境設定は、見出 しの IDL の下に集められています。 また、設定ダイアログでは、IDL に特に関係のない機能の環境設定を変更することもできます。 これら環境設定には、特定のファイルタイプに関連する外部エディタや、ワークベンチやキーバ インディングの起動や終了時に実行するタスクなどが含まれます。 これら IDL に関係のない 環境設定は、IDL ワークベンチが構築される Eclipse フレームワークの部分です。 設定ダイアログのツリービューの一番上のフィルター入力フィールドを使用して、設定ダイアロ グの特定アイテムを検索することができます。 注 IDL ワークベンチ環境設定は、IDL ワークベンチを実行していて、IDL プログラムに関連し ない場合にのみ適用されます。 IDL がコードを実行する方法を制御する IDL システム環境設 定は、IDL 自身に設定されます。 詳しくは、IDL オンラインヘルプシステムの About IDL Preferences を参照してください。 IDL のグラフィックシステムについて IDL ではプロット、サーフェス、マップなどを表示するグラフィック機能が 3 つあります。分 類すると、一つがダイレクトグラフィックスともう一方がオブジェクトグラフィックスという 2 種類に分類できます。ダイレクトグラフィックスですが、これは IDL 本来のグラフィック機能 を指し、昨今開発されたグラフィック機能が、オブジェクトグラフィックスと呼ばれています。 12 どちらのグラフィックス機能も長所と短所がありますが、2 つのシステムの違いを簡潔に表現す ると、ダイレクトグラフィックスは単純なグラフィックス作成に適しているのに対して、オブジ ェクトグラフィックスは複雑なグラフィック作成に適しています。ダイレクトグラフィックスに よって簡単に操作することができるので、複雑なグラフィックを簡単に作成することができます。 オブジェクトグラフィックスに分類されたグラフィックス機能には、iTools と IDL8.0 からの新 しいグラフィックシステムがあります。以下へ各概要を記載いたします。 ダイレクトグラフィックス IDL 本来のグラフィック機能です。ダイレクトグラフィックスでは対話的な使用、またはプロ グラミングに適した単純なプロシージャインターフェースを使用します。画像や単純なグラフィ ックスをきわめて短時間で描画することができます。IDL のダイレクトグラフィックスシステ ム(PLOT、CONTOUR、または TV などの名前を持つルーチンの表示)には IDL コマンドライ ンに以下のコマンドを入力し、グラフィックス表示で最大 256 色が使用できるように設定する 必要があります。 IDL> DEVICE, RETAIN=2, DECOMPOSED=0 iTools オブジェクトグラフィックスに分類される iTools では、データを表示した後、表示画面のアイ コンやメニューをクリックするなどの操作が行えます。また、表示したオブジェクトをマウス操 作で回転させるなど、描画したデータを比較的自由に扱えることが特徴です。また、オブジェク トグラフィックスは本質的に 3D であり、全ての作業が 3 次元で行われているため複雑なグラフ ィックス作成に適しています。IDL8.0 から新しいグラフィックスシステムが登場しましたが、 その元となる技術です。 新しいグラフィックシステム IDL8.0 から登場した新しいグラフィックシステムです。視覚的にきれいなオブジェクトグラフ ィックとプログラミングが簡単なダイレクトグラフィックの利点を組み合わせた結果、言語とし ても扱いやすく、関数にキーワードを使用し表示やカラーを制御できるようになりました。プロ ットしたデータをプレゼンテーションや資料などにそのまま使用できるようなきれいなグラフ ィックシステムが特徴的です。 13 第 3 章 クイックスタート IDL はプログラミング言語ですが、iTools を使用すると画像やデータをとても簡単に表 示することができます。プログラミングの深い知識がなくても、データの描画を行って いただけます。 IDL ワークベンチを起動する IDL ワークベンチは、IDL のグラフィカルインターフェースであり、コード開発環境です。 以 下の手順に従って IDL ワークベンチを起動してください。 Windows プラットフォームでは、スタートメニューを使用して IDL 8.1 プログラムグループか ら IDL を選択します。 Macintosh プラットフォームでは、IDL 8.1 フォルダで IDL Workbench アイコンをクリック するか、X11 ターミナルウィンドウを起動してプロンプトで idlde と入力します。 UNIX と Linux システムでは、シェルプロンプトで idlde と入力してください。 15 画像を表示する IDL を使用して画像を即座に表示するには、以下に従って実行してください。 1. 以下のコマンドを入力して、IDL へ rose.jpg を読み込みます。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥rose.jpg IDL> file = DIALOG_PICKFILE(FILTER='rose.jpg') IDL> READ_JPEG, file, rose これら 2 つのコマンドは、rose.jpg ファイルのパスを取得して、画像データを格納する rose と いう名前の IDL 変数を作成します。 2. 読み込んだファイルを iImage で開きます。 IDL> iImage, rose IDL の画像表示機能と画像処理機能に関する詳細は、41 ページの「画像の操作」を参照してく ださい。 二次元プロットを作成する 前のセクションで表示した画像をさらに解析するために、画像上に引かれたラインの下にあるピ クセルの値を示すプロットを作成することができます(ラインプロファイル)。 これは以下の 2 つの方法で行なうことができます。 iImage ツールの Line Profile ボタン をクリックして、画像に線を対話的に描きます。 16 3 つのラインプロファイル(画像の赤、青、緑のチャンネルそれぞれに対して 1 つずつ) が、iPlot ウィンドウに表示されます。 コマンドにて画像配列内の一行を選択します。 Line Profile ボタンの使用 1. Line Profile ボタンをクリックし、画像の任意の位置にてラインを作成します。始点、 終点の設定はクリックで行います。ラインを引いた位置のプロファイルが以下のように表 示されます。 画像内の一行のデータを取得する 画像配列内の一行を選択します。 これを行なうには、IDL に画像配列を直接作成する必要があ ります。前のセクションの手順 1 で rose.jpg ファイルを開いた時に作成した rose 変数を使用し ます。変数がない場合、またはまだファイルを開いていない場合は以下のコマンドを IDL のコ マンドプロンプトへ入力してください。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥rose.jpg IDL> file = DIALOG_PICKFILE(FILTER='rose.jpg') IDL> READ_JPEG, file, rose rose 変数の確認方法は、IDL ワークベンチの変数ビューを使用して rose 変数を調べるか、 IDL> HELP, rose と IDL コマンドプロンプトに入力します。 つまり、rose 変数は[3, 227, 149] のバイト配列で、 17 赤、緑、青の画像平面を格納し、それぞれが 227 x 149 のピクセル配列になります。 データの 1 つのベクトルを抽出するには、以下のように IDL の配列インデックス構文を使用します。 IDL> rose_slice = REFORM(rose[0,200,*]) これは IDL に、rose_slice という名前の新しい変数を作成するように指示し、この変数には赤 の画像平面(画像平面 0、これは配列の 1 番目の画像平面)の列 200 に含まれている 149 個の 要素から成るベクトルが格納されます。 最後に、以下のコマンドを IDL コマンドラインに入力します。 iPlot ウィンドウに選択したラ インプロファイルが表示されます。 IDL> iplot, rose_slice この例のように iImage ツールを使用してラインプロファイルを対話的に作成する方が早いので すが、配列内からベクトルを数値的に選択する方がより正確で、マウスなしで行なうことができ ます。 ヒント iTools プロパティシートコントロールを使用すると、プロットの外観を素早く変更できます。 プロパティシートを表示するには、項目(例えばプロットライン)をダブルクリックします。 選 択したオプションを変更するとその結果が直ちに表示されます。 18 iSurface IDL iSurface ツールでは、1 つの対話型環境でサーフェスを可視化、変更、および操作するこ とができます。 サーフェスの表示 この例では、RESTORE プロシージャを使用して、SAVE プロシージャによってファイルに保 存されている IDL 変数とルーチンをメモリに読み込みます。iSurface ツールにサーフェスデー タをインポートして可視化するには、IDL コマンドラインに以下のコマンドを入力します。 1. SAVE ファイル形式の marbells.dat ファイルをリストアします。marbells.dat をリスト アすることで、配列変数 elev がメモリに読み込まれます。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥marbells.dat IDL> RESTORE, DIALOG_PICKFILE(FILTER='marbells.dat') 2. サーフェスデータを iSurface ツールにて表示します。 IDL> ISURFACE, elev 表示されたサーフェスをマウスでクリックし、ドラッグで回転しながら色々な方向から表示され たサーフェスを確認してください。 シェードサーフェースを表示する 以下の例では、iSurface ツールでサーフェスに外部光源を追加します。 1. まだ実行していない場合は、「サーフェスの表示」手順 1 で使用した marbells.dat SAVE フ ァイルをリストアしてください。 2. サーフェスデータを iSurface ツールに読み込んでそれを表示します。 IDL> ISURFACE, elev 3. 画像に光源を追加する場合は、Insert → Light を選択します。 4. 電球アイコンを選択してサーフェスの周りに沿って動かしながらサーフェスの影がどのよ うに変化するかを確認します。 19 20 第 4 章 ファイル操作 この章では、各種データファイルを IDL へ読み込む操作、そして保存する方法につい て説明します。 ファイルパスの指定方法 ............................................................................................................. 22 標準ファイルタイプ .................................................................................................................... 22 JPEG データの操作 .................................................................................................................... 23 PNG データの操作 ...................................................................................................................... 23 TIFF データの操作 ..................................................................................................................... 24 ASCII データおよびバイナリデータの操作 ............................................................................... 25 ASCII データの操作.................................................................................................................... 26 テンプレートを使用した ASCII データの読み込み.................................................................... 25 バイナリデータの操作 ................................................................................................................ 27 21 ファイルパスの指定方法 IDL でのファイル操作時にはファイル操作ルーチンを使用し、 ファイルパスの指定を行います。 以下に代表的なファイルの指定方法をご紹介します。 データファイルのディレクトリとファイル名をクオテーションで囲み、ファイルを指定し ます。 例:'C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥rose.jpg’ 注 xx は IDL のバージョンを意味しています。 DIALOG_PICKFILE ファイル操作ルーチンを使用します。この操作では OS 自身のファイ ル選択ダイアログを表示し、ファイルを対話的に指定します。アプリケーションを作成す る際には使用頻度が高いファイル操作ルーチンになるため、演習では主に DIALOG_PICKFILE を使用します。 標準ファイルタイプ IDL では一般的なデータフォーマットの読み込み、書き込みを行うルーチンが用意されていま す。ここでは、代表的なルーチンを使用し演習を行っていきます。演習では読み込み、書き込み ルーチンの一部のみを使用しています。代表的なルーチンの一覧は以下の表を参照してください。 代表的なファイル読込・書込ルーチン一覧 拡張子 読込ルーチン bmp READ_BMP csv READ_ASCII 書込ルーチン WRITE_BMP READ_CSV WRITE_CSV gif READ_GIF WRITE_GIF jpg, jpeg READ_JPEG WRITE_JPEG jp2, jpx READ_JPEG2000 WRITE_JPEG2000 pict READ_PICT WRITE_PICT png READ_PNG WRITE_PNG tif, tiff READ_TIFF WRITE_TIFF 22 JPEG データの操作 この演習では、JPEG データを IDL へインポートして iImage ツールで表示し、そのデータを 保存します。IDL のコマンドラインに以下のコードを入力してください。 1. ファイルの配置場所を指定し、READ_JPEG ルーチンを使用しデータを読み込みます。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥marsglobe.jpg IDL> READ_JPEG, DIALOG_PICKFILE(), mars 2. IDL へ読み込んだデータを確認します。 IDL> HELP, mars 3. iImage イメージツールを使用し、画像を表示します。 IDL> iImage, mars 4. iImage ウィンドウで、File → Save As をクリックし、ファイル名を test.jpg とし、任意 の場所へ画像を保存してください。 PNG データの操作 この演習では、PNG データを IDL へインポートしてダイレクトグラフィックスで表示し、その データを保存します。ダイレクトグラフィックスのルーチンを使用する際には、グラフィックス 表示で最大 256 色が使用できるように設定する必要があります。以下のコマンドを入力し、カ ラーの設定を行ってください。 IDL> DEVICE, RETAIN=2, DECOMPOSED=0 1. READ_PNG ルーチンを使用し、moon 変数へファイルを読み込みます。ファイル操作ルー チンでは、DIALOG_PICKFILE ルーチンを使用しています。インストールディレクトリ配 下の examples/data から moon_landing.png ファイルを選択してください。 指定ファイル: C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥moon_landing.png IDL> moon= READ_PNG(DIALOG_PICKFILE()) 2. ダイレクトグラフィックスの表示ルーチンを使用し、画像を表示します。 IDL> TV, moon 23 3. WRITE_PNG ルーチンを使用し、表示している画像を保存します。 IDL> WRITE_PNG, ‘test.png’, moon TIFF データの操作 この演習では、TIFF データを IDL へと読み込み、ダイレクトグラフィックスで表示し、そのデ ータを保存します。PNG データの操作でグラフィックスのカラーの設定を行ったので、ここで の入力は必要ありません。PNG データの操作でカラーの設定をしていない場合は、以下のコマ ンドを入力してください。 IDL> DEVICE, RETAIN=2, DECOMPOSED=0 以下の手順を始める前に出力先として使用する「C:¥training¥output」フォルダを作成してく ださい。 1. READ_TIFF ルーチンを使用し、boulder.tif ファルを IDL へ読み込みます。ファイル操作 では、DIALOG_PICKFILE ルーチンに FILTER キーワードを使用します。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥boulder.tif IDL> img = READ_TIFF(DIALOG_PICKFILE(FILTER='*.tif')) 2. CONGRID 関数を使用し、配列のサイズを 2 分の 1 へと変更します。 IDL> test_tif = CONGRID(img, 535, 695,/INTERP) 3. サイズを変更した画像を、ダイレクトグラフィックスを使用し表示します。 IDL> TVSCL, test_tif 4. 変数にファイルの保存先を代入します。 IDL> dir='c:¥training¥output¥' IDL> filename= 'test.tif' 5. WRITE_TIFF ルーチンを使用し、ファイルを保存します。保存先の指定は変数を用いて指 定します。 IDL> WRITE_TIFF, dir+filename, test_tif 6. ファイルの保存先を表示します。 IDL> PRINT, 'File written to ', dir+filename 24 ASCII データおよびバイナリデータの操作 IDL では、テキストファイルのフォーマットの ASCII データとフラットバイナリのバイナリデ ータを簡単に扱うために読み込みルーチンが用意されています。ここでは、ASCII データとバ イナリデータの読み込みから、データを表示する演習を行っていきます。 テンプレートを使用した ASCII データの読み込み この演習では、テンプレートを使用して ASCII データを読み込み、IDL へインポートします。 インポートしたデータを iPlot ツールでプロットします。IDL コマンドラインに以下のコードを 入力してください。 1. 特定の ASCII ファイルフォーマットを定義する ASCII テンプレートを作成します。 IDL はこのテンプレートを使用してデータをインポートします。plotTemplate 変数にはテンプレ ートが格納されます。 IDL> plotTemplate = ASCII_TEMPLATE() 2. ダイアログが表示されてファイルを選択するように指示するメッセージが表示されますの で、 plot.txt ファイルを選択します。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥plot.txt ファイルを選択すると、ASCII Template ダイアログが表示されます。 3. Delimited フィールドタイプを選択してください。ASCII データはタブ( または空白) によ って区切られています。 4. Data Starts at Line ボックスに 3 を入力します。( データはファイルの先頭に 2 行のコメ ントラインがあるので 1 行目からはじまりません。) 5. Next をクリックします。 6. Delimiter Between Data Elements セクションで Tab を選択します。 7. Next をクリックします。 8. ダイアログの上部にある表で行を選択し、Name ボックスに値を入力して ASCII ファイル フィールドに名前を付けてください。 表の最初の行(FIELD1) をクリックしてください。 Name ボックスに time を入力しま す。 25 9. 2 行目を選択して、temperature1 を入力します。 3 行目を選択して、temperature2 を入力します。 Finish をクリックします。 10. IDL コマンドラインに以下のコードを入力して、カスタムテンプレートの plotTemplate を使用して ASCII データファイル plot.txt をインポートします。 IDL> plotAscii = READ_ASCII(DIALOG_PICKFILE(FILTER='*.txt'),$ IDL> TEMPLATE=plotTemplate) 11. time を X 軸に、temperature1 を Y 軸にしてプロットします。 IDL> IPLOT, plotAscii.time, plotAscii.temperature1 ASCII データの操作 この演習では、ASCII データを読み込み、データをプロットします。データはテキストファイ ルですので、テキストエディタなどで内容を確認することが可能です。 1. READ_ASCII ルーチンを使用し、IDL へデータを読み込みます。このファイルはヘッダが 2 行あり、 その下の行からデータが始まっていますので、DATA_START に 2 を指定します。 使用するファイルは「テンプレートを使用した ASCII データの読み込み」の手順 2 で使用 したものと同じファイルを使用してください。 IDL> file = $ IDL> READ_ASCII(DIALOG_PICKFILE(FILTER='plot.txt'),DATA_START=2) 2. 読み込んだデータの配列を確認します。このデータは時間と二か所の温度を測定したもの が記録されています。 IDL> HELP, file 3. 表示された HELP の結果を元に、 各データを各変数へと代入します。PRINT 関数を使用し、 代入後の変数を確認します。 IDL> time = file.field1[0,*] IDL> print, 'time', time 4. 次に測定した温度一つ目を temp1 変数へ代入します。代入後の変数を確認します。 26 IDL> temp1 = file.field1[1,*] IDL> print, 'temp1', temp1 5. 二つめの測定した温度を temp2 変数へと代入します。そして、代入後の変数を確認します。 IDL> temp2 = file.field1[2,*] IDL> print, 'temp2', temp2 6. X 軸に時間、Y 軸に温度をプロットします。二か所の温度を同じウィンドウにプロットし、 データの違いを確認します。 IDL> plot, time, temp1 IDL> oplot, time, temp2, LINESTYLE=3 ASCII データのインポートに関する詳細は、IDL オンラインヘルプシステムの READ_ASCII function を参照してください。 バイナリデータの操作 この演習では、フラットバイナリのバイナリデータを読み込み、データを表示します。バイナリ データは 1 と 0 の単純なストリームであり、変換されません。これは人間には読めず、通常数 値データやマシンが読める指示の保存に使用されます。ASCII 文字に変換されても、無意味な 文字の羅列しか表示されません。 1. ファイルとファイルのパスを変数へ代入します。READ_BINARY でも他の READ ルーチ ンと同様の方法で、一行でファイルを読み込むことができますが、変数を使用した実習を 行います。以下のコマンドを入力してください。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥convec.dat IDL> file=DIALOG_PICKFILE() 2. file 変数の内容を表示し、ファイルの場所を確認してください。 IDL> print, file 3. READ_BINARY で file 変数を使用し、データを IDL へ読み込みます。DATA_DIMS では、 読み込むデータサイズを入力しています。画像サイズが 248×248 の配列ですので、以下の ように入力します。 IDL> img = READ_BINARY(file, data_dims=[248, 248]) 4. ダイレクトグラフィックスの表示ルーチンを使用し、画像を表示します。 27 IDL> tv, img バイナリデータも ASCII データの読み込みと同様に BINARY_TEMPLATE というテンプレー トを使用してデータをインポートすることが可能です。READ_BINARY やテンプレートに関す る詳細は、IDL オンラインヘルプシステムの READ_BINARY function を参照してください。 演習問題 標高データが格納されている elevbin.dat バイナリデータを読み込み、文字列データへと変換後、 CSV へ出力してください。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥elevbin.dat ヒント 1. 読み込むバイナリデータの elevbin.dat ファイルは 64×64 の二次元配列です。 2. 変換の関数は以下のように STRING を使用します。 ascii_elev=STRING(elev, FORMAT='(A)') ※elev は elebvin.dat を読み込んだ変数名です。 3. WRITE_CSV 関数を使用し、ascii_elev 変数を CSV ファイルへと出力してください。 ファイル名は’test.csv’としてください。 28 第 5 章 IDLの表示機能 この章では、ダイレクトグラフィックスと新しいグラフィックシステムを使用してライ ンプロット、サーフェス、画像処理などの様々な表示および変更方法について説明しま す。 2 次元プロットを作成する .......................................................................................................... 30 新しいグラフィックスによるプロット ....................................................................................... 32 サーフェスとコンタ .................................................................................................................... 33 新しいグラフィックスによるサーフェスの表示 ......................................................................... 34 コンタを表示する ........................................................................................................................ 36 新しいグラフィックスによるコンタの表示 ................................................................................ 38 画像の操作................................................................................................................................... 41 29 2 次元プロットを作成する この例ではダイレクトグラフィックスを使用して2次元プロットを作成および操作する方法を 説明します。 ダイレクトグラフィックスを使用しているので、IDL に最大 256 色を使用してシンプルなグレ ースケールカラーマップを読み込むように指示します。 IDL> DEVICE, RETAIN=2, DECOMPOSED=0 IDL> LOADCT, 0 1. X 軸の値を作成します。 FINDGEN 関数は、要素の添え字と同じ値を持つ 100 個の要素の 配列を作成します。 IDL> X= 2*!PI/100 * FINDGEN(100) 2. プロットを作成します。 IDL> PLOT, SIN(X) 30 2 次元オーバープロットを作成する プロットしたデータセットに新しいデータセットを重ね合わせることができます。これは OPLOT プロシージャによって実行されます。 OPLOT を呼び出すときに色、ラインスタイル、線幅パラメータを変更するとデータセットを区 別することができます。詳しくは、IDL オンラインヘルプシステムの OPLOT Procedure を参照 してください。 1. 2 次元プロットの演習をまだ実行していない場合は「2 次元プロットを作成する」に従って 変数 X の作成とプロットを実行してください。 2. 周波数を 2 倍にして正弦波をオーバープロットします。 2 倍の太さの線を作成します。 IDL> OPLOT, SIN(2*X), THICK = 2 3. さらに周波数を 3 倍にして別の正弦波をオーバープロットします。 実線の代わりに長い点 線を使用します。 IDL> OPLOT, SIN(3*X), LINESTYLE = 5 4. 周波数が 2 倍の正弦波上へデータポイントを示すため、菱形記号をオーバープロットしま す。 IDL> OPLOT, SIN(2*X), PSYM = 4 使用できるキーワードの詳細に関してはオンラインヘルプの Plot Procedure を参照してください。 ダイレクトグラフィックスプロットルーチン一覧に関しては、IDL オンラインヘルプシステム の Functional List of IDL Routines の Plotting セクションを参照してください。 31 新しいグラフィックスによるプロット この例では新しいグラフィックスを使用して 2 次元プロットを作成および操作する方法を説明 します。使用するデータはダイレクトグラフィックスと同じものを用い、文法の違いや表示の違 いを演習します。 1. ダイレクトグラフィックスで使用した X 変数を使用します。X 変数を作成していない場合 は、以下のコマンドを入力してください。 IDL> X = 2*!PI/100 * FINDGEN(100) 2. プロットを作成します。 IDL> P1=PLOT(SIN(x)) 3. 周波数を 2 倍にした正弦波を、表示した 2 次元プロットの上にオーバープロットし、デー タポイントを示す菱形記号も付与します。 IDL> P2=PLOT(SIN(2*X), THICK = 2, SYMBOL = 4, /OVERPLOT) 4. さらに周波数を 3 倍にした正弦波をオーバープロットします。 新しいグラフィックスでは、 キーワードを使用し、簡単にデータカラー表示することが可能です。 IDL> P3=PLOT(SIN(3*X), LINESTYLE = 5, COLOR=’red’, /OVERPLOT) その他の使用できるキーワードの詳細に関してはオンラインヘルプの Plot を参照してください。 新しいグラフィックスのプロットルーチンプロットルーチンに関しては IDL オンラインヘルプ システムの Graphic Examples から、Plot Examples を参考にしてください。 32 サーフェスとコンタ ダイレクトグラフィックスは iTools や新しいグラフィックスを使用するよりも表示後の画像操 作が少し不便ですが、大きなウィジットベースアプリケーションに画像を組み込む場合や多数の 処理画像をプログラムで作成する必要がある場合に適しています。ここでは、ダイレクトグラフ ィックスと新しいグラフィックスを使用して、表示や操作性の違いを演習します。 サーフェスを表示する この例では、IDL ダイレクトグラフィックスを使用して 3 次元サーフェスを表示します。 IDL コマンドラインに以下のコマンドを入力します。 1. elevbin.dat ファイルを IDL へインポートします。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥elevbin.dat IDL> elev=READ_BINARY(DIALOG_PICKFILE(FILTER='elevbin.dat'),$ IDL> DATA_DIMS=[64,64]) 2. elevbin.dat を変数 elev へインポートしたので、配列変数 elev はメモリに読み込まれ、ワ ークベンチの変数ビューへ表示されます。 3. ダイレクトグラフィックスを使用しているので、IDL に最大 256 色を使用してシンプルな グレースケールカラーマップを読み込むことを指定します。 IDL> DEVICE, RETAIN=2,DECOMPOSED=0 IDL> LOADCT, 0 4. elev 変数を SURFACE ルーチンを使用し、可視化します。 IDL> SURFACE, elev サーフェスを回転する SURFACE プロシージャによって、異なった角度からデータを表示させることができます。 AX キーワードは X 軸のサーフェスの回転角度(ビューアに対し正方向の角度)を指定します。 AZ キーワードは、Z 軸のサーフェスの反時計回りの回転角度を指定します。 1. 異なった角度から配列を表示してみましょう。 33 IDL> SURFACE, elev, AX=70, AZ=25 新しいグラフィックスによるサーフェスの表示 この例では新しいグラフィックスを使用して 3 次元サーフェスを表示および操作する方法を説 明します。使用するデータはダイレクトグラフィックスと同じものを用い、文法の違いや表示の 違いを演習します。 1. ダイレクトグラフィックスの「サーフェス表示」手順 1 で使用した elevbin.dat を使用しま す。データを IDL へインポートしていない場合は、以下のコマンドを入力してください。 コマンド入力後、IDL の変数に elev があることを確認してください。 IDL> elev=READ_BINARY(DIALOG_PICKFILE(FILTER='elevbin.dat'),$ IDL> DATA_DIMS=[64,64]) 2. elev 変数を新しいグラフィックスシステムのサーフェスルーチンを使用し、表示します。 IDL> s1=SURFACE(elev) 34 3. サーフェスの 3 次元データの上へ画像を表示するため、画像データを image 変数へ インポートします。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥elev_t.jpg IDL> READ_JPEG, DIALOG_PICKFILE(FILTER=‘elev_t.jpg’), image 4. キーワードを使用して画像データを 3 次元データへ重ねます。 IDL> s2=SURFACE(elev, TEXTURE_IMAGE=image) 5. ROTATE メソッドを使用してサーフェスを回転し、 可視範囲ではない谷の奥を確認します。 以下のように ROTATE コマンドを使用したコマンドを入力してください。 Z 軸はマイナス 25 度回転させ、X 軸は 30 度回転をさせています。 IDL> s2.ROTATE, -25, /ZAXIS IDL> s2.ROTATE, 30, /XAXIS 35 6. マウスで画像を回転します。表示されたオブジェクトをクリックすると、マウスカーソル が のように円を描いたものになりますので、ドラッグしサーフェスを回転します。サー フェスは 360 度回転します。 コンタを表示する この例では、IDL ダイレクトグラフィックスを使用してコンタプロットのように 2 次元配列を 表示します。 IDL コマンドラインに以下のコマンドを入力します。 1. ダイレクトグラフィックスの「サーフェス表示」手順 1 で使用した elevbin.dat を使用しま す。読み込んでいない場合は、以下を入力してデータを IDL へインポートしてください。 IDL> elev= READ_BINARY(DIALOG_PICKFILE=’elevbin.dat’, $ IDL> DATA_DIMS=[64,64]) 2. ダイレクトグラフィックスを使用しているので、IDL に最大 256 色を使用してシンプルな グレースケールカラーマップを読み込むことを指示します。 IDL> DEVICE, RETAIN=2, DECOMPOSED=0 IDL> LOADCT, 0 3. コンタをプロットします。 IDL> CONTOUR, elev 4. 複数の等高線のカスタムコンタプロットを作成します。 IDL> CONTOUR, elev, NLEVELS=8, C_LABELS=[1,1] 36 NLEVELS キーワードは、CONTOUR に 8 つの均等な間隔の高さのレベルでプロットす るように指示します。 C_LABELS キーワードで、どのコンタレベルにラベルを表示する かを指定します( デフォルトでは、1 つおきにコンタがラベル表示されます)。 5. 同じように、FILL キーワードを使用して、各コンタレベルを別々の色(もしくはグレーの 陰影)で塗り潰したコンタプロットを作成することができます。 IDL> CONTOUR, elev, NLEVELS=8, /FILL, TITLE=’CONTOUR PLOT’ 6. その結果作成されたコンタにアウトラインを重ね合わせるには、さらに CONTOUR を呼び 出して、OVERPLOT キーワードを使用して前のプロット上にオーバーレイします。 DOWNHILL キーワードを使用して、コンタのスロープを示すチェックマークを追加する ことができます。 IDL> CONTOUR, elev, NLEVELS=8, /OVERPLOT, /DOWNHIL 37 7. CONTOUR は、3 次元透視図法で表示することができます。最初に以下を入力して 3 次 元表示角度を設定します。 IDL> SURFR 8. T3D キーワードを使用して、コンタを 3 次元透視図として描画することができます。 IDL> CONTOUR, elev, N_LEVELS=8, /T3D 新しいグラフィックスによるコンタの表示 この例では新しいグラフィックスを使用してコンタをプロットします。 1. ダイレクトグラフィックスの「サーフェス表示」手順 1 で使用した elevbin.dat を使用しま す。データを IDL へインポートしていない場合は、以下のコマンドを入力してください。 コマンド入力後、IDL の変数に elev があることを確認してください。 IDL> elev=READ_BINARY(DIALOG_PICKFILE(FILTER='elevbin.dat'),$ IDL> DATA_DIMS=[64,64]) 38 2. 新しいグラフィックスでコンタを表示します。 IDL> c1=CONTOUR(elev) 3. 複数の等高線のカスタムコンタプロットを作成します。 IDL> c1=CONTOUR(elev, N_LEVELS=8, C_LABEL_SHOW=[0,1], FONT_SIZE=6) 4. 同じように、FILL キーワードを使用して、各コンタレベルを別々の色(もしくはグレーの 陰影)で塗り潰したコンタプロットを作成することができます。 IDL> c1=CONTOUR(elev, RGB_TABLE=0, N_LEVELS=8, /FILL) 39 5. その結果作られたコンタにアウトラインを重ね合わせるには、さらに CONTOUR を呼び出 し て 、 OVERPLOT キ ー ワ ー ド を 使 用 し て 前 の プロ ッ ト 上 に オ ー バ ー レ イし ま す 。 DOWNHILL キーワードを使用して、コンタのスロープを示すチェックマークを追加する ことができます。 IDL> c2=CONTOUR(elev, N_LEVELS=8, /OVERPLOT, /DOWNHILL, $ IDL> TITLE=’DISPLAY A CONTOUR’) 40 画像の操作 IDL と画像 対話型操作、統一された表記法、配列指向の演算子および関数を装備している IDL は、画像処 理を行なうには理想的なツールです。 IDL では、2 次元配列として画像を簡単に扱うことがで き、他の配列と同じように処理することができます。 IDL には、特に画像表示と処理を行うた めに作成された多数のプロシージャと関数も用意されています。 IDL の画像処理機能に関する詳細は、IDL オンラインヘルプシステムの Image Processing ユ ーザーズガイドを参照してください。 画像を表示する ダイレクトグラフィックスは大きなウィジットベースアプリケーションに画像を組み込む場合 や多数の処理画像をプログラムで作成する必要がある場合に適しています。表示では、ダイレク トグラフィックスと新しいグラフィックスを使用して、表示や操作性の違いを演習します。 1. 処理を行う前に、image.tif ファイルの画像を IDL にインポートします。IDL のコマンド ラインに以下のコードを入力してファイルを読み込みます。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥image.tif IDL> myimage=READ_TIFF(DIALOG_PICKFILE(FILTER='image.tif’)) 2. IDL コマンドラインから、2 つの異なるルーチンを使用して IDL で画像を見ること ができます。 配列を元のフォームで表示するには、TV プロシージャを使用します。画像 を表示するとき、すべてのテーブルカラー(256 色)を使用できるようにカラー値をスケーリ ングするには、TVSCL プロシージャを使用します。 ダイレクトグラフィックスを使用しているので、IDL に最大 256 色を使用し、シンプルな グレースケールのカラーマップを読み込むように指示します。 IDL> DEVICE, RETAIN=2, DECOMPOSED=0 IDL> LOADCT, 0 3. TV プロシージャを使用して画像を表示します。 41 IDL> TV, myimage 4. TVSCL プロシージャを使用してカラースケールした画像を表示します。 IDL> TVSCL, myimage 5. グラフィックウィンドウの閉じるアイコンをクリックするか、以下のように コマンドラインに WDELETE と入力してグラフィックスウィンドウを閉じます。 IDL> WDELETE 6. 以下のコマンドを入力し、新しいグラフィックスを使用して画像を表示します。 IDL> newg=IMAGE(MYIMAGE) 新しいグラフィックスを使用する場合は手順 2 のデバイスのカラー設定は必要ありません。 42 画像のサイズ変更 IDL に用意されている REBIN 関数を使用して、 画像のサイズ変更を行います。REBIN 関数は、 ベクトルや配列の大きさを新しいサイズに簡単に変更します。 指定されたサイズはオリジナル の画像のサイズと比例(これは整数倍もしくは整数要素です)していなければなりません。 オ リジナル画像配列は 768 × 512 なので、新しい画像サイズの正しいサイズを指定しなければ なりません。 オリジナルのサイズの半分の大きさに変更する場合、オリジナルのサイズにおけ る配列の半分を指定するだけです。 1. 以下を入力して、REBIN 関数を使用して新しいサイズで新しい画像を作成します。 IDL> newimage=REBIN(MYIMAGE,384,256) 2. 以下を入力して画像を表示します。 IDL> TV, NEWIMAGE 3. 以下のコマンドを入力し、新しいグラフィックスを使用し、画像を表示します。 IDL> newg=IMAGE(NEWIMAGE) グラフィックウィンドウサイズの変更 IDL はグラフィックを表示する際に、ウィンドウが表示されていない場合、自動的にウィンド ウを作成します。WINDOW コマンドを使用し、指定した大きさで新しいウィンドウを作成す ることもできます。 1. 以下を入力し、大きいグラフィックウィンドウで Manhattan を表示します。 43 IDL> WINDOW,0,XSIZE=800,YSIZE=600, TITLE=’my window’ IDL> TV,myimage この WINDOW コマンドは幅 800 ピクセル(XSIZE キーワードで指定)、高さ 600 ピク セル(YSIZE キーワードで指定)のウィンドウ番号 0 の新しいウィンドウを作成します。 2. 新しいグラフィックスで指定した大きさの新しいウィンドウを作成し、表示します。 IDL> w=WINDOW(WINDOW_TITLE=’my window’, DIMENSIONS=[800,600]) IDL> newg=IMAGE(myimage, /CURRENT) コントラストの強化 表示されている色を変更するだけで、画像の見栄えが断然良くなる場合があります。IDL は多 数のコントラスト操作方法があります。ここからの演習では、ダイレクトグラフィックスと新し いグラフィックスでの表示方法を並列して出力します。表示方法の違いを確認しながらコマンド を入力してください。 しきい値(閾値) 画像上で操作することができる簡単なコントラスト強調の 1 つは、しきい値の設定です。しき い値を設定することにより、取り得る輝度全てを白と黒に分ける 2 レベル写像(2 値化変換) を行うことができます。IDL の関係演算子である EQ、NE、GE、GT、LE、LT はその関係が 真の場合 1 の値を、偽の場合 0 を返します。画像に適用されると、ピクセル毎に関係が評価さ れ、結果として 1 と 0 からなる画像が返されます。 1. 以下を入力し、画像のピクセル値が 140 より上を白、それ以外を黒で表示します。 44 IDL> TVSCL,myimage GT 140 IDL> newg=IMAGE(BYTSCL(myimage gt 140)) 2. コマンドを入力して、同じように 140 未満の値を持つピクセルを白として以下のように表 示します。 IDL> TVSCL,MYIMAGE LT 140 IDL> newg=IMAGE(BYTSCL(myimage lt 140)) 多くの画像で、ピクセルの取り得る値は小さいサブレンジのみです。 分布を拡大しピクセル値の各範囲がほぼ同じメンバー数を含むと、表示内容の情報量は以下のよ うに最大になります。 3. HIST_EQUAL 関数は配列に対して再分布を行います。以下を入力し、ヒストグラム平坦 化した MYIMAGE を表示します。 IDL> TV, HIST_EQUAL(myimage) IDL> newg=IMAGE(HIST_EQUAL(myimage)) 45 ピクセル値のスケーリング 画像のコントラスト強調を行うための、もう 1 つの方法としてピクセル値の取り得る範囲を制 限し、その範囲に対して輝度の全範囲でスケーリングするというやり方があります。IDL の最 大演算子である>演算子は、2 つのパラメータの大きい値を返します。以下のコマンドは最大 演算子と最小演算子のコントラストを行います。 1. 表示されている輝度の全範囲に、100 もしくはそれ以上の値でピクセルにスケーリングし ます。 IDL> TVSCL,myimage > 100 IDL> newg=IMAGE(BYTSCL(myimage > 100)) 2. 輝度の全範囲に 140 よりも少ない値でピクセルにスケーリングします。 IDL> TVSCL,myimage < 140 IDL> newg=IMAGE(BYTSCL(myimage < 140)) 46 3. 最小、最大演算子を同時に使用し、さらに複雑なコントラスト強調を行うことができます。 以下を入力し、最小輝度を 140 に、最大輝度を 200 に設定し、myimage にスケーリング して表示します。 IDL> TVSCL,myimage >140<200 IDL> newg=IMAGE(BYTSCL(myimage >140<200)) 注 このコマンドでは IDL の最小、最大演算子の使用法を説明していますが、IDL では次のコマン ドを使用することでより効率的に同じ機能を実行することができます。 TV, BYTSCL(MYIMAGE,MIN=140,MAX=200,TOP=!D.TABLE_SIZE-1) スムージングとシャープニング 47 IDL の SMOOTH 関数を使用することによって即座にスムージングが行われ、エッジの平滑化 や、画像内のランダムノイズの補正を行うことができます。SMOOTH は以下のように、任意の 奇数幅を指定することで四角い範囲に均等にスムージングを行います。 1. 7 × 7 の範囲にスムージングを行った myimage を表示します。 IDL> TVSCL,SMOOTH(myimage,7) IDL> newg=IMAGE(BYTSCL(SMOOTH(myimage,7))) Unsharp マスキング 前に表示した画像は、オリジナル画像の低周波要素のみが含まれていたので若干ぼやけています。 画像をシャープに表示することが求められることがあり、そのとき、エッジや画像の高空間周波 要素が強調されます。オリジナル画像から、低周波のみを含むスムージング画像を取り除くと、 画像をシャープに表示することができます。この処理は unsharp マスキング と言います。 1. Unsharp マスクをかけて画像を表示します。 IDL> TVSCL, FLOAT(myimage)-SMOOTH(myimage,7) IDL> newg=IMAGE(BYTSCL(FLOAT(myimage)-SMOOTH(myimage,7))) 48 このコマンドはオリジナルから、画像をスムージングしたものを取り除きます。その結 果にスケールをかけ、上記のように表示します。 その他のシャープニング IDL には、他にも画像をシャープにする組込みの関数があります。ROBERTS 関数は画像の Roberts gradient(ロバーツ勾配)を返します。以下のコマンドを入力します。 1. myimage の Roberts gradient を含む R という新しい変数を作成します。 IDL> r=ROBERTS(myimage) 2. 配列 R を表示します。 IDL> TVSCL, r IDL> newg=IMAGE(BYTSCL(r)) その他の一般的に使用されているグラディエント演算子には SOBEL 演算子があります。IDL の SOBEL 関数は、3 × 3 以上の範囲で演算を行い、他の手法に比べてノイズの影響を受けに くいという特徴があります。以下のコマンドを入力します。 3. 画像に Sobel 処理をかけてシャープにしたものを作成します。 IDL> so=SOBEL(MYIMAGE) 4. シャープにした画像を表示します。 IDL> TVSCL, so IDL> newg=IMAGE(BYTSCL(so)) 49 異なるカラーテーブルの読み込み あるカラーテーブルを読み込み、事前に定義されている IDL の画像をさらに見やすくします。 グラフィックウィンドウが表示されている間に、コマンドラインに XLOADCT と入力します。 XLOADCT ウィジェットアプリケーションが表示されます。フィールドからカラーテーブルを 選択すると、ウィンドウに配色が反映されます。"Done" を選択しカラーテーブルを有効にしま す。異なるテーブルの効果を確認できたら、フィールドで最初のカラーテーブル B-W Linear を クリックします。"Done" をクリックし、オリジナルの白黒のカラーテーブルを読み込みます。 注 新しいカラーテーブルをロードする際、24-bit(True) カラーディスプレイ上に画像が表示され ている場合は、1 度画像を閉じ、IDL に再度読み込む必要があります。これにより、新しい配 色を用いて画像表示が行えます。8 ビット(pseudo)カラーディスプレイであれば、即座に色 の変更が行われるので画像を再表示する必要はありません。 画像の回転 ROTATE 関数を使用して 90 度毎に回転することができます。 1. 以下のように画像を 90 度回転します。 IDL> r=ROTATE(myimage,1) 2. 以下を入力し表示します。 IDL> TVSCL, r IDL> newg=IMAGE(BYTSCL(r)) ROTATE の 2 つ目のパラメータは 0 から 7 の間の整数です。それらは回転と軸反転の、 可能な組み合わせ 8 つの内の 1 つになります。 IDL での画像に関する詳細 IDL には、ご紹介した以外にも Image Processing に関する機能が多数用意されています。IDL の画像処理機能に関する詳細はオンラインヘルプの Image Processing in IDL を参照して下さ い。 50 第 6 章 マッピング この章では以下の項目について説明します。 IDL とマッピング ....................................................................................................................... 52 シンプルなマップのプロット...................................................................................................... 52 部分的なプロット ........................................................................................................................ 53 地図上への画像のワーピング ...................................................................................................... 54 地図にベクトルデータを表示 ...................................................................................................... 55 ベクトルデータを流線形に表示 .................................................................................................. 56 51 IDL とマッピング IDL のマッピング機能により、様々な投影図法でデータをプロットすることができます。 この 章では、様々な地図投影図法の表示とデータのプロット方法に関して説明します。また、表示で は、新しいグラフィックシステムでの表示を取り入れ、画像の読み込みからデータの表示、出力 まで一連の操作演習を行います。関連情報はオンラインヘルプにて以下のトピックを参照してく ださい。 新しいグラフィックスシステムに対して使用できるキーワードやメソッドは MAP を参照 してください。 ダイレクトグラフィックスでの地図の表示に関しては MAP_SET Procedure を参照してく ださい。 シンプルなマップのプロット この例では、新しいグラフィックスを使用し、マップをプロットします。 1. Mollweide(モルワイデ図法)をセットします。 IDL> m = MAP('Mollweide', FILL_COLOR='light blue') 2. 表示後以下のコマンドを入力し、大陸を表示します。 IDL> countries = MAPCONTINENTS(FILL_COLOR=’light green', /COUNTRIES) 52 部分的なプロット 常に地球全体を表示する必要はなく、緯度と経度の範囲を指定して、地球の一部を表示すること ができます。 1. メルカトール図法を使用し、日本の座標を新しいウィンドウへセットします。 IDL> m = MAP('Mercator', LIMIT=[30, 127, 48, 147],$ IDL> FILL_COLOR='light blue') LIMIT プロパティの設定は最小緯度、最小経度、最大緯度、最大経度の順番で設定します。 2. MAPCONTINENTS キーワードを使用し、座標へ大陸を表示します。 IDL> countries = MAPCONTINENTS(FILL_COLOR='wheat', /COUNTRIES) 3. ORDER メソッドを使用し、座標を大陸の後ろへ表示させます。 IDL> m.MAPGRID.ORDER, /SEND_BACKWARD 53 地図上への画像のワーピング この例では、画像データを地図へワープする演習を行います。 1. 以下を入力して、画像データ Day.jpg を読み込み、表示します。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥Day.jpg IDL> READ_JPEG, DIALOG_PICKFILE(FILTER=’Day.jpg’), day IDL> dayimage=IMAGE(day) 2. IMAGE ファンクションの地図投影法のキーワードを使用し、ワープを行います。 IDL> cloudmap = IMAGE(day, LIMIT=[-90,-180,90,180], GRID_UNITS=2,$ IDL> IMAGE_LOCATION=[-180,-90], IMAGE_DIMENSIONS=[360,180],$ IDL> TRANSPARENCY=50, MAP_PROJECTION='Mollweide') 透過度を変更する TRANCEPARENCY なども設定できます。 54 地図にベクトルデータを表示 この例では新しいグラフィックスを使用し、地図上にベクトルデータを追加します。 1. 以下を入力して世界の風データを表示するベクトルデータ globalwinds.dat を読み込み ます。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥globalwinds.dat IDL> RESTORE, DIALOG_PICKFILE(FILTER='globalwinds.dat') 2. 地図投影法を設定し、表示する北米の範囲を表示します。 IDL> mapimage = MAP('Equirectangular', LIMIT=[0,-180,89,-30]) 3. MAPCONTINENTS ファンクションを使用し、座標へ大陸を表示します。 IDL> cont = MAPCONTINENTS(/CURRENT) 4. VECTOR ファンクションを使用し、風のベクタデータを地図上へ重ねます。 IDL> vect = VECTOR(u, v, x, y, /OVERPLOT, RGB_TABLE=39, AUTO_COLOR=1) 55 ベクトルデータを流線形に表示 1. 先ほど使用した風のベクトルデータ globalwinds.dat を読み込みます。 IDL> RESTORE, DIALOG_PICKFILE(FILTER='globalwinds.dat') 2. マップの投影法を設定します。 IDL> map = MAP('Equirectangular', POSITION=[0.1,0.1,0.9,0.9], $ IDL> LIMIT=[0,-160,80,-50], TITLE='Wind Streamlines') 3. グリッドのプロパティを変更します。変化を確認しながら、一つずつ順にコマンドを実行 します。 IDL> grid = map.MAPGRID IDL> grid.LINESTYLE = "dotted" IDL> grid.ANTIALIAS = 0 IDL> grid.LABEL_POSITION = 0 IDL> grid.LABEL_ANGLE = 0 IDL> grid.FONT_SIZE=14 56 4. MAPCONTINENTS キーワードを使用し、座標へ大陸を表示します。 IDL> cont = MAPCONTINENTS(/CURRENT, FILL_COLOR="light gray") 5. 風のベクタデータを地図上へ流線形に重ねます。 IDL> stream = STREAMLINE(u, v, x, y, /OVERPLOT, $ IDL> STREAMLINE_STEPSIZE=0.05, $ IDL> RGB_TABLE=33, AUTO_COLOR=1, THICK=5) 57 58 第 7 章 IDLでのプログラミング この章では以下の項目について説明します。 IDL でのプログラミングについて .............................................................................................. 60 IDL のプログラミングタイプ ..................................................................................................... 61 簡単な IDL プログラムの実行 .................................................................................................... 65 IDL プログラムのコンパイルと実行 ........................................................................................... 67 ブレークポイントとデバッグ...................................................................................................... 68 59 IDL でのプログラミングについて IDL アプリケーションの範囲は非常に簡単なもの( 例えば IDL コマンドラインに入力する短 いプログラム) から非常に複雑なもの(GUI を持つ大きなプログラム) まで様々です。 1 つの データセットを解析する小さいプログラムを作成していても、商用の大規模なアプリケーション を作成していても、IDL 言語で使用されているプログラミング概念を理解する必要があります。 IDL のプログラミングは、C、C++、または FORTRAN などの言語に慣れている開発者にとっ ては親しみやすく感じられると思います。 IDL の言語は、これらの言語と同様の構文と演算方 法を使用する高度なプログラム言語です。 プログラミング環境はほとんど同じで容易に移行できますが、IDL の構造とツールはプログラ ミングをより迅速かつ効果的に行なうことができます。 IDL が他のプログラム言語よりも優れ ている点の概要は、以下の通りです。 配列演算-配列を使用することで、各データ要素の演算を繰り返し実行する必要がなくな るので効率的で適切なプログラムを作成できます。 ダイナミックデータタイプ- IDL ではコードの前後関係からデータタイプが決定される ので、変数を明確に入力する必要がありません。 変数の作成や変更は、同一プログラム内 でも随時行なうことができます。 IDL ワークベンチ開発環境-プログラムを色つきで表示する機能、コーディングツール、 自動コンパイル、およびビジュアルデバッグツールなど開発をスピードアップする双方向 性を提供します。 プログラマーはテスト用にプログラムを迅速にコンパイルして実行し、 エラーが発生している場所を直ちに調べることができます。 対話型プログラミングモード-対話型モードにより、コマンドラインからコマンドを実行 してコード行を即座にテストすることができます。 グラフィカルユーザーインターフェース(GUI) ツール- IDL には GUI アプリケーショ ン開発用に以下のツールが用意されています。 ウィジットプログラミング- IDL のウィジットツールライブラリを使用して、ボタンやス ライダなど簡単なコントロールを作成します。 ウィジットプログラミングでは、ユーザー インターフェースのデザインや機能性を完全に制御することができます。 組み込みのルーチン- IDL にはグラフィカルユーザーインターフェース(GUI) のプログ ラミング、数値分析、およびデータ可視化用に膨大なルーチンライブラリが用意されてい ます。 60 統合型開発- IDL では 他の開発言語で作成された外部プログラムを呼び出したり、外部 プログラムから IDL を呼び出すことができます。 配布- IDL では、ソースコードとしてまたは SAVE ファイルと呼ばれるコンパイルされ たバイナリ形式のいずれかの方法でアプリケーションを配布することができます。 IDL の 開発ライセンスを持っている人は誰でも IDL のソースコードを実行することができます。 同僚や顧客が IDL の開発ライセンスを所有していない場合でも、自由に使用できる IDL バーチャルマシンでコンパイルされた IDL アプリケーションの大半を実行することがで きます。 IDL ライセンスでのみ利用可能な機能をアプリケーションで使用している場合に は、ランタイムライセンスを購入して配布するか、コンパイルされたアプリケーションコ ードにライセンスディレクトリを組み込むことができます。 この章では、IDL でのプログラミングに関する簡単な紹介と説明を行います。 IDL でのプログ ラミングに関する詳細は、IDL オンラインヘルプの特定のルーチンに関するドキュメントを参 照してください。 IDL のプログラミングタイプ IDL でのプログラム作成と実行には、様々な方法があります。 これらの方法では複雑さのレベ ルも異なり、メインプログラム、プロシージャ、関数があります。 メインプログラム いくつかのコマンドを別のファイルを作成しないで実行する場合は、通常メインプログラムを IDL コ マ ンドラ インで作 成します 。 メインプロ グラムは 、プロ シージャ (PRO) や 関数 (FUNCTION) の先頭部分で明確に指定されません。 メインプログラムでは、プロシージャや 関数と同様、END ステートメントが必要になります。 ファイルを保存して実行する場合は、コンパイルをかけてから実行(もしくは.GO コマンドを 実行)してください。また、メインプログラムは指定されないため、他のルーチンから呼び出す ことも引数を受け取ることもできません。 メインプログラムは.RUN コマンドを使用してコマ ンドラインから実行するか、ファイルに保存して後で実行することができます。 例:メインプログラム(ファイルに保存する方法) x = findgen(100) y = sin(x)/10 p1 = plot(x, y) END 61 例:メインプログラム(.RUN を使用する方法) IDL> .run - x = findgen(100) - y = sin(x)/10 - p1 = plot(x, y) - END 名前付きプログラム:プロシージャと関数 プロシージャと関数は共にモジュラープログラムで、個別に実行したり、他のプログラムから呼 び出すことができます。 プログラムには複数のプロシージャや関数を含めることができ、他の プログラムも必要なだけ呼び出すことができます。 開発者は多くのプロシージャや関数を個別 に保存するか、これらを同一のファイルにまとめるかを選択することができます。 注 IDL で 作 成 さ れ た プ ロ グ ラ ム を み る に は 、 IDL イ ン ス ト ー ル デ ィ レ ク ト リ 下 の /examples/demo/demosrc にある IDL 付属のデモプログラムを使用してください。 これら のプログラムを開いて表示し、プロシージャと関数を理解するのに使用することはできますが、 デモやトレーニング用にこれらのプログラムを使用するので、変更は保存しないでください。 プロシージャ プロシージャは明確に定義されたタスクを実行する自己完結的な一連の IDL ステートメントで す。 プロシージャは、プロシージャ定義ステートメント(PRO < プロシージャ名>)で定義さ れます。ここでのプロシージャ名は作成する IDL ステートメントの名前となります。 パラメ ータは、プロシージャで使用されている名前付き変数です。 例:プロシージャ (TEST.PRO) PRO TEST x = findgen(100) y = sin(x)/10 p1 = plot(x, y) END 62 実際に使用する場合は、以下のようなコマンドとなります。 IDL> TEST 関数 関数は明確に定義されたタスクを実行する自己完結的な一連の IDL のステートメントで、実行 されると呼び出しプログラムユニットに値を返します。 全ての関数は、関数を終了するのに使 用される RETURN ステートメントのパラメータとして与えられている関数の値を返します。 関数は、関数定義ステートメント(FUNCTION <関数名>) で定義されます。関数名は作成する IDL ステートメントの名前となります。デフォルトでは、関数は新しい変数を作成するので、 リターン値へのアクセスを簡単にする必要がある場合には関数を使用してください。 例:関数(TSET.PRO) FUNCTION TEST x = findgen(100) y = sin(x)/10 data = y#y return, data END 実際に使用する場合は、以下のコマンドになります。 IDL> data = TEST() 引数とキーワード IDL の引数は、ルーチンに情報を渡す位置パラメータです。つまり、各引数はルーチンの構文 で指定された順で与える必要があります。 ルーチンによっては、必ず必要な引数とオプション の引数があります。例えば、IDL システムルーチン PLOT には、x と y の 2 つの引数があり ます。引数は正しい順序で与えられなければなりません。そうでない場合はプロットの軸が正し くなくなります。 y 引数が与えられないと、以下のように、ルーチンは y を x の関数としてプ ロットします。 IDL> PLOT, EXP(FINDGEN(10)) このコマンドの結果は、以下のプロットになります。 63 キーワード キーワードは、ペアのキーワード値で構成される選択可能なパラメータです。 これらは、任意 の順番でルーチンに渡すことができます。 キーワードが指定されない場合は、そのキーワード のデフォルト値がルーチンに渡されます。 ルーチンには選択できるキーワードを多数保有する ことができます。 必要に応じて任意の数のキーワードを使用することができます。PLOT の例 で、今度はキーワードを追加して x 軸とy 軸にラベルを付けます。 IDL> PLOT, EXP(FINDGEN(10)), XTITLE='Time', YTITLE='Velocity' 制御文とループ文 IDL では、C 言語や Fortran などのプログラミング言語と同じく IF、CASE、SWITCH などの 分岐文があり、FOR や WHILE などのループ文があります。IDL では簡単に配列処理が行える ようにデザインされている言語なため、ループ文などをたくさん使用すると、処理の速度が遅く なる恐れもありますので、プログラムの規模が大きくなってきたときには注意してください。 自動コンパイル 64 IDL では、コマンドラインに入力されたものや別のルーチンから呼び出されたものでも、ルー チン名に遭遇する度にルーチンをコンパイルします。 ルーチンが既に IDL のメモリにある場 合には、IDL はそれを実行します。 ルーチンがメモリにない場合には、IDL はパス定義の各 ディレクトリで( ファイル名.pro) を検索して、それを自動的にコンパイルします。 (IDL の パスに関する詳細は、IDL オンラインヘルプシステムの IDL_PATH を参照してください。) 注 IDL のルーチンにはすべて固有の名前があり、ユーザー作成のルーチンが同じ名前の場合には 競合する場合があります。 IDL でこのような競合が発生すると、自動コンパイルのメカニズム はユーザー作成のルーチンを無視し、IDL 固有のルーチンを使用します。 他のプログラム言語で書かれたコード IDL では、以下の方法を使用すると他のプログラム言語で書かれたルーチンを組み込むことが できます。 Java または COM オブジェクトとメソッドを Import Bridge を使用して呼び出します。 外部の共有可能なオブジェクトコードの他のタイプを呼び出します(例えば C または FORTRAN)。 詳しくは、CALL_EXTERNAL、LINKIMAGE、MAKE_DLL ルーチン と IDL オンラインヘルプシステムの External Linking を参照してください。 また、IDL オブジェクトをエクスポートして Java や COM プログラムで使用できるよう にすることも可能です。 詳しくは、インストールディレクトリ配下の/help/pdf/bridge.pdf を参照してください。 簡単な IDL プログラムの実行 IDL のプログラム機能を示すため、サーフェスで使用した標高データを使用しコンタカラーの 標高データを表示し、カラーバーも合わせて表示します。 1. IDL ワークベンチから、ファイル→ 新規→ IDL ソースファイルを選択して新しい IDL エディタを開きます。 2. 以下の PRO からのコードを新しいエディタに入力し、プログラムを作成します。使用する データは指定ファイルに記載されています。 65 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥elevbin.dat 例:プロシージャ(CONTOUR_COLORBAR.PRO) PRO CONTOUR_COLORBAR ; 変数 file へファイルを設定します file = DIALOG_PICKFILE(FILTER='elevbin.dat') ;dem 変数へ elevbin.dat をインポートします。 dem = READ_BINARY(file, DATA_DIMS=[64,64]) ; CONTOUR プロシージャを利用し、データを表示します。 ;RGB_TABLE で色を設定しています。 c1 = CONTOUR(dem, RGB_TABLE=30, /FILL, PLANAR=0, $ TITLE=’Contour and Colorbar’) ; 表示したデータの横にカラーバーを追加します。 cbar = COLORBAR(TARGET=c1, ORIENTATION=1, $ POSITION = [0.90, 0.2, 0.95, 0.75]) END 注 IDL コードでセミコロン(;) はコメント行が始まることを表します。 これによりコードがどの ような処理を行うのかが分かり、コードを理解するのに役立ちます(IDL 自身はこの行を実行 しません)。 注 行の最後にあるドル記号($) は IDL の継続文字です。 複数行にわたる長い IDL コマンドを入 力することができます。 66 IDL プログラムのコンパイルと実行 作業中のプログラムを表示するには、以下の手順に従います。 1. フ ァ イ ル → 別 名 保 管 を 選 択 し 、 「 contour_colorbar.pro 」 と 入 力 し て 、 フ ァ イ ル を contour_colorbar.pro として保存します。 2. ツールバーのコンパイルボタンをクリックまたは、実行→コンパイル contour_colorbar.pro を選択してコンパイルを行います(IDL パスにある場合は、自動的にコンパイルされます)。 3. ツールバーのコンパイルボタンをクリックまたは、メニューの実行→実行を選択し、プロ グラムを実行します。ウィンドウに結果として作成された画像が以下のように表示されま す。 注 作成したプログラムの実行中にエラーが発生した場合、コードに誤字が無いかどうか再度確認し てください。 注 プログラムを実行する度に必ずコンパイルする必要はありません。 実行ボタンをクリックする と、ファイルがコンパイルされていない場合は自動的にコンパイルされます。 コンパイルした 後でソースコードを変更した場合は、プログラムをもう一度コンパイルする必要があります。 67 ブレークポイントとデバッグ IDL ワークベンチには、コードからエラーを検索して修正するための強力なツールが装備され ています。 ブレークポイント ブレークポイントを設定するには、ブレークポイントを配置する行にカーソルを移動して、 Ctrl-Shift-B を押すか、実行→ 行ブレークポイントの切り替えを選択します。 エディタの左 側の余白部に青の点が表示されます。 また、IDL を停止するコードの行の横の左側余白をダブルクリックしてブレークポイントの オン/ オフを切り替えることもできます。 デバッグ デバッグは、コードのエラーや間違った動作を検出して修正する処理です。 IDL ワークベンチ には、プログラムの実行の監視、実行の停止と再スタート、プログラムのステップ実行、変数値 の検査と変更などのツールが用意されています。 デバッグ処理は、プログラム終了前に IDL が一時的に停止されている場合に開始されます。 IDL でコンパイルまたは実行のいずれかで強制終了するエラーが出た場合と、コードで設定し たブレークポイントが一時停止を引き起こした場合の 2 種類の一時停止があります。 コードの エラーすべてが実行停止を引き起こすとは限りません。問題の多くは、最後まで正しく実行され ているのに間違った結果を引き起こすコードの使用が原因です。 詳 し く は 、 詳 細 の 資 料 は イ ン ス ト ー ル デ ィ レ ク ト リ 配 下 の /help/pdf/building.pdf 内 の Debugging and Error-Handling を参照してください。 変数の値を表示する ブレークポイントが設定されているルーチンを実行すると、IDL はそのブレークポイントで実 行を停止します。 実行が停止したら、変数ビューを使用するか、またはエディタで変数上にマ ウスポインタを置いて、現在の実行範囲での変数の値を調べることができます。 68 プログラムの演習 二箇所で記録された温度データを使用し、温度を比較するバープロットを作成してください。ソ ースを作成後、コンパイルと実行を行い、結果を確認してください。 指定ファイル:C:¥Program Files¥ITT¥IDL¥IDLxx¥examples¥data¥plot.txt 1. 新規のプロシージャを作成します。 2. ASCII データの読込の演習で使用した、plot.txt の温度データを読み込んでください。 3. データを各変数へ読み込んでください。 4. 棒グラフで二時期のデータを表示し、比較します。棒グラフの表示方法は「BARPLOT」 ファンクションを使用してください。 5. 作成したプログラムをコンパイル、実行してください。 ヒント IDL のオンラインヘルプから、「BARPLOT」または「Bar Plots」と検索し、参照してくださ い。引数やキーワードなど、ファンクションの使用方法が記載されています。 69 演習問題:ソースコード PRO temp ;ファイルの読込 file = READ_ASCII(DIALOG_PICKFILE(FILTER='plot.txt'),DATA_START=2) ;各変数へと格納 time = file.field1[0,*] temp1 = file.field1[1,*] temp2 = file.field1[2,*] ;一つ目のバープロットを表示 b1=barplot(time, temp1, index=0,nbars=2, fill_color='blue') ;二つ目のバープロットを表示 b2=barplot(time, temp2, index=1,nbars=2, fill_color='pink', /overplot) END 結果画面: 70 Appendix A: PostScript での画像の書き出し PostScriptは印刷や表示する対象となるページに関して文字や図形をどの様に配置するか指定 できる、ページ記述言語です。 IDLはコマンド一つで画面以外へ二次元および三次元画像の表示(出力)指定ができ、その出力先 をPostScriptと設定することで、PSファイルへの書き出しが可能です。 IDL8.0以降でのグラフィック表示では、画面のフロッピーマークをクリックすることでプロッ トをPSファイルへ出力することが可能です。 以下はダイレクトグラフィックスでの PS ファイル出力先指定コマンドの例です。 コマンドラインへ順に入力してください。 コマンド例: ;出力先を PostScript ファイルに設定 IDL> SET_PLOT, ‘ps’ ;二次元画像描画 IDL> PLOT, FINDGEN(10) ;出力ファイルを閉じる (PS ファイルにフッターの書き込み) IDL> DEVICE, /close ;出力先を元に戻す IDL> SET_PLOT, ‘win’ 上記の例で作図したファイルはワークスペースと指定しているフォルダ配下に、”idl.ps”という ファイルを作成します。 出力先の設定の確認は、ワークスペースの 変数ウィンドウ→System→!D→NAME というフィ ールドを確認してください。作業後は出力先の設定をご使用のコンピュータのウィンドウに表示 されるよう、windowsの場合は’win’、Xウィンドウをご使用の場合は’x’と設定していただくこと を推奨いたします。 71 カラー変更 以下へ PS ファイルへの出力時にカラー変更をする場合の一例を記載いたします。根本的に、紙 への出力という前提で PS ファイルへと出力されるので、背景は白、データの表示が黒といった ように、コンピュータのウィンドウ上の表示とは反転した色で出力されます。 カラーテーブルを変更し、カラー設定を行った出力をすると、背景、軸の色もそのカラーテーブ ルの色を参照して表示します。しかし、思っている色で軸が表示されない場合や、背景の色がデ ータに影響している場合がありますので、カラーテーブルを参考に背景や軸の色を明示的に設定 してください。 コマンド例: ;PS 出力指定コマンド IDL> set_plot, 'ps' ;カラー設定 IDL> device, decomposed=0 IDL> loadct, 0 ;データ作成 IDL> a=dist(300,300) ;通常のデータ出力 IDL> contour, a, /fill ;カラーを反転させる設定 IDL> tvlct, r, g, b, /GET IDL> r = 255b-r IDL> g = 255b-g IDL> b = 255b-b IDL> tvlct, r, g, b ;カラーを反転させたデータ出力。背景とデータも逆の色を指定する。 IDL> contour, a, /fill, background=0, color=255 ;元のカラー設定へと戻し、データ出力 IDL> loadct, 0 IDL> contour, a, /fill 72 IDL> device, /close IDL> set_plot, ‘win’ 出力画像のアスペクト比変更 PLOT、SURFACE、CONTOUR、の fill などを使用してデータを表示する際に、データを画像 と同じアスペクト比で出力できない時がありますが、そのような時は明示的に出力のアスペクト 比を設定することが有効です。 コマンド例: ;ウィンドウに表示する IDL> window, xsize=500, ysize=500 IDL> plot, data ;PostScript 出力での指定方法 IDL> set_plot, 'ps' IDL> device, xsize=5, ysize=5, /inches IDL> plot, data ※通常の画面の比率は 7 × 5 inch です。 PS ファイルに出力する際のカラー設定や、フォントサイズ、ファイル名の設定など多くのキー ワードが用意されています。PS ファイル出力に関する詳細は、IDL オンラインヘルプシステム の About Device Fonts を参照してください。 73 Appendix B: FITS について 特定の分野で広く使用されているデータファイルフォーマットの中には、IDL の組み込みルーチ ンでは読み込み/書き込みができないものもあります。天文学で使用されているFITS(Flexible Image Transport System)フォーマットもその中の一つです。このフォーマットに対応するルー チンはIDL には組み込まれていませんが、FITS ファイルの読み込み/書き込み用のIDL ルーチ ンは、天文学関係のIDL ユーザーによって作成・共有されています。 FITS ライブラリは NASA のサイトから取得することが可能です。検索サイトから、 「IDL FITS」 というキーワードを使用して検索していただくか、ご参考までに、FITS ライブラリのダウンロ ードサイトや FAQ 等が行えるサイトの URL を以下に添付します。 http://idlastro.gsfc.nasa.gov/homepage.html ※上記サイトの IDL Astronomy Library download site のメニューからダウンロードが行えま す。 IDL への設定 FITS ライブラリをダウンロードし解凍してください。解凍後フォルダから、.pro ファイルを以 下フォルダへを配置してください。 C:¥Program Files¥ITT¥IDL¥IDLxx¥lib ※IDLxx の xx はバージョンを表しています。 Lib フォルダへ配置する方法が最も簡単な方法ですが、IDL の環境変数へ設定する方法もありま すので、以下へ記載いたします。以下手順が終了しましたら、IDL を再起動してください。 ワークベンチの設定手順: メニューの ウィンドウ→設定→IDL→パス 画面の「挿入」ボタンから、FITS ライブラリのフ ォルダへのパスを追加してください。 74
© Copyright 2024 Paperzz