HomCloudチュートリアルの内容の自分用メモです。
pdgmファイルの見方
ファイル読み込み
pdlist = hc.PDList("pointcloud.pdgm")
pdgmファイルは、0次から2次までのすべての次数のパーシステント図を保持している。
1次のパーシステント図だけ書き出す
pd1 = pdlist.dth_diagram(1)
ヒストグラムを構築し、パーシステント図をプロットする。
histogramメソッド → ヒストグラムの構築
plot → それをプロット
pd1.histogram().plot()
HomCloudの軸の単位は$Å^2$である。これは、半径の2乗である。
%これをやめたいとき
→PD図を,hc.PDList.from_alpha_filtration
で計算するときに、no_squared=True
という引数を付けると、半径パラメータそのものがX軸、Y軸に現れる。
ヒストグラムの解像度の変更
histogram
メソッドのx_bins
引数(第2引数)を指定する。
デフォルトでは128x128
pd1.histogram((0, 0.01), 256).plot(colorbar={"type":"log"})
保存
matplotlib.pyplot.savefigで保存することができる。
pd1.histogram((0, 0.01), 256).plot(colorbar={"type": "log"}) plt.savefig("pointcloud-pd1.png")
数値データの読み出し
pd1.births
pd1.deaths
2つの差を見ることで、lifetimeが計算できる。
pd1.deaths - pd1.births
lifetimeのヒストグラム
plt.hist(pd1.deaths - pd1.births, bins=100);
行末の;
は、plt.histの返り値を無視するためのトリック
逆解析
PD図の個々の点を、リング・空隙構造と対応させる
HomCloud逆解析ツール
・Birth/Death simplices
・Optimal Volume
・Stable Volume
ここではstable volumeを使う
例:0.0025,0.008)付近にあるbirth-death pairのstable volumeを調べる
pd.nearest_pair_to で (0.0025, 0.008) に一番近い birth-death pair を検索
pair = pd1.nearest_pair_to(0.0025, 0.008)
Pair クラスのオブジェクトで、birth timeやdeath timeといった情報を保持している。
pair
pair.lifetime()
以下のようにすると stable volume が計算できる
stable_volume = pair.stable_volume(0.00005)
boundary_points メソッドで、対応するリング構造に含まれる点の座標が得られる。
stable_volume.boundary_points()
このstable volumeを3次元可視化する
pl = pv.Plotter() pl.add_mesh(stable_volume.to_pyvista_boundary_mesh()) pl.show()