クラウドから地形断面図を作成 vertical sections of a sea cliff of limestones using “Extract Sections” process

はじめに

 これまで,iPhone 12 Proを使って3DスキャニングしてCloudCompareで何らかの作業をしてきたが,実は,もともとは,このページにこれから示す内容に到達するための準備であった。ぼくはこの作業は初めてなので,うまく行くかどうか,わからない。既存研究はない。

 ここまでのポスティングが扱ってきた最も大きなファイルは白姫大明神裏でのLiDARマージbinファイルで119MBである。ここで扱うFBXファイルは,550MB前後もある。CloudCompareで動かすのにかなり骨が折れる。これはbe氏が,写真画像幾何学に基づいて撮影したものである。

図1 取り込み

 平面直角座標系のもので取り込む際には,計算や表示の簡便性からXY値を平行移動して小さくすることが多い。Z値,つまり海抜高度に変更はない。計算処理後,座標値は元の大きな数字に戻るように,デフォルトであるが,左下の□にチェックが入っている。平面直角座標系はnorthing がX軸,eastingがY軸になっていて左手座標系であり,CloudCompareが扱う右手座標系とは異なる。しかしながら,編集画面での表示や計算過程としては,ぼくが関心を持つ幾何学的分析については問題がないようである。

 図2の編集画面の左手には激しい波の飛沫が見えている。このシーンのほぼ中央の海食崖下部のズームインを図3に示す。

図2 調査点での側面からの外観
図3 海食崖基部の小地形と微地形

 要するに,図3の海食地形の高度分布を捉えたいのである。段彩図や等高線を作成することは可能ではあるが,それでは微地形の高度変化を捉えにくい。海食崖のおよその走向に対する垂直断面図を連ねて,いわばブロックダイアグラムを作成することが最も妥当ではないか,と思っている。計算が重くて失敗するかもしれない。どの程度の數や距離がこなせるのか,わからない。何回かに分ける必要があるかも知れず,必要な部分をsegmentするのが一番いいとも考えている。とはいえ,まずは,丸々やってみようかと思っている。そういう試行錯誤的実験を繰り返して,精密な成果を得たいと思っている。

 以下には,まずは,CloudCompareの Extract Sections の手法の手順を整理したい。

以上,Mar. 4, 2022記。

 追加 Mar. 6, 2022: 新たに挿入する。このページの主題である “Extract Sections”に対応するファイル形式はテキストファイルだけであることがわかった。ここまで示したmeshファイル形式の一つFBXファイルでは,この機能が使えないことが判明した。3Dスキャナからの3次元データを格納するために設計されたPolygon File Format(ply)形式も対応していない。

 対応ファイル形式は点群ファイルであるが,xyz 各行が [x, y, z](x, y, zは3D座標),xyzn 各行が [x, y, z, nx, ny, nz](nx, ny, nzは法線),xyzrgb 各行が [x, y, z, r, g, b](r, g, bは [0, 1]の範囲の浮動小数点数)などがあるが,当方のテキストファイルは図4に示したもので [x, y, z, r, g, b, nx, ny, nz]と表現できる。plyファイルについては,点群だけでなくmeshも含むので,Extract Sectionsが対応しないのであろう。

