...

公開 - 高知工科大学

by user

on
Category: Documents
21

views

Report

Comments

Transcript

公開 - 高知工科大学
卒 業 研 究 報 告
題
目
HROFFT 出力画像における
流星エコー自動計数プログラムの開発
指 導 教 員
山本 真行
助教授
報 告 者
学籍番号: 1070315
氏名: 埜口
和弥
平成 19 年 2 月 20 日
高知工科大学
電子・光システム工学科
目次
第1章
はじめに -------------------------------------------------------------------------------------------- 2
1.1
流星電波観測(Ham Radio Observation)について ------------------------------- 2
1.2
観測用ソフト HROFFT について -------------------------------------------------------- 4
1.3
開発の背景 -------------------------------------------------------------------------------------- 5
1.4
本研究の目的 ----------------------------------------------------------------------------------- 5
第2章
開発ソフトについて ----------------------------------------------------------------------------- 6
2.1
ソフトの概要 ----------------------------------------------------------------------------------- 6
2.2
流星エコーの判別方法----------------------------------------------------------------------- 8
2.3
流星以外のノイズ・エコーの判別と除去----------------------------------------------12
2.4
ソフト開発の経緯 ----------------------------------------------------------------------------17
第3章
meteor echo counter ver1.0 -----------------------------------------------------------------19
3.1
meteor echo counter の処理機能 --------------------------------------------------------19
3.2
GUI によるパラメータ設定画面 ---------------------------------------------------------23
3.3
meteor echo counter の処理結果例 -----------------------------------------------------26
第4章
目視計数との比較 -------------------------------------------------------------------------------29
4.1
高知工科大学の観測データを用いた比較----------------------------------------------29
4.2
他観測点の観測データを用いた比較----------------------------------------------------37
第5章
性能評価と考察 ----------------------------------------------------------------------------------42
第6章
結論 -------------------------------------------------------------------------------------------------45
謝辞
参考文献
付録
1
第1章 はじめに
1.1
流星電波観測(Ham Radio Observation)について
地球外から飛来する流星物質が超高層大気に突入するときに、高度 100km 付近で大気分
子との摩擦により発光する現象を流星という。流星が発光するときには、大気分子や流星
物質が正イオンと自由電子に分かれる電離現象が起こり、一時的に非常に高温・高密度な
電離ガス状態(プラズマ)を発生させる。こうしてできたプラズマは細長い円柱状の電離
柱になり、中の自由電子が電波を散乱する性質を持つ。この性質を利用して流星の観測を
行うのが、流星電波観測である(図1.1)。近年、国内ではアマチュア無線を用いた流星
電波観測(HRO= Ham Radio Observation)が盛んである。
流星電波観測は主にアマチュア無線帯の 53.750MHz の超短波が利用されている。この電
波は福井工業高等専門学校(前川公男氏)から 24 時間連続送信されており、継続的に観測
に利用できる。一般的に超短波(30MHz~300MHz の電波)は見通し内でしか伝搬されな
いため、送信局から遠方の観測地では受信は不可能である。しかし流星が発生した場合、
送信波が電離柱に散乱され、通常では受信できないような遠方の観測地でも受信可能にな
る。この電波をアンテナで受信し、観測周波数にチューニングした受信機にて音声信号に
変換、そして PC 付属のサウンドカードを利用してパソコンで観測データを取得する。近年
では自動観測用ソフトウェア HROFFT(大川一彦氏作成)を用いた連続観測が一般的にな
っており、全国 100 地点以上で流星エコー(流星飛跡により散乱され受信される電波)が
観測されている。
2
図1.1 流星電波観測概略図
流星が発生すると電波を散乱する電離柱が発生し、
通常受信できない遠方でも電波が受信可能となる。
3
1.2
観測用ソフト HROFFT について
現在 HRO で一般的に使われている観測用ソフト HROFFT(大川一彦氏作成)は、受信
機からの信号を 1 秒毎に高速フーリエ変換(FFT)し、周波数解析結果として画面表示す
るソフトである。このソフトは 1ch 版と 2ch 版が開発されている。2ch 版 HROFFT が出力
する画像を図1.2に示す。HROFFT の出力する観測データは 10 分毎に 1 枚の画像ファ
イルとして記録され、この画像のダイナミックスペクトル(スペクトルの時間変化)と受
信強度グラフから流星エコーが読み取れる。受信機側の設定で、受信電波 53.750MHz から
0.9kHz ほどずらして設定しているために、流星エコーは 0.9kHz 付近に出現するようにな
っている。このソフトウェアは広く流星電波観測者に普及しており、熱心な観測者は
HROFFT 出力画面上での目視計数により毎時間の流星エコー数をグラフ化し web 上に公
開している。
図1.2
2ch 版 HROFFT 出力画像の例
縦軸は周波数軸、横軸は時間軸になっている。流星エコーを判別するためにダイナミッ
クスペクトルと受信強度グラフを用いる。
4
1.3
開発の背景
高知工科大学では、2003 年 7 月から 6 チャンネル(東西南北および天頂 2 方向)の HRO
を導入し観測を行っている。この観測データによる HROFFT 出力画像は 6 チャンネル分必
要で、2ch 版 HROFFT を使用しても出力画像は 10 分毎に 3 枚となる。即ち 1 日で 432 枚、
1 ヶ月を 30 日とすると 12960 枚の画像となり、膨大な数の画像データが出力される。これ
らの画像データを目視で計数をするとなると多くの時間と労力が必要となり、単純作業で
はあるが相当消耗する作業である。また、計数者による個人差が出る可能性も否めない。
これらの要因を打開するために流星エコーを自動計数できる画像処理プログラムの開発を
開始した。
1.4
本研究の目的
本研究は、HROFFT 出力画像を用いて流星エコーを自動計数するプログラムの開発を目
的とする。また、HROFFT を用いた一般的な流星電波観測自動計数ソフトとしてのスタン
ダードとして、全国さらには世界の HRO 観測者へ普及することを念頭においている。
5
第2章 開発ソフトについて
2.1
ソフトの概要
本プログラムは、HROFFT が出力する画像ファイル(png 形式)におけるダイナミック
スペクトル(ソナグラム)上に視認可能な流星エコーを自動判別し、流星エコー数を自動
で数えることができるプログラムである。ダイナミックスペクトル上には、様々なノイズ
が現れる。その原因は、観測環境周辺の電化製品が出す電磁波や自然に発生している雷な
どが発する電磁波による直接的干渉ノイズもあれば、流星エコーと同様に、何らかの散乱
体による散乱波を受信することで、流星以外によるエコーとして捉えられるものもある。
主には、観測点と送信点の間を通過する航空機などの人工物が散乱ノイズの原因であるが、
地球電離層(高度約 80km 以上のプラズマ化した大気)による自然現象の散乱を受け長時
間の激しいノイズとなる場合もある。従って本ソフトでは、種々のノイズに対応して流星
エコーのみを自動判別することが大きな目的であり、受信環境の違いによる受信感度やノ
イズ受信に対して、閾値や変数のパラメータを個々に変更できる仕様とした。パラメータ
を調整していけば、より明確に流星を数えることが可能となる。さらに追加オプションと
して、流星エコーの計数グラフを自動作成できる機能を加えた。
本プログラムのプロトタイプは 3 年生の学生実験として開発を開始した。現在にいたる
までプログラムに少しずつ手を加えていき、8 割程度の一致率を持ち始めたため、2006 年
8 月に開催された第 47 回西はりま流星会議にて参加者にα版を公開し、流星電波観測者の
方々に CD 配布を行った。その後観測者からのフィードバックをいただきながらプログラ
ムの改良を行い、2006 年 10 月にβ版を web 上に公開した。そして GUI(Graphical User
Interface)と自動グラフ作成機能を追加し、2006 年 12 月に正式版として ver1.0 を web
上で公開した。以下では本研究で開発した現在のソフト「meteor echo counter ver1.0」に
ついて紹介する。
「meteor echo counter ver1.0」は開発言語として、IDL(The Interactive
6
Data Language)Ver.6.1(米国 ITT Visual Information Solutions 社製)を使用した。
7
2.2
流星エコーの判別方法
目視による計数作業では、観測者自身が HROFFT 出力画像で表示されるダイナミックス
ペクトルと受信強度グラフの両方を見て流星エコーを判別している。ダイナミックスペク
トルは時間軸と周波数軸を x、y とするため、信号の強弱については色の違いや濃淡で表現
している。HROFFT では図2.1のようなカラーバーを用いて、音に含まれる周波数成分
の強いところほど赤や黄の暖色系の色で表示され、弱いところほど青や黒で表示している。
受信強度グラフは下から1つ目のレベル線(10dB)を超えると水色から黄色へと変更され
表示される(図2.1)
。強度グラフで 10dB 以上のものを最低条件として流星エコーを数
えるようになっている。
図2.1
HROFFT 出力画像例
本プログラムでの流星エコーの判別方法として以下のような処理を行う。まずダイナミ
ックスペクトルで使用されるカラーテーブルを数値化し、その数値の閾値以上でなおかつ
強度グラフで 10dB 以上の箇所を 1 として白色に、それ以外を 0 として黒色に表示する 2
値化処理を行う。2 値化処理を行うと図2.2のような画像となる。ここまでは非常に単純
な処理で受信強度の強い部分を検出できるが、図2.2の大きな流星エコーの場合、流星
エコーを 1 個 1 個数えることができずに多く数える結果となる。以下では、流星エコーを
8
一塊として判別するための処理を行う。
図2.2
図2.1の例に対して 2 値化を行った画像(閾値=6)
流星エコーを判別するために、まず画像に検索をかけ白色の箇所を見つける。そしてそ
の地点の周囲に他の白色がないか探索を開始する。周囲の探索には上下左右各々の方向へ
のサブルーチンが用意されており、1 つの座標ごとで再帰処理を行っている。探索は図2.
3に示すような順番で行われ、探索した範囲は処理結果画像上に灰色で示される。この探
索範囲には制限をかけるための変数をプログラム内に用意しておき、白色の座標から上下
左右を基点として横に移動すると-2、縦に移動すると-1 され、その変数が 0 以下になる
とそれ以上進むことができずに元の地点に戻り、次の方向への探索に移るように設計した。
探索を縦長の菱形に行うのは、流星のドップラー速度がバラバラで、周波数(上下)方向
に広がりが見られるためである。
9
図2.3
探索順序と範囲
ここでは分かり易いように色を微妙に変えて表示しているが
実際には同じ灰色表示となっている
周囲探索中に白色を発見したら、図2.4のようにまた同じ要領で再探索を開始する。
その地点での上下左右全ての探索が終わると、再び元いた地点に戻り残りの方向への探索
を行って終了とする。
図2.4
再探索の例
探索範囲を灰色で示すようにしているが、近接して存在する他の流星エコーとの区別を
するために、図2.5のように灰色が被らないように工夫している。計数結果には影響し
ないが、処理結果画像で流星エコーを確認するためにこの機能を付加した。探索範囲は幾
度か検証を行い導き出した結果であり、例外的な形状の流星エコーが入らなければ問題な
10
く機能すると考えられる。
図2.5
探索範囲が被らない様子
処理が終わると図2.6に示すような灰色で囲まれた一塊の模様が浮かび上がる。この
一塊ごとに「1 個」の流星エコーと数える判別方法により、流星エコーを明確に数えること
が可能となる。探索作業では再帰ループを用いているために、プログラムでの処理時間の
大半がここで使われている。
図2.6
探索処理後の画像
11
2.3
流星以外のノイズ・エコーの判別と除去
流星電波観測では流星エコーだけでなくあらゆる電波雑音を拾うため、プログラムでは
ノイズの判別・除去を行なわなければ流星エコーを明確に判別することはできない。その
ために行う各種ノイズ・エコーについての対応を以下に記す。
電離層の状況により、激しいノイズがダイナミックスペクトル上を全て覆うような場合
がある。流星エコーが判別できないほどの激しいノイズが入った場合は、その画像はカウ
ント処理を省いて該当する 10 分間の流星エコー数を 0 とする。ダイナミックスペクトルの
値全てを足し合わせて、ある閾値を超えるとカウント処理を行わない仕様となっている(図
2.7)。
図2.7
激しいノイズ干渉状態(左:処理前、右:処理後)
電子機器などが出すノイズが入る場合は、比較的多く同じ周波数軸に長時間のノイズが
入ったり、周用電源周波数(60Hz)毎に現れたりすることがある。このような場合は、ダ
イナミックスペクトル上で、それぞれの周波数で時間方向に数値を足し合わせ、設定した
閾値を超えるとノイズと判別し、横ライン上で消し去る処理をする(図2.8)
。
12
図2.8
ラインノイズ(左:処理前、右:処理後)
観測点の近傍で雷が激しい場合などに、瞬間的に周波数軸方向に縦ラインが入るノイズ
がある。このような場合は、上記のラインノイズとは逆に、ダイナミックスペクトル上の
それぞれの時間に対し周波数軸方向の数値を足し合わせ、閾値を超えるとノイズと判別し、
縦ライン上で消し去る処理をする(図2.9)
。
図2.9
雷ノイズ(左:処理前、右:処理後)
送信局より概ね 200km 以内の観測点で上空を飛行機などが通過する場合、ドップラーシ
フトの曲線を描いて図2.10のような飛行機エコーが計測されることがあり、ソフトに
よる処理が最も困となる。飛行機は観測点に近づいた後離れるため、周波数は高い側から
低い側に見えるのが普通である。一方でロングエコーではこのようなドップラーシフトが
ほとんどなく一定であり、この差を判別する。まず図2.10の黄色の点で表された3点
13
(左点、中点、右点)の座標を取る。左点は一塊での白色の箇所の左下の座標、右点は右
下の座標を取り、中点はその二つの座標で囲まれた内の真ん中の時間軸にある一番下の白
色の箇所の座標を取る。そしてその左点と右点から周波数帯域と継続時間と傾きを求め、
誤った判別をしないために左点と中点、中点と右点からも傾きを求め、左点と右点からの
傾きとの差を計算する。各々が閾値を満たしていたら飛行機エコーだと判別する。左点と
右点だけでなく中点を取る理由は、ロングエコーを飛行機エコーと誤って判別をしないた
めである。図2.11のようなロングエコーが入っていた場合左点と右点だけで傾きを求
めると飛行機エコーと判別してしまう可能性がある。しかし中点を取って各々の傾きを求
め、左点と右点からの傾きとの差を計算することにより、その間違いを回避することがで
きる。
図2.10
飛行機エコー判別要素
14
図2.11
飛行機エコーと誤判別しやすいロングエコーの座標点の例
飛行機エコーと判別したら、図2.12のように結果画像上で飛行機エコーの左上と右
下に緑色の縦ラインが表示される。また、飛行機エコーと逆の傾きを持ったエコーはノイ
ズとして判別するようになっている。飛行機エコーが入っているとその画像は、流星エコ
ーを誤って判別しやすいため、飛行機エコーなどの傾きを持ったノイズが何個か入ると、
その画像の流星エコー数は 0 にリセットする機能も持っている。
図2.12
飛行機エコーの判別例(左:処理前、右:処理後)
大規模な流星が出現するとロングエコー(流星エコーが数秒間以上続くもの)として複
雑な形状のスペクトルが観測される(図2.13)。この場合はノイズではなく流星エコー
15
なので流星エコー数に加算される。一塊の流星エコーの継続時間が閾値を超え、尚且つ飛
行機エコーでない場合、ロングエコーと判別する。結果画像上で一塊の流星エコーの左上
に記した数値がロングエコーの秒数となる。ロングエコーと判別する閾値の秒数は、パラ
メータ設定の数値を書き換えることにより任意で変更することができる。本研究では、ロ
ングエコーの自動判別について、従来のプログラムに比べ飛躍的に向上させることに成功
した。
図2.13
ロングエコー(左:処理前、右:処理後)
16
2.4
ソフト開発の経緯
本開発ソフトはα版の配布から始まり、全国の HRO 観測者からのフィードバックをいた
だきながら、β版、ver1.0 と進化してきた。本節では開発ソフトの経緯を示す。
α版は、ある程度のノイズ除去、飛行機エコーとロングエコーの判別、流星エコー数と
ロングエコー数の自動計数を行い、計数結果のテキストと処理結果画像を出力するプログ
ラムであり、目視計数とのある程度の一致率を持ったソフトとなった。そのため 2006 年 8
月の流星会議にて紹介し(埜口他、2006)、全国の観測者に試しに使用していただきフィー
ドバックを得ることで、より完成度の高いソフトを目指した。α版を配布することにより、
HROFFT にはバージョンによって3つのカラーバー形式があり、それぞれ色が微妙に違っ
ていることがわかった。このままでは 3 分の 2 の確率で動作しないため、β版では各々の
HROFFT のバージョンにも対応できる仕様となった。HROFFT 出力画像は png 形式で出
力されるが、α版では bmp 形式しか読み込めず、わざわざ画像変換ソフトで全て bmp 形
式に変換してからプログラム処理を行っていた。開発者がこのソフトを使用する場合は大
して苦にならない作業であったが、配布を行った観測者からは改善要望の声をいただいた
ため、β版ではこの点を改良し png 形式でも読み込めるように対応した。また観測データ
中に欠測時間が含まれる場合、データを連続的に処理すると処理結果テキストでは欠測時
間が判別できないため、グラフ化する際に問題があるという意見をいただいた。そのため
欠測時間を自動計算し結果テキストに反映できるようプログラムの改良を行った。その他、
小規模なエラー修正、新規パラメータの追加、結果テキスト等の改良も行い、2006 年 10
月にβ版を web 上に公開するに至った。
β版では目視計数との一致率が向上し、png 形式の画像を読み込めることからα版より使
いやすいソフトとなった。しかしソフトの設定にテキストファイルを使用していることか
ら、数値等がどのパラメータに対応しているのかが分かりにくく、一般的なソフトとして
は使い難いといえた。そこで ver1.0 では GUI(Graphical User Interface)を追加し、GUI
17
画面上でパラメータを変更できる仕様とし、使い易いソフトとなった。またβ版までは処
理結果テキストから Microsoft エクセルなどのソフトを用いて手動でグラフを作成してい
たが、極力手間を省くために自動でグラフを作成できるようにプログラムを書き加えた。
このグラフは 1 時間毎の計数を行うたびに上書きされるため、プログラム処理の途中経過
を知る良い手段ともなった。その他β版で出たエラー修正、新規パラメータの追加を行い、
本開発ソフト「meteor echo counter」の正式版として 2006 年 12 月 12 日に ver1.0 の web
公開に至った(図2.14)。
図2.14
公開 web サイト
18
第3章
3.1
meteor echo counter ver1.0
meteor echo counter の処理機能
本プログラムは以下のような処理機能を持っている。
・ 1ch 版 HROFFT と 2ch 版 HROFFT の両方への対応
観測ソフト HROFFT は大川氏により 1ch 版と 2ch 版が開発され普及しているため、
両方の HROFFT 出力画像に対応している。
・ 様々なノイズの判別・除去(2.3 節参照)
ノイズ(雷、ライン、飛行機等)の判別・除去を行う。また、流星エコーをカウン
トできないほどの激しいノイズが入った場合、その画像はカウント処理を省いて流星
エコー数を 0 とし、フラグを立てて区別する。
・ 流星エコー数カウント
画像スペクトルのノイズ除去を行ったあと、ダイナミックスペクトルと受信強度グ
ラフの値を読んで、画像上で流星エコーを1つの塊として判別し、流星エコーを数え
る(ロングエコーも含む)。計数グラフでは赤の折れ線グラフで表示される。
・ ロングエコー数カウント
ロングエコーは流星群の活動度のうち特に大きな流星数の判断材料になるため、ロ
ングエコーだけの数を数える。計数グラフでは緑の棒グラフで表示される。
・ パラメータ設定機能
GUI 上でパラメータや各種設定をカスタマイズでき、個々の環境にあった設定に
変更できるようになっている。3.2節にて詳しく述べる。
・ 処理結果テキスト、処理結果画像、計数グラフ作成
処理結果テキストには流星エコー数や各種パラメータ設定確認のために必要な値
を書き込んで出力する。処理結果画像は、処理前の HROFFT 出力画像を元にしたも
19
ので、ソフトがどのような処理をしたか視覚的に理解できるようになっている。そし
て計数グラフ作成では 1 時間毎の流星エコー数(赤線)とロングエコー数(緑の棒グ
ラフ)をグラフ化して画面表示する。
・ 処理結果テキスト等の失測時間の自動調整
処理をかける HROFFT 出力画像 1 ヶ月分の内に、停電で1日分の観測データを取
得できなかったといった欠測時間があれば、1ヶ月分の連続処理をかけてもそれを判
断し、どれだけの欠測があるかを計算して結果に応用する。例えば計数グラフの場合、
元データに1日分の欠測があれば、1 日分飛ばして計数グラフが自動プロットされる。
・ 周波数変動の自動追尾機能(図3.1参照)
HROFFT 出力画像は、受信機側が気温の影響を受けて回路定数が変化して、通常
は 900Hz 付近に現れる流星エコーの周波数帯域が出力画像上で微妙に上下変動する
ことがある。本機能は、これを自動追尾するために、直前に判別された流星エコーの
周波数値を何個分か記録しておき、平均を取って流星エコーの出る周波数帯域を限定
する。この機能により、他の周波数帯域に出るノイズを除去することが可能となる。
処理結果画像上では緑の横ラインで挟んだ部分が追尾周波数帯域である。
20
図3.1
周波数変動の自動追尾機能の結果画像(上:通常、下:自動追尾)
Meteor echo counter のプログラム処理の流れを簡単なフローチャートにして図に示す。
なお本プログラムでは、指定フォルダ内の全ての画像をファイル名(通常 HROFFT では出
力画像は、観測点コード、年、月、日、時、分の順に名づけられている。ex,KN0702201010.png)
をソートして順に処理していく仕様となっている。
21
図3.2
フローチャート
22
3.2
GUI によるパラメータ設定画面
Meteor echo counter ver1.0 はパラメータや各種設定を変更するための GUI(Graphical
User Interface)を備えている。GUI 画面の例を図3.3に示す。上記の記入欄には処理を
かけたい HROFFT 出力画像群の保存元ディレクトリ(フォルダ)のパス(場所)や、処理
結果画像等の保存先ディレクトリのパスを指定する。左側のチェックボックスでは
HROFFT が 2ch 版か否か、処理結果画像や計数グラフを作成するか否か等を選択すること
が可能である。カウントを開始して処理を行っているときには、GUI 画面上に 1 時間分の
流星エコー数や、何枚目の処理をしているか等の情報が最上部および左下部分に順次表示
される。
図3.3
GUI
次に図3.3の右下にある 21 種類のパラメータについて説明する(図3.4参照)。こ
れらのパラメータはプログラム内で使われる重要な閾値や変数の設定値を表している。こ
れらの数値を、各観測者の受信環境ごとに調査し若干の試行を経て変更することにより、
正確に計数することができるようカスタマイズされる。ここでは 1ch 用のパラメータにつ
23
いて、以下に詳しく示す。
図3.4
1ch 用パラメータの設定例
1 全体ノイズの閾値
2.3 節の激しいノイズ干渉状態で使われる閾値。
2
2.2 節の流星エコー判別のダイナミックスペクトル上
2 値化の閾値
の階調閾値。
3 横ラインノイズの閾値
2.3 節のラインノイズ除去で使われる閾値。
4 縦ラインノイズの閾値
2.3 節の雷ノイズ除去で使われる閾値。
5 飛行機エコーの幅の長さ
2.3 節の飛行機エコー判別で使われる閾値。
6 飛行機エコーの傾きの閾値
2.3 節の飛行機エコー判別で使われる閾値。
7 飛行機エコーの中間傾許容
2.3 節の飛行機エコー判別で使われる閾値。
8 飛行機エコーの周波数帯域
2.3 節の飛行機エコー判別で使われる閾値。
9 エコーの探索範囲
2.2 節の流星エコー探索に使われる数値。この数値を上
げると探索範囲が広くなる。
24
10
周波数帯域限定個数
3.1 節の周波数変動の自動追尾機能で使われる数値。開
始後この数値分まで計数したら周波数帯域の自動追尾
を開始する。
11
周波数帯域上下範囲
3.1 節の周波数変動の自動追尾機能で使われる数値。こ
の数値を上げるとエコーを取る周波数帯域が広くなる。
12
X の始め位置
画像上のダイナミックスペクトル座標範囲指定。
13
X の終わり位置
画像上のダイナミックスペクトル座標範囲指定。
14
Y の始め位置
画像上のダイナミックスペクトル座標範囲指定。
15
Y の終わり位置
画像上のダイナミックスペクトル座標範囲指定。
16
強度グラフの 2 値化閾値
2.2 節の強度グラフ上での流星エコー判別の強度[dB]の
閾値
17
強度グラフの 0dB の位置
強度グラフの 0dB の座標指定。
18
ロングエコーの長さ閾値
2.3 節のロングエコー判別のための閾値。
19
傾きエコーのノイズ認定数
2.2 節の傾きを持ったエコー(飛行機エコーと逆の傾
き)が何個入るとリセットを行うかを決める閾値。
20
前回のラスト処理画像
前回計数を行ったときの最後に処理した画像の情報。
21
限定周波数位置
前回計数を行ったときの最後に処理した画像の限定周
波数帯域の情報。
25
3.3
meteor echo counter の処理結果例
2ch 版 HROFFT 出力画像の処理結果テキストを図3.5に示す。処理結果テキストには
流星エコー数や各種パラメータ検証に必要な値が処理ファイル毎(10 分毎)に書き込まれ
出力される。また、1 時間毎に流星エコー数を足し合わせた処理結果も同時に別テキストに
出力される(図3.6)
。HROFFT 出力画像に欠測時間があれば、不足する枚数分だけ nodata
と書き込まれる(図3.7)。
図3.5
図3.6
結果テキスト
1 時間毎の結果テキスト
26
図3.7
欠測時間があった場合
2ch 版 HROFFT 出力画像の処理結果画像の例を図3.8に示す。画像左上には白字で
meteor echo counter のバージョン名、その横に計数された流星エコー数が表示される。流
星エコーは灰色で囲まれた一塊で 1 個として判別する。緑の横ラインで挟まれた周波数帯
域が流星エコーとして判別する周波数帯域で、その外側に出た赤色のラインはノイズを省
いた痕跡である。またロングエコーには流星エコーの左上に白字で秒数が表示される。
図3.8
処理結果画像の例
27
自動作成される流星エコーの計数グラフを図3.9に示す。赤色の折れ線グラフが 1 時
間毎の流星エコー数(左側の縦軸に対応)で、緑色の棒グラフが 1 時間毎のロングエコー
数(右側の縦軸に対応)である。計数グラフは 10 日分ごとに表示され、左上に年月が表示
される。このグラフにより流星出現数の日変化、流星群活動による変化が明瞭になる。ま
たグラフはプログラム処理を行っているときに随時更新されて表示されるため、現在どの
程度まで処理できたのかが一目で確認できる他、将来的には準リアルタイム処理によりグ
ラフを自動更新し、web 上に upload することを念頭においた仕様である。
図3.9
流星エコーの計数グラフの例
28
第4章
4.1
目視計数との比較
高知工科大学の観測データを用いた比較
2004 年 12 月に高知工科大学で観測した 6ch-HROFFT の出力画像を用いて、目視計数と
プログラム計数との比較を行う。12 月を比較対象とするのは、毎年 12 月 13 日頃にふたご
座流星群が到来し流星エコー数の大きな変動が明確に見られるからである。目視計数では
強度グラフで 10dB 以上のエコーを流星エコーとして計数をする。まず全体的にノイズの混
入が少ないチャンネル(図4.1)を用いて計数をする。
図4.1
ノイズが少ないチャンネルの例
プログラム計数の結果から目視計数結果との比較を行い、その様子からパラメータの数
値を変更する。同じ観測データを用いて何度か繰り返し計数を行うことにより、最適と考
えられるパラメータの数値を導きだし、目視計数との一致率を調査した。パラメータの変
移を図4.2に、それに伴う目視計数との一致率を表4.1に示す。比較を行った 1 ヶ月
分の HROFFT 出力画像数は 4464 枚である。表4.1の目視とのエコー総数差は目視計数
での総エコー数を基準として、プログラム計数の総エコー数との差を求めたものである。1
枚当たりの一致率は目視とプログラムで 1 枚の画像における計数の値が完全に一致した枚
数から求めた。誤差 1 個以内の一致率は、目視とプログラムで差が 1 個以内のものを一致
したと仮定し、その枚数から一致率を求めた。これは人が目視で計数をするために、誤っ
29
て計数してしまう可能性を考慮して比較を行った結果である。番号はその順番にプログラ
ム計数をしたという意味である。
図4.2
パラメータの変移図
表4.1
一致率比較
目視とのエコー
1枚当たりの
誤差 1 個以内の
誤差 2 個以内の
総数差(個)
一致率(%)
一致率(%)
一致率(%)
①
+1077
81.00
96.48
98.84
②
+72
94.44
99.46
99.82
③
+185
94.33
99.32
99.71
④
+253
95.12
99.13
99.64
⑤
+148
94.87
99.31
99.82
番号
1 番目は初期パラメータでプログラム計数をした。目視計数は 10dB 以上の流星エコーを
数えているが、プログラムでは 9dB 以上を計数している。よって目視計数と比べ流星エコ
30
ー数が格段に増えているのがわかる。2 番目ではこの数値を 10dB に変更し、余計なノイズ
を極力省くためにダイナミックスペクトルの閾値を一段階上げ、周波数帯域の上下範囲も
狭めると一致率が格段に上がった。高知工科大学の観測データでは飛行機エコーが入らな
いために、3 番目では飛行機エコーの閾値を上げて飛行機エコーの判別が行われないように
設定した。4 番目は周波数限定個数を変え、ダイナミックスペクトルの閾値も元に戻して計
数を行ってみた。すると画像 1 枚当たりの一致率が最高値を示した。周波数帯域限定個数
は周波数帯域の自動追尾機能に関するものなので、この数値を上げると周波数帯域の自動
追尾が緩やかに移行するようになる。処理結果画像をチェックすると緩やかになってはい
るが、特にエコー数の変化は見られない。すなわちこの一致率の要因はダイナミックスペ
クトルの閾値によるものだと考えられる。5 番目では周波数帯域限定個数を元に戻して、周
波数帯域の上下範囲を少し狭めて計数を行った。結果をみると 2 番目から 5 番目にさほど
の変化は見られないが、総合的にみると 5 番目が一番良い結果だと考えられる。
5 番目にプログラム計数を行った結果を用いて目視計数との比較グラフを図4.3、図4.
4、図4.5に示す。1 時間毎の流星エコー数が左縦軸、ロングエコー数が右縦軸で、横軸
が時間である。赤の折れ線と緑の棒グラフで示されるのが目視計数で、M・E・C と記され
た青の折れ線と橙の棒グラフで示されるのがプログラム計数となっている。誤差 1 個以内
の一致率で 99%以上となっており、meteor echo counter ver1.0 は高知工科大学の観測デ
ータに関しては十分な性能の自動計数ソフトウェアであると判断できる。
31
図4.3
高知工科大での観測データを用いた比較グラフ(1~10 日)
図4.4
高知工科大での観測データを用いた比較グラフ(11~20 日)
32
図4.5
高知工科大での観測データを用いた比較グラフ(21~31 日)
(M・E・C:meteor echo counter)
グラフを見ると 29 日にプログラム計数で流星エコーを多く取りすぎているのがわかる。
これは流星エコーによく似たノイズを計数してしまったのが原因である。横ラインノイズ
として省きたい所ではあるが、失敗に終わっているのがわかる(図4.6)。
図4.6
流星エコーと間違って計数したノイズ(左:処理前、右:処理後)
33
次に図4.2で導き出したパラメータ 5 をそのまま使い、ノイズが多く混入しているチ
ャンネル(図4.7)を用いて比較を行う。目視計数との一致率を表4.2に示す。
図4.7
ノイズが多いチャンネルの例
表4.2
ノイズ多
一致率比較(ノイズ多)
目視とのエコー
1枚当たりの
誤差 1 個以内の
誤差 2 個以内の
総数差(個)
一致率(%)
一致率(%)
一致率(%)
―102
85.82
97.74
99.42
ノイズが混入していることから一致率は低下したが、誤差範囲内の結果だといえる。こ
のプログラム計数結果と目視計数との比較グラフを図4.8、図4.9、図4.10に示
す。
34
図4.8
高知工科大での観測データを用いた比較グラフ(ノイズ多、1~10 日)
図4.9
高知工科大での観測データを用いた比較グラフ(ノイズ多、11~20 日)
35
図4.10
高知工科大での観測データを用いた比較グラフ(ノイズ多、21~31 日)
36
4.2
他観測点の観測データを用いた比較
大阪で観測を行っている上田昌良氏から 2004 年 12 月の 1 ヶ月間の 1ch 版 HROFFT 出
力画像を提供いただき、目視計数とプログラム計数の比較を行った。観測を行っている場
所は空港から近いために、飛行機エコーが大量に混入している様子がわかる(図4.11)。
図4.11
上田氏の観測点での観測データ例
4.1 節の比較と同様に、プログラム計数と目視計数との比較を行い、その様子からパラメ
ータの数値を変更し、何度か繰り返し計数をすることにより最適と考えられるパラメータ
の数値を導く。パラメータの変移を図4.12、図4.13に、それに伴う目視計数との
一致率を表4.3に示す。
37
図4.12
パラメータ変移の図その1
図4.13
パラメータ変移の図その2
38
表4.3
一致率比較(他観測点)
目視とのエコ
1枚当たりの
誤差 1 個以内
誤差 2 個以内
誤差 3 個以内
ー総数の差(個)
一致率(%)
の一致率(%)
の一致率(%)
の一致率(%)
①
+5754
14.52
32.26
48.32
61.72
②
―2192
22.20
46.46
64.20
76.81
③
―2636
25.92
50.18
67.52
79.14
④
+2134
26.61
51.86
68.86
80.80
⑤
+1151
27.22
52.82
70.45
82.10
⑥
―1790
27.12
55.15
73.79
84.95
⑦
―119
27.06
53.90
71.86
83.31
番号
プログラムには飛行機エコーを計数から省く機能が入ってはいるが、余りにも大量の飛
行機エコーが混入しているために、誤ってロングエコーと判別している。パラメータでは
飛行機エコーを省くために一定以上の継続時間を持っているものを全てノイズとして除去
するように設定していった。最初は初期パラメータでプログラム計数をして、その後ノイ
ズをより除去できる設定にし、飛行機エコーをできるだけ省くために飛行機エコー関連の
閾値を低下させていった。表4.3からするとエコーの総数差は大幅に離れてはいるが、
総合的に見て一致率が一番良いのは 6 番目だと考えられる。
6 番目にプログラム計数を行った結果を用い、目視計数との比較グラフを図4.14、図
4.15、図4.16に示す。
39
図4.14
他観測点での観測データ(上田氏)を用いた比較グラフ(1~10 日)
図4.15
他観測点での観測データ(上田氏)を用いた比較グラフ(11~20 日)
40
図4.16
他観測点での観測データ(上田氏)を用いた比較グラフ(21~31 日)
目視計数とプログラム計数で、プログラム計数の流星エコー数が全体的に少ないのがグ
ラフからわかる。この原因として、飛行機エコーと流星エコーが重なってしまい、飛行機
エコーに流星エコーが吸収され計数が行われていないことが図4.17から読み取れる。
図4.17
判別の難しいエコー例(左:処理前、右:処理後)
41
第5章
性能評価と考察
高知工科大学の HROFFT 出力画像を用いた比較では、ノイズの有無に関わらず精度の高
い一致率を示すことができた。グラフで見る流星エコーの一致では、完璧とまではいかな
いがほぼ同じといえるものになり、自動計数による流星群活動グラフのリアルタイムモニ
タの提供に道を開く結果を得た。大きく誤っている点では、4.1 節で最初に計数をしたチャ
ンネルの、29 日付近に出たノイズ(図4.6参照)が挙げられる。このノイズは流星エコ
ーによく似ていることから誤った判別を行ってしまった。周波数帯域が通常の流星エコー
が出る範囲から多少ずれてはいるが、形そのものに変わった様子は見られない。このノイ
ズの特徴は違う周波数帯域に同じようなエコーが見られることである。このことから、エ
コーを見つけた後に周波数軸の上下方向を調べて、同じようなエコーを見つけることでノ
イズとして判別できると考えられる。これは流星エコーを判別するたびに行わなければい
けないため、処理時間が大幅に延びることが考えられる。しかしこのエコーは時間軸に長
く滞在することから、大きな誤計数を招く可能性があり、対策プログラムを書き加える必
要があるといえる。全体的なカウント性能としては十分実用可能な性能となった。
ロングエコーの数値による比較は行わなかったが、グラフから察すると稀な現象のロン
グエコーの一致は、間違いが目立つという結果になった。元々の数が少ないだけに正確な
一致を示したいエコーである。ロングエコーを正確に一致させるためには、飛行機エコー
などのノイズをうまく除去することができれば可能となる。ノイズには、まだ除去できて
いないものがあるため、少しずつノイズ対策を立てていくしか方法がない。
他観測点での比較結果では伊丹・関西国際空港近くの観測データ(大阪府羽曳野市)だ
ったために、飛行機エコーのノイズが非常に多く入っており、一致率が大幅に低下した。
これは HROFFT 出力画像上で飛行機エコーと流星エコーが重なって表示され、流星エコー
の計数ができなかったのが原因といえる(図4.17参照)。目視計数では飛行機エコーと
42
流星エコーが多少重なっても計数を行うことができる。しかしプログラム計数では判別す
る機能を取り入れておらずにこのような結果となった。重なった状態からの流星エコーの
判別はとても難しく、はっきりとした改善策が見うけられない。また飛行機エコーはドッ
プラーシフトで表れる傾きを計算し、ノイズとしての判別を行っているがこの観測データ
では傾きを持たない(ドップラーシフトしない)飛行機エコーも多数混入しているため、
傾きで判別する機能が役に立たない場合も出てくる。そのためノイズの誤判別を招いてし
まい、ロングエコーの計数についてはまったく信憑性を持たないといった結果になった。
対策としては、飛行機エコーは周波数帯域幅をあまり持たない細い線を描くので、その幅
の閾値を新しく判別要素に加えるのが考えられる。また観測を行っている受信機の設定上
で周波数軸に対するドップラーシフトの方向が逆向きになっており、飛行機エコーで起こ
るドップラーシフトも高知工科大学での例とは上下逆になってしまい、ノイズとして判別
はするが飛行機エコーとして判別はしていない。他の観測点でもこのようなことがいえる
ため、受信機の設定にも対応できるようプログラムを書き加える必要がある。この受信環
境では、本プログラムで流星エコーを正確に計数するのは難しいが、日周変化だけを見れ
ば一致しているといえる。
今回設定したパラメータではノイズを極力計数しないように、周波数帯域をかなり狭め
て周波数制限を行った。これによりノイズを誤って計数する可能性は減るが、ノイズを流
星エコーとして計数した場合、全く流星エコーが出ない周波数帯域に移動して流星エコー
が出る周波数帯域に戻れなくなる可能性がある。今回の計数では問題なくいったが、ノイ
ズ対策が完璧でない状態では、計数処理が全くできなくなってしまう危険性を含んでいる。
そのため流星エコーが出る周波数帯域から外れてしまう場合を考え、2、3 時間分の処理を
行っても計数結果が 0 であれば、周波数自動追尾機能を一旦初期化する機能をプログラム
に書き加える必要があるといえる。
今回の比較で行ったパラメータの設定は受信環境ごとに行う必要がある。しかしこのパ
43
ラメータの設定には開発者にしかわからない不透明な部分も存在し、一般の方が全てを最
適に行うのは難しいと考えられる。そのためこのパラメータの数値をわかりやすく変更で
きるツールが必要になってくる。結局は試行錯誤の繰り返しになるだろうが、簡単にパラ
メータの検証ができるようにしたい。
使い易さについては GUI が付いているために問題はないと考えられるが、一度処理を開
始させると途中で止めることができずに、止めるには強制終了するしかないのが 1 つの問
題といえる。プログラムによる1ヶ月分の計数処理を行うと処理時間は4時間程(動作環
境:Pentium4、2.4GHz、メモリ 496MB)になるためストップ機能がほしいところである。
なお強制終了を行っても、再度ソフトを起動すれば問題なく稼動させることができる。
44
第6章
結論
目視計数とプログラム計数の比較結果から、本研究で開発したソフトは高知工科大学の
HROFFT 観測データでは 95%以上の一致率を達成しており、十分実用可能な精度をもつと
言える。流星電波観測の HROFFT 出力画像における流星エコー自動計数プログラムとして
のスタンダードを目指したが、問題点がいくつか確認できたため、全ての受信環境でこの
ソフトを使用することは難しいといえる。また今まで目視計数を行ってきた歴史が存在す
るために、プログラム計数に切り替わるにはもう少し時間が必要だといえる。本ソフトは
現在 Web 上で公開しており、フィードバックも来ていることから普及は進んでいるようで
ある。開発したソフトを実際に使用していただき、評価をいただくというのはとても遣り
甲斐がある開発だった。今後は課題となったノイズへの対応プログラムを考案し、全国・
世界各国どこの観測点でも使用できるソフトにしたい。また Web プログラムと連携させネ
ット上に計数グラフを自動更新して、流星出現状況の自動監視プログラムへと発展させた
い。開発者の能力が及ばない事象も多々存在するが、今後も開発を続けていきたいと考え
ている。
45
謝辞
本研究を行うにあたり、多くの方々の恩顧が思われますが、特に高知工科大学電子・光
システム工学科山本真行助教授にはいつもあたたかくご指導ご鞭撻を賜り、心から感謝す
ると共に深く御礼申し上げます。また電子・光システム工学科の先生方には様々な場面で
お世話になり有難うございました。来年度より修士課程に進学予定であり、今後ともご教
授のほどよろしくお願いいたします。また本ソフトウェア開発にあたり、観測データや適
切なご意見を頂いた HRO 観測者の方々に、特に本論文中のデータ提供を頂いた上田昌良氏
に深く御礼申し上げます。
46
参考文献
・中村卓司監修
RMG 編集委員会編著(2002) 流星電波観測ガイドブック
・堀内洋孝 平成 17 年度高知工科大学卒業論文
CQ 出版社
流星電波観測における干渉計システムの
基礎開発①
・岡本悟郎 平成 17 年度高知工科大学卒業論文
流星電波観測における干渉計システムの
基礎開発②
・濱口美子 平成 18 年度高知工科大学卒業論文
流星電波干渉計の較正実験と流星①表示
ツールの開発
・Research Systems Inc
IDL 6.0 July 2003 Edition
・Research Systems Inc
IDL 5.4 September 2000 Edition
47
Getting Started with IDL
Building IDL Applications
付録
・本開発ソフト「meteor echo counter ver1.0」の公開サイト
http://www.ugs.kochi-tech.ac.jp/070315w/index.html
・目視とプログラム計数の比較を載せていただいている齊藤直也氏のサイト
http://www7a.biglobe.ne.jp/~fullmoon/index3.htm
・取り扱い説明書
------- 「HROFFT 出力画像における流星エコー自動計数プログラム」 取り扱い説明書 --------------------------
最終更新:2006/12/12
このプログラムは「HROFFT 出力画像における流星エコー自動計数プログラム」
meteor echo counter Ver 1.0 です。
本プログラムは、米国 ITT Visual Information Solutions 社の
IDL(The Interactive Data Language)Ver.6.1 により開発されました。
IDL は開発環境を再配布はできませんが、IDL Virtual Machine として動作環境を再配布可能です。
要望、感想、叱咤激励、その他、お気軽にこちらのメールアドレスまで宜しくお願い致します。
本プログラムにより適切に処理されないノイズの例があった場合、ご報告いただくと有難いです。
その際画像を添付でお送りください。
[email protected]
高知工科大学電子・光システム工学科山本真行研究室
埜口和弥
---------------------------------------------------------------------------------------------------------
★ 動作させるまでの大まかな手順
1、meteor_echo_counter フォルダをドライブC:の直下に同名で保存
(違うドライブまたは違う名前でも可能ですが、txt フォルダ指定に少し手間がかかるようになります)
フォルダには、本プログラム、取り扱い説明書(本ファイル)などが含まれます
48
処理をかける読み込み画像があるフォルダや、結果出力画像フォルダ、結果テキストなどはどこのパスでもかまいま
せん
2、IDL Virtual Machine(idl63winx86_32.exe)を指示に従いインストール
途中で IDL と IDL Virtual Machine を選択するところが出るので後述を選択
3、meteor_echo_counter.sav を起動
フォルダ指定は meteor_echo_counter フォルダ内にある txt フォルダを指定
その後「設定読み込みボタン」をクリック
4、パスや設定を換えます。(パス指定は、/ が ¥ になっていることに注意してください)
http://www.ugs.kochi-tech.ac.jp/070315w/setumei.html を参照
「元画像読み込み」
処理をかける画像データが入ったフォルダの場所(パス)を記入、パス末尾に¥が必要
「結果画像書き出し」処理を実行した結果画像データが入るフォルダのパスを記入、パス末尾に¥が必要
「グラフ作成」
グラフ作成のフォルダを指定、パス末尾に¥が必要
※読み込み画像と処理結果画像とグラフ作成のフォルダは別々にしてください
「結果テキスト」
実行結果のテキストを作るパスを記入、テキスト名も自由に変更可能です
「一時間テキスト」
実行結果の一時間用テキストを作るパスを記入、テキスト名も自由に変更可能です
「HROFFT」
使っている HROFFT が1チャンネル仕様か2チャンネル仕様かを選択
「連続処理」
読み込み画像が時間的に不連続な場合、時間を揃えて結果をテキスト、グラフに表示させる
できるだけ on にしておいてください
「テキストに
パラメータ」
結果テキストの末尾にパラメータ等を書き込むかどうか
「テキストに
追加書き込み」
「結果画像」
結果テキストを同名テキストに設定した場合上書きせずに追加書き込みを行うかどうか
処理結果画像を作成するかどうかの選択
作成しない場合は結果画像書き出しパスは関係なし
「GRAPH」
グラフを作成するかどうかの選択
作成しない場合はグラフ作成パスは関係なし
※GUI右下のパラメータは、数字の前部分に空白を入れないようにして使ってください
設定し終えたら COUNT START ボタンをクリックでカウントが開始されます。
49
カウント中には一時間のエコー数、処理枚数などが表示されます。
finished と表示されればカウント終了です。
結果テキスト等を確認してください。
起動のたびにフォルダ指定を要求してくるのはこのソフトの仕様です。
何か直せる方法を思いついたら直しますのでそれまでスイマセン。
txt フォルダ内にある txt の名前は変えないでください。
◎ 動作環境、および必要な準備
Windows2000/XP で動作確認をしましたが、うまく動作しない可能性もあります。
このプログラムは IDL を使って記述されています。
そのため実行には IDL Virtual Machine(フリー)が必要です。
IDL Virtual Machine は Windows95,98,Me,NT に対応していないので、
上記の OS の場合、このプログラムを作動させることはできません。
※また、meteor_echo_counter フォルダをドライブC: の直下に保存してください。
(違うドライブまたは違う名前でも可能ですが、
txt フォルダを指定するのに少し手間がかかるようになります。
)
(※GUIが Windows にしか対応していないため、Windows 専用になりました)
◎ インストール
meteor_echo_counter.sav を動作させるために IDL Virtual Machine をインストールします。
インストールには idl63winx86_32.exe(idl63winx86_64.exe)を起動します。
32.exe と 64.exe の二つがありますが、これは CPU が 32bit か 64bit の違いです。
お使いの CPU のほうを選んでインストールしてください(だいたい 32 のほうです)。
(http://www.ittvis.com/download/download.asp?urlProductcode=13
※ダウンロードするためにはフリーユーザ登録が必要です)
◎ プログラム実行方法
プログラムを実行させるには meteor_echo_counter.sav を起動します。
起動すると meteor_echo_counter 内にある txt フォルダを指定し、
50
前回の設定読み込み後、GUIで各種設定を変更してください。
設定し終えたら COUNT START を押してカウントを開始してください。
※このプログラムは、読み込み画像があるフォルダの全 png 画像データに処理をかけます。
そのため、一度に処理をかけたい画像だけをフォルダに集めてから実行させてください。
なお元画像フォルダと結果画像フォルダと結果グラフは別にしておいてください。
また、結果画像フォルダに同じ元画像の結果画像を入れる場合は自動的に上書きされます(グラフも同様)
。
◎ プログラムの説明
このプログラムは、ノイズ除去をして流星エコーの計数を行います。
なおかつ、ロングエコーと飛行機エコーの計数も行います。
激しいノイズが入ると誤検出しないよう無理には計数しないというプログラムなので、
エコー数0が続く場合もあります。
飛行機エコーはノイズとして省くようになっています。
飛行機エコーの印として処理結果画像では左上と右下の縦に緑の線が入るのが印です。
飛行機エコーとは逆の傾きを持った物もノイズとして検出します。
傾きの大きさは飛行機と同じ検出範囲で、傾きの方向が逆なだけです。
印として処理結果画像では右上と右下の縦に緑の線が入ります。
また、飛行機エコーなどの傾きを持ったノイズを何個か検出すると、
その一枚の画像データは流星エコーの誤検出が発生しやすいので、流星エコー数0として処理を省きます。
ロングエコーは数えられた流星エコーのうち、ある一定の長さ(秒)になるとロングエコーと判定して、
何個ロングエコーがあったのかを計数します。
ノイズ除去については、激しいノイズ干渉状態の自動選別、
線状ノイズの除去、観測周波数変動の自動追尾などを行なっています。
・激しいノイズ干渉状態の自動選別
HROFFT の画像データ一枚分(10分間)の全ての輝度を足し合わせます。
そして、ある一定値を超えたら激しいノイズ干渉状態と認識し、
流星エコーを数えることができないとして、流星エコー数を0にして処理を省きます。
・線状ノイズの除去
縦(周波数軸方向)の一つのラインの輝度を足し合わせて、
51
ある一定値を超えるとそのラインはノイズとして処理を省きます。
省いた印として画面端に赤のラインが入ります。横(時間軸方向)も同じように処理します。
・観測周波数変動の自動追尾
流星エコーが出る周波数帯域を自動で追尾します。
前に出た流星エコーの位置(周波数軸方向)を保存しておき、それを平均させ流星エコーが出る周波数帯域を追尾し
ます。
印として横のラインに緑が入ります。上下囲んだ中だけを処理しています。
これにより無駄な処理が省かれ、時間短縮にもなっています。
この自動追尾は時間的に連続で処理を続けないと、誤作動する可能性があります。
なので不連続な画像群を一括処理しないでください。
※連続処理対応にしていると、途中で72枚分(半日分)の枚数の画像がとんでいた場合、一旦初期化されます。
流星エコーの計数は、スペクトルと強度グラフの両方を利用し、
エコーを一つの塊として自動検出するようになっています。
全ての処理が終わると計数結果を、10分用と一時間用の2つのテキストにして作成します。
選択により、結果画像、グラフを作成します。
◎ 計数結果テキストの説明
echo
文字通り流星エコーの数
long
ロングエコーの数
hikou
飛行機エコーの数
all
全ての輝度を足し合わせた結果の数値
noip
その一枚をノイズが激しい状態と認識して処理を省いたという印(1なら省いたということ)
Yhei
観測周波数変動の自動追尾でどの位置にいるか(最初は0でエコー数がある一定値を超えたら作動)
nodata
時間的に連続処理をしている場合に、画像が欠損しているとこれが出てきます
2チャンネル仕様の場合は1が上で、2が下という設定になっています。
一時間用では6枚分のエコー数を足し合わせた結果を表示させています。
そのため echo と long の二つになっています。
nodata が出ると一時間用では、echo と long と missing data! 1 と出ます。
後に書いてある数字は何枚欠損したかを表示するものです。
6枚で一時間分なので6枚欠損するとこちらも nodata になります。
◎ パラメータ設定の説明(settei.txt&設定の説明.txt)
52
このプログラムでは毎回、パラメータ設定ファイルというものを読み込みます。
これはプログラム上で必要な閾値や、変数などを読み込むものです。
1チャンネル用と2チャンネル用に分かれています。
GUIでパラメータを変更することにより、
観測場所によるノイズの影響の違いを考慮してのカスタマイズも可能です。
txt での変更も可能ですが、できるだけGUI上で変更してください。
以下(~)の中身はデフォルト値です。
・全体のノイズの閾値(100000)
上記に書いた all のことです。all がこの閾値以上ならこの一枚は処理を省きます。
結果の all を見ながらこの一枚は処理を省きたいと思うときや、そのまた逆のとき、
数値を変更してください。(ある程度は検証しましたが、完璧ではないです)
・2値化の閾値(6)
輝度(スペクトル)の閾値です。これ以上が条件を満たすということ。
これと強度グラフの閾値を両方とも満たせば、流星エコーとしての候補にあがります。
参考
0
1
2
3
4
5
6
7
8
9
10
黒
黒青
灰青
青
白青
水
薄緑
黄緑
緑
黄
オレンジ
11
12
13
赤
薄赤
ピンク
・横のラインノイズの閾値(260)
横のラインの輝度を全て足し合わせたものが、これ以上ならばそのラインの処理は省きます。
・縦のラインノイズの閾値(150)
縦のラインの輝度を全て足し合わせたものが、これ以上ならばそのラインの処理は省きます。
この2つはIDLがないと状況判断ができないため、条件変更は難しいです。
・飛行機エコーの継続時間のフラグ(7)
エコーの継続時間(秒)のフラグです。これ以上が条件を満たすということ。
・飛行機エコーの傾きの閾値(-0.4)
一つの塊として認識するため傾きが求まります。
その傾きの閾値です。これ以下が条件を満たすということ。
・飛行機エコーの中間点での傾きの誤差範囲(0.15)
誤検出を避けるために傾きを2個か求めています。これ以下が条件を満たすということ。
飛行機エコー関連の閾値を全て満たすと検出するようになっています。
(閾値4つ)
・傾きがあるエコーについての周波数範囲の開きの閾値(5)
周波数が高いところから低いところまでどのくらいの範囲になっているかを検出し、
53
条件を満たすと傾きがあるエコーとして認識する、飛行機エコー関連の閾値
・他のエコーの探索範囲(7)
エコーを一つの塊として検出するために、
エコーを見つけると回りに同じ発生源のエコーがないか探索します。
その探索範囲を指定します。
数値が大きすぎると、別の発生源のエコーまでも同じエコーと検出してしまうため、
大きすぎてもいけないし、小さすぎてもいけない。
・周波数範囲限定の前何個分を平均するか(10)
観測周波数変動の自動追尾のために前何個分のエコーの周波数を記憶しておくかを指定する。
・周波数範囲上下(25)
平均して求めた周波数の場所から上下どれだけの範囲でエコーを観測するかを決める。
25なら上下合わせると50ドット=100Hzの範囲。
・X の始めの場所(20)
・X の終わりの場所(619)
・Y の始めの場所(44)
・Y の終わりの場所(294)
処理をする画像の範囲指定。特に変更する必要はないと思います。
HROFFTでの出力画像をいじってあるのならば、
ここで問題が発生してプログラムがうまくいかない可能性が出てきます。
・強度グラフの2値化の閾値(9)
dBがこれ以上の場合、条件を満たすということ。
これと輝度の閾値を両方とも満たせば、流星エコーとしての候補にあがります。
初期値を9dBとしていますが、少し甘めに閾値を決めることにより、
流星エコーを一つの塊として検出しやすいようにしています。
・強度グラフの0dB の位置(-1)
ここもHROFFTでの出力画像をいじってある場合、
問題が発生する可能性があります。
・ロングエコーの継続時間の閾値(10)
これ以上をロングエコーとして数えます(秒)
。
初期値では10秒以上はロングエコーとして検出しています。
54
・傾きがあるエコーが何個あればそのページを飛ばすかの閾値(2)
傾きがあるエコーがあれば、流星エコーの誤検出が多く発生するため、
その一枚の処理を省き、流星エコー数を0とします。
・前回のラスト処理画像(10 桁表示)
前回カウントしたときの、最後に処理をかけた画像の年月日時を表示します。
この数字の次の画像からカウント処理にかけると、
前回の限定周波数位置がそのまま有効になります。
(例:0606100350 の場合、0606104000 から処理をかけると有効、
例:0606092350 の場合、0606100000 から処理をかけると有効、
例:0606092310 の場合、0606092320 から処理をかけると有効、等)
・限定周波数位置()
上の条件が有効になった場合に使用
前回の基準周波数軸を記憶している
これにより、処理始めに変なノイズがあってもあまり取らないようになります。
◎ 処理結果画像の説明
処理結果画像の簡単な説明を書いておきます。
処理にかけたはずなのに何の変化もない場合は、
激しいノイズ干渉状態として処理を省いた場合です。そのときは流星エコー数は0です。
画面端に出る縦横の赤い線は、そのライン上のエコーは認識せずに処理を省いたという印です。
横のラインで上下で囲む緑の線は、その囲まれた範囲だけをプログラムで処理をかけているという印です。
飛行機エコーなどの傾きを持ったものは縦に緑の線が入るようになっています。
ロングエコーには何秒のものかわかるようにするため、近くの左上に秒数が表示されます。
白い部分が流星エコーで、灰色の部分は探索した所、それに囲まれたエコーを一つとして数えています。
エコーの横幅が長くなると、探索範囲の横幅も少し伸びるようになっています。
赤い点はそのとき少し伸びた印です。
傾きがあるエコーが何個か検出されたときは処理を省くようになっていますが、
印は画像上には見られないため、テキストファイルを確認してください。
エコー数の表示も付けました。
HROFFT にあるエコー数表示の下に似たように白で表示されます。
55
◎ 結果グラフの説明
作成されるグラフは、横軸時間、縦軸個数で表示されます。
時間軸は1日~10日、11日~20日、20日~、といったように10日間隔でグラフを作成します。
こちらも連続処理対応だった場合、時間が不連続でも綺麗に表示してくれます。
エコーを赤色の線状で、ロングエコーを緑色の棒グラフで示します。
グラフの大きさは現在は固定です。
○ このプログラムは、フリーソフトウェアです
※非営利の場合は全くご自由にお使い頂けます。CDによる再配布も自由です。
また本プログラムでの処理結果(画面コピー)の Web 掲載等もご自由にどうぞ。
(もちろんお知らせ頂ければ嬉しいで
す)
本プログラムによる処理結果を用いて、観測結果をグラフ化して Web 掲載するときは、
自動処理ソフトによる結果だということをどこかにご記入してください。
記入例: このデータは「HROFFT 出力画像における流星エコー自動計数プログラム」
(高知工科大学 埜口氏他製作)
による自動処理結果です。観測データの解釈の際にはノイズによる影響などをご注意ください。
尚このプログラムの使用によって生じた損害等については作者は何も保証する義務を負わないこととさせて頂きます。
○ 変更履歴
06/12/12 Ver 1.0
・グラフ自動作成機能追加
・パラメータの追加&配置を変更
・パラメータを結果テキストの末尾に追加するかどうかの選択機能を追加
・同じ名前の結果テキストを上書きせずに追加書き込みする機能を追加
・グラフィカルユーザインターフェイス(GUI)追加
・結果テキストの時間表示バグ修正
56
・読み込む画像が時間的に不連続な場合、バグ修正
・周波数帯域限定機能で、基準周波数が引継ぎ可能
・周波数帯域限定機能で、連続処理対応のとき72枚分(半日分)の画像が途中でとんでいた場合、初期化機能追加
06/9/28
ver.bete
・png 画像の読み込み、書き出し
・カラーバー変化の対応
・傾きがあるエコーをノイズとして検出
・エコー探索範囲が画面外に出てしまうエラー修正
・出力結果画像にエコー数、ロングエコーの秒数、バージョン名を表示
・読み込む画像が時間的に不連続な場合への対応
・パラメータ追加
・結果テキストに作成時間、バージョン名、パラメータを表示
end.
57
・プログラム(抜粋)
pro meteor,source,source1,source2,Event
data
=source[0]
kekka
=source[1]
kekkatxt
=source[2]
ichizikantxt=source[3]
ch
=source[4]
;1ch ka 2ch no hantei
pass
=source[5]
;syori kekka no gazou ga hituyouka
tobasu
=source[6]
;rennzoku syori ni surukadouka
grakekka
=source[7]
;graph kakuka douka 0,1
graph
=source[8]
;graph no kekka basyo path
para
=source[9]
uwagaki
;kekka ni parame-ta- kakikomu? OK-1,NO-0
=source[10]
dir=data
;data no basyo
dir2=kekka
dir3=grakekka
;kekka uwagaki simasuka?
;kekka no basyo
;graph kekka
list=findfile(dir+'*.png')
kokokara=strlen(data)
;path nagasa hazime
konndake=strlen(list[0])-kokokara
;nagasa
maxfile =size(list,/N_ELEMENTS)
;gazoo no kazu
print,list
if uwagaki EQ 1 then begin
openw, Lun1, kekkatxt,/append,/Get_Lun
;tekisuto
openw, Lun2, ichizikantxt,/append,/Get_Lun
;itizikanbunn tekisuto
endif else begin
openw, Lun1, kekkatxt,/Get_Lun
openw, Lun2, ichizikantxt,/Get_Lun
;tekisuto
;itizikanbunn tekisuto
endelse
if ch EQ 2 then begin
58
uwagaki
zentai
=long(source2[0])
;zenntai habuki no sikiiti
a
=long(source2[1])
;2chika no sikiiti
yoko
=long(source2[2])
;yoko lineskip sikiiti
tate
=long(source2[3])
haba
=long(source2[4])
katamuki=float(source2[5])
gosa
=float(source2[6])
takasa
=long(source2[7])
te
=long(source2[8])
kosuu
=long(source2[9])
hirosa
=long(source2[10])
;tate lineskip sikiiti
;katamuki furagu sikiiti
;katamuki sikiiti
;x3y3 no katamuki gosa
;tansaku hanni
;syuuhasuu hani syukusyou kosuu
;uesita no hirosa
XS
=long(source2[11])
;X no hazime
XE
=long(source2[12])
;X no owari
YS1
=long(source2[13])
;Y
rYS1
=long(source2[13])
;r ha henkou fuka no sirusi
YE1
=long(source2[14])
rYE1
=long(source2[14])
YS2
=long(source2[15])
rYS2
=long(source2[15])
YE2
=long(source2[16])
rYE2
=long(source2[16])
dB
=long(source2[17])
;desiberu no ookisa
dBy1
=long(source2[18])
;179
dBy2
=long(source2[19])
;9
longhaba=long(source2[20])
naname
=long(source2[21])
;longeco-no nagasa
;naname ni natta monoga nannko de nozoku ka
mmae=string(source2[22])
mmae1=string(source2[23])
mmae2=string(source2[24])
endif
59
if ch EQ 1 then begin
zentai
=long(source1[0])
;zenntai habuki no sikiiti
a
=long(source1[1])
;2chika no sikiiti
yoko
=long(source1[2])
;yoko lineskip sikiiti
tate
=long(source1[3])
haba
=long(source1[4])
katamuki=float(source1[5])
gosa
=float(source1[6])
takasa
=long(source1[7])
te
=long(source1[8])
kosuu
=long(source1[9])
hirosa
=long(source1[10])
;tate lineskip sikiiti
;katamuki furagu sikiiti
;katamuki sikiiti
;x3y3 no katamuki gosa
;tansaku hanni
;syuuhasuu hani syukusyou kosuu
;uesita no hirosa
XS
=long(source1[11])
;X no hazime
XE
=long(source1[12])
;X no owari
YS1
=long(source1[13])
;Y
rYS1
=long(source1[13])
;r ha henkou fuka no sirusi
YE1
=long(source1[14])
rYE1
=long(source1[14])
dB
=long(source1[15])
dBy1
=long(source1[16])
longhaba=long(source1[17])
naname
;desiberu no ookisa
;dB syokiti
;longeco-no nagasa
=long(source1[18])
mae=string(source1[19])
mae1=string(source1[20])
endif
kazu=0
;itizikanbunn no eco-suu
ch1mato=0
60
ch2mato=0
longmato1=0
longmato2=0
ss1=0
;syuuhasuu hani syukusyou
ss2=0
count1=0
count2=0
quu1=INTARR(kosuu)
quu1[*]=0
quu2=INTARR(kosuu)
quu2[*]=0
hei1=0
hei2=0
kin1=0
kin2=0
kata=0.0
;katamukikeisann
kata1=0.0
kata2=0.0
nozo=0
sa=0
;tobasi
you hensuu
gatu0=0
niti0=0
zi0=0
punn0=0
nenn0=0
koyo=0
re=0
nan=0
gra=0
;tadano sirusi
grawake=0
;guraf hensuu
;1 2 3 gurafu wake
zikan=0
61
hazi=0
offset=0.0
;long hensuu
xzurasi=0
gtoba=0
;tobasita syouko 1zikan
gratoba=0
;nannko tobasuka
kurusimagire=0
;moudame
xgarr1=intarr(2)
ygarr1=intarr(2)
xgarr2=intarr(2)
ygarr2=intarr(2)
xgarr1[*]=0
ygarr1[*]=0
xgarr2[*]=0
ygarr2[*]=0
xten1=[1]
;ten sennyou
xten2=[1]
yten1=[1]
yten2=[1]
syou=1
saisyo=0
ddai=widget_info(event.top,find_by_uname='dai')
widget_control,ddai,set_value=string(maxfile)
for filei=0,maxfile-1 do begin
; Main loop
kokkara looollppp
ssyou=widget_info(event.top,find_by_uname='syou')
widget_control,ssyou,set_value=string(syou)
syou=syou+1
mmess=widget_info(event.top,find_by_uname='mess')
62
widget_control,mmess,set_value=strmid(list[filei],kokokara,konndake)
print,list[filei]
b=BYTARR(3,629,410)
b=READ_PNG(list[filei],R,G,B)
sx=INTARR(410)
;xy no iremono
sx[*]=0
sy1=INTARR(629)
sy1[*]=0
sy2=INTARR(629)
sy2[*]=0
skipx=INTARR(410)
;rainnnoizu skip
skipx[*]=0
skipy1=INTARR(629)
skipy1[*]=0
skipy2=INTARR(629)
skipy2[*]=0
noiselinex1=0
noiselinex2=0
noiseliney1=0
noiseliney2=0
kazu1=long(0)
;zentainosizu skip
kazu2=long(0)
mezi1=0
mezi2=0
s=INTARR(629,410)
;gazou date motoninaru
s[*]=0
s2=INTARR(629,410)
;2chika you
s2[*]=0
ura=INTARR(629,410)
;urakkawa furagu
63
ura[*]=0
k=0
;te wo nobasu hako
longeco1=0
;long eco
longeco2=0
genteisyoki=0
;syuuhasuu gentei kaizyo 72 mai mekara
kaizyo=0
if b[1,22,dBy1+10] NE 255 and b[1,22,dBy1+10] NE 128 then begin
bbb=8
if ch EQ 2 then begin
for x=0,628 do begin
for y=1,409 do begin
b[0,x,y]=b[0,x,y]*bbb
b[1,x,y]=b[1,x,y]*bbb
b[2,x,y]=b[2,x,y]*bbb
endfor
endfor
endif else begin
for x=0,628 do begin
for y=1,399 do begin
b[0,x,y]=b[0,x,y]*bbb
b[1,x,y]=b[1,x,y]*bbb
b[2,x,y]=b[2,x,y]*bbb
endfor
endfor
endelse
endif
if tobasu EQ 1 then begin
mozisuu=strlen(list[filei])
;tobasi taiou
byou=fix(strmid(list[filei],mozisuu-5,1))
64
;png kennka no iro hennkou
punn1=fix(strmid(list[filei],mozisuu-6,2))
zi1=fix(strmid(list[filei],mozisuu-8,2))
niti1=fix(strmid(list[filei],mozisuu-10,2))
gatu1=fix(strmid(list[filei],mozisuu-12,2))
nenn1=fix(strmid(list[filei],mozisuu-14,2))
;print,byou,punn1
if saisyo EQ 0 then begin
;zenkai no syuuhasuu kioku site omoidasu
if ch EQ 2 then begin
punn100=fix(strmid(mmae,8,2))
zi100=fix(strmid(mmae,6,2))
niti100=fix(strmid(mmae,4,2))
gatu100=fix(strmid(mmae,2,2))
nenn100=fix(strmid(mmae,0,2))
endif else begin
punn100=fix(strmid(mae,8,2))
zi100=fix(strmid(mae,6,2))
niti100=fix(strmid(mae,4,2))
gatu100=fix(strmid(mae,2,2))
nenn100=fix(strmid(mae,0,2))
endelse
case gatu100 of
;koyomi sirabe saisyo
1:koyomi=31
2:koyomi=28
3:koyomi=31
4:koyomi=30
5:koyomi=31
6:koyomi=30
7:koyomi=31
8:koyomi=31
9:koyomi=30
10:koyomi=31
11:koyomi=30
65
12:koyomi=31
else:koyomi=0
endcase
punn100=punn100+10
if punn100 EQ 60 then begin
zi100=zi100+1
punn100=0
endif
if zi100 EQ 24 then begin
niti100=niti100+1
zi100=0
endif
if niti100 EQ koyomi+1 then begin
gatu100=gatu100+1
niti100=1
endif
if gatu100 EQ 13 then begin
nenn100=nenn100+1
gatu100=1
endif
if punn1 EQ punn100 and zi1 EQ zi100 and niti1 EQ niti100 and gatu1 EQ gatu100 and nenn100 EQ nenn1 then
begin
if ch EQ 2 then begin
for kkosuu=0,kosuu-1 do begin
quu1[kkosuu]=mmae1
quu2[kkosuu]=mmae2
hei1=hei1+mmae1
hei2=hei2+mmae2
endfor
kin1=mmae1
66
kin2=mmae2
YS1=kin1-hirosa
YE1=kin1+hirosa
YS2=kin2-hirosa
YE2=kin2+hirosa
ss1=1
ss2=1
endif else begin
for kkosuu=0,kosuu-1 do begin
quu1[kkosuu]=mae1
hei1=hei1+mae1
endfor
kin1=mae1
YS1=kin1-hirosa
YE1=kin1+hirosa
ss1=1
endelse
endif
saisyo=1
endif
if byou GE 1 then begin
punn1=punn1-byou
punn11=punn1+10
zi11=zi1
niti11=niti1
if punn11 EQ 60 then begin
67
punn11=0
zi11=zi1+1
if zi11 EQ 24 then begin
zi11=1
niti11=niti1+1
endif
endif
if punn11 EQ punn0
and zi11 EQ zi0 and niti11 EQ niti0 then begin
punn1=punn1+10
if punn1 EQ 60 then begin
punn1=0
zi1=zi1+1
endif
endif
endif
if filei GE 1 then begin
case gatu0 of
;koyomi sirabe
1:koyo=31
2:koyo=28
3:koyo=31
4:koyo=30
5:koyo=31
6:koyo=30
7:koyo=31
8:koyo=31
9:koyo=30
10:koyo=31
11:koyo=30
12:koyo=31
else:koyo=0
endcase
68
print,'
print,'
',gatu0,'gatu',niti0,'niti',zi0,'zi',punn0,'punn'
',gatu1,'gatu',niti1,'niti',zi1,'zi',punn1,'punn'
sa=0
if punn1 NE punn0
or zi1 NE zi0 or niti1 NE niti0 or gatu1 NE gatu0 or nenn0 NE nenn1 then begin
sa=kazu+sa
repeat begin
punn0=punn0+10
sa=sa+1
if punn0 EQ 60 then begin
zi0=zi0+1
punn0=0
endif
if zi0 EQ 24 then begin
niti0=niti0+1
zi0=0
endif
if niti0 EQ koyo+1 then begin
gatu0=gatu0+1
niti0=1
case gatu0 of
;koyomi sirabe
1:koyo=31
2:koyo=28
3:koyo=31
4:koyo=30
5:koyo=31
6:koyo=30
7:koyo=31
8:koyo=31
9:koyo=30
10:koyo=31
11:koyo=30
12:koyo=31
13:koyo=31
else:koyo=0
69
endcase
endif
if gatu0 EQ 13 then begin
nenn0=nenn0+1
gatu0=1
endif
printf,Lun1,'nodata'
nan=nan+1
genteisyoki=genteisyoki+1
if genteisyoki GE 72 and kaizyo EQ 0 then begin
if ch EQ 2 then begin
for kkosuu=0,kosuu-1 do begin
quu1[kkosuu]=0
quu2[kkosuu]=0
endfor
count1=0
count2=0
hei1=0
hei2=0
kin1=0
kin2=0
YS1=rYS1
YE1=rYE1
YS2=rYS2
YE2=rYE2
ss1=0
ss2=0
endif else begin
for kkosuu=0,kosuu-1 do begin
quu1[kkosuu]=0
endfor
count1=0
hei1=0
kin1=0
YS1=rYs1
70
YE1=rYE1
ss1=0
endelse
kaizyo=1
endif
if nan EQ 6 then re=1
if(sa GE 6)then begin
if re EQ 0 then begin
if ch EQ 2 then begin
printf,Lun2,strmid(list[filei],kokokara,konndake-4),'echo1=',ch1mato,'echo2=',ch2mato,'long1=',longmato1,$
'long2=',longmato2,' missing data!',nan,format='(a,1x,a,i3,1x,a,i3,2x,a,i2,1x,a,i2,2x,a,i2)'
echo1len=strlen(string(ch1mato))
long1len=strlen(string(longmato1))
echo2len=strlen(string(ch2mato))
long2len=strlen(string(longmato2))
ooutput=widget_info(event.top,find_by_uname='output')
widget_control,ooutput,set_value=$
'echo1='+strmid(string(ch1mato),echo1len-3,3)+', long1='+strmid(string(longmato1),long1len-2,2)+$
',
echo2='+strmid(string(ch2mato),echo2len-3,3)+', long2='+strmid(string(longmato2),long2len-2,2)
if graph EQ 1 then begin
case grawake of
;long echo kakikomi sakini
2ch
1:wset,11
2:wset,12
3:wset,13
else:
endcase
BAR_PLOT,longmato1*5,BAROFFSET=offset,BARSPACE=0.001,BARWIDTH=0.005,BASERANGE=0.5,$
colors=0 + 256L * (150 + 256L * 0),/Overplot
71
case grawake of
1:wset,21
2:wset,22
3:wset,23
else:
endcase
BAR_PLOT,longmato2*5,BAROFFSET=offset,BARSPACE=0.001,BARWIDTH=0.005,BASERANGE=0.5,$
colors=0 + 256L * (150 + 256L * 0),/Overplot
offset=offset+1.5113636
ygarr1[1]=ch1mato
ygarr2[1]=ch2mato
xgarr1[1]=zikan
xgarr2[1]=zikan
if hazi EQ 1 then begin
case grawake of
;all echo kakikomi
1:wset,11
2:wset,12
3:wset,13
else:
endcase
oplot,xgarr1,ygarr1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'1ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
case grawake of
1:wset,21
2:wset,22
3:wset,23
else:
endcase
oplot,xgarr2,ygarr2,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'2ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
endif else begin
xten1[0]=xgarr1[1]
yten1[0]=ygarr1[1]
xten2[0]=xgarr2[1]
72
yten2[0]=ygarr2[1]
case grawake of
;ten kakikomi ippatu
1:wset,11
2:wset,12
3:wset,13
else:
endcase
oplot,xten1,yten1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'1ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
case grawake of
1:wset,21
2:wset,22
3:wset,23
else:
endcase
oplot,xten2,yten2,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'2ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
endelse
hazi=1
ygarr1[0]=ygarr1[1]
ygarr2[0]=ygarr2[1]
xgarr1[0]=xgarr1[1]
xgarr2[0]=xgarr2[1]
zikan=zikan+1
if grawake EQ 1 or grawake EQ 2 then begin
if zikan GE 240 then begin
zikan=zikan-240
offset=offset-240*1.5113636
gra=0
endif
endif else begin
case ggatu of
;koyomi sirabe saisyo
'01':gkoyo=(31-20)*24
'02':gkoyo=(28-20)*24
73
'03':gkoyo=(31-20)*24
'04':gkoyo=(30-20)*24
'05':gkoyo=(31-20)*24
'06':gkoyo=(30-20)*24
'07':gkoyo=(31-20)*24
'08':gkoyo=(31-20)*24
'09':gkoyo=(30-20)*24
'10':gkoyo=(31-20)*24
'11':gkoyo=(30-20)*24
'12':gkoyo=(31-20)*24
else:gkoyo=0
endcase
if zikan GE gkoyo then begin
zikan=zikan-gkoyo
offset=offset-gkoyo*1.5113636
gra=0
endif
endelse
endif
sa=sa-6
ch1mato=0
ch2mato=0
longmato1=0
longmato2=0
nan=0
endif else begin
printf,Lun2,strmid(list[filei],kokokara,konndake-4),'echo=',ch1mato,'long=',longmato1,'
data!',nan,$
format='(a,1x,a,i3,2x,a,i2,2x,a,i2)'
echo1len=strlen(string(ch1mato))
long1len=strlen(string(longmato1))
ooutput=widget_info(event.top,find_by_uname='output')
widget_control,ooutput,set_value=$
74
missing
'echo='+strmid(string(ch1mato),echo1len-3,3)+', long='+strmid(string(longmato1),long1len-2,2)
if graph EQ 1 then begin
case grawake of
;long echo kakikomi sakini
1ch
1:wset,1
2:wset,2
3:wset,3
else:
endcase
BAR_PLOT,longmato1*5,BAROFFSET=offset,BARSPACE=0.001,BARWIDTH=0.005,BASERANGE=0.5,$
colors=0 + 256L * (150 + 256L * 0),/Overplot
offset=offset+1.5113636
ygarr1[1]=ch1mato
xgarr1[1]=zikan
if hazi EQ 1 then begin
case grawake of
;all echo kakikomi
1:wset,1
2:wset,2
3:wset,3
else:
endcase
oplot,xgarr1,ygarr1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+gnenn+ggatu+'-'+gniti+'-.png',aaa
endif else begin
xten1[0]=xgarr1[1]
yten1[0]=ygarr1[1]
case grawake of
;ten kakikomi ippatu
1:wset,1
2:wset,2
3:wset,3
else:
endcase
oplot,xten1,yten1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
75
write_png,dir3+gnenn+ggatu+'-'+gniti+'-.png',aaa
endelse
hazi=1
ygarr1[0]=ygarr1[1]
xgarr1[0]=xgarr1[1]
zikan=zikan+1
if grawake EQ 1 or grawake EQ 2 then begin
if zikan GE 240 then begin
zikan=zikan-240
offset=offset-240*1.5113636
gra=0
endif
endif else begin
case ggatu of
;koyomi sirabe saisyo
'01':gkoyo=(31-20)*24
'02':gkoyo=(28-20)*24
'03':gkoyo=(31-20)*24
'04':gkoyo=(30-20)*24
'05':gkoyo=(31-20)*24
'06':gkoyo=(30-20)*24
'07':gkoyo=(31-20)*24
'08':gkoyo=(31-20)*24
'09':gkoyo=(30-20)*24
'10':gkoyo=(31-20)*24
'11':gkoyo=(30-20)*24
'12':gkoyo=(31-20)*24
else:gkoyo=0
endcase
if zikan GE gkoyo then begin
zikan=zikan-gkoyo
offset=offset-gkoyo*1.5113636
gra=0
endif
endelse
endif
76
sa=sa-6
ch1mato=0
longmato1=0
nan=0
endelse
endif else begin
printf,Lun2,'nodata'
gtoba=1
;gurafu no hensuu
gratoba=gratoba+1
;nannko tobasuka
sa=sa-6
re=0
nan=0
endelse
endif
endrep until(gatu1 EQ gatu0 and niti1 EQ niti0 and zi1 EQ zi0 and punn1 EQ punn0)
kazu=sa
endif
endif else begin
case gatu1 of
;koyomi sirabe saisyo
1:koyo=31
2:koyo=28
3:koyo=31
4:koyo=30
5:koyo=31
6:koyo=30
7:koyo=31
8:koyo=31
9:koyo=30
10:koyo=31
11:koyo=30
12:koyo=31
else:koyo=0
77
endcase
if punn1 NE 0 then begin
sa=punn1/10
kazu=sa
repeat begin
printf,Lun1,'nodata'
sa=sa-1
nan=nan+1
endrep until(sa EQ 0)
endif
endelse
punn0=punn1+10
zi0=zi1
niti0=niti1
gatu0=gatu1
nenn0=nenn1
if punn0 EQ 60 then begin
zi0=zi1+1
punn0=0
endif
if zi0 EQ 24 then begin
niti0=niti1+1
zi0=0
endif
if niti0 EQ koyo+1 then begin
gatu0=gatu1+1
niti0=1
endif
if gatu0 EQ 13 then begin
nenn0=nenn1+1
gatu0=1
endif
78
endif
;kokkara ue bubunn 1111111111111111111111111111111111111111111111111111111111111111111
for y=rYS1,rYE1 do begin
;irobetuni suuchika0~13
for x=XS,XE do begin
if b[0,x,y] EQ 0
and b[1,x,y] EQ 0
and b[2,x,y] EQ 0
then s[x,y]=0
if b[0,x,y] EQ 0
and b[1,x,y] EQ 0
and(b[2,x,y] GE 55
and b[2,x,y] LE 70) then
s[x,y]=1
if b[0,x,y] EQ 0
and b[1,x,y] EQ 0
and(b[2,x,y] GE 120 and b[2,x,y] LE 135)then
s[x,y]=2
if b[0,x,y] EQ 0
and b[1,x,y] EQ 0
and(b[2,x,y] GE 245 and b[2,x,y] LE 260)then
s[x,y]=3
if b[0,x,y] EQ 0
and(b[1,x,y] GE 120 and b[1,x,y] LE 135)and(b[2,x,y] GE 245 and b[2,x,y] LE 260)then
if b[0,x,y] EQ 0
and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and(b[2,x,y] GE 245 and b[2,x,y] LE 260)then
if b[0,x,y] EQ 0
and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and(b[2,x,y] GE 120 and b[2,x,y] LE 135)then
if b[0,x,y] EQ 0
and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and b[2,x,y] EQ 0
s[x,y]=4
s[x,y]=5
s[x,y]=6
then
s[x,y]=7
if(b[0,x,y] GE 120 and b[0,x,y] LE 135)and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and b[2,x,y] EQ 0
then
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and b[2,x,y] EQ 0
then
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and(b[1,x,y] GE 120 and b[1,x,y] LE 135)and b[2,x,y] EQ 0
then
s[x,y]=8
s[x,y]=9
s[x,y]=10
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and b[1,x,y] EQ 0
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and b[1,x,y] EQ 0
and b[2,x,y] EQ 0
then
s[x,y]=11
and(b[2,x,y] GE 120 and b[2,x,y] LE 135)then
s[x,y]=12
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and b[1,x,y] EQ 0
s[x,y]=13
kazu1=kazu1+s[x,y]
endfor
79
and(b[2,x,y] GE 245 and b[2,x,y] LE 260)then
endfor
if kazu1 LE zentai then begin
;zetai habuku ka douka
;linenoise skip
for Y=YS1,YE1 do begin
;yokoni zennbu tasu
for X=XS,XE do begin
sx[Y]=sx[Y]+s[X,Y]^0.5
endfor
if sx[Y] GE yoko then begin
;yokoline skip
b[0,*,Y-1:Y+1]=255
s[XS:XE,Y]=0
;yokonoha 0 nisite eco- kesu
skipx[Y-1:Y+1]=1
noiselinex1=noiselinex1+1
endif
endfor
for X=XS,XE do begin
;tateni zennbu tasu
for Y=rYS1,rYE1 do begin
sy1[X]=sy1[X]+s[X,Y]^0.5
endfor
if sy1[X] GE tate then begin
;tateline skip
b[0,X-3:X+3,rYS1-10:rYE1+10]=255
skipy1[X-3:X+3]=1
noiseliney1=noiseliney1+1
endif
endfor
for x=XS,XE do begin
;2chika
for y=YS1,YE1 do begin
if s[x,y] GE a and b[1,x,dBy1+dB] GE 245 then begin
s2[x,y]=1
b[*,x,y]=255
;siro
80
endif else begin
b[*,x,y]=0
;kuro
endelse
endfor
endfor
n=1
;ecosuuwo kazoeru
muki1=0
nn=0
;hikouki echo
;echo suu no tyousei
nozo=0
;nami echo
for x=XS,XE do begin
if skipy1[x] EQ 1 then begin
continue
endif
for y=YS1,YE1 do begin
if skipx[y] EQ 1 then begin
continue
endif
if s2[x,y] EQ 1 then
begin
x1=x
x2=x
y1=y
y2=y
m=0
z=0
mitu=0
nnn=n
shima,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
n=n+1
b[2,x1,y1]=0
b[2,x2,y2]=0
noi=0
81
if x2-x1 GE haba then begin
;hikoukieco- habuki
kata=(float(y1)-float(y2)+0.001)/(float(x1)-float(x2)+0.001)
ten=0
han=x1+(x2-x1)/2
ue=y1-(y1-y2)/3
sita=y2+(y1-y2)/3
for y=sita,ue do begin
if (s2[han,y] EQ 10 or s2[han,y] EQ 11) and ten EQ 0 then begin
x3=han
y3=y
ten=1
endif
endfor
if ten EQ 0 then begin
hanhida=han-(x2-x1)/10
for y=sita,ue do begin
if (s2[hanhida,y] EQ 10 or s2[hanhida,y] EQ 11) and ten EQ 0 then begin
x3=hanhida
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanmigi=han+(x2-x1)/10
for y=sita,ue do begin
if (s2[hanmigi,y] EQ 10 or s2[hanmigi,y] EQ 11) and ten EQ 0 then begin
x3=hanmigi
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanhida2=han-(x2-x1)/5
82
for y=sita,ue do begin
if (s2[hanhida2,y] EQ 10 or s2[hanhida2,y] EQ 11) and ten EQ 0
then begin
x3=hanhida2
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanmigi2=han+(x2-x1)/5
for y=sita,ue do begin
if (s2[hanmigi2,y] EQ 10 or s2[hanmigi2,y] EQ 11) and ten EQ 0
then begin
x3=hanmigi2
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
kata1=1.0
kata2=1.0
x3=0
y3=0
endif else begin
kata1=(float(y1)-float(y3)+0.001)/(float(x1)-float(x3)+0.001)
kata2=(float(y3)-float(y2)+0.001)/(float(x3)-float(x2)+0.001)
kata1=ABS(kata-kata1)
kata2=ABS(kata-kata2)
endelse
;
print,'
',kata,kata1,kata2,x1,x2,y1,y2,x3,y3
if kata LT katamuki and kata1 LT gosa and kata2 LT gosa and y1-y2 GE takasa then begin
muki1=muki1+1
;hikouki
b[1,x1,y1:rYE1]=255
b[1,x2,rYS1:y2]=255
noi=1
endif else begin
83
;gyaku no katamuki hantei you
for y=ue,sita do begin
if (s2[han,y] EQ 10 or s2[han,y] EQ 11) and ten EQ 0 then begin
x3=han
y3=y
ten=1
endif
endfor
if ten EQ 0 then begin
hanhida=han-(x2-x1)/10
for y=ue,sita do begin
if (s2[hanhida,y] EQ 10 or s2[hanhida,y] EQ 11) and ten EQ 0
then begin
x3=hanhida
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanmigi=han+(x2-x1)/10
for y=ue,sita do begin
if (s2[hanmigi,y] EQ 10 or s2[hanmigi,y] EQ 11) and ten EQ 0
then begin
x3=hanmigi
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanhida2=han-(x2-x1)/3
for y=ue,sita do begin
if (s2[hanhida2,y] EQ 10 or s2[hanhida2,y] EQ 11) and ten EQ 0
x3=hanhida2
y3=y
ten=1
endif
84
then begin
endfor
endif
if ten EQ 0 then begin
hanmigi2=han+(x2-x1)/3
for y=ue,sita do begin
if (s2[hanmigi2,y] EQ 10 or s2[hanmigi2,y] EQ 11) and ten EQ 0
then begin
x3=hanmigi2
y3=y
ten=1
endif
endfor
endif
kata1=(float(y1)-float(y3)+0.001)/(float(x1)-float(x3)+0.001)
kata2=(float(y3)-float(y2)+0.001)/(float(x3)-float(x2)+0.001)
kata1=ABS(kata-kata1)
kata2=ABS(kata-kata2)
print,'
',kata,kata1,kata2,x1,x2,y1,y2,x3,y3
if kata GE ABS(katamuki) and kata1 LT gosa and kata2 LT gosa and ABS(y1-y2) GE
takasa then begin
nozo=nozo+1
b[1,x1,rYS1:y1]=255
b[1,x2,y2:rYE1]=255
noi=1
endif else begin
if x2-x1 GE longhaba then begin
longeco1=longeco1+1
cx=x1-5
cy=y1+30
echo=x2-x1
ku=10
hyouzi,cx,cy,b,echo,ku
noi=0
endif
endelse
endelse
endif
85
;long
if noi EQ 0 then begin
hei1=hei1+y
if count1 EQ kosuu then begin
;kokoha hennkano moto
ss1=1
count1=0
endif
if ss1 EQ 1 then begin
hei1=hei1-quu1[count1]
kin1=hei1/kosuu
YS1=kin1-hirosa
YE1=kin1+hirosa
endif
quu1[count1]=y
count1=count1+1
endif
endif
endfor
endfor
for x=XS,XE do begin
;irozuke haiiro kuro
for y=YS1,YE1 do begin
if s2[x,y] EQ 12 then b[0,x,y]=255
if s2[x,y] EQ 2
then b[*,x,y]=128
if s2[x,y] EQ 3
then b[*,x,y]=0
endfor
endfor
b[1,XS:XE,YS1]=255
;syuuhasuu line irozuke midori
b[1,XS:XE,YE1]=255
endif else begin
;tobnasita toki
mezi1=1
86
n=1
nn=0
muki1=0
nozo=0
endelse
if muki1+nozo LT naname then begin ;futuu ha kotti
print,n-1-nn-muki1-nozo,muki1,longeco1,nozo
ch1=n-1-nn-muki1-nozo
endif else begin
;tokusyu na baai
print,0,muki1,nozo
ch1=0
longeco1=0
mezi1=1
endelse
;kokkaraha sita no bubunn 222222222222222222222222222222222222222222222222222222222222
if ch EQ 2 then begin
for y=rYS2,rYE2 do begin
;irobetuni suuchika0~13
for x=XS,XE do begin
if b[0,x,y] EQ 0
and b[1,x,y] EQ 0
and b[2,x,y] EQ 0
then s[x,y]=0
if b[0,x,y] EQ 0
and b[1,x,y] EQ 0
and(b[2,x,y] GE 55
and b[2,x,y] LE 70) then
s[x,y]=1
if b[0,x,y] EQ 0
and b[1,x,y] EQ 0
and(b[2,x,y] GE 120 and b[2,x,y] LE 135)then
s[x,y]=2
if b[0,x,y] EQ 0
and b[1,x,y] EQ 0
and(b[2,x,y] GE 245 and b[2,x,y] LE 260)then
s[x,y]=3
if b[0,x,y] EQ 0
and(b[1,x,y] GE 120 and b[1,x,y] LE 135)and(b[2,x,y] GE 245 and b[2,x,y] LE 260)then
if b[0,x,y] EQ 0
and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and(b[2,x,y] GE 245 and b[2,x,y] LE 260)then
if b[0,x,y] EQ 0
and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and(b[2,x,y] GE 120 and b[2,x,y] LE 135)then
if b[0,x,y] EQ 0
and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and b[2,x,y] EQ 0
s[x,y]=4
s[x,y]=5
s[x,y]=6
then
s[x,y]=7
if(b[0,x,y] GE 120 and b[0,x,y] LE 135)and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and b[2,x,y] EQ 0
s[x,y]=8
87
then
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and(b[1,x,y] GE 245 and b[1,x,y] LE 260)and b[2,x,y] EQ 0
then
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and(b[1,x,y] GE 120 and b[1,x,y] LE 135)and b[2,x,y] EQ 0
then
s[x,y]=9
s[x,y]=10
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and b[1,x,y] EQ 0
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and b[1,x,y] EQ 0
and b[2,x,y] EQ 0
then
s[x,y]=11
and(b[2,x,y] GE 120 and b[2,x,y] LE 135)then
s[x,y]=12
if(b[0,x,y] GE 245 and b[0,x,y] LE 260)and b[1,x,y] EQ 0
s[x,y]=13
kazu2=kazu2+s[x,y]
endfor
endfor
if kazu2 LE zentai then begin
;zentai noise skip
;line skip
for Y=YS2,YE2 do begin
;yokoni zenbu tasu
for X=XS,XE do begin
sx[Y]=sx[Y]+s[X,Y]^0.5
endfor
if sx[Y] GE yoko then begin
;yokoline skip
b[0,*,Y-1:Y+1]=255
s[XS:XE,Y]=0
;yokonoha 0 nisite eco- kesu
skipx[Y-1:Y+1]=1
noiselinex1=noiselinex1+1
endif
endfor
for X=XS,XE do begin
;tateni zennbu tasu
for Y=rYS2,rYE2 do begin
sy2[X]=sy2[X]+s[X,Y]^0.5
endfor
if sy2[X] GE tate then begin
;tateline skip
b[0,X-3:X+3,rYS2-10:rYE2+10]=255
skipy2[X-3:X+3]=1
88
and(b[2,x,y] GE 245 and b[2,x,y] LE 260)then
noiseliney2=noiseliney2+1
endif
endfor
for x=XS,XE do begin
;2chika
for y=YS2,YE2 do begin
if s[x,y] GE a and b[1,x,dBy2+dB] GE 245 then begin
s2[x,y]=1
b[*,x,y]=255
endif else begin
b[*,x,y]=0
endelse
endfor
endfor
n=1
;eco-suu wo kazoeru
muki2=0
nn=0
nozo=0
for x=XS,XE do begin
if skipy2[x] EQ 1 then begin
continue
endif
for y=YS2,YE2 do begin
if skipx[y] EQ 1 then begin
continue
endif
if s2[x,y] EQ 1 then
begin
x1=x
x2=x
y1=y
y2=y
89
m=0
z=0
mitu=0
nnn=n
shima,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
n=n+1
b[2,x1,y1]=0
b[2,x2,y2]=0
noi=0
if x2-x1 GE haba then begin
;hikouki eco- habuku
kata=(float(y1)-float(y2)+0.001)/(float(x1)-float(x2)+0.001)
ten=0
han=x1+(x2-x1)/2
ue=y1-(y1-y2)/3
sita=y2+(y1-y2)/3
for y=sita,ue do begin
if (s2[han,y] EQ 10 or s2[han,y] EQ 11) and ten EQ 0 then begin
x3=han
y3=y
ten=1
endif
endfor
if ten EQ 0 then begin
hanhida=han-(x2-x1)/10
for y=sita,ue do begin
if (s2[hanhida,y] EQ 10 or s2[hanhida,y] EQ 11) and ten EQ 0
x3=hanhida
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanmigi=han+(x2-x1)/10
for y=sita,ue do begin
90
then begin
if (s2[hanmigi,y] EQ 10 or s2[hanmigi,y] EQ 11) and ten EQ 0
then begin
x3=hanmigi
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanhida2=han-(x2-x1)/5
for y=sita,ue do begin
if (s2[hanhida2,y] EQ 10 or s2[hanhida2,y] EQ 11) and ten EQ 0
then begin
x3=hanhida2
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanmigi2=han+(x2-x1)/5
for y=sita,ue do begin
if (s2[hanmigi2,y] EQ 10 or s2[hanmigi2,y] EQ 11) and ten EQ 0
x3=hanmigi2
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
kata1=1.0
kata2=1.0
x3=0
y3=0
endif else begin
kata1=(float(y1)-float(y3)+0.001)/(float(x1)-float(x3)+0.001)
kata2=(float(y3)-float(y2)+0.001)/(float(x3)-float(x2)+0.001)
kata1=ABS(kata-kata1)
91
then begin
kata2=ABS(kata-kata2)
endelse
;
print,'
',kata,kata1,kata2,x1,x2,y1,y2,x3,y3
if kata LT katamuki and kata1 LT gosa and kata2 LT gosa and y1-y2 GE takasa then begin
muki2=muki2+1
b[1,x1,y1:rYE2]=255
b[1,x2,rYS2:y2]=255
noi=1
endif else begin
for y=ue,sita do begin
if (s2[han,y] EQ 10 or s2[han,y] EQ 11) and ten EQ 0 then begin
x3=han
y3=y
ten=1
endif
endfor
if ten EQ 0 then begin
hanhida=han-(x2-x1)/10
for y=ue,sita do begin
if (s2[hanhida,y] EQ 10 or s2[hanhida,y] EQ 11) and ten EQ 0
then begin
x3=hanhida
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanmigi=han+(x2-x1)/10
for y=ue,sita do begin
if (s2[hanmigi,y] EQ 10 or s2[hanmigi,y] EQ 11) and ten EQ 0
x3=hanmigi
y3=y
ten=1
endif
endfor
92
then begin
endif
if ten EQ 0 then begin
hanhida2=han-(x2-x1)/3
for y=ue,sita do begin
if (s2[hanhida2,y] EQ 10 or s2[hanhida2,y] EQ 11) and ten EQ 0
then begin
x3=hanhida2
y3=y
ten=1
endif
endfor
endif
if ten EQ 0 then begin
hanmigi2=han+(x2-x1)/3
for y=ue,sita do begin
if (s2[hanmigi2,y] EQ 10 or s2[hanmigi2,y] EQ 11) and ten EQ 0
then begin
x3=hanmigi2
y3=y
ten=1
endif
endfor
endif
kata1=(float(y1)-float(y3)+0.001)/(float(x1)-float(x3)+0.001)
kata2=(float(y3)-float(y2)+0.001)/(float(x3)-float(x2)+0.001)
kata1=ABS(kata-kata1)
kata2=ABS(kata-kata2)
print,'
',kata,kata1,kata2,x1,x2,y1,y2,x3,y3 ;issonokoto kesitesimau
if kata GE ABS(katamuki) and kata1 LT gosa and kata2 LT gosa and ABS(y1-y2) GE takasa
then begin
nozo=nozo+1
b[1,x1,rYS2:y1]=255
b[1,x2,y2:rYE2]=255
noi=1
endif else begin
if x2-x1 GE longhaba then begin
;long eco-
longeco2=longeco2+1
cx=x1-5
93
cy=y1+30
echo=x2-x1
ku=10
hyouzi,cx,cy,b,echo,ku
noi=0
endif
endelse
endelse
endif
if noi EQ 0 then begin
hei2=hei2+y
if count2 EQ kosuu then begin
;kokoha henkano moto
ss2=1
count2=0
endif
if ss2 EQ 1 then begin
hei2=hei2-quu2[count2]
kin2=hei2/kosuu
YS2=kin2-hirosa
YE2=kin2+hirosa
endif
quu2[count2]=y
count2=count2+1
endif
endif
endfor
endfor
for x=XS,XE do begin
;irozuke haiiro kuro
for y=YS2,YE2 do begin
if s2[x,y] EQ 12 then b[0,x,y]=255
if s2[x,y] EQ 2
then b[*,x,y]=128
if s2[x,y] EQ 3
then b[*,x,y]=0
94
endfor
endfor
b[1,XS:XE,YS2]=255
;syuuhasuu line irozuke midori
b[1,XS:XE,YE2]=255
endif else begin
mezi2=1
n=1
nn=0
muki2=0
nozo=0
endelse
if muki2+nozo LT naname then begin
print,n-1-nn-muki2-nozo,muki2,nozo
ch2=n-1-nn-muki2-nozo
endif else begin
print,0,muki2,nozo
ch2=0
longeco2=0
mezi2=1
endelse
if graph EQ 1 then begin
;aaaaaaa nenn gatu mo tobaseru nenn goe
if gtoba EQ 1 then begin
;tobasi gurafu
zikan=zikan+gratoba
offset=offset+gratoba*1.5113636
gratoba=0
gtoba=0
hazi=0
roop=240
95
grawake7=grawake
repeat begin
if grawake7 EQ 1 or grawake7 EQ 2 then begin
if zikan GE 240 then begin
zikan=zikan-240
offset=offset-240*1.5113636
gra=0
if grawake7 EQ 2 then begin
grawake7=3
roop=gkoyo
endif
if grawake7 EQ 1 then begin
grawake7=2
roop=240
endif
endif
endif else begin
if zikan GE gkoyo then begin
zikan=zikan-gkoyo
offset=offset-gkoyo*1.5113636
gra=0
grawake7=1
roop=240
ggatu1=ggatu1+1
if ggatu1 EQ 13 then ggatu1=1
case ggatu1 of
;koyomi sirabe
1:gkoyo=(31-20)*24
2:gkoyo=(28-20)*24
3:gkoyo=(31-20)*24
4:gkoyo=(30-20)*24
5:gkoyo=(31-20)*24
6:gkoyo=(30-20)*24
7:gkoyo=(31-20)*24
8:gkoyo=(31-20)*24
96
9:gkoyo=(30-20)*24
10:gkoyo=(31-20)*24
11:gkoyo=(30-20)*24
12:gkoyo=(31-20)*24
else:gkoyo=0
endcase
endif
endelse
endrep until(zikan LT roop)
endif
ggatu1=fix(strmid(list[filei],mozisuu-12,2))
case ggatu1 of
;koyomi sirabe
1:gkoyo=(31-20)*24
2:gkoyo=(28-20)*24
3:gkoyo=(31-20)*24
4:gkoyo=(30-20)*24
5:gkoyo=(31-20)*24
6:gkoyo=(30-20)*24
7:gkoyo=(31-20)*24
8:gkoyo=(31-20)*24
9:gkoyo=(30-20)*24
10:gkoyo=(31-20)*24
11:gkoyo=(30-20)*24
12:gkoyo=(31-20)*24
else:gkoyo=0
endcase
if gra EQ 0 then begin
;guraph sakusei syoki
tamex=[0,1,2,3,4,5,6]
tamey=[0,2,4,6,!values.f_nan,10,0]
gnenn=strmid(list[filei],mozisuu-14,2)
ggatu=strmid(list[filei],mozisuu-12,2)
97
case ggatu of
;koyomi sirabe saisyo
'01':eigo='January'
'02':eigo='February'
'03':eigo='March'
'04':eigo='April'
'05':eigo='May'
'06':eigo='June'
'07':eigo='July'
'08':eigo='August'
'09':eigo='September'
'10':eigo='October'
'11':eigo='November'
'12':eigo='December'
else:eigo='??'
endcase
if niti1 GE 1 and niti1 LE 10 then begin
if grawake EQ 1 then begin
wdelete,11
wdelete,21
endif
if grawake EQ 2 then begin
wdelete,12
wdelete,22
endif
if grawake EQ 3 then begin
wdelete,13
wdelete,23
endif
window,11,xsize=900,ysize=650
!p.position=[0.1,0.1,0.9,0.9]
PLOT, tamex, tamey, background= 255 + 256L * (255 + 256L * 255),COLOR = 0 + 256L * (0 + 256L * 0),$
xstyle=1,xticks=1,xtickv=1,xtickname=' ',yticklen=0.01,$
xrange=[0,264],yrange=[0,100],ytitle='all echoes',/nodata
98
xyouts,0.8,0.88,'all echoes',/normal,color= 255 + 256L * (0 + 256L * 0)
xyouts,0.8,0.86,'long echoes',/normal,color= 0 + 256L * (155 + 256L * 0)
xyouts,0.6,0.1,'________|________|________|________|________|_____
__|________|________|________|________|________',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.3,0.1,'|',color= 255 + 256L * (255 + 256L * 255)
xyouts,-0.58,0.1,'|_________________________________________________________________________________________
_____',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.105,0.063,':00',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.087,0.0795,'1st
10th
2nd
3rd
4th
5th
6th
7th
8th
9th
11th',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.29,'5',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.49,'10',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.69,'15',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.89,'20',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.95,0.45,'long echoes',orientation=90,/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.12,0.92,gnenn+' '+eigo,/normal,color= 0 + 256L * (0 + 256L * 0)
window,21,xsize=900,ysize=650
;2ch
!p.position=[0.1,0.1,0.9,0.9]
PLOT, tamex, tamey, background= 255 + 256L * (255 + 256L * 255),COLOR = 0 + 256L * (0 + 256L * 0),$
xstyle=1,xticks=1,xtickv=1,xtickname=' ',yticklen=0.01,$
xrange=[0,264],yrange=[0,100],ytitle='all echoes',/nodata
xyouts,0.8,0.88,'all echoes',/normal,color= 255 + 256L * (0 + 256L * 0)
xyouts,0.8,0.86,'long echoes',/normal,color= 0 + 256L * (155 + 256L * 0)
xyouts,0.6,0.1,'________|________|________|________|________|_____
__|________|________|________|________|________',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.3,0.1,'|',color= 255 + 256L * (255 + 256L * 255)
xyouts,-0.58,0.1,'|_________________________________________________________________________________________
_____',color= 0 + 256L * (0 + 256L * 0)
99
xyouts,0.105,0.063,':00',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.087,0.0795,'1st
10th
2nd
3rd
4th
5th
6th
7th
8th
11th',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.29,'5',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.49,'10',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.69,'15',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.89,'20',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.95,0.45,'long echoes',orientation=90,/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.12,0.92,gnenn+' '+eigo,/normal,color= 0 + 256L * (0 + 256L * 0)
gniti='1'
grawake=1
endif
if niti1 GE 11 and niti1 LE 20 then begin
if grawake EQ 1 then begin
wdelete,11
wdelete,21
endif
if grawake EQ 2 then begin
wdelete,12
wdelete,22
endif
if grawake EQ 3 then begin
wdelete,13
wdelete,23
endif
window,12,xsize=900,ysize=650
!p.position=[0.1,0.1,0.9,0.9]
PLOT, tameX, tameY, background= 255 + 256L * (255 + 256L * 255),COLOR = 0 + 256L * (0 + 256L * 0),$
xstyle=1,xticks=1,xtickv=1,xtickname=' ',yticklen=0.01,$
100
9th
xrange=[0,264],yrange=[0,100],ytitle='all echoes',/nodata
xyouts,0.8,0.88,'all echoes',/normal,color= 255 + 256L * (0 + 256L * 0)
xyouts,0.8,0.86,'long echoes',/normal,color= 0 + 256L * (155 + 256L * 0)
xyouts,0.6,0.1,'________|________|________|________|________|_____
__|________|________|________|________|________',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.3,0.1,'|',color= 255 + 256L * (255 + 256L * 255)
xyouts,-0.58,0.1,'|_________________________________________________________________________________________
_____',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.105,0.063,':00',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.087,0.0795,'11th
20th
12th
13th
14th
15th
16th
17th
18th
19th
21th',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.29,'5',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.49,'10',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.69,'15',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.89,'20',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.95,0.45,'long echoes',orientation=90,/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.12,0.92,gnenn+' '+eigo,/normal,color= 0 + 256L * (0 + 256L * 0)
window,22,xsize=900,ysize=650
!p.position=[0.1,0.1,0.9,0.9]
PLOT, tameX, tameY, background= 255 + 256L * (255 + 256L * 255),COLOR = 0 + 256L * (0 + 256L * 0),$
xstyle=1,xticks=1,xtickv=1,xtickname=' ',yticklen=0.01,$
xrange=[0,264],yrange=[0,100],ytitle='all echoes',/nodata
xyouts,0.8,0.88,'all echoes',/normal,color= 255 + 256L * (0 + 256L * 0)
xyouts,0.8,0.86,'long echoes',/normal,color= 0 + 256L * (155 + 256L * 0)
xyouts,0.6,0.1,'________|________|________|________|________|_____
__|________|________|________|________|________',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.3,0.1,'|',color= 255 + 256L * (255 + 256L * 255)
xyouts,-0.58,0.1,'|_________________________________________________________________________________________
101
_____',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.105,0.063,':00',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.087,0.0795,'11th
20th
12th
13th
14th
15th
16th
17th
18th
21th',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.29,'5',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.49,'10',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.69,'15',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.89,'20',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.95,0.45,'long echoes',orientation=90,/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.12,0.92,gnenn+' '+eigo,/normal,color= 0 + 256L * (0 + 256L * 0)
gniti='11'
grawake=2
endif
if niti1 GE 21 and niti1 LE 31 then begin
if grawake EQ 1 then begin
wdelete,11
wdelete,21
endif
if grawake EQ 2 then begin
wdelete,12
wdelete,22
endif
if grawake EQ 3 then begin
wdelete,13
wdelete,23
endif
window,13,xsize=900,ysize=650
!p.position=[0.1,0.1,0.9,0.9]
PLOT, tameX, tameY, background= 255 + 256L * (255 + 256L * 255),COLOR = 0 + 256L * (0 + 256L * 0),$
102
19th
xstyle=1,xticks=1,xtickv=1,xtickname=' ',yticklen=0.01,$
xrange=[0,264],yrange=[0,100],ytitle='all echoes',/nodata
xyouts,0.8,0.88,'all echoes',/normal,color= 255 + 256L * (0 + 256L * 0)
xyouts,0.8,0.86,'long echoes',/normal,color= 0 + 256L * (155 + 256L * 0)
xyouts,0.6,0.1,'________|________|________|________|________|_____
__|________|________|________|________|________',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.3,0.1,'|',color= 255 + 256L * (255 + 256L * 255)
xyouts,-0.58,0.1,'|_________________________________________________________________________________________
_____',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.105,0.063,':00',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.087,0.0795,'21th
30th
22th
23th
24th
25th
26th
27th
28th
31th',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.29,'5',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.49,'10',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.69,'15',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.89,'20',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.95,0.45,'long echoes',orientation=90,/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.12,0.92,gnenn+' '+eigo,/normal,color= 0 + 256L * (0 + 256L * 0)
window,23,xsize=900,ysize=650
!p.position=[0.1,0.1,0.9,0.9]
PLOT, tameX, tameY, background= 255 + 256L * (255 + 256L * 255),COLOR = 0 + 256L * (0 + 256L * 0),$
xstyle=1,xticks=1,xtickv=1,xtickname=' ',yticklen=0.01,$
xrange=[0,264],yrange=[0,100],ytitle='all echoes',/nodata
xyouts,0.8,0.88,'all echoes',/normal,color= 255 + 256L * (0 + 256L * 0)
xyouts,0.8,0.86,'long echoes',/normal,color= 0 + 256L * (155 + 256L * 0)
xyouts,0.6,0.1,'________|________|________|________|________|_____
__|________|________|________|________|________',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.3,0.1,'|',color= 255 + 256L * (255 + 256L * 255)
103
29th
xyouts,-0.58,0.1,'|_________________________________________________________________________________________
_____',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.105,0.063,':00',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.087,0.0795,'21th
30th
22th
23th
24th
25th
26th
31th',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.29,'5',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.49,'10',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.69,'15',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.89,'20',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.95,0.45,'long echoes',orientation=90,/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.12,0.92,gnenn+' '+eigo,/normal,color= 0 + 256L * (0 + 256L * 0)
gniti='21'
grawake=3
endif
if xzurasi EQ 0 then begin
;syoki iti henkou
zi000=fix(strmid(list[filei],mozisuu-8,2))
niti000=fix(strmid(list[filei],mozisuu-10,2))
if niti000 GE 11 and niti000 LE 20 then niti000=niti000-10
if niti000 GE 21 and niti000 LE 31 then niti000=niti000-20
zikan=(niti000-1)*24+zi000
offset=((niti000-1)*24+zi000)*1.5113636
xzurasi=1
endif
hazi=0
gra=1
endif
endif
;graph kakikomi syuuryou
mae hanbun
104
27th
28th
29th
ch1mato=ch1mato+ch1
;itizikannbun matometedasu
ch2mato=ch2mato+ch2
longmato1=longmato1+longeco1
longmato2=longmato2+longeco2
kazu=kazu+1
if(kazu EQ 6)then begin
if nan NE 0 then begin
printf,Lun2,strmid(list[filei],kokokara,konndake-4),'echo1=',ch1mato,'echo2=',ch2mato,'long1=',longmato1,$
'long2=',longmato2,' missing data!',nan,format='(a,1x,a,i3,1x,a,i3,2x,a,i2,1x,a,i2,2x,a,i2)'
nan=0
endif else begin
printf,Lun2,strmid(list[filei],kokokara,konndake-4),'echo1=',ch1mato,'echo2=',ch2mato,'long1=',longmato1,$
'long2=',longmato2,format='(a,1x,a,i3,1x,a,i3,2x,a,i2,1x,a,i2)'
re=0
endelse
echo1len=strlen(string(ch1mato))
long1len=strlen(string(longmato1))
echo2len=strlen(string(ch2mato))
long2len=strlen(string(longmato2))
ooutput=widget_info(event.top,find_by_uname='output')
widget_control,ooutput,set_value=$
'echo1='+strmid(string(ch1mato),echo1len-3,3)+', long1='+strmid(string(longmato1),long1len-2,2)+$
',
echo2='+strmid(string(ch2mato),echo2len-3,3)+', long2='+strmid(string(longmato2),long2len-2,2)
if graph EQ 1 then begin
case grawake of
;graph kakikomi hazime
;long echo kakikomi sakini
1:wset,11
2:wset,12
3:wset,13
else:
105
usiro hanbun
endcase
BAR_PLOT,longmato1*5,BAROFFSET=offset,BARSPACE=0.001,BARWIDTH=0.005,BASERANGE=0.5,$
colors=0 + 256L * (150 + 256L * 0),/Overplot
case grawake of
1:wset,21
2:wset,22
3:wset,23
else:
endcase
BAR_PLOT,longmato2*5,BAROFFSET=offset,BARSPACE=0.001,BARWIDTH=0.005,BASERANGE=0.5,$
colors=0 + 256L * (150 + 256L * 0),/Overplot
offset=offset+1.5113636
ygarr1[1]=ch1mato
ygarr2[1]=ch2mato
xgarr1[1]=zikan
xgarr2[1]=zikan
if hazi EQ 1 then begin
case grawake of
;all echo kakikomi
1:wset,11
2:wset,12
3:wset,13
else:
endcase
oplot,xgarr1,ygarr1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'1ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
case grawake of
1:wset,21
2:wset,22
106
3:wset,23
else:
endcase
oplot,xgarr2,ygarr2,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'2ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
endif else begin
xten1[0]=xgarr1[1]
yten1[0]=ygarr1[1]
xten2[0]=xgarr2[1]
yten2[0]=ygarr2[1]
case grawake of
;ten kakikomi ippatu
1:wset,11
2:wset,12
3:wset,13
else:
endcase
oplot,xten1,yten1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'1ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
case grawake of
1:wset,21
2:wset,22
3:wset,23
else:
endcase
oplot,xten2,yten2,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'2ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
endelse
107
hazi=1
ygarr1[0]=ygarr1[1]
ygarr2[0]=ygarr2[1]
xgarr1[0]=xgarr1[1]
xgarr2[0]=xgarr2[1]
zikan=zikan+1
if grawake EQ 1 or grawake EQ 2 then begin
if zikan GE 240 then begin
zikan=zikan-240
offset=offset-240*1.5113636
gra=0
endif
endif else begin
case ggatu of
;koyomi sirabe saisyo
'01':gkoyo=(31-20)*24
'02':gkoyo=(28-20)*24
'03':gkoyo=(31-20)*24
'04':gkoyo=(30-20)*24
'05':gkoyo=(31-20)*24
'06':gkoyo=(30-20)*24
'07':gkoyo=(31-20)*24
'08':gkoyo=(31-20)*24
'09':gkoyo=(30-20)*24
'10':gkoyo=(31-20)*24
'11':gkoyo=(30-20)*24
'12':gkoyo=(31-20)*24
else:gkoyo=0
endcase
if zikan GE gkoyo then begin
108
zikan=zikan-gkoyo
offset=offset-gkoyo*1.5113636
gra=0
endif
endelse
endif
;guraph kakikomi syuuryou sa
kazu=0
ch1mato=0
ch2mato=0
longmato1=0
longmato2=0
endif
;kakikomi owari 1tizikan bun
if filei EQ maxfile-1 and tobasu EQ 1 and kazu NE 0 then begin
;6punn 1tizi last
printf,Lun2,strmid(list[filei],kokokara,konndake-4),'echo1=',ch1mato,'echo2=',ch2mato,'long1=',longmato1,$
'long2=',longmato2,' missing data!',6-kazu+nan,format='(a,1x,a,i3,1x,a,i3,2x,a,i2,1x,a,i2,2x,a,i2)'
echo1len=strlen(string(ch1mato))
long1len=strlen(string(longmato1))
echo2len=strlen(string(ch2mato))
long2len=strlen(string(longmato2))
ooutput=widget_info(event.top,find_by_uname='output')
widget_control,ooutput,set_value=$
'echo1='+strmid(string(ch1mato),echo1len-3,3)+', long1='+strmid(string(longmato1),long1len-2,2)+$
',
echo2='+strmid(string(ch2mato),echo2len-3,3)+', long2='+strmid(string(longmato2),long2len-2,2)
if graph EQ 1 then begin
case grawake of
;long echo kakikomi sakini
1:wset,11
2:wset,12
3:wset,13
109
else:
endcase
BAR_PLOT,longmato1*5,BAROFFSET=offset,BARSPACE=0.001,BARWIDTH=0.005,BASERANGE=0.5,$
colors=0 + 256L * (150 + 256L * 0),/Overplot
case grawake of
1:wset,21
2:wset,22
3:wset,23
else:
endcase
BAR_PLOT,longmato2*5,BAROFFSET=offset,BARSPACE=0.001,BARWIDTH=0.005,BASERANGE=0.5,$
colors=0 + 256L * (150 + 256L * 0),/Overplot
ygarr1[1]=ch1mato
ygarr2[1]=ch2mato
xgarr1[1]=zikan
xgarr2[1]=zikan
if hazi EQ 1 then begin
case grawake of
;all echo kakikomi
1:wset,11
2:wset,12
3:wset,13
else:
endcase
oplot,xgarr1,ygarr1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'1ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
case grawake of
1:wset,21
2:wset,22
3:wset,23
else:
endcase
oplot,xgarr2,ygarr2,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'2ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
endif else begin
110
xten1[0]=xgarr1[1]
yten1[0]=ygarr1[1]
xten2[0]=xgarr2[1]
yten2[0]=ygarr2[1]
case grawake of
;ten kakikomi ippatu !!!
1:wset,11
2:wset,12
3:wset,13
else:
endcase
oplot,xten1,yten1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'1ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
case grawake of
1:wset,21
2:wset,22
3:wset,23
else:
endcase
oplot,xten2,yten2,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+'2ch'+gnenn+ggatu+'-'+gniti+'-.png',aaa
endelse
endif
endif
;last owari
printf,Lun1,strmid(list[filei],kokokara,konndake-4),'echo1=',ch1,'echo2=',ch2,'long1=',longeco1,$ ;10punn
'long2=',longeco2,'hikou1=',muki1,'hikou2=',muki2,'all1=',kazu1,'all2=',kazu2,$
'noip1=',mezi1,'noip2=',mezi2,'Yhei1=',kin1,'Yhei2=',kin2,$
format='(a,1x,a,i3,1x,a,i3,2x,a,i2,1x,a,i2,2x,a,i2,1x,a,i2,2x,a,i6,1x,a,i6,2x,a,i1,1x,a,i1,2x,a,i3,1x,a,i3)'
111
cx=140
;echo suu hyouzi suru
cy=348
echo=ch1
ku=6
hyouzi,cx,cy,b,echo,ku
cy=338
echo=ch2
hyouzi,cx,cy,b,echo,ku
cx=57
cy=348
version,cx,cy,b
endif else begin
;1ch no baai !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if graph EQ 1 then begin
;1ch
;aaaaaaa nenn gatu mo tobaseru nenn goe
if gtoba EQ 1 then begin
;tobasi gurafu
zikan=zikan+gratoba
offset=offset+gratoba*1.5113636
gratoba=0
gtoba=0
hazi=0
roop=240
grawake7=grawake
repeat begin
if grawake7 EQ 1 or grawake7 EQ 2 then begin
if zikan GE 240 then begin
zikan=zikan-240
offset=offset-240*1.5113636
gra=0
if grawake7 EQ 2 then begin
112
grawake7=3
roop=gkoyo
endif
if grawake7 EQ 1 then begin
grawake7=2
roop=240
endif
endif
endif else begin
if zikan GE gkoyo then begin
zikan=zikan-gkoyo
offset=offset-gkoyo*1.5113636
gra=0
grawake7=1
roop=240
ggatu1=ggatu1+1
if ggatu1 EQ 13 then ggatu1=1
case ggatu1 of
;koyomi sirabe
1:gkoyo=(31-20)*24
2:gkoyo=(28-20)*24
3:gkoyo=(31-20)*24
4:gkoyo=(30-20)*24
5:gkoyo=(31-20)*24
6:gkoyo=(30-20)*24
7:gkoyo=(31-20)*24
8:gkoyo=(31-20)*24
9:gkoyo=(30-20)*24
10:gkoyo=(31-20)*24
11:gkoyo=(30-20)*24
12:gkoyo=(31-20)*24
else:gkoyo=0
endcase
endif
endelse
endrep until(zikan LT roop)
113
endif
ggatu1=fix(strmid(list[filei],mozisuu-12,2))
case ggatu1 of
;koyomi sirabe
1:gkoyo=(31-20)*24
2:gkoyo=(28-20)*24
3:gkoyo=(31-20)*24
4:gkoyo=(30-20)*24
5:gkoyo=(31-20)*24
6:gkoyo=(30-20)*24
7:gkoyo=(31-20)*24
8:gkoyo=(31-20)*24
9:gkoyo=(30-20)*24
10:gkoyo=(31-20)*24
11:gkoyo=(30-20)*24
12:gkoyo=(31-20)*24
else:gkoyo=0
endcase
if gra EQ 0 then begin
;guraph sakusei syoki
tamex=[0,1,2,3,4,5,6]
tamey=[0,2,4,6,!values.f_nan,10,0]
gnenn=strmid(list[filei],mozisuu-14,2)
ggatu=strmid(list[filei],mozisuu-12,2)
case ggatu of
;koyomi sirabe saisyo
'01':eigo='January'
'02':eigo='February'
'03':eigo='March'
'04':eigo='April'
'05':eigo='May'
'06':eigo='June'
'07':eigo='July'
'08':eigo='August'
'09':eigo='September'
114
'10':eigo='October'
'11':eigo='November'
'12':eigo='December'
else:eigo='??'
endcase
if niti1 GE 1 and niti1 LE 10 then begin
if grawake EQ 1 then wdelete,1
if grawake EQ 2 then wdelete,2
if grawake EQ 3 then wdelete,3
window,1,xsize=900,ysize=650
!p.position=[0.1,0.1,0.9,0.9]
PLOT, tamex, tamey, background= 255 + 256L * (255 + 256L * 255),COLOR = 0 + 256L * (0 + 256L * 0),$
xstyle=1,xticks=1,xtickv=1,xtickname=' ',yticklen=0.01,$
xrange=[0,264],yrange=[0,100],ytitle='all echoes',/nodata
xyouts,0.8,0.88,'all echoes',/normal,color= 255 + 256L * (0 + 256L * 0)
xyouts,0.8,0.86,'long echoes',/normal,color= 0 + 256L * (155 + 256L * 0)
xyouts,0.6,0.1,'________|________|________|________|________|_____
__|________|________|________|________|________',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.3,0.1,'|',color= 255 + 256L * (255 + 256L * 255)
xyouts,-0.58,0.1,'|_________________________________________________________________________________________
_____',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.105,0.063,':00',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.087,0.0795,'1st
10th
2nd
3rd
4th
5th
6th
11th',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.29,'5',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.49,'10',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.69,'15',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.89,'20',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.95,0.45,'long echoes',orientation=90,/normal,color= 0 + 256L * (0 + 256L * 0)
115
7th
8th
9th
xyouts,0.12,0.92,gnenn+' '+eigo,/normal,color= 0 + 256L * (0 + 256L * 0)
gniti='1'
grawake=1
endif
if niti1 GE 11 and niti1 LE 20 then begin
if grawake EQ 1 then wdelete,1
if grawake EQ 2 then wdelete,2
if grawake EQ 3 then wdelete,3
window,2,xsize=900,ysize=650
!p.position=[0.1,0.1,0.9,0.9]
PLOT, tameX, tameY, background= 255 + 256L * (255 + 256L * 255),COLOR = 0 + 256L * (0 + 256L * 0),$
xstyle=1,xticks=1,xtickv=1,xtickname=' ',yticklen=0.01,$
xrange=[0,264],yrange=[0,100],ytitle='all echoes',/nodata
xyouts,0.8,0.88,'all echoes',/normal,color= 255 + 256L * (0 + 256L * 0)
xyouts,0.8,0.86,'long echoes',/normal,color= 0 + 256L * (155 + 256L * 0)
xyouts,0.6,0.1,'________|________|________|________|________|_____
__|________|________|________|________|________',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.3,0.1,'|',color= 255 + 256L * (255 + 256L * 255)
xyouts,-0.58,0.1,'|_________________________________________________________________________________________
_____',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.105,0.063,':00',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.087,0.0795,'11th
20th
12th
13th
14th
21th',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.29,'5',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.49,'10',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.69,'15',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.89,'20',/normal,color= 0 + 256L * (0 + 256L * 0)
116
15th
16th
17th
18th
19th
xyouts,0.95,0.45,'long echoes',orientation=90,/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.12,0.92,gnenn+' '+eigo,/normal,color= 0 + 256L * (0 + 256L * 0)
gniti='11'
grawake=2
endif
if niti1 GE 21 and niti1 LE 31 then begin
if grawake EQ 1 then wdelete,1
if grawake EQ 2 then wdelete,2
if grawake EQ 3 then wdelete,3
window,3,xsize=900,ysize=650
!p.position=[0.1,0.1,0.9,0.9]
PLOT, tameX, tameY, background= 255 + 256L * (255 + 256L * 255),COLOR = 0 + 256L * (0 + 256L * 0),$
xstyle=1,xticks=1,xtickv=1,xtickname=' ',yticklen=0.01,$
xrange=[0,264],yrange=[0,100],ytitle='all echoes',/nodata
xyouts,0.8,0.88,'all echoes',/normal,color= 255 + 256L * (0 + 256L * 0)
xyouts,0.8,0.86,'long echoes',/normal,color= 0 + 256L * (155 + 256L * 0)
xyouts,0.6,0.1,'________|________|________|________|________|_____
__|________|________|________|________|________',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.3,0.1,'|',color= 255 + 256L * (255 + 256L * 255)
xyouts,-0.58,0.1,'|_________________________________________________________________________________________
_____',color= 0 + 256L * (0 + 256L * 0)
xyouts,0.105,0.063,':00',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.087,0.0795,'21th
30th
22th
23th
24th
31th',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.29,'5',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.49,'10',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.69,'15',/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.91,0.89,'20',/normal,color= 0 + 256L * (0 + 256L * 0)
117
25th
26th
27th
28th
29th
xyouts,0.95,0.45,'long echoes',orientation=90,/normal,color= 0 + 256L * (0 + 256L * 0)
xyouts,0.12,0.92,gnenn+' '+eigo,/normal,color= 0 + 256L * (0 + 256L * 0)
gniti='21'
grawake=3
endif
if xzurasi EQ 0 then begin
;syoki iti henkou
zi000=fix(strmid(list[filei],mozisuu-8,2))
niti000=fix(strmid(list[filei],mozisuu-10,2))
if niti000 GE 11 and niti000 LE 20 then niti000=niti000-10
if niti000 GE 21 and niti000 LE 31 then niti000=niti000-20
zikan=(niti000-1)*24+zi000
offset=((niti000-1)*24+zi000)*1.5113636
xzurasi=1
endif
hazi=0
gra=1
endif
endif
;graph kakikomi syuuryou
ch1mato=ch1mato+ch1
mae hanbun
1ch
;itizikannbun matomete dasu
longmato1=longmato1+longeco1
kazu=kazu+1
if(kazu EQ 6)then begin
if nan NE 0 then begin
printf,Lun2,strmid(list[filei],kokokara,konndake-4),'echo=',ch1mato,'long=',longmato1,' missing data!',nan,$
miss
format='(a,1x,a,i3,2x,a,i2,2x,a,i2)'
nan=0
endif else begin
118
;6
printf,Lun2,strmid(list[filei],kokokara,konndake-4),'echo=',ch1mato,'long=',longmato1,$
;6
format='(a,1x,a,i3,2x,a,i2)'
re=0
endelse
echo1len=strlen(string(ch1mato))
long1len=strlen(string(longmato1))
ooutput=widget_info(event.top,find_by_uname='output')
widget_control,ooutput,set_value=$
'echo='+strmid(string(ch1mato),echo1len-3,3)+', long='+strmid(string(longmato1),long1len-2,2)
if graph EQ 1 then begin
case grawake of
;graph kakikomi hazime
usiro hanbun
1ch
;long echo kakikomi sakini
1:wset,1
2:wset,2
3:wset,3
else:
endcase
BAR_PLOT,longmato1*5,BAROFFSET=offset,BARSPACE=0.001,BARWIDTH=0.005,BASERANGE=0.5,$
colors=0 + 256L * (150 + 256L * 0),/Overplot
offset=offset+1.5113636
ygarr1[1]=ch1mato
xgarr1[1]=zikan
if hazi EQ 1 then begin
case grawake of
;all echo kakikomi
1:wset,1
2:wset,2
3:wset,3
else:
119
endcase
oplot,xgarr1,ygarr1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+gnenn+ggatu+'-'+gniti+'-.png',aaa
endif else begin
xten1[0]=xgarr1[1]
yten1[0]=ygarr1[1]
case grawake of
;ten kakikomi ippatu
1:wset,1
2:wset,2
3:wset,3
else:
endcase
oplot,xten1,yten1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+gnenn+ggatu+'-'+gniti+'-.png',aaa
endelse
hazi=1
ygarr1[0]=ygarr1[1]
xgarr1[0]=xgarr1[1]
zikan=zikan+1
if grawake EQ 1 or grawake EQ 2 then begin
if zikan GE 240 then begin
zikan=zikan-240
offset=offset-240*1.5113636
gra=0
endif
120
endif else begin
case ggatu of
;koyomi sirabe saisyo
'01':gkoyo=(31-20)*24
'02':gkoyo=(28-20)*24
'03':gkoyo=(31-20)*24
'04':gkoyo=(30-20)*24
'05':gkoyo=(31-20)*24
'06':gkoyo=(30-20)*24
'07':gkoyo=(31-20)*24
'08':gkoyo=(31-20)*24
'09':gkoyo=(30-20)*24
'10':gkoyo=(31-20)*24
'11':gkoyo=(30-20)*24
'12':gkoyo=(31-20)*24
else:gkoyo=0
endcase
if zikan GE gkoyo then begin
zikan=zikan-gkoyo
offset=offset-gkoyo*1.5113636
gra=0
endif
endelse
endif
;guraph kakikomi syuuryou sa
;1ch none
kazu=0
ch1mato=0
longmato1=0
endif
if filei EQ maxfile-1 and tobasu EQ 1 and kazu NE 0 then begin
;6 last
printf,Lun2,strmid(list[filei],kokokara,konndake-4),'echo=',ch1mato,'long=',longmato1,'
121
missing
data!',6-kazu+nan,$
format='(a,1x,a,i3,2x,a,i2,2x,a,i2)'
echo1len=strlen(string(ch1mato))
long1len=strlen(string(longmato1))
ooutput=widget_info(event.top,find_by_uname='output')
widget_control,ooutput,set_value=$
'echo='+strmid(string(ch1mato),echo1len-3,3)+', long='+strmid(string(longmato1),long1len-2,2)
if graph EQ 1 then begin
case grawake of
;long echo kakikomi sakini
1:wset,1
2:wset,2
3:wset,3
else:
endcase
BAR_PLOT,longmato1*5,BAROFFSET=offset,BARSPACE=0.001,BARWIDTH=0.005,BASERANGE=0.5,$
colors=0 + 256L * (150 + 256L * 0),/Overplot
ygarr1[1]=ch1mato
xgarr1[1]=zikan
if hazi EQ 1 then begin
case grawake of
;all echo kakikomi
1:wset,1
2:wset,2
3:wset,3
else:
endcase
oplot,xgarr1,ygarr1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+gnenn+ggatu+'-'+gniti+'-.png',aaa
endif else begin
xten1[0]=xgarr1[1]
yten1[0]=ygarr1[1]
case grawake of
;ten kakikomi ippatu !!!
1:wset,1
122
2:wset,2
3:wset,3
else:
endcase
oplot,xten1,yten1,COLOR = 255 + 256L * (0 + 256L * 0),psym=-4,symsize=0.5,linestyle=0,thick=2
aaa=tvrd(true=1)
write_png,dir3+gnenn+ggatu+'-'+gniti+'-.png',aaa
endelse
endif
endif
;1ch last
printf,Lun1,strmid(list[filei],kokokara,konndake-4),'echo=',ch1,'long=',longeco1,'hikou=',muki1,$
'all=',kazu1,'noip=',mezi1,'Yhei=',kin1,$
format='(a,1x,a,i3,2x,a,i2,2x,a,i2,2x,a,i6,2x,a,i1,2x,a,i3)'
cx=140
;echo suu hyouzi suru
cy=338
echo=ch1
ku=6
hyouzi,cx,cy,b,echo,ku
cx=57
version,cx,cy,b
endelse
if pass EQ 1 then begin
WRITE_PNG,dir2+'result'+strmid(list[filei],kokokara,konndake),b
endif
mozisuu=strlen(list[filei])
if ch EQ 2 then begin
source2[22]=strmid(list[filei],mozisuu-14,10)
123
;1
source2[23]=kin1
source2[24]=kin2
endif else begin
source1[19]=strmid(list[filei],mozisuu-14,10)
source1[20]=kin1
endelse
endfor
; Main loop
if para EQ 1 then begin
printf,Lun1,''
printf,Lun2,''
aaaa=INTARR(10)
aaaa = BIN_DATE(Ascii_Time)
printf,Lun1,'Make',aaaa[0],'/',aaaa[1],'/',aaaa[2],'/',aaaa[3],':',aaaa[4],'Ver 1.0',$
format='(a,2x,i4,a,i2,a,i2,a,i2,a,i2,3x,a)'
printf,Lun2,'Make',aaaa[0],'/',aaaa[1],'/',aaaa[2],'/',aaaa[3],':',aaaa[4],'Ver 1.0',$
format='(a,2x,i4,a,i2,a,i2,a,i2,a,i2,3x,a)'
i=0
source2[23]=string(source2[23])
ccc=STRPOS(source2[23], ' ', /REVERSE_SEARCH)
bbb=strlen(source2[23])
source2[23]=strmid(source2[23],ccc+1,bbb-ccc+1)
source2[24]=string(source2[24])
ccc=STRPOS(source2[24], ' ', /REVERSE_SEARCH)
bbb=strlen(source2[24])
source2[24]=strmid(source2[24],ccc+1,bbb-ccc+1)
source1[20]=string(source1[20])
ccc=STRPOS(source1[20], ' ', /REVERSE_SEARCH)
bbb=strlen(source1[20])
source1[20]=strmid(source1[20],ccc+1,bbb-ccc+1)
124
if ch EQ 2 then begin
ii=24
endif else begin
ii=20
endelse
for i=0,ii do begin
if ch EQ 1 then begin
printf,Lun1,string(source1[i])
printf,Lun2,string(source1[i])
endif else begin
printf,Lun1,string(source2[i])
printf,Lun2,string(source2[i])
endelse
endfor
endif
print,'finished.'
Free_Lun, Lun1
Free_Lun, Lun2
end
pro version,cx,cy,b
b[*,cx ,cy+6:cy+8]=255
b[*,cx+1 ,cy+3:cy+5]=255
b[*,cx+2 ,cy:cy+2]=255
b[*,cx+3 ,cy+3:cy+5]=255
b[*,cx+4 ,cy+6:cy+8]=255
cx=cx+6
125
b[*,cx ,cy+1:cy+4]=255
b[*,cx+1:cx+3 ,cy]=255
b[*,cx+1:cx+3 ,cy+3]=255
b[*,cx+1:cx+3 ,cy+5]=255
b[*,cx+4 ,cy+3:cy+4]=255
b[*,cx+4 ,cy+1]=255
cx=cx+6
b[*,cx+1 ,cy:cy+5]=255
b[*,cx+2 ,cy+4]=255
b[*,cx+3:cx+4 ,cy+5]=255
cx=cx+12
h1,cx,cy,b
cx=cx+6
b[*,cx ,cy:cy+1]=255
b[*,cx+1 ,cy:cy+1]=255
cx=cx+6
h0,cx,cy,b
end
pro h0,cx,cy,b
b[*,cx+1:cx+2 ,cy+8]=255
b[*,cx+1:cx+2 ,cy]=255
b[*,cx+3 ,cy+1:cy+7]=255
b[*,cx ,cy+1:cy+7]=255
end
pro h1,cx,cy,b
b[*,cx+1 ,cy+7]=255
;1
b[*,cx+2 ,cy:cy+8]=255
end
pro h2,cx,cy,b
b[*,cx+1:cx+2 ,cy+8]=255
b[*,cx+1:cx+3 ,cy]=255
b[*,cx+3 ,cy+5:cy+7]=255
b[*,cx+2 ,cy+4]=255
126
b[*,cx+1 ,cy+2:cy+3]=255
b[*,cx ,cy:cy+1]=255
b[*,cx ,cy+6:cy+7]=255
end
pro h3,cx,cy,b
b[*,cx+1:cx+2 ,cy+8]=255
b[*,cx+1:cx+2 ,cy+4]=255
b[*,cx+1:cx+2 ,cy]=255
b[*,cx+3 ,cy+1:cy+3]=255
b[*,cx+3 ,cy+5:cy+7]=255
b[*,cx ,cy+1:cy+2]=255
b[*,cx ,cy+6:cy+7]=255
end
pro h4,cx,cy,b
b[*,cx+2 ,cy+6:cy+7]=255
b[*,cx+3 ,cy:cy+8]=255
b[*,cx+1 ,cy+4:cy+5]=255
b[*,cx ,cy+2:cy+3]=255
b[*,cx:cx+4 ,cy+2]=255
end
pro h5,cx,cy,b
b[*,cx:cx+3 ,cy+8]=255
b[*,cx+1:cx+2 ,cy+5]=255
b[*,cx+1:cx+2 ,cy]=255
b[*,cx+3 ,cy+1:cy+4]=255
b[*,cx ,cy+1:cy+2]=255
b[*,cx ,cy+4:cy+7]=255
end
pro h6,cx,cy,b
b[*,cx+1:cx+2 ,cy+8]=255
b[*,cx+1:cx+2 ,cy+4]=255
b[*,cx+1:cx+2 ,cy]=255
b[*,cx+3 ,cy+1:cy+3]=255
b[*,cx+3 ,cy+6:cy+7]=255
b[*,cx ,cy+1:cy+7]=255
end
127
pro h7,cx,cy,b
b[*,cx:cx+2 ,cy+8]=255
;7
b[*,cx+3 ,cy+6:cy+8]=255
b[*,cx+2 ,cy+3:cy+5]=255
b[*,cx+1 ,cy:cy+2]=255
end
pro h8,cx,cy,b
b[*,cx+1:cx+2 ,cy+8]=255
b[*,cx+1:cx+2 ,cy+4]=255
b[*,cx+1:cx+2 ,cy]=255
b[*,cx+3 ,cy+1:cy+3]=255
b[*,cx+3 ,cy+5:cy+7]=255
b[*,cx ,cy+1:cy+3]=255
b[*,cx ,cy+5:cy+7]=255
end
pro h9,cx,cy,b
b[*,cx+1:cx+2 ,cy+8]=255
b[*,cx+1:cx+2 ,cy+4]=255
b[*,cx+1:cx+2 ,cy]=255
b[*,cx+3 ,cy+1:cy+7]=255
b[*,cx ,cy+5:cy+7]=255
b[*,cx ,cy+1:cy+2]=255
end
pro hyouzi,cx,cy,b,echo,ku
suuzi=string(echo)
zi=strmid(suuzi,ku,1)
zi2=strmid(suuzi,ku+1,1)
zi3=strmid(suuzi,ku-1,1)
b[*,cx:cx+5 ,cy:cy+9]=0
;print,suuzi,' 100=',zi3,'10=',zi,' 1=',zi2
case zi2 of
;echo suu hyouzi 1nokurai
'0':h0,cx,cy,b
'1':h1,cx,cy,b
'2':h2,cx,cy,b
'3':h3,cx,cy,b
128
'4':h4,cx,cy,b
'5':h5,cx,cy,b
'6':h6,cx,cy,b
'7':h7,cx,cy,b
'8':h8,cx,cy,b
'9':h9,cx,cy,b
else:
endcase
cx=cx-5
b[*,cx:cx+4 ,cy:cy+9]=0
case zi of
;echo suu hyouzi 10nokurai
'0':h0,cx,cy,b
'1':h1,cx,cy,b
'2':h2,cx,cy,b
'3':h3,cx,cy,b
'4':h4,cx,cy,b
'5':h5,cx,cy,b
'6':h6,cx,cy,b
'7':h7,cx,cy,b
'8':h8,cx,cy,b
'9':h9,cx,cy,b
else:
endcase
cx=cx+5
cx=cx-10
b[*,cx:cx+4 ,cy:cy+9]=0
case zi3 of
;echo suu hyouzi 10nokurai
'0':h0,cx,cy,b
'1':h1,cx,cy,b
'2':h2,cx,cy,b
'3':h3,cx,cy,b
'4':h4,cx,cy,b
'5':h5,cx,cy,b
'6':h6,cx,cy,b
'7':h7,cx,cy,b
'8':h8,cx,cy,b
129
'9':h9,cx,cy,b
else:
endcase
cx=cx+10
end
pro shima, x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
;tannsaku saburuuchin
s2[x,y]=10
ura[x,y]=n
kata=0.0
nasi=0
migi = x + 1
hidari = x - 1
ue = y + 1
shita = y - 1
if x1 GE x then begin
x1=x
if y1 GE y then begin
y1=y
endif
endif
if y2 GT y then m=m+1
if x2 LE x then begin
x2=x
y2=y
endif
if s2[x,ue] EQ 1
then begin
nasi=1
shima,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
endif
if s2[migi,y] EQ 1 then begin
130
nasi=1
shima,migi,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
endif
if s2[x,shita] EQ 1 then begin
nasi=1
shima,x,shita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
endif
if s2[hidari,y] EQ 1 then begin
nasi=1
shima,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
endif
if s2[x,ue] EQ 0 or s2[x,ue] EQ 2 then begin
s2[x,ue]=2
ura[x,ue]=n
k=k+1
shiue,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
k=k-1
endif
if s2[migi,y] EQ 0 or s2[migi,y] EQ 2 then begin
s2[migi,y]=2
ura[migi,y]=n
k=k+1
shimigi,migi,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
k=k-1
kata=(float(y1)-float(y2)+0.01)/(float(x1)-float(x2)+0.01)
if nasi EQ 0 and m GE 2 and kata LT katamuki and x2-x1 GE 3 then begin
x=x+3
y=y-2
s2[x,y]=12
ura[x,y]=n
shimigi, x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
z=1
;migi jump no sirusi
131
;tyuui!!!
if x LE 620 then begin
if nasi EQ 0 then begin
;migi jump tooku
for xx=x+4,x+7 do begin
for yy=y-6,y-3 do begin
if s2[xx,yy] EQ 1 then begin
shima, xx,yy,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
endif
endfor
endfor
endif
endif
x=x-3
y=y+2
endif else begin
if nasi EQ 0 and x2-x1 GE 10 then begin
;longeco--
tyuui
x=x+3
s2[x,y]=12
ura[x,y]=n
shimigi, x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
shiue, x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
z=2
x=x-3
endif
endelse
endif
if s2[x,shita] EQ 0 or s2[x,shita] EQ 2 then begin
s2[x,shita]=2
ura[x,shita]=n
k=k+1
shishita,x,shita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=k-1
endif
if s2[hidari,y] EQ 0 or s2[hidari,y] EQ 2 then begin
132
mitu=0
s2[hidari,y]=2
ura[hidari,y]=n
k=k+1
shihidari,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=k-1
kata=(float(y1)-float(y2)+0.001)/(float(x1)-float(x2)+0.001)
if mitu EQ 0 and z EQ 1 and x1 EQ x and kata LT katamuki then begin
mitu=1
mitukaru=0
x=x-3
y=y+2
s2[x,y]=12
ura[x,y]=n
jumpmoto,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
x=x+3
y=y-2
endif else begin
if mitu EQ 0 and z EQ 2 and x1 EQ x then begin
;long eco--
mitu=1
mitukaru=0
x=x-3
s2[x,y]=12
ura[x,y]=n
jumpyoko,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
x=x+3
endif
endelse
endif
if x1 GE x then begin
x1=x
if y1 GE y then begin
y1=y
endif
133
endif
end
pro jumpmoto,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
;hidariue jump ru-tin
hidari = x - 1
ue = y + 1
hako=0
if s2[x,ue] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[x,ue]=11
hako=k
k=0
if ura[x,ue] NE nnn then begin
nnn=ura[x,ue]
nn=nn+1
endif
jumpmoto,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=hako
endif
if s2[hidari,y] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[hidari,y]=11
hako=k
k=0
134
if ura[hidari,y] NE nnn then begin
nnn=ura[hidari,y]
nn=nn+1
endif
jumpmoto,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=hako
endif
if k LE te then begin
if s2[hidari,y] EQ 0 or s2[hidari,y] EQ 2 or s2[hidari,y] EQ 3 then begin
mitu=0
s2[hidari,y]=2
ura[hidari,y]=n
k=k+2
jump,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=k-2
if mitu EQ 0 and mitukaru EQ 1 then begin
x=x-3
y=y+2
s2[x,y]=12
mitukaru=0
jumpmoto,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
x=x+3
y=y-2
endif
endif
endif
end
pro jump,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
hidari = x - 1
ue = y + 1
hako=0
135
;hidariue jump ru-tin
if s2[x,ue] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[x,ue]=11
hako=k
k=0
if ura[x,ue] NE nnn then begin
nnn=ura[x,ue]
nn=nn+1
endif
jumpmoto,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=hako
endif
if s2[hidari,y] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[hidari,y]=11
hako=k
k=0
if ura[hidari,y] NE nnn then begin
nnn=ura[hidari,y]
nn=nn+1
endif
jumpmoto,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=hako
endif
if k LE te then begin
136
if s2[x,ue] EQ 0 or s2[x,ue] EQ 2 or s2[x,ue] EQ 3 then begin
s2[x,ue]=2
ura[x,ue]=n
k=k+1
jump,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=k-1
endif
if s2[hidari,y] EQ 0 or s2[hidari,y] EQ 2 or s2[hidari,y] EQ 3 then begin
s2[hidari,y]=2
ura[hidari,y]=n
k=k+2
jump,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=k-2
endif
endif
end
pro jumpyoko,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
hidari = x - 1
sita = y - 1
hako=0
if s2[x,sita] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[x,sita]=11
hako=k
k=0
if ura[x,sita] NE nnn then begin
nnn=ura[x,sita]
nn=nn+1
endif
137
;long you
jumpyoko,x,sita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=hako
endif
if s2[hidari,y] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[hidari,y]=11
hako=k
k=0
if ura[hidari,y] NE nnn then begin
nnn=ura[hidari,y]
nn=nn+1
endif
jumpyoko,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=hako
endif
if k LE te then begin
if s2[x,sita] EQ 0 or s2[x,sita] EQ 2 or s2[x,sita] EQ 3 then begin
mitu=0
s2[x,sita]=2
ura[x,sita]=n
k=k+1
jumpsi,x,sita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=k-1
endif
if s2[hidari,y] EQ 0 or s2[hidari,y] EQ 2 or s2[hidari,y] EQ 3 then begin
mitu=0
s2[hidari,y]=2
ura[hidari,y]=n
k=k+2
jumphi,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
138
k=k-2
if mitu EQ 0 and mitukaru EQ 1 then begin
x=x-3
s2[x,y]=12
mitukaru=0
jumpyoko,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
x=x+3
endif
endif
endif
end
pro jumphi,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
hidari = x - 1
ue = y + 1
hako=0
if s2[x,ue] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[x,ue]=11
hako=k
k=0
if ura[x,ue] NE nnn then begin
nnn=ura[x,ue]
nn=nn+1
endif
jumpyoko,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=hako
endif
139
if s2[hidari,y] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[hidari,y]=11
hako=k
k=0
if ura[hidari,y] NE nnn then begin
nnn=ura[hidari,y]
nn=nn+1
endif
jumpyoko,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=hako
endif
if k LE te then begin
if s2[x,ue] EQ 0 or s2[x,ue] EQ 2 or s2[x,ue] EQ 3 then begin
s2[x,ue]=2
ura[x,ue]=n
k=k+1
jumphi,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=k-1
endif
if s2[hidari,y] EQ 0 or s2[hidari,y] EQ 2 or s2[hidari,y] EQ 3 then begin
s2[hidari,y]=2
ura[hidari,y]=n
k=k+2
jumphi,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=k-2
endif
endif
end
140
pro jumpsi,x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
hidari = x - 1
sita = y - 1
hako=0
if s2[x,sita] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[x,sita]=11
hako=k
k=0
if ura[x,sita] NE nnn then begin
nnn=ura[x,sita]
nn=nn+1
endif
jumpyoko,x,sita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=hako
endif
if s2[hidari,y] EQ 10 then begin
if x1 GE x then begin
x1=x
y1=y
endif
mitu=1
mitukaru=1
s2[hidari,y]=11
hako=k
k=0
if ura[hidari,y] NE nnn then begin
nnn=ura[hidari,y]
nn=nn+1
endif
jumpyoko,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
141
k=hako
endif
if k LE te then begin
if s2[x,sita] EQ 0 or s2[x,sita] EQ 2 or s2[x,sita] EQ 3 then begin
s2[x,sita]=2
ura[x,sita]=n
k=k+1
jumpsi,x,sita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=k-1
endif
if s2[hidari,y] EQ 0 or s2[hidari,y] EQ 2 or s2[hidari,y] EQ 3 then begin
s2[hidari,y]=2
ura[hidari,y]=n
k=k+2
jumpsi,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,mitukaru
k=k-2
endif
endif
end
pro shiue, x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
migi = x + 1
ue = y + 1
hako=0
if s2[migi,y] EQ 1 then begin
nasi=1
hako=k
k=0
shima,migi,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=hako
endif
if s2[x,ue] EQ 1 then begin
142
nasi=1
hako=k
k=0
shima,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=hako
endif
if ura[x,ue] NE n and ura[x,ue] NE 0 then s2[x,ue]=3
;kore ire wasureteru
if ura[migi,y] NE n and ura[migi,y] NE 0 then s2[migi,y]=3 ;long to hikouki ni
if k LE te then begin
if s2[x,ue] EQ 0 or s2[x,ue] EQ 2 then begin
s2[x,ue]=2
ura[x,ue]=n
k=k+1
shiue,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
k=k-1
endif
if s2[migi,y] EQ 0 or s2[migi,y] EQ 2 then begin
s2[migi,y]=2
ura[migi,y]=n
k=k+2
shiue,migi,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
k=k-2
endif
endif
end
pro shimigi, x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
migi = x + 1
shita = y - 1
hako=0
if s2[migi,y] EQ 1 then begin
nasi=1
hako=k
143
k=0
shima,migi,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=hako
endif
if s2[x,shita] EQ 1 then begin
nasi=1
hako=k
k=0
shima,x,shita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=hako
endif
if ura[migi,y] NE n and ura[migi,y] NE 0 then s2[migi,y]=3
if ura[x,shita] NE n and ura[x,shita] NE 0 then s2[x,shita]=3
if k LE te then begin
if s2[migi,y] EQ 0 or s2[migi,y] EQ 2 then begin
s2[migi,y]=2
ura[migi,y]=n
k=k+2
shimigi,migi,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
k=k-2
endif
if s2[x,shita] EQ 0 or s2[x,shita] EQ 2 then begin
s2[x,shita]=2
ura[x,shita]=n
k=k+1
shimigi,x,shita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki,nasi
k=k-1
endif
endif
end
pro shishita, x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
hidari = x - 1
144
shita = y - 1
hako=0
if s2[hidari,y] EQ 1 then begin
if x1 GE hidari then begin
x1=hidari
y1=y
endif
hako=k
k=0
shima,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=hako
endif
if s2[x,shita] EQ 1 then begin
if x1 GE x then begin
x1=x
y1=shita
endif
hako=k
k=0
shima,x,shita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=hako
endif
if ura[hidari,y] NE n and ura[hidari,y] NE 0 then s2[hidari,y]=3
if ura[x,shita] NE n and ura[x,shita] NE 0 then s2[x,shita]=3
if k LE te then begin
if s2[hidari,y] EQ 0 or s2[hidari,y] EQ 2 then begin
s2[hidari,y]=2
ura[hidari,y]=n
k=k+2
shishita,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=k-2
endif
if s2[x,shita] EQ 0 or s2[x,shita] EQ 2 then begin
s2[x,shita]=2
145
ura[x,shita]=n
k=k+1
shishita,x,shita,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=k-1
endif
endif
end
pro shihidari, x,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
hidari = x - 1
ue = y + 1
hako=0
if s2[x,ue] EQ 1 then begin
if x1 GE x then begin
x1=x
y1=ue
endif
mitu=1
hako=k
k=0
shima,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=hako
endif
if s2[hidari,y] EQ 1 then begin
if x1 GE hidari then begin
x1=hidari
y1=y
endif
mitu=1
hako=k
k=0
shima,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=hako
endif
146
if ura[x,ue] NE n and ura[x,ue] NE 0 then s2[x,ue]=3
if ura[hidari,y] NE n and ura[hidari,y] NE 0 then s2[hidari,y]=3
if k LE te then begin
if s2[x,ue] EQ 0 or s2[x,ue] EQ 2 then begin
s2[x,ue]=2
ura[x,ue]=n
k=k+1
shihidari,x,ue,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=k-1
endif
if s2[hidari,y] EQ 0 or s2[hidari,y] EQ 2 then begin
s2[hidari,y]=2
ura[hidari,y]=n
k=k+2
shihidari,hidari,y,s2,k,n,ura,x1,x2,y1,y2,m,mitu,z,nn,nnn,te,katamuki
k=k-2
endif
endif
end
147
Fly UP