Point Cloud データセット

このページでは, Point Cloud データセットの情報源を紹介します

さらに、SQLite 3 のテーブル pcdxyz を生成します。

作成するSQLite 3 データベース:pcddb

* データ源のURL

前準備

関連する外部ページstlop.html

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="RichBool" 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 テーブル作成手順

テーブル作成

#!/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 $i | 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="RichBool" 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

データソース