智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 971|回复: 4
打印 上一主题 下一主题

ccd采样值变化很平滑(黑到白的过渡段很长)导致差分值很小,是因为焦距的原因吗?

[复制链接]

2

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
144
威望
70
贡献
48
兑换币
40
注册时间
2016-1-30
在线时间
13 小时
毕业学校
浙江大学
跳转到指定楼层
1#
发表于 2016-3-1 17:04:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

首先图像是这样的,黑白过渡段很明显,拿了卷卫生纸在CCD面前晃得到的。然后在卫生纸上面加了根黑杆,也是很模糊。
不知道大家看不看得清图像上的红点,这样导致差分值从过渡段就很大,感觉会影响程序判断。怀疑是焦距的问题,又把卫生纸拿远了,图像还是很奇怪。

请问下大家这是因为CCD焦距的原因吗?如果是,是拧CCD的镜头来调节还是拧螺丝? 关于CCD的调试真是有些迷茫。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

2

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
144
威望
70
贡献
48
兑换币
40
注册时间
2016-1-30
在线时间
13 小时
毕业学校
浙江大学
2#
 楼主| 发表于 2016-3-1 17:10:41 | 只看该作者
自己用的是野火的差分二值化算法,其实感觉自己可能对他的核心思想不太了解,
  1. /*!
  2. *  [url=home.php?mod=space&uid=81675]@BRIEF[/url]      简单的一个二值化 算法(不稳定,仅测试)
  3. *  @since      v5.0
  4. bin((uint8 *)&CCD_BUFF[2*TSL1401_MAX+0],(uint8 *)&CCD_BUFF[0],(uint8 *)&CCD_BUFF[TSL1401_MAX+0],TSL1401_SIZE,max[0]);
  5. */
  6. // diff_threshold 差分阈值 ,不同的角度,不同的环境而有所不同
  7. //可根据 maxdif 最大差分值来配置,或者直接固定阈值
  8. #define diff_threshold    ((maxdif> 12) ? ((maxdif*80)/100) :10)     // 差分阈值
  9. //#define diff_threshold    10
  10. #define safe_isolation    3
  11. void bin(uint8 *bin,uint8 * img,uint8 * difimg,uint16 len,uint8 maxdif)
  12. {
  13.     uint16 tmplen = len;
  14.     uint8  thldnum = 0;        //阈值次数
  15.     uint8  thresholdimg;
  16.     uint8  tmpnum;
  17.     memset(bin,0xFF,len);  //全部当作白色
  18.     while(tmplen--)
  19.     {
  20.         if((tmplen == 0)|| (tmplen > len))
  21.         {
  22.             return;
  23.         }
  24.         if(difimg[tmplen] > diff_threshold)                  //找到 大于差分阈值的量 (黑线附近)
  25.         {
  26.             thldnum++;
  27.             //寻找最大差分阈值
  28.             while(tmplen--)
  29.             {
  30.                 if((tmplen == 0)|| (tmplen > len))
  31.                 {
  32.                     return;
  33.                 }
  34.                 if(difimg[tmplen] < difimg[tmplen+1] )    //如果此大于差分阈值的量递减,跳出循环,否则找更大的差分量
  35.                 {
  36.                      break;
  37.                 }
  38.             }
  39.             //tmplen + 1 是 差分最大值 ,切换到 颜色扫描
  40.             if((img[tmplen] <= img[tmplen+1]) ||(img[tmplen+1] <= img[tmplen+2]) )  //从右至左递增。 前面 黑色 ,后面 白色
  41.             {
  42.                 //选择 差分值最大值的前一个 作为 阈值
  43.                 thresholdimg = (img[tmplen+1] + img[tmplen+2])/2;
  44.                
  45.                 while(img[tmplen] <= thresholdimg)
  46.                 {
  47.                     bin[tmplen] = 0;                //黑色
  48.                     tmplen--;
  49.                     if(tmplen == 0)      //结尾了 ,直接退出
  50.                     {
  51.                         if(img[tmplen] <= thresholdimg)
  52.                         {
  53.                              bin[tmplen] = 0;                //黑色
  54.                         }
  55.                         return ;
  56.                     }
  57.                     else if (tmplen > len)
  58.                     {
  59.                          return;
  60.                     }
  61.                 }

  62. //while之后扫描到下一个 高于 此阈值 (比此点更白) 判断为黑线结束
  63.                 tmplen -= safe_isolation;
  64.                 if((tmplen == 0)|| (tmplen > len))
  65.                 {
  66.                     return;
  67.                 }
  68.                 //等待差分值降低
  69.                 while(difimg[tmplen] > diff_threshold)
  70.                 {
  71.                     tmplen--;
  72.                     if((tmplen == 0)|| (tmplen > len))
  73.                     {
  74.                         return;
  75.                     }
  76.                 }
  77.             }
  78.             else
  79.             {
  80.                 //否则如果前白 后 黑
  81.                 if(thldnum == 1)
  82.                 {
  83.                     //后面的 内容都是 黑色的
  84.                     tmpnum  = tmplen + 1;
  85.                     while(tmpnum < len)
  86.                     {
  87.                         bin[tmpnum] = 0;                //黑色
  88.                         tmpnum ++;
  89.                     }
  90.                 }
  91.             }
  92.         }
  93.     }
  94. }
复制代码
把卫生纸放远了,然后上面加个黑杆,识别出来的效果很差
回复 支持 反对

使用道具 举报

7

主题

365

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7770
威望
3761
贡献
2379
兑换币
2406
注册时间
2013-4-19
在线时间
815 小时
3#
发表于 2016-3-1 17:50:29 | 只看该作者
卫生纸(卫生巾)
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
144
威望
70
贡献
48
兑换币
40
注册时间
2016-1-30
在线时间
13 小时
毕业学校
浙江大学
4#
 楼主| 发表于 2016-3-1 20:27:50 | 只看该作者
1325536866 发表于 2016-3-1 17:50
卫生纸(卫生巾)

。。。
寝室里调的,没找到像样的东西模拟


回复 支持 反对

使用道具 举报

18

主题

301

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4946
威望
2641
贡献
1439
兑换币
1337
注册时间
2014-8-31
在线时间
433 小时
毕业学校
河海大学
5#
发表于 2016-3-2 09:53:03 | 只看该作者
蓝宙的CCD?拧镜头调焦距,,拧螺丝调运放。。。
镜头和CCD是匹配的吗
记得蓝宙的库里有个参数值可以调整图像的平滑程度。。野火的库就不清楚了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 13:37 , Processed in 0.188399 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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