cvAdaptiveThreshold

OpenCV中图像自适应阈值二值化函数:

void cvAdaptiveThreshold(

CvArr* src,

CvArr* dst,

double max_val,

int adaptive_method = CV_ADAPTIVE_THRESH_MEAN_C,

int threshold_type = CV_THRESH_BINARY,

int block_size = 3,

double param1 = 5

);

threshold_type=CV_THRESH_BINARY:
dst(x,y) = max_value, if src(x,y)>T(x,y)
           0, otherwise

threshold_type=CV_THRESH_BINARY_INV:
dst(x,y) = 0, if src(x,y)>T(x,y)
           max_value, otherwise

输入图像为 src , 输出为 dst

所以这个方法大概就是 localized 的 cvThreshold 版本了,参数的理解:

block_size : 既然要局部化,那肯定要设定多大的 block ,在这个区域内进行计算,只能设定为奇数,这跟一般的OpenCV中的窗口参数是一样的,因为这样可以保持对称性;

 adaptive_method:这个呢就是我们在这个block中计算均值啊std啊什么的所要加的窗了,顾名思义,默认应该是均值,还有一个是加高斯窗的;个人感觉效果都差不多,没有什么本质区别。

threshold_type:这是啥?看上面那个代码嘛,看到没有,两个选项,基本上效果出来是相反的(黑白色),懂了吗??仔细看看

max_value:我之前以为是什么阈值,其实并不是。它是满足条件后的赋值值,比如说你设置为255,那么这个点满足条件后: src( x , y ) > T( x , y ),那么这个点呢就设定为255或者0,根据threshold_type来定,懂了吗?姐

param1:那么就剩下这么一个参数了,  

    对方法 CV_ADAPTIVE_THRESH_MEAN_C,先求出块中的均值,再减掉param1

    对方法 CV_ADAPTIVE_THRESH_GAUSSIAN_C ,先求出块中的加权和(gaussian), 再减掉param1

这个参数感觉是调节这个背景色和前景色比例的问题的,然后据网上说:

T( x , y ) = mean( x , y ) - param1

看到这个式子了吗,试想一下,如果我们拿到一幅图像,是白色背景(趋近255),黑色的线条(≈0),当然这是理想情况,那这种情况下,在一个localized block里面,可以想象由于黑色的部分很少,线条嘛。所以它的mean 可能值是比较大的(可能达到200都不一定),这样呢,可以考虑减去一个 param1 就可以拉低这个T,使得我们在二值化时分割性更加好;反之,黑色背景,白色线条可以考虑减去一个负数的 param1??

 

当然!我觉得这都不是好的方案,只是一个统一性的预处理的东西,而且对参数相当敏感。

but right now we should live with it!

 

 

public static void cvAdaptiveThreshold(
	IntPtr src,
	IntPtr dst,
	double maxValue,
	ADAPTIVE_THRESHOLD_TYPE adaptiveType,
	THRESH thresholdType,
	int blockSize,
	double param1
)

16165636_azT2.gif Parameters

src (IntPtr)

Source array (single-channel, 8-bit of 32-bit floating point).

dst (IntPtr)

Destination array; must be either the same type as src or 8-bit.

maxValue (Double)

Maximum value to use with CV_THRESH_BINARY and CV_THRESH_BINARY_INV thresholding types

adaptiveType (ADAPTIVE_THRESHOLD_TYPE)

Adaptive_method

thresholdType (THRESH)

Thresholding type

blockSize (Int32)

The size of a pixel neighborhood that is used to calculate a threshold value for the pixel: 3, 5, 7, ...

param1 (Double)

Constant subtracted from mean or weighted mean. It may be negative.

转载于:https://my.oschina.net/JohnHush/blog/807251

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值