图像处理OpenCV算法03

6、阈值分割

      阈值分割主要是根据灰度值信息提取前景,所以对前景物体有较强对比度的图像的分割特别有用。在OpenCV中通过调用cv2.threshold()实现阈值分割。

 

      全阈值分割:将灰度值大于thresh的像素设为白色,小于或等于thresh的像素设为黑色;反之也行,只不过表现形式不同。

          

      局部阈值分割:针对输入矩阵的每一个位置的值都有相对应的阈值,这些阈值构成了和输入矩阵同等尺寸的矩阵thresh。

        

      熵阈值计算:通过计算所有分割阈值下的图像总熵,找到最大的熵,将最大熵对应的分割阈值作为最终的阈值。

首先计算图像I的累加概率直方图,又称零阶累积矩,记为:

        

      计算各个灰度级的熵,记为:

        

      计算使f(t)=f1(t)+f2(t)最大化的t的值,该值即为得到的阈值。

        
      Otsu阈值分割:

      首先计算灰度直方图的零阶累积矩,

        

      计算灰度直方图的一阶累积矩,

        

      计算图像I的总体灰度平均值mean,其实就是k=255时的一阶累积矩,mean=oneCumuMoment(255)

      计算每一个灰度级作为阈值时,前景区域的平均灰度、前景区域的平均灰度与整幅图像的平均灰度的方差。对方差的衡量采用以下度量:

        

      找到上述最大的,然后对应的k即为Otsu自动选取的阈值,

         

      自适应阈值:

      首先对图像进行平滑,平滑的结果记为,平滑一般采用高斯平滑,均值平滑,中值平滑。

通过自适应矩阵

        

        一般令ratio=0.15。


7、形态学处理:

      腐蚀:,结构元S与图像做与运算,如果都为1,则结果为1,否则为0。腐蚀的结果是图像较小一圈。在OpenCV中通过cv2.erode()实现。

      膨胀:,结构元S与图像做或运算,如果有一个为1,则结果为1,否则为0(都为0,结果为0)。膨胀的结果是图像扩大一圈。在OpenCV中通过cv2.dilate()实现。

      开运算:,先腐蚀在膨胀的过程。它具有消除亮度较高的细小区域、在纤细点处分离物体,对于较大物体可以在不明显改变其面积的情况下平滑其边界等作用。

      闭运算:,先膨胀在腐蚀的过程。它具有填充白色物体内细小黑色空洞的区域、连接临近物体、同一个结构元、多次迭代处理,也可以在不明显改变其面积的情况下平滑其边界等作用。

      顶帽变换:,图像减去开运算的结果。它可以消除暗背景下的较量其区域,如果用原图减去开运算结果,就可以得到原图中灰度较亮的区域,可以用来校正不均匀光照。

      底帽变换:,图像减去闭运算的结果。它可以删除较高亮度背景下的较暗区域,那么用原图减去闭运算结果,可以得到原图中灰度较暗的区域。

      形态学梯度:,膨胀后的图像减去腐蚀后的图像,从而提取物体的边界。

      以上5中形态学变换的功能实现可以通过调用OpenCV中的cv2.morphologyWx()实现。依次输入的是图像矩阵,选择何种形态学运算,形态学处理的结构元,结构元的锚点,迭代次数。不同的结构元选取,处理后的形态学效果不同。


猜你喜欢

转载自blog.csdn.net/zx520113/article/details/80889038