cvAdaptiveThreshold和cvThreshold的一些讨论
2013-05-27 20:12
232 查看
在http://www.opencv.org.cn/forum/viewtopic.php?f=10&t=3355 看到了一篇类似的帖子,正好看到这里,简单总结一下:
固定阈值化函数cvThreshold,其实它也有一种自适应阈值方法,那就是OSTU(大津法)!!只需要设定参数thresh_type的值为CV_THRESH_OTSU即可。
Otsu适用于直方图为双峰的图像,但是不均匀的照明等会导致不满足双峰条件,此时应采用动态阈值分割法,基本原理如下:局部区域中感兴趣的物体经常要比背景更亮或更暗,局部背景可以通过平滑处理估计,将图像与其局部背景进行比较。
再看看 cvAdaptiveThreshold用法:
cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,
int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),
int threshold_type CV_DEFAULT(CV_THRESH_BINARY),
int block_size CV_DEFAULT(3),
double param1 CV_DEFAULT(5));
分析参数blockSize。这个参数相当重要,
1.要取奇数,如果取偶数运行后就会报错!!原因看源码,发现要做一个掩模,所以参数必须是奇数。OpenCV也做了一个检测,在函数adaptiveThreshold一开始就有CV_Assert(
blockSize % 2 == 1 && blockSize > 1 )。
2.cvAdaptiveThreshold既可以做边缘提取,也可以实现二值化,是由你所选择的邻域所确定的,如果你所选择的邻域非常小(比如3×3),那么很显然阈值的“自适应程度”就非常高,这在结果图像中就表现为边缘检测的效果。如果邻域选择的比较大(比如31×31),那么阈值的“自适应程度”就比较低,这在结果图像中就表现为二值化的效果。
3.一般情况下,滤波器宽度应该大于被识别物体的宽度。block_size太小,无法代表背景,太大的话会影响到临近物体。
选定合适的block_size后,我们就可以选定一个更大的阈值param1,更好的抑制噪声
4.自适应二值化对于光照不均的文字,条码等,效果很好。
固定阈值化函数cvThreshold,其实它也有一种自适应阈值方法,那就是OSTU(大津法)!!只需要设定参数thresh_type的值为CV_THRESH_OTSU即可。
Otsu适用于直方图为双峰的图像,但是不均匀的照明等会导致不满足双峰条件,此时应采用动态阈值分割法,基本原理如下:局部区域中感兴趣的物体经常要比背景更亮或更暗,局部背景可以通过平滑处理估计,将图像与其局部背景进行比较。
再看看 cvAdaptiveThreshold用法:
cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,
int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),
int threshold_type CV_DEFAULT(CV_THRESH_BINARY),
int block_size CV_DEFAULT(3),
double param1 CV_DEFAULT(5));
分析参数blockSize。这个参数相当重要,
1.要取奇数,如果取偶数运行后就会报错!!原因看源码,发现要做一个掩模,所以参数必须是奇数。OpenCV也做了一个检测,在函数adaptiveThreshold一开始就有CV_Assert(
blockSize % 2 == 1 && blockSize > 1 )。
2.cvAdaptiveThreshold既可以做边缘提取,也可以实现二值化,是由你所选择的邻域所确定的,如果你所选择的邻域非常小(比如3×3),那么很显然阈值的“自适应程度”就非常高,这在结果图像中就表现为边缘检测的效果。如果邻域选择的比较大(比如31×31),那么阈值的“自适应程度”就比较低,这在结果图像中就表现为二值化的效果。
3.一般情况下,滤波器宽度应该大于被识别物体的宽度。block_size太小,无法代表背景,太大的话会影响到临近物体。
选定合适的block_size后,我们就可以选定一个更大的阈值param1,更好的抑制噪声
4.自适应二值化对于光照不均的文字,条码等,效果很好。
相关文章推荐
- Learning OpenCV cvAdaptiveThreshold 自适应阈值
- cvAdaptiveThreshold用法(opencv参考手册)
- cvAdaptiveThreshold获取了物体的边缘,而非二值化
- 自适应阈值 cvAdaptiveThreshold
- Learning OpenCV cvAdaptiveThreshold 自适应阈值
- cvAdaptiveThreshold的探讨
- cvAdaptiveThreshold函数能解决图像分割中的什么问题
- 关于二值化函数cvAdaptiveThreshold和cvThreshold的一些发现
- 【OpenCV3】阈值化操作——cv::threshold()与cv::adaptiveThreshold()详解
- 关于交换两个值的一些讨论
- 4.8、一些杂散但值得讨论的问题
- 一个讨论引发关于js中函数声明,函数表达式,形参与变量声明赋值引发的一些事(http://www.cnblogs.com/zhouyongtao/archive/2012/11/22/2783089)
- OpenCV 阈值化操作cvThreshold 和 自适应阈值cvAdaptiveThreshold操作
- 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(1)
- 关于Android中传递数据的一些讨论
- 大型应用系统的一些讨论 -- (by 曹政)
- 关于LDPC的一些讨论
- 使用selenium-on-rails的一些讨论 3]assertXpathCount的使用
- JAVA月薪两万的一些讨论
- 对于程序员职业生涯的一些讨论