智能车制作

标题: ccd采样值变化很平滑(黑到白的过渡段很长)导致差分值很小,是因为焦距的原因吗? [打印本页]

作者: qq250580245    时间: 2016-3-1 17:04
标题: ccd采样值变化很平滑(黑到白的过渡段很长)导致差分值很小,是因为焦距的原因吗?
[attach]84077[/attach]
首先图像是这样的,黑白过渡段很明显,拿了卷卫生纸在CCD面前晃得到的。然后在卫生纸上面加了根黑杆,也是很模糊。
不知道大家看不看得清图像上的红点,这样导致差分值从过渡段就很大,感觉会影响程序判断。怀疑是焦距的问题,又把卫生纸拿远了,图像还是很奇怪。

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

作者: qq250580245    时间: 2016-3-1 17:10
自己用的是野火的差分二值化算法,其实感觉自己可能对他的核心思想不太了解,
  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. }
复制代码
把卫生纸放远了,然后上面加个黑杆,识别出来的效果很差

作者: 1325536866    时间: 2016-3-1 17:50
卫生纸(卫生巾)
作者: qq250580245    时间: 2016-3-1 20:27
1325536866 发表于 2016-3-1 17:50
卫生纸(卫生巾)

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



作者: zty562694497    时间: 2016-3-2 09:53
蓝宙的CCD?拧镜头调焦距,,拧螺丝调运放。。。
镜头和CCD是匹配的吗
记得蓝宙的库里有个参数值可以调整图像的平滑程度。。野火的库就不清楚了。




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