各大学摄像头图像处理电路

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京科技大学图像处理电路

我们的智能模型车自动控制系统中使用黑白全电视信号格式CMOS摄像头采集赛道信息。摄像头视频信号中除了包含图像信号之外,还包括了行同步信号、行消隐信号、场同步信号、场消隐信号以及槽脉冲信号、前均衡脉冲、后均衡脉冲等。因此,若要对视频信号进行采集,就必须通过视频同步分离电路准确地把握各种信号间的逻辑关系。我们使用了LM1881芯片对黑白全电视信号进行视频同步分离,得到行同步、场同步信号。

在对硬件二值化的研究中,我们也从数字比较器以及模拟比较器几个方向进行了试探性研究,从图像的稳定性及清晰性等方面进行筛选,最终决定采用模拟电路搭建而成的比较器对图像进行二值化处理。

图3.7 比较电路原理图

图3.8 LM1881外围电路原理图

北京邮电大学摄像头选型

在众多的摄像头中我们选择了CMOS的OV7620,属于数字摄像头。模拟摄像头有更好的动态特性,在车子高速行驶时,图像更清晰,但是它需要额外的一块AD转换模块,增加了主板的开销。我们在对比了车子在3米和3米3之间的模拟摄像头和数字摄像头的图像时,发现在用DMA采集的图像没有什么大的差别,提取的中线差不多,故我们毅然决然选择了比较简洁的数字摄像头OV7620。

图像提取与处理

摄像头组的核心部分为左右边线的提取,从而推算出中心线的位置,引导车子的行进方向。我们使用了ov7620这款数字摄像头,返回的是灰度图像,远方图像较模糊,难以提取黑线。所以我们使用了边沿锐化算法,根据一定的阈值,对返回的灰度图像进行遍历,运算处理,得到反映图像边沿的二值图像,远方的信息也能较好地得到,再进行左右边线的提取。

边线提取,中心线推算思路:

1.近处图像较远处图像可靠,所以边线由近到远提取

2.近十行先从中间向两边进行边沿搜索,找到边沿,确保近处图像有效

3.之后的行采用边沿跟踪,根据上一行的黑线位置动态地确定本行黑线的搜索范围,搜索黑线,节省时间

4.若连续几行的左右线都找不到,判断为十字弯,进行左右线的延伸,直至再找到有效的边线;若连丢几行的次数较多时,则认为是虚线小s,进行垂直方向的延伸后不必特别处理

5.若左右边线均找到,该行中心线直接为左右边线等权重加权;若某一边线丢失,则根据前面有效行的赛道宽度和另一边线的位置对中心线进行推算

6.推算完中心线后可对中心线进行一定的修正,更符合实际

今年的规则相较于去年增加了虚线小s这种路况,给边线提取增加了难度,所以黑线提取及中心线的推算就需要更多的信息。我们统计了左右边线丢失的行数,左右边线的趋势,左线结束的位置,右线结束的位置,再进行中心线的推算。

大s锐化、中线提取图十字路口锐化、中线提取图

虚线s锐化、中线提取图60cm半径弯中线提取图

调试工具

对于摄像头队而言,对图像的提取的处理无疑是一个很重要的环节,为了更好更准备的提取和处理黑线,我们自己用matlab开发了一个查看摄像头传回来图像的上位机。它能够将摄像头传回来的数据还原到真实的图像,以便于我们看到摄像头工作的情况,及时发现和处理摄像头方面的问题。该上位机的工作界面如下:

附录A 算法源程序

1、图像提取核心部分

for( row = ROW_UPPER ; row >= ROW_LOWER; row--)

{

//找左线

lboundflag[row] = 0;//先将左线是否找到的属性置0

for( col = lrbound; col >= llbound; col--)//从左线搜索右边界向左线搜索左边界开始搜

{

if( Pic_Buffer[row][col] == 255 )//找到白点

{

while(1)//左线需要向右搜索直至找到第一个白点

{

//if(Pic_Buffer[row][col]==255 &&

Pic_Buffer[row][col+1]==0 && Pic_Buffer[row][col+2]==0 && col <= COLUMN_END-2)

if(Pic_Buffer[row][col]==255 && col <= COLUMN_END)

{

col++;

}

else

{

break;

}

}

left = col - 1;

line_left[row]= col - 1;

lboundflag[row] = 1;//代表本行找到左线

lfindcnt++;

llost = 0;//统计连续找不到左线的行数

break;

}

}

//找右线

rboundflag[row] = 0;//先将右线是否找到的属性置0 for(col = rlbound; col<=rrbound; col++)

{

if(Pic_Buffer[row][col] == 255)//找到白点

{

while(1)//右线需要向左搜索直至找到第一个白点

{

if(Pic_Buffer[row][col]==255 && col >= COLUMN_START)

{

col--;

}

else

{

break;

}

}

right = col + 1;

line_right[row] = right;

rboundflag[row] = 1;//代表本行找到左线

rfindcnt++;

rlost = 0;//统计连续找不到左线的行数

break;

}

}

2、图像锐化部分

for(j = 1;j

{

x=distinition[j+1]+2*source[j+1]+Pic_Buffer[i+1][j+1]-

(distinition[j-1]+2*source[j-1]+

Pic_Buffer[i+1][j-1]);

y=distinition[j-1]+2*distinition[j]+distinition[j+1]-

(

相关文档
最新文档