追記 Mar. 10, 2022:  txtファイルしか対応しないことは困ったことである。というのは,今後iPhone 12 Proで使うことに決めたMetascanにはtxtファイルでの出力オプションが無いからである。plyファイルのmesh情報を取り込まないことで可能かも知れないと今思ったので,別のページでその実験を示したいと思っているが,次のようにCloudCompareでは,出力形式としてasciiであればいいと思われるが,xyzだとRGB情報が無いので,ライカ用のPTSファイルが妥当ではないかと思っているが。
CloudCompareがサポートしているファイル形式:
入力形式:FLS, PCD, VTK, TXT, NEU, PTS, PTX, PTZ, PLY, XYZ, E57, CPE, SFM, LAS, LAZ
出力形式:E57, WRL, DXF, XYZ, XYB, IGS, PTS, CPE, LAS, SPW

 CloudCompare Wikiでは,対応ファイル形式についての言及がない。”Tools > Segmentation > Cross sections” に関する説明ではわざわざ,”Since version 2.6.2 this tool can be used on meshes” とある。CloudCompareがそもそも点群 point cloudに対応して作成されたアプリなので,わざわざmeshには対応していない,と示されないのである。
 図1〜3で紹介しているmesh形式として代表的なFXB(542MB)や,更には点群とも回されてきたply(636MB)であっても,Extract Sectionsは対応しないのであるが,これらに比べてテキストファイル形式は容量11.22GBと圧倒的に重いのであるが,FXBと比べると,映像編集画面での操作ははるかに軽やかなのである。画面表示負荷が低いのであろう。図4はtxtファイルのインポート最初のページである。

図4 import前の表示

 CloudCompareのこのtxtファイルの取り込みには10分余りを要した。図5は,図2のFBXファイルに比べて,陸域上空の飛沫を捉えているのは興味深いところである。

図5 txtファイルでのパース外観

 海食洞付近について見ると,図6には図3に比べて紺色部分が見えていて,暗くて撮影できなかった部位がより明確に現れている。

図6 txtファイルでの海食崖表示

1 Extract Sectionsの手順

図7 Extract Sections Tool
呼び出しボタン

左のアイコンは,メーンメニューのほぼ中央に配置されているextract sectionsツールの呼び出しボタンである。”Tools > Segmentation > Extract sections” に対応する。

 この章ではまだ,実際の分析過程を実施せず,マニュアルを整理するだけにしたい。実際の実行過程ではマニュアルとの対応関係が付かなくなる可能性もあるが,基本的にはこの章にフィードバックしないつもりで,この章をまとめたいと思う。なお,ここでは個々の断面作成過程は省略し,非常に有用なOrthogornal sections generationについて記述する。

ステップ1 点群cloudを開いて,DB Treeウィンドウで,分析対象cloudを選んで,Extract Sections ツールで分析したい場所のガイド線を描きたい部分を前もって表示する。Wiki掲載の図8では,画面中央にマゼンタ色のポリライン(single path),右上にはExtract Sections Toolなどが表示されているが,このステップ1では,それらが表示される前のcloudを編集画面に表示し,対象域をズームイン表示した結果が ”a dedicated 3D view”である。図8のcloud中の点群はこのcloudの比較的表面に近いものである。 図8のマゼンタ色のポリラインに沿って,断面図が欲しいセクションを切っていった結果が図9にあたる。

図8 a single path for sections
図9 直交セクションortho_sections

ステップ2 Extract Sections呼び出しボタン(図7)をクリックすると,図8のようにそのツールバー(図10)が編集画面の右上に現れる。初期値では,このツールバーが出た段階で,すでにツールバーの1,つまり,ポリライン編集モード,が選ばれている状態である。図8や図10の表示にも現れているが,他のアイコンは使えなくなっている。

Note: 垂直方向の初期値はZ軸になっている。垂直方向をX軸またはY軸にすることも可能であるが,この場合,分析内容に制限が出る。地形学では垂直方向は,普通,鉛直軸であるZ軸に一致すると考えている。ファイルを読み込んで最初に表示される点群point cloudはトップビューである。

図10 Extract Sections ツールバー

ステップ3 左クリックを繰り返し,ポリライン(シングルパス)を作成してゆく。描き終わったら右クリックすると,ポリライン編集モードが終了することになる。

図11 Orthogonal sections generation

