ホームページへもどる
降下火山灰シミュレーション入門 - 55tephraへの導入 -         2017年1月3日連載開始 
火山が噴火した時に火山灰がどこにどのくらい降ってくるかをシミュレーションするソフトウエア55tephraの入門記事です。
世界的に有名なTephra2というソフトを佐伯がProcessingという言語で改造移植したものをシリーズで公開します。
本家よりもずっと簡単に使えます。また、Tephra2のコードとできる限り同じ変数名やロジック構造を使いながらも
簡略化できる部分は整理してありますので、Tephra2のCソースコードを理解したい方がまず練習で読むのにも最適です。
このサイトでは、55tephraを実行するための準備と、ソースコードを読むための知識を段階的に説明していきます。

<画像化日本全図のしくみ>          2017年5月24日公開 

地図の工夫
最初に公開するのは、55tephraシリーズのうち、日本地図がセットされていて、これだけで日本の火山のシミュレーションが
できる、55tephraJPNというバージョンです。
今回は、55tephraJPNに使う地図の構造について解説します。
もっとも、55tephraJPNには地図もついてきますので、単純に55tephraJPNを使うだけでしたら、今回は読まなくても大丈夫です。
55tephraJPNのコードは次次回、公開しますので、そのコードを読んでみたいというかたは、以下の「地図のしくみ」だけ読めばOKです。
自分でオリジナルの地図を作ってみたい方は、さらに次回「地図の作り方」もご覧下さい。


地図のしくみ
55tephraJPNで使っている地図は、画像に標高データが埋め込まれています。
元データは、スペースシャトル観測で作成された90mメッシュの数値標高データSRTM 90m DEM Ver4.1 というものです。
このデータを加工して作成したのが、今回公開する画像化日本地図 JPN250.png です。
以下はサムネイルですが、実際の画像は、7160 画素 x 6800 画素 のサイズがあり、本ページの下の方でダウンロードできます。
JPNthumbnail.png

1画素が 250m x 250m の正方形となっていて、その場所の平均的な標高が1m単位で表現されています。
前回のサンプルソフトでお見せしたように、プログラミングを簡単にするために、地図は普通の画像ファイルで、
高いところが明るい緑で、低いところが暗い緑で表現されているので、画像を見ただけでも地形がおおよそわかります。
さらに、プログラムを組んで、ある処理をすると、各場所の標高データが1m単位でわかるようになっています。

カラー画像の色は、赤の強弱、緑の強弱、青の強弱の3つの信号を合成してつくられています。
人間の目の細胞には、赤い光、緑の光、青の光を感じる3種類の細胞があって、それぞれの刺激の大きさの比から
色を判断しているので、3種類の信号を合成するだけで、人間の感じる様々色を作り出せるわけです。
パソコンでよく使われるカラー画像は、赤、緑、青、それぞれ、256段階の強弱で色を表現しています。
赤い成分が最高に光っている時は255、真っ暗な時を0というふうに、それぞれの色の成分の明るさを、
0から255までの数字で表します。
例えば、真っ赤は、(赤=255,緑=0, 青=0)で表現できますし、緑は、(赤=0,緑=255, 青=0)、
白は(赤=255,緑=255, 青=255)、黒は(赤=0,緑=0, 青=0)です。
ちょっとややこしい例も挙げると、灰色は(赤=120,緑=120, 青=120)、黄色は(赤=255,緑=255,青=0)、
ピンクは(赤=255,緑=120, 青=120) などなど、それぞれの成分の明るさの組み合わせで、さまざまな色や、
色の明るさを表現することができます。

グレースケールで標高を表そうとすると、グレースケールは赤、緑、青がそれぞれ同じ明るさなので、
0から255までの256段階しか表現できません。1mごとに明るさの段階を変えるとすると、0から255m
までしか表現できないことになります。
ところで、なぜ、最大数が255という中途半端な数なのかというと、コンピューターは2進数で数を表現しているからです。
二進数で8桁が全部1という、11111111は、10進数で表すと、255になります。
日本地図の最高点は、富士山山頂の3776mなので、そこまで表現したいものです。
そこまで必要となると、2進数だと何桁いるでしょうか?
4桁足して、12桁にすると、111111111111 (1が12個並んでいます)は、4095です。
これなら、日本の地形を表すには十分です。
そこで、55tephraJPNでは、緑を表す8桁に、青を表す4桁を足して、標高を表現しています。
標高(m)を色から復元するためには、 [緑の明るさ] x 16 + [青の明るさ]    
という式を使えばOKです。
なお、この場合、青の明るさは、0から15までしか使われませんので、ほんの微妙な変化です。
そのため、地図は、一見、緑の明るさだけで表現されているように見えます。
一方で、海は、青の明るさを255にセットしていますので、海は青くなります。
こうすることで、画像の上では海が海らしく見えます。
また、データのないところは、青の明るさを128にセットしてあります。
55tephraJPNでは、青の明るさが255や128の場合は、標高は自動的に0だと判断するようにプログラムします。
この説明を読んでから、前回のマウスで標高を読み取るソースコードを読めば、意味がよりわかるかと思います。
(ただし、前回のソースは海やデータなしの判別は入っていません。)
こちらの行
elevation = (int)(green(c)*16+blue(c));
が、色情報を標高(m)に変換している部分です。
赤の情報は使っていませんよね。これは、計算結果のデータを赤にセットするためです。
こうすることで、1枚の画像データに、標高情報付きの地図と、計算結果とを同時に表現することができるのです。

完成した日本全図は以下からダウンロードできます。
画像データ   JPN250.png

次回は地図の作り方です。

では、みなさん、55tephra式数値標高地図と、Processingを楽しんでくださいね!次回はすぐ!


ホームページへもどる