cvAdaptiveThreshold函数!!
来源:互联网 发布:win32api还有用吗 知乎 编辑:程序博客网 时间:2024/05/16 19:27
全篇转帖于一哥们的百度空间,在此谢过。
cvAdaptiveThreshold 的陷阱 -- 转帖
2008-06-23 21:52
本文引自 http://www.opencv.org.cn/forum/viewtopic.php?t=3355 感谢作者 关于二值化函数cvAdaptiveThreshold和cvThreshold的一些发现,望大家共同探讨今天根据参考手册的指导使用函数cvAdaptiveThreshold时,发现所得的结果很奇怪,它只获取了物体的边缘,而非二值化。于是我怀着好奇的心情,看了它的源码,果不其然,它实在是个边缘提取函数。
重点在下面3处地方: 第27-28行,调用函数cvSmooth函数对src图像平滑,并将结果存储在mean矩阵中; 第32-37行,根据type和delta值为“映射数组”tab赋值; 第39-47行,将src与mean矩阵对应元素相减,所得差异值再加上偏移值255作为映射表tab的索引获取输出dst矩阵对应元素的值。 在做进一步讨论前先来看两张图片: 首先来看mask1,这是利用一个3×3的掩模从源图像中取出的子矩阵,设白色部分的值为255,黑色部分为0,此时中心点(绿圈标明)像素值为255,则对此掩模使用CV_BLUR或是CV_GAUSSIAN平滑方法求得的新中心点像素值,必定比其原来像素值低( < 255 )。 再来看mask2,这是中心点像素值为0,通过平滑方法求得的新中心点像素值,必定比原来像素值高( > 0 )。 此算法也正是利用这样的差异值(原像素值-平滑后像素值,即最后部分代码中的“src-mean”),来定位边缘的位置。 最后就是tab数组和参数idelta(param1)的意义: tab数组实际上是一个映射表,它指明了当差异值小于<对应于参数CV_THRESH_BINARY>或大于<对应于参数CV_THRESH_BINARY>-idelta时输出像素值为0,大于(小于)-idelta时输出像素值为255。由于差异值可以是负值,而数组的下标却不行,所以作者将tab数组的下标偏移了+255,即当差异值为-10时,对应的tab数组下标为-10+255=245;差异为+10时,下标为265。 至于参数idelta(param1),如果取得比较小,则所提取边缘就粗,取得大,边缘就细。另外如果取的是正值,那么提取的将是物体的内边缘,即所有边缘上的点都处于物体内部,并且平滑区域的像素值为255,边缘区域为0;如果取的是负值,提取的就是外边缘,此边缘位于物体外部,平滑区域的像素值为0,边缘区域为255。另外阈值类型CV_THRESH_BINARY / CV_THRESH_BINARY_INV选取的不同也会影响平滑区域和边缘区域的像素值,前面的陈述假定的都是CV_THRESH_BINARY类型。 有趣的是,我也留意了一下资料介绍的固定阈值化函数cvThreshold,其实它也有一种自适应阈值方法,那就是OSTU(大津法)!!只需要设定参数thresh_type的值为CV_THRESH_OTSU即可。 我使用的是1.0版的OpenCV,不知其他版本的情况如何,以上描述若有任何错误或遗漏,希望大家指正,同时也欢迎大家讨论!谢谢! 以下是我对cvAdaptiveThreshold测试的图片: 测试所用部分参数值: adaptive_method=CV_ADATIVE_THRESH_MEAN_C,threshold_type=CV_THRESH_BINARY,maxValue=255, block_size=7,param1=±7 |
- cvAdaptiveThreshold函数!!
- Opencv cvAdaptiveThreshold 函数
- 阈值化 OTSU算法 cvAdaptiveThreshold 函数
- 关于二值化函数cvAdaptiveThreshold的一些发现
- opencv二值化函数cvAdaptiveThreshold和cvThreshold
- 关于二值化函数cvAdaptiveThreshold和cvThreshold的一些发现
- cvAdaptiveThreshold函数能解决图像分割中的什么问题
- 关于二值化函数cvAdaptiveThreshold和cvThreshold以及OSTU
- 关于二值化函数cvAdaptiveThreshold和cvThreshold的一些发现
- cvAdaptiveThreshold源代码很奇怪
- cvAdaptiveThreshold的探讨
- 自适应阈值 cvAdaptiveThreshold
- cvAdaptiveThreshold源代码的解析
- opencv cvThreshold() cvAdaptiveThreshold()
- 图像形态学 - 自适应阈值(cvAdaptiveThreshold)
- cvAdaptiveThreshold用法(opencv参考手册)
- Learning OpenCV cvAdaptiveThreshold 自适应阈值
- MAtlib 的 cvAdaptiveThreshold 局部二值化
- 转好文章一篇
- ASP一个小问题
- css library/framework
- 很老很老的智力题-不过保证还有人没见做过-保存一下
- 转5句话
- cvAdaptiveThreshold函数!!
- eclipse不能自动编译
- 转9种糟糕状态
- apache 常见问题
- log4net
- 中国的未来预见
- spring 学习(1.4) 入门基础- AOP教程
- DataGridView分页功能的实现收藏
- 图灵三周年盛大庆典!