ステップ4 ポリラインモードから脱すると同時に,(最後に描いた)そのポリラインは赤くなる。(なっていない時はその上を左クリックする)。そして,ツールバーの3のアイコンをクリックすると,図11のダイアログが現れる。ここには,シングルパス長 path lengthは自動で算出されて表示されている。ユーザーの入力欄は,stepとwidthで,ここではsections間隔 step: 30m,section長 width: 332.78⋯,とされている。このダイアログ内の右上で,sections: 56,とある。これは,1663.91÷30で,図9のsectionsの本数にあたっている。

 このダイアログの終わりの”auto save and remove generatrix” についての次の説明が理解できない。一応,チェックを入れたままで実行する。
“A last option named ‘auto save and remove generatrix’ will tell CloudCompare to remove the selected polyline/path from the active polylines after having saved it to the main DB tree. This is useful as afterwards the ‘profile extraction’ method will use all active sections and it is generally not interesting to generate a profile along the main path. However, in case the orthogonal sections generation settings were not correct, the user can still undo this, import the path from the DB tree (see above) and restart the process.”

以上,Mar. 5, 2020記。

2 cloudスライスとプロファイルの生成

 1で作成したセクション位置に基づいて,その位置での垂直スライスや垂直プロファイルを生成することになる。

図12 Extract Sections

ステップ5 図10のアイコン4をクリックすると,次のダイアログ画面が現れる。ここでの入力欄は2カ所あって,上のSections thicknessには,ここでは 2.464000 (m)が入力されている。thicknessは,XY平面上でのsectionの幅が2.464000mということである。この線幅でcloudの全pointsを捉えるということである。section line方向での左右幅つまり厚さが2.464000mであるから,section lineの左手1.232m,右手1.232mということである。

 図12には4カ所のチェック用□がある。チェックが入っているのは,Extract section profile(s) のみである。section thickness内のポイントから一つのプロファイルを生成するということになる。ぼくの目的と合致している。この形では,ダイアログの項目について,次のようなパラメータをセットすることになる。

type: 図ではLowerが見えるが,他にUpperとBothがある。初期値としてはZ軸に平行な閉輪郭であり,その等高線の上方か,下方か,両方を取るか,ということになる。(全く未だ理解できない) 
max edge length: 現在のところ,理解できていない。次のような記述があり,Cross Sectionの参照が指示されているが。
max edge length: this is the main parameter of the ‘concave hull’ extraction algorithm. See the Cross Section tool documentation.

 他のオプションについても説明があるが,理解できていない。

図13 Extracted profiles

Notes: すべてのsection clouds,section profilesは,それぞれExtracted sections,Extracted profiles というグループに保存される,とあるが,実行した経験によれば,DB Treeにグループとして示されるということであって,未だCloudCompare外には保存されていない。

 ”Unfolding a cloud along a polyline” の項意味がわからないので,跳ぶ。

ステップ6 実行したsections/polylinesを書き出す。図10の5番アイコン(フロッピーディスク)をクリックすると,主要なDB treeに現れる。何回かこのアイコンをクリックしてもダブって出力されることは無いという(意味がわからない)。すべてのpolylinesはExported sectionsというグループに保存される。

Undoツールについて: 図10の6番目の🌀状アイコンによって,直前の操作について,undoを実行できると思ったが,シングルパスを作り直すことができるという意味で,一回の左クリックをミスっても戻れる訳ではない。
中止ツールについて: 図10の7番目の✖️アイコンで,すぐに作業を止めることができるが,それまで続けてきた作業結果が失われる。
✅️アイコンについて: 理解できない。まあ,クリックした方が良くて,この作業を終了できる。

 以上,ほとんど理解できないが実行過程で見えてくるだろう。

以上,Mar. 6, 2022。

