|||
这段时间一直在考虑车载激光点云数据如何处理,如何分类,如何生成模型。现在来看,自动分类还是关键中的关键。
自动分类主要涉及模式识别和人工智能方面的知识,这段时间在恶补,恨不得一天可以学完edx和courses上的所有相关课程。ITC也有一套系统的点云数据分类理论,也还没有完成掌握。
前几天请武汉滨湖电子的移动测量车跑了几条街道的数据,这几天就望着数据出神。我想,其实,单头车载激光点云数据可以看做2个2.5维的数据相加。而每一个2.5维可以处理为深度图像。对于深度图像的切割和分类技术相对多一些,可以从这个方面入手,完成所有激光点云的分类提取和对象建模。
深度图像(灰度图像)的分割技术比较多,常用的阈值、边缘检测、区域增长等。阈值的选取通常通过分析灰度直方图估计,边缘检测其实是深度图像分割的一个很好的方法。但,阈值毕竟是深度图像的第一特征,能否通过混合阈值和边缘检测的方法实现比较理想的点云图像分割呢,这或许是我下一步的实验路线。
有过类似处理经验的高人千万要不吝赐教啊!
采集的点云数据具有丰富的信息,包括了空间坐标、回波强度和颜色。但是是路两侧的。因此处理的第一步就是沿道路中心线进行分割。这是一个非常简单的算法。今天下午就完成了分割,写在这里,作为备忘。
分割的原理很简单,就是每个点向量同道路中心线向量做叉乘,大于0就在左边,小于0就在右边,等于0就在线上。这是GIS的基础知识了。我在matlab中实现了点云数据的分割。具体代码如下:
function tellside()
clear all;
% read raw point data
a = textread('1.TXT');
%start point and end poit of one road segment
x1 = 525056.71;
y1 = 3385799.17;
z1 = 5.84;
x2 = 525144.92;
y2 = 3385446.93;
z2 = 6.42;
v = [x2-x1,y2-y1,1];
for k=1:1000000
vk = [x2 - a(k,1),y2 - a(k,2),1];
ws = cross(v,vk);
if ws > 0
a(k,1) = 0;
end
end
a = a(find(a(:,1) ~=0.0),:)
dlmwrite('1.xyz',a,'delimiter','t','precision','%.1f') ;
值得注意的是,matlab中的叉乘参数是三维向量,区别于平时二维数据处理中的二维向量,因此,一般把第三维设为1,齐次坐标系。
切割后的彩色点云如图所示:(啊哈,我们单位门口)
使用该方法就可以读取路网节点,沿道路中线切割点云了。
后面就是线投影,格网化生成深度彩色点云图像。清明上班后再继续处理...
程序参考代码见附件:
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-5-17 21:20
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社