注册 登录
查看: 6777|回复: 13

[其他] 【山外 线性 CCD】超简单的二值化算法

[复制链接]
发表于 2013-12-6 15:23:26 | 显示全部楼层 |阅读模式
线性CCD的 二值化算法,是非常的简单,大家直接看图:



文档说明下载地址:
http://pan.baidu.com/s/14ApEY

代码已经集成到相应的库中,可搜索线性CCD例程即可:K60在:LCD_线性CCD 例程中。
【山外K60】一天攻破K60 代码 V5.1 - 智能车资料区 - 山外论坛 http://vcan123.com/forum.php?mod ... id=6193&ctid=26

KL26在:33.线性CCD_LCD显示_二值化处理  例程中。
【山外KL26】一天攻破KL26 代码 V5.2 - 智能车资料区 - 山外论坛
http://vcan123.com/forum.php?mod ... id=6436&ctid=26


本帖子中包含更多资源

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

x

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2013-12-6 23:19:12 | 显示全部楼层
很不错啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-15 12:50:40 | 显示全部楼层
ewvel 发表于 2013-12-15 12:36
为什么会这样呢

为什么 不会 这样呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-15 12:50:42 | 显示全部楼层
ewvel 发表于 2013-12-15 12:36
为什么会这样呢

为什么 不会 这样呢?
回复 支持 反对

使用道具 举报

发表于 2014-2-7 14:10:53 | 显示全部楼层
我想问一下,线性CCD和鹰眼有啥区别,这两个分别是做什么的?
回复 支持 反对

使用道具 举报

发表于 2014-3-5 18:09:04 | 显示全部楼层
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-6-28 21:04:24 | 显示全部楼层
代码换到哪里了?
回复 支持 反对

使用道具 举报

发表于 2014-9-25 21:04:55 | 显示全部楼层
代码连接失效
回复 支持 反对

使用道具 举报

发表于 2014-12-10 18:49:36 | 显示全部楼层
留个脚印!顶上去!
回复 支持 反对

使用道具 举报

发表于 2015-3-25 18:31:44 | 显示全部楼层
山外哥,我只想要在上位机上显示,请问该如何改呢?如果好使,那么上位机上面应该显示什么样的画面呢?
回复 支持 反对

使用道具 举报

发表于 2015-3-28 16:41:16 | 显示全部楼层
山外哥,我想问一下这句语句是什么意思?
    memset(bin,0xFF,len);  //全部当作
看了半天没有搞懂,请尽快回复我
回复 支持 反对

使用道具 举报

发表于 2015-3-28 17:08:00 | 显示全部楼层
山外哥,
void bin(uint8 * bin,uint8 * img,uint8 * difimg,uint16 len,uint8 maxdif)
{
    uint16 tmplen = 128;
    uint16 CCD_flag=len;
    uint8  thldnum = 0;        //阈值次数
    uint8  thresholdimg;
    uint8  tmpnum;

    memset(bin,0xFF,len);  //全部当作

    while(tmplen--)
    {
        if((tmplen == 0)|| (tmplen > len))
        {
            return;
        }

        if(difimg[tmplen] > diff_threshold)                  //找到 差分阈值
        {
          //  thldnum++;

            //寻找最大差分阈值
            while(tmplen--)
            {
                if((tmplen == 0)|| (tmplen > len))
                {
                    return;
                }

                if(difimg[tmplen] < difimg[tmplen+1] )    //tmplen+1 为最大阈值
                {      
                     if((img[tmplen] < img[tmplen+1]) ||(img[tmplen+1] < img[tmplen+2]) )
                       
                           thresholdimg = (img[tmplen+1] + img[tmplen+2])/2;
                     
                     else if((img[tmplen] > img[tmplen+1]) ||(img[tmplen+1] > img[tmplen+2]) )  // 前面白色 ,后面黑色
                          
                            thresholdimg = (img[tmplen+1] + img[tmplen+2])/2;           
                     break;
                }
             }
          }
            //tmplen + 1 是 差分最大值 ,切换到 颜色扫描
//            if((img[tmplen] <= img[tmplen+1]) ||(img[tmplen+1] <= img[tmplen+2]) )  // 前面 黑色 ,后面 白色
//            {
//                //选择 差分值最大值的前一个 作为 阈值
//                thresholdimg = (img[tmplen+1] + img[tmplen+2])/2;
                 while(img[tmplen] >= thresholdimg)
                {
//                    bin[tmplen] = 0;                //黑色
                 //     printf(" ");
                  UART_SendData(UART0,' ');
                    tmplen--;
                    if(tmplen == 0)      //结尾了 ,直接退出
                    {
                        if(img[tmplen] <= thresholdimg)
                        {
                          //   bin[tmplen] = 0;                //黑色
                         //   printf(" ");
                           UART_SendData(UART0,' ');
                        }
                        break ;
                    }
                    else if (tmplen > len)
                    {
                         break;
                    }
                }

                while(img[tmplen] <= thresholdimg)
                {
//                    bin[tmplen] = 0;                //黑色
                  //    printf("1");
                   UART_SendData(UART0,'1');
                    tmplen--;
                    if(tmplen == 0)      //结尾了 ,直接退出
                    {
                        if(img[tmplen] <= thresholdimg)
                        {
                          //   bin[tmplen] = 0;                //黑色
                          //  printf("1");
                           UART_SendData(UART0,'1');
                        }
                        break ;
                    }
                    else if (tmplen > len)
                    {
                         break;
                    }
                }
            //    tmplen -= safe_isolation;
//                if((tmplen == 0)|| (tmplen > len))
//                {
//                    break;
//                }

//                //等待差分值降低
//                while(difimg[tmplen] > diff_threshold)
//                {
//                    tmplen--;
//                    if((tmplen == 0)|| (tmplen > len))
//                    {
//                        break;
//                    }
//                }
        //      }

                tmplen -= safe_isolation;
                if((tmplen == 0)|| (tmplen > len))
                {
                    break;
                }



       }

    printf("\r\n");

为什么我的CCD总有几行分辨不出来黑线啊!!这样改二值化算法对吗?
回复 支持 反对

使用道具 举报

发表于 2016-4-1 11:33:57 | 显示全部楼层
非常棒
回复 支持 反对

使用道具 举报

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

本版积分规则

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