智能车制作

标题: 黑线提取程序 [打印本页]

作者: zyl12580    时间: 2011-4-29 18:12
标题: 黑线提取程序
[attach]7252[/attach]这是摄像头采集的图像发送到串口的显示
哪位大侠指点下我   黑线提取程序要怎么弄   下面这程序死活都不行   还望指点迷津
void GetBlackline()
{
   char i=0,j=0,leftj,rightj;   
   int temp=0;  
   unsigned char left=0,right=0,left_flag=0,right_flag=0;
   Line_Center[ROW_VALUE-1]=Line_Center[0];//
   /////图像前部分用边缘检测法
   for(i=37;i>=1;i--) //i>=0ROW_VALUE-1ROW_MID
   {   
     left=0; //左右跳变清零
     right=0;
     for(j=5;j<=66;j++) //两边搜索 最边界干扰略去
       {
        if(Image[j]>Image[j+1]) //)&&(Image[j]==Image[j-1])
          {
           leftj=j;
           left=leftj;       //从左到右第一个由白跳变为黑的点
           left_flag++;    //记录黑白跳变个数
          }
        if(Image[j]<Image[j+1])
          {
           rightj=j;
           right=rightj;//COLUMN_VALUE-j;//从右到左第一个由白跳变为黑的点
           right_flag++;      // 记录黑白跳变个数
          }
       }               //////////求黑线的中心      
     if((left_flag>=1) && (right_flag>=1))     
     {
       left_flag=0;  //清零,这是必须的
       right_flag=0;   
       if((right-left)>2&&(right-left)<10)   
     {  
       Line_Center=(right+left+1)/2; //过滤过宽过细的黑线                           
      _asm(nop);
      }
    else   /////////////////过宽过细黑线进行插值
     {      
      left_flag=0;  //清零,这是必须的
      right_flag=0;
      if(i>=ROW_VALUE-3)
       {
         Line_Center[i-1]=Line_Center;
       }
      else
       {
         temp=2*Line_Center[i+1]-Line_Center[i+2];
         if(temp>70)                    
           temp=70;
         if(temp<0)                 
           temp=0;  
         Line_Center=temp;
       }
     }
   }
}    /////图像后部分用边缘检测法
作者: dongyunlong    时间: 2012-2-16 16:55
看看
作者: dongyunlong    时间: 2012-2-16 16:58
请问if(Image[j]>Image[j+1])和  if(Image[j]<Image[j+1])
这个是啥意思?
作者: 仙帝将王    时间: 2012-3-7 22:02
看看 哈哈哈

作者: 仙帝将王    时间: 2012-3-7 22:03
笑纳了
作者: xufang    时间: 2012-3-11 21:21
,光电的路过:lol:lol:lol:lol:lol
作者: nc2367334102    时间: 2012-3-26 17:23
...........
作者: 孤臣黄帝    时间: 2012-4-25 19:36
看懂了

作者: skt3150103020    时间: 2012-5-5 10:39
写的好有特点啊、、、、
作者: 我爱学习    时间: 2012-6-1 15:19
dongyunlong 发表于 2012-2-16 16:58
请问if(Image[j]>Image[j+1])和  if(Image[j]

应该是黑线边缘的吧   作为跳变捕捉条件
作者: 十七岁不哭    时间: 2012-6-6 17:11
黑线提取流程
黑线的提取我们参考了去年上海大学的黑线提取方法,在前十行采用边缘提取方法,十行以后的利用跟踪边缘提取方法。实验测得这种方法只要细节掌握好能够很好的提取出黑线。下面是具体的黑线提取方法。如图5.4

图5.4黑线提取流程图
1)        首先准备提取黑线
2)        用检测跳变的方法提取出前十行中每行的两个跳变点,然后求平均值就可以得到前十行的黑线位置。当搜索到多个跳变的时候,我们根据上一行跳变的位置确定出最优的那个跳变的位置作为本行的黑线跳变位置。当前十行都没有找到黑线的时候,我们就认为这幅图像的黑线丢失了,然后依据前一幅图像黑线的位置,给这幅图像的整体赋极值。当只有十行中的几行丢失时,我们就继续搜索黑线直道找完前十行位置。
3)        当前十行黑线存在时,我们利用前十行黑线的位置确定第十一行黑线的位置,然后在这个区间搜索黑线,依次类推用前一行黑线的位置确定后一行黑线的位置,当本行黑线没有找到时,此行黑线位置保持上行的值,下行搜索的位置相应的扩大。有连续3行黑线搜索不到十我们就认为黑线丢失,退出搜索。这样既可以去除干扰,还可以大大的提高算法的效率。
值得注意的是:第十行和前一行第九行这个接口位置边缘确定非常重要,要考虑的非常全面,不然有可能就只能搜索到前十行的黑线,后面的黑线因为边缘的问题所有不到。
4)搜索完成后推出搜索。对搜索到的黑线进行中值滤波和限幅滤波。
只要搜索范围合理,这种算法有很强的抗干扰能力,并且可以滤除十字交叉和三角黑区的干扰。

作者: 广陵F3    时间: 2012-7-1 01:03

作者: dongyunlong    时间: 2012-8-9 22:56
十七岁不哭 发表于 2012-6-6 17:11
黑线提取流程
黑线的提取我们参考了去年上海大学的黑线提取方法,在前十行采用边缘提取方法,十行以后的利 ...

呵呵 比赛完了 笑纳一次再


作者: dongyunlong    时间: 2012-8-11 10:49
十七岁不哭 发表于 2012-6-6 17:11
黑线提取流程
黑线的提取我们参考了去年上海大学的黑线提取方法,在前十行采用边缘提取方法,十行以后的利 ...

“对搜索到的黑线进行中值滤波和限幅滤波”
黑线都找到了,还怎么进行中值滤波呢?限幅滤波我可以理解为在一定范围(或条件)内的黑线算是合格的黑线,这样对吗?


作者: 早安,徐威    时间: 2012-12-8 17:15
我爱学习 发表于 2012-6-1 15:19
应该是黑线边缘的吧   作为跳变捕捉条件

亲 我想问下 (right-left)是扫到中间的点数么 还是神马?  

作者: Xiha_Y    时间: 2012-12-13 17:08

作者: 象牙塔    时间: 2012-12-13 19:57

作者: mxj1005071012    时间: 2013-1-18 12:01
泪求啊
作者: 林的0922    时间: 2013-3-21 19:12

作者: 龙少3    时间: 2013-5-20 20:53
不错,谢了




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2