このページでは, Point Cloud データセットの情報源を紹介します
さらに、SQLite 3 のテーブル pcdxyz を生成します。
◆ 作成するSQLite 3 データベース:pcddb
* データ源のURL
【関連する外部ページ】 stlop.html
CloudCompare
#!/bin/bash # CSV ファイル(レコード構造はx,y,z)の表示 function view_pcdcsv_xyz() { cat >/tmp/a.$$.r<<RCOMMAND require(data.table) require(scatterplot3d) require(rgl) T <- data.table( read.csv(file="$1", header=FALSE, as.is=TRUE) ) str(T) plot3d(x = T\$V1, y = T\$V2, z = T\$V3, col=rainbow(1000) ) Sys.sleep(100) RCOMMAND cat /tmp/a.$$.r | R --no-save } # INFILE=/tmp/svn.pointclouds.org/ism_test_horse.pcd fgrep -v PCD ${INFILE} | fgrep -v VERSION | fgrep -v FIELDS | fgrep -v SIZE | fgrep -v TYPE | fgrep -v COUNT | fgrep -v WIDTH | fgrep -v HEIGHT | fgrep -v VIEWPOINT | fgrep -v POINTS | fgrep -v DATA | sed 's/ /,/g' > /tmp/a.$$.csv view_pcdcsv_xyz /tmp/a.$$.csv
◆ STL 形式への変換と確認表示
#!/bin/bash cd /tmp cat >/tmp/hoge.mlx <<-MLX <!DOCTYPE FilterScript> <FilterScript> <filter name="Surface Reconstruction: Ball Pivoting"> <Param type="RichAbsPerc" value="0" min="0" name="BallRadius" max="4113.47"/> <Param type="RichFloat" value="20" name="Clustering"/> <Param type="RichFloat" value="90" name="CreaseThr"/> <Param type="RiclhBool" value="false" name="DeleteFaces"/> </filter> </FilterScript> MLX # asc ファイル(レコード構造はx,y,z 区切りは半角スペース) を stlに変換 function ascxyz_to_pcl () { rm -f $2 rm -f /tmp/hoge.$$.stl meshlabserver -i $1 -o /tmp/hoge.$$.stl -s $3 # hole (穴)に関する処理 if [ -f /tmp/hoge.$$.stl ]; then admesh -fudev -b $2 /tmp/hoge.$$.stl fi } # for INFILE in /tmp/svn.pointclouds.org/*.pcd /tmp/svn.pointclouds.org/*/*.pcd; do fgrep -v PCD ${INFILE} | fgrep -v VERSION | fgrep -v FIELDS | fgrep -v SIZE | fgrep -v TYPE | fgrep -v COUNT | fgrep -v WIDTH | fgrep -v HEIGHT | fgrep -v VIEWPOINT | fgrep -v POINTS | fgrep -v DATA | sed 's/ /,/g' > /tmp/a.$$.csv cat /tmp/a.$$.csv | sed 's/,/ /g' > `echo ${INFILE} | sed 's/.pcd/.asc/g'` # ascxyz_to_pcl `echo ${INFILE} | sed 's/.pcd/.asc/g'` `echo ${INFILE} | sed 's/.pcd/.stl/g'` /tmp/hoge.mlx done # meshlab /tmp/hoge.stl
* MLX ファイルは、meshlab を起動し、「Filters」→「show current filter script」と操作し、スクリプトをファイルに保存する pcltomesh.html
◆ STL 形式から ply 形式への変換と確認表示
#!/bin/bash cd /tmp # for INFILE in /tmp/svn.pointclouds.org/*.stl /tmp/svn.pointclouds.org/*/*.stl; do rm -f /tmp/hoge.ply echo /tmp/src/stl_ply $INFILE /tmp/hoge.ply /tmp/src/stl_ply $INFILE /tmp/hoge.ply if [ -f /tmp/hoge.ply ]; then cp /tmp/hoge.ply `echo $INFILE | sed 's/stl/ply/g'` fi done # meshlab /tmp/hoge.ply
◆ テーブル作成
#!/bin/bash cd /tmp # drop old pcdxyz cat > /tmp/a.$$.sql <<-SQL drop table pcdxyz; SQL cat /tmp/a.$$.sql | sqlite3 /tmp/pcddb # define pcdxyz cat > /tmp/a.$$.sql <<-SQL create table pcdxyz ( name text, x real, y real, z real ); SQL cat /tmp/a.$$.sql | sqlite3 /tmp/pcddb # populate pcdxyz cat > /tmp/a.$$.sql <<-SQL .mode csv .import "/tmp/a.$$.csv" pcdxyz SQL DIR=/tmp/svn.pointclouds.org cd ${DIR} for i in *.pcd */*.pcd; do echo $i j=`basename $i .pcd` fgrep -v PCD ism_test_cat.pcd | fgrep -v VERSION | fgrep -v FIELDS | fgrep -v SIZE | fgrep -v TYPE | fgrep -v COUNT | fgrep -v WIDTH | fgrep -v HEIGHT | fgrep -v VIEWPOINT | fgrep -v POINTS | fgrep -v DATA | sed 's/ /,/g' | awk '{print"'$j', "$0}' > /tmp/a.$$.csv cat /tmp/a.$$.sql | sqlite3 /tmp/pcddb done # simple test echo "select * from pcdxyz limit 10;" | sqlite3 /tmp/pcddb