王呂梁+郭唐永+李世鵬+朱威+王磊
摘 要:三維激光測(cè)繪已廣泛應(yīng)用于城市測(cè)繪中,機(jī)載三維激光掃描儀是當(dāng)前測(cè)繪領(lǐng)域的一個(gè)新標(biāo)桿,但大部分技術(shù)仍由國(guó)外壟斷,研發(fā)機(jī)載三維激光掃描儀和相配套的軟件尤為必要。機(jī)載三維激光掃描儀研制需要從硬件和軟件兩個(gè)部分著手,從掃描儀得到原始點(diǎn)云數(shù)據(jù)后,通過(guò)相應(yīng)軟件對(duì)數(shù)據(jù)作后期處理,設(shè)計(jì)出友好的交互界面,展現(xiàn)場(chǎng)景,實(shí)現(xiàn)三維重構(gòu)。
關(guān)鍵詞:機(jī)載激光掃描儀; 點(diǎn)云; 三維重構(gòu)
DOIDOI:10.11907/rjdk.162060
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-7800(2016)012-0087-02
0 引言
機(jī)載三維激光測(cè)量技術(shù)是一項(xiàng)前沿性研究課題[1]。機(jī)載三維激光掃描儀具有很多傳統(tǒng)測(cè)繪儀器無(wú)法比擬的優(yōu)越性,有著廣泛的應(yīng)用領(lǐng)域[2],如地形測(cè)繪、災(zāi)害調(diào)查與環(huán)境監(jiān)測(cè)、森林?jǐn)?shù)字高程圖獲取、城市三維建模等,還應(yīng)用于工程建設(shè)、逆向工程、電線管道布局、3D打印等領(lǐng)域。我國(guó)大部分激光掃描儀主要靠國(guó)外公司提供相關(guān)技術(shù)支持。研制出擁有自主知識(shí)產(chǎn)權(quán)的機(jī)載三維激光掃描儀具有重要意義。本文以掃描儀系統(tǒng)硬件為出發(fā)點(diǎn),介紹硬件系統(tǒng)架構(gòu)及其技術(shù)難點(diǎn),針對(duì)硬件特點(diǎn)分析軟件功能需求,最后利用點(diǎn)云庫(kù)完成軟件系統(tǒng)開(kāi)發(fā)。
1 系統(tǒng)硬件架構(gòu)
1.1 硬件架構(gòu)分析
本系統(tǒng)分為儀器和軟件兩個(gè)部分。儀器設(shè)計(jì)需滿足測(cè)量要求,實(shí)現(xiàn)高速精準(zhǔn)掃描、全波段數(shù)據(jù)采集,具有效率高、可靠性好、便于維護(hù)等特點(diǎn)。儀器系統(tǒng)主要由6個(gè)部分組成,即激光發(fā)射系統(tǒng)、光學(xué)掃描鏡與收發(fā)光路系統(tǒng)、高精度時(shí)間測(cè)量系統(tǒng)、高精度頻率源系統(tǒng)、數(shù)據(jù)采集與處理系統(tǒng)、圖像處理系統(tǒng),如圖1所示。
1.2 儀器功能實(shí)現(xiàn)
硬件系統(tǒng)的核心為掃描鏡收發(fā)光路系統(tǒng)、高精度時(shí)間測(cè)量與控制系統(tǒng)和數(shù)據(jù)采集系統(tǒng)[4]。收發(fā)光路系統(tǒng)主要包括卡塞格林望遠(yuǎn)鏡、變焦擴(kuò)束準(zhǔn)直系統(tǒng)、窄帶光濾波等。由于激光的單色性較好,主要對(duì)藍(lán)綠光波進(jìn)行接收,采用可變?cè)鲆娴腜MT光電倍增管,實(shí)現(xiàn)100dB的動(dòng)態(tài)接收范圍,確保能夠接收到微弱的回波信號(hào)。
掃描儀測(cè)距由一個(gè)高精度時(shí)間測(cè)量系統(tǒng)實(shí)現(xiàn),采用FPGA搭建控制電路來(lái)控制時(shí)間脈沖觸發(fā),采用先進(jìn)的時(shí)間頻率測(cè)控技術(shù)馴服高穩(wěn)定度的銣原子鐘,將高穩(wěn)定度、低相噪雙槽恒溫晶振鎖定在銣原子鐘上,將GPS衛(wèi)星的長(zhǎng)期穩(wěn)定性原子頻標(biāo)的中期穩(wěn)定性與高穩(wěn)晶振的短期穩(wěn)定性完美結(jié)合,使采樣頻率同步在GPS原子鐘信號(hào)上,保證激光掃描儀的探測(cè)精度。
數(shù)據(jù)采集系統(tǒng)由高速數(shù)字采集卡和磁盤(pán)陣列存儲(chǔ)服務(wù)器構(gòu)成。高速數(shù)字采集卡將光電轉(zhuǎn)換系統(tǒng)輸出的回波模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。機(jī)載三維激光掃描儀的探測(cè)發(fā)射脈沖寬度小于5ns,保證回波脈沖數(shù)據(jù)采集時(shí)不失真,系統(tǒng)設(shè)計(jì)的回波采樣率達(dá)到1GHz,采樣位數(shù)為12位。
2 系統(tǒng)需求分析
機(jī)載三維激光掃描儀主要用在測(cè)繪領(lǐng)域,分為近距離和遠(yuǎn)距離兩種,其中遠(yuǎn)距離激光主要是激光雷達(dá)系統(tǒng),近距離掃描儀主要為微軟的Kinect[3-4]。
機(jī)載三維激光掃描儀軟件系統(tǒng)關(guān)鍵為點(diǎn)云數(shù)據(jù)讀取、數(shù)據(jù)分析處理及場(chǎng)景重建。所設(shè)計(jì)的軟件要能夠處理掃描儀的原始數(shù)據(jù),包括數(shù)據(jù)分析處理、濾波精簡(jiǎn)、三維重建等。
軟件系統(tǒng)主要由4個(gè)部分組成,包括數(shù)據(jù)讀寫(xiě)、點(diǎn)云顯示、濾波、網(wǎng)格重建[5]。實(shí)現(xiàn)激光掃描儀數(shù)據(jù)處理和使用,與掃描儀器構(gòu)成一套完備的測(cè)繪系統(tǒng),軟件系統(tǒng)功能模塊如圖2所示。
3 系統(tǒng)軟件實(shí)現(xiàn)
軟件系統(tǒng)的關(guān)鍵技術(shù)在于點(diǎn)云讀寫(xiě)存儲(chǔ)、濾波和網(wǎng)格重建?;赒T平臺(tái)和PCL(Point Cloud Library),通過(guò)CMake編譯VTK(Visualization Toolkit)QT插件,實(shí)現(xiàn)可視化與點(diǎn)云庫(kù)協(xié)同操作,由QT提供交互界面。
點(diǎn)云讀寫(xiě)存儲(chǔ)由PCL提供的IO類繼承而來(lái),主要針對(duì)PCD格式的點(diǎn)云數(shù)據(jù)和PLY格式的網(wǎng)格數(shù)據(jù)[6],格式統(tǒng)一,便于數(shù)據(jù)處理。讀取點(diǎn)云數(shù)據(jù)時(shí)先根據(jù)文件后綴判斷格式,是否以.pcd或者.ply格式結(jié)尾,是則讀取,否則返回。讀取后對(duì)數(shù)據(jù)進(jìn)行稀疏判斷,若為密集數(shù)據(jù),則從數(shù)據(jù)中剔除NAN字符,完成數(shù)據(jù)讀取。同理,完成點(diǎn)云的存儲(chǔ)操作,作下一步處理,讀取點(diǎn)云數(shù)據(jù)的程序代碼如下:
QString filename = QFileDialog::getOpenFileName(this, tr("Open Point Cloud"),"D:",tr("Point Cloud Data(*.pcd *.ply )"));
PCL_INFO("File chose: %s\\n", filename.toStdString().c_str());
pcl::PointCloud
if (filename.isEmpty())
return;
int return_status;
if (filename.endsWith(".pcd", Qt::CaseInsensitive))
return_status = pcl::io::loadPCDFile(filename.toStdString(), *cloud_tmp);
else
return_status = pcl::io::loadPLYFile(filename.toStdString(), *cloud_tmp);
if (return_status != 0)
{
PCL_ERROR("Error reading point cloud %s\\n", filename.toStdString().c_str());
return;
}
//To determine whether the point cloud is dense or not
if (cloud_tmp->is_dense)
{
pcl::copyPointCloud(*cloud_tmp, *cloud);
}
else
{
PCL_WARN("Cloud is not dense! Non finite points will be removed\\n");
std::vector
pcl::removeNaNFromPointCloud(*cloud_tmp, *cloud, vec);
}
點(diǎn)云的視圖切換操作通過(guò)設(shè)置相機(jī)的位置矩陣函數(shù)setCameraPosition()實(shí)現(xiàn),通過(guò)給定不同的矩陣參數(shù),用戶可以快速切換點(diǎn)云視角,選擇出最好的視角場(chǎng)景效果。由編譯后的VTK庫(kù)生成的QVTKWidget控件提供視圖操作,用戶可以實(shí)現(xiàn)平移旋轉(zhuǎn)與縮放等基本三維可視化操作。
點(diǎn)云濾波分為直通濾波、體素柵格濾波和統(tǒng)計(jì)學(xué)外點(diǎn)移除濾波3個(gè)部分。這些濾波方法主要目的是精簡(jiǎn)數(shù)據(jù),去除飛點(diǎn)等噪聲點(diǎn),減小數(shù)據(jù)體積,優(yōu)化點(diǎn)云數(shù)據(jù)結(jié)構(gòu),方便可視化操作和下一步數(shù)據(jù)處理,提高點(diǎn)云質(zhì)量和計(jì)算速度。其中統(tǒng)計(jì)學(xué)外點(diǎn)移除濾波部分代碼如下:
PointCloudT_XYZ::Ptr cloud_filtered(new PointCloudT_XYZ);
pcl::StatisticalOutlierRemoval
outlierRemoval.setInputCloud(cloud);
outlierRemoval.setMeanK(ui->lineEditMeanK->text().toInt());
outlierRemoval.setStddevMulThresh(ui->lineEdit_StddevMulThresh->text().toDouble());
outlierRemoval.filter(*cloud_filtered);
pcl::copyPointCloud(*cloud_filtered, *cloud);
點(diǎn)云的網(wǎng)格生成由貪婪投影三角網(wǎng)格化、柵格投影網(wǎng)格化和移動(dòng)最小二乘法3個(gè)部分組成。貪婪投影三角網(wǎng)格化實(shí)現(xiàn)無(wú)序點(diǎn)云的快速重構(gòu),性能良好。柵格投影網(wǎng)格化計(jì)算速度稍慢,但可以實(shí)現(xiàn)破面、孔洞等的修復(fù),柵格大小由用戶界面設(shè)置。移動(dòng)最小二乘法采用的是多項(xiàng)式插值方法,設(shè)置鄰域點(diǎn)的個(gè)數(shù)和多項(xiàng)式階數(shù),在該范圍內(nèi)多項(xiàng)式擬合,擬合后的曲面進(jìn)行估計(jì)法線,使法向量有序化,再對(duì)設(shè)置半徑范圍內(nèi)的點(diǎn)采樣處理,讓點(diǎn)云分布均勻,完成這些操作后再進(jìn)行存儲(chǔ),進(jìn)一步網(wǎng)格化重建模型,得到的網(wǎng)格更加致密光滑。移動(dòng)最小二乘法的實(shí)現(xiàn)代碼如下:
pcl::search::KdTree
mls.setInputCloud(cloud);
mls.setSearchMethod(tree);
mls.setPolynomialFit(true);
mls.setPolynomialOrder(ui->lineEdit_MLS_setPolynomialOrder->text().toInt());
mls.setComputeNormals(false);
mls.setSearchRadius(ui->lineEdit_MLS_setSearchRadius->text().toDouble());
mls.setUpsamplingMethod(mls.SAMPLE_LOCAL_PLANE);
mls.setUpsamplingRadius(ui->lineEdit_MLS_setUpsamplingRadius->text().toDouble());
mls.setUpsamplingStepSize(ui->lineEdit_MLS_setUpsamplingStepSize->text().toDouble()
mls.process(*outputCloud);
4 結(jié)語(yǔ)
通過(guò)機(jī)載三維激光掃描儀系統(tǒng)構(gòu)建,探討了機(jī)載三維激光掃描儀技術(shù),實(shí)現(xiàn)了儀器高速數(shù)據(jù)測(cè)量、采集和數(shù)據(jù)處理。配合編寫(xiě)的機(jī)載三維激光掃描儀軟件系統(tǒng),實(shí)現(xiàn)了點(diǎn)云數(shù)據(jù)的讀寫(xiě)、精簡(jiǎn)濾波與三維重建,完成了設(shè)計(jì)要求和精度要求,具有一定的應(yīng)用推廣價(jià)值。后期研究中,將在儀器方面提高數(shù)據(jù)高采樣頻率、改進(jìn)掃描點(diǎn)的算法、提高數(shù)據(jù)傳輸實(shí)時(shí)性及增大極限掃描距離等,在軟件方面提高軟件的穩(wěn)定性、增加線程操作、優(yōu)化算法、支持更多點(diǎn)云格式文件的操作、改善用戶體驗(yàn)等,為三維激光掃描儀提供更多的技術(shù)支持。
參考文獻(xiàn):
[1] 黨夢(mèng)林,裴海龍. 基于QT的機(jī)載三維激光地形測(cè)繪軟件構(gòu)建[J]. 計(jì)算機(jī)測(cè)量與控制,2013(4):1084-1086+1089.
[2] 張小紅. 機(jī)載激光雷達(dá)測(cè)量技術(shù)理論與方法[M]. 武漢:武漢大學(xué)出版社,2007.
[3] 李世鵬,郭唐永,羅青山,等.海陸一體機(jī)載激光掃描儀的設(shè)計(jì)[J]. 大地測(cè)量與地球動(dòng)力學(xué),2013(S2):58-60,70.
[4] 鐘棉卿. 機(jī)載激光雷達(dá)系統(tǒng)初步方案研究[D].西安:西安科技大學(xué),2012.
[5] 陳鑌. 機(jī)載激光測(cè)量系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2010.
[6] 朱德海.點(diǎn)云庫(kù)PCL學(xué)習(xí)教程[M].北京:北京航空航天大學(xué)出版社,2012.
(責(zé)任編輯:陳福時(shí))