《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 線性CCD圖像處理與識別算法研究
線性CCD圖像處理與識別算法研究
2015年微型機與應(yīng)用第8期
廖偉權(quán),,劉海剛,項華珍,梁焯斌,,范智暉
(五邑大學(xué) 信息工程學(xué)院,,廣東 江門 529020)(五邑大學(xué) 信息工程學(xué)院,廣東 江門 529020)
摘要: 介紹了基于線性CCD傳感器的智能小車整體框架,、圖像采集和處理以及路徑識別控制算法,。智能小車控制系統(tǒng)中選擇線性CCD傳感器進行路徑識別,對采集的像素點進行中值濾波,、二值化等處理,,提取賽道兩邊的黑色邊緣,取其中心位置作為小車的引導(dǎo)方向,,控制舵機的轉(zhuǎn)向,,使得小車能夠穩(wěn)定、可靠地高速行駛,。
Abstract:
Key words :

  摘  要: 介紹了基于線性CCD傳感器的智能小車整體框架,、圖像采集和處理以及路徑識別控制算法。智能小車控制系統(tǒng)中選擇線性CCD傳感器進行路徑識別,,對采集的像素點進行中值濾波,、二值化等處理,提取賽道兩邊的黑色邊緣,,取其中心位置作為小車的引導(dǎo)方向,,控制舵機的轉(zhuǎn)向,使得小車能夠穩(wěn)定,、可靠地高速行駛,。
  關(guān)鍵詞: 線性CCD;數(shù)據(jù)采集,;中值濾波;動態(tài)閾值,;人字形彎道識別
0 引言
  在全國大學(xué)生“飛思卡爾”杯智能汽車競賽光電組的技術(shù)要點中,,線性CCD圖像處理和路徑識別這兩個環(huán)節(jié)尤其重要,其決定著小車能否安全可靠快速運行[1],。根據(jù)比賽規(guī)則和以往的比賽經(jīng)驗,,小車能否以最短的時間完成比賽,確保不沖出賽道,,都與小車的速度和路徑識別有著密切的關(guān)系,。因此,路徑的識別和處理是整個比賽的關(guān)鍵,,它能夠有效地控制智能小車在不同的路段該如何選擇合理,、高效的速度完整地去完成比賽,從而可以提高整場比賽中的平均速度。
  基于線性CCD傳感器的智能小車控制系統(tǒng)結(jié)構(gòu)如圖1所示,。該系統(tǒng)中執(zhí)行機構(gòu)是舵機和電機,,感應(yīng)機構(gòu)是線性CCD傳感器。路徑識別是實現(xiàn)智能小車沿賽道自主運行的信息基礎(chǔ),,獲得范圍廣而精確的路徑信息是提高智能小車運行速度的關(guān)鍵[2],。
1 圖像采集
  一般的圖像CCD傳感器有模擬的和數(shù)字的,線性CCD傳感器(TSL1401CL)輸出的信號是模擬的,。圖像CCD傳感器要處理的數(shù)據(jù)量比較大,,使用硬件二值化比較好[3]。但對于線性CCD傳感器來說,,數(shù)據(jù)量的處理沒有圖像CCD傳感器大,,硬件二值化的優(yōu)勢并不明顯,所以直接采集模擬信號,。采用固定曝光時間,,整個函數(shù)運行一遍的周期是10 ms,響應(yīng)時間充足,,圖像穩(wěn)定,。

Image 001.png

  在實際應(yīng)用中采用拉普蘭德的開源程序代碼,再根據(jù)單片機的特性進行修改,,縮短采集時間,,提高響應(yīng)速度,使采集的圖像穩(wěn)定下來是最重要的,。
