注册会员
- 积分
- 144
- 威望
- 70
- 贡献
- 48
- 兑换币
- 40
- 注册时间
- 2016-1-30
- 在线时间
- 13 小时
- 毕业学校
- 浙江大学
|
2#
楼主 |
发表于 2016-3-1 17:10:41
|
只看该作者
自己用的是野火的差分二值化算法,其实感觉自己可能对他的核心思想不太了解,
- /*!
- * [url=home.php?mod=space&uid=81675]@BRIEF[/url] 简单的一个二值化 算法(不稳定,仅测试)
- * @since v5.0
- bin((uint8 *)&CCD_BUFF[2*TSL1401_MAX+0],(uint8 *)&CCD_BUFF[0],(uint8 *)&CCD_BUFF[TSL1401_MAX+0],TSL1401_SIZE,max[0]);
- */
- // diff_threshold 差分阈值 ,不同的角度,不同的环境而有所不同
- //可根据 maxdif 最大差分值来配置,或者直接固定阈值
- #define diff_threshold ((maxdif> 12) ? ((maxdif*80)/100) :10) // 差分阈值
- //#define diff_threshold 10
- #define safe_isolation 3
- void bin(uint8 *bin,uint8 * img,uint8 * difimg,uint16 len,uint8 maxdif)
- {
- uint16 tmplen = 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] ) //如果此大于差分阈值的量递减,跳出循环,否则找更大的差分量
- {
- 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; //黑色
- tmplen--;
- if(tmplen == 0) //结尾了 ,直接退出
- {
- if(img[tmplen] <= thresholdimg)
- {
- bin[tmplen] = 0; //黑色
- }
- return ;
- }
- else if (tmplen > len)
- {
- return;
- }
- }
- //while之后扫描到下一个 高于 此阈值 (比此点更白) 判断为黑线结束
- tmplen -= safe_isolation;
- if((tmplen == 0)|| (tmplen > len))
- {
- return;
- }
- //等待差分值降低
- while(difimg[tmplen] > diff_threshold)
- {
- tmplen--;
- if((tmplen == 0)|| (tmplen > len))
- {
- return;
- }
- }
- }
- else
- {
- //否则如果前白 后 黑
- if(thldnum == 1)
- {
- //后面的 内容都是 黑色的
- tmpnum = tmplen + 1;
- while(tmpnum < len)
- {
- bin[tmpnum] = 0; //黑色
- tmpnum ++;
- }
- }
- }
- }
- }
- }
复制代码 把卫生纸放远了,然后上面加个黑杆,识别出来的效果很差
|
|