趙建敏, 趙忠鑫, 李 琦
(內(nèi)蒙古科技大學(xué) 信息工程學(xué)院,內(nèi)蒙古 包頭 014010)
?
基于Kinect傳感器的羊體體尺測(cè)量系統(tǒng)*
趙建敏, 趙忠鑫, 李 琦
(內(nèi)蒙古科技大學(xué) 信息工程學(xué)院,內(nèi)蒙古 包頭 014010)
在基于機(jī)器視覺的羊體體尺測(cè)量中,當(dāng)光線、背景等產(chǎn)生干擾時(shí),彩色圖像無法準(zhǔn)確提取出羊體輪廓,且羊體站姿的變化也會(huì)造成測(cè)量誤差?;赩S2010,Windows SDK搭建羊體測(cè)量系統(tǒng),為解決背景干擾的問題,采用Kinect傳感器獲取現(xiàn)場(chǎng)羊體彩色和深度圖像,將彩色與深度圖像相結(jié)合提取羊體輪廓;結(jié)合深度信息建立羊體空間輪廓線擬合平面,并計(jì)算其與像平面夾角,進(jìn)行體位站姿糾偏后得到羊體體尺數(shù)據(jù)。經(jīng)過實(shí)驗(yàn)測(cè)試,相對(duì)誤差在4.3 %以內(nèi)。
機(jī)器視覺;輪廓提取; 特征點(diǎn); 體尺測(cè)量; Kinect傳感器
基于機(jī)器視覺的家畜體尺測(cè)量改變了接觸式的測(cè)量方法,國內(nèi)相關(guān)研究有:劉同海、滕光輝等人利用背景減法和去除噪聲算法得到豬體體尺測(cè)點(diǎn)[1];江杰、周麗娜等人利用背景差分法提取羊體輪廓[2];劉波、朱興偉等人運(yùn)用自動(dòng)閾值分割與形態(tài)學(xué)處理進(jìn)行輪廓分割[3]。
但上述方法在實(shí)測(cè)中,當(dāng)家畜與背景顏色相近時(shí),彩色圖像差分結(jié)果殘缺,閾值難以確定,無法單純分割出目標(biāo)家畜。另外,羊體與像平面的夾角無法得知,對(duì)測(cè)量造成較大誤差。本文在VS2010環(huán)境下基于Kinect傳感器搭建的羊體體尺測(cè)量系統(tǒng)。利用彩色、深度圖像的多元信息提取羊體輪廓線;結(jié)合傳感器深度值建立輪廓點(diǎn)三維坐標(biāo),計(jì)算出羊體與像平面夾角,得到更加準(zhǔn)確的體尺數(shù)據(jù)。
本文參照人工羊體體尺測(cè)量設(shè)計(jì)出基于機(jī)器視覺中的測(cè)量步驟。通過Kinect傳感器捕捉羊體彩色、深度圖像,分別得到各自的輪廓提取結(jié)果,將二者信息結(jié)合最終得到閉合羊體側(cè)面輪廓線。羊體特征點(diǎn)如圖1,臀部特征點(diǎn)A,耆點(diǎn)B,前后足點(diǎn)C,D。AB長為羊體體長,BD長為體斜長,BC長為體高。
圖1 羊體輪廓與特征點(diǎn)
通過對(duì)得到的羊體輪廓線數(shù)字圖像進(jìn)行分析,得到各特征點(diǎn),計(jì)算出羊體體尺??傮w方案如圖2所示。
圖2 體尺測(cè)量系統(tǒng)總體結(jié)構(gòu)圖
軟件結(jié)構(gòu)分驅(qū)動(dòng)層和應(yīng)用層,如圖3所示。
圖3 軟件結(jié)構(gòu)圖
驅(qū)動(dòng)層包括KinectSDK,MySQL數(shù)據(jù)庫,應(yīng)用層包括羊體特征點(diǎn)提取、體尺計(jì)算、站姿糾偏、羊體體尺檔案等。本系統(tǒng)采用多線程方法設(shè)計(jì)應(yīng)用程序,線程1進(jìn)行攝像頭讀取,視頻流的采集,線程2進(jìn)行輪廓提取,特征點(diǎn)尋找,體尺計(jì)算等子程序。操作系統(tǒng)為線程1、線程2提供不同的時(shí)間片,設(shè)置線程2的優(yōu)先級(jí)高于線程1。
Kinect傳感器是微軟公司在2009年發(fā)布的一種體感傳感器[4],它可同時(shí)采集彩色、深度圖像,流程如4所示。
首先,進(jìn)行初始化:1)檢查Kinect設(shè)備是否連接到電腦上,以及Kinect設(shè)備的驅(qū)動(dòng)程序是否安裝成功;2)若設(shè)備狀態(tài)正常,NuiCreateSensorByIndex函數(shù)創(chuàng)建設(shè)備ID。
圖4 彩色與深度流獲取流程圖
其次,分配相應(yīng)緩存空間,設(shè)定圖像的分辨率。通過NuiInitialize(NUI_INITIALIZE_FLAG_USES_COLOR )和NuiInitialize(NUI_INITIALIZE_FLAG_USES_DEPTH)函數(shù)對(duì)深度彩色視頻流進(jìn)行初始化。本系統(tǒng)采用逐幀讀取視頻流的方法,通過CvCapture()結(jié)構(gòu)體來保存圖像捕獲的信息,CvCapture()自動(dòng)獲取下一幀的位置,每獲取一幀后,利用MapColorCoordinatesToDepth()或MapDepthCoordinatesToColor()對(duì)深度與彩色圖像進(jìn)行配準(zhǔn),之后這些信息立即更新,自動(dòng)獲取下一幀,周而復(fù)始。在主界面創(chuàng)建靜態(tài)框,利用DrawToHDC()將圖像逐幀畫到靜態(tài)框中,形成彩色、深度流。為實(shí)現(xiàn)數(shù)據(jù)保存,采用CvCreateVideoWriter()視頻文件寫入器函數(shù)將數(shù)據(jù)流以一定格式寫入,完成保存。退出時(shí),調(diào)用函數(shù)NuiShutdown(),釋放對(duì)Kinect設(shè)備的控制權(quán)。
羊體輪廓提取利用彩色和深度圖像信息相互結(jié)合的辦法。流程圖如圖5所示。
圖5 輪廓提取流程圖
利用CvSaveImage()函數(shù)對(duì)現(xiàn)場(chǎng)羊體彩色、深度圖形進(jìn)行采集,系統(tǒng)自動(dòng)對(duì)采集圖像編號(hào),并存入后臺(tái)數(shù)據(jù)庫。通過鼠標(biāo)事件回調(diào)函數(shù)CvSetMouseCallback(),返回單擊事件onClick選取目標(biāo)羊體。此時(shí)目標(biāo)羊體處生成一個(gè)標(biāo)記點(diǎn)K,彩色圖像以K點(diǎn)為基準(zhǔn),采用局部自適應(yīng)閾值分割法[5]進(jìn)行閾二值化處理,以某一閾值將像素點(diǎn)灰度一分為二,再用Canny算法對(duì)二值化后的圖像進(jìn)行輪廓提取,深度圖像在去噪后直接進(jìn)行輪廓提取。
圖6(a),(b)分別為利用彩色、深度提取到的羊體輪廓線。圖6中輪廓線處像素點(diǎn)灰度為255,其余部分灰度為0。在目標(biāo)羊A處標(biāo)記點(diǎn)灰度值初始化為200。定義與一像素點(diǎn)a有公共邊的像素為其鄰位,如b1,b2,b3,b4為a鄰位,如圖7。
圖6 輪廓提取結(jié)果
圖7 a點(diǎn)及其鄰位
若灰度值為200的像素點(diǎn)a鄰位存在灰度值為0的像素點(diǎn),則稱a為奇異點(diǎn)。定義奇異點(diǎn)的膨脹操作為將鄰位中灰度值為0的位置灰度改變?yōu)?00。程序以標(biāo)記點(diǎn)開始作膨脹運(yùn)算,直至無奇異點(diǎn)時(shí),羊體A區(qū)域已被灰度值為200的像素點(diǎn)填充,此時(shí)取閾值T=200進(jìn)行二值化,如圖8(a),再經(jīng)提取輪廓,得到閉合輪廓,如圖8(b)。
圖8 目標(biāo)羊體輪廓圖
根據(jù)U弦長曲率[6]法得到背部輪廓線臀部相應(yīng)位置曲率最大點(diǎn)[2]即為臀部特征點(diǎn)。
通過逐行掃描的雙腿識(shí)別算法的到前后蹄點(diǎn)的坐標(biāo)[7]。根據(jù)前蹄點(diǎn)像素點(diǎn)位置,設(shè)fy為前足點(diǎn)所在列,因此,耆點(diǎn)也在第fy列。找出輪廓線上所有列數(shù)為fy的點(diǎn),所在行數(shù)分別為T1,T2,T3,…,Tn。最終根據(jù)限定條件
(1)
坐標(biāo)(x,y)即為耆點(diǎn)坐標(biāo)。
在實(shí)測(cè)中,羊體中心平面與測(cè)量平臺(tái)中心平面可能存在一定的角度θ,如圖9。此時(shí),在二維圖像中測(cè)得的體尺數(shù)據(jù)L′為真實(shí)體尺L在二維圖像平面上投影長度,因此,需結(jié)合深度信息進(jìn)行測(cè)量。
圖9 羊體站位俯視圖
6.1 建立空間直角坐標(biāo)系
深度圖像幀中,每一個(gè)像素點(diǎn)都包含了特定的距離信息,即該特定的(x,y)點(diǎn)坐標(biāo)處離攝像頭平面最近的物體到該平面的距離。
本文深度圖像分辨率為640×480,由羊體二值化輪廓線坐標(biāo)結(jié)合深度圖像中獲得的深度值構(gòu)成羊體空間輪廓線??臻g輪廓線上的點(diǎn)類型為DepthImagePoint(X,Y,Z),其中,(X,Y)為深度圖像像素坐標(biāo),即輪廓點(diǎn)位置,Z為深度值。本文選用的深度圖像的灰度值為0~255,根據(jù)Kinect相關(guān)信息,深度值分辨率為1.6 cm。
如圖10,在實(shí)際測(cè)量時(shí),攝像頭與羊體監(jiān)控區(qū)域位置保持相對(duì)不變,根據(jù)墻面標(biāo)記點(diǎn)A,B進(jìn)行攝像頭標(biāo)定,已知A,B相距200 cm,水平相隔469個(gè)像素,故可確定dx=dy=0.427 cm。
圖10 Kinect安裝示意圖
6.2 剔除不可信點(diǎn)
考慮到計(jì)算量等因素,將空間輪廓線上的隨機(jī)采樣點(diǎn)表示到三維直角坐標(biāo)系中。由于Kinect在對(duì)羊體邊緣部分的深度測(cè)量存在著許多隨機(jī)誤差,產(chǎn)生的虛假邊緣的深度信息并不可靠,故將其剔除。求出采樣輪廓點(diǎn)深度值的均值
(2)
圖11 部分空間輪廓點(diǎn)
6.3 擬合平面
在得到較為可信的羊體空間輪廓點(diǎn)之后,采用最小二乘法,對(duì)這些點(diǎn)坐標(biāo)進(jìn)行擬合運(yùn)算得到其的擬合平面。部分輪廓采樣點(diǎn)坐標(biāo)見表1。
表1 部分輪廓采樣點(diǎn)的坐標(biāo)(cm)
Tab 1 Coordinates of partial contour sampling point (unit: cm)
軸向123456X108.6113.3130.4165.4171.4188.9Y104.190.482.898.6112.2177.1Z164.8171.2171.2169.6164.8160.0
羊體輪廓點(diǎn)擬合平面的一般方程為
-0.000 797 2x+0.000 265 7y-0.005 4z+1=0.
(3)
擬合平面和輪廓點(diǎn)如圖12。得到了羊體站位擬合平面,可將特征點(diǎn)坐標(biāo)映射到擬合平面上,計(jì)算得到體尺數(shù)據(jù)。
圖12 空間輪廓點(diǎn)與擬合平面
系統(tǒng)主界面如圖13,隨機(jī)選6只羊?yàn)闃颖?,以體長為例,人工與本系統(tǒng)各測(cè)5次取均值,以人工方法測(cè)量結(jié)果為真值,給出本系統(tǒng)相對(duì)誤差,見表2。
圖13 主界面 Fig 13 Main interface
表2 體長測(cè)量實(shí)驗(yàn)結(jié)果
本文在VS2010環(huán)境下,結(jié)合Windows SDK設(shè)計(jì)并實(shí)現(xiàn)了羊體體尺測(cè)量系統(tǒng),基于Kinect傳感器,采用彩色、深度圖像融合的方法分割得到羊體輪廓線,克服了背景差分、閾值分割在提取家畜輪廓時(shí)出現(xiàn)的差分結(jié)果殘缺、閾值選取困難及羊只站姿變化干擾等問題,實(shí)測(cè)中,相對(duì)誤差在4.3 %之內(nèi),對(duì)機(jī)器視覺技術(shù)在家畜體尺測(cè)量方面的應(yīng)用具有積極意義。
[1] 劉同海,滕光輝,付為森,等.基于機(jī)器視覺的豬體體尺測(cè)點(diǎn)提取算法與應(yīng)用[J].農(nóng)業(yè)工程學(xué)報(bào),2013,29(2):161-168.
[2] 江 杰,周麗娜,李 剛.基于機(jī)器視覺的羊體體尺測(cè)量[J].計(jì)算機(jī)應(yīng)用,2014,34(3):846-850,887.
[3] 劉 波,朱偉興,霍冠英.生豬輪廓紅外與光學(xué)圖像的融合算法[J].農(nóng)業(yè)工程學(xué)報(bào),2013,29(17):113-120.
[4] 趙建敏,許曉偉,賈慧媛.基于Kinect體感傳感器的心理宣泄系統(tǒng)的實(shí)現(xiàn)[J].傳感器與微系統(tǒng),2014,33(8):119-122.
[5] 王琰濱,蔣龍泉,馮 瑞.一種低圖像質(zhì)量車輛牌照的字符分割方法[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(3):108-110,117.
[6] 郭娟娟,鐘寶江.U弦長曲率:一種離散曲率計(jì)算方法[J].模式識(shí)別與人工智能,2014,27(8):683-691.
[7] 羅瑞琨,魏有毅,尹華彬,等.基于Kinect的主動(dòng)式伴舞機(jī)器人的研究與設(shè)計(jì)[J].機(jī)械設(shè)計(jì)與制造,2013(6):1-3,7.
趙忠鑫,通訊作者,E—mail:zhao479059413@163.com。
Sheep body size measurement system based on Kinect sensor*
ZHAO Jian-min, ZHAO Zhong-xin, LI Qi
(School of Information Engineering,Inner Mongolia University of Science and Technology,Baotou 014010,China)
In sheep body measurement based on machine vision,the color image can not extract sheep contour precisely because of light and background interference.Sheep’s uncertain standing posture can also cause measurement error.In order to solve the problem of background interference,measurement system is built based on VS2010, Windows SDK,and Kinect sensor as the image acquisition device is used to acquire the sheep body color image and depth image.Sheep body contour is gained by the way of color and depth fusion.Sheep body space contour fitting plane is established based on depth information, and angle between image plane and fitting plane is calculated to solve the problem of standing posture effect.The test results show the relative error is within 4.3 %.
machine vision; contour extraction; feature points; body measurement; Kinect sensor
2015—01—04
內(nèi)蒙古科技大學(xué)創(chuàng)新基金資助項(xiàng)目(2012NCL027)
10.13873/J.1000—9787(2015)09—0100—04
TP 391.4
A
1000—9787(2015)09—0100—04
趙建敏(1982-),男,內(nèi)蒙古包頭人,碩士,講師,主要從事人機(jī)交互、模式識(shí)別方向的研究。