3 不要pointcloud部分の削除

 段丘が海岸に迫る場での海食崖の海岸線トレンドに直交し等間隔の断面図を作成したい。図5と図6で,かつての高位海水準に対応する侵食地形,言い換えると,海食崖の高位ノッチなどの地形断面を捉えたい。そういうノッチはどれにあたるのか,三位秀夫の博士論文(畑井小虎教授が指導教授だったか? 岡村さんに畑井教授の研究室に連れられて訪問し,ご紹介頂いた。海外で暮らされてきたのだろうか,独特のオシャレな雰囲気をお持ちであった)の田辺湾で実施した研究成果に会ったのは大学院時代であるが頭にほぼ入っている。その観点で見ている。で,この場所は丘が海に迫っている。平面図で見て海岸線付近を残すようにsegmentするという発想もあるが,高位ノッチから現成の海岸地形まで抽出したいということなので,ある海抜高度より高い部分を廃棄する方が,より直接的と言える。この操作では,陸域上空の飛沫も排除できる。その截頭(せっとう,truncate)すべき海抜高度はどれほどなのか,それをまずは調べる必要がある。

 なお,txtファイルの読み込みは,XYZ DEM値をそのまま使用することにした。後の断面図作成などを考慮して。FXBファイルの場合は保存するとbinに替わるが,txtファイルは保存してもtxtファイルのままである。このことが,Extract sectionsがtxtファイル限定であることを考えると,ありがたい。まあ,そういう設計なのだが。

3.1 高位海水準対応地形の想定最高高度を調べる

 下記リンクのページの,4.2 Point list picking を使う。
iPhone 12 Pro撮影の3Dスキャン画像の座標を捉える

 このPoint list picking 機能が良い。Point pickingにすると編集画面でcloudを移動しても,その引き出し線が伸びていつも見えるので鬱陶しい。
 図14はfront viewなので実際の配置関係と合う。段丘の南東壁から南壁そして西壁と回る。図14の比較的右手のPoint #2が最も高くてZ値=11.37mとなっている。海食洞の壁面である。垂直断面図を作成する場合に,傾斜変換線がわかるように余裕をもって選定したのである。他のpoint高度は6m前後であるが,截頭海抜高度をほぼ12m付近とする。Picked points listは編集画面の右上に見えるが,pointファイルとして左のDB Treeに見える。前者の表のフロッピーアイコンが見えるが,ここをクリックすると,x,y,z local index,x,y,z global index,x,y,z label name,x,y,z などがあるが,label #がxyz値と併せて保存されるように思うので, label name,x,y,zを選んで,max ht picking_list.txtで保存した。そして,✅️マークをクリックした。
 

図14 Set front view, picked points list
図15 Set back view, picked points list

 maximum ht picking_list.txtをエキスプローラーで表示して,ファイルを直接クリックして開いたものが次である。

図16 maximum ht picking_list.txt

 以上の作業の終了時にcloud保存すると,in’nujofuta_process1-Cloud.txtと命名される。次の図17のように,デフォルトのまま保存した。この画面からOKボタンをクリックすると,Number Pointsは,154,989,417とあるので,元のtxtファイルのすべての点群が対応している。かなり重くなった。

図17 save ascii file

3.2 截頭作業

 この作業を続ける前に,in’nujofuta_process1-Cloud.txtをダビングして,in’nujofuta_process2-Cloud.txt とする。そして,図17同様のfront viewで表示する。CloudCompareで不要なポイント群または面群の削除 で示した矩形領域を設定して,その領域を残すsegmentationを実施することになる。
 新たにin’nujofuta_process2-Cloud.txt と名を替える前に保存した際に元ファイルと比べて重くなったので,picking listが含まれたのかと思ったが,このファイルを開いても,picking listは表示されなかった。それで,図18のようにmaximum ht picking_list.txtも読み込むと,表示されるようになったのである。読み込む際には,ラベル表示のオプションにチェックを入れた。

 CloudCompareは,複数のファイルを読み込んで行っても,全く重くならない。編集画面にそれぞれ独立して表示されているようだ。優れたアプリだと思う。GrassGISなども同じファイル表示構造になっているのであろうが。

図18 maximum ht picking_listを追加表示

 図18はtop viewであり,図19では,図14と同様front vewにして,segmentationアイコンを選んで,ツールバーを表示し,この3番目の矩形ツールで4番目の”segment in”を実行したのである。

