关于二值化函数cvAdaptiveThreshold的一些发现

本文转自  http://www.xuebuyuan.com/1932219.html

 

 

函数cvAdaptiveThreshold的确可以将灰度图像二值化,但它的主要功能应该是边缘提取,并且参数param1主要是用来控制边缘的类型和粗细的,这些在软件自带的参考手册中均未提及。

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,更好的抑制噪声

 

1)自适应二值化计算像素的邻域的平均灰度,来决定二值化的值。

2)如果整个区域几乎是一样灰度的,则无法给出合适的结果了。
3)之所以看起来像边缘检测,是因为窗尺寸设置的小,可以改大一点试一试。
cvAdaptiveThreshold( src, dst, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 21); //窗设置为21

4)自适应阈值化中的阈值完全是由你所选择的邻域所确定的,如果你所选择的邻域非常小(比如3×3),那么很显然阈值的“自适应程度”就非常高,这在结果图像中就表现为边缘检测的效果。如果邻域选择的比较大(比如31×31),那么阈值的“自适应程度”就比较低,这在结果图像中就表现为二值化的效果。
    我目前在做细胞图像分割,在HSV色彩系统中对V通道用自适应阈值化,然后在叠加HS通道处理结果,取得了非常好的效果。

没有万能的二值化方法,具体问题具体分析,自适应二值化对于光照不均的文字,条码等,效果很好。窗口大小选择,考虑被检测物体尺寸。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV中,图像区域划分可以通过图像阈值化分割来实现。图像阈值化分割是一种基本操作,它按照灰度级对像素集合进行划分,使得每个子集形成一个与现实景物相对应的区域。这种分割方法计算简单、运算效率较高、速度快、性能较稳定,因此成为图像分割中最基本和应用最广泛的技术。 在OpenCV中,有两种常用的图像阈值化分割方法:全局阈值和自适应阈值。全局阈值方法将整个图像划分为两个区域,一个区域是目标,另一个区域是背景。该方法适用于目标和背景占据不同灰度级范围的图像。自适应阈值方法根据图像的局部特征来确定阈值,可以处理目标和背景灰度变化较大的图像。在自适应阈值方法中,使用Otsu算法(大律法或最大类间方差法)来计算全局阈值,并根据该阈值进行二值化。 在OpenCV中,可以使用cvThreshold函数来进行全局阈值化分割。该函数接收灰度图像作为输入,并将像素值小于阈值的像素设为0,大于等于阈值的像素设为最大值。具体调用方式为cvThreshold(src, dst, threshold, max_value, threshold_type),其中src是输入图像,dst是输出图像,threshold是阈值,max_value是最大值,threshold_type是阈值类型。 另外,OpenCV还提供了cvAdaptiveThreshold函数来进行自适应阈值化分割。该函数首先使用Otsu算法计算出全局阈值,然后根据该阈值进行二值化cvAdaptiveThreshold函数的调用方式为cvAdaptiveThreshold(src, dst, max_value, adaptive_method, threshold_type, block_size, param1),其中src是输入图像,dst是输出图像,max_value是最大值,adaptive_method是自适应方法(可选参数,默认为CV_ADAPTIVE_THRESH_MEAN_C),threshold_type是阈值类型(可选参数,默认为CV_THRESH_BINARY),block_size是块大小(可选参数,默认为3),param1是参数(可选参数,默认为5)。 综上所述,在OpenCV中,可以使用图像阈值化分割方法进行图像区域划分。具体使用全局阈值还是自适应阈值取决于图像的特点和需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Opencv 图像分割: 阈值化分割 区域分割 边缘分割](https://blog.csdn.net/keen_zuxwang/article/details/72765070)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值