Comment convertir les données au format pts collectées par lidar au format pcd
avant-propos
En raison des besoins du projet de travail, une grande quantité de données au format pts a été téléchargée du client et le fichier .pcd disponible doit être transféré.Ce qui suit est l'introduction et la solution ;1. Quelles données contient .pts ?
Il existe de nombreux formats pour enregistrer les nuages de points 3D lidar ; parmi eux, .pts est le moyen le plus rapide d'enregistrer les nuages de points, de stocker directement les nuages de points dans l'ordre XYZ et peut être enregistré en tant qu'entier ou virgule flottante ; peut être enregistré en code ASCII ou binaire, et chaque paramètre est directement séparé par un espace ; comme le montre la figure suivante :
2. Que sont les données .pcd ?
Le format PCD est un tout nouveau format de nuage de points, veuillez vous référer à l'adresse suivante pour des explications spécifiques ;
Adresse de réimpression : http://www.pclcn.org/study/shownews.php?lang=cn&id=54
3. Étapes de conversion
1. Format de données PCD
Le fichier .pcd ne peut pas seulement être ouvert par l'outil PCL, le suivant est ouvert par des éditeurs tels que VSCODE ou gedit ;
En comparant les pts, on constate que le fichier .pcd est composé des 4 premiers paramètres d'une ligne de données .pts + le fichier d'en-tête ;
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z intensity
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 35067435
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 35067435
DATA ascii
0 0 0 4
-1.32 -2.761 0.084 23
2.916 -2.93 0.147 26
2.317 -0.563 0.098 21
-0.081 -7.745 0.073 24
3.239 -4.546 0.117 12
-1.094 -3.617 0.109 6
......
2. Transformer les données
Après avoir pris connaissance du processus ci-dessus, nous utilisons Python pour effectuer une conversion et une exportation circulaires. Après tout, il y a 3 506 7435 nuages de points ; le
contenu du script est le suivant :
### pts_pcd
f = open("DATA.pts")
o = open('DATA_out.txt', 'w')
line = f.readline()
line = f.readline()
while line:
w = line.split(" ", 6)
print(w[0] + " " + w[1] + " " + w[2] + " " + w[3])
o.write(w[0] + " " + w[1] + " " + w[2] + " " + w[3] + "\r\n")
line = f.readline()
f.close()
o.close()
Attendez que les données soient actualisées et vous pouvez voir qu'un fichier DATA_out.txt est généré dans le même répertoire ;
3. Chargez le fichier d'en-tête
Le contenu du fichier d'en-tête est le suivant, notez que les paramètres WIDTH et POINTS doivent correspondre aux paramètres pts ;
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z intensity
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 35067435
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 35067435
DATA ascii
Copiez le fichier d'en-tête directement dans DATA_out.txt ou utilisez la commande suivante pour copier directement de head.txt dans DATA.txt ;
sed -ne '1 r head.txt' -e '1N;P' -i DATA_out.txt
4. Afficher PCD
Remplacez le suffixe de DATA_out.txt par .pcd ; ouvrez le fichier .pcd avec pcl_viewer$ pcl_viewer DATA_out.pcd