当前位置:网站首页>Common processing of point cloud dataset
Common processing of point cloud dataset
2022-04-23 19:15:00 【Incense Dad】
Catalog
Dataset enhancements
Affine transformation
Translation transformation
import numpy as np
import random
# file name
old_file=r"rabbit.txt"
new_file=r"rabbit_change.txt"
# Translation parameters
x_offset=random.uniform(-10, 10)
y_offset=random.uniform(-10, 10)
z_offset=random.uniform(-10, 10)
# Transformation matrix
transformation_matrix=np.array([
[1,0,0,x_offset],
[0,1,0,y_offset],
[0,0,1,z_offset],
[0,0,0,1]
])
# Load the file
old_array=np.loadtxt(old_file)
old_xyz=old_array[:,:3]
# The supplementary data is homogeneous
ones_data=np.ones(old_xyz.shape[0])
old_xyz=np.insert(old_xyz,3,values=ones_data,axis=1)
# Transform data
new_xyz = np.dot(transformation_matrix,old_xyz.T)
new_array=np.concatenate((new_xyz.T[:,:3],old_array[:,3:]),axis=1)
np.savetxt(new_file,new_array,fmt='%.06f')
Rotation transformation
import numpy as np
import random
# file name
old_file=r"rabbit.txt"
new_file=r"rabbit_change.txt"
# Rotation Angle
roate_x=random.uniform(-np.pi/10, np.pi/10)
roate_y=random.uniform(-np.pi/10, np.pi/10)
roate_z=random.uniform(-np.pi/10, np.pi/10)
roate_x_matrix=np.array([
[1,0,0,0],
[0,np.cos(roate_x),-np.sin(roate_x),0],
[0,np.sin(roate_x),np.cos(roate_x),0],
[0,0,0,1]
])
roate_y_matrix=np.array([
[np.cos(roate_y),0,np.sin(roate_y),0],
[0,1,0,0],
[-np.sin(roate_y),0,np.cos(roate_y),0],
[0,0,0,1]
])
roate_z_matrix=np.array([
[np.cos(roate_z),-np.sin(roate_z),0,0],
[np.sin(roate_z),np.cos(roate_z),0,0],
[0,0,1,0],
[0,0,0,1]
])
# Transformation matrix
transformation_matrix=dot(roate_z_matrix).dot(roate_y_matrix).dot(roate_x_matrix)
# Load the file
old_array=np.loadtxt(old_file)
old_xyz=old_array[:,:3]
# The supplementary data is homogeneous
ones_data=np.ones(old_xyz.shape[0])
old_xyz=np.insert(old_xyz,3,values=ones_data,axis=1)
# Transform data
new_xyz = np.dot(transformation_matrix,old_xyz.T)
new_array=np.concatenate((new_xyz.T[:,:3],old_array[:,3:]),axis=1)
np.savetxt(new_file,new_array,fmt='%.06f')
Scale transformation
import numpy as np
import random
# file name
old_file=r"rabbit.txt"
new_file=r"rabbit_change.txt"
# Scaling parameters
scale=0.1
# Transformation matrix
transformation_matrix=np.array([
[scale,0,0,0],
[0,scale,0,0],
[0,0,scale,0],
[0,0,0,1]
])
# Load the file
old_array=np.loadtxt(old_file)
old_xyz=old_array[:,:3]
# The supplementary data is homogeneous
ones_data=np.ones(old_xyz.shape[0])
old_xyz=np.insert(old_xyz,3,values=ones_data,axis=1)
# Transform data
new_xyz = np.dot(transformation_matrix,old_xyz.T)
new_array=np.concatenate((new_xyz.T[:,:3],old_array[:,3:]),axis=1)
np.savetxt(new_file,new_array,fmt='%.06f')
Affine transformation
The synthesis of the above three transformations can be written as :
import numpy as np
import random
# file name
old_file=r"rabbit.txt"
new_file=r"rabbit_change.txt"
# Translation parameters
x_offset=random.uniform(-10, 10)
y_offset=random.uniform(-10, 10)
z_offset=random.uniform(-10, 10)
# Scaling parameters
scale=0.1
# Rotation Angle
roate_x=random.uniform(-np.pi/10, np.pi/10)
roate_y=random.uniform(-np.pi/10, np.pi/10)
roate_z=random.uniform(-np.pi/10, np.pi/10)
roate_x_matrix=np.array([
[1,0,0,0],
[0,np.cos(roate_x),-np.sin(roate_x),0],
[0,np.sin(roate_x),np.cos(roate_x),0],
[0,0,0,1]
])
roate_y_matrix=np.array([
[np.cos(roate_y),0,np.sin(roate_y),0],
[0,1,0,0],
[-np.sin(roate_y),0,np.cos(roate_y),0],
[0,0,0,1]
])
roate_z_matrix=np.array([
[np.cos(roate_z),-np.sin(roate_z),0,0],
[np.sin(roate_z),np.cos(roate_z),0,0],
[0,0,1,0],
[0,0,0,1]
])
# Transformation matrix
transformation_matrix=np.array([
[scale,0,0,x_offset],
[0,scale,0,y_offset],
[0,0,scale,z_offset],
[0,0,0,1]
]).dot(roate_z_matrix).dot(roate_y_matrix).dot(roate_x_matrix)
# Load the file
old_array=np.loadtxt(old_file)
old_xyz=old_array[:,:3]
# The supplementary data is homogeneous
ones_data=np.ones(old_xyz.shape[0])
old_xyz=np.insert(old_xyz,3,values=ones_data,axis=1)
# Transform data
new_xyz = np.dot(transformation_matrix,old_xyz.T)
new_array=np.concatenate((new_xyz.T[:,:3],old_array[:,3:]),axis=1)
np.savetxt(new_file,new_array,fmt='%.06f')
Affine transformation :
PCL Affine transformation , Realize the translation and rotation of point cloud
Add noise
import numpy as np
# file name
old_file=r"rabbit.txt"
new_file=r"rabbit_change.txt"
def add_noise(point, sigma=0.1, clip=0.1):
point = point.reshape(-1,3)
Row, Col = point.shape
noisy_point = np.clip(sigma * np.random.randn(Row, Col), -1*clip, clip)
noisy_point += point
return noisy_point
# Load the file
old_array=np.loadtxt(old_file)
old_xyz=old_array[:,:3]
new_xyz=add_noise(old_xyz)
new_array=np.concatenate((new_xyz,old_array[:,3:]),axis=1)
np.savetxt(new_file,new_array,fmt='%.06f')
Down sampling
import numpy as np
# file name
old_file=r"rabbit.txt"
new_file=r"rabbit_change.txt"
# Voxel filtering
def voxel_filter(point_cloud, leaf_size):
filtered_points = []
# Calculate boundary points
x_min, y_min, z_min = np.amin(point_cloud, axis=0) # Calculation x y z The maximum value of the three dimensions
x_max, y_max, z_max = np.amax(point_cloud, axis=0)
# Calculation voxel grid dimension
Dx = (x_max - x_min) // leaf_size + 1
Dy = (y_max - y_min) // leaf_size + 1
Dz = (z_max - z_min) // leaf_size + 1
# Calculate the voxel Indexes
h = list() # h Save indexed list for
for i in range(len(point_cloud)):
hx = (point_cloud[i][0] - x_min) // leaf_size
hy = (point_cloud[i][1] - y_min) // leaf_size
hz = (point_cloud[i][2] - z_min) // leaf_size
h.append(hx + hy * Dx + hz * Dx * Dy)
h = np.array(h)
# Screening point
h_indice = np.argsort(h) # return h The index of the elements sorted from small to large
h_sorted = h[h_indice]
begin = 0
for i in range(len(h_sorted) - 1): # 0~9999
if h_sorted[i] != h_sorted[i + 1]:
point_idx = h_indice[begin: i + 1]
filtered_points.append(np.mean(point_cloud[point_idx], axis=0))
begin = i+1
# Change the point cloud format to array, And return to
filtered_points = np.array(filtered_points, dtype=np.float64)
return filtered_points
# Load the file
old_array=np.loadtxt(old_file)
old_xyz=old_array[:,:3]
# Save the file
new_xyz=voxel_filter(old_xyz, 1)
np.savetxt(new_file,new_xyz,fmt='%.06f')
Data normalization
De centralization
centroid = np.mean(pc, axis=0)
pc = pc - centroid
Scale normalization
m = np.max(np.sqrt(np.sum(pc**2, axis=1)))
pc = pc / m
版权声明
本文为[Incense Dad]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231913486893.html
边栏推荐
- 该买什么设备,Keysight 给你挑好了
- Modify the font size of hint in editext
- Xlslib use
- [play with lighthouse] Tencent cloud lightweight server builds a full platform video analysis video download website
- openlayers draw矩形
- Class loading process of JVM
- MySQL Téléchargement et installation de la version Linux
- White screen processing method of fulter startup page
- Strange problems in FrameLayout view hierarchy
- 【C语言进阶11——字符和字符串函数及其模拟实现(2))】
猜你喜欢
Android Development: the client obtains the latest value in the database in real time and displays it on the interface
FTP, SSH Remote Access and control
mysql通过binlog恢复或回滚数据
I just want to leave a note for myself
MySQL restores or rolls back data through binlog
RuntimeError: Providing a bool or integral fill value without setting the optional `dtype` or `out`
binlog2sql 工具安装使用及问题汇总
Audio signal processing and coding - 2.5.3 the discrete cosine transform
Some records used by VS2010
開關電源設計分享及電源設計技巧圖解
随机推荐
8266 obtain 18b20 temperature
One stop service platform for high-level talents and development of comprehensive service platform system for talents
[record] typeerror: this getOptions is not a function
Switching power supply design sharing and power supply design skills diagram
c1000k TCP 连接上限测试1
该买什么设备,Keysight 给你挑好了
UML类图几种关系的总结
The platinum library cannot search the debug process records of some projection devices
Openlayers draw rectangle
高层次人才一站式服务平台开发 人才综合服务平台系统
Oracle configuration st_ geometry
One of the reasons why the WebView web page cannot be opened (and some WebView problem records encountered by myself)
FTP, SSH Remote Access and control
Getting started with vcpkg
js获取本机ip地址
Customize the non slidable viewpage and how to use it
Openlayers 5.0 reload the map when the map container size changes
PostgreSQL
ArcGIS JS API dojoconfig configuration
mysql_linux版本的下载及安装详解