Python のデータフレーム
このページでは, Point Cloud データセットの情報源を紹介します
さらに、SQLite 3 のテーブル pcdxyz を生成します。
◆ 作成するSQLite 3 データベース:pcddb
* データ源のURL
- Point Clound Data Sets の Web ページ :
http://www.pointclouds.org/news/2013/01/07/point-cloud-data-sets/
前準備
【関連する外部ページ】 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 形式, PLY 形式への変換
◆ 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
pcdxyz テーブル作成手順
- SQLite 3 のデータベースファイル名: /tmp/pcddb
- 生成されるテーブル: pcdxyz(name, x, y, z)
◆ テーブル作成
#!/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

ダウンロードと確認表示
csv形式ファイルのプレビュー (R システムを使用)
#!/bin/bash
# CSV ファイル(レコード構造はx,y,z,r,g,b)の表示
function view_pcdcsv_xyzrgb() {
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=rgb(T\$V4/255.0, T\$V5/255.0, T\$V6/255.0) )
Sys.sleep(100)
RCOMMAND
cat /tmp/a.$$.r | R --no-save
}
#
INFILE=/tmp/2013.09.05.06.41.47.563.csv
fgrep -v QNAN ${INFILE} > /tmp/a.$$.csv
view_pcdcsv_xyzrgb /tmp/a.$$.csv

STL 形式, PLY 形式への変換
◆ 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
}
#
cut -d "," -f 1,2,3 /tmp/2013.09.05.06.41.47.563.csv | sed 's/,/ /g' | fgrep -v QNAN > /tmp/a.$$.asc
#
ascxyz_to_pcl /tmp/a.$$.asc /tmp/2013.09.05.06.41.47.563.stl /tmp/hoge.mlx
#
meshlab /tmp/2013.09.05.06.41.47.563.stl
* MLX ファイルは、meshlab を起動し、「Filters」→「show current filter script」と操作し、スクリプトをファイルに保存する pcltomesh.html
データソース
- /home/www/plat 下: 2013.09.05.06.41.47.563.pcd など
- /home/www/tagawa 下
2013/9/11 に撮影した田川市・伊田商店街のデータ
- /home/www/plat/20130930 藤井くん、本田君、ラジオ体操計測生データ(アンドロイドとキネクト)
- JR筑肥線のデータの最新版があるはずです
- ラジオ体操の差し替え版があるはずです