智能车图像部分——摄像头寻迹

智能车图像部分——摄像头寻迹(学习笔记) (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右侧是否缺少边缘 计算中线,并记录中心点位置 }

经验分享 程序员 微信小程序 职场和发展