0 引言
在一些姿態檢測的實際應用中,需要在被測對象上安裝激光探測器[1],利用CCD相機捕捉激光光斑來檢測觀測對象的實際情況,光斑圖像質心坐標的提取是圖像處理技術中常見的問題,激光的瞬時和高速性是激光光斑圖像的重要特征[2]。為了實時準確地獲取激光光斑質心的坐標,相機要求以300幀每秒的速度進行采集。原設備原始應用場景為工業高清相機通過專用Camera Link電纜連接圖像采集卡,圖像采集卡插入計算機內部,計算機接收圖像數據后進行信號處理運算,質心算法的實現在計算機上完成[3]。本文通過對原設備的結構進行優化,將算法部分移植到硬件環境中形成相機控制器,使得攝像機與計算機可以遠距離部署,一臺計算機可以控制和接收多臺相機數據并同時進行信號處理,并且對計算機的配置要求較低,有靈活的擴展性。在質心算法研究方面,將計算機軟件實現的算法用硬件描述語言Verilog設計實現,獲取激光光斑的實時質心坐標。
1 CCD采集圖像質心算法
激光探測器形成的激光光斑在CCD表面的光強分布可以看作以中心對稱的高斯分布[4],所以在激光光斑質心坐標算法中,可以用光斑光亮的最強點作為激光光斑的質心坐標,對于CCD數字視頻信號來說就是灰度值最大的那一點的坐標值[5]。具體算法如下:
第一步:噪聲采集。假設圖像x方向與y方向分別有m與n個像素點。在無激光照射CCD情況下采集N幅圖(N理論上越多越好,實際N值手動可設即可),databuffa[m][n]為第a幅圖的數據。對N幅圖進行求均方根,即可得到噪聲數據。
第二步:去噪聲。此時開始進行激光光斑的采集,CCD所采集的每幅圖數據為h[m][n],進行去噪聲處理,將CCD所采集的數據與采集算好的噪聲相減。如果低于最小灰度值0則為0;如果高于最大灰度值255則為255。
第三步:去一定比例的最大灰度值,比例系數為p。此時經過去噪聲的圖像數據h[i][j]還具有一定的干擾,采用閾值去掉干擾,閾值為最大灰度值的比例數。首先尋找圖像的最大灰度值,然后進行去掉閾值。
第四步:進行質心計算。CCD所采集圖像質心即圖像灰度的重心,i與j分別為兩個方向的坐標,g[i][j]為像素點(i,j)坐標的灰度值,則圖像質心位置坐標為:
式中x、y即為圖像質心的坐標。
2 基于FPGA的圖像質心算法
FPGA的特點是數字邏輯的思維與并行的處理方式。FPGA的并行處理能力使得它有著更高的處理速度,讓人們更青睞于這種可編程邏輯方式去實現所需要的算法。本文的目的是將CCD采集圖像質心算法用可編程邏輯Verilog語言去實現所需算法,為了實現上述算法,需要對算法進行必要的改造。
第一步:噪聲均方根的采集實現。對于數字邏輯中只有0和1之分,灰度圖像的顏色由8位二進制來表示,故灰度顏色由0~255這256個數據來表示。故這里不需對根號內數據進行開方,而是直接根據根號下的數據即可算出均方根的結果,因為這里的結果都是四舍五入后的整數。
第二步:去噪聲的實現。此算法可直接用可編程邏輯實現,與原算法一致。
第三步:去一定比例的最大灰度值中比例數p是一個0~1之間的小數,在實際應用中小數可以通過浮點數的方法來表示,浮點數的表示有32位與64位的表示方法。所以本文的設計方法是將0~1的數與0~100的數字一一對應,在后續再轉換縮回比例,求出數據。例如0.16對應整數16,這樣只需要7位二進制數即可表示,節省了寄存器占用的空間,利于算法的實現。
第四步:質心計算的實現。第三步中的質心計算的算法方式由于求矩陣過程復雜,運算量大,不適用于可編程邏輯方式,為此將此算法進行了轉換。一種基于函數轉換的快速搜素質心算法,利用目標質心與目標上所有各點間距離之和值最小的原理,快速求出質心。此算法適用于灰度圖像,對灰度圖像求質心具有廣泛的用途與實際的意義。應用此算法后,n個乘法轉換成了1個乘法,便于Verilog語言去實現。
3 仿真結果與分析
將改進后的算法應用到可編程邏輯Verilog語言中后,實現了光斑質心算法的功能并能夠實時求出質心的坐標。通過上位機選擇需要算出的N幅圖得到的噪聲系數,將求出的噪聲系數存入RAM中,當激光照射后讀出RAM中存儲的噪聲系數值即可。本設計包括噪聲系數模塊,去噪聲模塊與質心坐標算法3個模塊。圖1為光斑質心算法的總體架構圖。
噪聲系數模塊:初始化后檢測ready信號,ready拉高表示外部輸入已經準備好可以接收數據,可保證在一幀圖像數據內的連續性。在準備好后等待pulse_in信號的到來,pulse_in為脈沖信號,當接收到此信號時表示通知模塊需要計算噪聲系數。pixel_num為像素值選擇, frame_num為幀數選擇,范圍是0~131 072。data_in為輸入的圖像數據8位灰度值,noise_req為噪聲系數輸入數據請求信號,當此信號拉高后,輸入信號data_in在下一拍輸入數據。noise_done為噪聲系數計算完成信號,當計算結束并沒有接收到重新計算信號pulse_in時,noise_done一直拉高來表示噪聲系數模塊處理完成。在noise_done高電平期間,輸入來自去噪聲模塊的地址信號addr_in,即可讀出RAN中對應地址的數據databuffnoise。
去噪聲模塊:在noise_done高電平期間可啟動去噪聲模塊。read_en為脈沖信號,一個脈沖可接收一幀圖像數據。proportion信號是上位機發來的比例系數,范圍在0~100之間,表示0~1之間的數。在接收到read_en脈沖信號后,發出數據請求信號data_req,data_req拉高后輸入dec_in數據信號,由于需要求出一幀圖像的最大圖像數據,所以會有一幀圖像的延遲,當輸出圖像數據有效data_valid信號拉高時,輸出去噪后有效的pixel_data數據,在data_valid信號拉高后輸出的pixel_data數據會傳到質心算法模塊中進行計算。圖2為去噪模塊仿真結果。
質心坐標算法模塊:輸入的request_in信號是去噪聲模塊的輸出信號data_valid,在request_in信號有效時,輸入的數據gravity_in信號有效,與去噪模塊的輸出數據信號pixel_data線性連接。在信號請求輸出req_out高脈沖同時輸出質心坐標xy_pos信號,輸出的x、y坐標都是10位二進制數表示,根據需求以32位xy_pos信號輸出,高25~16位填充x坐標,9~0位填充y坐標,其他填充0。通過各個模塊的驗證可看出算法符合基本要求, 最后得到如圖3所示的3個模塊整體的頂層模塊仿真結果圖。
將此算法用C++在VS2012上運行并驗證質心坐標是否正確,輸入相同輸入數據,驗證結果如圖4所示。
通過分析和仿真驗證了設計的正確性,CCD圖像質心算法被很好地應用到可編程邏輯語言中,FPGA的高速并行優點使得算法可以達到流水線高速運行,由于相機的圖像采集速度可達到每秒300幀,為了符合這樣的高速采集能力,本文采用了流水線算法可實時算出質心坐標供上位機采集和使用。
4 結論
本文所設計的光斑質心定位算法是基于實際應用的激光探測器相機控制器的算法實現部分,該算法的實現使得攝像機與計算機可以遠距離部署,將復雜算法的運算量交給控制器去處理,減輕了計算機的工作量去處理更重要的事情。該方法適用于有一定存儲空間的FPGA芯片去實現,注重高速與實時性,對工業高清相機這種高精度要求的應用有一定的實用價值。
-
CCD
+關注
關注
32文章
884瀏覽量
142586 -
激光探測器
+關注
關注
0文章
28瀏覽量
8588
發布評論請先 登錄
相關推薦
評論