図19 截頭した

 ツールバーの6番目の✅️ボタンを押して,矩形域とそれ以外のcloudに分割した。DB Treeでは,Cloud segmentedの方には✅️が入り,Cloud remainingの方には✅️が入っていないので,前者だけが編集画面に表示されているのである。

図19 Cloud segmentedが表示されている

 図19のpicking listを外したのが,図20である。

図20 picking_listを外す

 ここでまた保存することにする。ファイル名には自動で新たに”cloud”が追加される。points数は元ファイルよりも減少している。截頭する前は1.5億余りだったが,1.1億ほどになった。

図21 截頭したファイルを保存中

 截頭したように見えないので,截頭した部分の空隙を敢えて示している。図21で見ると,左半分は全く影響が無かったことがわかる。右半分は完新世の隆起礁原であって,そもそも低い場所である。

図22 斜めから見る

 一端,終了する。新たなファイルは,in’nujofuta_process2-Cloud-Cloud.txtとなっているので,これをダビングして, in’nujofuta_process3-Cloud-Cloud.txtとして,これを新たな編集用ファイルとする。

4 sectionsラインの作成

 海食崖の位置を図21から求める必要がある。それに沿って,ポリライン(シンプルパス)を引くことになる。Display > Full screen (3D view)  または, F11,を選ぶと,図21の枠や保存バーが無いトップビューの画面が現れる。これは編集画面と同様に,移動や回転などが実施できてよく観察することができる。ぼくはこのスクリーンショットを撮って,フォトショップで処理して,イラストレーターに取り込んで,Full screen (3D view)で回転や移動をしつつ,海食崖の位置を確認しつつ,ポリラインを描いた。

以上,Mar. 7, 2022記。

 その結果,sectionsの長さは22m,その間隔は2mが適当と考えた。経験的な想定である。sectionsの個々の方向は,ポリライン(シンプルパス)に直交するので,ポリラインは想定されるほぼ海食崖上に設定する必要がある。ここで言うsectionsの長さはポリラインから垂直方向に左右の合計の長さであり,片方の長さはこの1/2つまり11mになる。なお,Full screen (3D view) から離脱するのは,再びF11を押せばよい。

以上,Mar. 8, 2022記。

4.1 ”Tools > Segmentation > Extract sections” で断面線のガイドライン(ポリライン,シングルパス)を描く

 cloudテキストファイルを開いて,cloudを選んで,まずは,断面線のガイドライン(ポリライン,シングルパス)を描く画像域を表示することになるが,その準備もしないで,”Tools > Segmentation > Extract sections” を実行してExtract sectionsツールバーが編集画面に見えている場合には,図10のツールバー左端のアイコン1をクリックして,Sections edition モードから外れて,画像を適宜配置して,改めて図10のツールバー左端のアイコン1をクリックする。
 そしてポリラインを左クリック,左クリック,と続けて行くことになる。そして完了したら,右クリックすると,これまで表示されていた緑色のポリラインは消える。なお,左クリック,左クリックとクリックしてゆく時に失敗したと思っても一つ前への取り消しはできない。escキーは図10のツールバーの7番目の✖️アイコンと同様で,すべてのクリックが解消される。6番目の🌀アイコンは全面的なやり直しのためのツールであって,ぼくからすると無くてもいいような気がする。
 前述のように,左クリック左クリックでポリラインを描き終わって,右クリックすると,緑のポリラインは消える。図10のツールバー左端のアイコン1を再びクリックすると,これまで作成したポリラインが赤色で現れる。それが図23である。このポリラインの位置は海食崖を表すものとしては,確かなものという自信はないが,sectionsの幅はポリラインの左右に作成されるので,ポリラインが海食崖と必ずしも一致する必要はない。とはいえ,この垂直断面がsectionsになるので,実際の海食崖が走るトレンドとシンプルパスは,平行関係でなければならない。

図23 ポリラインが赤くなって現れる

