智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 7140|回复: 19
打印 上一主题 下一主题

[摄像头] 黑线提取程序

  [复制链接]

4

主题

31

帖子

0

精华

高级会员

Rank: 4

积分
656
威望
407
贡献
75
兑换币
0
注册时间
2010-9-30
在线时间
87 小时
跳转到指定楼层
#
发表于 2011-4-29 18:12:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1贡献
这是摄像头采集的图像发送到串口的显示
哪位大侠指点下我   黑线提取程序要怎么弄   下面这程序死活都不行   还望指点迷津
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;
       }
     }
   }
}    /////图像后部分用边缘检测法

10

主题

151

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1678
威望
837
贡献
545
兑换币
496
注册时间
2012-11-22
在线时间
148 小时
19#
发表于 2013-5-20 20:53:31 | 只看该作者
不错,谢了
回复

使用道具 举报

20

主题

308

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2157
QQ
威望
1132
贡献
547
兑换币
695
注册时间
2012-11-27
在线时间
239 小时
18#
发表于 2013-3-21 19:12:02 | 只看该作者
回复

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
17#
发表于 2013-1-18 12:01:48 | 只看该作者
泪求啊
回复

使用道具 举报

26

主题

431

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7748

论坛元老奖章热心会员奖章推广达人奖章论坛骨干奖章优秀会员奖章资源大师奖章活跃会员奖章

QQ
威望
1972
贡献
5192
兑换币
662
注册时间
2011-3-16
在线时间
292 小时
16#
发表于 2012-12-13 19:57:35 | 只看该作者
回复

使用道具 举报

12

主题

82

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1652
威望
434
贡献
1092
兑换币
103
注册时间
2012-9-20
在线时间
63 小时
15#
发表于 2012-12-13 17:08:54 | 只看该作者
回复

使用道具 举报

11

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
758
威望
396
贡献
142
兑换币
202
注册时间
2012-11-14
在线时间
110 小时
14#
发表于 2012-12-8 17:15:33 | 只看该作者
我爱学习 发表于 2012-6-1 15:19
应该是黑线边缘的吧   作为跳变捕捉条件

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

使用道具 举报

45

主题

897

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4570

热心会员奖章推广达人奖章优秀会员奖章活跃会员奖章

QQ
威望
2734
贡献
1368
兑换币
803
注册时间
2011-11-30
在线时间
234 小时
13#
发表于 2012-8-11 10:49:01 | 只看该作者
十七岁不哭 发表于 2012-6-6 17:11
黑线提取流程
黑线的提取我们参考了去年上海大学的黑线提取方法,在前十行采用边缘提取方法,十行以后的利 ...

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

回复

使用道具 举报

45

主题

897

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4570

热心会员奖章推广达人奖章优秀会员奖章活跃会员奖章

QQ
威望
2734
贡献
1368
兑换币
803
注册时间
2011-11-30
在线时间
234 小时
12#
发表于 2012-8-9 22:56:14 | 只看该作者
十七岁不哭 发表于 2012-6-6 17:11
黑线提取流程
黑线的提取我们参考了去年上海大学的黑线提取方法,在前十行采用边缘提取方法,十行以后的利 ...

呵呵 比赛完了 笑纳一次再

回复

使用道具 举报

1

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2410
威望
1188
贡献
554
兑换币
173
注册时间
2012-1-14
在线时间
335 小时
11#
发表于 2012-7-1 01:03:52 | 只看该作者
回复

使用道具 举报

7

主题

354

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3248

优秀会员奖章活跃会员奖章在线王奖章

威望
1520
贡献
910
兑换币
666
注册时间
2012-4-28
在线时间
409 小时
10#
发表于 2012-6-6 17:11:00 | 只看该作者
黑线提取流程
黑线的提取我们参考了去年上海大学的黑线提取方法,在前十行采用边缘提取方法,十行以后的利用跟踪边缘提取方法。实验测得这种方法只要细节掌握好能够很好的提取出黑线。下面是具体的黑线提取方法。如图5.4

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-14 07:48 , Processed in 0.164898 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表