2 圖像處理
  線性CCD有中值濾波法,、二值化處理法、邊緣增強法等圖像處理方法,。由于邊緣增強法的目的在于突出賽道的邊緣信息,,增強路徑的識別,經(jīng)邊緣增強后的圖像能更清晰地顯示出路徑的邊界[4],。但是經(jīng)過實踐,,對于飛思卡爾智能車競賽黑白明顯的賽道而言,邊緣增強法的效果并不十分明顯,,所以舍棄了該方法,。
  2.1 中值濾波法
  采集回來的數(shù)據(jù)可能上下波動,不夠穩(wěn)定,,這時就需要調(diào)用中值濾波函數(shù),。中值濾波是一種非線性數(shù)字濾波器技術(shù),用于去除圖像中的噪聲,。其設(shè)計思想就是檢查采集像素點的值,,并判斷它是否代表了信號,。從第一個像素點開始,將其數(shù)值和相鄰的兩個像素點的數(shù)值進行排序,,3個像素點中數(shù)值為中值的像素點作為代表信號并輸出,。然后,丟棄最早的值,,取得新的采樣,,重復(fù)上面的計算過程到127個點為止[5]。
  中值濾波程序如下:
  short get_mid(short a,,short b,,short c)
  //get_mid取中間值b
  {
  short x=0;
  if(a>b){x=b,;b=a,;a=x;}
  if(b>c){x=c,;c=b,;b=x;}
  if(a>b){x=b,;b=a,;a=x;}
  return b,;//經(jīng)過以上比較賦值,,將中間值賦給b,
  返回給中間像素點gPixel[i]
  }
  for(i=1,;i<128,;i++)//對128個點進行平滑處理輸出
  {
  gPixel[i]=get_mid(gPixel[i-1],gPixel[i],,gPixel[i+1]),;
  //gPixel[i]代表采集回來的像數(shù)點數(shù)值
  }
  2.2 二值化處理
  圖像的二值化處理就是將圖像上點的灰度值置為0或255(在程序設(shè)計中置為0和1)的灰度值[6]。二值化的目的就是將所有灰度大于或等于閾值的像素判定為白色,,否則像素點為黑色,,這樣明確地分出黑白兩種顏色,小車就能準(zhǔn)確地轉(zhuǎn)彎,。閾值的選取有很多種方法,常用的有動態(tài)閾值和試驗確定法[7],。對圖像進行二值化分割,,選取恰當(dāng)?shù)拈撝党闪藴?zhǔn)確劃分的關(guān)鍵。事實驗證,,靜態(tài)閾值已經(jīng)不能滿足整幅賽道,,所以采用動態(tài)閾值算法[8],。由于四輪智能小車存在轉(zhuǎn)彎不靈活的特點,在賽道上跑時很容易丟線,,所用的動態(tài)閾值要在丟線時調(diào)用上一個閾值(T_old)(T_old是上一次計算正確的閾值保留下來賦予的值T_last),。
  軟件二值化的動態(tài)閾值算法如下:
  (1)找出一組數(shù)據(jù)128個像素點的最大值(max)和最小值min,。
 ?。?)判斷最大值(max)和最小值(min)的偏差是否大于全黑時的偏差(all_black_Difference_value),若大于全黑時的偏差,,就繼續(xù)下面步驟,,否則不計算下一步驟,用上一次的閾值,。全黑時的偏差指的是全黑(丟線)情況下的最大值與最小值的偏差(是給定的一個值),,由經(jīng)驗得知丟線情況下的閾值是不正確的,要用上一次的閾值T_old,。
 ?。?)為全局閾值T選擇一個初始估計值:30VYA3A0JV09[KF6`KILR0Z.jpg
 ?。?)二值化處理圖像,,并產(chǎn)生兩組數(shù)組:sum_h為灰度值大于T的所有像素組成,sum_l由所有小于等于T的像素組成,。
 ?。?)對sum_h和sum_l的像素分別計算平均弧度值(均值)max_ave和min_ave。
 ?。?)產(chǎn)生最終的閾值T_last,,再給T_old賦值:T_old=T_last(T_old丟線時調(diào)用)。
  A1(PYA`4R8TAVDOM{0Y][AG.png

3 賽道識別
  3.1 一般賽道的識別
  普通賽道類型包括:直道,、十字路口,、小S彎以及不同曲率的彎道。因此,,對不同的彎道識別及數(shù)據(jù)處理是成功與否的關(guān)鍵,。采用了一次元函數(shù)動態(tài)Kp的算法來處理不同曲率的彎道。主要公式為:
  Error=Left_black-(128-Right_black)(2)
  Kp=0.05×|Error|(3)
  其中,,Error為實際中心位置與測量中心值的偏差,。通過經(jīng)驗得知,Error等于左邊黑點減128與右邊黑點的差值,。當(dāng)Error為負(fù)數(shù)時舵機向左轉(zhuǎn)彎,,為正數(shù)時舵機向右轉(zhuǎn)彎,從而控制速度的變化,。Error偏差在得出第一個黑點前還需要判斷其是否為噪點,。當(dāng)全黑時設(shè)定了一個最低速度,,偏差為0時也限制了它的最高速度,防止智能小車由于速度過高,,造成擺尾或沖出賽道等問題,。
  在直道,偏差(Error)會變得很小,,絕對值小于10,,控制舵機直行,不轉(zhuǎn)彎,。
  十字路口都是與270°的彎道連接在一起的,。由于十字路口沒有兩端的黑色引導(dǎo)線,通過CCD采集的數(shù)據(jù)分析,,計算進入前的3次偏差位置,,求出它的斜率,再通過斜率計算出智能小車在十字路口上舵機轉(zhuǎn)彎大小,,從而保證小車順利通過十字路口,。
  緊跟著就進入270°的彎道。為了防止舵機誤判,,當(dāng)上一個偏差與本次的偏差超過某一個值時,,保持上一次的偏差,這樣就能順利平滑通過彎道了[9],。
  從CCD采集回來小S彎道的數(shù)據(jù)來看,,由于小S彎道的位置偏差較小,而且采用一次元函數(shù)動態(tài)Kp的方法來控制舵機轉(zhuǎn)彎,,Kp的值可以通過這些小偏差的改變而改變,,即Kp=0.05×偏差。因此,,可以保證智能車以較高的速度完美通過小S彎道,。
  3.2 特殊賽道的識別
  為了增加行駛難度,增加了人字彎道識別,,如圖2所示,。本設(shè)計選擇了讓智能小車直接大拐角掉頭。當(dāng)檢測到斑馬線時,,給舵機一個大轉(zhuǎn)角,,讓小車直接駛過。然而當(dāng)小車高速行駛時,,處理不好速度與CCD檢測前瞻(CCD掃描的地方與車身間的距離)的關(guān)系,,小車很容易沖出賽道。本設(shè)計在智能小車上安裝了兩個CCD,,一個前瞻在50 cm,,一個前瞻在40 cm。
  圖2中,,兩條平行線分別為兩個CCD拍攝圖像的位置,。其中,車子前瞻較近的CCD掃描的圖像是在直道運行,,得到的數(shù)據(jù)是左右黑線都存在,;前瞻較遠(yuǎn)的CCD掃描的賽道圖像,得到的數(shù)據(jù)是左邊的黑線相差不大,,但右邊黑線與較近CCD相比卻突然丟失,,據(jù)此判斷此時應(yīng)該右轉(zhuǎn)。

Image 002.png

  人字形判斷程序段如下:
  Error=Left_black-(128-Right_black)
  |Error|<10//判斷較近的CCD是否檢測到黑線,,
  并計算出是否在直到上,,在中線時偏差(Error)小于15,在實際情況中這個值小于10就認(rèn)為是直道
  |Left_black_near-Left_black_far|<8//判斷近的CCD左邊
  黑線和較遠(yuǎn)CCD左邊黑線是不是偏差小于8(在直道上兩個CCD的左黑線像素點相差小于8)
  |Right_black_near-Right_black_far|>30//判斷近的CCD
  右邊黑線和較遠(yuǎn)CCD右邊黑線是不是偏差大于一定范圍(較遠(yuǎn)CCD丟線,,較近的還在直道上,,所以兩個CCD的右黑線像素點相差大于30)
  當(dāng)同時滿足以上3個條件時,判別出人字彎道后,,就向右轉(zhuǎn)彎,,使小車控制舵機進行較大角度的轉(zhuǎn)彎,等到小車回到直道后,,再給與舵機中值,,從而使小車快速、穩(wěn)定通過人字彎,。左拐彎與之相反,。
  結(jié)合兩個CCD信息去識別可以準(zhǔn)確判別出人字彎道。經(jīng)過實踐驗證,,采用此方法誤判的概率非常小,,只有在智能小車軌跡異常偏離賽道中心時才會出現(xiàn)誤判。
4 結(jié)論
  通過對線性CCD圖像處理與識別算法進行研究,,將理論知識與實際情況相結(jié)合,,對采集的圖像進行中值濾波、二值化動態(tài)閾值處理,,再根據(jù)小車的實際情況進行改善,,設(shè)計了一次元函數(shù)動態(tài)Kp的算法,對直道,、十字路口,、小S彎以及不同曲率的彎道進行辨識,并對人字形賽道特殊判斷識別,,從而使小車能夠沿規(guī)定賽道穩(wěn)定,、可靠,、快速地運行。
  參考文獻
  [1] 劉嘉豪,,劉海剛,,張建偉,等.智能車圖像處理與識別算法研究[J].工業(yè)控制計算機,,2014,,27(8):19-22.
  [2] 卓晴,黃開勝,,邵貝貝,,等.學(xué)做智能車:挑戰(zhàn)“飛思卡爾”杯[M].北京:北京航空航天大學(xué)出版社,2007.
  [3] 劉祖臣.基于CMOS數(shù)字?jǐn)z像頭的硬件二值化方案[J].電子科技,,2014,,27(7):99-102.
  [4] 周磊,任國全,,肖浩,,等.結(jié)構(gòu)化道路車道線快速檢測的一種改進算法[J].計算機仿真,2012,,29(4):362-366.
  [5] 張毛女,,柳薇.一種基于邊緣檢測的改進的中值濾波去噪方法[J].計算機與現(xiàn)代化,2011,,29(3):63-65,,73.
  [6] 李俊,王軍輝,,譚秋林,,等.基于MC9S12XS128控制器的智能車圖像處理技術(shù)研究[J].化工自動化及儀表,2012,,39(2):190-193.
  [7] 季聰,,王思明,漢鵬武.智能車路徑識別與控制研究[J].電視技術(shù),,2013,,37(9):192-195,209.
  [8] 常江.基于視覺導(dǎo)航的智能車測控系統(tǒng)關(guān)鍵技術(shù)研究[D].天津:河北工業(yè)大學(xué),,2010.
  [9] 邱迎.道路自動識別與控制的智能車系統(tǒng)的研究[D].重慶:重慶大學(xué),,2010.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。