4.2 Sectionsの作成

 図23の赤いポリラインに沿ってsectionsを作成する段階となる。図10の3番目の物資運搬用の鉄道線(特殊鉄道)のようなアイコンをクリックすると,次のダイアログパネル(図24)が現れる。最上段のpath length = 229.91 mは,この赤線延長であるが,sections :10,やstep, widthは自動で作成されたものである。

図24 Orthogonal sections generation

 図24のダイアログにstep = 2.00m, width = 22.00mを入力すると,自動的にsections = 115となった。ポリライン延長 = 229.9をstep = 2.00で割ると,114.95となり,自動でsections=115となっているのである。プロファイルの數が115本になったのである。このパネルの下部にauto save⋯⋯⋯⋯⋯にはデフォルトで,✓が入っているが,触らず,OKとした。

図25 入力済みのOrthogonal sections generation

 OKの後,マゼンタ色のsectionsが図26のように現れた。Orthogonal sections generatin中の,auto save⋯⋯⋯⋯⋯は”A last option named ‘auto save and remove generatrix’ will tell CloudCompare to remove the selected polyline/path from the active polylines after having saved it to the main DB tree.”の意であるが,sectionsを表示する際に,ポリライン(シングルパス)はDB treeに保存はするが,表示には邪魔と考えて表示しないようにする,というオプションに過ぎないことがわかる。

図26  Sections完成

5 sectionsラインに沿ってプロファイルを作成

 図26のsections沿いのプロファイルを作成する。図10の4番目のトップに特殊鉄道が走るようなアイコンをクリックすると,次のようなダイアログが現れる。Active sections = 115, Sections thickness: 0.278⋯,✓ Extract section profile(s), type: Lower, max edge length: 0.278⋯,などと見える。Section Clouds(s)の使い方がわからないので,これには✓を入れないことにする。で,Sections thicknessとmax edge lengthが同じ値になっているので,これに従うことにする。Sections thicknessは,セクション位置で利用する点群の幅であろうと考え,ここでは1.0mとした。その入力したものが次の図28である。セクション間隔は2.0mであるので,セクション位置の前後併せて1m幅の点群を使ってプロファイルを作成すると考えたのである。

図27 Extract Sectionsダイアログ
図28 sections thickness: 1.0m

 で,図28のダイアログにOKすると,図29のように,計算が始まり,DB Treeには,プロファイル名がどんどんと増えて行く。

図29 プロファイルがどんどん増える

 図30は完成した際のDB Treeの最下部を示してる。

図30 プロファイル完成

 

6 作業結果の保存

 図10の5番目のフロッピーディスクのアイコンをクリックすると,保存したように見える。そしてアイコン8の✅️をクリックしても保存しているようであるが,エキスプローラーでcloudのファイルが入っているフォルダを見ても何もない。Wikiには次のような記述がある。
Notes:
all section cloud(s) are stored in a default group named Extracted sections
all section profiles(s) are stored in a default group named Extracted profiles
 cloud(s)は作成していないが,profile(s)は作成している。 a default group,というのは外部のファイル群ではないようだ。

 そこで,現在編集中のcloudを次のように選んで保存した。エキスプローラーで見ると,in’nujofuta_process3-Cloud-Cloud.txtに対して,新たに,in’nujofuta_process3-Cloud-Cloud-Cloud.txtというファイルが新規に作成されているのであるが,サイズは変わらない。

図30 cloudの保存

 DB Treeを見ると,作業してきたcloudファイルと同階層に,Exported sectionsとして,Polyline #1, #1.1〜#1.115,とともに,Extracted profllesとして,Section contour #1〜#115がある。そこで,それぞれのグループを選んで保存した。前者はExported.bin 92kB,後者はExtracted.bin 2951kBであった。

以上,Mar. 9, 2022記。

おわりに

 以上で,このページも目的は達成した筈である。実際に作成されたプロファイルについては次のページに委ねる。

Cloudから抽出された連続プロファイルの利用

以上,Mar. 10, 2022記。