关于门限处理的实现
2008-06-24 13:56
162 查看
一、基本全局门限
如果图像的直方图波峰波谷明显,具有双波峰,如图3所示时,使用该方法效果较佳。这里介绍迭代法,其算法流程为:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/1.bmp)
图1使用迭代法获得门限再做图像分割后,二值化图像如图2所示,分割效果较好。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/z61.jpg)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/61.jpg)
图1 图2
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/qq截图未命名.bmp)
图3
二、基本自适应门限
但如果图像在成像时,由于曝光程度的不均匀,使用全局门限则效果不佳,此时应采用自适应门限方法。一种方法是将图像分成若干个子图像,再对子图像求取基本全局门限;如图4中铸盘内圆右上1/4圆出曝光过度,直接用全局门限分割会导致轮廓不清晰,如图5所示,此时采用自适应门限,将图像均匀划分为20个子图像,效果如图6所示,效果较好,轮廓为损毁。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/z21.jpg)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/21.jpg)
图4 图5
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/tmp.jpg)
图6
迭代法的C代码为:其中函数的参数为OpenCV中的图像结构
如果图像的直方图波峰波谷明显,具有双波峰,如图3所示时,使用该方法效果较佳。这里介绍迭代法,其算法流程为:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/1.bmp)
图1使用迭代法获得门限再做图像分割后,二值化图像如图2所示,分割效果较好。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/z61.jpg)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/61.jpg)
图1 图2
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/qq截图未命名.bmp)
图3
二、基本自适应门限
但如果图像在成像时,由于曝光程度的不均匀,使用全局门限则效果不佳,此时应采用自适应门限方法。一种方法是将图像分成若干个子图像,再对子图像求取基本全局门限;如图4中铸盘内圆右上1/4圆出曝光过度,直接用全局门限分割会导致轮廓不清晰,如图5所示,此时采用自适应门限,将图像均匀划分为20个子图像,效果如图6所示,效果较好,轮廓为损毁。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/z21.jpg)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/21.jpg)
图4 图5
![](http://p.blog.csdn.net/images/p_blog_csdn_net/ciseyjs09/tmp.jpg)
图6
迭代法的C代码为:其中函数的参数为OpenCV中的图像结构
double threshold(IplImage *img) //迭代法的实现,输入参数为待求取阈值的图像或字图像块 { double *block_org=new double[HEIGHT*WIDTH];//HEIGHT,WIDTH为全局变量,由用户自己根据需要定义 double *block=new double[HEIGHT*WIDTH]; CvScalar pixel; int m, n; //阈值初始值选取 for(m=0; m<HEIGHT; m++) for(n=0; n<WIDTH; n++) { pixel=cvGet2D(img, m, n); block_org[m*WIDTH+n]=pixel.val[0]; } double max=0;//灰度图像中的最大值 for(m=0; m<HEIGHT; m++) for(n=0; n<WIDTH; n++) { if(block_org[m*WIDTH+n]>max) max=block_org[m*WIDTH+n]; } double min=255;//灰度图像中的最小值 for(m=0; m<HEIGHT; m++) for(n=0; n<WIDTH; n++) { if(block_org[m*WIDTH+n]<min) min=block_org[m*WIDTH+n]; } double thresh=(max+min)/2;//初始化阈值 //将灰度图中的元素分为两组,小于阈值的放在数组前面,大于的放在数组的尾端 int len=(HEIGHT-1)*(WIDTH-1); int l_offset=-1; int r_offset=len-1; double temp_down=0; double temp_up=0; for(m=0; m<len; m++) { if(block_org[m]<thresh) { l_offset++; block[l_offset]=block_org[m]; } else { block[r_offset]=block_org[m]; r_offset--; } } for(m=0; m<l_offset+1; m++) { temp_down+=block[m]; } temp_down/=(l_offset+1); for(m=r_offset; m<len; m++) { temp_up+=block[m]; } temp_up/=(len-r_offset); double thresh_update=(temp_up+temp_down)/2;//阈值t(k) while(thresh_update!=thresh) { l_offset=-1; r_offset=len-1; temp_down=0; temp_up=0; thresh=thresh_update;//t(k)=t(k+1) for(m=0; m<len; m++) { if(block_org[m]<thresh) { l_offset++; block[l_offset]=block_org[m]; } else { block[r_offset]=block_org[m]; r_offset--; } } for(m=0; m<l_offset+1; m++) { temp_down+=block[m]; } temp_down/=(l_offset+1); for(m=r_offset; m<len; m++) { temp_up+=block[m]; } temp_up/=(len-r_offset); thresh_update=(temp_up+temp_down)/2; }//迭代过程 delete []block_org; delete []block; return thresh_update; }
相关文章推荐
- 《TCP/IP详解》卷2实现中关于组播的处理描述
- Spring关于使用注解@Configuration去配置FormattingConversionServiceFactoryBean来实现自定义格式字符串处理无效的问题(未找到是什么原因造成的)
- inotify-tools + rsync 实现实时文件同步关于exclude参数处理
- 关于js实现的Ajax调用,webService,一般处理程序,aspx
- 关于js实现的Ajax调用,webService,一般处理程序,aspx
- 关于Partitioner(自定义partitioner编程实现数据自定义分区处理)
- 关于实现接收base64图片数据并以图片保存到本地的处理
- 关于基于Event Sourcing模式实现的领域模型如何处理模型重构的问题的思考
- 【前端知识点】前后端关于post请求中,对body的不同数据格式的解决处理方案实现
- 探索关于,Android工程 混淆 proguard. 自定义混淆接口的实现类的内部类混淆处理
- 关于js实现的Ajax调用,webService,一般处理程序,aspx
- 8、关于增强版的GenericityJDBCUtils的实现,可灵活的处理select的返回结果
- 关于viewpager 里嵌套 listview 同时实现翻页功能的“java.lang.IllegalStateException: The specified child..."异常处理
- 安卓中关于事件处理方式以Button为例实现点击事件监听
- 实现Tree控件中关于Checkbox按钮点击处理
- 关于awt 不实用第三方类库 实现 图片旋转,变形等处理
- HTTP POST请求在Volly工厂关于需要鉴权的请求部分代码包含了处理图片实现ImageLoder法
- linux关于tcp协议ack的实现--发送端对ack的处理
- 关于在web上实现各种图象处理效果
- 关于圆角的实现以及鼠标移入显示二级菜单的兼容处理!