adaptiveThreshold(自适应阈值)

匿名 (未验证) 提交于 2019-12-02 23:56:01

 

 

void adaptiveThreshold(InputArray src,      OutputArray dst,     double maxValue,      int adaptiveMethod,     int thresholdType,      int blockSize,      double C);

函数功能

对一幅灰度图像进行二值化,该函数支持就地操作,该函数用下面的公式对一幅灰度图像进行二值化:

(1)正向二值化,THRESH_BINARY

 
 

(2)反向二值化,THRESH_BINARY_INV

 

参数详解

  • 第一个参数,InputArray src,原图,即输入图像,是一个8位单通道的图像;

  • 第二个参数,OutputArray dst,目标图像,与原图像具有同样的尺寸与类型;

  • 第三个参数,double maxValue,分配给满足条件的像素的非零值;

  • 第四个参数,int adaptiveMethod,自适应阈值的方法,通常有以下几种方法;

    • ADAPTIVE_THRESH_MEAN_C,阈值T(x,y)是(x,y)减去C的Blocksize×Blocksize邻域的平均值。
    • ADAPTIVE_THRESH_GAUSSIAN_C ,阈值T(x,y)是(x,y)减去C的Blocksize×Blocksize邻域的加权和(与高斯相关),默认sigma(标准差)用于指定的Blocksize;具体的情况可以参见getGaussianKernel函数;
  • 第五个参数,int thresholdType,阈值的类型必须是以下两种类型,
    • THRESH_BINARY,正向二值化
    • THRESH_BINARY_INV ,反向二值化
  • 第六个参数,int blockSize,像素邻域的大小,用来计算像素的阈值,blockSize必须为奇数,例如,3,5,7等等;

  • 第七个参数,double C,从平均数或加权平均数减去常量。通常,它是正的,但也可能是零或负数。

阈值类型详解

 

(1)THRESH_BINARY

正向二值化,如果当前的像素值大于设置的阈值(thresh),则将该点的像素值设置为maxval;否则,将该点的像素值设置为0;具体的公式如下

 

(2)THRESH_BINARY_INV

反向二值化,如果当前的像素值大于设置的阈值(thresh),则将该点的像素值设置为0;否则,将该点的像素值设置为maxval,具体的公式如下

 

(3)THRESH_TRUNC

如果当前的像素值大于设置的阈值(thresh),则将该点的像素值设置为threshold;否则,将该点的像素值不变,具体的公式如下

 

(4)THRESH_TOZERO 

如果当前的像素值大于设置的阈值(thresh),则将该点的像素值不变;否则,将该点的像素值设置为0,具体的公式如下

 

(5)THRESH_TOZERO_INV

如果当前的像素值大于设置的阈值(thresh),则将该点的像素值设置为0;否则,将该点的像素值不变,具体的公式如下

(6)THRESH_MASK

(7)THRESH_OTSU,使用Otsu算法选择最佳阈值。

(8)THRESH_TRIANGLE,使用三角算法选择最佳阈值。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!