智能车图像部分——摄像头寻迹
智能車圖像部分——攝像頭尋跡(學習筆記)
(1)攝像頭基本原理
·中斷處理
pclk 每輸出一個像素值產生一次
href 每輸出完一行產生一次
vsync 每輸出一場產生一次
·DMA傳輸
攝像頭初始化函數LQMT9V034-Init(void)中初始化DMA采集
(2)攝像頭圖像處理
·圖像二值化(灰度圖像變成黑白的圖像,便于處理)
*二值化的方法:1.設定固定閾值,大于閾值設定255白色,小于閾值設定0黑色。2.通過OLED打印(串口比較費時間),通過按鍵對閾值進行調整(設置按鍵的外部引腳中斷)。3.利用大津法(遍歷每個閾值,通過方差使黑白的差異達到最大化)。
·透視變換(變成俯視圖,將矩形圖片拉伸成梯形)
*圖像矯正步驟:1.獲取攝像頭視野角度,水平傾角,高度。2.計算實際圖像與獲取圖像的X、Y坐標對應關系。3.對于缺失值進行補充
·誤差分析(最小二擬合、斜率、曲率)
·賽道邊緣提取(魯棒性【檢測到一個是白色,往右三個都是黑的,再往右三個也都是黑的】、準確度、記憶性)
*1.捕捉賽道左側右側邊緣坐標。2.對于部分情況進行特殊處理。3.計算賽道中心。
*Canny邊緣檢測:梯度(顏色差異方向)方向,找邊緣方向。1.計算梯度幅度和方向。2.保留局部梯度最大的點,以得到細化的邊緣。3.用雙閾值法檢驗。
*路徑規劃及特殊處理:十字交叉路口,環島識別檢測(進環上三角,出環平路,再次遇到上三角),斑馬線停車斷路識別,入庫停車。
(3)攝像頭代碼框架
*main.c:
{
關閉總中斷,防止初始化過程中中斷打斷初始化(當然之后還要打開)
初始化引腳(OLED,電感,點擊,舵機等)
標志位清空
圖像處理
}
*Image Process(void)(圖像處理函數):
{
開啟攝像頭的時刻設置閾值 (用大津法)
大的while循環(一直要進行圖像處理)while(1)
采集完一張圖像之后將標志置成1,if成立,進行下面操作,進行完這些操作之后再將標志位置成0,這樣保證每次來一幀圖像只對圖像做了一次處理,對車做了一次控制,使攝像頭采集頻率和圖像處理頻率一致。
行中斷場中斷關閉
攝像頭尋跡(清零處理參數,尋找邊線,獲取標志位,oled刷新,之后進行特殊情況判斷,如果是短斷路則把標志位置成0,跳出if語句進入else用電磁進行尋跡。)
}
*void PITO-ISR()(isr.c)PIT中斷
用pit控制pid,pid需要時間間隔相同,所以放進中斷里
*void PORTD-ISR(void)(攝像頭采集中斷處理函數)
*void findEdge()(中線提取函數)
【1.調整有效行數量,查看圖像中線提取結果變化。2.調整不同行權重,查看輸出值影響。3.取消記錄圖像每行中心點,每一幀中心點,運行查看中線提取效果。】
{
從最下面一行開始向上遍歷
while檢測行數小于設置行數
if是最下面一行
開始尋找中心點設置為
提取左邊緣
提取右邊緣
判斷左側or右側是否缺少邊緣
計算中線,并記錄中心點位置
}
總結
以上是生活随笔為你收集整理的智能车图像部分——摄像头寻迹的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【基于Centos】驱动安装
- 下一篇: mysql数据库 with as用法